Skip to content

Commit 17fd8e1

Browse files
committedDec 2, 2024
Use ExpressionOptimizerProvider
The runtime should consolidate to the `ExpressionOptimizerProvider` factory so that it can be customized without significant refactoring.
1 parent 6720f5c commit 17fd8e1

21 files changed

+136
-52
lines changed
 

‎presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/JdbcConnector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public ConnectorPlanOptimizerProvider getConnectorPlanOptimizerProvider()
109109
functionManager,
110110
functionResolution,
111111
rowExpressionService.getDeterminismEvaluator(),
112-
rowExpressionService.getExpressionOptimizer());
112+
rowExpressionService);
113113
}
114114

115115
@Override

‎presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcComputePushdown.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import com.facebook.presto.spi.plan.PlanNodeIdAllocator;
3030
import com.facebook.presto.spi.plan.TableScanNode;
3131
import com.facebook.presto.spi.relation.DeterminismEvaluator;
32-
import com.facebook.presto.spi.relation.ExpressionOptimizer;
32+
import com.facebook.presto.spi.relation.ExpressionOptimizerProvider;
3333
import com.facebook.presto.spi.relation.RowExpression;
3434

3535
import java.util.Optional;
@@ -44,15 +44,15 @@
4444
public class JdbcComputePushdown
4545
implements ConnectorPlanOptimizer
4646
{
47-
private final ExpressionOptimizer expressionOptimizer;
47+
private final ExpressionOptimizerProvider expressionOptimizerProvider;
4848
private final JdbcFilterToSqlTranslator jdbcFilterToSqlTranslator;
4949
private final LogicalRowExpressions logicalRowExpressions;
5050

5151
public JdbcComputePushdown(
5252
FunctionMetadataManager functionMetadataManager,
5353
StandardFunctionResolution functionResolution,
5454
DeterminismEvaluator determinismEvaluator,
55-
ExpressionOptimizer expressionOptimizer,
55+
ExpressionOptimizerProvider expressionOptimizerProvider,
5656
String identifierQuote,
5757
Set<Class<?>> functionTranslators)
5858
{
@@ -62,7 +62,7 @@ public JdbcComputePushdown(
6262
requireNonNull(determinismEvaluator, "determinismEvaluator is null");
6363
requireNonNull(functionResolution, "functionResolution is null");
6464

65-
this.expressionOptimizer = requireNonNull(expressionOptimizer, "expressionOptimizer is null");
65+
this.expressionOptimizerProvider = requireNonNull(expressionOptimizerProvider, "expressionOptimizerProvider is null");
6666
this.jdbcFilterToSqlTranslator = new JdbcFilterToSqlTranslator(
6767
functionMetadataManager,
6868
buildFunctionTranslator(functionTranslators),
@@ -106,7 +106,7 @@ public PlanNode visitFilter(FilterNode node, RewriteContext<Void> context)
106106
TableHandle oldTableHandle = oldTableScanNode.getTable();
107107
JdbcTableHandle oldConnectorTable = (JdbcTableHandle) oldTableHandle.getConnectorHandle();
108108

109-
RowExpression predicate = expressionOptimizer.optimize(node.getPredicate(), OPTIMIZED, session);
109+
RowExpression predicate = expressionOptimizerProvider.getExpressionOptimizer().optimize(node.getPredicate(), OPTIMIZED, session);
110110
predicate = logicalRowExpressions.convertToConjunctiveNormalForm(predicate);
111111
TranslatedExpression<JdbcExpression> jdbcExpression = translateWith(
112112
predicate,

‎presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcPlanOptimizerProvider.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import com.facebook.presto.spi.function.FunctionMetadataManager;
2121
import com.facebook.presto.spi.function.StandardFunctionResolution;
2222
import com.facebook.presto.spi.relation.DeterminismEvaluator;
23-
import com.facebook.presto.spi.relation.ExpressionOptimizer;
23+
import com.facebook.presto.spi.relation.ExpressionOptimizerProvider;
2424
import com.google.common.collect.ImmutableSet;
2525
import com.google.inject.Inject;
2626

@@ -34,7 +34,7 @@ public class JdbcPlanOptimizerProvider
3434
private final FunctionMetadataManager functionManager;
3535
private final StandardFunctionResolution functionResolution;
3636
private final DeterminismEvaluator determinismEvaluator;
37-
private final ExpressionOptimizer expressionOptimizer;
37+
private final ExpressionOptimizerProvider expressionOptimizerProvider;
3838
private final String identifierQuote;
3939

4040
@Inject
@@ -43,12 +43,12 @@ public JdbcPlanOptimizerProvider(
4343
FunctionMetadataManager functionManager,
4444
StandardFunctionResolution functionResolution,
4545
DeterminismEvaluator determinismEvaluator,
46-
ExpressionOptimizer expressionOptimizer)
46+
ExpressionOptimizerProvider expressionOptimizerProvider)
4747
{
4848
this.functionManager = requireNonNull(functionManager, "functionManager is null");
4949
this.functionResolution = requireNonNull(functionResolution, "functionResolution is null");
5050
this.determinismEvaluator = requireNonNull(determinismEvaluator, "determinismEvaluator is null");
51-
this.expressionOptimizer = requireNonNull(expressionOptimizer, "expressionOptimizer is null");
51+
this.expressionOptimizerProvider = requireNonNull(expressionOptimizerProvider, "expressionOptimizerProvider is null");
5252
this.identifierQuote = jdbcClient.getIdentifierQuote();
5353
}
5454

@@ -65,7 +65,7 @@ public Set<ConnectorPlanOptimizer> getPhysicalPlanOptimizers()
6565
functionManager,
6666
functionResolution,
6767
determinismEvaluator,
68-
expressionOptimizer,
68+
expressionOptimizerProvider,
6969
identifierQuote,
7070
getFunctionTranslators()));
7171
}

‎presto-base-jdbc/src/test/java/com/facebook/presto/plugin/jdbc/optimization/TestJdbcComputePushdown.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public TestJdbcComputePushdown()
105105
functionAndTypeManager,
106106
functionResolution,
107107
determinismEvaluator,
108-
new RowExpressionOptimizer(METADATA),
108+
() -> new RowExpressionOptimizer(METADATA),
109109
"'",
110110
getFunctionTranslators());
111111
}

‎presto-hive/src/test/java/com/facebook/presto/hive/HiveTestUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public String formatRowExpression(ConnectorSession session, RowExpression expres
151151
};
152152

153153
public static final FilterStatsCalculatorService FILTER_STATS_CALCULATOR_SERVICE = new ConnectorFilterStatsCalculatorService(
154-
new FilterStatsCalculator(METADATA, new ScalarStatsCalculator(METADATA), new StatsNormalizer()));
154+
new FilterStatsCalculator(METADATA, new ScalarStatsCalculator(METADATA, ROW_EXPRESSION_SERVICE), new StatsNormalizer()));
155155

156156
public static final HiveClientConfig HIVE_CLIENT_CONFIG = new HiveClientConfig();
157157
public static final MetastoreClientConfig METASTORE_CLIENT_CONFIG = new MetastoreClientConfig();

‎presto-main/src/main/java/com/facebook/presto/connector/ConnectorManager.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@
6262
import com.facebook.presto.split.RecordPageSourceProvider;
6363
import com.facebook.presto.split.SplitManager;
6464
import com.facebook.presto.sql.analyzer.FeaturesConfig;
65+
import com.facebook.presto.sql.expressions.ExpressionOptimizerManager;
6566
import com.facebook.presto.sql.planner.ConnectorPlanOptimizerManager;
6667
import com.facebook.presto.sql.planner.PartitioningProviderManager;
6768
import com.facebook.presto.sql.planner.planPrinter.RowExpressionFormatter;
6869
import com.facebook.presto.sql.relational.ConnectorRowExpressionService;
6970
import com.facebook.presto.sql.relational.FunctionResolution;
70-
import com.facebook.presto.sql.relational.RowExpressionOptimizer;
7171
import com.facebook.presto.transaction.TransactionManager;
7272
import com.google.common.collect.ImmutableList;
7373
import com.google.common.collect.ImmutableSet;
@@ -116,6 +116,7 @@ public class ConnectorManager
116116
private final PageIndexerFactory pageIndexerFactory;
117117
private final NodeInfo nodeInfo;
118118
private final TransactionManager transactionManager;
119+
private final ExpressionOptimizerManager expressionOptimizerManager;
119120
private final DomainTranslator domainTranslator;
120121
private final PredicateCompiler predicateCompiler;
121122
private final DeterminismEvaluator determinismEvaluator;
@@ -151,6 +152,7 @@ public ConnectorManager(
151152
PageSorter pageSorter,
152153
PageIndexerFactory pageIndexerFactory,
153154
TransactionManager transactionManager,
155+
ExpressionOptimizerManager expressionOptimizerManager,
154156
DomainTranslator domainTranslator,
155157
PredicateCompiler predicateCompiler,
156158
DeterminismEvaluator determinismEvaluator,
@@ -176,6 +178,7 @@ public ConnectorManager(
176178
this.pageIndexerFactory = requireNonNull(pageIndexerFactory, "pageIndexerFactory is null");
177179
this.nodeInfo = requireNonNull(nodeInfo, "nodeInfo is null");
178180
this.transactionManager = requireNonNull(transactionManager, "transactionManager is null");
181+
this.expressionOptimizerManager = requireNonNull(expressionOptimizerManager, "expressionOptimizerManager is null");
179182
this.domainTranslator = requireNonNull(domainTranslator, "domainTranslator is null");
180183
this.predicateCompiler = requireNonNull(predicateCompiler, "predicateCompiler is null");
181184
this.determinismEvaluator = requireNonNull(determinismEvaluator, "determinismEvaluator is null");
@@ -382,7 +385,7 @@ private Connector createConnector(ConnectorId connectorId, ConnectorFactory fact
382385
pageIndexerFactory,
383386
new ConnectorRowExpressionService(
384387
domainTranslator,
385-
new RowExpressionOptimizer(metadataManager),
388+
expressionOptimizerManager,
386389
predicateCompiler,
387390
determinismEvaluator,
388391
new RowExpressionFormatter(metadataManager.getFunctionAndTypeManager())),

‎presto-main/src/main/java/com/facebook/presto/cost/ScalarStatsCalculator.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.facebook.presto.spi.function.FunctionMetadata;
2424
import com.facebook.presto.spi.relation.CallExpression;
2525
import com.facebook.presto.spi.relation.ConstantExpression;
26+
import com.facebook.presto.spi.relation.ExpressionOptimizerProvider;
2627
import com.facebook.presto.spi.relation.InputReferenceExpression;
2728
import com.facebook.presto.spi.relation.LambdaDefinitionExpression;
2829
import com.facebook.presto.spi.relation.RowExpression;
@@ -78,13 +79,18 @@
7879
public class ScalarStatsCalculator
7980
{
8081
private final Metadata metadata;
81-
private final ExpressionOptimizerManager expressionOptimizerManager;
82+
private final ExpressionOptimizerProvider expressionOptimizerProvider;
8283

8384
@Inject
8485
public ScalarStatsCalculator(Metadata metadata, ExpressionOptimizerManager expressionOptimizerManager)
86+
{
87+
this(metadata, (ExpressionOptimizerProvider) expressionOptimizerManager);
88+
}
89+
90+
public ScalarStatsCalculator(Metadata metadata, ExpressionOptimizerProvider expressionOptimizerProvider)
8591
{
8692
this.metadata = requireNonNull(metadata, "metadata can not be null");
87-
this.expressionOptimizerManager = requireNonNull(expressionOptimizerManager, "expressionOptimizerManager can not be null");
93+
this.expressionOptimizerProvider = requireNonNull(expressionOptimizerProvider, "expressionOptimizerManager can not be null");
8894
}
8995

9096
@Deprecated
@@ -128,7 +134,7 @@ public VariableStatsEstimate visitCall(CallExpression call, Void context)
128134
return computeArithmeticBinaryStatistics(call, context);
129135
}
130136

131-
RowExpression value = expressionOptimizerManager.getExpressionOptimizer().optimize(call, OPTIMIZED, session);
137+
RowExpression value = expressionOptimizerProvider.getExpressionOptimizer().optimize(call, OPTIMIZED, session);
132138

133139
if (isNull(value)) {
134140
return nullStatsEstimate();

‎presto-main/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ public PlanOptimizers(
349349
estimatedExchangesCostCalculator,
350350
new RewriteConstantArrayContainsToInExpression(metadata.getFunctionAndTypeManager()).rules());
351351

352-
PlanOptimizer predicatePushDown = new StatsRecordingPlanOptimizer(optimizerStats, new PredicatePushDown(metadata, sqlParser, featuresConfig.isNativeExecutionEnabled()));
352+
PlanOptimizer predicatePushDown = new StatsRecordingPlanOptimizer(optimizerStats, new PredicatePushDown(metadata, sqlParser, expressionOptimizerManager, featuresConfig.isNativeExecutionEnabled()));
353353
PlanOptimizer prefilterForLimitingAggregation = new StatsRecordingPlanOptimizer(optimizerStats, new PrefilterForLimitingAggregation(metadata, statsCalculator));
354354

355355
builder.add(
@@ -730,7 +730,7 @@ public PlanOptimizers(
730730
statsCalculator,
731731
estimatedExchangesCostCalculator,
732732
ImmutableSet.of(new RemoveRedundantIdentityProjections(), new PruneRedundantProjectionAssignments())),
733-
new PushdownSubfields(metadata));
733+
new PushdownSubfields(metadata, expressionOptimizerManager));
734734

735735
builder.add(predicatePushDown); // Run predicate push down one more time in case we can leverage new information from layouts' effective predicate
736736
builder.add(simplifyRowExpressionOptimizer); // Should be always run after PredicatePushDown

0 commit comments

Comments
 (0)