You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2007/12/11 08:47:11 UTC

svn commit: r603162 - in /db/ddlutils/trunk/src: java/org/apache/ddlutils/ java/org/apache/ddlutils/alteration/ java/org/apache/ddlutils/platform/cloudscape/ java/org/apache/ddlutils/platform/firebird/ java/org/apache/ddlutils/platform/mssql/ java/org/...

Author: tomdz
Date: Mon Dec 10 23:47:04 2007
New Revision: 603162

URL: http://svn.apache.org/viewvc?rev=603162&view=rev
Log:
Some bug fixes and test tweaks

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnDefinitionChange.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/cloudscape/CloudscapePlatform.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java
    db/ddlutils/trunk/src/test/org/apache/ddlutils/TestDatabaseWriterBase.java
    db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAddColumn.java
    db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java Mon Dec 10 23:47:04 2007
@@ -65,6 +65,9 @@
     /** Whether identity specification is supported for non-primary key columns. */
     private boolean _nonPKIdentityColumnsSupported = true;
 
+    /** Whether multiple identity columns in the same table are supported. */
+    private boolean _multipleIdentityColumnsSupported = true;
+
     /** Whether the auto-increment definition is done via the DEFAULT part of the column definition. */
     private boolean _defaultValueUsedForIdentitySpec = false;
 
@@ -353,6 +356,27 @@
     public void setNonPKIdentityColumnsSupported(boolean supportingNonPKIdentityColumns)
     {
         _nonPKIdentityColumnsSupported = supportingNonPKIdentityColumns;
+    }
+
+    /**
+     * Determines whether multiple columns in the same table can be auto-incrementing (IDENTITY columns).
+     *
+     * @return <code>true</code> if multiple columns can be auto-incrementing in the same table
+     */
+    public boolean isMultipleIdentityColumnsSupported()
+    {
+        return _multipleIdentityColumnsSupported;
+    }
+
+    /**
+     * Specifies whether multiple columns in the same table can be auto-incrementing (IDENTITY columns).
+     *
+     * @param supportingMultipleIdentityColumns <code>true</code> if multiple columns can be auto-incrementing
+     *                                          in the same table
+     */
+    public void setMultipleIdentityColumnsSupported(boolean supportingMultipleIdentityColumns)
+    {
+        _multipleIdentityColumnsSupported = supportingMultipleIdentityColumns;
     }
 
     /**

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnDefinitionChange.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnDefinitionChange.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnDefinitionChange.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/alteration/ColumnDefinitionChange.java Mon Dec 10 23:47:04 2007
@@ -113,8 +113,8 @@
             return true;
         }
         else if (scaleMatters &&
-                 (sourceColumn.getPrecisionRadix() != targetColumn.getPrecisionRadix()) ||
-                  (sourceColumn.getScale() != targetColumn.getScale()))
+                 ((sourceColumn.getPrecisionRadix() != targetColumn.getPrecisionRadix()) ||
+                  (sourceColumn.getScale() != targetColumn.getScale())))
         {
             return true;
         }

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/cloudscape/CloudscapePlatform.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/cloudscape/CloudscapePlatform.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/cloudscape/CloudscapePlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/cloudscape/CloudscapePlatform.java Mon Dec 10 23:47:04 2007
@@ -49,6 +49,7 @@
         info.setSystemForeignKeyIndicesAlwaysNonUnique(true);
         info.setPrimaryKeyColumnAutomaticallyRequired(true);
         info.setIdentityColumnAutomaticallyRequired(true);
+        info.setMultipleIdentityColumnsSupported(false);
 
         // BINARY and VARBINARY will also be handled by CloudscapeBuilder.getSqlType
         info.addNativeTypeMapping(Types.ARRAY,         "BLOB",                     Types.BLOB);

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java Mon Dec 10 23:47:04 2007
@@ -40,7 +40,6 @@
 import org.apache.ddlutils.model.TypeMap;
 import org.apache.ddlutils.platform.DatabaseMetaDataWrapper;
 import org.apache.ddlutils.platform.JdbcModelReader;
-import org.apache.ddlutils.platform.MetaDataColumnDescriptor;
 
 /**
  * The Jdbc Model Reader for Firebird.
@@ -174,7 +173,7 @@
 
     	try
     	{
-            ResultSet rs = stmt.executeQuery("SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS");
+            ResultSet rs = stmt.executeQuery("SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME NOT LIKE '%$%'");
 
             while (rs.next())
             {

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java Mon Dec 10 23:47:04 2007
@@ -74,6 +74,7 @@
         info.setMaxIdentifierLength(128);
         info.setPrimaryKeyColumnAutomaticallyRequired(true);
         info.setIdentityColumnAutomaticallyRequired(true);
+        info.setMultipleIdentityColumnsSupported(false);
 
         info.addNativeTypeMapping(Types.ARRAY,         "IMAGE",         Types.LONGVARBINARY);
         // BIGINT will be mapped back to BIGINT by the model reader 

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java Mon Dec 10 23:47:04 2007
@@ -63,6 +63,7 @@
 
         info.setMaxIdentifierLength(32);
         info.setPrimaryKeyColumnAutomaticallyRequired(true);
+        info.setMultipleIdentityColumnsSupported(false);
         info.setCommentPrefix("/*");
         info.setCommentSuffix("*/");
 

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java Mon Dec 10 23:47:04 2007
@@ -81,6 +81,7 @@
         info.setMaxIdentifierLength(28);
         info.setNullAsDefaultValueRequired(true);
         info.setIdentityColumnAutomaticallyRequired(true);
+        info.setMultipleIdentityColumnsSupported(false);
         info.setCommentPrefix("/*");
         info.setCommentSuffix("*/");
 

Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/TestDatabaseWriterBase.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/TestDatabaseWriterBase.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/TestDatabaseWriterBase.java (original)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/TestDatabaseWriterBase.java Mon Dec 10 23:47:04 2007
@@ -22,12 +22,19 @@
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.StringReader;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
 import javax.sql.DataSource;
 
+import junit.framework.AssertionFailedError;
+
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.DynaBean;
 import org.apache.commons.beanutils.DynaProperty;
@@ -36,6 +43,8 @@
 import org.apache.ddlutils.io.DataToDatabaseSink;
 import org.apache.ddlutils.model.Database;
 import org.apache.ddlutils.platform.CreationParameters;
+import org.apache.ddlutils.platform.firebird.FirebirdPlatform;
+import org.apache.ddlutils.platform.interbase.InterbasePlatform;
 
 /**
  * Base class for database writer tests.
@@ -233,12 +242,19 @@
      */
     protected void tearDown() throws Exception
     {
-        if (_model != null)
+        try
         {
-            dropDatabase();
-            _model = null;
+            if (_model != null)
+            {
+                dropDatabase();
+                _model = null;
+            }
+        }
+        finally
+        {
+            assertAndEnsureClearDatabase();
+            super.tearDown();
         }
-        super.tearDown();
     }
 
     /**
@@ -267,7 +283,7 @@
             _model = model;
 
             getPlatform().setSqlCommentsOn(false);
-            getPlatform().createTables(_model, getTableCreationParameters(_model), false, false);
+            getPlatform().createModel(_model, getTableCreationParameters(_model), false, false);
         }
         catch (Exception ex)
         {
@@ -292,21 +308,19 @@
     /**
      * Alters the database to match the given model.
      * 
-     * @param model The model
+     * @param desiredModel The model
      */
-    protected void alterDatabase(Database model) throws DatabaseOperationException
+    protected void alterDatabase(Database desiredModel) throws DatabaseOperationException
     {
-        Properties props   = getTestProperties();
-        String     catalog = props.getProperty(DDLUTILS_CATALOG_PROPERTY);
-        String     schema  = props.getProperty(DDLUTILS_SCHEMA_PROPERTY);
-
         try
         {
-            _model = model;
+            _model = desiredModel;
             _model.resetDynaClassCache();
 
+            Database liveModel = readModelFromDatabase(desiredModel.getName());
+
             getPlatform().setSqlCommentsOn(false);
-            getPlatform().alterTables(catalog, schema, null, _model, getTableCreationParameters(_model), false);
+            getPlatform().alterModel(liveModel, _model, getTableCreationParameters(_model), false);
         }
         catch (Exception ex)
         {
@@ -344,10 +358,171 @@
      */
     protected void dropDatabase() throws DatabaseOperationException
     {
-        getPlatform().dropTables(_model, true);
+        getPlatform().dropModel(_model, true);
     }
 
     /**
+     * Checks that the database is clear, and if not clears it (no tables, sequences etc. left) and
+     * throws an {@link AssertionFailedError}.
+     */
+    protected void assertAndEnsureClearDatabase()
+    {
+        Database liveModel = readModelFromDatabase("tmp");
+        boolean  hasStuff  = false;
+
+        if (liveModel.getTableCount() > 0)
+        {
+            hasStuff = true;
+            try
+            {
+                getPlatform().dropModel(liveModel, true);
+            }
+            catch (Exception ex)
+            {
+                getLog().error("Could not clear database", ex);
+            }
+        }
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            Connection connection = null;
+
+            try
+            {
+                connection = getPlatform().borrowConnection();
+
+                hasStuff = hasStuff | dropTriggers(connection);
+                hasStuff = hasStuff | dropGenerators(connection);
+            }
+            catch (Exception ex)
+            {
+                getLog().error("Could not clear database", ex);
+            }
+            finally
+            {
+                getPlatform().returnConnection(connection);
+            }
+        }
+        // TODO: Check for sequences
+        if (hasStuff)
+        {
+            fail("Database is not empty after test");
+        }
+    }
+
+    /**
+     * Drops generators left by a test in a Firebird/Interbase database.
+     * 
+     * @param connection The database connection
+     * @return Whether generators were dropped
+     */
+    private boolean dropGenerators(Connection connection)
+    {
+        Statement stmt          = null;
+        boolean   hasGenerators = false;
+
+        try
+        {
+            stmt = connection.createStatement();
+
+            ResultSet rs    = stmt.executeQuery("SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME NOT LIKE '%$%'");
+            List      names = new ArrayList();
+    
+            while (rs.next())
+            {
+                names.add(rs.getString(1));
+            }
+            rs.close();
+    
+            for (Iterator it = names.iterator(); it.hasNext();)
+            {
+                String name = (String)it.next();
+
+                if (name.toLowerCase().startsWith("gen_"))
+                {
+                    hasGenerators = true;
+                    stmt.execute("DROP GENERATOR " + name);
+                }
+            }
+        }
+        catch (Exception ex)
+        {
+            getLog().error("Error while dropping the remaining generators", ex);
+        }
+        finally
+        {
+            if (stmt != null)
+            {
+                try
+                {
+                    stmt.close();
+                }
+                catch (Exception ex)
+                {
+                    getLog().error("Error while clearing the database", ex);
+                }
+            }
+        }
+        return hasGenerators;
+    }
+
+    /**
+     * Drops triggers left by a test in a Firebird/Interbase database.
+     * 
+     * @param connection The database connection
+     * @return Whether triggers were dropped
+     */
+    private boolean dropTriggers(Connection connection)
+    {
+        Statement stmt        = null;
+        boolean   hasTriggers = false;
+
+        try
+        {
+            stmt = connection.createStatement();
+
+            ResultSet rs    = stmt.executeQuery("SELECT * FROM RDB$TRIGGERS WHERE RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0");
+            List      names = new ArrayList();
+    
+            while (rs.next())
+            {
+                names.add(rs.getString(1));
+            }
+            rs.close();
+    
+            for (Iterator it = names.iterator(); it.hasNext();)
+            {
+                String name = (String)it.next();
+
+                if (name.toLowerCase().startsWith("trg_"))
+                {
+                    hasTriggers = true;
+                    stmt.execute("DROP TRIGGER " + name);
+                }
+            }
+        }
+        catch (Exception ex)
+        {
+            getLog().error("Error while dropping the remaining triggers", ex);
+        }
+        finally
+        {
+            if (stmt != null)
+            {
+                try
+                {
+                    stmt.close();
+                }
+                catch (Exception ex)
+                {
+                    getLog().error("Error while clearing the database", ex);
+                }
+            }
+        }
+        return hasTriggers;
+    }
+    
+    /**
      * Reads the database model from a live database.
      * 
      * @param databaseName The name of the resulting database
@@ -370,11 +545,9 @@
      */
     protected String getAlterTablesSql(Database desiredModel)
     {
-    	Properties props   = getTestProperties();
-        String     catalog = props.getProperty(DDLUTILS_CATALOG_PROPERTY);
-        String     schema  = props.getProperty(DDLUTILS_SCHEMA_PROPERTY);
+        Database liveModel = readModelFromDatabase(desiredModel.getName());
 
-        return getPlatform().getAlterTablesSql(catalog, schema, null, desiredModel);
+        return getPlatform().getAlterModelSql(liveModel, desiredModel, getTableCreationParameters(desiredModel));
     }
 
     /**

Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAddColumn.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAddColumn.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAddColumn.java (original)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAddColumn.java Mon Dec 10 23:47:04 2007
@@ -27,12 +27,11 @@
 import org.apache.commons.beanutils.DynaBean;
 import org.apache.ddlutils.platform.db2.Db2Platform;
 import org.apache.ddlutils.platform.db2.Db2v8Platform;
+import org.apache.ddlutils.platform.firebird.FirebirdPlatform;
 import org.apache.ddlutils.platform.hsqldb.HsqlDbPlatform;
 import org.apache.ddlutils.platform.interbase.InterbasePlatform;
-import org.apache.ddlutils.platform.maxdb.MaxDbPlatform;
 import org.apache.ddlutils.platform.mysql.MySql50Platform;
 import org.apache.ddlutils.platform.mysql.MySqlPlatform;
-import org.apache.ddlutils.platform.sapdb.SapDbPlatform;
 import org.apache.ddlutils.platform.sybase.SybasePlatform;
 
 /**
@@ -158,11 +157,9 @@
     public void testAddSecondAutoIncrementColumn()
     {
         if (!getPlatformInfo().isNonPKIdentityColumnsSupported() ||
-            SybasePlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MaxDbPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            SapDbPlatform.DATABASENAME.equals(getPlatform().getName()))
+            !getPlatformInfo().isMultipleIdentityColumnsSupported())
         {
-            // Sybase and MaxDb/SapDb does not support more than one identity column per table
+            // Some databases do not support more than one identity column per table
             return;
         }
 
@@ -468,12 +465,14 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             // MySql uses an empty string to initialize the new pk column
             assertEquals((Object)"",     beans.get(0), "pk");
             assertEquals(new Integer(1), beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -531,6 +530,10 @@
         {
             assertEquals(new BigDecimal(1), beans.get(0), "pk");
         }
+        else if (HsqlDbPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(0), beans.get(0), "pk");
+        }
         else
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
@@ -545,7 +548,8 @@
         if (Db2Platform.DATABASENAME.equals(getPlatform().getName()) ||
             Db2v8Platform.DATABASENAME.equals(getPlatform().getName()) ||
             SybasePlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            InterbasePlatform.DATABASENAME.equals(getPlatform().getName())) {
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
             // Db2, Sybase, Interbase require that all primary key columns be required, but they don't make them so automatically
             return;
         }
@@ -580,13 +584,15 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(0),  beans.get(0), "pk1");
             assertEquals((Object)"",      beans.get(0), "pk2");
             assertEquals(new Double(2.0), beans.get(0), "pk3");
             assertEquals(new Integer(1),  beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -626,13 +632,15 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(0),  beans.get(0), "pk1");
             assertEquals((Object)"",      beans.get(0), "pk2");
             assertEquals(new Double(2.0), beans.get(0), "pk3");
             assertEquals(new Integer(1),  beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -713,12 +721,14 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),  beans.get(0), "pk1");
             assertEquals(new Integer(0),  beans.get(0), "pk2");
             assertEquals(new Integer(2),  beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -830,13 +840,15 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),  beans.get(0), "pk1");
             assertEquals((Object)"",      beans.get(0), "pk2");
             assertEquals(new Double(0.0), beans.get(0), "pk3");
             assertEquals((Object)null,    beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1055,16 +1067,19 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),    beans.get(0), "pk");
             assertEquals(new BigDecimal(0), beans.get(0), "avalue");
         }
-        else if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+                 InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals((Object)null,   beans.get(0), "avalue");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1153,7 +1168,8 @@
 
         List beans = getRows("roundtrip");
 
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals((Object)null,   beans.get(0), "avalue");
@@ -1251,18 +1267,21 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(1), beans.get(0), "avalue1");
             assertEquals((Object)"",     beans.get(0), "avalue2");
         }
-        else if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+                 InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals((Object)null,   beans.get(0), "avalue1");
             assertEquals((Object)null,   beans.get(0), "avalue2");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1397,11 +1416,18 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) 
+        {
             assertEquals(new Integer(1),    beans.get(0), "pk");
             assertEquals(new BigDecimal(0), beans.get(0), "avalue");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1), beans.get(0), "pk");
+            assertEquals((Object)null,   beans.get(0), "avalue");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1490,7 +1516,15 @@
 
         List beans = getRows("roundtrip");
 
-        assertEquals(new Integer(1), beans.get(0), "avalue");
+        assertEquals(new Integer(1), beans.get(0), "pk");
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals((Object)null, beans.get(0), "avalue");
+        }
+        else
+        {
+            assertEquals(new Integer(1), beans.get(0), "avalue");
+        }
     }
 
     /**
@@ -1580,12 +1614,20 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(1), beans.get(0), "avalue1");
             assertEquals((Object)"",     beans.get(0), "avalue2");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1), beans.get(0), "pk");
+            assertEquals((Object)null,   beans.get(0), "avalue1");
+            assertEquals((Object)null,   beans.get(0), "avalue2");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1633,12 +1675,20 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(1), beans.get(0), "avalue1");
             assertEquals((Object)"",     beans.get(0), "avalue2");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1), beans.get(0), "pk");
+            assertEquals(new Integer(1), beans.get(0), "avalue1");
+            assertEquals((Object)null,   beans.get(0), "avalue2");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1791,18 +1841,21 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),    beans.get(0), "pk");
             assertEquals(new Integer(2),    beans.get(0), "avalue1");
             assertEquals(new BigDecimal(0), beans.get(0), "avalue2");
         }
-        else if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+                 InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(2), beans.get(0), "avalue1");
             assertEquals((Object)null,   beans.get(0), "avalue2");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -1904,7 +1957,8 @@
 
         List beans = getRows("roundtrip");
 
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(2), beans.get(0), "avalue1");
@@ -2017,20 +2071,23 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),  beans.get(0), "pk");
             assertEquals(new Integer(2),  beans.get(0), "avalue1");
             assertEquals(new Integer(3),  beans.get(0), "avalue2");
             assertEquals(new Double(0.0), beans.get(0), "avalue3");
         }
-        else if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+                 InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(1), beans.get(0), "pk");
             assertEquals(new Integer(2), beans.get(0), "avalue1");
             assertEquals((Object)null,   beans.get(0), "avalue2");
             assertEquals((Object)null,   beans.get(0), "avalue3");
         }
-        else {
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -2185,14 +2242,22 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             // MySql uses the default value for the column's type to initialize
             // the new column for existing rows
             assertEquals(new Integer(1),    beans.get(0), "pk");
             assertEquals(new Integer(2),    beans.get(0), "avalue1");
             assertEquals(new BigDecimal(0), beans.get(0), "avalue2");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1), beans.get(0), "pk");
+            assertEquals(new Integer(2), beans.get(0), "avalue1");
+            assertEquals((Object)null,   beans.get(0), "avalue2");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -2294,8 +2359,16 @@
 
         List beans = getRows("roundtrip");
 
+        assertEquals(new Integer(1), beans.get(0), "pk");
         assertEquals(new Integer(2), beans.get(0), "avalue1");
-        assertEquals(new Integer(1), beans.get(0), "avalue2");
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals((Object)null, beans.get(0), "avalue2");
+        }
+        else
+        {
+            assertEquals(new Integer(1), beans.get(0), "avalue2");
+        }
     }
 
     /**
@@ -2398,13 +2471,22 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),  beans.get(0), "pk");
             assertEquals(new Integer(2),  beans.get(0), "avalue1");
             assertEquals(new Integer(3),  beans.get(0), "avalue2");
             assertEquals(new Double(0.0), beans.get(0), "avalue3");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1),  beans.get(0), "pk");
+            assertEquals(new Integer(2),  beans.get(0), "avalue1");
+            assertEquals((Object)null,    beans.get(0), "avalue2");
+            assertEquals((Object)null,    beans.get(0), "avalue3");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -2458,13 +2540,22 @@
         List beans = getRows("roundtrip");
 
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName())) {
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
             assertEquals(new Integer(1),  beans.get(0), "pk");
             assertEquals(new Integer(2),  beans.get(0), "avalue1");
             assertEquals(new Integer(3),  beans.get(0), "avalue2");
             assertEquals(new Double(0.0), beans.get(0), "avalue3");
         }
-        else {
+        else if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            assertEquals(new Integer(1),  beans.get(0), "pk");
+            assertEquals(new Integer(2),  beans.get(0), "avalue1");
+            assertEquals(new Integer(3),  beans.get(0), "avalue2");
+            assertEquals((Object)null,    beans.get(0), "avalue3");
+        }
+        else
+        {
             assertTrue(beans.isEmpty());
         }
     }
@@ -2576,6 +2667,14 @@
      */
     public void testAddFKAndLocalRequiredColumn()
     {
+        if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            // MySql does not allow adding a required column to a fk without a default value
+            // or as an IDENTITY column
+            return;
+        }
+
         final String model1Xml = 
             "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
             "<database name='roundtriptest'>\n"+
@@ -2615,7 +2714,8 @@
         List beans2 = getRows("roundtrip2");
 
         assertEquals(new BigDecimal(1), beans1.get(0), "pk");
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(2), beans2.get(0), "pk");
             assertEquals((Object)null,   beans2.get(0), "avalue");
@@ -2725,7 +2825,8 @@
 
         assertEquals(new Integer(1), beans1.get(0), "pk");
         assertEquals(new Integer(2), beans2.get(0), "pk");
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals((Object)null, beans2.get(0), "avalue");
         }
@@ -2788,6 +2889,14 @@
      */
     public void testAddFKAndMultipleLocalColumns()
     {
+        if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            // MySql does not allow adding a required column to a fk without a default value
+            // or as an IDENTITY column
+            return;
+        }
+
         final String model1Xml = 
             "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
             "<database name='roundtriptest'>\n"+
@@ -2832,7 +2941,8 @@
 
         assertEquals(new Integer(1), beans1.get(0), "pk1");
         assertEquals(new Double(2),  beans1.get(0), "pk2");
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals(new Integer(3), beans2.get(0), "pk");
             assertEquals((Object)null,   beans2.get(0), "avalue1");
@@ -3302,7 +3412,8 @@
         assertEquals(new Integer(1), beans1.get(0), "pk2");
         assertEquals(new Integer(2), beans2.get(0), "pk");
         assertEquals(new Integer(1), beans2.get(0), "avalue1");
-        if (InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             assertEquals((Object)null, beans2.get(0), "avalue2");
         }

Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java?rev=603162&r1=603161&r2=603162&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java (original)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java Mon Dec 10 23:47:04 2007
@@ -27,6 +27,7 @@
 
 import org.apache.commons.beanutils.DynaBean;
 import org.apache.ddlutils.model.Database;
+import org.apache.ddlutils.platform.firebird.FirebirdPlatform;
 import org.apache.ddlutils.platform.mckoi.MckoiPlatform;
 import org.apache.ddlutils.platform.mysql.MySql50Platform;
 import org.apache.ddlutils.platform.mysql.MySqlPlatform;
@@ -1416,6 +1417,12 @@
      */
     public void testDropFKAndCorrespondingIndex()
     {
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            // Firebird does not allow an index and a foreign key in the same table to have the same name
+            return;
+        }
+
         final String model1Xml = 
             "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
             "<database name='roundtriptest'>\n"+
@@ -1476,6 +1483,12 @@
      */
     public void testDropFKButNotCorrespondingIndex()
     {
+        if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+        {
+            // Firebird does not allow an index and a foreign key in the same table to have the same name
+            return;
+        }
+
         final String model1Xml = 
             "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
             "<database name='roundtriptest'>\n"+
@@ -1541,8 +1554,11 @@
     public void testDropFKAndDifferentIndexWithSameName()
     {
         // MySql/InnoDB doesn't allow the creation of a foreign key and index with the same name
+        // unless the index can be used as the FK's index
+        // Firebird does not allow an index and a foreign key in the same table to have the same name at all
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
+            FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             return;
         }
@@ -1607,8 +1623,11 @@
     public void testDropFKButNotDifferentIndexWithSameName()
     {
         // MySql/InnoDB doesn't allow the creation of a foreign key and index with the same name
+        // unless the index can be used as the FK's index
+        // Firebird does not allow an index and a foreign key in the same table to have the same name at all
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+            MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
+            FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             return;
         }