public TableWriterNode.WriterTarget getTarget(PlanNode node) { if (node instanceof TableWriterNode) { return ((TableWriterNode) node).getTarget(); } if (node instanceof DeleteNode) { return ((DeleteNode) node).getTarget(); } if (node instanceof ExchangeNode || node instanceof UnionNode) { Set<TableWriterNode.WriterTarget> writerTargets = node.getSources().stream() .map(this::getTarget) .collect(toSet()); return Iterables.getOnlyElement(writerTargets); } throw new IllegalArgumentException("Invalid child for TableCommitNode: " + node.getClass().getSimpleName()); }
public TableWriterNode.WriterTarget getTarget(PlanNode node) { if (node instanceof TableWriterNode) { return ((TableWriterNode) node).getTarget(); } if (node instanceof DeleteNode) { return ((DeleteNode) node).getTarget(); } if (node instanceof ExchangeNode || node instanceof UnionNode) { Set<TableWriterNode.WriterTarget> writerTargets = node.getSources().stream() .map(this::getTarget) .collect(toSet()); return Iterables.getOnlyElement(writerTargets); } throw new IllegalArgumentException("Invalid child for TableCommitNode: " + node.getClass().getSimpleName()); }
public TableWriterNode map(TableWriterNode node, PlanNode source, PlanNodeId newNodeId) { // Intentionally does not use canonicalizeAndDistinct as that would remove columns ImmutableList<Symbol> columns = node.getColumns().stream() .map(this::map) .collect(toImmutableList()); return new TableWriterNode( newNodeId, source, node.getTarget(), map(node.getRowCountSymbol()), map(node.getFragmentSymbol()), columns, node.getColumnNames(), node.getPartitioningScheme().map(partitioningScheme -> canonicalize(partitioningScheme, source)), node.getStatisticsAggregation().map(this::map), node.getStatisticsAggregationDescriptor().map(this::map)); }
public TableWriterNode map(TableWriterNode node, PlanNode source, PlanNodeId newNodeId) { // Intentionally does not use canonicalizeAndDistinct as that would remove columns ImmutableList<Symbol> columns = node.getColumns().stream() .map(this::map) .collect(toImmutableList()); return new TableWriterNode( newNodeId, source, node.getTarget(), map(node.getRowCountSymbol()), map(node.getFragmentSymbol()), columns, node.getColumnNames(), node.getPartitioningScheme().map(partitioningScheme -> canonicalize(partitioningScheme, source)), node.getStatisticsAggregation().map(this::map), node.getStatisticsAggregationDescriptor().map(this::map)); }
@Override public PlanNode visitTableWriter(TableWriterNode node, RewriteContext<Set<Symbol>> context) { ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.<Symbol>builder() .addAll(node.getColumns()); if (node.getPartitioningScheme().isPresent()) { PartitioningScheme partitioningScheme = node.getPartitioningScheme().get(); partitioningScheme.getPartitioning().getColumns().forEach(expectedInputs::add); partitioningScheme.getHashColumn().ifPresent(expectedInputs::add); } if (node.getStatisticsAggregation().isPresent()) { StatisticAggregations aggregations = node.getStatisticsAggregation().get(); expectedInputs.addAll(aggregations.getGroupingSymbols()); aggregations.getAggregations().values().forEach(aggregation -> expectedInputs.addAll(SymbolsExtractor.extractUnique(aggregation.getCall()))); } PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new TableWriterNode( node.getId(), source, node.getTarget(), node.getRowCountSymbol(), node.getFragmentSymbol(), node.getColumns(), node.getColumnNames(), node.getPartitioningScheme(), node.getStatisticsAggregation(), node.getStatisticsAggregationDescriptor()); }
@Override public PlanNode visitTableWriter(TableWriterNode node, RewriteContext<Set<Symbol>> context) { ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.<Symbol>builder() .addAll(node.getColumns()); if (node.getPartitioningScheme().isPresent()) { PartitioningScheme partitioningScheme = node.getPartitioningScheme().get(); partitioningScheme.getPartitioning().getColumns().forEach(expectedInputs::add); partitioningScheme.getHashColumn().ifPresent(expectedInputs::add); } if (node.getStatisticsAggregation().isPresent()) { StatisticAggregations aggregations = node.getStatisticsAggregation().get(); expectedInputs.addAll(aggregations.getGroupingSymbols()); aggregations.getAggregations().values().forEach(aggregation -> expectedInputs.addAll(SymbolsExtractor.extractUnique(aggregation.getCall()))); } PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new TableWriterNode( node.getId(), source, node.getTarget(), node.getRowCountSymbol(), node.getFragmentSymbol(), node.getColumns(), node.getColumnNames(), node.getPartitioningScheme(), node.getStatisticsAggregation(), node.getStatisticsAggregationDescriptor()); }
node.getId(), pageSinkManager, node.getTarget(), inputChannels, session,
node.getId(), pageSinkManager, node.getTarget(), inputChannels, session,
@Override public Void visitTableWriter(TableWriterNode node, Void context) { TableWriterNode.WriterTarget writerTarget = node.getTarget(); if (writerTarget instanceof TableWriterNode.CreateHandle) { connectorId = ((TableWriterNode.CreateHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.CreateHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.CreateHandle) writerTarget).getSchemaTableName(); } if (writerTarget instanceof TableWriterNode.InsertHandle) { connectorId = ((TableWriterNode.InsertHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.InsertHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.InsertHandle) writerTarget).getSchemaTableName(); } if (writerTarget instanceof TableWriterNode.DeleteHandle) { connectorId = ((TableWriterNode.DeleteHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.DeleteHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.DeleteHandle) writerTarget).getSchemaTableName(); } return null; }
@Override public Void visitTableWriter(TableWriterNode node, Void context) { TableWriterNode.WriterTarget writerTarget = node.getTarget(); if (writerTarget instanceof TableWriterNode.CreateHandle) { connectorId = ((TableWriterNode.CreateHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.CreateHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.CreateHandle) writerTarget).getSchemaTableName(); } if (writerTarget instanceof TableWriterNode.InsertHandle) { connectorId = ((TableWriterNode.InsertHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.InsertHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.InsertHandle) writerTarget).getSchemaTableName(); } if (writerTarget instanceof TableWriterNode.DeleteHandle) { connectorId = ((TableWriterNode.DeleteHandle) writerTarget).getHandle().getConnectorId(); checkState(schemaTableName == null || schemaTableName.equals(((TableWriterNode.DeleteHandle) writerTarget).getSchemaTableName()), "cannot have more than a single create, insert or delete in a query"); schemaTableName = ((TableWriterNode.DeleteHandle) writerTarget).getSchemaTableName(); } return null; }
@Override public PlanNode visitTableWriter(TableWriterNode node, RewriteContext<Context> context) { // Part of the plan should be an Optional<StateChangeListener<QueryState>> and this // callback can create the table and abort the table creation if the query fails. TableWriterNode.WriterTarget writerTarget = context.get().getMaterializedHandle(node.getTarget()).get(); return new TableWriterNode( node.getId(), node.getSource().accept(this, context), writerTarget, node.getRowCountSymbol(), node.getFragmentSymbol(), node.getColumns(), node.getColumnNames(), node.getPartitioningScheme(), node.getStatisticsAggregation(), node.getStatisticsAggregationDescriptor()); }
@Override public PlanNode visitTableWriter(TableWriterNode node, RewriteContext<Context> context) { // Part of the plan should be an Optional<StateChangeListener<QueryState>> and this // callback can create the table and abort the table creation if the query fails. TableWriterNode.WriterTarget writerTarget = context.get().getMaterializedHandle(node.getTarget()).get(); return new TableWriterNode( node.getId(), node.getSource().accept(this, context), writerTarget, node.getRowCountSymbol(), node.getFragmentSymbol(), node.getColumns(), node.getColumnNames(), node.getPartitioningScheme(), node.getStatisticsAggregation(), node.getStatisticsAggregationDescriptor()); }