private TableWriterNode.WriterTarget createWriterTarget(TableWriterNode.WriterTarget target) { // TODO: begin these operations in pre-execution step, not here // TODO: we shouldn't need to store the schemaTableName in the handles, but there isn't a good way to pass this around with the current architecture if (target instanceof TableWriterNode.CreateName) { TableWriterNode.CreateName create = (TableWriterNode.CreateName) target; return new TableWriterNode.CreateHandle(metadata.beginCreateTable(session, create.getCatalog(), create.getTableMetadata(), create.getLayout()), create.getTableMetadata().getTable()); } if (target instanceof TableWriterNode.InsertReference) { TableWriterNode.InsertReference insert = (TableWriterNode.InsertReference) target; return new TableWriterNode.InsertHandle(metadata.beginInsert(session, insert.getHandle()), metadata.getTableMetadata(session, insert.getHandle()).getTable()); } if (target instanceof TableWriterNode.DeleteHandle) { TableWriterNode.DeleteHandle delete = (TableWriterNode.DeleteHandle) target; return new TableWriterNode.DeleteHandle(metadata.beginDelete(session, delete.getHandle()), delete.getSchemaTableName()); } throw new IllegalArgumentException("Unhandled target type: " + target.getClass().getSimpleName()); }
CreateHandle createHandle = (CreateHandle) writerTarget; context.setOutputTable(new CatalogSchemaTableName( createHandle.getHandle().getConnectorId().getCatalogName(), createHandle.getSchemaTableName().getSchemaName(), createHandle.getSchemaTableName().getTableName()));
private Operator createTableWriterOperator(BlockingPageSink blockingPageSink) { PageSinkManager pageSinkProvider = new PageSinkManager(); pageSinkProvider.addConnectorPageSinkProvider(CONNECTOR_ID, new ConstantPageSinkProvider(blockingPageSink)); TableWriterOperator.TableWriterOperatorFactory factory = new TableWriterOperator.TableWriterOperatorFactory( 0, new PlanNodeId("test"), pageSinkProvider, new TableWriterNode.CreateHandle(new OutputTableHandle( CONNECTOR_ID, new ConnectorTransactionHandle() {}, new ConnectorOutputTableHandle() {})), ImmutableList.of(0), Optional.empty(), TEST_SESSION); return factory.createOperator(createTaskContext(executor, TEST_SESSION) .addPipelineContext(true, true) .addDriverContext()); }
@Override public void finishTable(Collection<Slice> fragments) { if (target instanceof CreateHandle) { metadata.finishCreateTable(session, ((CreateHandle) target).getHandle(), fragments); } else if (target instanceof InsertHandle) { metadata.finishInsert(session, ((InsertHandle) target).getHandle(), fragments); } else if (target instanceof DeleteHandle) { metadata.finishDelete(session, ((DeleteHandle) target).getHandle(), fragments); } else { throw new AssertionError("Unhandled target type: " + target.getClass().getName()); } } };
private TableWriterNode.WriterTarget createWriterTarget(TableWriterNode.WriterTarget target) { // TODO: begin these operations in pre-execution step, not here if (target instanceof TableWriterNode.CreateName) { TableWriterNode.CreateName create = (TableWriterNode.CreateName) target; return new TableWriterNode.CreateHandle(metadata.beginCreateTable(session, create.getCatalog(), create.getTableMetadata(), create.getLayout())); } if (target instanceof TableWriterNode.InsertReference) { TableWriterNode.InsertReference insert = (TableWriterNode.InsertReference) target; return new TableWriterNode.InsertHandle(metadata.beginInsert(session, insert.getHandle())); } if (target instanceof TableWriterNode.DeleteHandle) { TableWriterNode.DeleteHandle delete = (TableWriterNode.DeleteHandle) target; return new TableWriterNode.DeleteHandle(metadata.beginDelete(session, delete.getHandle())); } throw new IllegalArgumentException("Unhandled target type: " + target.getClass().getSimpleName()); }
private ConnectorPageSink createPageSink() { if (target instanceof CreateHandle) { return pageSinkManager.createPageSink(session, ((CreateHandle) target).getHandle()); } if (target instanceof InsertHandle) { return pageSinkManager.createPageSink(session, ((InsertHandle) target).getHandle()); } throw new UnsupportedOperationException("Unhandled target type: " + target.getClass().getName()); }
@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; }
private Operator createTableWriterOperator( PageSinkManager pageSinkManager, OperatorFactory statisticsAggregation, List<Type> outputTypes, Session session, DriverContext driverContext) { TableWriterOperatorFactory factory = new TableWriterOperatorFactory( 0, new PlanNodeId("test"), pageSinkManager, new TableWriterNode.CreateHandle(new OutputTableHandle( CONNECTOR_ID, new ConnectorTransactionHandle() {}, new ConnectorOutputTableHandle() {}), new SchemaTableName("testSchema", "testTable")), ImmutableList.of(0), session, statisticsAggregation, outputTypes); return factory.createOperator(driverContext); }
private static TableFinisher createTableFinisher(Session session, TableFinishNode node, Metadata metadata) { WriterTarget target = node.getTarget(); return (fragments, statistics) -> { if (target instanceof CreateHandle) { return metadata.finishCreateTable(session, ((CreateHandle) target).getHandle(), fragments, statistics); } else if (target instanceof InsertHandle) { return metadata.finishInsert(session, ((InsertHandle) target).getHandle(), fragments, statistics); } else if (target instanceof DeleteHandle) { metadata.finishDelete(session, ((DeleteHandle) target).getHandle(), fragments); return Optional.empty(); } else { throw new AssertionError("Unhandled target type: " + target.getClass().getName()); } }; }
private ConnectorPageSink createPageSink() { if (target instanceof CreateHandle) { return pageSinkManager.createPageSink(session, ((CreateHandle) target).getHandle()); } if (target instanceof InsertHandle) { return pageSinkManager.createPageSink(session, ((InsertHandle) target).getHandle()); } throw new UnsupportedOperationException("Unhandled target type: " + target.getClass().getName()); }