@@ -10,21 +10,22 @@ use crate::{
1010 rewrite:: {
1111 analysis:: LogicalPlanAnalysis , rewriter:: Rewriter , AggregateFunctionExprDistinct ,
1212 AggregateFunctionExprFun , AggregateSplit , AggregateUDFExprFun , AliasExprAlias ,
13- AnyExprOp , BetweenExprNegated , BinaryExprOp , CastExprDataType , ChangeUserMemberValue ,
14- ColumnExprColumn , CubeScanAliasToCube , CubeScanLimit , CubeScanOffset ,
15- CubeScanUngrouped , CubeScanWrapped , DimensionName , EmptyRelationProduceOneRow ,
16- FilterMemberMember , FilterMemberOp , FilterMemberValues , FilterOpOp , InListExprNegated ,
17- JoinJoinConstraint , JoinJoinType , JoinLeftOn , JoinRightOn , LikeExprEscapeChar ,
18- LikeExprLikeType , LikeExprNegated , LikeType , LimitFetch , LimitSkip , LiteralExprValue ,
19- LiteralMemberRelation , LiteralMemberValue , LogicalPlanLanguage , MeasureName ,
20- MemberErrorError , OrderAsc , OrderMember , OuterColumnExprColumn ,
21- OuterColumnExprDataType , ProjectionAlias , ProjectionSplit , QueryParamIndex ,
22- ScalarFunctionExprFun , ScalarUDFExprFun , ScalarVariableExprDataType ,
23- ScalarVariableExprVariable , SegmentMemberMember , SortExprAsc , SortExprNullsFirst ,
24- TableScanFetch , TableScanProjection , TableScanSourceTableName , TableScanTableName ,
25- TableUDFExprFun , TimeDimensionDateRange , TimeDimensionGranularity , TimeDimensionName ,
26- TryCastExprDataType , UnionAlias , WindowFunctionExprFun , WindowFunctionExprWindowFrame ,
27- WrappedSelectAlias , WrappedSelectJoinJoinType , WrappedSelectLimit , WrappedSelectOffset ,
13+ AnyExprAll , AnyExprOp , BetweenExprNegated , BinaryExprOp , CastExprDataType ,
14+ ChangeUserMemberValue , ColumnExprColumn , CubeScanAliasToCube , CubeScanLimit ,
15+ CubeScanOffset , CubeScanUngrouped , CubeScanWrapped , DimensionName ,
16+ EmptyRelationProduceOneRow , FilterMemberMember , FilterMemberOp , FilterMemberValues ,
17+ FilterOpOp , InListExprNegated , InSubqueryNegated , JoinJoinConstraint , JoinJoinType ,
18+ JoinLeftOn , JoinRightOn , LikeExprEscapeChar , LikeExprLikeType , LikeExprNegated ,
19+ LikeType , LimitFetch , LimitSkip , LiteralExprValue , LiteralMemberRelation ,
20+ LiteralMemberValue , LogicalPlanLanguage , MeasureName , MemberErrorError , OrderAsc ,
21+ OrderMember , OuterColumnExprColumn , OuterColumnExprDataType , ProjectionAlias ,
22+ ProjectionSplit , QueryParamIndex , ScalarFunctionExprFun , ScalarUDFExprFun ,
23+ ScalarVariableExprDataType , ScalarVariableExprVariable , SegmentMemberMember ,
24+ SortExprAsc , SortExprNullsFirst , SubqueryTypes , TableScanFetch , TableScanProjection ,
25+ TableScanSourceTableName , TableScanTableName , TableUDFExprFun , TimeDimensionDateRange ,
26+ TimeDimensionGranularity , TimeDimensionName , TryCastExprDataType , UnionAlias ,
27+ WindowFunctionExprFun , WindowFunctionExprWindowFrame , WrappedSelectAlias ,
28+ WrappedSelectJoinJoinType , WrappedSelectLimit , WrappedSelectOffset ,
2829 WrappedSelectSelectType , WrappedSelectType , WrappedSelectUngrouped ,
2930 } ,
3031 } ,
@@ -221,11 +222,18 @@ impl LogicalPlanToLanguageConverter {
221222 graph. add ( LogicalPlanLanguage :: LiteralExpr ( [ value] ) )
222223 }
223224 }
224- Expr :: AnyExpr { left, op, right } => {
225+ Expr :: AnyExpr {
226+ left,
227+ op,
228+ right,
229+ all,
230+ } => {
225231 let left = Self :: add_expr_replace_params ( graph, left, query_params) ?;
226232 let op = add_expr_data_node ! ( graph, op, AnyExprOp ) ;
227233 let right = Self :: add_expr_replace_params ( graph, right, query_params) ?;
228- graph. add ( LogicalPlanLanguage :: AnyExpr ( [ left, op, right] ) )
234+ let all = add_expr_data_node ! ( graph, all, AnyExprAll ) ;
235+
236+ graph. add ( LogicalPlanLanguage :: AnyExpr ( [ left, op, right, all] ) )
229237 }
230238 Expr :: BinaryExpr { left, op, right } => {
231239 let left = Self :: add_expr_replace_params ( graph, left, query_params) ?;
@@ -414,6 +422,17 @@ impl LogicalPlanToLanguageConverter {
414422 let negated = add_expr_data_node ! ( graph, negated, InListExprNegated ) ;
415423 graph. add ( LogicalPlanLanguage :: InListExpr ( [ expr, list, negated] ) )
416424 }
425+ Expr :: InSubquery {
426+ expr,
427+ subquery,
428+ negated,
429+ } => {
430+ let expr = Self :: add_expr_replace_params ( graph, expr, query_params) ?;
431+ let subquery = Self :: add_expr_replace_params ( graph, subquery, query_params) ?;
432+ let negated = add_expr_data_node ! ( graph, negated, InSubqueryNegated ) ;
433+
434+ graph. add ( LogicalPlanLanguage :: InSubquery ( [ expr, subquery, negated] ) )
435+ }
417436 Expr :: Wildcard => graph. add ( LogicalPlanLanguage :: WildcardExpr ( [ ] ) ) ,
418437 Expr :: GetIndexedField { expr, key } => {
419438 let expr = Self :: add_expr_replace_params ( graph, expr, query_params) ?;
@@ -548,8 +567,9 @@ impl LogicalPlanToLanguageConverter {
548567 self . add_logical_plan_replace_params ( node. input . as_ref ( ) , query_params) ?;
549568 let subqueries =
550569 add_plan_list_node ! ( self , node. subqueries, query_params, SubquerySubqueries ) ;
570+ let types = add_data_node ! ( self , node. types, SubqueryTypes ) ;
551571 self . graph
552- . add ( LogicalPlanLanguage :: Subquery ( [ input, subqueries] ) )
572+ . add ( LogicalPlanLanguage :: Subquery ( [ input, subqueries, types ] ) )
553573 }
554574 LogicalPlan :: TableUDFs ( node) => {
555575 let expr =
@@ -818,7 +838,13 @@ pub fn node_to_expr(
818838 let left = Box :: new ( to_expr ( params[ 0 ] . clone ( ) ) ?) ;
819839 let op = match_data_node ! ( node_by_id, params[ 1 ] , AnyExprOp ) ;
820840 let right = Box :: new ( to_expr ( params[ 2 ] . clone ( ) ) ?) ;
821- Expr :: AnyExpr { left, op, right }
841+ let all = match_data_node ! ( node_by_id, params[ 3 ] , AnyExprAll ) ;
842+ Expr :: AnyExpr {
843+ left,
844+ op,
845+ right,
846+ all,
847+ }
822848 }
823849 LogicalPlanLanguage :: BinaryExpr ( params) => {
824850 let left = Box :: new ( to_expr ( params[ 0 ] . clone ( ) ) ?) ;
@@ -1006,6 +1032,16 @@ pub fn node_to_expr(
10061032 "QueryParam can't be evaluated as an Expr node" . to_string ( ) ,
10071033 ) ) ;
10081034 }
1035+ LogicalPlanLanguage :: InSubquery ( params) => {
1036+ let expr = Box :: new ( to_expr ( params[ 0 ] . clone ( ) ) ?) ;
1037+ let subquery = Box :: new ( to_expr ( params[ 1 ] . clone ( ) ) ?) ;
1038+ let negated = match_data_node ! ( node_by_id, params[ 2 ] , InSubqueryNegated ) ;
1039+ Expr :: InSubquery {
1040+ expr,
1041+ subquery,
1042+ negated,
1043+ }
1044+ }
10091045 x => panic ! ( "Unexpected expression node: {:?}" , x) ,
10101046 } )
10111047}
@@ -1179,8 +1215,9 @@ impl LanguageToLogicalPlanConverter {
11791215 . into_iter ( )
11801216 . map ( |n| self . to_logical_plan ( n) )
11811217 . collect :: < Result < Vec < _ > , _ > > ( ) ?;
1218+ let types = match_data_node ! ( node_by_id, params[ 2 ] , SubqueryTypes ) ;
11821219 LogicalPlanBuilder :: from ( input)
1183- . subquery ( subqueries) ?
1220+ . subquery ( subqueries, types ) ?
11841221 . build ( ) ?
11851222 }
11861223 LogicalPlanLanguage :: TableUDFs ( params) => {
0 commit comments