Skip to content

Commit

Permalink
fix(expr): cast untyped start and step when inferring type for `g…
Browse files Browse the repository at this point in the history
…enerate_series` (#18786)

Signed-off-by: Richard Chien <[email protected]>
  • Loading branch information
stdrc authored Oct 9, 2024
1 parent 2478845 commit 81780be
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 1 deletion.
19 changes: 19 additions & 0 deletions e2e_test/batch/basic/generate_series.slt.part
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,22 @@ SELECT * FROM generate_series(0::numeric,10::numeric,'nan'::numeric);

statement error start value cannot be infinity
SELECT * FROM generate_series('-infinity'::numeric,'infinity'::numeric,'nan'::numeric);

# ------
# generate_series(timestamptz, timestamptz, interval) is not supported in batch mode

statement error Unsupported function
select * from generate_series(
'2024-06-21 17:36:00'::timestamptz,
now(),
interval '1 hour'
);

statement error Unsupported function
select * from generate_series(
'2024-06-21 17:36:00',
now(),
'1 hour'
);

# ------
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@
- logical_plan
- optimized_logical_plan_for_stream
- stream_plan
- sql: |
select * from generate_series(
'2024-06-21 17:36:00',
now(),
'1 hour'
);
expected_outputs:
- logical_plan
- optimized_logical_plan_for_stream
- stream_plan
- sql: |
select * from generate_series(
'2024-06-21 17:36:00'::timestamp, -- `timestamp` type is not supported
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,19 @@
stream_plan: |-
StreamMaterialize { columns: [generate_series], stream_key: [generate_series], pk_columns: [generate_series], pk_conflict: NoCheck, watermark_columns: [generate_series] }
└─StreamNow { output: [ts] }
- sql: |
select * from generate_series(
'2024-06-21 17:36:00',
now(),
'1 hour'
);
logical_plan: |-
LogicalProject { exprs: [generate_series] }
└─LogicalTableFunction { table_function: GenerateSeries('2024-06-21 17:36:00':Varchar::Timestamptz, Now, '01:00:00':Interval) }
optimized_logical_plan_for_stream: 'LogicalNow { output: [ts] }'
stream_plan: |-
StreamMaterialize { columns: [generate_series], stream_key: [generate_series], pk_columns: [generate_series], pk_conflict: NoCheck, watermark_columns: [generate_series] }
└─StreamNow { output: [ts] }
- sql: |
select * from generate_series(
'2024-06-21 17:36:00'::timestamp, -- `timestamp` type is not supported
Expand Down
10 changes: 9 additions & 1 deletion src/frontend/src/expr/type_inference/func.rs
Original file line number Diff line number Diff line change
Expand Up @@ -704,10 +704,18 @@ fn infer_type_for_special_table_function(
) -> Result<Option<DataType>> {
match func_type {
PbTableFuncType::GenerateSeries => {
if inputs.len() < 3 {
if inputs.len() < 3 || !inputs[1].is_now() {
// let signature map handle this
return Ok(None);
}
// Now we are inferring type for `generate_series(start, now(), step)`, which will
// be further handled by `GenerateSeriesWithNowRule`.
if inputs[0].is_untyped() {
inputs[0].cast_implicit_mut(DataType::Timestamptz)?;
}
if inputs[2].is_untyped() {
inputs[2].cast_implicit_mut(DataType::Interval)?;
}
match (
inputs[0].return_type(),
inputs[1].return_type(),
Expand Down

0 comments on commit 81780be

Please sign in to comment.