Author: tomdz Date: Thu Jul 27 23:12:15 2006 New Revision: 426396 URL: http://svn.apache.org/viewvc?rev=426396&view=rev Log: Removed old alteration algorithm (also fixes DDLUTILS-118)
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestAlterationAlgorithm.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java Thu Jul 27 23:12:15 2006 @@ -568,7 +568,7 @@ getSqlBuilder().setWriter(buffer); //getSqlBuilder().alterDatabase(currentModel, desiredModel, doDrops, modifyColumns); - getSqlBuilder().alterDatabase2(currentModel, desiredModel, null); + getSqlBuilder().alterDatabase(currentModel, desiredModel, null); sql = buffer.toString(); } catch (IOException ex) @@ -602,7 +602,7 @@ getSqlBuilder().setWriter(buffer); //getSqlBuilder().alterDatabase(currentModel, desiredModel, params, doDrops, modifyColumns); - getSqlBuilder().alterDatabase2(currentModel, desiredModel, params); + getSqlBuilder().alterDatabase(currentModel, desiredModel, params); sql = buffer.toString(); } catch (IOException ex) @@ -704,7 +704,7 @@ getSqlBuilder().setWriter(buffer); //getSqlBuilder().alterDatabase(currentModel, desiredModel, doDrops, modifyColumns); - getSqlBuilder().alterDatabase2(currentModel, desiredModel, null); + getSqlBuilder().alterDatabase(currentModel, desiredModel, null); sql = buffer.toString(); } catch (IOException ex) @@ -738,7 +738,7 @@ getSqlBuilder().setWriter(buffer); //getSqlBuilder().alterDatabase(currentModel, desiredModel, params, doDrops, modifyColumns); - getSqlBuilder().alterDatabase2(currentModel, desiredModel, params); + getSqlBuilder().alterDatabase(currentModel, desiredModel, params); sql = buffer.toString(); } catch (IOException ex) Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java Thu Jul 27 23:12:15 2006 @@ -352,7 +352,7 @@ * @param params The parameters used in the creation of new tables. Note that for existing * tables, the parameters won't be applied */ - public void alterDatabase2(Database currentModel, Database desiredModel, CreationParameters params) throws IOException + public void alterDatabase(Database currentModel, Database desiredModel, CreationParameters params) throws IOException { ModelComparator comparator = new ModelComparator(getPlatformInfo(), getPlatform().isDelimitedIdentifierModeOn()); @@ -1053,294 +1053,6 @@ } /** - * Generates the DDL to modify an existing database so the schema matches - * the current specified database schema. Drops and modifications will - * not be made. - * - * @param currentModel The current database schema - * @param desiredModel The desired database schema - */ - public void alterDatabase(Database currentModel, Database desiredModel) throws IOException - { - alterDatabase(currentModel, desiredModel, false, false); - } - - /** - * Generates the DDL to modify an existing database so the schema matches - * the current specified database schema. - * - * @param currentModel The current database schema - * @param desiredModel The desired database schema - * @param doDrops Whether columns and indexes should be dropped if not in the - * new schema - * @param modifyColumns Whether columns should be altered for datatype, size as required - */ - public void alterDatabase(Database currentModel, Database desiredModel, boolean doDrops, boolean modifyColumns) throws IOException - { - alterDatabase(currentModel, desiredModel, null, doDrops, modifyColumns); - } - - /** - * Generates the DDL to modify an existing database so the schema matches - * the current specified database schema. - * - * @param currentModel The current database schema - * @param desiredModel The desired database schema - * @param params The parameters used in the creation of new tables. Note that for existing - * tables, parameters won't be applied - * @param doDrops Whether columns and indexes should be dropped if not in the - * new schema - * @param modifyColumns Whether columns should be altered for datatype, size as required - */ - public void alterDatabase(Database currentModel, Database desiredModel, CreationParameters params, boolean doDrops, boolean modifyColumns) throws IOException - { - ArrayList newTables = new ArrayList(); - - for (int tableIdx = 0; tableIdx < desiredModel.getTableCount(); tableIdx++) - { - Table desiredTable = desiredModel.getTable(tableIdx); - Table currentTable = currentModel.findTable(desiredTable.getName()); - - if (currentTable == null) - { - if (_log.isInfoEnabled()) - { - _log.info("Creating table " + desiredTable.getName()); - } - createTable(desiredModel, - desiredTable, - params == null ? null : params.getParametersFor(desiredTable)); - // we're deferring foreignkey generation - newTables.add(desiredTable); - } - else - { - alterTable(currentModel, currentTable, - desiredModel, desiredTable, - doDrops, modifyColumns); - } - } - - // generating deferred foreignkeys - //TODO should we try to generate new FKs on existing tables? - for (Iterator fkIt = newTables.iterator(); fkIt.hasNext();) - { - createExternalForeignKeys(desiredModel, (Table)fkIt.next()); - } - - // check for table drops - for (int idx = 0; idx < currentModel.getTableCount(); idx++) - { - Table currentTable = currentModel.getTable(idx); - Table desiredTable = desiredModel.findTable(currentTable.getName()); - - if ((desiredTable == null) && (currentTable.getName() != null) && (currentTable.getName().length() > 0)) - { - if (doDrops) - { - if (_log.isInfoEnabled()) - { - _log.info("Dropping table " + currentTable.getName()); - } - dropTable(currentTable); - } - else - { - String text = "Table " + currentTable.getName() + " can be dropped"; - - if (_log.isInfoEnabled()) - { - _log.info(text); - } - printComment(text); - } - } - } - } - - /** - * Alters the given currently existing table object to match the given desired table object. - * - * @param currentModel The current model - * @param currentTable The current table definition - * @param desiredModel The desired model - * @param desiredTable The desired table definition - * @param doDrops Whether columns and indexes should be dropped if not in the - * new schema - * @param modifyColumns Whether columns should be altered for datatype, size as required - */ - protected void alterTable(Database currentModel, Table currentTable, Database desiredModel, Table desiredTable, boolean doDrops, boolean modifyColumns) throws IOException - { - // we need to do this in the following order: - // - drop foreign keys (so that columns might be removed) - // - drop indices (same reason) - // - drop/alter/add columns - // - add indices - // - add foreign keys - - // Drop foreign keys - for (int fkIdx = 0; fkIdx < currentTable.getForeignKeyCount(); fkIdx++) - { - ForeignKey currentFk = currentTable.getForeignKey(fkIdx); - ForeignKey desiredFk = findCorrespondingForeignKey(desiredTable, currentFk); - - if (desiredFk == null) - { - if (_log.isInfoEnabled()) - { - _log.info((doDrops ? "" : "Not ") + "Dropping foreign key " + currentTable.getName() + "." + currentFk); - } - if (doDrops) - { - writeExternalForeignKeyDropStmt(currentTable, currentFk); - } - } - } - - // Drop indexes - for (int indexIdx = 0; indexIdx < currentTable.getIndexCount(); indexIdx++) - { - Index currentIndex = currentTable.getIndex(indexIdx); - Index desiredIndex = desiredTable.findIndex(currentIndex.getName(), - getPlatform().isDelimitedIdentifierModeOn()); - - if (desiredIndex == null) - { - // make sure this isn't the primary key index - boolean isPk = true; - - for (int columnIdx = 0; columnIdx < currentIndex.getColumnCount(); columnIdx++) - { - IndexColumn indexColumn = currentIndex.getColumn(columnIdx); - Column column = currentTable.findColumn(indexColumn.getName()); - - if ((column != null) && !column.isPrimaryKey()) - { - isPk = false; - break; - } - } - if (!isPk) - { - if (_log.isInfoEnabled()) - { - _log.info((doDrops ? "" : "Not ") + "Dropping non-primary index " + currentTable.getName() + "." + currentIndex.getName()); - } - if (doDrops) - { - writeExternalIndexDropStmt(currentTable, currentIndex); - } - } - } - } - - // Add/alter columns - for (int columnIdx = 0; columnIdx < desiredTable.getColumnCount(); columnIdx++) - { - Column desiredColumn = desiredTable.getColumn(columnIdx); - Column currentColumn = currentTable.findColumn(desiredColumn.getName(), - getPlatform().isDelimitedIdentifierModeOn()); - - if (null == currentColumn) - { - if (_log.isInfoEnabled()) - { - _log.info("Creating column " + desiredTable.getName() + "." + desiredColumn.getName()); - } - writeColumnAlterStmt(desiredTable, desiredColumn, true); - } - else if (columnsDiffer(currentColumn, desiredColumn)) - { - if (modifyColumns) - { - if (_log.isInfoEnabled()) - { - _log.info("Altering column " + desiredTable.getName() + "." + desiredColumn.getName()); - _log.info(" desired = " + desiredColumn.toVerboseString()); - _log.info(" current = " + currentColumn.toVerboseString()); - } - writeColumnAlterStmt(desiredTable, desiredColumn, false); - } - else - { - String text = "Column " + currentColumn.getName() + " in table " + currentTable.getName() + " differs from current specification"; - - if (_log.isInfoEnabled()) - { - _log.info(text); - } - printComment(text); - } - } - } - - // Drop columns - for (int columnIdx = 0; columnIdx < currentTable.getColumnCount(); columnIdx++) - { - Column currentColumn = currentTable.getColumn(columnIdx); - Column desiredColumn = desiredTable.findColumn(currentColumn.getName(), - getPlatform().isDelimitedIdentifierModeOn()); - - if (desiredColumn == null) - { - if (doDrops) - { - if (_log.isInfoEnabled()) - { - _log.info("Dropping column " + currentTable.getName() + "." + currentColumn.getName()); - } - writeColumnDropStmt(currentTable, currentColumn); - } - else - { - String text = "Column " + currentColumn.getName() + " can be dropped from table " + currentTable.getName(); - - if (_log.isInfoEnabled()) - { - _log.info(text); - } - printComment(text); - } - } - } - - // Add foreign keys - for (int fkIdx = 0; fkIdx < desiredTable.getForeignKeyCount(); fkIdx++) - { - ForeignKey desiredFk = desiredTable.getForeignKey(fkIdx); - ForeignKey currentFk = findCorrespondingForeignKey(currentTable, desiredFk); - - if (currentFk == null) - { - if (_log.isInfoEnabled()) - { - _log.info("Creating foreign key " + desiredTable.getName() + "." + desiredFk); - } - writeExternalForeignKeyCreateStmt(desiredModel, desiredTable, desiredFk); - } - } - - // TODO: we should check the index fields for differences - // Add indexes - for (int indexIdx = 0; indexIdx < desiredTable.getIndexCount(); indexIdx++) - { - Index desiredIndex = desiredTable.getIndex(indexIdx); - Index currentIndex = currentTable.findIndex(desiredIndex.getName(), - getPlatform().isDelimitedIdentifierModeOn()); - - if (currentIndex == null) - { - if (_log.isInfoEnabled()) - { - _log.info("Creating index " + desiredTable.getName() + "." + desiredIndex.getName()); - } - writeExternalIndexCreateStmt(desiredTable, desiredIndex); - } - } - - } - - /** * Searches in the given table for a corresponding foreign key. If the given key * has no name, then a foreign key to the same table with the same columns in the * same order is searched. If the given key has a name, then the a corresponding @@ -1994,35 +1706,6 @@ print(" "); writeColumnAutoIncrementStmt(table, column); } - } - - /** - * Generates the alter statement to add or modify a single column on a table. - * - * @param table The table the index is on - * @param column The column to drop - * @param isNewColumn Whether the column should be added - */ - public void writeColumnAlterStmt(Table table, Column column, boolean isNewColumn) throws IOException - { - writeTableAlterStmt(table); - print(isNewColumn ? "ADD " : "MODIFY "); - writeColumn(table, column); - printEndOfStatement(); - } - - /** - * Generates the statement to drop an column from a table. - * - * @param table The table the index is on - * @param column The column to drop - */ - public void writeColumnDropStmt(Table table, Column column) throws IOException - { - writeTableAlterStmt(table); - print("DROP COLUMN "); - printIdentifier(getColumnName(column)); - printEndOfStatement(); } /** Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java Thu Jul 27 23:12:15 2006 @@ -17,8 +17,6 @@ */ import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; import java.sql.Types; import java.util.ArrayList; import java.util.HashSet; @@ -76,31 +74,6 @@ /** * [EMAIL PROTECTED] */ - protected void alterTable(Database currentModel, Table currentTable, Database desiredModel, Table desiredTable, boolean doDrops, boolean modifyColumns) throws IOException - { - // we only want to generate the quotation start statement if there is something to write - // thus we write the alteration commands into a temporary writer - // and only if something was written, write the quotation start statement and the - // alteration commands to the original writer - Writer originalWriter = getWriter(); - StringWriter tempWriter = new StringWriter(); - - setWriter(tempWriter); - super.alterTable(currentModel, currentTable, desiredModel, desiredTable, doDrops, modifyColumns); - setWriter(originalWriter); - - String alterationCommands = tempWriter.toString(); - - if (alterationCommands.trim().length() > 0) - { - writeQuotationOnStatement(); - getWriter().write(alterationCommands); - } - } - - /** - * [EMAIL PROTECTED] - */ public void dropTable(Table table) throws IOException { String tableName = getTableName(table); @@ -176,17 +149,6 @@ printIdentifier(getTableName(table)); print("."); printIdentifier(getIndexName(index)); - printEndOfStatement(); - } - - /** - * [EMAIL PROTECTED] - */ - public void writeColumnAlterStmt(Table table, Column column, boolean isNewColumn) throws IOException - { - writeTableAlterStmt(table); - print(isNewColumn ? "ADD " : "ALTER COLUMN "); - writeColumn(table, column); printEndOfStatement(); } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java Thu Jul 27 23:12:15 2006 @@ -17,8 +17,6 @@ */ import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; @@ -117,31 +115,6 @@ else { return super.getNativeDefaultValue(column); - } - } - - /** - * [EMAIL PROTECTED] - */ - protected void alterTable(Database currentModel, Table currentTable, Database desiredModel, Table desiredTable, boolean doDrops, boolean modifyColumns) throws IOException - { - // we only want to generate the quotation start statement if there is something to write - // thus we write the alteration commands into a temporary writer - // and only if something was written, write the quotation start statement and the - // alteration commands to the original writer - Writer originalWriter = getWriter(); - StringWriter tempWriter = new StringWriter(); - - setWriter(tempWriter); - super.alterTable(currentModel, currentTable, desiredModel, desiredTable, doDrops, modifyColumns); - setWriter(originalWriter); - - String alterationCommands = tempWriter.toString(); - - if (alterationCommands.trim().length() > 0) - { - writeQuotationOnStatement(); - getWriter().write(alterationCommands); } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java Thu Jul 27 23:12:15 2006 @@ -158,7 +158,7 @@ platform.readModelFromDatabase(null, getCatalogPattern(), getSchemaPattern(), null) : platform.readModelFromDatabase(null); - platform.getSqlBuilder().alterDatabase(currentModel, model, params, _doDrops, true); + platform.getSqlBuilder().alterDatabase(currentModel, model, params); } else { Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestAlterationAlgorithm.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestAlterationAlgorithm.java?rev=426396&r1=426395&r2=426396&view=diff ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestAlterationAlgorithm.java (original) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestAlterationAlgorithm.java Thu Jul 27 23:12:15 2006 @@ -69,7 +69,7 @@ Database currentModel = parseDatabaseFromString(currentSchema); Database desiredModel = parseDatabaseFromString(desiredSchema); - _platform.getSqlBuilder().alterDatabase2(currentModel, desiredModel, null); + _platform.getSqlBuilder().alterDatabase(currentModel, desiredModel, null); return _writer.toString(); }