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