Skip to content

Commit c229714

Browse files
committed
Use ExpressionOptimizerProvider
The runtime should consolidate to the `ExpressionOptimizerProvider` factory so that it can be customized without significant refactoring.
1 parent 51ae5a5 commit c229714

File tree

37 files changed

+194
-84
lines changed

37 files changed

+194
-84
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(session).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+
(ConnectorSession session) -> new RowExpressionOptimizer(METADATA),
109109
"'",
110110
getFunctionTranslators());
111111
}

presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseConnector.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ public ConnectorPlanOptimizerProvider getConnectorPlanOptimizerProvider()
113113
clickHouseClient,
114114
functionManager,
115115
functionResolution,
116-
rowExpressionService.getDeterminismEvaluator(),
117-
rowExpressionService.getExpressionOptimizer(),
116+
rowExpressionService,
118117
clickhouseQueryGenerator);
119118
}
120119

presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHouseComputePushdown.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import com.facebook.presto.spi.plan.PlanVisitor;
3636
import com.facebook.presto.spi.plan.TableScanNode;
3737
import com.facebook.presto.spi.relation.DeterminismEvaluator;
38-
import com.facebook.presto.spi.relation.ExpressionOptimizer;
3938
import com.facebook.presto.spi.relation.RowExpression;
39+
import com.facebook.presto.spi.relation.RowExpressionService;
4040
import com.facebook.presto.spi.relation.VariableReferenceExpression;
4141
import com.google.common.collect.ImmutableList;
4242

@@ -57,7 +57,7 @@
5757
public class ClickHouseComputePushdown
5858
implements ConnectorPlanOptimizer
5959
{
60-
private final ExpressionOptimizer expressionOptimizer;
60+
private final RowExpressionService rowExpressionService;
6161
private final ClickHouseFilterToSqlTranslator clickHouseFilterToSqlTranslator;
6262
private final LogicalRowExpressions logicalRowExpressions;
6363
private final ClickHouseQueryGenerator clickhouseQueryGenerator;
@@ -67,7 +67,7 @@ public ClickHouseComputePushdown(
6767
FunctionMetadataManager functionMetadataManager,
6868
StandardFunctionResolution functionResolution,
6969
DeterminismEvaluator determinismEvaluator,
70-
ExpressionOptimizer expressionOptimizer,
70+
RowExpressionService rowExpressionService,
7171
String identifierQuote,
7272
Set<Class<?>> functionTranslators,
7373
ClickHouseQueryGenerator clickhouseQueryGenerator)
@@ -78,7 +78,7 @@ public ClickHouseComputePushdown(
7878
requireNonNull(determinismEvaluator, "determinismEvaluator is null");
7979
requireNonNull(functionResolution, "functionResolution is null");
8080

81-
this.expressionOptimizer = requireNonNull(expressionOptimizer, "expressionOptimizer is null");
81+
this.rowExpressionService = requireNonNull(rowExpressionService, "rowExpressionService is null");
8282
this.clickHouseFilterToSqlTranslator = new ClickHouseFilterToSqlTranslator(
8383
functionMetadataManager,
8484
buildFunctionTranslator(functionTranslators),
@@ -257,7 +257,7 @@ public PlanNode visitFilter(FilterNode node, Void context)
257257
TableHandle oldTableHandle = oldTableScanNode.getTable();
258258
ClickHouseTableHandle oldConnectorTable = (ClickHouseTableHandle) oldTableHandle.getConnectorHandle();
259259

260-
RowExpression predicate = expressionOptimizer.optimize(node.getPredicate(), OPTIMIZED, session);
260+
RowExpression predicate = rowExpressionService.getExpressionOptimizer(session).optimize(node.getPredicate(), OPTIMIZED, session);
261261
predicate = logicalRowExpressions.convertToConjunctiveNormalForm(predicate);
262262
TranslatedExpression<ClickHouseExpression> clickHouseExpression = translateWith(
263263
predicate,

presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHousePlanOptimizerProvider.java

+6-7
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.RowExpressionService;
2424
import com.google.common.collect.ImmutableSet;
2525
import com.google.inject.Inject;
2626

@@ -33,8 +33,8 @@ public class ClickHousePlanOptimizerProvider
3333
{
3434
private final FunctionMetadataManager functionManager;
3535
private final StandardFunctionResolution functionResolution;
36+
private final RowExpressionService rowExpressionService;
3637
private final DeterminismEvaluator determinismEvaluator;
37-
private final ExpressionOptimizer expressionOptimizer;
3838
private final String identifierQuote;
3939
private final ClickHouseQueryGenerator clickhouseQueryGenerator;
4040

@@ -43,16 +43,15 @@ public ClickHousePlanOptimizerProvider(
4343
ClickHouseClient clickHouseClient,
4444
FunctionMetadataManager functionManager,
4545
StandardFunctionResolution functionResolution,
46-
DeterminismEvaluator determinismEvaluator,
47-
ExpressionOptimizer expressionOptimizer,
46+
RowExpressionService rowExpressionService,
4847
ClickHouseQueryGenerator clickhouseQueryGenerator)
4948
{
5049
this.functionManager = requireNonNull(functionManager, "functionManager is null");
5150
this.functionResolution = requireNonNull(functionResolution, "functionResolution is null");
52-
this.determinismEvaluator = requireNonNull(determinismEvaluator, "determinismEvaluator is null");
53-
this.expressionOptimizer = requireNonNull(expressionOptimizer, "expressionOptimizer is null");
51+
this.rowExpressionService = requireNonNull(rowExpressionService, "rowExpressionService is null");
5452
this.identifierQuote = clickHouseClient.getIdentifierQuote();
5553
this.clickhouseQueryGenerator = clickhouseQueryGenerator;
54+
this.determinismEvaluator = rowExpressionService.getDeterminismEvaluator();
5655
}
5756

5857
@Override
@@ -68,7 +67,7 @@ public Set<ConnectorPlanOptimizer> getPhysicalPlanOptimizers()
6867
functionManager,
6968
functionResolution,
7069
determinismEvaluator,
71-
expressionOptimizer,
70+
rowExpressionService,
7271
identifierQuote,
7372
getFunctionTranslators(),
7473
clickhouseQueryGenerator));

presto-hive-common/src/main/java/com/facebook/presto/hive/MetadataUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public static RowExpression getSubfieldPredicate(
8585
StandardFunctionResolution functionResolution,
8686
RowExpressionService rowExpressionService)
8787
{
88-
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(), session);
88+
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(session), session);
8989

9090
return rowExpressionService.getDomainTranslator().toPredicate(
9191
layoutHandle.getDomainPredicate()

presto-hive-common/src/main/java/com/facebook/presto/hive/rule/BaseSubfieldExtractionRewriter.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public ConnectorPushdownFilterResult pushdownFilter(
217217
ExtractionResult<Subfield> decomposedFilter = rowExpressionService.getDomainTranslator()
218218
.fromPredicate(session, filter, new SubfieldExtractor(
219219
functionResolution,
220-
rowExpressionService.getExpressionOptimizer(),
220+
rowExpressionService.getExpressionOptimizer(session),
221221
session).toColumnExtractor());
222222

223223
if (currentLayoutHandle.isPresent()) {
@@ -231,7 +231,7 @@ public ConnectorPushdownFilterResult pushdownFilter(
231231
return new ConnectorPushdownFilterResult(EMPTY_TABLE_LAYOUT, FALSE_CONSTANT);
232232
}
233233

234-
RowExpression optimizedRemainingExpression = rowExpressionService.getExpressionOptimizer()
234+
RowExpression optimizedRemainingExpression = rowExpressionService.getExpressionOptimizer(session)
235235
.optimize(decomposedFilter.getRemainingExpression(), OPTIMIZED, session);
236236
if (optimizedRemainingExpression instanceof ConstantExpression) {
237237
ConstantExpression constantExpression = (ConstantExpression) optimizedRemainingExpression;
@@ -439,7 +439,7 @@ private boolean isCandidate(Map<ColumnHandle, NullableValue> bindings)
439439
// spurious query failures for partitions that would otherwise be filtered out.
440440
RowExpression optimized;
441441
try {
442-
optimized = evaluator.getExpressionOptimizer().optimize(expression, OPTIMIZED, session, variableResolver);
442+
optimized = evaluator.getExpressionOptimizer(session).optimize(expression, OPTIMIZED, session, variableResolver);
443443
}
444444
catch (PrestoException e) {
445445
propagateIfUnhandled(e);

presto-hive/src/main/java/com/facebook/presto/hive/FilteringPageSource.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public FilteringPageSource(
118118
columnHandle -> new VariableReferenceExpression(Optional.empty(), columnHandle.getName(), columnHandle.getHiveType().getType(typeManager)),
119119
columnHandle -> new InputReferenceExpression(Optional.empty(), columnHandle.getHiveColumnIndex(), columnHandle.getHiveType().getType(typeManager))));
120120

121-
RowExpression optimizedRemainingPredicate = rowExpressionService.getExpressionOptimizer().optimize(remainingPredicate, OPTIMIZED, session);
121+
RowExpression optimizedRemainingPredicate = rowExpressionService.getExpressionOptimizer(session).optimize(remainingPredicate, OPTIMIZED, session);
122122
if (TRUE_CONSTANT.equals(optimizedRemainingPredicate)) {
123123
this.filterFunction = null;
124124
}

presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ public TableStatistics getTableStatistics(ConnectorSession session, ConnectorTab
888888
.transform(subfield -> isEntireColumn(subfield) ? subfield.getRootName() : null)
889889
.transform(allColumns::get)));
890890

891-
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(), session);
891+
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(session), session);
892892

893893
RowExpression domainPredicate = rowExpressionService.getDomainTranslator().toPredicate(
894894
hiveLayoutHandle.getDomainPredicate()

presto-hive/src/main/java/com/facebook/presto/hive/HivePageSourceProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public HivePageSourceProvider(
129129
this.optimizedRowExpressionCache = CacheBuilder.newBuilder()
130130
.recordStats()
131131
.maximumSize(10_000)
132-
.build(CacheLoader.from(cacheKey -> rowExpressionService.getExpressionOptimizer().optimize(cacheKey.rowExpression, OPTIMIZED, cacheKey.session)));
132+
.build(CacheLoader.from(cacheKey -> rowExpressionService.getExpressionOptimizer(cacheKey.session).optimize(cacheKey.rowExpression, OPTIMIZED, cacheKey.session)));
133133
}
134134

135135
@Override

presto-hive/src/main/java/com/facebook/presto/hive/orc/OrcSelectivePageSourceFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ private static Map<Integer, List<Subfield>> collectRequiredSubfields(List<HiveCo
425425
.forEach(column -> outputSubfields.put(column.getHiveColumnIndex(), new HashSet<>(column.getRequiredSubfields())));
426426

427427
Map<Integer, Set<Subfield>> predicateSubfields = new HashMap<>();
428-
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(), session);
428+
SubfieldExtractor subfieldExtractor = new SubfieldExtractor(functionResolution, rowExpressionService.getExpressionOptimizer(session), session);
429429
remainingPredicate.accept(
430430
new RequiredSubfieldsExtractor(subfieldExtractor),
431431
subfield -> predicateSubfields.computeIfAbsent(columnIndices.get(subfield.getRootName()), v -> new HashSet<>()).add(subfield));

presto-hive/src/test/java/com/facebook/presto/hive/AbstractTestHiveClient.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ private static RowType toRowType(List<ColumnMetadata> columns)
524524
}).collect(toList()))
525525
.build();
526526

527-
private static final SubfieldExtractor SUBFIELD_EXTRACTOR = new SubfieldExtractor(FUNCTION_RESOLUTION, ROW_EXPRESSION_SERVICE.getExpressionOptimizer(), SESSION);
527+
private static final SubfieldExtractor SUBFIELD_EXTRACTOR = new SubfieldExtractor(FUNCTION_RESOLUTION, ROW_EXPRESSION_SERVICE.getExpressionOptimizer(SESSION), SESSION);
528528

529529
private static final TypeProvider TYPE_PROVIDER_AFTER = TypeProvider.copyOf(MISMATCH_SCHEMA_TABLE_AFTER.stream()
530530
.collect(toImmutableMap(ColumnMetadata::getName, ColumnMetadata::getType)));

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public DomainTranslator getDomainTranslator()
126126
}
127127

128128
@Override
129-
public ExpressionOptimizer getExpressionOptimizer()
129+
public ExpressionOptimizer getExpressionOptimizer(ConnectorSession session)
130130
{
131131
return new RowExpressionOptimizer(METADATA);
132132
}
@@ -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-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergMetadataOptimizer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ else if (scalarFunctionName.equals("least")) {
356356
throw new PrestoException(StandardErrorCode.NOT_SUPPORTED, "unsupported function: " + scalarFunctionName);
357357
}
358358

359-
RowExpression reducedValue = rowExpressionService.getExpressionOptimizer().optimize(
359+
RowExpression reducedValue = rowExpressionService.getExpressionOptimizer(connectorSession).optimize(
360360
new CallExpression(
361361
Optional.empty(),
362362
scalarFunctionName,

0 commit comments

Comments
 (0)