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