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

zabetak 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 771b0038d84 HIVE-28560: AssertionError in SqlImplementor when query 
over JDBC table contains LIMIT (Soumyakanti Das reviewed by Stamatis Zampetakis)
771b0038d84 is described below

commit 771b0038d84758897c80d6931f21ff7073f4da31
Author: Soumyakanti Das <[email protected]>
AuthorDate: Mon Oct 7 12:43:44 2024 -0700

    HIVE-28560: AssertionError in SqlImplementor when query over JDBC table 
contains LIMIT (Soumyakanti Das reviewed by Stamatis Zampetakis)
    
    Close apache/hive#5491
---
 .../calcite/rules/jdbc/HiveJdbcImplementor.java    | 35 ----------
 .../clientpositive/jdbc_table_limit_postgres.q     | 15 ++++
 .../clientpositive/llap/external_jdbc_table4.q.out |  2 +-
 .../llap/jdbc_table_limit_postgres.q.out           | 79 ++++++++++++++++++++++
 4 files changed, 95 insertions(+), 36 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/jdbc/HiveJdbcImplementor.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/jdbc/HiveJdbcImplementor.java
index e84d0bb7d19..5524c58d58d 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/jdbc/HiveJdbcImplementor.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/jdbc/HiveJdbcImplementor.java
@@ -65,41 +65,6 @@ public class HiveJdbcImplementor extends JdbcImplementor {
     return builder.result();
   }
 
-  @Override public Result visit(Sort e) {
-    Result x = visitInput(e, 0, Clause.ORDER_BY, Clause.FETCH, Clause.OFFSET);
-    Builder builder = x.builder(e);
-    List<SqlNode> orderByList = Expressions.list();
-    for (RelFieldCollation field : e.getCollation().getFieldCollations()) {
-      builder.addOrderItem(orderByList, field);
-    }
-
-    // Create select list as we want to keep the column aliases
-    // instead of producing STAR
-    final List<SqlNode> selectList = new ArrayList<>();
-    for (int i = 0; i < e.getRowType().getFieldCount(); i++) {
-      RexInputRef ref = RexInputRef.of(i, e.getRowType());
-      SqlNode sqlExpr = builder.context.toSql(null, ref);
-      addSelect(selectList, sqlExpr, e.getRowType());
-    }
-    builder.setSelect(new SqlNodeList(selectList, POS));
-
-    if (!orderByList.isEmpty()) {
-      builder.setOrderBy(new SqlNodeList(orderByList, POS));
-      x = builder.result();
-    }
-    if (e.fetch != null) {
-      builder = x.builder(e);
-      builder.setFetch(builder.context.toSql(null, e.fetch));
-      x = builder.result();
-    }
-    if (e.offset != null) {
-      builder = x.builder(e);
-      builder.setOffset(builder.context.toSql(null, e.offset));
-      x = builder.result();
-    }
-    return x;
-  }
-
   @Override public Result visit(Join e) {
     final Result leftResult = visitInput(e, 0).resetAlias();
     final Result rightResult = visitInput(e, 1).resetAlias();
diff --git a/ql/src/test/queries/clientpositive/jdbc_table_limit_postgres.q 
b/ql/src/test/queries/clientpositive/jdbc_table_limit_postgres.q
new file mode 100644
index 00000000000..77f01d8faa1
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/jdbc_table_limit_postgres.q
@@ -0,0 +1,15 @@
+--! qt:database:postgres:q_test_country_table.sql
+
+CREATE EXTERNAL TABLE country (id int, name varchar(20))
+STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
+TBLPROPERTIES (
+    "hive.sql.database.type" = "POSTGRES",
+    "hive.sql.jdbc.driver" = "org.postgresql.Driver",
+    "hive.sql.jdbc.url" = "jdbc:postgresql://localhost:5432/qtestDB",
+    "hive.sql.dbcp.username" = "qtestuser",
+    "hive.sql.dbcp.password" = "qtestpassword",
+    "hive.sql.table" = "country");
+
+EXPLAIN CBO SELECT * FROM country ORDER BY id LIMIT 2;
+EXPLAIN SELECT * FROM country ORDER BY id LIMIT 2;
+SELECT * FROM country ORDER BY id LIMIT 2;
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 a897df577b1..29633e02a19 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
@@ -638,7 +638,7 @@ STAGE PLANS:
           alias: db1_ext_auth1
           properties:
             hive.sql.query SELECT "IKEY", "bkey", "fkey", "dkey"
-FROM (SELECT *
+FROM (SELECT "IKEY", "bkey", "fkey", "dkey"
 FROM "EXTERNAL_JDBC_SIMPLE_DERBY2_TABLE1"
 FETCH NEXT 10 ROWS ONLY) AS "t"
             hive.sql.query.fieldNames IKEY,bkey,fkey,dkey
diff --git 
a/ql/src/test/results/clientpositive/llap/jdbc_table_limit_postgres.q.out 
b/ql/src/test/results/clientpositive/llap/jdbc_table_limit_postgres.q.out
new file mode 100644
index 00000000000..9e2f234faf2
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/jdbc_table_limit_postgres.q.out
@@ -0,0 +1,79 @@
+PREHOOK: query: CREATE EXTERNAL TABLE country (id int, name varchar(20))
+STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
+TBLPROPERTIES (
+    "hive.sql.database.type" = "POSTGRES",
+    "hive.sql.jdbc.driver" = "org.postgresql.Driver",
+    "hive.sql.jdbc.url" = "jdbc:postgresql://localhost:5432/qtestDB",
+    "hive.sql.dbcp.username" = "qtestuser",
+    "hive.sql.dbcp.password" = "qtestpassword",
+    "hive.sql.table" = "country")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@country
+POSTHOOK: query: CREATE EXTERNAL TABLE country (id int, name varchar(20))
+STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
+TBLPROPERTIES (
+    "hive.sql.database.type" = "POSTGRES",
+    "hive.sql.jdbc.driver" = "org.postgresql.Driver",
+    "hive.sql.jdbc.url" = "jdbc:postgresql://localhost:5432/qtestDB",
+    "hive.sql.dbcp.username" = "qtestuser",
+    "hive.sql.dbcp.password" = "qtestpassword",
+    "hive.sql.table" = "country")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@country
+PREHOOK: query: EXPLAIN CBO SELECT * FROM country ORDER BY id LIMIT 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@country
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN CBO SELECT * FROM country ORDER BY id LIMIT 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@country
+#### A masked pattern was here ####
+CBO PLAN:
+HiveJdbcConverter(convention=[JDBC.POSTGRES])
+  JdbcSort(sort0=[$0], dir0=[ASC], fetch=[2])
+    JdbcHiveTableScan(table=[[default, country]], table:alias=[country])
+
+PREHOOK: query: EXPLAIN SELECT * FROM country ORDER BY id LIMIT 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@country
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN SELECT * FROM country ORDER BY id LIMIT 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@country
+#### 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: country
+          properties:
+            hive.sql.query SELECT "id", "name"
+FROM (SELECT "id", "name"
+FROM "country"
+ORDER BY "id"
+FETCH NEXT 2 ROWS ONLY) AS "t"
+            hive.sql.query.fieldNames id,name
+            hive.sql.query.fieldTypes int,varchar(20)
+            hive.sql.query.split false
+          Select Operator
+            expressions: id (type: int), name (type: varchar(20))
+            outputColumnNames: _col0, _col1
+            ListSink
+
+PREHOOK: query: SELECT * FROM country ORDER BY id LIMIT 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@country
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM country ORDER BY id LIMIT 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@country
+#### A masked pattern was here ####
+1      India
+2      Russia

Reply via email to