From 83030130f3cb9026cd8398f6101431e77c23e145 Mon Sep 17 00:00:00 2001 From: jaystarshot Date: Wed, 27 Mar 2024 19:26:43 -0700 Subject: [PATCH] Pass temporary tableInfo to tableScan and tableWriter --- .../optimization/JdbcComputePushdown.java | 2 +- .../ClickHouseComputePushdown.java | 4 +-- .../presto/druid/DruidPlanOptimizer.java | 2 +- .../presto/druid/TestDruidQueryBase.java | 2 +- .../rule/BaseSubfieldExtractionRewriter.java | 2 +- .../rule/HiveAddRequestedColumnsToLayout.java | 2 +- .../rule/HivePartialAggregationPushdown.java | 2 +- .../presto/hive/TestCteExecution.java | 2 +- .../IcebergEqualityDeleteAsJoin.java | 5 ++-- .../optimizer/IcebergPlanOptimizer.java | 2 +- .../presto/execution/SqlStageExecution.java | 8 ++++- .../presto/sql/TemporaryTableUtil.java | 20 +++++++++---- .../sql/planner/BasePlanFragmenter.java | 2 +- .../presto/sql/planner/LogicalPlanner.java | 6 ++-- .../sql/planner/PlanFragmenterUtils.java | 4 +-- .../presto/sql/planner/PlannerUtils.java | 2 +- .../presto/sql/planner/QueryPlanner.java | 4 +-- .../presto/sql/planner/RelationPlanner.java | 3 +- .../iterative/rule/PickTableLayout.java | 5 ++-- .../iterative/rule/PruneTableScanColumns.java | 2 +- .../rule/RowExpressionRewriteRuleSet.java | 2 +- .../iterative/rule/ScaledWriterRule.java | 2 +- .../optimizations/AddLocalExchanges.java | 6 ++-- .../optimizations/PhysicalCteOptimizer.java | 9 ++++-- .../PruneUnreferencedOutputs.java | 5 ++-- .../optimizations/PushdownSubfields.java | 2 +- .../planner/optimizations/SymbolMapper.java | 2 +- .../sql/planner/plan/TableWriterNode.java | 21 +++++++------- .../presto/cost/TestCostCalculator.java | 2 +- .../execution/MockRemoteTaskFactory.java | 2 +- .../presto/execution/TaskTestUtils.java | 2 +- .../TestPhasedExecutionSchedule.java | 4 +-- .../TestSourcePartitionedScheduler.java | 2 +- .../facebook/presto/operator/TestDriver.java | 2 +- .../TestEffectivePredicateExtractor.java | 14 ++++----- .../planner/TestLocalExecutionPlanner.java | 2 +- .../presto/sql/planner/TestTypeValidator.java | 2 +- .../iterative/rule/test/PlanBuilder.java | 4 +-- .../TestConnectorOptimization.java | 2 +- .../presto/util/TestGraphvizPrinter.java | 2 +- .../rule/ParquetDereferencePushDown.java | 2 +- .../presto/pinot/PinotPlanOptimizer.java | 2 +- .../planner/TestIterativePlanFragmenter.java | 2 +- .../presto/spi/plan/TableScanNode.java | 22 ++++++++++---- .../presto/spi/plan/TemporaryTableInfo.java | 29 +++++++++++++++++++ 45 files changed, 144 insertions(+), 83 deletions(-) create mode 100644 presto-spi/src/main/java/com/facebook/presto/spi/plan/TemporaryTableInfo.java diff --git a/presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcComputePushdown.java b/presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcComputePushdown.java index e0ad9a3282f38..0942826d11f11 100644 --- a/presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcComputePushdown.java +++ b/presto-base-jdbc/src/main/java/com/facebook/presto/plugin/jdbc/optimization/JdbcComputePushdown.java @@ -139,7 +139,7 @@ public PlanNode visitFilter(FilterNode node, RewriteContext context) oldTableScanNode.getAssignments(), oldTableScanNode.getTableConstraints(), oldTableScanNode.getCurrentConstraint(), - oldTableScanNode.getEnforcedConstraint()); + oldTableScanNode.getEnforcedConstraint(), Optional.empty()); return new FilterNode(node.getSourceLocation(), idAllocator.getNextId(), newTableScanNode, node.getPredicate()); } diff --git a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHouseComputePushdown.java b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHouseComputePushdown.java index c025db58fa542..0231b425c3ced 100755 --- a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHouseComputePushdown.java +++ b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/optimization/ClickHouseComputePushdown.java @@ -200,7 +200,7 @@ private Optional tryCreatingNewScanNode(PlanNode plan) ImmutableList.copyOf(assignments.keySet()), assignments.entrySet().stream().collect(toImmutableMap(Map.Entry::getKey, (e) -> (ColumnHandle) (e.getValue()))), tableScanNode.getCurrentConstraint(), - tableScanNode.getEnforcedConstraint())); + tableScanNode.getEnforcedConstraint(), Optional.empty())); } @Override @@ -288,7 +288,7 @@ public PlanNode visitFilter(FilterNode node, Void context) oldTableScanNode.getOutputVariables(), oldTableScanNode.getAssignments(), oldTableScanNode.getCurrentConstraint(), - oldTableScanNode.getEnforcedConstraint()); + oldTableScanNode.getEnforcedConstraint(), Optional.empty()); return new FilterNode(node.getSourceLocation(), idAllocator.getNextId(), newTableScanNode, node.getPredicate()); } diff --git a/presto-druid/src/main/java/com/facebook/presto/druid/DruidPlanOptimizer.java b/presto-druid/src/main/java/com/facebook/presto/druid/DruidPlanOptimizer.java index 81401f78c8c7b..1576de1b3f167 100644 --- a/presto-druid/src/main/java/com/facebook/presto/druid/DruidPlanOptimizer.java +++ b/presto-druid/src/main/java/com/facebook/presto/druid/DruidPlanOptimizer.java @@ -173,7 +173,7 @@ private Optional tryCreatingNewScanNode(PlanNode plan) assignments.entrySet().stream().collect(toImmutableMap(Map.Entry::getKey, (e) -> (ColumnHandle) (e.getValue()))), tableScanNode.getTableConstraints(), tableScanNode.getCurrentConstraint(), - tableScanNode.getEnforcedConstraint())); + tableScanNode.getEnforcedConstraint(), Optional.empty())); } @Override diff --git a/presto-druid/src/test/java/com/facebook/presto/druid/TestDruidQueryBase.java b/presto-druid/src/test/java/com/facebook/presto/druid/TestDruidQueryBase.java index 428d6d7bf300d..912e970b709f5 100644 --- a/presto-druid/src/test/java/com/facebook/presto/druid/TestDruidQueryBase.java +++ b/presto-druid/src/test/java/com/facebook/presto/druid/TestDruidQueryBase.java @@ -147,7 +147,7 @@ protected TableScanNode tableScan(PlanBuilder planBuilder, DruidTableHandle conn variables, assignments.build(), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); } protected FilterNode filter(PlanBuilder planBuilder, PlanNode source, RowExpression predicate) diff --git a/presto-hive-common/src/main/java/com/facebook/presto/hive/rule/BaseSubfieldExtractionRewriter.java b/presto-hive-common/src/main/java/com/facebook/presto/hive/rule/BaseSubfieldExtractionRewriter.java index 917760aa090c2..9525afd755314 100644 --- a/presto-hive-common/src/main/java/com/facebook/presto/hive/rule/BaseSubfieldExtractionRewriter.java +++ b/presto-hive-common/src/main/java/com/facebook/presto/hive/rule/BaseSubfieldExtractionRewriter.java @@ -307,7 +307,7 @@ private static TableScanNode getTableScanNode( tableScan.getAssignments(), tableScan.getTableConstraints(), pushdownFilterResult.getLayout().getPredicate(), - TupleDomain.all()); + TupleDomain.all(), tableScan.getTemporaryTableInfo()); } private static ExtractionResult intersectExtractionResult( diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveAddRequestedColumnsToLayout.java b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveAddRequestedColumnsToLayout.java index 2e159874a582f..f6eaee59e8368 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveAddRequestedColumnsToLayout.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HiveAddRequestedColumnsToLayout.java @@ -71,7 +71,7 @@ public PlanNode visitTableScan(TableScanNode tableScan, RewriteContext con tableScan.getAssignments(), tableScan.getTableConstraints(), tableScan.getCurrentConstraint(), - tableScan.getEnforcedConstraint()); + tableScan.getEnforcedConstraint(), tableScan.getTemporaryTableInfo()); } } } diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HivePartialAggregationPushdown.java b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HivePartialAggregationPushdown.java index d5efb222fd16a..5076600572c89 100644 --- a/presto-hive/src/main/java/com/facebook/presto/hive/rule/HivePartialAggregationPushdown.java +++ b/presto-hive/src/main/java/com/facebook/presto/hive/rule/HivePartialAggregationPushdown.java @@ -297,7 +297,7 @@ private Optional tryPartialAggregationPushdown(PlanNode plan) ImmutableMap.copyOf(assignments), oldTableScanNode.getTableConstraints(), oldTableScanNode.getCurrentConstraint(), - oldTableScanNode.getEnforcedConstraint())); + oldTableScanNode.getEnforcedConstraint(), oldTableScanNode.getTemporaryTableInfo())); } @Override diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestCteExecution.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestCteExecution.java index c86b91f206f10..26559514a184a 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestCteExecution.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestCteExecution.java @@ -107,7 +107,7 @@ public void testPersistentCteWithTimeStampWithTimeZoneType() " (CAST('2023-12-31 23:59:59.999 UTC' AS TIMESTAMP WITH TIME ZONE))" + " ) AS t(ts)" + ")" + - "SELECT ts FROM cte"; + "SELECT * FROM cte JOIN cte ON true"; QueryRunner queryRunner = getQueryRunner(); verifyResults(queryRunner, testQuery, ImmutableList.of(generateMaterializedCTEInformation("cte", 1, false, true))); } diff --git a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergEqualityDeleteAsJoin.java b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergEqualityDeleteAsJoin.java index d5d8a919c6a3f..6d718a0590f94 100644 --- a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergEqualityDeleteAsJoin.java +++ b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/optimizer/IcebergEqualityDeleteAsJoin.java @@ -341,7 +341,7 @@ private TableScanNode createDeletesTableScan(ImmutableMap context) .intersect(tableScan.getCurrentConstraint()), predicateNotChangedBySimplification ? identityPartitionColumnPredicate.intersect(tableScan.getEnforcedConstraint()) : - tableScan.getEnforcedConstraint()); + tableScan.getEnforcedConstraint(), Optional.empty()); if (TRUE_CONSTANT.equals(remainingFilterExpression) && predicateNotChangedBySimplification) { return newTableScan; diff --git a/presto-main/src/main/java/com/facebook/presto/execution/SqlStageExecution.java b/presto-main/src/main/java/com/facebook/presto/execution/SqlStageExecution.java index f3d03ead61cb5..f1eb53b5ab684 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/SqlStageExecution.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/SqlStageExecution.java @@ -110,8 +110,11 @@ public final class SqlStageExecution private final Map> tasks = new ConcurrentHashMap<>(); + private final Map taskMap = new ConcurrentHashMap<>(); + @GuardedBy("this") private final AtomicInteger nextTaskId = new AtomicInteger(); + @GuardedBy("this") private final Set allTasks = newConcurrentHashSet(); @GuardedBy("this") @@ -512,6 +515,9 @@ public synchronized Set scheduleSplits(InternalNode node, Multimap

sourceSplits) { + if (taskMap.containsKey(taskId)) { + return taskMap.get(taskId); + } checkArgument(!allTasks.contains(taskId), "A task with id %s already exists", taskId); ImmutableMultimap.Builder initialSplits = ImmutableMultimap.builder(); @@ -557,7 +563,7 @@ private synchronized RemoteTask scheduleTask(InternalNode node, TaskId taskId, M // stage finished while we were scheduling this task task.abort(); } - + taskMap.put(taskId, task); return task; } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/TemporaryTableUtil.java b/presto-main/src/main/java/com/facebook/presto/sql/TemporaryTableUtil.java index 2c8cec755b598..76d48f2e2b6f3 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/TemporaryTableUtil.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/TemporaryTableUtil.java @@ -38,6 +38,7 @@ import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.TableScanNode; +import com.facebook.presto.spi.plan.TemporaryTableInfo; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -78,6 +79,7 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.collect.Iterables.concat; import static java.lang.String.format; +import static java.util.Collections.emptyList; import static java.util.function.Function.identity; // Planner Util for creating temporary tables @@ -95,7 +97,8 @@ public static TableScanNode createTemporaryTableScan( TableHandle tableHandle, List outputVariables, Map variableToColumnMap, - Optional expectedPartitioningMetadata) + Optional expectedPartitioningMetadata, + Optional cteId) { Map columnHandles = metadata.getColumnHandles(session, tableHandle); Map outputColumns = outputVariables.stream() @@ -122,11 +125,14 @@ public static TableScanNode createTemporaryTableScan( return new TableScanNode( sourceLocation, idAllocator.getNextId(), + Optional.empty(), selectedLayout.getLayout().getNewTableHandle(), outputVariables, assignments, + emptyList(), + TupleDomain.all(), TupleDomain.all(), - TupleDomain.all()); + cteId.map(TemporaryTableInfo::new)); } public static Map assignTemporaryTableColumnNames(Collection outputVariables, @@ -177,7 +183,8 @@ public static TableFinishNode createTemporaryTableWriteWithoutExchanges( TableHandle tableHandle, List outputs, Map variableToColumnMap, - VariableReferenceExpression outputVar) + VariableReferenceExpression outputVar, + Optional cteId) { SchemaTableName schemaTableName = metadata.getTableMetadata(session, tableHandle).getTable(); TableWriterNode.InsertReference insertReference = new TableWriterNode.InsertReference(tableHandle, schemaTableName); @@ -208,7 +215,7 @@ public static TableFinishNode createTemporaryTableWriteWithoutExchanges( Optional.empty(), Optional.empty(), Optional.empty(), - Optional.of(Boolean.TRUE)), + cteId.map(TemporaryTableInfo::new)), Optional.of(insertReference), outputVar, Optional.empty(), @@ -347,7 +354,8 @@ public static TableFinishNode createTemporaryTableWriteWithExchanges( Optional.empty(), enableStatsCollectionForTemporaryTable ? Optional.of(localAggregations.getPartialAggregation()) : Optional.empty(), Optional.empty(), - Optional.of(Boolean.TRUE))), + // ToDO: handle this better + Optional.empty())), variableAllocator.newVariable("intermediaterows", BIGINT), variableAllocator.newVariable("intermediatefragments", VARBINARY), variableAllocator.newVariable("intermediatetablecommitcontext", VARBINARY), @@ -369,7 +377,7 @@ public static TableFinishNode createTemporaryTableWriteWithExchanges( Optional.empty(), enableStatsCollectionForTemporaryTable ? Optional.of(aggregations.getPartialAggregation()) : Optional.empty(), Optional.empty(), - Optional.of(Boolean.TRUE)); + Optional.empty()); } return new TableFinishNode( diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/BasePlanFragmenter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/BasePlanFragmenter.java index a3da01b778bf4..ca7213385020e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/BasePlanFragmenter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/BasePlanFragmenter.java @@ -377,7 +377,7 @@ private PlanNode createRemoteMaterializedExchange(ExchangeNode exchange, Rewrite temporaryTableHandle, exchange.getOutputVariables(), variableToColumnMap, - Optional.of(partitioningMetadata)); + Optional.of(partitioningMetadata), Optional.empty()); checkArgument( !exchange.getPartitioningScheme().isReplicateNullsAndAny(), diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/LogicalPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/LogicalPlanner.java index 8c5a5c7a52a0a..2c9f02ca1057c 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/LogicalPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/LogicalPlanner.java @@ -239,7 +239,7 @@ private RelationPlan createAnalyzePlan(Analysis analysis, Analyze analyzeStateme .putAll(tableScanOutputs.stream().collect(toImmutableMap(identity(), identity()))) .putAll(tableStatisticAggregation.getAdditionalVariables()) .build(); - TableScanNode scanNode = new TableScanNode(getSourceLocation(analyzeStatement), idAllocator.getNextId(), targetTable, tableScanOutputs, variableToColumnHandle.build(), TupleDomain.all(), TupleDomain.all()); + TableScanNode scanNode = new TableScanNode(getSourceLocation(analyzeStatement), idAllocator.getNextId(), targetTable, tableScanOutputs, variableToColumnHandle.build(), TupleDomain.all(), TupleDomain.all(), Optional.empty()); PlanNode project = PlannerUtils.addProjections(scanNode, idAllocator, assignments); PlanNode planNode = new StatisticsWriterNode( getSourceLocation(analyzeStatement), @@ -445,7 +445,7 @@ private RelationPlan createTableWriterPlan( // the data consumed by the TableWriteOperator Optional.of(aggregations.getPartialAggregation()), Optional.empty(), - Optional.of(Boolean.FALSE)), + Optional.empty()), Optional.of(target), variableAllocator.newVariable("rows", BIGINT), // final aggregation is run within the TableFinishOperator to summarize collected statistics @@ -474,7 +474,7 @@ private RelationPlan createTableWriterPlan( preferredShufflePartitioningScheme, Optional.empty(), Optional.empty(), - Optional.of(Boolean.FALSE)), + Optional.empty()), Optional.of(target), variableAllocator.newVariable("rows", BIGINT), Optional.empty(), diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanFragmenterUtils.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanFragmenterUtils.java index 5570b14859cb2..f1eafa3e6afd6 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanFragmenterUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanFragmenterUtils.java @@ -256,7 +256,7 @@ public static Set getOutputTableWriterNodeIds(PlanNode plan) return stream(forTree(PlanNode::getSources).depthFirstPreOrder(plan)) .filter(node -> node instanceof TableWriterNode) .map(node -> (TableWriterNode) node) - .filter(tableWriterNode -> !tableWriterNode.getIsTemporaryTableWriter().orElse(false)) + .filter(tableWriterNode -> !tableWriterNode.getTemporaryTableInfo().isPresent()) .map(TableWriterNode::getId) .collect(toImmutableSet()); } @@ -306,7 +306,7 @@ public PlanNode visitTableScan(TableScanNode node, RewriteContext context) node.getOutputVariables(), node.getAssignments(), node.getCurrentConstraint(), - node.getEnforcedConstraint()); + node.getEnforcedConstraint(), node.getTemporaryTableInfo()); } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java index bd21f4234b272..7bd215f6a9fd5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java @@ -357,7 +357,7 @@ private static TableScanNode cloneTableScan(TableScanNode scanNode, Session sess newAssignments, scanNode.getTableConstraints(), scanNode.getCurrentConstraint(), - scanNode.getEnforcedConstraint()); + scanNode.getEnforcedConstraint(), scanNode.getTemporaryTableInfo()); } public static PlanNode clonePlanNode(PlanNode planNode, Session session, Metadata metadata, PlanNodeIdAllocator planNodeIdAllocator, List fieldsToKeep, Map varMap) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java index bf257e0f7a59f..3c801e1cef646 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java @@ -275,7 +275,7 @@ public DeleteNode plan(Delete node) // create table scan List outputVariables = outputVariablesBuilder.build(); - PlanNode tableScan = new TableScanNode(getSourceLocation(node), idAllocator.getNextId(), handle, outputVariables, columns.build(), TupleDomain.all(), TupleDomain.all()); + PlanNode tableScan = new TableScanNode(getSourceLocation(node), idAllocator.getNextId(), handle, outputVariables, columns.build(), TupleDomain.all(), TupleDomain.all(), Optional.empty()); Scope scope = Scope.builder().withRelationType(RelationId.anonymous(), new RelationType(fields.build())).build(); RelationPlan relationPlan = new RelationPlan(tableScan, scope, outputVariables); @@ -344,7 +344,7 @@ public UpdateNode plan(Update node) // create table scan List outputVariables = outputVariablesBuilder.build(); - PlanNode tableScan = new TableScanNode(getSourceLocation(node), idAllocator.getNextId(), handle, outputVariables, columns.build(), TupleDomain.all(), TupleDomain.all()); + PlanNode tableScan = new TableScanNode(getSourceLocation(node), idAllocator.getNextId(), handle, outputVariables, columns.build(), TupleDomain.all(), TupleDomain.all(), Optional.empty()); Scope scope = Scope.builder().withRelationType(RelationId.anonymous(), new RelationType(fields.build())).build(); RelationPlan relationPlan = new RelationPlan(tableScan, scope, outputVariables); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java index 1fb46f320c931..e260ea6b98d82 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java @@ -219,7 +219,8 @@ protected RelationPlan visitTable(Table node, SqlPlannerContext context) List outputVariables = outputVariablesBuilder.build(); List> tableConstraints = metadata.getTableMetadata(session, handle).getMetadata().getTableConstraintsHolder().getTableConstraintsWithColumnHandles(); context.incrementLeafNodes(session); - PlanNode root = new TableScanNode(getSourceLocation(node.getLocation()), idAllocator.getNextId(), handle, outputVariables, columns.build(), tableConstraints, TupleDomain.all(), TupleDomain.all()); + PlanNode root = new TableScanNode(getSourceLocation(node.getLocation()), idAllocator.getNextId(), handle, outputVariables, columns.build(), + tableConstraints, TupleDomain.all(), TupleDomain.all(), Optional.empty()); return new RelationPlan(root, scope, outputVariables); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PickTableLayout.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PickTableLayout.java index 609b7e740bbcb..3f6da19863e1f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PickTableLayout.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PickTableLayout.java @@ -228,7 +228,7 @@ public Result apply(TableScanNode tableScanNode, Captures captures, Context cont tableScanNode.getAssignments(), tableScanNode.getTableConstraints(), layout.getLayout().getPredicate(), - TupleDomain.all())); + TupleDomain.all(), tableScanNode.getTemporaryTableInfo())); } } @@ -324,7 +324,8 @@ private static PlanNode pushPredicateIntoTableScan( node.getAssignments(), node.getTableConstraints(), layout.getLayout().getPredicate(), - computeEnforced(newDomain, layout.getUnenforcedConstraint())); + computeEnforced(newDomain, layout.getUnenforcedConstraint()), + node.getTemporaryTableInfo()); // The order of the arguments to combineConjuncts matters: // * Unenforced constraints go first because they can only be simple column references, diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneTableScanColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneTableScanColumns.java index 7225e5e183ac9..9eb2d85f757d1 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneTableScanColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneTableScanColumns.java @@ -46,6 +46,6 @@ protected Optional pushDownProjectOff(PlanNodeIdAllocator idAllocator, filterKeys(tableScanNode.getAssignments(), referencedOutputs::contains), tableScanNode.getTableConstraints(), tableScanNode.getCurrentConstraint(), - tableScanNode.getEnforcedConstraint())); + tableScanNode.getEnforcedConstraint(), tableScanNode.getTemporaryTableInfo())); } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java index 925c11a7e7547..11e68b3875f71 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java @@ -590,7 +590,7 @@ public Result apply(TableWriterNode node, Captures captures, Context context) node.getPreferredShufflePartitioningScheme(), rewrittenStatisticsAggregation, node.getTaskCountIfScaledWriter(), - node.getIsTemporaryTableWriter())); + node.getTemporaryTableInfo())); } return Result.empty(); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ScaledWriterRule.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ScaledWriterRule.java index f2d65ba86a37b..a205956768b39 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ScaledWriterRule.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ScaledWriterRule.java @@ -81,6 +81,6 @@ public Result apply(TableWriterNode node, Captures captures, Context context) node.getPreferredShufflePartitioningScheme(), node.getStatisticsAggregation(), Optional.of(initialTaskNumber), - node.getIsTemporaryTableWriter())); + node.getTemporaryTableInfo())); } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java index c714022eb8749..8451251eca4e3 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java @@ -581,7 +581,7 @@ public PlanWithProperties visitTableWriter(TableWriterNode originalTableWriterNo originalTableWriterNode.getPreferredShufflePartitioningScheme(), statisticAggregations.map(StatisticAggregations.Parts::getPartialAggregation), originalTableWriterNode.getTaskCountIfScaledWriter(), - originalTableWriterNode.getIsTemporaryTableWriter()), + originalTableWriterNode.getTemporaryTableInfo()), fixedParallelism(), fixedParallelism()); } @@ -607,7 +607,7 @@ public PlanWithProperties visitTableWriter(TableWriterNode originalTableWriterNo originalTableWriterNode.getPreferredShufflePartitioningScheme(), statisticAggregations.map(StatisticAggregations.Parts::getPartialAggregation), originalTableWriterNode.getTaskCountIfScaledWriter(), - originalTableWriterNode.getIsTemporaryTableWriter()), + originalTableWriterNode.getTemporaryTableInfo()), exchange.getProperties()); } } @@ -637,7 +637,7 @@ public PlanWithProperties visitTableWriter(TableWriterNode originalTableWriterNo originalTableWriterNode.getPreferredShufflePartitioningScheme(), statisticAggregations.map(StatisticAggregations.Parts::getPartialAggregation), originalTableWriterNode.getTaskCountIfScaledWriter(), - originalTableWriterNode.getIsTemporaryTableWriter()), + originalTableWriterNode.getTemporaryTableInfo()), exchange.getProperties()); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PhysicalCteOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PhysicalCteOptimizer.java index 17a93b627bba0..921d786b584ee 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PhysicalCteOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PhysicalCteOptimizer.java @@ -138,7 +138,8 @@ public PlanNode visitCteProducer(CteProducerNode node, RewriteContext conte newAssignments.build(), node.getTableConstraints(), node.getCurrentConstraint(), - node.getEnforcedConstraint()); + node.getEnforcedConstraint(), node.getTemporaryTableInfo()); } @Override diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SymbolMapper.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SymbolMapper.java index cca820e193c3e..528a13acb3d79 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SymbolMapper.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SymbolMapper.java @@ -260,7 +260,7 @@ public TableWriterNode map(TableWriterNode node, PlanNode source, PlanNodeId new node.getPreferredShufflePartitioningScheme().map(partitioningScheme -> canonicalize(partitioningScheme, source)), node.getStatisticsAggregation().map(this::map), node.getTaskCountIfScaledWriter(), - node.getIsTemporaryTableWriter()); + node.getTemporaryTableInfo()); } public StatisticsWriterNode map(StatisticsWriterNode node, PlanNode source) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java index 459dd4a425f35..8f679d68b1a1e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java @@ -23,6 +23,7 @@ import com.facebook.presto.spi.plan.PartitioningScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; +import com.facebook.presto.spi.plan.TemporaryTableInfo; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -57,7 +58,7 @@ public class TableWriterNode private final Optional statisticsAggregation; private final List outputs; private final Optional taskCountIfScaledWriter; - private final Optional isTemporaryTableWriter; + private final Optional temporaryTableInfo; @JsonCreator public TableWriterNode( @@ -75,9 +76,10 @@ public TableWriterNode( @JsonProperty("preferredShufflePartitioningScheme") Optional preferredShufflePartitioningScheme, @JsonProperty("statisticsAggregation") Optional statisticsAggregation, @JsonProperty("taskCountIfScaledWriter") Optional taskCountIfScaledWriter, - @JsonProperty("isTemporaryTableWriter") Optional isTemporaryTableWriter) + @JsonProperty("isTemporaryTableWriter") Optional temporaryTableInfo) { - this(sourceLocation, id, Optional.empty(), source, target, rowCountVariable, fragmentVariable, tableCommitContextVariable, columns, columnNames, notNullColumnVariables, tablePartitioningScheme, preferredShufflePartitioningScheme, statisticsAggregation, taskCountIfScaledWriter, isTemporaryTableWriter); + this(sourceLocation, id, Optional.empty(), source, target, rowCountVariable, + fragmentVariable, tableCommitContextVariable, columns, columnNames, notNullColumnVariables, tablePartitioningScheme, preferredShufflePartitioningScheme, statisticsAggregation, taskCountIfScaledWriter, temporaryTableInfo); } public TableWriterNode( @@ -96,7 +98,7 @@ public TableWriterNode( Optional preferredShufflePartitioningScheme, Optional statisticsAggregation, Optional taskCountIfScaledWriter, - Optional isTemporaryTableWriter) + Optional temporaryTableInfo) { super(sourceLocation, id, statsEquivalentPlanNode); @@ -129,7 +131,7 @@ public TableWriterNode( }); this.outputs = outputs.build(); this.taskCountIfScaledWriter = requireNonNull(taskCountIfScaledWriter, "taskCountIfScaledWriter is null"); - this.isTemporaryTableWriter = requireNonNull(isTemporaryTableWriter, "isTemporaryTableWriter is null"); + this.temporaryTableInfo = requireNonNull(temporaryTableInfo, "isTemporaryTableWriter is null"); } @JsonProperty @@ -216,10 +218,9 @@ public Optional getTaskCountIfScaledWriter() return taskCountIfScaledWriter; } - @JsonProperty - public Optional getIsTemporaryTableWriter() + public Optional getTemporaryTableInfo() { - return isTemporaryTableWriter; + return temporaryTableInfo; } @Override @@ -246,7 +247,7 @@ public PlanNode replaceChildren(List newChildren) tablePartitioningScheme, preferredShufflePartitioningScheme, statisticsAggregation, - taskCountIfScaledWriter, isTemporaryTableWriter); + taskCountIfScaledWriter, temporaryTableInfo); } @Override @@ -267,7 +268,7 @@ public PlanNode assignStatsEquivalentPlanNode(Optional statsEquivalent tablePartitioningScheme, preferredShufflePartitioningScheme, statisticsAggregation, - taskCountIfScaledWriter, isTemporaryTableWriter); + taskCountIfScaledWriter, temporaryTableInfo); } // only used during planning -- will not be serialized diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java index be87bddc7b209..326c79a64469f 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java @@ -921,7 +921,7 @@ private TableScanNode tableScan(String id, List var variables, assignments.build(), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); } private PlanNode project(String id, PlanNode source, VariableReferenceExpression variable, RowExpression expression) diff --git a/presto-main/src/test/java/com/facebook/presto/execution/MockRemoteTaskFactory.java b/presto-main/src/test/java/com/facebook/presto/execution/MockRemoteTaskFactory.java index 8731395f010a9..2ae96279b15b7 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/MockRemoteTaskFactory.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/MockRemoteTaskFactory.java @@ -124,7 +124,7 @@ public MockRemoteTask createTableScanTask(TaskId taskId, InternalNode newNode, L ImmutableList.of(variable), ImmutableMap.of(variable, new TestingColumnHandle("column")), TupleDomain.all(), - TupleDomain.all()), + TupleDomain.all(), Optional.empty()), ImmutableSet.of(variable), SOURCE_DISTRIBUTION, ImmutableList.of(sourceId), diff --git a/presto-main/src/test/java/com/facebook/presto/execution/TaskTestUtils.java b/presto-main/src/test/java/com/facebook/presto/execution/TaskTestUtils.java index de23ba82b0236..cdee04d9bdc83 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/TaskTestUtils.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/TaskTestUtils.java @@ -120,7 +120,7 @@ public static PlanFragment createPlanFragment() ImmutableList.of(VARIABLE), ImmutableMap.of(VARIABLE, new TestingColumnHandle("column", 0, BIGINT)), TupleDomain.all(), - TupleDomain.all()), + TupleDomain.all(), Optional.empty()), ImmutableSet.of(VARIABLE), SOURCE_DISTRIBUTION, ImmutableList.of(TABLE_SCAN_NODE_ID), diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java index 301d6559a1d95..8c932566c4453 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java @@ -206,7 +206,7 @@ private static PlanFragment createBroadcastJoinPlanFragment(String name, PlanFra ImmutableList.of(variable), ImmutableMap.of(variable, new TestingColumnHandle("column")), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); RemoteSourceNode remote = new RemoteSourceNode(Optional.empty(), new PlanNodeId("build_id"), buildFragment.getId(), ImmutableList.of(), false, Optional.empty(), REPLICATE); PlanNode join = new JoinNode( @@ -266,7 +266,7 @@ private static PlanFragment createTableScanPlanFragment(String name) ImmutableList.of(variable), ImmutableMap.of(variable, new TestingColumnHandle("column")), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); return createFragment(planNode); } diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java index dba204ed39644..108c888c4d75b 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java @@ -489,7 +489,7 @@ private static SubPlan createPlan() ImmutableList.of(variable), ImmutableMap.of(variable, new TestingColumnHandle("column")), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); RemoteSourceNode remote = new RemoteSourceNode(Optional.empty(), new PlanNodeId("remote_id"), new PlanFragmentId(0), ImmutableList.of(), false, Optional.empty(), GATHER); PlanFragment testFragment = new PlanFragment( diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java b/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java index 6dcf637834938..f1b1256596292 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestDriver.java @@ -113,7 +113,7 @@ public class TestDriver ImmutableList.of(), ImmutableMap.of(), TupleDomain.all(), - TupleDomain.all()), + TupleDomain.all(), Optional.empty()), ImmutableMap.of(), singleGroupingSet(ImmutableList.of()), ImmutableList.of(), diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java index 82c9767c73781..372a3bf276dec 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java @@ -144,7 +144,7 @@ public void setUp() ImmutableList.copyOf(assignments.keySet()), assignments, TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); } @Test @@ -372,7 +372,7 @@ public void testTableScan() ImmutableList.copyOf(assignments.keySet()), assignments, TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); RowExpression effectivePredicate = effectivePredicateExtractor.extract(node); assertEquals(effectivePredicate, TRUE_CONSTANT); @@ -383,7 +383,7 @@ public void testTableScan() ImmutableList.copyOf(assignments.keySet()), assignments, TupleDomain.none(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); effectivePredicate = effectivePredicateExtractor.extract(node); assertEquals(effectivePredicate, FALSE_CONSTANT); @@ -394,7 +394,7 @@ public void testTableScan() ImmutableList.copyOf(assignments.keySet()), assignments, TupleDomain.withColumnDomains(ImmutableMap.of(scanAssignments.get(AV), Domain.singleValue(BIGINT, 1L))), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); effectivePredicate = effectivePredicateExtractor.extract(node); assertEquals(normalizeConjuncts(effectivePredicate), normalizeConjuncts(equals(bigintLiteral(1L), AV))); @@ -407,7 +407,7 @@ public void testTableScan() TupleDomain.withColumnDomains(ImmutableMap.of( scanAssignments.get(AV), Domain.singleValue(BIGINT, 1L), scanAssignments.get(BV), Domain.singleValue(BIGINT, 2L))), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); effectivePredicate = effectivePredicateExtractor.extract(node); assertEquals(normalizeConjuncts(effectivePredicate), normalizeConjuncts(equals(bigintLiteral(2L), BV), equals(bigintLiteral(1L), AV))); @@ -418,7 +418,7 @@ public void testTableScan() ImmutableList.copyOf(assignments.keySet()), assignments, TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); effectivePredicate = effectivePredicateExtractor.extract(node); assertEquals(effectivePredicate, TRUE_CONSTANT); } @@ -782,7 +782,7 @@ private static TableScanNode tableScanNode(Map context) newAssignments, tableScan.getTableConstraints(), tableScan.getCurrentConstraint(), - tableScan.getEnforcedConstraint()); + tableScan.getEnforcedConstraint(), tableScan.getTemporaryTableInfo()); Assignments.Builder newProjectAssignmentBuilder = Assignments.builder(); for (Map.Entry entry : project.getAssignments().entrySet()) { diff --git a/presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPlanOptimizer.java b/presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPlanOptimizer.java index 46911541b4eee..b85d21b593883 100644 --- a/presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPlanOptimizer.java +++ b/presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPlanOptimizer.java @@ -184,7 +184,7 @@ private Optional tryCreatingNewScanNode(PlanNode plan, TableScanNode t ImmutableList.copyOf(assignments.keySet()), assignments.entrySet().stream().collect(toImmutableMap(Map.Entry::getKey, (e) -> (ColumnHandle) (e.getValue()))), tableScanNode.getCurrentConstraint(), - tableScanNode.getEnforcedConstraint())); + tableScanNode.getEnforcedConstraint(), Optional.empty())); } @Override diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java index 379f912e8cba1..250b970b511ad 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java @@ -312,7 +312,7 @@ private TableScanNode tableScan(String id, List var variables, assignments.build(), TupleDomain.all(), - TupleDomain.all()); + TupleDomain.all(), Optional.empty()); } private PlanNode project(String id, PlanNode source, VariableReferenceExpression variable, RowExpression expression) diff --git a/presto-spi/src/main/java/com/facebook/presto/spi/plan/TableScanNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TableScanNode.java index 17a739f855b14..c4a75be7547d7 100644 --- a/presto-spi/src/main/java/com/facebook/presto/spi/plan/TableScanNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TableScanNode.java @@ -50,6 +50,8 @@ public final class TableScanNode private final TupleDomain enforcedConstraint; private final List> tableConstraints; + private final Optional temporaryTableInfo; + /** * This constructor is for JSON deserialization only. Do not use! */ @@ -69,6 +71,7 @@ public TableScanNode( this.currentConstraint = null; this.enforcedConstraint = null; this.tableConstraints = emptyList(); + this.temporaryTableInfo = Optional.empty(); } public TableScanNode( @@ -78,9 +81,9 @@ public TableScanNode( List outputVariables, Map assignments, TupleDomain currentConstraint, - TupleDomain enforcedConstraint) + TupleDomain enforcedConstraint, Optional temporaryTableInfo) { - this (sourceLocation, id, table, outputVariables, assignments, emptyList(), currentConstraint, enforcedConstraint); + this(sourceLocation, id, table, outputVariables, assignments, emptyList(), currentConstraint, enforcedConstraint, temporaryTableInfo); } public TableScanNode( @@ -91,9 +94,9 @@ public TableScanNode( Map assignments, List> tableConstraints, TupleDomain currentConstraint, - TupleDomain enforcedConstraint) + TupleDomain enforcedConstraint, Optional temporaryTableInfo) { - this (sourceLocation, id, Optional.empty(), table, outputVariables, assignments, tableConstraints, currentConstraint, enforcedConstraint); + this(sourceLocation, id, Optional.empty(), table, outputVariables, assignments, tableConstraints, currentConstraint, enforcedConstraint, temporaryTableInfo); } public TableScanNode( @@ -105,12 +108,14 @@ public TableScanNode( Map assignments, List> tableConstraints, TupleDomain currentConstraint, - TupleDomain enforcedConstraint) + TupleDomain enforcedConstraint, + Optional temporaryTableInfo) { super(sourceLocation, id, statsEquivalentPlanNode); this.table = requireNonNull(table, "table is null"); this.outputVariables = unmodifiableList(requireNonNull(outputVariables, "outputVariables is null")); this.assignments = unmodifiableMap(new HashMap<>(requireNonNull(assignments, "assignments is null"))); + this.temporaryTableInfo = requireNonNull(temporaryTableInfo, "temporaryTableInfo is null"); checkArgument(assignments.keySet().containsAll(outputVariables), "assignments does not cover all of outputs"); this.currentConstraint = requireNonNull(currentConstraint, "currentConstraint is null"); this.enforcedConstraint = requireNonNull(enforcedConstraint, "enforcedConstraint is null"); @@ -120,6 +125,11 @@ public TableScanNode( this.tableConstraints = requireNonNull(tableConstraints, "tableConstraints is null"); } + public Optional getTemporaryTableInfo() + { + return temporaryTableInfo; + } + /** * Get the table handle provided by connector */ @@ -206,7 +216,7 @@ public R accept(PlanVisitor visitor, C context) @Override public PlanNode assignStatsEquivalentPlanNode(Optional statsEquivalentPlanNode) { - return new TableScanNode(getSourceLocation(), getId(), statsEquivalentPlanNode, table, outputVariables, assignments, tableConstraints, currentConstraint, enforcedConstraint); + return new TableScanNode(getSourceLocation(), getId(), statsEquivalentPlanNode, table, outputVariables, assignments, tableConstraints, currentConstraint, enforcedConstraint, temporaryTableInfo); } @Override diff --git a/presto-spi/src/main/java/com/facebook/presto/spi/plan/TemporaryTableInfo.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TemporaryTableInfo.java new file mode 100644 index 0000000000000..8a201b5e38d5f --- /dev/null +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TemporaryTableInfo.java @@ -0,0 +1,29 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.facebook.presto.spi.plan; + +public class TemporaryTableInfo +{ + private final String cteId; + + public TemporaryTableInfo(String cteId) + { + this.cteId = cteId; + } + + public String getCteId() + { + return cteId; + } +}