From fbef81b6698c57382a6833e905fcdf9377954ef3 Mon Sep 17 00:00:00 2001 From: morrySnow Date: Thu, 24 Aug 2023 12:52:41 +0800 Subject: [PATCH] [opt](Nereids) remove between expression to simplify planner --- .../glue/translator/ExpressionTranslator.java | 6 - .../nereids/parser/LogicalPlanBuilder.java | 8 +- .../expression/ExpressionNormalization.java | 2 - .../rules/BetweenToCompoundRule.java | 47 ------- .../rules/FoldConstantRuleOnBE.java | 5 - .../expression/rules/FunctionBinder.java | 9 -- .../nereids/trees/expressions/Between.java | 124 ------------------ .../visitor/ExpressionVisitor.java | 5 - .../doris/nereids/util/TypeCoercionUtils.java | 28 ---- .../expression/ExpressionRewriteTest.java | 11 -- .../expressions/ExpressionEqualsTest.java | 8 -- .../expressions/ExpressionParserTest.java | 7 +- .../shape/query10.out | 2 +- .../shape/query16.out | 2 +- .../shape/query28.out | 4 +- .../shape/query58.out | 2 +- .../shape/query66.out | 4 +- .../shape/query82.out | 2 +- .../shape/query94.out | 2 +- .../shape/query95.out | 2 +- 20 files changed, 16 insertions(+), 264 deletions(-) delete mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToCompoundRule.java delete mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java index 7b5a13e73e2078..0244a80c2a6669 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java @@ -49,7 +49,6 @@ import org.apache.doris.nereids.trees.expressions.Alias; import org.apache.doris.nereids.trees.expressions.And; import org.apache.doris.nereids.trees.expressions.AssertNumRowsElement; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.BinaryArithmetic; import org.apache.doris.nereids.trees.expressions.CaseWhen; import org.apache.doris.nereids.trees.expressions.Cast; @@ -281,11 +280,6 @@ public Expr visitNullLiteral(NullLiteral nullLiteral, PlanTranslatorContext cont return nullLit; } - @Override - public Expr visitBetween(Between between, PlanTranslatorContext context) { - throw new RuntimeException("Unexpected invocation"); - } - @Override public Expr visitAnd(And and, PlanTranslatorContext context) { return new org.apache.doris.analysis.CompoundPredicate( diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 47c5796e3bbd98..120c5575b67238 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -134,7 +134,6 @@ import org.apache.doris.nereids.properties.SelectHint; import org.apache.doris.nereids.trees.expressions.Add; import org.apache.doris.nereids.trees.expressions.And; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.BitAnd; import org.apache.doris.nereids.trees.expressions.BitNot; import org.apache.doris.nereids.trees.expressions.BitOr; @@ -1827,10 +1826,9 @@ private Expression withPredicate(Expression valueExpression, PredicateContext ct Expression outExpression; switch (ctx.kind.getType()) { case DorisParser.BETWEEN: - outExpression = new Between( - valueExpression, - getExpression(ctx.lower), - getExpression(ctx.upper) + outExpression = new And( + new GreaterThanEqual(valueExpression, getExpression(ctx.lower)), + new LessThanEqual(valueExpression, getExpression(ctx.upper)) ); break; case DorisParser.LIKE: diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java index 04b3c294b7071c..bd234204b2729f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionNormalization.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.rules.expression; import org.apache.doris.nereids.rules.expression.check.CheckCast; -import org.apache.doris.nereids.rules.expression.rules.BetweenToCompoundRule; import org.apache.doris.nereids.rules.expression.rules.DigitalMaskingConvert; import org.apache.doris.nereids.rules.expression.rules.FoldConstantRule; import org.apache.doris.nereids.rules.expression.rules.InPredicateDedup; @@ -46,7 +45,6 @@ public class ExpressionNormalization extends ExpressionRewrite { SupportJavaDateFormatter.INSTANCE, ReplaceVariableByLiteral.INSTANCE, NormalizeBinaryPredicatesRule.INSTANCE, - BetweenToCompoundRule.INSTANCE, InPredicateDedup.INSTANCE, InPredicateToEqualToRule.INSTANCE, SimplifyNotExprRule.INSTANCE, diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToCompoundRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToCompoundRule.java deleted file mode 100644 index 17092ff7e6aa51..00000000000000 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/BetweenToCompoundRule.java +++ /dev/null @@ -1,47 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package org.apache.doris.nereids.rules.expression.rules; - -import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule; -import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext; -import org.apache.doris.nereids.trees.expressions.And; -import org.apache.doris.nereids.trees.expressions.Between; -import org.apache.doris.nereids.trees.expressions.Expression; -import org.apache.doris.nereids.trees.expressions.GreaterThanEqual; -import org.apache.doris.nereids.trees.expressions.LessThanEqual; - -/** - * Rewrites BetweenPredicates into an equivalent conjunctive CompoundPredicate, - * "not between" is first processed by the BetweenToCompoundRule and then by the SimplifyNotExprRule. - * Examples: - * A BETWEEN X AND Y ==> A >= X AND A <= Y - */ -public class BetweenToCompoundRule extends AbstractExpressionRewriteRule { - - public static BetweenToCompoundRule INSTANCE = new BetweenToCompoundRule(); - - @Override - public Expression visitBetween(Between expr, ExpressionRewriteContext context) { - Expression compare = rewrite(expr.getCompareExpr(), context); - Expression lowerBound = rewrite(expr.getLowerBound(), context); - Expression upperBound = rewrite(expr.getUpperBound(), context); - Expression left = new GreaterThanEqual(compare, lowerBound); - Expression right = new LessThanEqual(compare, upperBound); - return new And(left, right); - } -} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java index f33f0fa2f2c2c8..f381f328fd52f6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java @@ -30,7 +30,6 @@ import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule; import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext; import org.apache.doris.nereids.trees.expressions.Alias; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.Cast; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.literal.Literal; @@ -126,10 +125,6 @@ private void collectConst(Expression expr, Map constMap, Map if (expr.isLiteral()) { return; } - // skip BetweenPredicate need to be rewrite to CompoundPredicate - if (expr instanceof Between) { - return; - } String id = idGenerator.getNextId().toString(); constMap.put(id, expr); Expr staleExpr = ExpressionTranslator.translate(expr, null); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FunctionBinder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FunctionBinder.java index e6c1af805b2021..69a3499630b0b0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FunctionBinder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FunctionBinder.java @@ -25,7 +25,6 @@ import org.apache.doris.nereids.rules.analysis.ArithmeticFunctionBinder; import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule; import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.BinaryArithmetic; import org.apache.doris.nereids.trees.expressions.BitNot; import org.apache.doris.nereids.trees.expressions.CaseWhen; @@ -234,14 +233,6 @@ public Expression visitInPredicate(InPredicate inPredicate, ExpressionRewriteCon return TypeCoercionUtils.processInPredicate(newInPredicate); } - @Override - public Expression visitBetween(Between between, ExpressionRewriteContext context) { - List rewrittenChildren = between.children().stream() - .map(e -> e.accept(this, context)).collect(Collectors.toList()); - Between newBetween = between.withChildren(rewrittenChildren); - return TypeCoercionUtils.processBetween(newBetween); - } - @Override public Expression visitInSubquery(InSubquery inSubquery, ExpressionRewriteContext context) { Expression newCompareExpr = inSubquery.getCompareExpr().accept(this, context); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java deleted file mode 100644 index 5f5df284cceba3..00000000000000 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Between.java +++ /dev/null @@ -1,124 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package org.apache.doris.nereids.trees.expressions; - -import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.trees.expressions.shape.TernaryExpression; -import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; -import org.apache.doris.nereids.types.BooleanType; -import org.apache.doris.nereids.types.DataType; - -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; - -import java.util.List; -import java.util.Objects; - -/** - * Between predicate expression. - */ -public class Between extends Expression implements TernaryExpression { - - private final Expression compareExpr; - private final Expression lowerBound; - private final Expression upperBound; - /** - * Constructor of ComparisonPredicate. - * - * @param compareExpr compare of expression - * @param lowerBound left child of between predicate - * @param upperBound right child of between predicate - */ - - public Between(Expression compareExpr, Expression lowerBound, - Expression upperBound) { - super(ImmutableList.of(compareExpr, lowerBound, upperBound)); - this.compareExpr = compareExpr; - this.lowerBound = lowerBound; - this.upperBound = upperBound; - } - - public Between(List children) { - super(children); - this.compareExpr = children.get(0); - this.lowerBound = children.get(1); - this.upperBound = children.get(2); - } - - @Override - public DataType getDataType() throws UnboundException { - return BooleanType.INSTANCE; - } - - @Override - public boolean nullable() throws UnboundException { - return lowerBound.nullable() || upperBound.nullable(); - } - - @Override - public String toSql() { - return compareExpr.toSql() + " BETWEEN " + lowerBound.toSql() + " AND " + upperBound.toSql(); - } - - @Override - public String toString() { - return compareExpr + " BETWEEN " + lowerBound + " AND " + upperBound; - } - - public R accept(ExpressionVisitor visitor, C context) { - return visitor.visitBetween(this, context); - } - - public Expression getCompareExpr() { - return compareExpr; - } - - public Expression getLowerBound() { - return lowerBound; - } - - public Expression getUpperBound() { - return upperBound; - } - - @Override - public Between withChildren(List children) { - Preconditions.checkArgument(children.size() == 3); - return new Between(children); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Between that = (Between) o; - return Objects.equals(compareExpr, that.compareExpr) - && Objects.equals(lowerBound, that.lowerBound) - && Objects.equals(upperBound, that.upperBound) - && Objects.equals(children, that.children); - } - - @Override - public int hashCode() { - return Objects.hash(compareExpr, lowerBound, upperBound); - } -} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java index f056939ce5000b..4517f444e0ba20 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java @@ -27,7 +27,6 @@ import org.apache.doris.nereids.trees.expressions.Alias; import org.apache.doris.nereids.trees.expressions.And; import org.apache.doris.nereids.trees.expressions.AssertNumRowsElement; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.BinaryArithmetic; import org.apache.doris.nereids.trees.expressions.BinaryOperator; import org.apache.doris.nereids.trees.expressions.BitAnd; @@ -295,10 +294,6 @@ public R visitArrayLiteral(ArrayLiteral arrayLiteral, C context) { return visitLiteral(arrayLiteral, context); } - public R visitBetween(Between between, C context) { - return visit(between, context); - } - public R visitCompoundPredicate(CompoundPredicate compoundPredicate, C context) { return visitBinaryOperator(compoundPredicate, context); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java index 8934df108efdb0..95a2feb282db38 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java @@ -24,7 +24,6 @@ import org.apache.doris.nereids.annotation.Developing; import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.Add; -import org.apache.doris.nereids.trees.expressions.Between; import org.apache.doris.nereids.trees.expressions.BinaryArithmetic; import org.apache.doris.nereids.trees.expressions.BinaryOperator; import org.apache.doris.nereids.trees.expressions.BitAnd; @@ -894,33 +893,6 @@ public static Expression processCompoundPredicate(CompoundPredicate compoundPred return compoundPredicate.withChildren(children); } - /** - * process between type coercion. - */ - public static Expression processBetween(Between between) { - // check - between.checkLegalityBeforeTypeCoercion(); - - if (between.getLowerBound().getDataType().equals(between.getCompareExpr().getDataType()) - && between.getUpperBound().getDataType().equals(between.getCompareExpr().getDataType())) { - return between; - } - Optional optionalCommonType = TypeCoercionUtils.findWiderCommonTypeForComparison( - between.children() - .stream() - .map(Expression::getDataType) - .collect(Collectors.toList())); - - return optionalCommonType - .map(commonType -> { - List newChildren = between.children().stream() - .map(e -> TypeCoercionUtils.castIfNotMatchType(e, commonType)) - .collect(Collectors.toList()); - return between.withChildren(newChildren); - }) - .orElse(between); - } - private static boolean canCompareDate(DataType t1, DataType t2) { DataType dateType = t1; DataType anotherType = t2; diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java index 2bdcc966fcc116..5b3cdd7dd19caf 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTest.java @@ -17,7 +17,6 @@ package org.apache.doris.nereids.rules.expression; -import org.apache.doris.nereids.rules.expression.rules.BetweenToCompoundRule; import org.apache.doris.nereids.rules.expression.rules.DistinctPredicatesRule; import org.apache.doris.nereids.rules.expression.rules.ExtractCommonFactorRule; import org.apache.doris.nereids.rules.expression.rules.InPredicateDedup; @@ -164,16 +163,6 @@ public void testExtractCommonFactorRewrite() { } - @Test - public void testBetweenToCompoundRule() { - executor = new ExpressionRuleExecutor(ImmutableList.of(BetweenToCompoundRule.INSTANCE, - SimplifyNotExprRule.INSTANCE)); - - assertRewrite("a between c and d", "(a >= c) and (a <= d)"); - assertRewrite("a not between c and d)", "(a < c) or (a > d)"); - - } - @Test public void testInPredicateToEqualToRule() { executor = new ExpressionRuleExecutor(ImmutableList.of(InPredicateToEqualToRule.INSTANCE)); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionEqualsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionEqualsTest.java index c26c0205634832..ca5793b687c092 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionEqualsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionEqualsTest.java @@ -83,14 +83,6 @@ public void testComparisonPredicate() { Assertions.assertEquals(greaterThanEqual1.hashCode(), greaterThanEqual2.hashCode()); } - @Test - public void testBetween() { - Between between1 = new Between(child1, left1, right1); - Between between2 = new Between(child2, left2, right2); - Assertions.assertEquals(between1, between2); - Assertions.assertEquals(between1.hashCode(), between2.hashCode()); - } - @Test public void testNot() { Not not1 = new Not(child1); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionParserTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionParserTest.java index 150a95393925f9..7a8917e2f70523 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionParserTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/ExpressionParserTest.java @@ -60,10 +60,9 @@ public void testSqlBetweenPredicate() { public void testExprBetweenPredicate() { parseExpression("c BETWEEN a AND b") .assertEquals( - new Between( - new UnboundSlot("c"), - new UnboundSlot("a"), - new UnboundSlot("b") + new And( + new GreaterThanEqual(new UnboundSlot("c"), new UnboundSlot("a")), + new LessThanEqual(new UnboundSlot("c"), new UnboundSlot("b")) ) ); } diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query10.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query10.out index 2ec618b7da99f8..df38625cf1552b 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query10.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query10.out @@ -52,6 +52,6 @@ PhysicalResultSink ------------------------------PhysicalOlapScan[catalog_sales] ----------------------------PhysicalDistribute ------------------------------PhysicalProject ---------------------------------filter((date_dim.d_moy >= 1)(date_dim.d_year = 2001)(date_dim.d_moy <= 4)) +--------------------------------filter((date_dim.d_moy >= 1)(date_dim.d_moy <= 4)(date_dim.d_year = 2001)) ----------------------------------PhysicalOlapScan[date_dim] diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query16.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query16.out index 4b580416f2e306..cffb15de24d2f1 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query16.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query16.out @@ -34,6 +34,6 @@ PhysicalResultSink --------------------------------PhysicalOlapScan[call_center] ------------------PhysicalDistribute --------------------PhysicalProject -----------------------filter((cast(d_date as DATETIMEV2(0)) <= cast(days_add(cast('2002-4-01' as DATEV2), INTERVAL 60 DAY) as DATETIMEV2(0)))(date_dim.d_date >= 2002-04-01)) +----------------------filter((date_dim.d_date <= days_add(cast('2002-4-01' as DATEV2), INTERVAL 60 DAY))(date_dim.d_date >= 2002-04-01)) ------------------------PhysicalOlapScan[date_dim] diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query28.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query28.out index cf9431b2e02bf7..d38a5269ff5fc5 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query28.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query28.out @@ -26,7 +26,7 @@ PhysicalResultSink --------------------------------PhysicalDistribute ----------------------------------hashAgg[LOCAL] ------------------------------------PhysicalProject ---------------------------------------filter((store_sales.ss_quantity <= 10)((((store_sales.ss_list_price >= 145.00) AND (store_sales.ss_list_price <= 155.00)) OR ((store_sales.ss_coupon_amt >= 14792.00) AND (store_sales.ss_coupon_amt <= 15792.00))) OR ((store_sales.ss_wholesale_cost >= 46.00) AND (store_sales.ss_wholesale_cost <= 66.00)))(store_sales.ss_quantity >= 6)) +--------------------------------------filter(((((store_sales.ss_list_price >= 145.00) AND (store_sales.ss_list_price <= 155.00)) OR ((store_sales.ss_coupon_amt >= 14792.00) AND (store_sales.ss_coupon_amt <= 15792.00))) OR ((store_sales.ss_wholesale_cost >= 46.00) AND (store_sales.ss_wholesale_cost <= 66.00)))(store_sales.ss_quantity <= 10)(store_sales.ss_quantity >= 6)) ----------------------------------------PhysicalOlapScan[store_sales] ----------------------PhysicalDistribute ------------------------PhysicalLimit @@ -34,7 +34,7 @@ PhysicalResultSink ----------------------------PhysicalDistribute ------------------------------hashAgg[LOCAL] --------------------------------PhysicalProject -----------------------------------filter(((((store_sales.ss_list_price >= 1.5E+2) AND (store_sales.ss_list_price <= 1.6E+2)) OR ((store_sales.ss_coupon_amt >= 6.6E+3) AND (store_sales.ss_coupon_amt <= 7.6E+3))) OR ((store_sales.ss_wholesale_cost >= 9.00) AND (store_sales.ss_wholesale_cost <= 29.00)))(store_sales.ss_quantity >= 11)(store_sales.ss_quantity <= 15)) +----------------------------------filter(((((store_sales.ss_list_price >= 150.00) AND (store_sales.ss_list_price <= 1.6E+2)) OR ((store_sales.ss_coupon_amt >= 6600.00) AND (store_sales.ss_coupon_amt <= 7.6E+3))) OR ((store_sales.ss_wholesale_cost >= 9.00) AND (store_sales.ss_wholesale_cost <= 29.00)))(store_sales.ss_quantity >= 11)(store_sales.ss_quantity <= 15)) ------------------------------------PhysicalOlapScan[store_sales] ------------------PhysicalDistribute --------------------PhysicalLimit diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query58.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query58.out index a76c3945b63ced..cd7b4f2257fedf 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query58.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query58.out @@ -5,7 +5,7 @@ PhysicalResultSink ----PhysicalDistribute ------PhysicalTopN --------PhysicalProject -----------hashJoin[INNER_JOIN](ss_items.item_id = cs_items.item_id)(cast(cs_item_rev as DOUBLE) >= cast((0.9 * ss_item_rev) as DOUBLE))(cast(ss_item_rev as DOUBLE) >= cast((0.9 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) <= cast((1.1 * ss_item_rev) as DOUBLE))(cast(ss_item_rev as DOUBLE) <= cast((1.1 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) >= cast((0.9 * ws_item_rev) as DOUBLE))(cast(ws_item_rev as DOUBLE) >= cast((0.9 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) <= cast((1.1 * ws_item_rev) as DOUBLE))(cast(ws_item_rev as DOUBLE) <= cast((1.1 * cs_item_rev) as DOUBLE)) +----------hashJoin[INNER_JOIN](ss_items.item_id = cs_items.item_id)(cast(ss_item_rev as DOUBLE) >= cast((0.9 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) >= cast((0.9 * ss_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) <= cast((1.1 * ss_item_rev) as DOUBLE))(cast(ss_item_rev as DOUBLE) <= cast((1.1 * cs_item_rev) as DOUBLE))(cast(ws_item_rev as DOUBLE) >= cast((0.9 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) >= cast((0.9 * ws_item_rev) as DOUBLE))(cast(ws_item_rev as DOUBLE) <= cast((1.1 * cs_item_rev) as DOUBLE))(cast(cs_item_rev as DOUBLE) <= cast((1.1 * ws_item_rev) as DOUBLE)) ------------PhysicalProject --------------hashAgg[GLOBAL] ----------------PhysicalDistribute diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out index 29103731d251d1..e5a6b41770ed96 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out @@ -31,7 +31,7 @@ PhysicalResultSink ------------------------------------------PhysicalOlapScan[date_dim] ------------------------------PhysicalDistribute --------------------------------PhysicalProject -----------------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821)) +----------------------------------filter((cast(t_time as BIGINT) <= 77621)(time_dim.t_time >= 48821)) ------------------------------------PhysicalOlapScan[time_dim] ----------------------------PhysicalDistribute ------------------------------PhysicalProject @@ -59,7 +59,7 @@ PhysicalResultSink ------------------------------------------PhysicalOlapScan[date_dim] ------------------------------PhysicalDistribute --------------------------------PhysicalProject -----------------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821)) +----------------------------------filter((time_dim.t_time >= 48821)(cast(t_time as BIGINT) <= 77621)) ------------------------------------PhysicalOlapScan[time_dim] ----------------------------PhysicalDistribute ------------------------------PhysicalProject diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query82.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query82.out index c9976cb1eb7975..a6cb7d624913ec 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query82.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query82.out @@ -20,7 +20,7 @@ PhysicalResultSink ------------------------------PhysicalOlapScan[inventory] --------------------------PhysicalDistribute ----------------------------PhysicalProject -------------------------------filter((item.i_current_price >= 17.00)i_manufact_id IN (138, 169, 339, 639)(item.i_current_price <= 47.00)) +------------------------------filter((item.i_current_price >= 17.00)(item.i_current_price <= 47.00)i_manufact_id IN (138, 169, 339, 639)) --------------------------------PhysicalOlapScan[item] ------------------------PhysicalDistribute --------------------------PhysicalProject diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query94.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query94.out index 26640d46a88614..850edbe2c438e3 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query94.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query94.out @@ -34,6 +34,6 @@ PhysicalResultSink ------------------------------------PhysicalOlapScan[web_site] ------------------PhysicalDistribute --------------------PhysicalProject -----------------------filter((date_dim.d_date >= 2000-02-01)(cast(d_date as DATETIMEV2(0)) <= cast(days_add(cast('2000-2-01' as DATEV2), INTERVAL 60 DAY) as DATETIMEV2(0)))) +----------------------filter((date_dim.d_date <= days_add(cast('2000-2-01' as DATEV2), INTERVAL 60 DAY))(date_dim.d_date >= 2000-02-01)) ------------------------PhysicalOlapScan[date_dim] diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query95.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query95.out index 3cb412688bf96c..4df00ba184ab1b 100644 --- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query95.out +++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query95.out @@ -20,7 +20,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 ) ----------------PhysicalProject ------------------hashJoin[INNER_JOIN](ws1.ws_ship_date_sk = date_dim.d_date_sk) --------------------PhysicalProject -----------------------filter((date_dim.d_date >= 1999-02-01)(cast(d_date as DATETIMEV2(0)) <= cast(days_add(cast('1999-2-01' as DATEV2), INTERVAL 60 DAY) as DATETIMEV2(0)))) +----------------------filter((date_dim.d_date >= 1999-02-01)(date_dim.d_date <= days_add(cast('1999-2-01' as DATEV2), INTERVAL 60 DAY))) ------------------------PhysicalOlapScan[date_dim] --------------------PhysicalDistribute ----------------------hashJoin[RIGHT_SEMI_JOIN](ws1.ws_order_number = web_returns.wr_order_number)