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();
     }


Reply via email to