Search in sources :

Example 1 with ColumnDefaultValueChange

use of org.jumpmind.db.alter.ColumnDefaultValueChange in project symmetric-ds by JumpMind.

the class AseDdlBuilder method processTableStructureChanges.

@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Table sourceTable, Table targetTable, List<TableChange> changes, StringBuilder ddl) {
    // First we drop primary keys as necessary
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof RemovePrimaryKeyChange) {
            processChange(currentModel, desiredModel, (RemovePrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            RemovePrimaryKeyChange removePkChange = new RemovePrimaryKeyChange(pkChange.getChangedTable(), pkChange.getOldPrimaryKeyColumns());
            processChange(currentModel, desiredModel, removePkChange, ddl);
        }
    }
    HashMap columnChanges = new HashMap();
    // Next we add/remove columns
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof AddColumnChange) {
            AddColumnChange addColumnChange = (AddColumnChange) change;
            // Sybase can only add not insert columns
            if (addColumnChange.isAtEnd()) {
                processChange(currentModel, desiredModel, addColumnChange, ddl);
                changeIt.remove();
            }
        } else if (change instanceof CopyColumnValueChange) {
            CopyColumnValueChange copyColumnChange = (CopyColumnValueChange) change;
            processChange(currentModel, desiredModel, copyColumnChange, ddl);
            changeIt.remove();
        } else if (change instanceof RemoveColumnChange) {
            processChange(currentModel, desiredModel, (RemoveColumnChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnAutoIncrementChange) {
            // Sybase has no way of adding or removing an IDENTITY
            // constraint
            // Thus we have to rebuild the table anyway and can ignore all
            // the other
            // column changes
            columnChanges = null;
        } else if ((change instanceof ColumnChange) && (columnChanges != null)) {
            // we gather all changed columns because we can use the ALTER
            // TABLE ALTER COLUMN
            // statement for them
            ColumnChange columnChange = (ColumnChange) change;
            ArrayList changesPerColumn = (ArrayList) columnChanges.get(columnChange.getChangedColumn());
            if (changesPerColumn == null) {
                changesPerColumn = new ArrayList();
                columnChanges.put(columnChange.getChangedColumn(), changesPerColumn);
            }
            changesPerColumn.add(change);
        }
    }
    if (columnChanges != null) {
        for (Iterator changesPerColumnIt = columnChanges.entrySet().iterator(); changesPerColumnIt.hasNext(); ) {
            Map.Entry entry = (Map.Entry) changesPerColumnIt.next();
            Column sourceColumn = (Column) entry.getKey();
            ArrayList changesPerColumn = (ArrayList) entry.getValue();
            // different handler
            if ((changesPerColumn.size() == 1) && (changesPerColumn.get(0) instanceof ColumnDefaultValueChange)) {
                processChange(currentModel, desiredModel, (ColumnDefaultValueChange) changesPerColumn.get(0), ddl);
            } else {
                Column targetColumn = targetTable.findColumn(sourceColumn.getName(), delimitedIdentifierModeOn);
                processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl);
            }
            for (Iterator changeIt = changesPerColumn.iterator(); changeIt.hasNext(); ) {
                ((ColumnChange) changeIt.next()).apply(currentModel, delimitedIdentifierModeOn);
            }
        }
    }
    // Finally we add primary keys
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof AddPrimaryKeyChange) {
            processChange(currentModel, desiredModel, (AddPrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            AddPrimaryKeyChange addPkChange = new AddPrimaryKeyChange(pkChange.getChangedTable(), pkChange.getNewPrimaryKeyColumns());
            processChange(currentModel, desiredModel, addPkChange, ddl);
            changeIt.remove();
        }
    }
}
Also used : CopyColumnValueChange(org.jumpmind.db.alter.CopyColumnValueChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ColumnDefaultValueChange(org.jumpmind.db.alter.ColumnDefaultValueChange) ColumnChange(org.jumpmind.db.alter.ColumnChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) Column(org.jumpmind.db.model.Column) PrimaryKeyChange(org.jumpmind.db.alter.PrimaryKeyChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) Iterator(java.util.Iterator) ColumnAutoIncrementChange(org.jumpmind.db.alter.ColumnAutoIncrementChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) HashMap(java.util.HashMap) Map(java.util.Map) TableChange(org.jumpmind.db.alter.TableChange)

Example 2 with ColumnDefaultValueChange

use of org.jumpmind.db.alter.ColumnDefaultValueChange in project symmetric-ds by JumpMind.

the class OracleDdlBuilder method processTableStructureChanges.

@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Table sourceTable, Table targetTable, List<TableChange> changes, StringBuilder ddl) {
    for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = changeIt.next();
        if (change instanceof AddColumnChange) {
            AddColumnChange addColumnChange = (AddColumnChange) change;
            if (addColumnChange.getNewColumn().isRequired() && (addColumnChange.getNewColumn().getDefaultValue() == null)) {
                // we need to rebuild the full table
                return;
            }
        } else if (change instanceof ColumnSizeChange) {
            processChange(currentModel, desiredModel, (ColumnSizeChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnDefaultValueChange) {
            processChange(currentModel, desiredModel, (ColumnDefaultValueChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnRequiredChange) {
            processChange(currentModel, desiredModel, (ColumnRequiredChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnAutoIncrementChange) {
            if (processChange(currentModel, desiredModel, (ColumnAutoIncrementChange) change, ddl)) {
                changeIt.remove();
            }
        }
    }
    // First we drop primary keys as necessary
    for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = changeIt.next();
        if (change instanceof RemovePrimaryKeyChange) {
            processChange(currentModel, desiredModel, (RemovePrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            RemovePrimaryKeyChange removePkChange = new RemovePrimaryKeyChange(pkChange.getChangedTable(), pkChange.getOldPrimaryKeyColumns());
            processChange(currentModel, desiredModel, removePkChange, ddl);
        }
    }
    /*
         * Next we add/remove columns While Oracle has an ALTER TABLE MODIFY
         * statement, it is somewhat limited esp. if there is data in the table,
         * so we don't use it
         */
    for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = changeIt.next();
        if (change instanceof AddColumnChange) {
            processChange(currentModel, desiredModel, (AddColumnChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof RemoveColumnChange) {
            processChange(currentModel, desiredModel, (RemoveColumnChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof CopyColumnValueChange) {
            CopyColumnValueChange copyColumnChange = (CopyColumnValueChange) change;
            processChange(currentModel, desiredModel, copyColumnChange, ddl);
            changeIt.remove();
        }
    }
    // Finally we add primary keys
    for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = changeIt.next();
        if (change instanceof AddPrimaryKeyChange) {
            processChange(currentModel, desiredModel, (AddPrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            AddPrimaryKeyChange addPkChange = new AddPrimaryKeyChange(pkChange.getChangedTable(), pkChange.getNewPrimaryKeyColumns());
            processChange(currentModel, desiredModel, addPkChange, ddl);
            changeIt.remove();
        }
    }
    super.processTableStructureChanges(currentModel, desiredModel, sourceTable, targetTable, changes, ddl);
}
Also used : ColumnDefaultValueChange(org.jumpmind.db.alter.ColumnDefaultValueChange) CopyColumnValueChange(org.jumpmind.db.alter.CopyColumnValueChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) PrimaryKeyChange(org.jumpmind.db.alter.PrimaryKeyChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) ColumnRequiredChange(org.jumpmind.db.alter.ColumnRequiredChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) ColumnAutoIncrementChange(org.jumpmind.db.alter.ColumnAutoIncrementChange) ColumnSizeChange(org.jumpmind.db.alter.ColumnSizeChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) TableChange(org.jumpmind.db.alter.TableChange)

Example 3 with ColumnDefaultValueChange

use of org.jumpmind.db.alter.ColumnDefaultValueChange in project symmetric-ds by JumpMind.

the class FirebirdDialect1DdlBuilder method processTableStructureChanges.

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);
}
Also used : ColumnDataTypeChange(org.jumpmind.db.alter.ColumnDataTypeChange) ColumnDefaultValueChange(org.jumpmind.db.alter.ColumnDefaultValueChange) BigDecimal(java.math.BigDecimal) TableChange(org.jumpmind.db.alter.TableChange)

Example 4 with ColumnDefaultValueChange

use of org.jumpmind.db.alter.ColumnDefaultValueChange in project symmetric-ds by JumpMind.

the class H2DdlBuilder method processTableStructureChanges.

@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Table sourceTable, Table targetTable, List<TableChange> changes, StringBuilder ddl) {
    for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = changeIt.next();
        if (change instanceof AddColumnChange) {
            AddColumnChange addColumnChange = (AddColumnChange) change;
            processChange(currentModel, desiredModel, addColumnChange, ddl);
            changeIt.remove();
        } else if (change instanceof CopyColumnValueChange) {
            CopyColumnValueChange copyColumnChange = (CopyColumnValueChange) change;
            processChange(currentModel, desiredModel, copyColumnChange, ddl);
            changeIt.remove();
        } else if (change instanceof RemoveColumnChange) {
            processChange(currentModel, desiredModel, (RemoveColumnChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnDefaultValueChange) {
            ColumnDefaultValueChange defaultChange = (ColumnDefaultValueChange) change;
            defaultChange.getChangedColumn().setDefaultValue(defaultChange.getNewDefaultValue());
            writeAlterColumn(change.getChangedTable(), defaultChange.getChangedColumn(), ddl);
            changeIt.remove();
        } else if (change instanceof ColumnRequiredChange) {
            ColumnRequiredChange defaultChange = (ColumnRequiredChange) change;
            defaultChange.getChangedColumn().setRequired(!defaultChange.getChangedColumn().isRequired());
            writeAlterColumn(change.getChangedTable(), defaultChange.getChangedColumn(), ddl);
            changeIt.remove();
        } else if (change instanceof ColumnSizeChange) {
            ColumnSizeChange sizeChange = (ColumnSizeChange) change;
            sizeChange.getChangedColumn().setSizeAndScale(sizeChange.getNewSize(), sizeChange.getNewScale());
            writeAlterColumn(change.getChangedTable(), sizeChange.getChangedColumn(), ddl);
            changeIt.remove();
        } else if (change instanceof ColumnAutoIncrementChange) {
            ColumnAutoIncrementChange defaultChange = (ColumnAutoIncrementChange) change;
            defaultChange.getColumn().setAutoIncrement(!defaultChange.getColumn().isAutoIncrement());
            writeAlterColumn(change.getChangedTable(), defaultChange.getColumn(), ddl);
            changeIt.remove();
        }
    }
    super.processTableStructureChanges(currentModel, desiredModel, sourceTable, targetTable, changes, ddl);
}
Also used : CopyColumnValueChange(org.jumpmind.db.alter.CopyColumnValueChange) ColumnDefaultValueChange(org.jumpmind.db.alter.ColumnDefaultValueChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) ColumnRequiredChange(org.jumpmind.db.alter.ColumnRequiredChange) ColumnAutoIncrementChange(org.jumpmind.db.alter.ColumnAutoIncrementChange) ColumnSizeChange(org.jumpmind.db.alter.ColumnSizeChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) TableChange(org.jumpmind.db.alter.TableChange)

Example 5 with ColumnDefaultValueChange

use of org.jumpmind.db.alter.ColumnDefaultValueChange in project symmetric-ds by JumpMind.

the class SqlAnywhereDdlBuilder method processTableStructureChanges.

@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Table sourceTable, Table targetTable, List<TableChange> changes, StringBuilder ddl) {
    // First we drop primary keys as necessary
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof RemovePrimaryKeyChange) {
            processChange(currentModel, desiredModel, (RemovePrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            RemovePrimaryKeyChange removePkChange = new RemovePrimaryKeyChange(pkChange.getChangedTable(), pkChange.getOldPrimaryKeyColumns());
            processChange(currentModel, desiredModel, removePkChange, ddl);
        }
    }
    HashMap columnChanges = new HashMap();
    // Next we add/remove columns
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof AddColumnChange) {
            AddColumnChange addColumnChange = (AddColumnChange) change;
            // Sybase can only add not insert columns
            if (addColumnChange.isAtEnd()) {
                processChange(currentModel, desiredModel, addColumnChange, ddl);
                changeIt.remove();
            }
        } else if (change instanceof RemoveColumnChange) {
            processChange(currentModel, desiredModel, (RemoveColumnChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof CopyColumnValueChange) {
            CopyColumnValueChange copyColumnChange = (CopyColumnValueChange) change;
            processChange(currentModel, desiredModel, copyColumnChange, ddl);
            changeIt.remove();
        } else if (change instanceof ColumnAutoIncrementChange) {
            // Sybase has no way of adding or removing an IDENTITY
            // constraint
            // Thus we have to rebuild the table anyway and can ignore all
            // the other
            // column changes
            columnChanges = null;
        } else if ((change instanceof ColumnChange) && (columnChanges != null)) {
            // we gather all changed columns because we can use the ALTER
            // TABLE ALTER COLUMN
            // statement for them
            ColumnChange columnChange = (ColumnChange) change;
            ArrayList changesPerColumn = (ArrayList) columnChanges.get(columnChange.getChangedColumn());
            if (changesPerColumn == null) {
                changesPerColumn = new ArrayList();
                columnChanges.put(columnChange.getChangedColumn(), changesPerColumn);
            }
            changesPerColumn.add(change);
        }
    }
    if (columnChanges != null) {
        for (Iterator changesPerColumnIt = columnChanges.entrySet().iterator(); changesPerColumnIt.hasNext(); ) {
            Map.Entry entry = (Map.Entry) changesPerColumnIt.next();
            Column sourceColumn = (Column) entry.getKey();
            ArrayList changesPerColumn = (ArrayList) entry.getValue();
            // different handler
            if ((changesPerColumn.size() == 1) && (changesPerColumn.get(0) instanceof ColumnDefaultValueChange)) {
                processChange(currentModel, desiredModel, (ColumnDefaultValueChange) changesPerColumn.get(0), ddl);
            } else {
                Column targetColumn = targetTable.findColumn(sourceColumn.getName(), delimitedIdentifierModeOn);
                processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl);
            }
            for (Iterator changeIt = changesPerColumn.iterator(); changeIt.hasNext(); ) {
                ((ColumnChange) changeIt.next()).apply(currentModel, delimitedIdentifierModeOn);
            }
        }
    }
    // Finally we add primary keys
    for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
        TableChange change = (TableChange) changeIt.next();
        if (change instanceof AddPrimaryKeyChange) {
            processChange(currentModel, desiredModel, (AddPrimaryKeyChange) change, ddl);
            changeIt.remove();
        } else if (change instanceof PrimaryKeyChange) {
            PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
            AddPrimaryKeyChange addPkChange = new AddPrimaryKeyChange(pkChange.getChangedTable(), pkChange.getNewPrimaryKeyColumns());
            processChange(currentModel, desiredModel, addPkChange, ddl);
            changeIt.remove();
        }
    }
}
Also used : CopyColumnValueChange(org.jumpmind.db.alter.CopyColumnValueChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ColumnDefaultValueChange(org.jumpmind.db.alter.ColumnDefaultValueChange) ColumnChange(org.jumpmind.db.alter.ColumnChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) Column(org.jumpmind.db.model.Column) PrimaryKeyChange(org.jumpmind.db.alter.PrimaryKeyChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) RemovePrimaryKeyChange(org.jumpmind.db.alter.RemovePrimaryKeyChange) RemoveColumnChange(org.jumpmind.db.alter.RemoveColumnChange) Iterator(java.util.Iterator) ColumnAutoIncrementChange(org.jumpmind.db.alter.ColumnAutoIncrementChange) AddPrimaryKeyChange(org.jumpmind.db.alter.AddPrimaryKeyChange) AddColumnChange(org.jumpmind.db.alter.AddColumnChange) HashMap(java.util.HashMap) Map(java.util.Map) TableChange(org.jumpmind.db.alter.TableChange)

Aggregations

ColumnDefaultValueChange (org.jumpmind.db.alter.ColumnDefaultValueChange)6 TableChange (org.jumpmind.db.alter.TableChange)6 AddColumnChange (org.jumpmind.db.alter.AddColumnChange)5 ColumnAutoIncrementChange (org.jumpmind.db.alter.ColumnAutoIncrementChange)5 CopyColumnValueChange (org.jumpmind.db.alter.CopyColumnValueChange)5 RemoveColumnChange (org.jumpmind.db.alter.RemoveColumnChange)5 PrimaryKeyChange (org.jumpmind.db.alter.PrimaryKeyChange)4 AddPrimaryKeyChange (org.jumpmind.db.alter.AddPrimaryKeyChange)3 ColumnRequiredChange (org.jumpmind.db.alter.ColumnRequiredChange)3 ColumnSizeChange (org.jumpmind.db.alter.ColumnSizeChange)3 RemovePrimaryKeyChange (org.jumpmind.db.alter.RemovePrimaryKeyChange)3 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 Iterator (java.util.Iterator)2 Map (java.util.Map)2 ColumnChange (org.jumpmind.db.alter.ColumnChange)2 Column (org.jumpmind.db.model.Column)2 BigDecimal (java.math.BigDecimal)1 ColumnDataTypeChange (org.jumpmind.db.alter.ColumnDataTypeChange)1