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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]