You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2016/08/19 16:13:48 UTC

hive git commit: HIVE-14562 : CBO (Calcite Return Path) Wrong results for limit + offset (Ashutosh Chauhan via Jesus Camacho Rodriguez) Signed-off-by: Ashutosh Chauhan

Repository: hive
Updated Branches:
  refs/heads/master 20a67b334 -> b04f7ef39


HIVE-14562 : CBO (Calcite Return Path) Wrong results for limit + offset (Ashutosh Chauhan via Jesus Camacho Rodriguez)
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>


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

Branch: refs/heads/master
Commit: b04f7ef3991f8575c96d8946d6aeecb71cdc98bc
Parents: 20a67b3
Author: Ashutosh Chauhan <ha...@apache.org>
Authored: Fri Aug 19 09:12:34 2016 -0700
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Fri Aug 19 09:12:34 2016 -0700

----------------------------------------------------------------------
 .../calcite/translator/HiveOpConverter.java       |  3 ++-
 ql/src/test/queries/clientpositive/offset_limit.q |  5 +++++
 .../results/clientpositive/offset_limit.q.out     | 18 ++++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/b04f7ef3/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
index 422a507..8d56595 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
@@ -490,7 +490,8 @@ public class HiveOpConverter {
     // 2. If we need to generate limit
     if (sortRel.fetch != null) {
       int limit = RexLiteral.intValue(sortRel.fetch);
-      LimitDesc limitDesc = new LimitDesc(limit);
+      int offset = sortRel.offset == null ? 0 : RexLiteral.intValue(sortRel.offset);
+      LimitDesc limitDesc = new LimitDesc(offset,limit);
       // Because we are visiting the operators recursively, the last limit op that
       // calls the following function will set the global property.
       if (this.semanticAnalyzer != null && semanticAnalyzer.getQB() != null

http://git-wip-us.apache.org/repos/asf/hive/blob/b04f7ef3/ql/src/test/queries/clientpositive/offset_limit.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/offset_limit.q b/ql/src/test/queries/clientpositive/offset_limit.q
index 80d559a..8f50f30 100644
--- a/ql/src/test/queries/clientpositive/offset_limit.q
+++ b/ql/src/test/queries/clientpositive/offset_limit.q
@@ -11,6 +11,11 @@ SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.
 
 SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 100 OFFSET 300;
 
+set hive.cbo.returnpath.hiveop=true;
+
+SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 10,10;
+
+set hive.cbo.returnpath.hiveop=false;
 set hive.cbo.enable=false;
 
 SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 10,10;

http://git-wip-us.apache.org/repos/asf/hive/blob/b04f7ef3/ql/src/test/results/clientpositive/offset_limit.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/offset_limit.q.out b/ql/src/test/results/clientpositive/offset_limit.q.out
index 05f9a42..51f74e3 100644
--- a/ql/src/test/results/clientpositive/offset_limit.q.out
+++ b/ql/src/test/results/clientpositive/offset_limit.q.out
@@ -186,6 +186,24 @@ POSTHOOK: Input: default@src
 128	384.0
 129	258.0
 131	131.0
+PREHOOK: query: SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 10,10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 10,10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+116	116.0
+118	236.0
+119	357.0
+12	24.0
+120	240.0
+125	250.0
+126	126.0
+128	384.0
+129	258.0
+131	131.0
 PREHOOK: query: SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key ORDER BY src.key LIMIT 0,10
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src