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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 153c775b37f7b42ed16e8ea1cdf29e7f78847f17
Author: morrySnow <[email protected]>
AuthorDate: Wed Feb 28 18:33:42 2024 +0800

    [fix](Nereids) Make the case sensitivity of the result labels compatible 
with MySQL (#31510)
    
    SQL: SELECT iD FROM t1
    before the label was: id
    after this PR the label will be: iD
---
 .../nereids/rules/analysis/CheckAfterRewrite.java  |  4 +-
 .../doris/nereids/rules/analysis/SlotBinder.java   |  4 +-
 .../trees/expressions/ArrayItemReference.java      | 10 +++++
 .../trees/expressions/MarkJoinSlotReference.java   |  5 +++
 .../transposeJoin/transposeSemiJoinAgg.groovy      | 50 +++++++++++-----------
 5 files changed, 45 insertions(+), 28 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java
index e098e0cac13..b1313a16a19 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAfterRewrite.java
@@ -107,9 +107,9 @@ public class CheckAfterRewrite extends 
OneAnalysisRuleFactory {
                 .collect(Collectors.toSet());
         notFromChildren = removeValidSlotsNotFromChildren(notFromChildren, 
childrenOutput);
         if (!notFromChildren.isEmpty()) {
-            if (plan.child(0) instanceof LogicalAggregate) {
+            if (plan.arity() != 0 && plan.child(0) instanceof 
LogicalAggregate) {
                 throw new AnalysisException(String.format("%s not in agg's 
output", notFromChildren
-                        .stream().map(slot -> 
slot.getName()).collect(Collectors.joining(", "))));
+                        
.stream().map(NamedExpression::getName).collect(Collectors.joining(", "))));
             } else {
                 throw new AnalysisException(String.format(
                         "Input slot(s) not in child's output: %s in plan: %s,"
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java
index 7f6e23a120d..8ae79b9c21f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SlotBinder.java
@@ -307,7 +307,9 @@ public class SlotBinder extends SubExprAnalyzer {
             //TODO: handle name parts more than three.
             throw new AnalysisException("Not supported name: "
                     + StringUtils.join(nameParts, "."));
-        }).collect(Collectors.toList());
+        })
+                .map(s -> 
s.withName(unboundSlot.getNameParts().get(unboundSlot.getNameParts().size() - 
1)))
+                .collect(Collectors.toList());
     }
 
     public static boolean compareDbName(String boundedDbName, String 
unBoundDbName) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
index d2a78859e26..3dd0ef64852 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
@@ -150,6 +150,16 @@ public class ArrayItemReference extends NamedExpression 
implements ExpectsInputT
             return new ArrayItemSlot(exprId, name, dataType, nullable);
         }
 
+        @Override
+        public ArrayItemSlot withName(String name) {
+            return new ArrayItemSlot(exprId, name, dataType, nullable);
+        }
+
+        @Override
+        public SlotReference withNullable(boolean newNullable) {
+            return new ArrayItemSlot(exprId, name, dataType, nullable);
+        }
+
         @Override
         public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
             return visitor.visitArrayItemSlot(this, context);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java
index 021fcea1a3a..35b217b8a9e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java
@@ -73,4 +73,9 @@ public class MarkJoinSlotReference extends SlotReference 
implements SlotNotFromC
     public MarkJoinSlotReference withExprId(ExprId exprId) {
         return new MarkJoinSlotReference(exprId, name, existsHasAgg);
     }
+
+    @Override
+    public SlotReference withName(String name) {
+        return new MarkJoinSlotReference(exprId, name, existsHasAgg);
+    }
 }
diff --git 
a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
 
b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
index c3784219f79..a0e411073fe 100644
--- 
a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
@@ -70,47 +70,47 @@ suite("transposeSemiJoinAgg") {
 
     sql "set enable_runtime_filter_prune=false;"
     sql '''
-    alter table T1 modify column A set stats ('ndv'='5999989709', 
'num_nulls'='0', 'row_count'='5999989709');
+    alter table T1 modify column a set stats ('ndv'='5999989709', 
'num_nulls'='0', 'row_count'='5999989709');
     '''
     sql '''
-    alter table T1 modify column B set stats ('ndv'='5999989709', 
'num_nulls'='0', 'row_count'='5999989709');
+    alter table T1 modify column b set stats ('ndv'='5999989709', 
'num_nulls'='0', 'row_count'='5999989709');
     '''
     sql '''
-    alter table T2 modify column A set stats ('ndv'='100', 'num_nulls'='0', 
'row_count'='100');
+    alter table T2 modify column a set stats ('ndv'='100', 'num_nulls'='0', 
'row_count'='100');
     '''
     // RULE: TransposeSemiJoinAggProject
     // 1. group-by(without grouping sets) 
     // agg-leftSemi => leftSemi-agg
     qt_groupby_positive_case """
         explain shape plan
-        select T3.A
-        from (select A, B, sum(C) from T1 group by A, B) T3
-        left semi join T2 on T3.A=T2.A;
+        select T3.a
+        from (select a, b, sum(c) from T1 group by a, b) T3
+        left semi join T2 on T3.a=T2.a;
     """
 
     // agg-leftSemi: agg not pushed down
     qt_groupby_negative_case """
         explain shape plan
-        select T3.A
-        from (select A, B, sum(C) as D from T1 group by A, B) T3
-        left semi join T2 on T3.D=T2.A;
+        select T3.a
+        from (select a, b, sum(c) as d from T1 group by a, b) T3
+        left semi join T2 on T3.D=T2.a;
         """
 
     // 2 grouping sets
     // agg-leftSemi => leftSemi-agg
     qt_grouping_positive_case """
         explain shape plan
-        select T3.A
-        from (select A, B, sum(C) from T1 group by grouping sets ((A, B), 
(A))) T3
-        left semi join T2 on T3.A=T2.A;
+        select T3.a
+        from (select a, b, sum(c) from T1 group by grouping sets ((a, b), 
(a))) T3
+        left semi join T2 on T3.a=T2.a;
     """
 
     // agg-leftSemi: agg not pushed down
     qt_grouping_negative_case """
         explain shape plan
-        select T3.A
-        from (select A, B, sum(C) as D from T1 group by grouping sets ((A, B), 
(A), ())) T3
-        left semi join T2 on T3.D=T2.A;
+        select T3.a
+        from (select a, b, sum(c) as D from T1 group by grouping sets ((a, b), 
(a), ())) T3
+        left semi join T2 on T3.D=T2.a;
     """
 
     // RULE: TransposeSemiJoinAgg
@@ -118,32 +118,32 @@ suite("transposeSemiJoinAgg") {
     // agg-leftSemi => leftSemi-agg
     qt_groupby_positive_case2 """
         explain shape plan
-        select T3.A
-        from (select A from T1 group by A) T3
-        left semi join T2 on T3.A=T2.A;
+        select T3.a
+        from (select a from T1 group by a) T3
+        left semi join T2 on T3.a=T2.a;
     """
 
     // agg-leftSemi: agg not pushed down
     qt_groupby_negative_case2 """
         explain shape plan
         select T3.D
-        from (select sum(C) as D from T1 group by A) T3
-        left semi join T2 on T3.D=T2.A;
+        from (select sum(c) as D from T1 group by a) T3
+        left semi join T2 on T3.D=T2.a;
         """
 
     // 2 grouping sets
     // agg-leftSemi => leftSemi-agg
     qt_grouping_positive_case2 """
         explain shape plan
-        select T3.A
-        from (select A from T1 group by grouping sets ((A, B), (A))) T3
-        left semi join T2 on T3.A=T2.A;
+        select T3.a
+        from (select a from T1 group by grouping sets ((a, b), (a))) T3
+        left semi join T2 on T3.a=T2.a;
     """
     // agg-leftSemi: agg not pushed down
     qt_grouping_negative_case2 """
         explain shape plan
         select T3.D
-        from (select sum(C) as D from T1 group by grouping sets ((A, B), (A), 
())) T3
-        left semi join T2 on T3.D=T2.A;
+        from (select sum(C) as D from T1 group by grouping sets ((a, b), (a), 
())) T3
+        left semi join T2 on T3.D=T2.a;
         """
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to