protected void writeForeignKey( DdlWrite write, String fkName, String tableName, String[] columns, String refTable, String[] refColumns, String indexName) throws IOException { tableName = lowerName(tableName); DdlBuffer fkeyBuffer = write.applyForeignKeys(); alterTableAddForeignKey(fkeyBuffer, fkName, tableName, columns, refTable, refColumns); if (indexName != null) { // no matching unique constraint so add the index fkeyBuffer.append(platformDdl.createIndex(indexName, tableName, columns)).endOfStatement(); } fkeyBuffer.end(); write .rollbackForeignKeys() .append(platformDdl.alterTableDropForeignKey(tableName, fkName)) .endOfStatement(); if (indexName != null) { write .rollbackForeignKeys() .append(platformDdl.dropIndex(indexName, tableName)) .endOfStatement(); } write.rollbackForeignKeys().end(); }
@Override public void generate(DdlWrite writer, DropIndex dropIndex) throws IOException { writer .apply() .append(platformDdl.dropIndex(dropIndex.getIndexName(), dropIndex.getTableName())) .endOfStatement(); }
protected void addUniqueConstraint(DdlWrite writer, AlterColumn alter, String uqName) throws IOException { String[] cols = {alter.getColumnName()}; writer .apply() .append(platformDdl.alterTableAddUniqueConstraint(alter.getTableName(), uqName, cols)) .endOfStatement(); writer .rollbackForeignKeys() .append(platformDdl.dropIndex(uqName, alter.getTableName())) .endOfStatement(); }
/** * Specific handling of OneToOne unique constraints for MsSqlServer. For all other DB platforms * these unique constraints are done inline as per normal. */ protected void writeUniqueOneToOneConstraints(DdlWrite write, CreateTable createTable) throws IOException { String tableName = createTable.getName(); for (Column col : externalUnique) { String uqName = col.getUniqueOneToOne(); String[] columnNames = {col.getName()}; write .apply() .append(platformDdl.alterTableAddUniqueConstraint(tableName, uqName, columnNames)) .endOfStatement(); write.rollbackForeignKeys().append(platformDdl.dropIndex(uqName, tableName)).endOfStatement(); } }