From 8d1a35493790a8e0d702decd271cf1b86b15939a Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Thu, 29 Jun 2023 12:32:55 +0800 Subject: [PATCH 1/5] [fix](nereids)don't build cte producer if the consumer is empty relation --- .../nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java | 4 +--- regression-test/suites/nereids_syntax_p0/cte.groovy | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java index dab88e686e4432..b3857d3ee56b64 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java @@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalCTE; import org.apache.doris.nereids.trees.plans.logical.LogicalCTEAnchor; import org.apache.doris.nereids.trees.plans.logical.LogicalCTEProducer; +import org.apache.doris.nereids.trees.plans.logical.LogicalEmptyRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalPlan; import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias; import org.apache.doris.qe.ConnectContext; @@ -55,9 +56,6 @@ private LogicalPlan rewrite(LogicalPlan p, CascadesContext cascadesContext) { || !ConnectContext.get().getSessionVariable().getEnablePipelineEngine()) { continue; } - LogicalCTEProducer logicalCTEProducer = new LogicalCTEProducer( - rewrite((LogicalPlan) s.child(), cascadesContext), id); - child = new LogicalCTEAnchor(logicalCTEProducer, child, id); } return child; } diff --git a/regression-test/suites/nereids_syntax_p0/cte.groovy b/regression-test/suites/nereids_syntax_p0/cte.groovy index d2b6eefa0dbd33..15a7afc9556edb 100644 --- a/regression-test/suites/nereids_syntax_p0/cte.groovy +++ b/regression-test/suites/nereids_syntax_p0/cte.groovy @@ -301,5 +301,10 @@ suite("cte") { exception = "[cte1] cannot be used more than once" } + explain { + sql("WITH cte_0 AS ( SELECT 1 AS a ) SELECT * from cte_0 t1 join cte_0 t2 on true WHERE false;") + notContains "MultiCastDataSinks" + } + } From 572fa9e57a53868fc2c3759fec73e3808364f494 Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Mon, 3 Jul 2023 12:11:51 +0800 Subject: [PATCH 2/5] rebase code --- regression-test/data/correctness_p0/test_case_when_decimal.out | 2 -- 1 file changed, 2 deletions(-) diff --git a/regression-test/data/correctness_p0/test_case_when_decimal.out b/regression-test/data/correctness_p0/test_case_when_decimal.out index 1a888306ed3048..79460e550b2d03 100644 --- a/regression-test/data/correctness_p0/test_case_when_decimal.out +++ b/regression-test/data/correctness_p0/test_case_when_decimal.out @@ -5,6 +5,4 @@ -- !sql2 -- 4.41 --- !sql3 -- -4.41 From d054a4b4ce13583caa8e18f341e091747c13f66b Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Mon, 3 Jul 2023 12:29:57 +0800 Subject: [PATCH 3/5] modify code --- regression-test/data/correctness_p0/test_case_when_decimal.out | 1 - 1 file changed, 1 deletion(-) diff --git a/regression-test/data/correctness_p0/test_case_when_decimal.out b/regression-test/data/correctness_p0/test_case_when_decimal.out index 79460e550b2d03..76a2895babc3ee 100644 --- a/regression-test/data/correctness_p0/test_case_when_decimal.out +++ b/regression-test/data/correctness_p0/test_case_when_decimal.out @@ -5,4 +5,3 @@ -- !sql2 -- 4.41 - From 59d8acedd0b4aeea4b6a165f339d2f7a61ebb20f Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Tue, 4 Jul 2023 21:37:48 +0800 Subject: [PATCH 4/5] rebase code --- .../rewrite/BuildCTEAnchorAndCTEProducer.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java index b3857d3ee56b64..11700ecb7785c3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/BuildCTEAnchorAndCTEProducer.java @@ -48,13 +48,18 @@ private LogicalPlan rewrite(LogicalPlan p, CascadesContext cascadesContext) { } LogicalCTE logicalCTE = (LogicalCTE) p; LogicalPlan child = (LogicalPlan) logicalCTE.child(); - for (int i = logicalCTE.getAliasQueries().size() - 1; i >= 0; i--) { - LogicalSubQueryAlias s = (LogicalSubQueryAlias) logicalCTE.getAliasQueries().get(i); - CTEId id = logicalCTE.findCTEId(s.getAlias()); - if (cascadesContext.cteReferencedCount(id) - <= ConnectContext.get().getSessionVariable().inlineCTEReferencedThreshold - || !ConnectContext.get().getSessionVariable().getEnablePipelineEngine()) { - continue; + if (!(child instanceof LogicalEmptyRelation)) { + for (int i = logicalCTE.getAliasQueries().size() - 1; i >= 0; i--) { + LogicalSubQueryAlias s = (LogicalSubQueryAlias) logicalCTE.getAliasQueries().get(i); + CTEId id = logicalCTE.findCTEId(s.getAlias()); + if (cascadesContext.cteReferencedCount(id) + <= ConnectContext.get().getSessionVariable().inlineCTEReferencedThreshold + || !ConnectContext.get().getSessionVariable().getEnablePipelineEngine()) { + continue; + } + LogicalCTEProducer logicalCTEProducer = new LogicalCTEProducer( + rewrite((LogicalPlan) s.child(), cascadesContext), id); + child = new LogicalCTEAnchor(logicalCTEProducer, child, id); } } return child; From 454146a8f6eab6eda3902a8fec8246ea4629d067 Mon Sep 17 00:00:00 2001 From: starocean999 <12095047@qq.com> Date: Thu, 6 Jul 2023 20:43:07 +0800 Subject: [PATCH 5/5] fix out file --- regression-test/data/correctness_p0/test_case_when_decimal.out | 3 +++ 1 file changed, 3 insertions(+) diff --git a/regression-test/data/correctness_p0/test_case_when_decimal.out b/regression-test/data/correctness_p0/test_case_when_decimal.out index 76a2895babc3ee..1a888306ed3048 100644 --- a/regression-test/data/correctness_p0/test_case_when_decimal.out +++ b/regression-test/data/correctness_p0/test_case_when_decimal.out @@ -5,3 +5,6 @@ -- !sql2 -- 4.41 +-- !sql3 -- +4.41 +