This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 6ad7fb28989 branch-3.1: [fix](nereids) fix window expression alias
reuse expr id #55286 (#55486)
6ad7fb28989 is described below
commit 6ad7fb28989c5dd3eb4d814a1835b607351938b3
Author: yujun <[email protected]>
AuthorDate: Thu Sep 4 17:21:09 2025 +0800
branch-3.1: [fix](nereids) fix window expression alias reuse expr id #55286
(#55486)
cherry pick from #55286
---
.../doris/nereids/rules/rewrite/NormalizeToSlot.java | 8 ++++++++
.../ExtractAndNormalizeWindowExpressionTest.java | 7 +++----
.../push_down_filter_through_window.out | Bin 906 -> 910 bytes
.../nereids_syntax_p0/push_filter_through_ptopn.out | Bin 1408 -> 1416 bytes
.../tpcds_sf100/noStatsRfPrune/query44.out | Bin 4406 -> 4414 bytes
.../tpcds_sf100/noStatsRfPrune/query49.out | Bin 8542 -> 8578 bytes
.../tpcds_sf100/noStatsRfPrune/query51.out | Bin 2637 -> 2641 bytes
.../tpcds_sf100/noStatsRfPrune/query67.out | Bin 1867 -> 1871 bytes
.../tpcds_sf100/no_stats_shape/query44.out | Bin 4406 -> 4414 bytes
.../tpcds_sf100/no_stats_shape/query49.out | Bin 8542 -> 8578 bytes
.../tpcds_sf100/no_stats_shape/query51.out | Bin 2637 -> 2641 bytes
.../tpcds_sf100/no_stats_shape/query67.out | Bin 1953 -> 1957 bytes
.../data/shape_check/tpcds_sf100/rf_prune/query44.out | Bin 4206 -> 4214 bytes
.../data/shape_check/tpcds_sf100/rf_prune/query49.out | Bin 8575 -> 8611 bytes
.../data/shape_check/tpcds_sf100/rf_prune/query51.out | Bin 2637 -> 2641 bytes
.../data/shape_check/tpcds_sf100/rf_prune/query67.out | Bin 1859 -> 1863 bytes
.../data/shape_check/tpcds_sf100/shape/query44.out | Bin 4206 -> 4214 bytes
.../data/shape_check/tpcds_sf100/shape/query49.out | Bin 8575 -> 8611 bytes
.../data/shape_check/tpcds_sf100/shape/query51.out | Bin 2637 -> 2641 bytes
.../data/shape_check/tpcds_sf100/shape/query67.out | Bin 1945 -> 1949 bytes
.../tpcds_sf1000/bs_downgrade_shape/query44.out | Bin 4200 -> 4208 bytes
.../data/shape_check/tpcds_sf1000/hint/query44.out | Bin 4279 -> 4287 bytes
.../data/shape_check/tpcds_sf1000/hint/query49.out | Bin 8575 -> 8611 bytes
.../data/shape_check/tpcds_sf1000/hint/query51.out | Bin 2756 -> 2760 bytes
.../data/shape_check/tpcds_sf1000/hint/query67.out | Bin 2056 -> 2060 bytes
.../data/shape_check/tpcds_sf1000/shape/query44.out | Bin 4200 -> 4208 bytes
.../data/shape_check/tpcds_sf1000/shape/query49.out | Bin 8575 -> 8611 bytes
.../data/shape_check/tpcds_sf1000/shape/query51.out | Bin 2637 -> 2641 bytes
.../data/shape_check/tpcds_sf1000/shape/query67.out | Bin 1945 -> 1949 bytes
.../shape_check/tpcds_sf10t_orc/shape/query44.out | Bin 4358 -> 4366 bytes
.../shape_check/tpcds_sf10t_orc/shape/query49.out | Bin 8536 -> 8572 bytes
.../shape_check/tpcds_sf10t_orc/shape/query51.out | Bin 2637 -> 2641 bytes
.../shape_check/tpcds_sf10t_orc/shape/query67.out | Bin 1953 -> 1957 bytes
.../data/variant_p0/test_sub_path_pruning.out | Bin 5881 -> 5972 bytes
.../suites/variant_p0/test_sub_path_pruning.groovy | 8 +++++++-
35 files changed, 18 insertions(+), 5 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NormalizeToSlot.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NormalizeToSlot.java
index 0e1fba1fc44..85367107a2c 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NormalizeToSlot.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NormalizeToSlot.java
@@ -125,6 +125,14 @@ public interface NormalizeToSlot {
NormalizeToSlotTriplet normalizeToSlotTriplet =
normalizeToSlotMap.get(child);
return normalizeToSlotTriplet == null ? child :
normalizeToSlotTriplet.remainExpr;
});
+ if (rewriteExpr instanceof Alias) {
+ Alias alias = (Alias) rewriteExpr;
+ if (alias.child() instanceof SlotReference
+ && alias.getExprId().equals(((SlotReference)
alias.child()).getExprId())) {
+ // alias k1#1 as k1#1 --> k1#1
+ rewriteExpr = alias.child();
+ }
+ }
result.add((E) rewriteExpr);
}
return result.build();
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpressionTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpressionTest.java
index 476131e6b06..a3527f5d501 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpressionTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ExtractAndNormalizeWindowExpressionTest.java
@@ -90,7 +90,7 @@ public class ExtractAndNormalizeWindowExpressionTest
implements MemoPatternMatch
).when(project -> {
List<NamedExpression> projects =
project.getProjects();
return projects.get(0).equals(id)
- && projects.get(1) instanceof Alias;
+ && projects.get(1) instanceof SlotReference &&
projects.get(1).equals(windowAlias.toSlot());
})
);
}
@@ -147,7 +147,7 @@ public class ExtractAndNormalizeWindowExpressionTest
implements MemoPatternMatch
).when(project -> {
List<NamedExpression> projects =
project.getProjects();
return projects.get(0) instanceof SlotReference
- && projects.get(1) instanceof Alias;
+ && projects.get(1) instanceof SlotReference &&
projects.get(1).equals(windowAlias.toSlot());
})
);
}
@@ -226,8 +226,7 @@ public class ExtractAndNormalizeWindowExpressionTest
implements MemoPatternMatch
List<NamedExpression> projects =
project.getProjects();
return projects.get(0).equals(gender)
&& projects.get(1) instanceof SlotReference
- && projects.get(2) instanceof Alias
- && projects.get(2).child(0) instanceof
SlotReference;
+ && projects.get(2) instanceof SlotReference &&
projects.get(2).equals(windowAlias.toSlot());
})
);
}
diff --git
a/regression-test/data/nereids_rules_p0/push_down_filter/push_down_filter_through_window.out
b/regression-test/data/nereids_rules_p0/push_down_filter/push_down_filter_through_window.out
index a200972a0fa..944fafc5fb3 100644
Binary files
a/regression-test/data/nereids_rules_p0/push_down_filter/push_down_filter_through_window.out
and
b/regression-test/data/nereids_rules_p0/push_down_filter/push_down_filter_through_window.out
differ
diff --git
a/regression-test/data/nereids_syntax_p0/push_filter_through_ptopn.out
b/regression-test/data/nereids_syntax_p0/push_filter_through_ptopn.out
index dd23fd8ea50..49e5abb8c5f 100644
Binary files
a/regression-test/data/nereids_syntax_p0/push_filter_through_ptopn.out and
b/regression-test/data/nereids_syntax_p0/push_filter_through_ptopn.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query44.out
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query44.out
index c2cc91b7f43..fdb632e7aea 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query44.out and
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query44.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out
index 0db3fa84118..0463d58df08 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out and
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query51.out
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query51.out
index cec684574ed..11fecfc9825 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query51.out and
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query51.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query67.out
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query67.out
index 2370bce7b8f..32aca703b09 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query67.out and
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query67.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query44.out
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query44.out
index c2cc91b7f43..fdb632e7aea 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query44.out and
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query44.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out
index 0db3fa84118..0463d58df08 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out and
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query51.out
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query51.out
index cec684574ed..11fecfc9825 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query51.out and
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query51.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query67.out
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query67.out
index e4a703c25ac..b3a41aa353e 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query67.out and
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query67.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query44.out
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query44.out
index 86d15735486..49a3c764bda 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query44.out and
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query44.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out
index 7d0f6b1ce22..b13ecb58ccc 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out and
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query51.out
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query51.out
index cec684574ed..11fecfc9825 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query51.out and
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query51.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query67.out
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query67.out
index d043d5f25b6..ca0256aeea7 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query67.out and
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query67.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query44.out
b/regression-test/data/shape_check/tpcds_sf100/shape/query44.out
index 86d15735486..49a3c764bda 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query44.out
and b/regression-test/data/shape_check/tpcds_sf100/shape/query44.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
b/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
index 7d0f6b1ce22..b13ecb58ccc 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
and b/regression-test/data/shape_check/tpcds_sf100/shape/query49.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query51.out
b/regression-test/data/shape_check/tpcds_sf100/shape/query51.out
index cec684574ed..11fecfc9825 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query51.out
and b/regression-test/data/shape_check/tpcds_sf100/shape/query51.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query67.out
b/regression-test/data/shape_check/tpcds_sf100/shape/query67.out
index 09aed607328..5d1c063b4cb 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query67.out
and b/regression-test/data/shape_check/tpcds_sf100/shape/query67.out differ
diff --git
a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query44.out
b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query44.out
index 5c302c265fc..10696d416fe 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query44.out
and
b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query44.out
differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query44.out
b/regression-test/data/shape_check/tpcds_sf1000/hint/query44.out
index 013c93d6ea7..a2f7a552f10 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query44.out
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query44.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
b/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
index 8b807baf540..dcf3a9418d3 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query51.out
b/regression-test/data/shape_check/tpcds_sf1000/hint/query51.out
index ad962e7d114..1151d99b1ee 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query51.out
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query51.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query67.out
b/regression-test/data/shape_check/tpcds_sf1000/hint/query67.out
index cb8a185598c..17b81ca023b 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query67.out
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query67.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query44.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query44.out
index 5c302c265fc..10696d416fe 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query44.out
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query44.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
index 8b807baf540..dcf3a9418d3 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query51.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query51.out
index 98b43bfdfc1..9ffa695b733 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query51.out
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query51.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query67.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query67.out
index 11f2d128129..b5f6486b18a 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query67.out
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query67.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query44.out
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query44.out
index 6549d1401b1..2db8bd531f5 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query44.out and
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query44.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query49.out
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query49.out
index 04db2001d08..a5885662602 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query49.out and
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query49.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query51.out
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query51.out
index 5d049b5a6bb..9f3b3b1b1a3 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query51.out and
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query51.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query67.out
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query67.out
index 72490b12bb4..c7cf13027a3 100644
Binary files
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query67.out and
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query67.out differ
diff --git a/regression-test/data/variant_p0/test_sub_path_pruning.out
b/regression-test/data/variant_p0/test_sub_path_pruning.out
index 0c0db9c9948..0c78380b131 100644
Binary files a/regression-test/data/variant_p0/test_sub_path_pruning.out and
b/regression-test/data/variant_p0/test_sub_path_pruning.out differ
diff --git a/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
b/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
index d1d4f09d04b..fbe42081629 100644
--- a/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
+++ b/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
@@ -219,4 +219,10 @@ suite("variant_sub_path_pruning", "variant_type"){
order_qt_sql """select c1['a'] as c2, c1['b'] as c3 from (select 1 as id,
cast('{"a":1, "b":2}' as variant) as c1 order by id limit 100) tmp;"""
order_qt_sql """select c1['a'] from (select 1 as id, cast('{"b":{"a":1}}'
as variant)["b"] as c1 order by id limit 100) tmp;"""
order_qt_sql """select c1['a'] as c2, c1['b'] as c3 from (select 1 as id,
cast('{"b":{"a":1, "b":2}}' as variant)["b"] as c1 order by id limit 100)
tmp;"""
-}
\ No newline at end of file
+
+ order_qt_sql_no_dead_loop """
+ select
+ FIRST_VALUE(dt['a']) over (PARTITION by id) A12708
+ FROM pruning_test
+ """
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]