You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by nj...@apache.org on 2016/04/18 08:34:52 UTC

[10/50] kylin git commit: KYLIN-1419 NPE occurs when query from subqueries with order by (revised by Yang)

KYLIN-1419 NPE occurs when query from subqueries with order by (revised by Yang)


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

Branch: refs/heads/1.4-rc
Commit: e3e82a60c5a27b669afd28ae875113a19ea0bb76
Parents: c1e753f
Author: nichunen <ni...@mininglamp.com>
Authored: Wed Feb 17 11:20:22 2016 +0800
Committer: Li, Yang <li...@apache.org>
Committed: Wed Feb 17 11:20:22 2016 +0800

----------------------------------------------------------------------
 .../resources/query/sql_subquery/query09.sql    | 43 ++++++++++++++++++++
 .../apache/kylin/query/relnode/OLAPSortRel.java |  8 +++-
 2 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/e3e82a60/kylin-it/src/test/resources/query/sql_subquery/query09.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query09.sql b/kylin-it/src/test/resources/query/sql_subquery/query09.sql
new file mode 100644
index 0000000..436ced5
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query09.sql
@@ -0,0 +1,43 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+SELECT t1.week_beg_dt, t1.sum_price, t2.cnt
+FROM (
+  select test_cal_dt.week_beg_dt, sum(price) as sum_price
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  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
+  group by test_cal_dt.week_beg_dt
+) t1
+inner join  (
+  select test_cal_dt.week_beg_dt, count(*) as cnt
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  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
+  group by test_cal_dt.week_beg_dt
+) t2
+on t1.week_beg_dt=t2.week_beg_dt
+order by t1.week_beg_dt
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3e82a60/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
index b023dfd..c3e0595 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPSortRel.java
@@ -36,7 +36,6 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.kylin.metadata.model.MeasureDesc;
 import org.apache.kylin.metadata.model.TblColRef;
 import org.apache.kylin.metadata.realization.SQLDigest;
-import org.apache.kylin.storage.StorageContext;
 
 import com.google.common.base.Preconditions;
 
@@ -81,6 +80,11 @@ public class OLAPSortRel extends Sort implements OLAPRel {
     public void implementRewrite(RewriteImplementor implementor) {
         implementor.visitChild(this, getInput());
 
+        // No need to rewrite "order by" applied on non-olap context.
+        // Occurs in sub-query like "select ... from (...) inner join (...) order by ..."
+        if (this.context.realization == null)
+            return;
+        
         for (RelFieldCollation fieldCollation : this.collation.getFieldCollations()) {
             int index = fieldCollation.getFieldIndex();
             SQLDigest.OrderEnum order = getOrderEnum(fieldCollation.getDirection());
@@ -116,7 +120,7 @@ public class OLAPSortRel extends Sort implements OLAPRel {
 
     @Override
     public EnumerableRel implementEnumerable(List<EnumerableRel> inputs) {
-        return new EnumerableSort(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE, collation), //
+        return new EnumerableSort(getCluster(), getCluster().traitSetOf(EnumerableConvention.INSTANCE).replace(collation), //
                 sole(inputs), collation, offset, fetch);
     }