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

jakevin 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 cbdb886b6e8 [fix](Nereids): fill up miss slot of order having project 
(#27480)
cbdb886b6e8 is described below

commit cbdb886b6e846e5f73ad9bd60bad65b928eaf767
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Mon Nov 27 16:00:29 2023 +0800

    [fix](Nereids): fill up miss slot of order having project (#27480)
    
    fill up miss slot of order having project such as
    ```
    select a + 1 as c from t having by c > 2 order by a
    ```
---
 .../org/apache/doris/nereids/rules/RuleType.java     |  1 +
 .../nereids/rules/analysis/FillUpMissingSlots.java   | 20 ++++++++++++++++++++
 .../rules/analysis/FillUpMissingSlotsTest.java       |  7 +++++++
 3 files changed, 28 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
index 7afc0123aae..657189f931f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java
@@ -65,6 +65,7 @@ public enum RuleType {
     FILL_UP_HAVING_AGGREGATE(RuleTypeClass.REWRITE),
     FILL_UP_HAVING_PROJECT(RuleTypeClass.REWRITE),
     FILL_UP_SORT_AGGREGATE(RuleTypeClass.REWRITE),
+    FILL_UP_SORT_HAVING_PROJECT(RuleTypeClass.REWRITE),
     FILL_UP_SORT_HAVING_AGGREGATE(RuleTypeClass.REWRITE),
     FILL_UP_SORT_PROJECT(RuleTypeClass.REWRITE),
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java
index 84d0dbae40a..afee320f6f5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java
@@ -120,6 +120,26 @@ public class FillUpMissingSlots implements 
AnalysisRuleFactory {
                         });
                     })
             ),
+            RuleType.FILL_UP_SORT_HAVING_PROJECT.build(
+                    logicalSort(logicalHaving(logicalProject())).then(sort -> {
+                        Set<Slot> childOutput = sort.child().getOutputSet();
+                        Set<Slot> notExistedInProject = 
sort.getOrderKeys().stream()
+                                .map(OrderKey::getExpr)
+                                .map(Expression::getInputSlots)
+                                .flatMap(Set::stream)
+                                .filter(s -> !childOutput.contains(s))
+                                .collect(Collectors.toSet());
+                        if (notExistedInProject.size() == 0) {
+                            return null;
+                        }
+                        LogicalProject<?> project = sort.child().child();
+                        List<NamedExpression> projects = 
ImmutableList.<NamedExpression>builder()
+                                .addAll(project.getProjects())
+                                .addAll(notExistedInProject).build();
+                        Plan child = 
sort.withChildren(sort.child().withChildren(project.withProjects(projects)));
+                        return new 
LogicalProject<>(ImmutableList.copyOf(project.getOutput()), child);
+                    })
+            ),
             RuleType.FILL_UP_HAVING_AGGREGATE.build(
                 logicalHaving(aggregate()).then(having -> {
                     Aggregate<Plan> agg = having.child();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java
index 2e479c05953..7b0c8095ba6 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java
@@ -579,4 +579,11 @@ public class FillUpMissingSlotsTest extends 
AnalyzeCheckTestBase implements Memo
         PlanChecker.from(connectContext).analyze(sql)
                 .matches(logicalFilter());
     }
+
+    @Test
+    void testSortHaving() {
+        String sql = "SELECT (pk + 1) as c FROM t1 HAVING c  > 1 ORDER BY a1 + 
pk";
+        PlanChecker.from(connectContext).analyze(sql)
+                .applyBottomUp(new CheckAfterRewrite());
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to