|
18 | 18 | package org.apache.doris.nereids.postprocess; |
19 | 19 |
|
20 | 20 | import org.apache.doris.common.Pair; |
| 21 | +import org.apache.doris.nereids.NereidsPlanner; |
| 22 | +import org.apache.doris.nereids.StatementContext; |
21 | 23 | import org.apache.doris.nereids.datasets.ssb.SSBTestBase; |
22 | 24 | import org.apache.doris.nereids.datasets.ssb.SSBUtils; |
23 | 25 | import org.apache.doris.nereids.glue.translator.PhysicalPlanTranslator; |
24 | 26 | import org.apache.doris.nereids.glue.translator.PlanTranslatorContext; |
25 | 27 | import org.apache.doris.nereids.hint.DistributeHint; |
| 28 | +import org.apache.doris.nereids.parser.NereidsParser; |
26 | 29 | import org.apache.doris.nereids.processor.post.PlanPostProcessors; |
27 | 30 | import org.apache.doris.nereids.processor.post.RuntimeFilterContext; |
| 31 | +import org.apache.doris.nereids.properties.PhysicalProperties; |
28 | 32 | import org.apache.doris.nereids.trees.expressions.Alias; |
29 | 33 | import org.apache.doris.nereids.trees.expressions.EqualTo; |
30 | 34 | import org.apache.doris.nereids.trees.expressions.ExprId; |
|
34 | 38 | import org.apache.doris.nereids.trees.plans.DistributeType; |
35 | 39 | import org.apache.doris.nereids.trees.plans.JoinType; |
36 | 40 | import org.apache.doris.nereids.trees.plans.Plan; |
| 41 | +import org.apache.doris.nereids.trees.plans.commands.ExplainCommand; |
| 42 | +import org.apache.doris.nereids.trees.plans.logical.LogicalPlan; |
37 | 43 | import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalPlan; |
38 | 44 | import org.apache.doris.nereids.trees.plans.physical.PhysicalHashJoin; |
39 | 45 | import org.apache.doris.nereids.trees.plans.physical.PhysicalOlapScan; |
40 | 46 | import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan; |
41 | 47 | import org.apache.doris.nereids.trees.plans.physical.PhysicalProject; |
42 | 48 | import org.apache.doris.nereids.trees.plans.physical.RuntimeFilter; |
| 49 | +import org.apache.doris.nereids.util.MemoTestUtils; |
43 | 50 | import org.apache.doris.nereids.util.PlanChecker; |
| 51 | +import org.apache.doris.qe.OriginStatement; |
44 | 52 |
|
45 | 53 | import com.google.common.collect.ImmutableList; |
46 | 54 | import com.google.common.collect.Sets; |
@@ -420,4 +428,25 @@ public void testNotGenerateRfOnDanglingSlot() { |
420 | 428 | Assertions.assertEquals(0, ((AbstractPhysicalPlan) plan.child(0).child(1).child(0)) |
421 | 429 | .getAppliedRuntimeFilters().size()); |
422 | 430 | } |
| 431 | + |
| 432 | + @Test |
| 433 | + public void testRuntimeFilterBlockByRecCte() { |
| 434 | + String sql = new StringBuilder().append("with recursive xx as (\n").append(" select\n") |
| 435 | + .append(" c_custkey as c1\n").append(" from\n").append(" customer\n").append(" union\n") |
| 436 | + .append(" select\n").append(" xx.c1 as c1\n").append(" from\n").append(" xx\n").append(")\n") |
| 437 | + .append("select\n").append(" xx.c1\n").append(" from\n").append(" xx\n") |
| 438 | + .append(" join lineorder on lineorder.lo_custkey = xx.c1").toString(); |
| 439 | + LogicalPlan unboundPlan = new NereidsParser().parseSingle(sql); |
| 440 | + StatementContext statementContext = new StatementContext(connectContext, |
| 441 | + new OriginStatement(sql, 0)); |
| 442 | + NereidsPlanner planner = new NereidsPlanner(statementContext); |
| 443 | + planner.planWithLock(unboundPlan, PhysicalProperties.ANY, |
| 444 | + ExplainCommand.ExplainLevel.OPTIMIZED_PLAN); |
| 445 | + MemoTestUtils.initMemoAndValidState(planner.getCascadesContext()); |
| 446 | + new PhysicalPlanTranslator(new PlanTranslatorContext(planner.getCascadesContext())) |
| 447 | + .translatePlan((PhysicalPlan) planner.getOptimizedPlan()); |
| 448 | + RuntimeFilterContext context = planner.getCascadesContext().getRuntimeFilterContext(); |
| 449 | + List<RuntimeFilter> filters = context.getNereidsRuntimeFilter(); |
| 450 | + Assertions.assertEquals(0, filters.size()); |
| 451 | + } |
423 | 452 | } |
0 commit comments