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

soumyakantidas 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 cadc3df7afd HIVE-29456: HiveProjectSortExchangeTransposeRule throws 
NoElementException when SORT BY columns are not in SELECT list
cadc3df7afd is described below

commit cadc3df7afdde6a78794f0e672b8afa73bfad3b2
Author: Soumyakanti Das <[email protected]>
AuthorDate: Mon Feb 23 10:36:56 2026 -0800

    HIVE-29456: HiveProjectSortExchangeTransposeRule throws NoElementException 
when SORT BY columns are not in SELECT list
---
 .../hive/ql/optimizer/calcite/HiveRelOptUtil.java  |  7 ++-
 .../select_columns_subset_of_sort_by_order_by.q    | 15 ++++++
 ...select_columns_subset_of_sort_by_order_by.q.out | 54 ++++++++++++++++++++++
 3 files changed, 75 insertions(+), 1 deletion(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptUtil.java 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptUtil.java
index 91f2f488d11..9ad18817134 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptUtil.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptUtil.java
@@ -1107,7 +1107,12 @@ public static List<RelFieldCollation> 
getNewRelFieldCollations(
     Set<Integer> needed = new HashSet<>();
     for (RelFieldCollation fc : sortCollation.getFieldCollations()) {
       needed.add(fc.getFieldIndex());
-      final RexNode node = 
project.getProjects().get(map.getTarget(fc.getFieldIndex()));
+      int target = map.getTargetOpt(fc.getFieldIndex());
+      if (target == -1) {
+        // If there is no mapping for this field, we return null early.
+        return null;
+      }
+      final RexNode node = project.getProjects().get(target);
       if (node.isA(SqlKind.CAST)) {
         // Check whether it is a monotonic preserving cast, otherwise we 
cannot push
         final RexCall cast = (RexCall) node;
diff --git 
a/ql/src/test/queries/clientpositive/select_columns_subset_of_sort_by_order_by.q
 
b/ql/src/test/queries/clientpositive/select_columns_subset_of_sort_by_order_by.q
new file mode 100644
index 00000000000..737148946a5
--- /dev/null
+++ 
b/ql/src/test/queries/clientpositive/select_columns_subset_of_sort_by_order_by.q
@@ -0,0 +1,15 @@
+CREATE TABLE test (
+    col1 STRING,
+    col2 STRING
+);
+
+EXPLAIN CBO
+SELECT col1
+FROM test
+SORT BY col1, col2;
+
+set hive.optimize.limittranspose=true;
+EXPLAIN CBO
+SELECT col1
+FROM test
+ORDER BY col1, col2;
diff --git 
a/ql/src/test/results/clientpositive/llap/select_columns_subset_of_sort_by_order_by.q.out
 
b/ql/src/test/results/clientpositive/llap/select_columns_subset_of_sort_by_order_by.q.out
new file mode 100644
index 00000000000..e1f942110d0
--- /dev/null
+++ 
b/ql/src/test/results/clientpositive/llap/select_columns_subset_of_sort_by_order_by.q.out
@@ -0,0 +1,54 @@
+PREHOOK: query: CREATE TABLE test (
+    col1 STRING,
+    col2 STRING
+)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test
+POSTHOOK: query: CREATE TABLE test (
+    col1 STRING,
+    col2 STRING
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test
+PREHOOK: query: EXPLAIN CBO
+SELECT col1
+FROM test
+SORT BY col1, col2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN CBO
+SELECT col1
+FROM test
+SORT BY col1, col2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+CBO PLAN:
+HiveProject(col1=[$0])
+  HiveSortExchange(distribution=[any], collation=[[0, 1]])
+    HiveProject(col1=[$0], col2=[$1])
+      HiveTableScan(table=[[default, test]], table:alias=[test])
+
+PREHOOK: query: EXPLAIN CBO
+SELECT col1
+FROM test
+ORDER BY col1, col2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN CBO
+SELECT col1
+FROM test
+ORDER BY col1, col2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test
+#### A masked pattern was here ####
+CBO PLAN:
+HiveProject(col1=[$0])
+  HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC])
+    HiveProject(col1=[$0], col2=[$1])
+      HiveTableScan(table=[[default, test]], table:alias=[test])
+

Reply via email to