diff --git a/datafusion/sql/src/expr/function.rs b/datafusion/sql/src/expr/function.rs index 73de4fa439071..3934d6701c635 100644 --- a/datafusion/sql/src/expr/function.rs +++ b/datafusion/sql/src/expr/function.rs @@ -90,6 +90,9 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { let partition_by = window .partition_by .into_iter() + // ignore window spec PARTITION BY for scalar values + // as they do not change and thus do not generate new partitions + .filter(|e| !matches!(e, sqlparser::ast::Expr::Value { .. },)) .map(|e| self.sql_expr_to_logical_expr(e, schema, planner_context)) .collect::>>()?; let mut order_by = self.order_by_to_sort_expr( diff --git a/datafusion/sqllogictest/test_files/window.slt b/datafusion/sqllogictest/test_files/window.slt index 6198209aaac58..864f7dc0a47db 100644 --- a/datafusion/sqllogictest/test_files/window.slt +++ b/datafusion/sqllogictest/test_files/window.slt @@ -3794,8 +3794,36 @@ select a, 1 1 2 1 +# support scalar value in ORDER BY query I select rank() over (order by 1) rnk from (select 1 a union all select 2 a) x ---- 1 1 + +# support scalar value in both ORDER BY and PARTITION BY, RANK function +# TODO: fix the test, some issue in RANK +#query IIIIII +#select rank() over (partition by 1 order by 1) rnk, +# rank() over (partition by a, 1 order by 1) rnk1, +# rank() over (partition by a, 1 order by a, 1) rnk2, +# rank() over (partition by 1) rnk3, +# rank() over (partition by null) rnk4, +# rank() over (partition by 1, null, a) rnk5 +#from (select 1 a union all select 2 a) x +#---- +#1 1 1 1 1 1 +#1 1 1 1 1 1 + +# support scalar value in both ORDER BY and PARTITION BY, ROW_NUMBER function +query IIIIII +select row_number() over (partition by 1 order by 1) rn, + row_number() over (partition by a, 1 order by 1) rn1, + row_number() over (partition by a, 1 order by a, 1) rn2, + row_number() over (partition by 1) rn3, + row_number() over (partition by null) rn4, + row_number() over (partition by 1, null, a) rn5 +from (select 1 a union all select 2 a) x; +---- +1 1 1 1 1 1 +2 1 1 2 2 1 \ No newline at end of file