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 <[email protected]> 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 <[email protected]> Authored: Fri Aug 19 09:12:34 2016 -0700 Committer: Ashutosh Chauhan <[email protected]> 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
