@Override protected Void visitAddColumn(AddColumn node, Integer indent) { builder.append("ALTER TABLE ") .append(node.getName()) .append(" ADD COLUMN ") .append(node.getColumn().getName()) .append(" ") .append(node.getColumn().getType()); return null; }
@Override protected Void visitAddColumn(AddColumn node, Integer indent) { builder.append("ALTER TABLE ") .append(node.getName()) .append(" ADD COLUMN ") .append(node.getColumn().getName()) .append(" ") .append(node.getColumn().getType()); return null; }
@Override protected Void visitCreateTable(CreateTable node, Integer indent) { builder.append("CREATE TABLE "); if (node.isNotExists()) { builder.append("IF NOT EXISTS "); } builder.append(node.getName()) .append(" ("); Joiner.on(", ").appendTo(builder, transform(node.getElements(), element -> element.getName() + " " + element.getType())); builder.append(")"); if (!node.getProperties().isEmpty()) { builder.append(" WITH ("); Joiner.on(", ").appendTo(builder, transform(node.getProperties().entrySet(), entry -> entry.getKey() + " = " + formatExpression(entry.getValue()))); builder.append(")"); } return null; }
@Override protected Void visitCreateTable(CreateTable node, Integer indent) { builder.append("CREATE TABLE "); if (node.isNotExists()) { builder.append("IF NOT EXISTS "); } builder.append(node.getName()) .append(" ("); Joiner.on(", ").appendTo(builder, transform(node.getElements(), element -> element.getName() + " " + element.getType())); builder.append(")"); if (!node.getProperties().isEmpty()) { builder.append(" WITH ("); Joiner.on(", ").appendTo(builder, transform(node.getProperties().entrySet(), entry -> entry.getKey() + " = " + formatExpression(entry.getValue()))); builder.append(")"); } return null; }
@Override public CompletableFuture<?> execute(AddColumn statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine) { Session session = stateMachine.getSession(); QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getName()); Optional<TableHandle> tableHandle = metadata.getTableHandle(session, tableName); if (!tableHandle.isPresent()) { throw new SemanticException(MISSING_TABLE, statement, "Table '%s' does not exist", tableName); } accessControl.checkCanAddColumns(session.getRequiredTransactionId(), session.getIdentity(), tableName); Map<String, ColumnHandle> columnHandles = metadata.getColumnHandles(session, tableHandle.get()); TableElement element = statement.getColumn(); Type type = metadata.getType(parseTypeSignature(element.getType())); if ((type == null) || type.equals(UNKNOWN)) { throw new SemanticException(TYPE_MISMATCH, element, "Unknown type for column '%s' ", element.getName()); } if (columnHandles.containsKey(element.getName())) { throw new SemanticException(COLUMN_ALREADY_EXISTS, statement, "Column '%s' already exists", element.getName()); } metadata.addColumn(session, tableHandle.get(), new ColumnMetadata(element.getName(), type)); return completedFuture(null); } }