This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 17f92155d78 [opt](Nerieds) add infer props to expression (#28953) 17f92155d78 is described below commit 17f92155d7899b0b5a08f5d388a4440d7e1fd891 Author: seawinde <149132972+seawi...@users.noreply.github.com> AuthorDate: Wed Dec 27 12:21:25 2023 +0800 [opt](Nerieds) add infer props to expression (#28953) --- .../rules/rewrite/PredicatePropagation.java | 5 +- .../nereids/trees/expressions/BinaryOperator.java | 6 +- .../trees/expressions/ComparisonPredicate.java | 6 +- .../nereids/trees/expressions/EqualPredicate.java | 6 +- .../doris/nereids/trees/expressions/EqualTo.java | 19 +++- .../nereids/trees/expressions/Expression.java | 24 +++++ .../nereids/trees/expressions/GreaterThan.java | 19 +++- .../trees/expressions/GreaterThanEqual.java | 19 +++- .../doris/nereids/trees/expressions/LessThan.java | 19 +++- .../nereids/trees/expressions/LessThanEqual.java | 19 +++- .../nereids/trees/expressions/NullSafeEqual.java | 19 +++- .../apache/doris/nereids/util/ExpressionUtils.java | 22 ++++ .../nereids/rules/rewrite/InferPredicatesTest.java | 113 ++++++++++++++------- 13 files changed, 237 insertions(+), 59 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PredicatePropagation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PredicatePropagation.java index ecb1c5499bd..72e9023dc45 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PredicatePropagation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PredicatePropagation.java @@ -88,6 +88,9 @@ public class PredicatePropagation { public Set<Expression> infer(Set<Expression> predicates) { Set<Expression> inferred = Sets.newHashSet(); for (Expression predicate : predicates) { + // if we support more infer predicate expression type, we should impl withInferred() method. + // And should add inferred props in withChildren() method just like ComparisonPredicate, + // and it's subclass, to mark the predicate is from infer. if (!(predicate instanceof ComparisonPredicate)) { continue; } @@ -130,7 +133,7 @@ public class PredicatePropagation { .comparisonPredicate.withChildren(newLeft, newRight); Expression expr = SimplifyComparisonPredicate.INSTANCE .rewrite(TypeCoercionUtils.processComparisonPredicate(newPredicate), null); - return DateFunctionRewrite.INSTANCE.rewrite(expr, null); + return DateFunctionRewrite.INSTANCE.rewrite(expr, null).withInferred(true); } private Expression inferOneSide(Expression predicateOneSide, Expression equalLeft, Expression equalRight) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryOperator.java index c3006fa927b..2d06456d0a4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/BinaryOperator.java @@ -34,7 +34,11 @@ public abstract class BinaryOperator extends Expression implements BinaryExpress protected final String symbol; public BinaryOperator(List<Expression> children, String symbol) { - super(children); + this(children, symbol, false); + } + + public BinaryOperator(List<Expression> children, String symbol, boolean inferred) { + super(children, inferred); this.symbol = symbol; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java index bba834967f0..a22852ca31c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java @@ -33,7 +33,11 @@ import java.util.List; public abstract class ComparisonPredicate extends BinaryOperator { public ComparisonPredicate(List<Expression> children, String symbol) { - super(children, symbol); + this(children, symbol, false); + } + + public ComparisonPredicate(List<Expression> children, String symbol, boolean inferred) { + super(children, symbol, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualPredicate.java index 3f61bd3cf62..5691f7de94c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualPredicate.java @@ -25,7 +25,11 @@ import java.util.List; public abstract class EqualPredicate extends ComparisonPredicate { protected EqualPredicate(List<Expression> children, String symbol) { - super(children, symbol); + this(children, symbol, false); + } + + protected EqualPredicate(List<Expression> children, String symbol, boolean inferred) { + super(children, symbol, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java index 3faccff6d99..2704d446555 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/EqualTo.java @@ -32,11 +32,19 @@ import java.util.List; public class EqualTo extends EqualPredicate implements PropagateNullable { public EqualTo(Expression left, Expression right) { - super(ImmutableList.of(left, right), "="); + this(left, right, false); + } + + public EqualTo(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), "=", inferred); } private EqualTo(List<Expression> children) { - super(children, "="); + this(children, false); + } + + private EqualTo(List<Expression> children, boolean inferred) { + super(children, "=", inferred); } @Override @@ -47,7 +55,12 @@ public class EqualTo extends EqualPredicate implements PropagateNullable { @Override public EqualTo withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new EqualTo(children); + return new EqualTo(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new EqualTo(this.children, inferred); } public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java index bdd776ffe97..1ce12fc0efa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java @@ -59,6 +59,8 @@ public abstract class Expression extends AbstractTreeNode<Expression> implements protected Optional<String> exprName = Optional.empty(); private final int depth; private final int width; + // Mark this expression is from predicate infer or something else infer + private final boolean inferred; protected Expression(Expression... children) { super(children); @@ -69,6 +71,7 @@ public abstract class Expression extends AbstractTreeNode<Expression> implements .mapToInt(e -> e.width) .sum() + (children.length == 0 ? 1 : 0); checkLimit(); + this.inferred = false; } protected Expression(List<Expression> children) { @@ -80,6 +83,19 @@ public abstract class Expression extends AbstractTreeNode<Expression> implements .mapToInt(e -> e.width) .sum() + (children.isEmpty() ? 1 : 0); checkLimit(); + this.inferred = false; + } + + protected Expression(List<Expression> children, boolean inferred) { + super(children); + depth = children.stream() + .mapToInt(e -> e.depth) + .max().orElse(0) + 1; + width = children.stream() + .mapToInt(e -> e.width) + .sum() + (children.isEmpty() ? 1 : 0); + checkLimit(); + this.inferred = inferred; } private void checkLimit() { @@ -216,11 +232,19 @@ public abstract class Expression extends AbstractTreeNode<Expression> implements return depth; } + public boolean isInferred() { + return inferred; + } + @Override public Expression withChildren(List<Expression> children) { throw new RuntimeException(); } + public Expression withInferred(boolean inferred) { + throw new RuntimeException("current expression has not impl the withInferred method"); + } + /** * Whether the expression is a constant. */ diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java index 1871781ca9c..ec4606eda55 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java @@ -37,11 +37,19 @@ public class GreaterThan extends ComparisonPredicate implements PropagateNullabl * @param right right child of greater than */ public GreaterThan(Expression left, Expression right) { - super(ImmutableList.of(left, right), ">"); + this(left, right, false); + } + + public GreaterThan(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), ">", inferred); } private GreaterThan(List<Expression> children) { - super(children, ">"); + this(children, false); + } + + private GreaterThan(List<Expression> children, boolean inferred) { + super(children, ">", inferred); } @Override @@ -57,7 +65,12 @@ public class GreaterThan extends ComparisonPredicate implements PropagateNullabl @Override public GreaterThan withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new GreaterThan(children); + return new GreaterThan(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new GreaterThan(this.children, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java index e2995298e37..693097f1825 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThanEqual.java @@ -32,11 +32,19 @@ import java.util.List; public class GreaterThanEqual extends ComparisonPredicate implements PropagateNullable { public GreaterThanEqual(Expression left, Expression right) { - super(ImmutableList.of(left, right), ">="); + this(left, right, false); + } + + public GreaterThanEqual(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), ">=", inferred); } private GreaterThanEqual(List<Expression> children) { - super(children, ">="); + this(children, false); + } + + private GreaterThanEqual(List<Expression> children, boolean inferred) { + super(children, ">=", inferred); } @Override @@ -52,7 +60,12 @@ public class GreaterThanEqual extends ComparisonPredicate implements PropagateNu @Override public GreaterThanEqual withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new GreaterThanEqual(children); + return new GreaterThanEqual(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new GreaterThanEqual(this.children, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java index 4d34b50bb9c..e1ba9f69aad 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThan.java @@ -31,11 +31,19 @@ import java.util.List; */ public class LessThan extends ComparisonPredicate implements PropagateNullable { public LessThan(Expression left, Expression right) { - super(ImmutableList.of(left, right), "<"); + this(left, right, false); + } + + public LessThan(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), "<", inferred); } private LessThan(List<Expression> children) { - super(children, "<"); + this(children, false); + } + + private LessThan(List<Expression> children, boolean inferred) { + super(children, "<", inferred); } @Override @@ -51,7 +59,12 @@ public class LessThan extends ComparisonPredicate implements PropagateNullable { @Override public LessThan withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new LessThan(children); + return new LessThan(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new LessThan(this.children, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java index 4ac997d3ab7..cc8c64ff106 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/LessThanEqual.java @@ -37,11 +37,19 @@ public class LessThanEqual extends ComparisonPredicate implements PropagateNulla * @param right right child of Less Than And Equal */ public LessThanEqual(Expression left, Expression right) { - super(ImmutableList.of(left, right), "<="); + this(left, right, false); + } + + public LessThanEqual(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), "<=", inferred); } private LessThanEqual(List<Expression> children) { - super(children, "<="); + this(children, false); + } + + private LessThanEqual(List<Expression> children, boolean inferred) { + super(children, "<=", inferred); } @Override @@ -57,7 +65,12 @@ public class LessThanEqual extends ComparisonPredicate implements PropagateNulla @Override public LessThanEqual withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new LessThanEqual(children); + return new LessThanEqual(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new LessThanEqual(this.children, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java index 48d05364fa3..6eda6c738b7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java @@ -31,11 +31,19 @@ import java.util.List; */ public class NullSafeEqual extends EqualPredicate implements AlwaysNotNullable { public NullSafeEqual(Expression left, Expression right) { - super(ImmutableList.of(left, right), "<=>"); + this(left, right, false); + } + + public NullSafeEqual(Expression left, Expression right, boolean inferred) { + super(ImmutableList.of(left, right), "<=>", inferred); } private NullSafeEqual(List<Expression> children) { - super(children, "<=>"); + this(children, false); + } + + private NullSafeEqual(List<Expression> children, boolean inferred) { + super(children, "<=>", inferred); } @Override @@ -51,7 +59,12 @@ public class NullSafeEqual extends EqualPredicate implements AlwaysNotNullable { @Override public NullSafeEqual withChildren(List<Expression> children) { Preconditions.checkArgument(children.size() == 2); - return new NullSafeEqual(children); + return new NullSafeEqual(children, this.isInferred()); + } + + @Override + public Expression withInferred(boolean inferred) { + return new NullSafeEqual(this.children, inferred); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java index 70b91dfe102..b9c240df415 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java @@ -48,6 +48,7 @@ import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral; import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.expressions.literal.NullLiteral; import org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionRewriter; +import org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionVisitor; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.visitor.ExpressionLineageReplacer; @@ -639,4 +640,25 @@ public class ExpressionUtils { } ); } + + /** + * Check the expression is inferred or not, if inferred return true, nor return false + */ + public static boolean isInferred(Expression expression) { + return expression.accept(new DefaultExpressionVisitor<Boolean, Void>() { + + @Override + public Boolean visit(Expression expr, Void context) { + boolean inferred = expr.isInferred(); + if (expr.isInferred() || expr.children().isEmpty()) { + return inferred; + } + inferred = true; + for (Expression child : expr.children()) { + inferred = inferred && child.accept(this, context); + } + return inferred; + } + }, null); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/InferPredicatesTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/InferPredicatesTest.java index 1421a912a02..c910e98fcd5 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/InferPredicatesTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/InferPredicatesTest.java @@ -18,6 +18,7 @@ package org.apache.doris.nereids.rules.rewrite; import org.apache.doris.nereids.trees.plans.JoinType; +import org.apache.doris.nereids.util.ExpressionUtils; import org.apache.doris.nereids.util.MemoPatternMatchSupported; import org.apache.doris.nereids.util.PlanChecker; import org.apache.doris.utframe.TestWithFeService; @@ -87,10 +88,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -125,7 +128,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id IN (1, 2, 3)")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id IN (1, 2, 3)")), logicalOlapScan() ) ) @@ -144,7 +148,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id IN (1, 2, 3)")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id IN (1, 2, 3)")), logicalOlapScan() ) ) @@ -164,10 +169,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ), logicalFilter( logicalOlapScan() @@ -190,10 +197,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ), logicalFilter( logicalOlapScan() @@ -215,10 +224,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -237,7 +248,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalOlapScan(), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -256,10 +268,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -278,11 +292,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")) ), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -303,7 +319,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter ), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ); @@ -321,13 +338,15 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filer -> filer.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalProject( logicalAggregate( logicalProject( logicalFilter( logicalOlapScan() - ).when(filer -> filer.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -349,11 +368,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id = 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id = 1")) ), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid = 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid = 1")) ) ) ); @@ -371,11 +392,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -394,11 +417,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -419,7 +444,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -440,7 +466,8 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -459,11 +486,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -504,19 +533,22 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("k1 = 3")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("k1 = 3")), logicalProject( logicalJoin( logicalJoin( logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("k3 = 3")) + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("k3 = 3")) ), logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("k1 = 3")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("k1 = 3")) ) ), logicalAggregate( @@ -544,10 +576,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter innerLogicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ), logicalFilter( logicalOlapScan() @@ -570,10 +604,12 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ), logicalFilter( logicalOlapScan() @@ -598,11 +634,13 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalJoin( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("id > 1")), + ).when(filter -> ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("id > 1")), logicalProject( logicalFilter( logicalOlapScan() - ).when(filter -> filter.getPredicate().toSql().contains("sid > 1")) + ).when(filter -> !ExpressionUtils.isInferred(filter.getPredicate()) + & filter.getPredicate().toSql().contains("sid > 1")) ) ) ) @@ -626,6 +664,7 @@ public class InferPredicatesTest extends TestWithFeService implements MemoPatter logicalFilter( logicalOlapScan() ).when(filter -> filter.getConjuncts().size() == 1 + && !ExpressionUtils.isInferred(filter.getPredicate()) && filter.getPredicate().toSql().contains("id = 2")), any() ).when(join -> join.getJoinType() == JoinType.LEFT_OUTER_JOIN) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org