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);