@@ -17,7 +17,7 @@ use super::select::{
1717 BindPlanHaving , BindPlanProjected , BindPlanSelectList , BindPlanStart , JoinConstraintInput ,
1818 TableAliasInput ,
1919} ;
20- use super :: { is_valid_identifier, Binder , QueryBindStep , SetOperatorKind } ;
20+ use super :: { is_valid_identifier, with_query_bind_step , Binder , QueryBindStep , SetOperatorKind } ;
2121#[ cfg( feature = "copy" ) ]
2222use crate :: binder:: copy:: { ExtSource , FileFormat } ;
2323use crate :: catalog:: { ColumnCatalog , ColumnDesc , ColumnRef , TableName } ;
@@ -1376,12 +1376,11 @@ where
13761376 self ,
13771377 projection : Vec < SelectItem > ,
13781378 ) -> Result < BindPlanSelectList < ' s , ' a , ' b , ' arena , T , A > , DatabaseError > {
1379- let select_bind_step = self . binder . context . step_now ( ) ;
1380- self . binder . context . step ( QueryBindStep :: Project ) ;
1381- let select_list = self . binder . normalize_select_item ( projection, self . arena ) ?;
1382- self . binder . context . step ( select_bind_step) ;
1379+ let select_list = with_query_bind_step ! ( self . binder, QueryBindStep :: Project , {
1380+ self . binder. normalize_select_item( projection, self . arena) ?
1381+ } ) ;
13831382
1384- Ok ( self . select_list ( select_list) )
1383+ Ok ( self . select_list ( select_list? ) )
13851384 }
13861385}
13871386
@@ -1395,8 +1394,9 @@ where
13951394 selection : Option < Expr > ,
13961395 ) -> Result < BindPlanFiltered < ' s , ' a , ' b , ' arena , T , A > , DatabaseError > {
13971396 let predicate = if let Some ( predicate) = selection {
1398- self . binder . context . step ( QueryBindStep :: Where ) ;
1399- Some ( self . binder . bind_expr ( predicate, self . arena ) ?)
1397+ Some ( with_query_bind_step ! ( self . binder, QueryBindStep :: Where , {
1398+ self . binder. bind_expr( predicate, self . arena) ?
1399+ } ) ?)
14001400 } else {
14011401 None
14021402 } ;
@@ -1416,34 +1416,42 @@ where
14161416 having : Option < Expr > ,
14171417 orderby : Option < Vec < OrderByExpr > > ,
14181418 ) -> Result < BindPlanAggregated < ' s , ' a , ' b , ' arena , T , A > , DatabaseError > {
1419- let group_by = match group_by {
1420- GroupByExpr :: Expressions ( group_by_exprs, modifiers) => {
1421- if !modifiers. is_empty ( ) {
1419+ let group_by = with_query_bind_step ! ( self . binder, QueryBindStep :: Agg , {
1420+ match group_by {
1421+ GroupByExpr :: Expressions ( group_by_exprs, modifiers) => {
1422+ if !modifiers. is_empty( ) {
1423+ return Err ( DatabaseError :: UnsupportedStmt (
1424+ "GROUP BY modifiers are not supported" . to_string( ) ,
1425+ ) ) ;
1426+ }
1427+ group_by_exprs
1428+ . into_iter( )
1429+ . map( |expr| self . binder. bind_expr( expr, self . arena) )
1430+ . collect:: <Result <Vec <_>, DatabaseError >>( ) ?
1431+ }
1432+ GroupByExpr :: All ( _) => {
14221433 return Err ( DatabaseError :: UnsupportedStmt (
1423- "GROUP BY modifiers are not supported" . to_string ( ) ,
1424- ) ) ;
1434+ "GROUP BY ALL is not supported" . to_string( ) ,
1435+ ) )
14251436 }
1426- group_by_exprs
1427- . into_iter ( )
1428- . map ( |expr| self . binder . bind_expr ( expr, self . arena ) )
1429- . collect :: < Result < Vec < _ > , DatabaseError > > ( ) ?
14301437 }
1431- GroupByExpr :: All ( _) => {
1432- return Err ( DatabaseError :: UnsupportedStmt (
1433- "GROUP BY ALL is not supported" . to_string ( ) ,
1434- ) )
1435- }
1436- } ;
1438+ } ) ?;
14371439 let having = having
1438- . map ( |having| self . binder . bind_expr ( having, self . arena ) )
1440+ . map ( |having| {
1441+ with_query_bind_step ! ( self . binder, QueryBindStep :: Having , {
1442+ self . binder. bind_expr( having, self . arena) ?
1443+ } )
1444+ } )
14391445 . transpose ( ) ?;
14401446 self . aggregate ( group_by, having, orderby, |binder, arena, orderby| {
14411447 let OrderByExpr { expr, options, .. } = orderby;
1442- Ok ( SortField :: new (
1443- binder. bind_expr ( expr, arena) ?,
1444- options. asc . is_none_or ( |asc| asc) ,
1445- options. nulls_first . unwrap_or ( false ) ,
1446- ) )
1448+ with_query_bind_step ! ( binder, QueryBindStep :: Sort , {
1449+ SortField :: new(
1450+ binder. bind_expr( expr, arena) ?,
1451+ options. asc. is_none_or( |asc| asc) ,
1452+ options. nulls_first. unwrap_or( false ) ,
1453+ )
1454+ } )
14471455 } )
14481456 }
14491457}
@@ -2570,9 +2578,9 @@ impl<'a, 'parent, T: Transaction, A: AsRef<[(&'static str, DataValue)]>> Binder<
25702578 predicate : Expr ,
25712579 arena : & mut PlanArena ,
25722580 ) -> Result < LogicalPlan , DatabaseError > {
2573- self . context . step ( QueryBindStep :: Where ) ;
2574-
2575- let predicate = self . bind_expr ( predicate , arena ) ?;
2581+ let predicate = with_query_bind_step ! ( self , QueryBindStep :: Where , {
2582+ self . bind_expr ( predicate , arena ) ?
2583+ } ) ?;
25762584
25772585 self . bind_where_expr ( children, predicate, arena)
25782586 }
0 commit comments