@@ -67,14 +67,14 @@ TExprNode::TPtr FindMemberArg(TExprNode::TPtr input) {
6767 return TExprNode::TPtr ();
6868}
6969
70- TExprNode::TPtr BuildFilterLambdaFromConjuncts (TPositionHandle pos, TVector<TFilterInfo> conjuncts, TExprContext &ctx) {
70+ TExprNode::TPtr BuildFilterLambdaFromConjuncts (TPositionHandle pos, TVector<TFilterInfo> conjuncts, TExprContext &ctx, bool pgSyntax ) {
7171 auto arg = Build<TCoArgument>(ctx, pos).Name (" lambda_arg" ).Done ();
7272 TExprNode::TPtr lambda;
7373
7474 if (conjuncts.size () == 1 ) {
7575 auto filterInfo = conjuncts[0 ];
7676 auto body = ReplaceArg (filterInfo.FilterBody , arg.Ptr (), ctx);
77- if (!filterInfo.FromPg ) {
77+ if (pgSyntax && !filterInfo.FromPg ) {
7878 body = ctx.Builder (body->Pos ()).Callable (" FromPg" ).Add (0 , body).Seal ().Build ();
7979 }
8080
@@ -89,7 +89,7 @@ TExprNode::TPtr BuildFilterLambdaFromConjuncts(TPositionHandle pos, TVector<TFil
8989
9090 for (auto c : conjuncts) {
9191 auto body = ReplaceArg (c.FilterBody , arg.Ptr (), ctx);
92- if (!c.FromPg ) {
92+ if (pgSyntax && !c.FromPg ) {
9393 body = ctx.Builder (body->Pos ()).Callable (" FromPg" ).Add (0 , body).Seal ().Build ();
9494 }
9595 newConjuncts.push_back (ReplaceArg (body, arg.Ptr (), ctx));
@@ -176,9 +176,10 @@ bool TExtractJoinExpressionsRule::TestAndApply(std::shared_ptr<IOperator> &input
176176 predicate = predicate->Child (0 );
177177 }
178178
179- if (predicate->IsCallable (" PgResolvedOp" ) && predicate->Child (0 )->Content () == " =" ) {
180- auto leftSide = predicate->Child (2 );
181- auto rightSide = predicate->Child (3 );
179+ TExprNode::TPtr leftSide;
180+ TExprNode::TPtr rightSide;
181+
182+ if (TestAndExtractEqualityPredicate (predicate, leftSide, rightSide)) {
182183
183184 if (leftSide->IsCallable (" Member" ) && rightSide->IsCallable (" Member" )) {
184185 continue ;
@@ -489,7 +490,7 @@ std::shared_ptr<IOperator> TPushFilterRule::SimpleTestAndApply(const std::shared
489490 auto rightInput = join->GetRightInput ();
490491
491492 if (pushLeft.size ()) {
492- auto leftLambda = BuildFilterLambdaFromConjuncts (leftInput->Pos , pushLeft, ctx.ExprCtx );
493+ auto leftLambda = BuildFilterLambdaFromConjuncts (leftInput->Pos , pushLeft, ctx.ExprCtx , props. PgSyntax );
493494 leftInput = std::make_shared<TOpFilter>(leftInput, input->Pos , leftLambda);
494495 }
495496
@@ -504,14 +505,14 @@ std::shared_ptr<IOperator> TPushFilterRule::SimpleTestAndApply(const std::shared
504505 }
505506 }
506507 if (predicatesForRightSide.size ()) {
507- auto rightLambda = BuildFilterLambdaFromConjuncts (rightInput->Pos , pushRight, ctx.ExprCtx );
508+ auto rightLambda = BuildFilterLambdaFromConjuncts (rightInput->Pos , pushRight, ctx.ExprCtx , props. PgSyntax );
508509 rightInput = std::make_shared<TOpFilter>(rightInput, input->Pos , rightLambda);
509510 join->JoinKind = " Inner" ;
510511 } else {
511512 return input;
512513 }
513514 } else {
514- auto rightLambda = BuildFilterLambdaFromConjuncts (rightInput->Pos , pushRight, ctx.ExprCtx );
515+ auto rightLambda = BuildFilterLambdaFromConjuncts (rightInput->Pos , pushRight, ctx.ExprCtx , props. PgSyntax );
515516 rightInput = std::make_shared<TOpFilter>(rightInput, input->Pos , rightLambda);
516517 }
517518 }
@@ -524,7 +525,7 @@ std::shared_ptr<IOperator> TPushFilterRule::SimpleTestAndApply(const std::shared
524525 join->Children [1 ] = rightInput;
525526
526527 if (topLevelPreds.size ()) {
527- auto topFilterLambda = BuildFilterLambdaFromConjuncts (join->Pos , topLevelPreds, ctx.ExprCtx );
528+ auto topFilterLambda = BuildFilterLambdaFromConjuncts (join->Pos , topLevelPreds, ctx.ExprCtx , props. PgSyntax );
528529 output = std::make_shared<TOpFilter>(join, input->Pos , topFilterLambda);
529530 } else {
530531 output = join;
0 commit comments