KYLIN-2889 export allColumns in OLAPContext for subquery

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b15164ac
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b15164ac
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b15164ac

Branch: refs/heads/master
Commit: b15164ac23280ebad4e1ef92c637e070ea47b016
Parents: a09cc4b
Author: Roger Shi <rogershijich...@hotmail.com>
Authored: Thu Sep 21 17:55:51 2017 +0800
Committer: Hongbin Ma <m...@kyligence.io>
Committed: Sat Sep 23 14:04:28 2017 +0800

----------------------------------------------------------------------
 kylin-it/src/test/resources/query/sql_subquery/query35.sql    | 3 +++
 .../main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java | 2 +-
 .../src/main/java/org/apache/kylin/query/relnode/OLAPRel.java | 2 +-
 .../java/org/apache/kylin/query/relnode/OLAPTableScan.java    | 7 ++++++-
 4 files changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/b15164ac/kylin-it/src/test/resources/query/sql_subquery/query35.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query35.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query35.sql
new file mode 100644
index 0000000..1d5d08b
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query35.sql
@@ -0,0 +1,3 @@
+select c.SITE_NAME, c.SITE_ID, b.SELLER_ID, b.LSTG_FORMAT_NAME from 
EDW.TEST_SITES c join (
+ select * from TEST_KYLIN_FACT f join EDW.TEST_SITES s on f.LSTG_SITE_ID= 
s.SITE_ID where f.ORDER_ID <= 3
+ ) b on b.LSTG_SITE_ID= c.SITE_ID
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/b15164ac/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
----------------------------------------------------------------------
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index 5fa34f7..6d0a657 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -173,7 +173,7 @@ public class OLAPJoinRel extends EnumerableJoin implements 
OLAPRel {
         }
 
         if (!this.hasSubQuery) {
-            this.context.allColumns.clear();
+//            this.context.allColumns.clear();
 
             // build JoinDesc
             Preconditions.checkState(this.getCondition() instanceof RexCall, 
"Cartesian Join is not supported.");

http://git-wip-us.apache.org/repos/asf/kylin/blob/b15164ac/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
index 68ee0da..95f6693 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
@@ -89,7 +89,7 @@ public interface OLAPRel extends RelNode {
             return parentNodeStack.peek();
         }
 
-        public Stack<RelNode> getParentStack() {
+        public Stack<RelNode> getParentNodeStack() {
             return parentNodeStack;
         }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/b15164ac/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
----------------------------------------------------------------------
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
index 3a1ed2a..b739326 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
@@ -249,7 +249,7 @@ public class OLAPTableScan extends TableScan implements 
OLAPRel, EnumerableRel {
      *      * OLAPToEnumerableConverter and OLAPUnionRel -> require column 
collection
      */
     private boolean needCollectionColumns(OLAPImplementor implementor) {
-        Stack<RelNode> allParents = implementor.getParentStack();
+        Stack<RelNode> allParents = implementor.getParentNodeStack();
         int index = allParents.size() - 1;
 
         while (index >= 0) {
@@ -262,6 +262,11 @@ public class OLAPTableScan extends TableScan implements 
OLAPRel, EnumerableRel {
                 return true;
             }
 
+            OLAPRel olapParent = (OLAPRel) allParents.get(index);
+            if (olapParent.getContext() != null && olapParent.getContext() != 
this.context) {
+                // if the whole context has not projection, let table scan 
take care of itself
+                break;
+            }
             index--;
         }
 

Reply via email to