You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/12/30 08:11:11 UTC
[46/50] [abbrv] kylin git commit: KYLIN-2340 fix sub-query that
creates two Filter nodes
KYLIN-2340 fix sub-query that creates two Filter nodes
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6e4637c9
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6e4637c9
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6e4637c9
Branch: refs/heads/master-hbase1.x
Commit: 6e4637c98814d8a3e8164dc366950bf8eb9ca716
Parents: 32d7244
Author: Li Yang <li...@apache.org>
Authored: Fri Dec 30 15:17:44 2016 +0800
Committer: Li Yang <li...@apache.org>
Committed: Fri Dec 30 15:17:44 2016 +0800
----------------------------------------------------------------------
.../kylin/metadata/filter/TupleFilter.java | 23 +++++++++++++++++++
.../resources/query/sql_subquery/query14.sql | 22 ++++++++++++++++++
.../kylin/query/relnode/OLAPFilterRel.java | 5 ++--
.../relnode/OLAPToEnumerableConverter.java | 24 +-------------------
4 files changed, 49 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4637c9/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilter.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilter.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilter.java
index 31de50b..f9d83f5 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilter.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/TupleFilter.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.kylin.metadata.filter.TupleFilter.FilterOperatorEnum;
import org.apache.kylin.metadata.model.TblColRef;
import org.apache.kylin.metadata.tuple.IEvaluatableTuple;
import org.slf4j.Logger;
@@ -241,4 +242,26 @@ public abstract class TupleFilter {
}
}
+ public static TupleFilter and(TupleFilter f1, TupleFilter f2) {
+ if (f1 == null)
+ return f2;
+ if (f2 == null)
+ return f1;
+
+ if (f1.getOperator() == FilterOperatorEnum.AND) {
+ f1.addChild(f2);
+ return f1;
+ }
+
+ if (f2.getOperator() == FilterOperatorEnum.AND) {
+ f2.addChild(f1);
+ return f2;
+ }
+
+ LogicalTupleFilter and = new LogicalTupleFilter(FilterOperatorEnum.AND);
+ and.addChild(f1);
+ and.addChild(f2);
+ return and;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4637c9/kylin-it/src/test/resources/query/sql_subquery/query14.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query14.sql b/kylin-it/src/test/resources/query/sql_subquery/query14.sql
new file mode 100644
index 0000000..b3b3b7e
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query14.sql
@@ -0,0 +1,22 @@
+select
+ lstg_format_name,
+ sum(price) as gvm
+from
+ (
+ select
+ cal_dt,
+ lstg_format_name,
+ price
+ from test_kylin_fact
+ inner JOIN test_category_groupings
+ ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND test_kylin_fact.lstg_site_id = test_category_groupings.site_id
+ inner JOIN edw.test_sites as test_sites
+ ON test_kylin_fact.lstg_site_id = test_sites.site_id
+ where
+ lstg_site_id = 0
+ and cal_dt > '2013-05-13'
+ ) f
+where
+ lstg_format_name ='Auction'
+group by
+ lstg_format_name
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4637c9/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
index 151131e..d3d78a0 100755
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPFilterRel.java
@@ -322,9 +322,10 @@ public class OLAPFilterRel extends Filter implements OLAPRel {
}
TupleFilterVisitor visitor = new TupleFilterVisitor(this.columnRowType, context);
- context.filter = this.condition.accept(visitor);
+ TupleFilter filter = this.condition.accept(visitor);
- context.filterColumns = visitor.columnsInFilter;
+ context.filter = TupleFilter.and(context.filter, filter);
+ context.filterColumns.addAll(visitor.columnsInFilter);
}
@Override
http://git-wip-us.apache.org/repos/asf/kylin/blob/6e4637c9/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
index 31cfc36..405a24e 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPToEnumerableConverter.java
@@ -135,33 +135,11 @@ public class OLAPToEnumerableConverter extends ConverterImpl implements Enumerab
if (null != tupleFilter) {
context.filterColumns.addAll(collectColumns(tupleFilter));
context.allColumns.addAll(collectColumns(tupleFilter));
- context.filter = and(context.filter, tupleFilter);
+ context.filter = TupleFilter.and(context.filter, tupleFilter);
}
}
}
- private TupleFilter and(TupleFilter f1, TupleFilter f2) {
- if (f1 == null)
- return f2;
- if (f2 == null)
- return f1;
-
- if (f1.getOperator() == FilterOperatorEnum.AND) {
- f1.addChild(f2);
- return f1;
- }
-
- if (f2.getOperator() == FilterOperatorEnum.AND) {
- f2.addChild(f1);
- return f2;
- }
-
- LogicalTupleFilter and = new LogicalTupleFilter(FilterOperatorEnum.AND);
- and.addChild(f1);
- and.addChild(f2);
- return and;
- }
-
private Set<TblColRef> collectColumns(TupleFilter filter) {
Set<TblColRef> ret = Sets.newHashSet();
collectColumnsRecursively(filter, ret);