You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ja...@apache.org on 2023/11/27 08:00:39 UTC
(doris) branch master updated: [fix](Nereids): fill up miss slot of order having project (#27480)
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: 谢健 <ji...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org