You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2019/07/11 15:46:13 UTC

[hive] branch master updated: HIVE-21976: Offset should be null instead of zero in Calcite HiveSortLimit (Jesus Camacho Rodriguez, reviewed by Vineet Garg)

This is an automated email from the ASF dual-hosted git repository.

jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 7cfe729  HIVE-21976: Offset should be null instead of zero in Calcite HiveSortLimit (Jesus Camacho Rodriguez, reviewed by Vineet Garg)
7cfe729 is described below

commit 7cfe72920119b1b35efce4b920f4dae44126fcc4
Author: Jesus Camacho Rodriguez <jc...@apache.org>
AuthorDate: Tue Jul 9 17:40:57 2019 -0700

    HIVE-21976: Offset should be null instead of zero in Calcite HiveSortLimit (Jesus Camacho Rodriguez, reviewed by Vineet Garg)
    
    Close apache/hive#716
---
 .../hadoop/hive/ql/parse/CalcitePlanner.java       |  5 ++-
 .../queries/clientpositive/external_jdbc_table4.q  |  5 +++
 .../clientpositive/llap/external_jdbc_table4.q.out | 45 ++++++++++++++++++++++
 3 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index cce87b4..6f42183 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -4112,11 +4112,12 @@ public class CalcitePlanner extends SemanticAnalyzer {
       QBParseInfo qbp = getQBParseInfo(qb);
       SimpleEntry<Integer,Integer> entry =
           qbp.getDestToLimit().get(qbp.getClauseNames().iterator().next());
-      Integer offset = (entry == null) ? 0 : entry.getKey();
+      Integer offset = (entry == null) ? null : entry.getKey();
       Integer fetch = (entry == null) ? null : entry.getValue();
 
       if (fetch != null) {
-        RexNode offsetRN = cluster.getRexBuilder().makeExactLiteral(BigDecimal.valueOf(offset));
+        RexNode offsetRN = (offset == null || offset == 0) ?
+            null : cluster.getRexBuilder().makeExactLiteral(BigDecimal.valueOf(offset));
         RexNode fetchRN = cluster.getRexBuilder().makeExactLiteral(BigDecimal.valueOf(fetch));
         RelTraitSet traitSet = cluster.traitSetOf(HiveRelNode.CONVENTION);
         RelCollation canonizedCollation = traitSet.canonize(RelCollations.EMPTY);
diff --git a/ql/src/test/queries/clientpositive/external_jdbc_table4.q b/ql/src/test/queries/clientpositive/external_jdbc_table4.q
index 8145366..10e2253 100644
--- a/ql/src/test/queries/clientpositive/external_jdbc_table4.q
+++ b/ql/src/test/queries/clientpositive/external_jdbc_table4.q
@@ -124,6 +124,11 @@ SELECT db1_ext_auth1.ikey, b.ikey * 2 FROM db1_ext_auth1 JOIN (SELECT * FROM db1
 
 SELECT db1_ext_auth1.ikey, b.ikey * 2 FROM db1_ext_auth1 JOIN (SELECT * FROM db1_ext_auth1) b;
 
+EXPLAIN
+SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10;
+
+SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10;
+
 DROP TABLE db1_ext_auth1;
 DROP TABLE db2_ext_auth2;
 DROP TABLE db1_ext_auth2;
diff --git a/ql/src/test/results/clientpositive/llap/external_jdbc_table4.q.out b/ql/src/test/results/clientpositive/llap/external_jdbc_table4.q.out
index 29866c2..c0e6851 100644
--- a/ql/src/test/results/clientpositive/llap/external_jdbc_table4.q.out
+++ b/ql/src/test/results/clientpositive/llap/external_jdbc_table4.q.out
@@ -533,6 +533,51 @@ POSTHOOK: Input: default@db1_ext_auth1
 44	200
 44	40
 44	88
+PREHOOK: query: EXPLAIN
+SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@db1_ext_auth1
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN
+SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@db1_ext_auth1
+#### A masked pattern was here ####
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: db1_ext_auth1
+          properties:
+            hive.sql.query SELECT "ikey"
+FROM (SELECT "IKEY" AS "ikey"
+FROM "EXTERNAL_JDBC_SIMPLE_DERBY2_TABLE1"
+FETCH NEXT 10 ROWS ONLY) AS "t0"
+            hive.sql.query.fieldNames ikey
+            hive.sql.query.fieldTypes int
+            hive.sql.query.split false
+          Select Operator
+            expressions: ikey (type: int)
+            outputColumnNames: _col0
+            ListSink
+
+PREHOOK: query: SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@db1_ext_auth1
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT db1_ext_auth1.ikey FROM db1_ext_auth1 LIMIT 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@db1_ext_auth1
+#### A masked pattern was here ####
+-20
+100
+20
+44
 PREHOOK: query: DROP TABLE db1_ext_auth1
 PREHOOK: type: DROPTABLE
 PREHOOK: Input: default@db1_ext_auth1