This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit f1f13be60077d37eda53f5146539c955533abc54 Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Fri Aug 25 11:28:12 2023 +0800 [opt](Nereids) remove between expression to simplify planner (#23421) --- .../glue/translator/ExpressionTranslator.java | 6 - .../doris/nereids/parser/LogicalPlanBuilder.java | 8 +- .../rules/expression/ExpressionNormalization.java | 2 - .../expression/rules/BetweenToCompoundRule.java | 47 -------- .../expression/rules/FoldConstantRuleOnBE.java | 5 - .../rules/expression/rules/FunctionBinder.java | 9 -- .../doris/nereids/trees/expressions/Between.java | 124 --------------------- .../expressions/visitor/ExpressionVisitor.java | 5 - .../doris/nereids/util/TypeCoercionUtils.java | 26 ----- .../rules/expression/ExpressionRewriteTest.java | 11 -- .../trees/expressions/ExpressionEqualsTest.java | 8 -- .../trees/expressions/ExpressionParserTest.java | 7 +- .../nereids_tpcds_shape_sf100_p0/shape/query10.out | 2 +- .../nereids_tpcds_shape_sf100_p0/shape/query16.out | 15 ++- .../nereids_tpcds_shape_sf100_p0/shape/query28.out | 28 ++--- .../nereids_tpcds_shape_sf100_p0/shape/query58.out | 2 +- .../nereids_tpcds_shape_sf100_p0/shape/query66.out | 4 +- .../nereids_tpcds_shape_sf100_p0/shape/query82.out | 2 +- .../nereids_tpcds_shape_sf100_p0/shape/query94.out | 2 +- .../nereids_tpcds_shape_sf100_p0/shape/query95.out | 2 +- 20 files changed, 37 insertions(+), 278 deletions(-) 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 b448446803..e4777a32df 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.AggregateExpression; 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 class ExpressionTranslator extends DefaultExpressionVisitor<Expr, PlanTra 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 c73ca04a2f..0ab372afe2 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 @@ -130,7 +130,6 @@ import org.apache.doris.nereids.properties.OrderKey; 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; @@ -1818,10 +1817,9 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> { 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 3cfd84a00c..e15228a3b0 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; @@ -44,7 +43,6 @@ public class ExpressionNormalization extends ExpressionRewrite { public static final List<ExpressionRewriteRule> NORMALIZE_REWRITE_RULES = ImmutableList.of( SupportJavaDateFormatter.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 17092ff7e6..0000000000 --- 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 f33f0fa2f2..f381f328fd 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.glue.translator.ExpressionTranslator; 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 @@ public class FoldConstantRuleOnBE extends AbstractExpressionRewriteRule { 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 f3821e3cad..928687add6 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 @@ -26,7 +26,6 @@ import org.apache.doris.nereids.exceptions.AnalysisException; 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; @@ -223,14 +222,6 @@ public class FunctionBinder extends AbstractExpressionRewriteRule { return TypeCoercionUtils.processInPredicate(newInPredicate); } - @Override - public Expression visitBetween(Between between, ExpressionRewriteContext context) { - List<Expression> 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 5f5df284cc..0000000000 --- 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<Expression> 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, C> R accept(ExpressionVisitor<R, C> 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<Expression> 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 de9ee53ed1..aae5e34fc4 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 @@ -26,7 +26,6 @@ import org.apache.doris.nereids.trees.expressions.AggregateExpression; 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; @@ -289,10 +288,6 @@ public abstract class ExpressionVisitor<R, C> 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 bc44e03f19..2efa0d36f8 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.common.Config; 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; @@ -795,31 +794,6 @@ public class TypeCoercionUtils { return compoundPredicate.withChildren(children); } - /** - * process between type coercion. - */ - public static Expression processBetween(Between between) { - if (between.getLowerBound().getDataType().equals(between.getCompareExpr().getDataType()) - && between.getUpperBound().getDataType().equals(between.getCompareExpr().getDataType())) { - return between; - } - Optional<DataType> optionalCommonType = TypeCoercionUtils.findWiderCommonTypeForComparison( - between.children() - .stream() - .map(Expression::getDataType) - .collect(Collectors.toList()), - false); - - return optionalCommonType - .map(commonType -> { - List<Expression> 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 2bdcc966fc..5b3cdd7dd1 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 class ExpressionRewriteTest extends ExpressionRewriteTestHelper { } - @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 c26c020563..ca5793b687 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 class ExpressionEqualsTest { 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 150a953939..7a8917e2f7 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 class ExpressionParserTest extends ParserTestBase { 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 2ec618b7da..df38625cf1 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 eefd61c93b..ce3d758eb5 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 @@ -30,9 +30,14 @@ PhysicalTopN ------------------------------PhysicalDistribute --------------------------------hashJoin[INNER_JOIN](cs1.cs_ship_addr_sk = customer_address.ca_address_sk) ----------------------------------PhysicalProject -------------------------------------PhysicalOlapScan[catalog_sales] -----------------------------------PhysicalDistribute -------------------------------------PhysicalProject ---------------------------------------filter((cast(ca_state as VARCHAR(*)) = 'WV')) -----------------------------------------PhysicalOlapScan[customer_address] +------------------------------------filter((cast(ca_state as VARCHAR(*)) = 'WV')) +--------------------------------------PhysicalOlapScan[customer_address] +--------------------------PhysicalDistribute +----------------------------PhysicalProject +------------------------------filter(cc_county IN ('Ziebach County', 'Luce County', 'Richland County', 'Daviess County', 'Barrow County')) +--------------------------------PhysicalOlapScan[call_center] +------------------PhysicalDistribute +--------------------PhysicalProject +----------------------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 5de8b9bdd4..a0c2676849 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 @@ -31,21 +31,21 @@ PhysicalResultSink ----------------------PhysicalLimit ------------------------hashAgg[GLOBAL] --------------------------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)) -----------------------------------PhysicalOlapScan[store_sales] -----------------PhysicalDistribute -------------------PhysicalLimit ---------------------hashAgg[GLOBAL] +----------------------------PhysicalLimit +------------------------------hashAgg[GLOBAL] +--------------------------------PhysicalDistribute +----------------------------------hashAgg[LOCAL] +------------------------------------PhysicalProject +--------------------------------------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 -------------------------hashAgg[LOCAL] ---------------------------PhysicalProject -----------------------------filter((store_sales.ss_quantity <= 20)((((store_sales.ss_list_price >= 91.00) AND (store_sales.ss_list_price <= 101.00)) OR ((store_sales.ss_coupon_amt >= 13493.00) AND (store_sales.ss_coupon_amt <= 14493.00))) OR ((store_sales.ss_wholesale_cost >= 36.00) AND (store_sales.ss_wholesale_cost <= 56.00)))(store_sales.ss_quantity >= 16)) -------------------------------PhysicalOlapScan[store_sales] -------------PhysicalDistribute ---------------PhysicalLimit -----------------hashAgg[GLOBAL] +------------------------PhysicalLimit +--------------------------hashAgg[GLOBAL] +----------------------------PhysicalDistribute +------------------------------hashAgg[LOCAL] +--------------------------------PhysicalProject +----------------------------------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 --------------------hashAgg[LOCAL] ----------------------PhysicalProject 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 e5fd32f39b..3b21a70cc2 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 [...] +----------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 [...] ------------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 ec829b426c..c8999694e0 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 @@ -29,7 +29,7 @@ PhysicalTopN --------------------------------------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 @@ -56,7 +56,7 @@ PhysicalTopN --------------------------------------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 c9976cb1eb..a6cb7d6249 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 26640d46a8..850edbe2c4 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 3cb412688b..4df00ba184 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) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org