Skip to content

Commit bf98cbb

Browse files
committed
Extract table predicates during planning
1 parent 832d8f4 commit bf98cbb

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

presto-main/src/main/java/io/prestosql/sql/planner/PlanOptimizers.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public PlanOptimizers(
275275
.addAll(new CanonicalizeExpressions(metadata, typeAnalyzer).rules())
276276
.build());
277277

278-
PlanOptimizer predicatePushDown = new StatsRecordingPlanOptimizer(optimizerStats, new PredicatePushDown(metadata, typeAnalyzer, false));
278+
PlanOptimizer predicatePushDown = new StatsRecordingPlanOptimizer(optimizerStats, new PredicatePushDown(metadata, typeAnalyzer, true));
279279

280280
builder.add(
281281
// Clean up all the sugar in expressions, e.g. AtTimeZone, must be run before all the other optimizers
@@ -399,7 +399,9 @@ public PlanOptimizers(
399399
new TransformCorrelatedSingleRowSubqueryToProject(),
400400
new RemoveAggregationInSemiJoin())),
401401
new CheckSubqueryNodesAreRewritten(),
402-
predicatePushDown,
402+
new StatsRecordingPlanOptimizer(
403+
optimizerStats,
404+
new PredicatePushDown(metadata, typeAnalyzer, false)),
403405
new IterativeOptimizer(
404406
ruleStats,
405407
statsCalculator,

presto-main/src/test/java/io/prestosql/sql/planner/TestPredicatePushdown.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,4 +503,22 @@ public void testRemovesRedundantTableScanPredicate()
503503
anyTree(
504504
values("COL")))));
505505
}
506+
507+
@Test
508+
public void testTablePredicateIsExtracted()
509+
{
510+
assertPlan(
511+
"SELECT * FROM orders, nation WHERE orderstatus = CAST(nation.name AS varchar(1)) AND orderstatus BETWEEN 'A' AND 'O'",
512+
anyTree(
513+
node(JoinNode.class,
514+
anyTree(
515+
tableScan(
516+
"orders",
517+
ImmutableMap.of("ORDERSTATUS", "orderstatus"))),
518+
anyTree(
519+
filter("CAST(NAME AS varchar(1)) IN ('F', 'O')",
520+
tableScan(
521+
"nation",
522+
ImmutableMap.of("NAME", "name")))))));
523+
}
506524
}

0 commit comments

Comments
 (0)