change.apply(currentModel);
change.apply(currentModel, getPlatform().isDelimitedIdentifierModeOn());
    protected void processTableStructureChanges(Database currentModel,                                                Database desiredModel,                                                Table    sourceTable,                                                Table    targetTable,                                                Map      parameters,                                                List     changes) throws IOException    {        // in order to utilize the ALTER TABLE ADD COLUMN AFTER statement        // we have to apply the add column changes in the correct order        // thus we first gather all add column changes and then execute them        ArrayList addColumnChanges = new ArrayList();        for (Iterator changeIt = changes.iterator(); changeIt.hasNext();)        {            TableChange change = (TableChange)changeIt.next();            if (change instanceof AddColumnChange)            {                addColumnChanges.add(change);                changeIt.remove();            }        }        for (Iterator changeIt = addColumnChanges.iterator(); changeIt.hasNext();)        {            AddColumnChange addColumnChange = (AddColumnChange)changeIt.next();            processChange(currentModel, desiredModel, addColumnChange);            addColumnChange.apply(currentModel);            changeIt.remove();        }        ListOrderedSet changedColumns = new ListOrderedSet();                // we don't have to care about the order because the comparator will have ensured        // that a add primary key change comes after all necessary columns are present        for (Iterator changeIt = changes.iterator(); changeIt.hasNext();)        {            TableChange change = (TableChange)changeIt.next();            if (change instanceof RemoveColumnChange)            {                processChange(currentModel, desiredModel, (RemoveColumnChange)change);                change.apply(currentModel);                changeIt.remove();            }            else if (change instanceof AddPrimaryKeyChange)            {                processChange(currentModel, desiredModel, (AddPrimaryKeyChange)change);                change.apply(currentModel);                changeIt.remove();            }            else if (change instanceof PrimaryKeyChange)            {                processChange(currentModel, desiredModel, (PrimaryKeyChange)change);                change.apply(currentModel);                changeIt.remove();            }            else if (change instanceof RemovePrimaryKeyChange)            {                processChange(currentModel, desiredModel, (RemovePrimaryKeyChange)change);                change.apply(currentModel);                changeIt.remove();            }            else            {                // we gather all changed columns because we can use the ALTER TABLE MODIFY COLUMN                // statement for them                changedColumns.add(((ColumnChange)change).getChangedColumn());                changeIt.remove();            }        }        for (Iterator columnIt = changedColumns.iterator(); columnIt.hasNext();)        {            Column sourceColumn = (Column)columnIt.next();            Column targetColumn = targetTable.findColumn(sourceColumn.getName(), getPlatform().isDelimitedIdentifierModeOn());            processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn);        }    }