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

soumyakanti3578 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 5b2fa329d4a HIVE-29729: AIBOE in HiveFilterProjectTransposeRule during 
CBO planning for filters over windowing Projects
5b2fa329d4a is described below

commit 5b2fa329d4a338f9da953d3e8b145f7b7eb82bc3
Author: rtrivedi12 <[email protected]>
AuthorDate: Thu Jul 16 10:37:16 2026 -0500

    HIVE-29729: AIBOE in HiveFilterProjectTransposeRule during CBO planning for 
filters over windowing Projects
---
 .../rules/HiveFilterProjectTransposeRule.java      | 11 +++----
 .../cbo_filter_pushdown_windowing_notnull.q        | 16 ++++++++++
 .../cbo_filter_pushdown_windowing_notnull.q.out    | 35 ++++++++++++++++++++++
 3 files changed, 57 insertions(+), 5 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterProjectTransposeRule.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterProjectTransposeRule.java
index 5db95b0ca48..0f334b33550 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterProjectTransposeRule.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterProjectTransposeRule.java
@@ -337,11 +337,12 @@ public void visit(RelNode node, int ordinal, RelNode 
parent) {
       } else {
         if (node instanceof Filter) {
           check((Filter) node);
-        } else if (node instanceof Project) {
-          RexNode condition = HiveRelOptUtil.pushPastProjectUnlessBloat(
-              filterCondition, (Project) node, bloat);
-          if (condition != null) {
-            filterCondition = condition;
+        } else if (node instanceof Project project) {
+          filterCondition = HiveRelOptUtil.pushPastProjectUnlessBloat(
+              filterCondition, project, bloat);
+          if (filterCondition == null) {
+            // the condition could not be pushed, so bail out
+            return;
           }
         } else {
           // we do not support other operators for now
diff --git 
a/ql/src/test/queries/clientpositive/cbo_filter_pushdown_windowing_notnull.q 
b/ql/src/test/queries/clientpositive/cbo_filter_pushdown_windowing_notnull.q
new file mode 100644
index 00000000000..501cd2a4bba
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cbo_filter_pushdown_windowing_notnull.q
@@ -0,0 +1,16 @@
+-- HIVE-29729: an IS NOT NULL predicate above nested windowing (OVER) Projects 
must
+-- not trip the RedundancyChecker in HiveFilterProjectTransposeRule.
+set hive.cbo.fallback.strategy=NEVER;
+
+create table tab1 (id string);
+
+select rnk2
+from (
+  select
+    row_number() over(order by rnk) as rnk2
+  from (
+    select count(*) over() as rnk
+    from (select count(*) from tab1) t
+  ) t2
+) t3
+where rnk2 is not null;
diff --git 
a/ql/src/test/results/clientpositive/llap/cbo_filter_pushdown_windowing_notnull.q.out
 
b/ql/src/test/results/clientpositive/llap/cbo_filter_pushdown_windowing_notnull.q.out
new file mode 100644
index 00000000000..fd786ea672b
--- /dev/null
+++ 
b/ql/src/test/results/clientpositive/llap/cbo_filter_pushdown_windowing_notnull.q.out
@@ -0,0 +1,35 @@
+PREHOOK: query: create table tab1 (id string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@tab1
+POSTHOOK: query: create table tab1 (id string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@tab1
+PREHOOK: query: select rnk2
+from (
+  select
+    row_number() over(order by rnk) as rnk2
+  from (
+    select count(*) over() as rnk
+    from (select count(*) from tab1) t
+  ) t2
+) t3
+where rnk2 is not null
+PREHOOK: type: QUERY
+PREHOOK: Input: default@tab1
+#### A masked pattern was here ####
+POSTHOOK: query: select rnk2
+from (
+  select
+    row_number() over(order by rnk) as rnk2
+  from (
+    select count(*) over() as rnk
+    from (select count(*) from tab1) t
+  ) t2
+) t3
+where rnk2 is not null
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@tab1
+#### A masked pattern was here ####
+1

Reply via email to