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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 8706fc12fe5 [fix](nereids) fix window expression alias reuse expr id 
(#55286)
8706fc12fe5 is described below

commit 8706fc12fe51b7a580d47081cb5da8b1dcf5f1ef
Author: yujun <[email protected]>
AuthorDate: Fri Aug 29 19:06:59 2025 +0800

    [fix](nereids) fix window expression alias reuse expr id (#55286)
    
    ### What problem does this PR solve?
    
    For `alias(slotReference as slotReference)`, can replace with
    `slotReference` directly.
    
    For example,  for sql `select first_value(b) over() from t`,
    
    Before this pr,  it will have:
    LogicalProject[26] ( distinct=false, projects=[first_value(b) over()#2 AS 
first_value(b) over()#2] )
        |
    LogicalWindow
    
    With this pr, it will have:
    LogicalProject[26] ( distinct=false, projects=[first_value(b) over()#2] )
       |
    LogicalWindow
---
 .../nereids/rules/rewrite/NormalizeToSlot.java      |   8 ++++++++
 .../ExtractAndNormalizeWindowExpressionTest.java    |   7 +++----
 .../push_down_filter_through_window.out             | Bin 938 -> 942 bytes
 .../unique_function/agg_with_unique_function.out    | Bin 13817 -> 13615 bytes
 .../nereids_syntax_p0/push_filter_through_ptopn.out | Bin 1408 -> 1416 bytes
 .../tpcds_sf100/noStatsRfPrune/query44.out          | Bin 4881 -> 4889 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 4881 -> 4889 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
 .../shape_check/tpcds_sf100/rf_prune/query44.out    | Bin 4681 -> 4689 bytes
 .../shape_check/tpcds_sf100/rf_prune/query49.out    | Bin 8575 -> 8611 bytes
 .../shape_check/tpcds_sf100/rf_prune/query51.out    | Bin 2637 -> 2641 bytes
 .../shape_check/tpcds_sf100/rf_prune/query67.out    | Bin 1859 -> 1863 bytes
 .../data/shape_check/tpcds_sf100/shape/query44.out  | Bin 4681 -> 4689 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 4675 -> 4683 bytes
 .../data/shape_check/tpcds_sf1000/hint/query44.out  | Bin 4753 -> 4761 bytes
 .../data/shape_check/tpcds_sf1000/hint/query49.out  | Bin 8575 -> 8611 bytes
 .../data/shape_check/tpcds_sf1000/hint/query51.out  | Bin 2755 -> 2759 bytes
 .../data/shape_check/tpcds_sf1000/hint/query67.out  | Bin 2055 -> 2059 bytes
 .../data/shape_check/tpcds_sf1000/shape/query44.out | Bin 4675 -> 4683 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 4833 -> 4841 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 5851 -> 5942 bytes
 .../suites/variant_p0/test_sub_path_pruning.groovy  |   8 +++++++-
 36 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 b2e8016e7c2..2885fa61bf3 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 4f056668ae0..7cddd539ff1 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_rules_p0/unique_function/agg_with_unique_function.out
 
b/regression-test/data/nereids_rules_p0/unique_function/agg_with_unique_function.out
index a59eb1d160d..b57fe2df5cb 100644
Binary files 
a/regression-test/data/nereids_rules_p0/unique_function/agg_with_unique_function.out
 and 
b/regression-test/data/nereids_rules_p0/unique_function/agg_with_unique_function.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 ee676398836..7b373e4491d 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 ee676398836..7b373e4491d 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 fa32355d830..2a5d67d83e7 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 fa32355d830..2a5d67d83e7 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 a64f93c0e49..11e084598ed 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 04544dd5a3d..1b794870528 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 cf7ca83ca9c..37d8b6fb556 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 86f77130974..deb36956c4f 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 a64f93c0e49..11e084598ed 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 966a4f2f5d4..5b9e3e92ea3 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 9bce80f8d03..92a933fa388 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 1de622047a4..f572c2fb585 100644
--- a/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
+++ b/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
@@ -216,4 +216,10 @@ suite("variant_sub_path_pruning", "variant_type"){
     order_qt_sql """select c1['a'] as c2, c1['b'] as c3 from (select 0 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  0 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 0 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]

Reply via email to