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