package dbmigrate.executor; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import dbmigrate.model.db.ITable; import dbmigrate.model.db.Table; import dbmigrate.model.operation.DropColumnOperationDescriptor; import dbmigrate.model.operation.MergeColumnOperationDescriptor; public class MergeColumnExecutor extends GeneralExecutor<MergeColumnOperationDescriptor> { public MergeColumnExecutor(Connection connection) { this.setConnection(connection); } public String createSql(MergeColumnOperationDescriptor operation) { StringBuffer buf = new StringBuffer(); buf.append("UPDATE \""); buf.append(operation.getTableName()); buf.append("\" SET "); buf.append(operation.getDestinationColumnDescriptor().getTableName()).append(" = "); buf.append(operation.getSourceColumn1().getName()).append(" || '"); buf.append(operation.getDelimiter()).append("' || "); buf.append(operation.getSourceColumn2().getName()); return buf.toString(); } public void execute(MergeColumnOperationDescriptor operation) throws SQLException { AddColumnExecutor executor = new AddColumnExecutor(this.getConnection()); executor.execute(operation.getDestinationColumnDescriptor()); Statement stmt = this.getConnection().createStatement(); stmt.executeUpdate(createSql(operation)); DropColumnExecutor dcx = new DropColumnExecutor(this.getConnection()); ITable table = new Table(); table.setName(operation.getTableName()); DropColumnOperationDescriptor dcod = new DropColumnOperationDescriptor( table, operation.getSourceColumn1()); dcx.execute(dcod); dcod = new DropColumnOperationDescriptor(table, operation.getSourceColumn2()); dcx.execute(dcod); } }