/** * Add a constraint statement to this statement. The primary key definition * is one possible constraint statement. * * @param command the statement to add */ public void addConstraintCommand(DefineCommand command) { if (command instanceof CreateIndex) { constraintCommands.add(command); } else { AlterTableAddConstraint con = (AlterTableAddConstraint) command; boolean alreadySet; if (con.getType() == CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY) { alreadySet = setPrimaryKeyColumns(con.getIndexColumns()); } else { alreadySet = false; } if (!alreadySet) { constraintCommands.add(command); } } }
@Override public UpdateWorker createUpdateWorker(AlterTableAddConstraint prepared, ObjectNode node, ObjectNode refNode) { SQLTranslated translated = repo.getSQLTranslator().translate(prepared, node, refNode); JdbcUpdateWorker handler = new JdbcUpdateWorker(prepared.getSession(), node.getShardName(), translated.sql, translated.params); return handler; }
@Override public int doUpdate() { String tableName = prepared.getTableName(); TableMate tableMate = getTableMate(tableName); int affectRows = invokeUpdateWorker(workers); tableMate.loadMataData(session); return affectRows; }
AlterTableAddConstraint command = new AlterTableAddConstraint( session, schema, ifNotExists); command.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY); command.setComment(comment); command.setConstraintName(constraintName); command.setTableName(tableName); if (readIf("HASH")) { command.setPrimaryKeyHash(true); command.setIndexColumns(parseIndexColumnList()); if (readIf("INDEX")) { String indexName = readIdentifierWithSchema(); command.setIndex(getSchema().findIndex(session, indexName)); command = new AlterTableAddConstraint(session, schema, ifNotExists); command.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_CHECK); command.setCheckExpression(readExpression()); } else if (readIf("UNIQUE")) { readIf("KEY"); readIf("INDEX"); command = new AlterTableAddConstraint(session, schema, ifNotExists); command.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_UNIQUE); if (!readIf("(")) { constraintName = readUniqueIdentifier(); read("("); command.setIndexColumns(parseIndexColumnList()); if (readIf("INDEX")) { String indexName = readIdentifierWithSchema();
public SQLTranslated translate(AlterTableAddConstraint prepared, ObjectNode node, ObjectNode refNode) { String forTable = node.getCompositeObjectName(); switch (prepared.getType()) { case CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY: { String keyType = AlterTableAddConstraint.PRIMARY_KEY; String constraintName = prepared.getConstraintName(); if (!StringUtils.isNullOrEmpty(constraintName)) { buff.append(constraintName); String enclose = StringUtils.enclose(prepared.getCheckExpression().getSQL()); buff.append(" CHECK").append(enclose).append(" NOCHECK"); return SQLTranslated.build().sql(buff.toString()); StatementBuilder buff = new StatementBuilder("ALTER TABLE "); buff.append(identifier(forTable)).append(" ADD CONSTRAINT "); String constraintName = prepared.getConstraintName(); if (!StringUtils.isNullOrEmpty(constraintName)) { buff.append(constraintName); IndexColumn[] cols = prepared.getIndexColumns(); IndexColumn[] refCols = prepared.getRefIndexColumns(); buff.append(" FOREIGN KEY("); for (IndexColumn c : cols) { if (prepared.getDeleteAction() != AlterTableAddConstraint.RESTRICT) { buff.append(" ON DELETE "); appendAction(buff, prepared.getDeleteAction());
IndexColumn[] cols = {new IndexColumn()}; cols[0].columnName = column.getName(); AlterTableAddConstraint pk = new AlterTableAddConstraint( session, schema, false); pk.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY); pk.setTableName(tableName); pk.setIndexColumns(cols); command.addConstraintCommand(pk); IndexColumn[] cols = {new IndexColumn()}; cols[0].columnName = column.getName(); AlterTableAddConstraint pk = new AlterTableAddConstraint( session, schema, false); pk.setPrimaryKeyHash(hash); pk.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY); pk.setTableName(tableName); pk.setIndexColumns(cols); command.addConstraintCommand(pk); if (readIf("AUTO_INCREMENT")) { AlterTableAddConstraint unique = new AlterTableAddConstraint( session, schema, false); unique.setConstraintName(constraintName); unique.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_UNIQUE); IndexColumn[] cols = {new IndexColumn()}; cols[0].columnName = columnName; unique.setIndexColumns(cols); unique.setTableName(tableName); command.addConstraintCommand(unique);
AlterTableAddConstraint stmt = (AlterTableAddConstraint) command; buff.append(" CONSTRAINT PRIMARY KEY"); if (stmt.isPrimaryKeyHash()) { buff.append(" USING HASH"); for (IndexColumn c : stmt.getIndexColumns()) { buff.appendExceptFirst(", "); buff.append(identifier(c.columnName)); buff.resetCount(); buff.append("("); for (IndexColumn c : stmt.getIndexColumns()) { buff.appendExceptFirst(", "); buff.append(identifier(c.columnName)); String enclose = StringUtils.enclose(stmt.getCheckExpression().getSQL()); buff.append(" CHECK").append(enclose); break; AlterTableAddConstraint stmt = (AlterTableAddConstraint) command; String refTableName = refNode.getCompositeObjectName(); IndexColumn[] cols = stmt.getIndexColumns(); IndexColumn[] refCols = stmt.getRefIndexColumns(); buff.resetCount(); buff.append(" CONSTRAINT FOREIGN KEY(");
@Override public void doPrepare() { String tableName = prepared.getTableName(); TableMate table = getTableMate(tableName); TableMate refTable = null; int type = prepared.getType(); switch (type) { case CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_REFERENTIAL: { String refTableName = prepared.getRefTableName(); refTable = getTableMate(refTableName); if (isConsistencyNodeForReferential(table, refTable)) {
private StatementBuilder uniqueConstraint(AlterTableAddConstraint prepared, ObjectNode node, String keyType) { StatementBuilder buff = new StatementBuilder("ALTER TABLE "); buff.append(identifier(node.getCompositeObjectName())).append(" ADD CONSTRAINT "); String constraintName = prepared.getConstraintName(); // MySQL constraintName is optional if (!StringUtils.isNullOrEmpty(constraintName)) { buff.append(constraintName); } buff.append(' ').append(keyType); if (prepared.isPrimaryKeyHash()) { buff.append(" USING ").append("HASH"); } buff.append('('); for (IndexColumn c : prepared.getIndexColumns()) { buff.appendExceptFirst(", "); buff.append(identifier(c.column.getName())); } buff.append(')'); return buff; }
if (command.getType() == CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_REFERENTIAL) { AlterTableAddConstraint stmt = (AlterTableAddConstraint) command; String refTableName = stmt.getRefTableName(); refTable = getTableMate(refTableName); if (!isConsistencyNodeForReferential(tableMate, refTable)) {