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

sankarh pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/branch-3 by this push:
     new a0e3411c01a HIVE-27708: Backport of HIVE-21104 to branch-3 (#4717)
a0e3411c01a is described below

commit a0e3411c01ae0ed4ac09c17bead143718387db19
Author: Kamal Sharma <88836971+kamalshar...@users.noreply.github.com>
AuthorDate: Tue Oct 31 11:32:21 2023 +0530

    HIVE-27708: Backport of HIVE-21104 to branch-3 (#4717)
    
    HIVE-21104: PTF with nested structure throws ClassCastException (Rajesh 
Balamohan reviewed by Gopal V)
    
    Signed-off-by: Sankar Hariappan <sank...@apache.org>
    Closes (#4717)
---
 .../hive/ql/udf/ptf/WindowingTableFunction.java    |  2 ++
 ql/src/test/queries/clientpositive/windowing.q     |  6 +++++
 .../results/clientpositive/llap/windowing.q.out    | 31 ++++++++++++++++++++++
 .../results/clientpositive/spark/windowing.q.out   | 31 ++++++++++++++++++++++
 4 files changed, 70 insertions(+)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
index 5f9009c484d..827e50fe63b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/WindowingTableFunction.java
@@ -388,6 +388,8 @@ public class WindowingTableFunction extends 
TableFunctionEvaluator {
     }
 
     streamingState.rollingPart.append(row);
+    //Get back converted row
+    row = streamingState.rollingPart.getAt(streamingState.rollingPart.size() 
-1);
 
     WindowTableFunctionDef tabDef = (WindowTableFunctionDef) tableDef;
 
diff --git a/ql/src/test/queries/clientpositive/windowing.q 
b/ql/src/test/queries/clientpositive/windowing.q
index 5de2b0e4733..4278dddf8e0 100644
--- a/ql/src/test/queries/clientpositive/windowing.q
+++ b/ql/src/test/queries/clientpositive/windowing.q
@@ -441,3 +441,9 @@ where p_mfgr='Manufacturer#1';
 -- 47. empty partition
 select sum(p_size) over (partition by p_mfgr )
 from part where p_mfgr = 'm1';
+
+-- 48. nested tables (HIVE-21104)
+DROP TABLE IF EXISTS struct_table_example;
+CREATE TABLE struct_table_example (a int, s1 struct<f1: boolean, f2: string, 
f3: int, f4: int> ) STORED AS ORC;
+INSERT INTO TABLE struct_table_example SELECT 1, named_struct('f1', false, 
'f2', 'test', 'f3', 3, 'f4', 4)  FROM part limit 1;
+select s1.f1, s1.f2, rank() over (partition by s1.f2 order by s1.f4) from 
struct_table_example;
diff --git a/ql/src/test/results/clientpositive/llap/windowing.q.out 
b/ql/src/test/results/clientpositive/llap/windowing.q.out
index ffd21abb4c0..37e9470780f 100644
--- a/ql/src/test/results/clientpositive/llap/windowing.q.out
+++ b/ql/src/test/results/clientpositive/llap/windowing.q.out
@@ -2350,3 +2350,34 @@ from part where p_mfgr = 'm1'
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@part
 #### A masked pattern was here ####
+PREHOOK: query: DROP TABLE IF EXISTS struct_table_example
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS struct_table_example
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1: 
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1: 
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@struct_table_example
+PREHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1, 
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4)  FROM part limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1, 
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4)  FROM part limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+POSTHOOK: Output: default@struct_table_example
+POSTHOOK: Lineage: struct_table_example.a SIMPLE []
+POSTHOOK: Lineage: struct_table_example.s1 EXPRESSION []
+PREHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by 
s1.f4) from struct_table_example
+PREHOOK: type: QUERY
+PREHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+POSTHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by 
s1.f4) from struct_table_example
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+false  test    1
diff --git a/ql/src/test/results/clientpositive/spark/windowing.q.out 
b/ql/src/test/results/clientpositive/spark/windowing.q.out
index be458f1755d..5c2cce73970 100644
--- a/ql/src/test/results/clientpositive/spark/windowing.q.out
+++ b/ql/src/test/results/clientpositive/spark/windowing.q.out
@@ -2347,3 +2347,34 @@ from part where p_mfgr = 'm1'
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@part
 #### A masked pattern was here ####
+PREHOOK: query: DROP TABLE IF EXISTS struct_table_example
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS struct_table_example
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1: 
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: CREATE TABLE struct_table_example (a int, s1 struct<f1: 
boolean, f2: string, f3: int, f4: int> ) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@struct_table_example
+PREHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1, 
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4)  FROM part limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+PREHOOK: Output: default@struct_table_example
+POSTHOOK: query: INSERT INTO TABLE struct_table_example SELECT 1, 
named_struct('f1', false, 'f2', 'test', 'f3', 3, 'f4', 4)  FROM part limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+POSTHOOK: Output: default@struct_table_example
+POSTHOOK: Lineage: struct_table_example.a SIMPLE []
+POSTHOOK: Lineage: struct_table_example.s1 EXPRESSION []
+PREHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by 
s1.f4) from struct_table_example
+PREHOOK: type: QUERY
+PREHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+POSTHOOK: query: select s1.f1, s1.f2, rank() over (partition by s1.f2 order by 
s1.f4) from struct_table_example
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@struct_table_example
+#### A masked pattern was here ####
+false  test    1

Reply via email to