@@ -19,7 +19,7 @@ use crate::planner::{ContextProvider, PlannerContext, SqlToRel};
1919use datafusion_common:: {
2020 not_impl_err, plan_datafusion_err, plan_err, Column , DFSchema , Result ,
2121} ;
22- use datafusion_expr:: expr:: { OrderByExprs , Sort } ;
22+ use datafusion_expr:: expr:: Sort ;
2323use datafusion_expr:: { Expr , SortExpr } ;
2424use sqlparser:: ast:: {
2525 Expr as SQLExpr , OrderByExpr , OrderByOptions , Value , ValueWithSpan ,
@@ -41,7 +41,7 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
4141 /// If false, interpret numeric literals as constant values.
4242 pub ( crate ) fn order_by_to_sort_expr (
4343 & self ,
44- order_by_exprs : OrderByExprs ,
44+ order_by_exprs : Vec < OrderByExpr > ,
4545 input_schema : & DFSchema ,
4646 planner_context : & mut PlannerContext ,
4747 literal_to_column : bool ,
@@ -72,62 +72,48 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
7272 Sort :: new ( expr, asc, nulls_first)
7373 } ;
7474
75- match order_by_exprs {
76- OrderByExprs :: OrderByExprVec ( expressions) => {
77- for e in expressions {
78- let OrderByExpr {
79- expr,
80- options : OrderByOptions { asc, nulls_first } ,
81- with_fill,
82- } = e;
75+ for order_by_expr in order_by_exprs {
76+ let OrderByExpr {
77+ expr,
78+ options : OrderByOptions { asc, nulls_first } ,
79+ with_fill,
80+ } = order_by_expr;
8381
84- if let Some ( with_fill) = with_fill {
85- return not_impl_err ! (
86- "ORDER BY WITH FILL is not supported: {with_fill}"
87- ) ;
88- }
82+ if let Some ( with_fill) = with_fill {
83+ return not_impl_err ! ( "ORDER BY WITH FILL is not supported: {with_fill}" ) ;
84+ }
8985
90- let expr = match expr {
91- SQLExpr :: Value ( ValueWithSpan {
92- value : Value :: Number ( v, _) ,
93- span : _,
94- } ) if literal_to_column => {
95- let field_index = v
96- . parse :: < usize > ( )
97- . map_err ( |err| plan_datafusion_err ! ( "{}" , err) ) ?;
86+ let expr = match expr {
87+ SQLExpr :: Value ( ValueWithSpan {
88+ value : Value :: Number ( v, _) ,
89+ span : _,
90+ } ) if literal_to_column => {
91+ let field_index = v
92+ . parse :: < usize > ( )
93+ . map_err ( |err| plan_datafusion_err ! ( "{}" , err) ) ?;
9894
99- if field_index == 0 {
100- return plan_err ! (
101- "Order by index starts at 1 for column indexes"
102- ) ;
103- } else if input_schema. fields ( ) . len ( ) < field_index {
104- return plan_err ! (
105- "Order by column out of bounds, specified: {}, max: {}" ,
106- field_index,
107- input_schema. fields( ) . len( )
108- ) ;
109- }
95+ if field_index == 0 {
96+ return plan_err ! (
97+ "Order by index starts at 1 for column indexes"
98+ ) ;
99+ } else if input_schema. fields ( ) . len ( ) < field_index {
100+ return plan_err ! (
101+ "Order by column out of bounds, specified: {}, max: {}" ,
102+ field_index,
103+ input_schema. fields( ) . len( )
104+ ) ;
105+ }
110106
111- Expr :: Column ( Column :: from (
112- input_schema. qualified_field ( field_index - 1 ) ,
113- ) )
114- }
115- e => self . sql_expr_to_logical_expr (
116- e,
117- order_by_schema,
118- planner_context,
119- ) ?,
120- } ;
121- sort_expr_vec. push ( make_sort_expr ( expr, asc, nulls_first) ) ;
107+ Expr :: Column ( Column :: from (
108+ input_schema. qualified_field ( field_index - 1 ) ,
109+ ) )
122110 }
123- }
124- OrderByExprs :: All { exprs, options } => {
125- let OrderByOptions { asc, nulls_first } = options;
126- for expr in exprs {
127- sort_expr_vec. push ( make_sort_expr ( expr, asc, nulls_first) ) ;
111+ e => {
112+ self . sql_expr_to_logical_expr ( e, order_by_schema, planner_context) ?
128113 }
129- }
130- } ;
114+ } ;
115+ sort_expr_vec. push ( make_sort_expr ( expr, asc, nulls_first) ) ;
116+ }
131117
132118 Ok ( sort_expr_vec)
133119 }
0 commit comments