void
alterTable(String tableName, void modify(SchemaTable targetTable))
Source
void alterTable(String tableName, void modify(SchemaTable targetTable)) {
var existingTable = schema.tableForName(tableName);
if (existingTable == null) {
throw new SchemaException("Table $tableName does not exist.");
}
var newTable = new SchemaTable.from(existingTable);
modify(newTable);
schema.removeTable(existingTable);
schema.addTable(newTable);
if (store != null) {
var shouldAddUnique = existingTable.uniqueColumnSet == null && newTable.uniqueColumnSet != null;
var shouldRemoveUnique = existingTable.uniqueColumnSet != null && newTable.uniqueColumnSet == null;
if (shouldAddUnique) {
commands.addAll(store.addTableUniqueColumnSet(newTable));
} else if (shouldRemoveUnique) {
commands.addAll(store.deleteTableUniqueColumnSet(newTable));
} else if (existingTable.uniqueColumnSet != null && newTable.uniqueColumnSet != null) {
var haveSameLength = existingTable.uniqueColumnSet.length == newTable.uniqueColumnSet.length;
var haveSameKeys = existingTable.uniqueColumnSet.every((s) => newTable.uniqueColumnSet.contains(s));
if (!haveSameKeys || !haveSameLength) {
commands.addAll(store.deleteTableUniqueColumnSet(newTable));
commands.addAll(store.addTableUniqueColumnSet(newTable));
}
}
}
}