package org.jumpmind.db.platform.firebird;
import java.math.BigDecimal;
import java.sql.Types;
import java.util.Collection;
import java.util.Iterator;
import org.jumpmind.db.alter.ColumnDataTypeChange;
import org.jumpmind.db.alter.ColumnDefaultValueChange;
import org.jumpmind.db.alter.TableChange;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.platform.DatabaseNamesConstants;
/*
* The SQL builder for Firebird running in SQL dialect 1 mode
*/
public class FirebirdDialect1DdlBuilder extends FirebirdDdlBuilder {
public FirebirdDialect1DdlBuilder() {
databaseInfo.addNativeTypeMapping(Types.BIGINT, "NUMERIC(18)", Types.NUMERIC);
databaseInfo.addNativeTypeMapping(Types.TIME, "TIMESTAMP", Types.TIMESTAMP);
databaseName = DatabaseNamesConstants.FIREBIRD_DIALECT1;
databaseInfo.setDelimitedIdentifiersSupported(false);
databaseInfo.setDelimiterToken("");
}
protected void processTableStructureChanges(Database currentModel, Database desiredModel,
Collection<TableChange> changes, StringBuilder ddl) {
Iterator<TableChange> iter = changes.iterator();
while (iter.hasNext()) {
TableChange change = iter.next();
if (change instanceof ColumnDataTypeChange) {
ColumnDataTypeChange dataTypeChange = (ColumnDataTypeChange) change;
if (dataTypeChange.getNewTypeCode() == Types.BIGINT &&
dataTypeChange.getChangedColumn().getMappedTypeCode() == Types.DOUBLE) {
iter.remove();
}
} else if (change instanceof ColumnDefaultValueChange) {
ColumnDefaultValueChange defaultValueChange = (ColumnDefaultValueChange) change;
if (defaultValueChange.getChangedColumn().getMappedTypeCode() == Types.DOUBLE &&
new BigDecimal(defaultValueChange.getNewDefaultValue()).equals(
new BigDecimal(defaultValueChange.getChangedColumn().getDefaultValue()))) {
iter.remove();
}
}
}
super.processTableStructureChanges(currentModel, desiredModel, changes, ddl);
}
}