You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2019/05/08 01:53:16 UTC
[kylin] 02/03: KYLIN-3813 don't do push down when both of the
children of CompareTupleFilter are CompareTupleFilter with column included
This is an automated email from the ASF dual-hosted git repository.
nic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 7bfa5d136fdb8cdba5cc714213e3ef4fa4f1ed62
Author: kyotoYaho <nj...@apache.org>
AuthorDate: Tue Mar 19 09:57:09 2019 +0800
KYLIN-3813 don't do push down when both of the children of CompareTupleFilter are CompareTupleFilter with column included
---
.../org/apache/kylin/metadata/expression/CaseTupleExpression.java | 3 ++-
.../java/org/apache/kylin/metadata/filter/CompareTupleFilter.java | 7 ++++++-
.../main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java | 2 +-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/expression/CaseTupleExpression.java b/core-metadata/src/main/java/org/apache/kylin/metadata/expression/CaseTupleExpression.java
index 6b9034b..a6122e5 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/expression/CaseTupleExpression.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/expression/CaseTupleExpression.java
@@ -47,7 +47,8 @@ public class CaseTupleExpression extends TupleExpression {
protected boolean ifAbleToPushDown() {
if (ifAbleToPushDown == null) {
for (Pair<TupleFilter, TupleExpression> whenEntry : whenList) {
- ifAbleToPushDown = whenEntry.getSecond().ifAbleToPushDown();
+ ifAbleToPushDown = TupleFilter.isEvaluableRecursively(whenEntry.getFirst())
+ && whenEntry.getSecond().ifAbleToPushDown();
if (!ifAbleToPushDown) {
break;
}
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
index 1d0c7c3..6ae478f 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
@@ -38,6 +38,9 @@ public class CompareTupleFilter extends TupleFilter implements IOptimizeableTupl
AlwaysTrue, AlwaysFalse, Unknown
}
+ // if the two children are both CompareTupleFilter, isNormal will be false
+ private boolean isNormal = true;
+
// operand 1 is either a column or a function
private TblColRef column;
private FunctionTupleFilter function;
@@ -237,7 +240,7 @@ public class CompareTupleFilter extends TupleFilter implements IOptimizeableTupl
@Override
public boolean isEvaluable() {
- return (column != null || (function != null && function.isEvaluable())) //
+ return isNormal && (column != null || (function != null && function.isEvaluable())) //
&& (!conditionValues.isEmpty() || operator == FilterOperatorEnum.ISNOTNULL || operator == FilterOperatorEnum.ISNULL) //
&& secondColumn == null;
}
@@ -294,6 +297,8 @@ public class CompareTupleFilter extends TupleFilter implements IOptimizeableTupl
result = new ConstantTupleFilter("true");
} else if (result == ConstantTupleFilter.FALSE) {
result = new ConstantTupleFilter("false");
+ } else {
+ this.isNormal = false;
}
return result;
}
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
index a6a43b9..9def697 100755
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
@@ -278,7 +278,7 @@ public class OLAPAggregateRel extends Aggregate implements OLAPRel {
TblColRef groupOutCol = inputColumnRowType.getColumnByIndex(i);
if (tupleExpression instanceof ColumnTupleExpression) {
this.groups.add(((ColumnTupleExpression) tupleExpression).getColumn());
- } else if (this.context.isDynamicColumnEnabled()) {
+ } else if (this.context.isDynamicColumnEnabled() && tupleExpression.ifForDynamicColumn()) {
Pair<Set<TblColRef>, Set<TblColRef>> cols = ExpressionColCollector.collectColumnsPair(tupleExpression);
// push down only available for the innermost aggregation