package com.zendesk.maxwell.schema.ddl;
import java.util.*;
import com.zendesk.maxwell.MaxwellFilter;
import com.zendesk.maxwell.schema.Database;
import com.zendesk.maxwell.schema.Schema;
import com.zendesk.maxwell.schema.Table;
import com.zendesk.maxwell.schema.columndef.StringColumnDef;
import com.zendesk.maxwell.CaseSensitivity;
public class TableAlter extends SchemaChange {
public String database;
public String table;
public ArrayList<ColumnMod> columnMods;
public String newTableName;
public String newDatabase;
public String convertCharset;
public String defaultCharset;
public List<String> pks;
public TableAlter(String database, String table) {
this.database = database;
this.table = table;
this.columnMods = new ArrayList<>();
}
@Override
public String toString() {
return "TableAlter<database: " + database + ", table:" + table + ">";
}
@Override
public ResolvedTableAlter resolve(Schema schema) throws InvalidSchemaError {
Database database = schema.findDatabaseOrThrow(this.database);
Table oldTable = database.findTableOrThrow(this.table);
Table table = oldTable.copy();
if ( newTableName != null && newDatabase != null ) {
schema.findDatabaseOrThrow(this.newDatabase);
if ( schema.getCaseSensitivity() == CaseSensitivity.CONVERT_TO_LOWER )
newTableName = newTableName.toLowerCase();
table.name = newTableName;
table.database = newDatabase;
}
for (ColumnMod mod : columnMods) {
mod.apply(table);
}
if ( convertCharset != null ) {
for ( StringColumnDef sc : table.getStringColumns() ) {
if ( !sc.getCharset().toLowerCase().equals("binary") )
sc.setCharset(convertCharset);
}
}
if ( this.pks != null ) {
table.setPKList(this.pks);
}
if ( this.defaultCharset != null )
table.charset = this.defaultCharset;
table.setDefaultColumnCharsets();
return new ResolvedTableAlter(this.database, this.table, oldTable, table);
}
@Override
public boolean isBlacklisted(MaxwellFilter filter) {
if ( filter == null ) {
return false;
} else {
return filter.isTableBlacklisted(this.database, this.table);
}
}
}