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 @@ OpAttr visit(HiveSortLimit sortRel) throws SemanticException { // 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 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; 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