Additional fixes and test tweaks
git-svn-id: https://svn.apache.org/repos/asf/db/ddlutils/trunk@603834 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/ddlutils/PlatformInfo.java b/src/java/org/apache/ddlutils/PlatformInfo.java
index 0417f83..f50d16a 100644
--- a/src/java/org/apache/ddlutils/PlatformInfo.java
+++ b/src/java/org/apache/ddlutils/PlatformInfo.java
@@ -49,7 +49,13 @@
/** Whether primary key constraints are embedded inside the create table statement. */
private boolean _primaryKeyEmbedded = true;
-
+
+ /** Whether primary key columns have to be required, too. */
+ private boolean _primaryKeyColumnsHaveToBeRequired = false;
+
+ /** Whether mixed identity and non-identity columns in a primary key is supported. */
+ private boolean _mixingIdentityAndNormalPrimaryKeyColumnsSupported = true;
+
/** Whether foreign key constraints are embedded inside the create table statement. */
private boolean _foreignKeysEmbedded = false;
@@ -63,7 +69,7 @@
private boolean _indicesEmbedded = false;
/** Whether identity specification is supported for non-primary key columns. */
- private boolean _nonPKIdentityColumnsSupported = true;
+ private boolean _nonPrimaryKeyIdentityColumnsSupported = true;
/** Whether multiple identity columns in the same table are supported. */
private boolean _multipleIdentityColumnsSupported = true;
@@ -253,6 +259,47 @@
}
/**
+ * Determines whether the primary key constraints have to be required, as well.
+ *
+ * @return <code>true</code> if pk constraints have to be required
+ */
+ public boolean isPrimaryKeyColumnsHaveToBeRequired()
+ {
+ return _primaryKeyColumnsHaveToBeRequired;
+ }
+
+ /**
+ * Specifies whether the primary key constraints have to be required, as well.
+ *
+ * @param primaryKeyColumnsHaveToBeRequired Whether pk constraints need to be required
+ */
+ public void setPrimaryKeyColumnsHaveToBeRequired(boolean primaryKeyColumnsHaveToBeRequired)
+ {
+ _primaryKeyColumnsHaveToBeRequired = primaryKeyColumnsHaveToBeRequired;
+ }
+
+ /**
+ * Determines whether primary key can contain identity and non-identity columns at the same time.
+ *
+ * @return <code>true</code> if idenity and non-identity columns can be mixed in the pk
+ */
+ public boolean isMixingIdentityAndNormalPrimaryKeyColumnsSupported()
+ {
+ return _mixingIdentityAndNormalPrimaryKeyColumnsSupported;
+ }
+
+ /**
+ * Specifies whether primary key can contain identity and non-identity columns at the same time.
+ *
+ * @param mixingIdentityAndNormalPrimaryKeyColumnsSupported Whether idenity and non-identity columns
+ * can be mixed in the pk
+ */
+ public void setMixingIdentityAndNormalPrimaryKeyColumnsSupported(boolean mixingIdentityAndNormalPrimaryKeyColumnsSupported)
+ {
+ _mixingIdentityAndNormalPrimaryKeyColumnsSupported = mixingIdentityAndNormalPrimaryKeyColumnsSupported;
+ }
+
+ /**
* Determines whether foreign key constraints are embedded in the create
* table clause or as seperate alter table statements. Per default,
* foreign keys are external.
@@ -342,9 +389,9 @@
*
* @return <code>true</code> if normal non-PK columns can be auto-incrementing
*/
- public boolean isNonPKIdentityColumnsSupported()
+ public boolean isNonPrimaryKeyIdentityColumnsSupported()
{
- return _nonPKIdentityColumnsSupported;
+ return _nonPrimaryKeyIdentityColumnsSupported;
}
/**
@@ -353,9 +400,9 @@
* @param supportingNonPKIdentityColumns <code>true</code> if normal non-PK columns can
* be auto-incrementing
*/
- public void setNonPKIdentityColumnsSupported(boolean supportingNonPKIdentityColumns)
+ public void setNonPrimaryKeyIdentityColumnsSupported(boolean supportingNonPKIdentityColumns)
{
- _nonPKIdentityColumnsSupported = supportingNonPKIdentityColumns;
+ _nonPrimaryKeyIdentityColumnsSupported = supportingNonPKIdentityColumns;
}
/**
diff --git a/src/java/org/apache/ddlutils/platform/SqlBuilder.java b/src/java/org/apache/ddlutils/platform/SqlBuilder.java
index 09e93ae..e743940 100644
--- a/src/java/org/apache/ddlutils/platform/SqlBuilder.java
+++ b/src/java/org/apache/ddlutils/platform/SqlBuilder.java
@@ -1361,7 +1361,7 @@
}
if (column.isAutoIncrement() && !getPlatformInfo().isDefaultValueUsedForIdentitySpec())
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported() && !column.isPrimaryKey())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported() && !column.isPrimaryKey())
{
throw new ModelException("Column "+column.getName()+" in table "+table.getName()+" is auto-incrementing but not a primary key column, which is not supported by the platform");
}
diff --git a/src/java/org/apache/ddlutils/platform/db2/Db2Platform.java b/src/java/org/apache/ddlutils/platform/db2/Db2Platform.java
index d22f327..99d26e0 100644
--- a/src/java/org/apache/ddlutils/platform/db2/Db2Platform.java
+++ b/src/java/org/apache/ddlutils/platform/db2/Db2Platform.java
@@ -73,6 +73,7 @@
info.setMaxIdentifierLength(18);
info.setIdentityColumnAutomaticallyRequired(true);
+ info.setPrimaryKeyColumnsHaveToBeRequired(true);
// the BINARY types are also handled by Db2Builder.getSqlType(Column)
info.addNativeTypeMapping(Types.ARRAY, "BLOB", Types.BLOB);
diff --git a/src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbPlatform.java b/src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbPlatform.java
index 73443f1..0d89587 100644
--- a/src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbPlatform.java
+++ b/src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbPlatform.java
@@ -60,10 +60,11 @@
{
PlatformInfo info = getPlatformInfo();
- info.setNonPKIdentityColumnsSupported(false);
+ info.setNonPrimaryKeyIdentityColumnsSupported(false);
info.setIdentityOverrideAllowed(false);
info.setSystemForeignKeyIndicesAlwaysNonUnique(true);
info.setPrimaryKeyColumnAutomaticallyRequired(true);
+ info.setMixingIdentityAndNormalPrimaryKeyColumnsSupported(false);
info.addNativeTypeMapping(Types.ARRAY, "LONGVARBINARY", Types.LONGVARBINARY);
info.addNativeTypeMapping(Types.BLOB, "LONGVARBINARY", Types.LONGVARBINARY);
diff --git a/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java b/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java
index ee9ecdb..8700068 100644
--- a/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java
+++ b/src/java/org/apache/ddlutils/platform/interbase/InterbasePlatform.java
@@ -72,6 +72,7 @@
info.setCommentPrefix("/*");
info.setCommentSuffix("*/");
info.setSystemForeignKeyIndicesAlwaysNonUnique(true);
+ info.setPrimaryKeyColumnsHaveToBeRequired(true);
// BINARY and VARBINARY are also handled by the InterbaseBuilder.getSqlType method
info.addNativeTypeMapping(Types.ARRAY, "BLOB", Types.LONGVARBINARY);
diff --git a/src/java/org/apache/ddlutils/platform/mysql/MySqlPlatform.java b/src/java/org/apache/ddlutils/platform/mysql/MySqlPlatform.java
index 8773f9e..80db511 100644
--- a/src/java/org/apache/ddlutils/platform/mysql/MySqlPlatform.java
+++ b/src/java/org/apache/ddlutils/platform/mysql/MySqlPlatform.java
@@ -66,7 +66,9 @@
info.setNullAsDefaultValueRequired(true);
info.setDefaultValuesForLongTypesSupported(false);
// see http://dev.mysql.com/doc/refman/4.1/en/example-auto-increment.html
- info.setNonPKIdentityColumnsSupported(false);
+ info.setNonPrimaryKeyIdentityColumnsSupported(false);
+ info.setMultipleIdentityColumnsSupported(false);
+ info.setMixingIdentityAndNormalPrimaryKeyColumnsSupported(false);
// MySql returns synthetic default values for pk columns
info.setSyntheticDefaultValueForRequiredReturned(true);
info.setPrimaryKeyColumnAutomaticallyRequired(true);
diff --git a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlBuilder.java b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlBuilder.java
index 602a3b9..064e84b 100644
--- a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlBuilder.java
+++ b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlBuilder.java
@@ -168,6 +168,18 @@
}
/**
+ * {@inheritDoc}
+ */
+ public void addColumn(Table table, Column newColumn) throws IOException
+ {
+ if (newColumn.isAutoIncrement())
+ {
+ createAutoIncrementSequence(table, newColumn);
+ }
+ super.addColumn(table, newColumn);
+ }
+
+ /**
* Writes the SQL to drop a column.
*
* @param table The table
diff --git a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlModelReader.java b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlModelReader.java
index ede7b88..fb1cb09 100644
--- a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlModelReader.java
+++ b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlModelReader.java
@@ -62,7 +62,7 @@
if (table != null)
{
- // PostgreSQL also returns unique indics for non-pk auto-increment columns
+ // PostgreSQL also returns unique indexes for pk and non-pk auto-increment columns
// which are of the form "[table]_[column]_key"
HashMap uniquesByName = new HashMap();
@@ -78,7 +78,8 @@
for (int columnIdx = 0; columnIdx < table.getColumnCount(); columnIdx++)
{
Column column = table.getColumn(columnIdx);
- if (column.isAutoIncrement() && !column.isPrimaryKey())
+
+ if (column.isAutoIncrement())
{
String indexName = table.getName() + "_" + column.getName() + "_key";
diff --git a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java
index de73cfe..6842c74 100644
--- a/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java
+++ b/src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java
@@ -33,6 +33,7 @@
import org.apache.ddlutils.DatabaseOperationException;
import org.apache.ddlutils.PlatformInfo;
import org.apache.ddlutils.alteration.AddColumnChange;
+import org.apache.ddlutils.alteration.ModelComparator;
import org.apache.ddlutils.alteration.RemoveColumnChange;
import org.apache.ddlutils.alteration.TableChange;
import org.apache.ddlutils.alteration.TableDefinitionChangesPredicate;
@@ -65,6 +66,7 @@
{
PlatformInfo info = getPlatformInfo();
+ info.setPrimaryKeyColumnAutomaticallyRequired(true);
// this is the default length though it might be changed when building PostgreSQL
// in file src/include/postgres_ext.h
info.setMaxIdentifierLength(31);
@@ -254,6 +256,17 @@
/**
* {@inheritDoc}
*/
+ protected ModelComparator getModelComparator()
+ {
+ ModelComparator comparator = super.getModelComparator();
+
+ comparator.setCanDropPrimaryKeyColumns(false);
+ return comparator;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
protected TableDefinitionChangesPredicate getTableDefinitionChangesPredicate()
{
return new DefaultTableDefinitionChangesPredicate()
diff --git a/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java b/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java
index feb13d4..eeed56d 100644
--- a/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java
+++ b/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java
@@ -82,6 +82,7 @@
info.setNullAsDefaultValueRequired(true);
info.setIdentityColumnAutomaticallyRequired(true);
info.setMultipleIdentityColumnsSupported(false);
+ info.setPrimaryKeyColumnsHaveToBeRequired(true);
info.setCommentPrefix("/*");
info.setCommentSuffix("*/");
diff --git a/src/test/org/apache/ddlutils/RunAllTests.java b/src/test/org/apache/ddlutils/RunAllTests.java
index 5256107..4dc21b4 100644
--- a/src/test/org/apache/ddlutils/RunAllTests.java
+++ b/src/test/org/apache/ddlutils/RunAllTests.java
@@ -24,6 +24,7 @@
import org.apache.ddlutils.dynabean.TestDynaSqlQueries;
import org.apache.ddlutils.io.TestAddColumn;
import org.apache.ddlutils.io.TestAlteration;
+import org.apache.ddlutils.io.TestChangeColumn;
import org.apache.ddlutils.io.TestConstraints;
import org.apache.ddlutils.io.TestDataReaderAndWriter;
import org.apache.ddlutils.io.TestDatabaseIO;
@@ -129,6 +130,7 @@
suite.addTestSuite(TestConstraints.class);
suite.addTestSuite(TestAlteration.class);
suite.addTestSuite(TestAddColumn.class);
+ suite.addTestSuite(TestChangeColumn.class);
suite.addTestSuite(TestDropColumn.class);
suite.addTestSuite(TestMisc.class);
}
diff --git a/src/test/org/apache/ddlutils/io/TestAddColumn.java b/src/test/org/apache/ddlutils/io/TestAddColumn.java
index 500202c..93e5b3a 100644
--- a/src/test/org/apache/ddlutils/io/TestAddColumn.java
+++ b/src/test/org/apache/ddlutils/io/TestAddColumn.java
@@ -25,11 +25,10 @@
import junit.framework.Test;
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.mckoi.MckoiPlatform;
import org.apache.ddlutils.platform.mysql.MySql50Platform;
import org.apache.ddlutils.platform.mysql.MySqlPlatform;
import org.apache.ddlutils.platform.sybase.SybasePlatform;
@@ -91,7 +90,7 @@
*/
public void testAddAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -156,10 +155,9 @@
*/
public void testAddSecondAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported() ||
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported() ||
!getPlatformInfo().isMultipleIdentityColumnsSupported())
{
- // Some databases do not support more than one identity column per table
return;
}
@@ -232,10 +230,7 @@
}
/**
- * Tests the addition of a column with a default value. Note that depending
- * on whether the database supports this via a statement, this test may fail.
- * For instance, Sql Server has a statement for this which means that the
- * existing value in column avalue won't be changed and thus the test fails.
+ * Tests the addition of a column with a default value.
*/
public void testAddColumnWithDefault()
{
@@ -264,11 +259,7 @@
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- List beans = getRows("roundtrip");
-
- // we cannot be sure whether the default algorithm is used (which will apply the
- // default value even to existing columns with NULL in it) or the database supports
- // it directly (in which case it might still be NULL)
+ List beans = getRows("roundtrip");
Object avalue = ((DynaBean)beans.get(0)).get("avalue");
assertTrue((avalue == null) || new Double(2).equals(avalue));
@@ -279,7 +270,7 @@
*/
public void testAddRequiredAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -340,10 +331,7 @@
}
/**
- * Tests the addition of a column with a default value. Note that depending
- * on whether the database supports this via a statement, this test may fail.
- * For instance, Sql Server has a statement for this which means that the
- * existing value in column avalue won't be changed and thus the test fails.
+ * Tests the addition of a column with a default value.
*/
public void testAddRequiredColumnWithDefault()
{
@@ -372,11 +360,7 @@
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- List beans = getRows("roundtrip");
-
- // we cannot be sure whether the default algorithm is used (which will apply the
- // default value even to existing columns with NULL in it) or the database supports
- // it directly (in which case it might still be NULL)
+ List beans = getRows("roundtrip");
Object avalue = ((DynaBean)beans.get(0)).get("avalue");
assertTrue((avalue == null) || "sometext".equals(avalue));
@@ -417,18 +401,12 @@
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- List beans = getRows("roundtrip");
+ List beans = getRows("roundtrip");
+ Object avalue3 = ((DynaBean)beans.get(0)).get("avalue3");
assertEquals((Object)"test", beans.get(0), "avalue1");
assertEquals(new Integer(3), beans.get(0), "avalue2");
-
- // we cannot be sure whether the default algorithm is used (which will apply the
- // default value even to existing columns with NULL in it) or the database supports
- // it dircetly (in which case it might still be NULL)
- Object avalue3 = ((DynaBean)beans.get(0)).get("avalue3");
-
assertTrue((avalue3 == null) || new Double(1.0).equals(avalue3));
-
assertEquals((Object)null, beans.get(0), "avalue4");
}
@@ -471,6 +449,12 @@
assertEquals((Object)"", beans.get(0), "pk");
assertEquals(new Integer(1), beans.get(0), "avalue");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ // Mckoi uses null to initialize the new pk column
+ assertEquals((Object)null, beans.get(0), "pk");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
else
{
assertTrue(beans.isEmpty());
@@ -545,12 +529,8 @@
*/
public void testAddPKAndMultipleColumns()
{
- if (Db2Platform.DATABASENAME.equals(getPlatform().getName()) ||
- Db2v8Platform.DATABASENAME.equals(getPlatform().getName()) ||
- SybasePlatform.DATABASENAME.equals(getPlatform().getName()) ||
- InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+ if (getPlatformInfo().isPrimaryKeyColumnsHaveToBeRequired())
{
- // Db2, Sybase, Interbase require that all primary key columns be required, but they don't make them so automatically
return;
}
@@ -591,6 +571,13 @@
assertEquals(new Double(2.0), beans.get(0), "pk3");
assertEquals(new Integer(1), beans.get(0), "avalue");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals((Object)null, beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals(new Double(2.0), beans.get(0), "pk3");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
else
{
assertTrue(beans.isEmpty());
@@ -639,6 +626,13 @@
assertEquals(new Double(2.0), beans.get(0), "pk3");
assertEquals(new Integer(1), beans.get(0), "avalue");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals((Object)null, beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals(new Double(2.0), beans.get(0), "pk3");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
else
{
assertTrue(beans.isEmpty());
@@ -650,9 +644,8 @@
*/
public void testAddPKAndMultipleColumnsInclAutoIncrement()
{
- if (HsqlDbPlatform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isMixingIdentityAndNormalPrimaryKeyColumnsSupported())
{
- // the IDENTITY column has to be the only PK column
return;
}
@@ -683,7 +676,19 @@
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- assertTrue(getRows("roundtrip").isEmpty());
+ List beans = getRows("roundtrip");
+
+ if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(1), beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals((Object)null, beans.get(0), "pk3");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
+ else
+ {
+ assertTrue(beans.isEmpty());
+ }
}
/**
@@ -727,6 +732,12 @@
assertEquals(new Integer(0), beans.get(0), "pk2");
assertEquals(new Integer(2), beans.get(0), "avalue");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(1), beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals(new Integer(2), beans.get(0), "avalue");
+ }
else
{
assertTrue(beans.isEmpty());
@@ -738,11 +749,8 @@
*/
public void testAddAutoIncrementColumnIntoPK()
{
- if (HsqlDbPlatform.DATABASENAME.equals(getPlatform().getName()) ||
- MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
- MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isMixingIdentityAndNormalPrimaryKeyColumnsSupported())
{
- // the IDENTITY column has to be the only PK column
return;
}
@@ -847,6 +855,13 @@
assertEquals(new Double(0.0), beans.get(0), "pk3");
assertEquals((Object)null, beans.get(0), "avalue");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(1), beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals((Object)null, beans.get(0), "pk3");
+ assertEquals((Object)null, beans.get(0), "avalue");
+ }
else
{
assertTrue(beans.isEmpty());
@@ -858,11 +873,8 @@
*/
public void testAddMultipleColumnsIntoPKWithAutoIncrement()
{
- if (HsqlDbPlatform.DATABASENAME.equals(getPlatform().getName()) ||
- MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
- MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isMixingIdentityAndNormalPrimaryKeyColumnsSupported())
{
- // the IDENTITY column has to be the only PK column
return;
}
@@ -887,14 +899,26 @@
createDatabase(model1Xml);
- insertRow("roundtrip", new Object[] { new Integer(1) });
+ insertRow("roundtrip", new Object[] { null, new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- assertTrue(getRows("roundtrip").isEmpty());
+ List beans = getRows("roundtrip");
+
+ if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(1), beans.get(0), "pk1");
+ assertEquals((Object)null, beans.get(0), "pk2");
+ assertEquals((Object)null, beans.get(0), "pk3");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
+ else
+ {
+ assertTrue(beans.isEmpty());
+ }
}
/**
@@ -902,9 +926,8 @@
*/
public void testAddMultipleColumnsInclAutoIncrementIntoPK()
{
- if (HsqlDbPlatform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isMixingIdentityAndNormalPrimaryKeyColumnsSupported())
{
- // the IDENTITY column has to be the only PK column
return;
}
@@ -936,7 +959,19 @@
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
- assertTrue(getRows("roundtrip").isEmpty());
+ List beans = getRows("roundtrip");
+
+ if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(1), beans.get(0), "pk1");
+ assertEquals((Object)"text", beans.get(0), "pk2");
+ assertEquals((Object)null, beans.get(0), "pk3");
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
+ else
+ {
+ assertTrue(beans.isEmpty());
+ }
}
/**
@@ -987,7 +1022,8 @@
*/
public void testAddNonUniqueIndexAndAutoIncrementColumn()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1133,7 +1169,8 @@
*/
public void testAddNonUniqueIndexAndRequiredAutoIncrementColumn()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1292,6 +1329,7 @@
*/
public void testAddUniqueIndexAndColumn()
{
+ // TODO
if (!getPlatformInfo().isIndicesSupported() ||
InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -1336,7 +1374,8 @@
*/
public void testAddUniqueIndexAndAutoIncrementColumn()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1481,7 +1520,8 @@
*/
public void testAddUniqueIndexAndRequiredAutoIncrementColumn()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1575,6 +1615,7 @@
*/
public void testAddUniqueIndexAndMultipleColumns()
{
+ // TODO
if (!getPlatformInfo().isIndicesSupported() ||
InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -1748,7 +1789,8 @@
*/
public void testAddAutoIncrementColumnIntoNonUniqueIndex()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1916,7 +1958,8 @@
*/
public void testAddRequiredAutoIncrementColumnIntoNonUniqueIndex()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -2097,6 +2140,7 @@
*/
public void testAddColumnIntoUniqueIndex()
{
+ // TODO
if (!getPlatformInfo().isIndicesSupported() ||
InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -2149,7 +2193,7 @@
public void testAddAutoIncrementColumnIntoUniqueIndex()
{
if (!getPlatformInfo().isIndicesSupported() ||
- !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -2241,6 +2285,7 @@
List beans = getRows("roundtrip");
+ // TODO
if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
MySql50Platform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -2318,7 +2363,8 @@
*/
public void testAddRequiredAutoIncrementColumnIntoUniqueIndex()
{
- if (!getPlatformInfo().isIndicesSupported() || !getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isIndicesSupported() ||
+ !getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -2426,6 +2472,7 @@
*/
public void testAddMultipleColumnsIntoUniqueIndex()
{
+ // TODO
if (!getPlatformInfo().isIndicesSupported() ||
InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -2613,7 +2660,7 @@
*/
public void testAddFKAndLocalAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -2667,11 +2714,11 @@
*/
public void testAddFKAndLocalRequiredColumn()
{
+ // TODO
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;
}
@@ -2715,7 +2762,8 @@
assertEquals(new BigDecimal(1), beans1.get(0), "pk");
if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()) ||
- InterbasePlatform.DATABASENAME.equals(getPlatform().getName()))
+ InterbasePlatform.DATABASENAME.equals(getPlatform().getName()) ||
+ MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
{
assertEquals(new Integer(2), beans2.get(0), "pk");
assertEquals((Object)null, beans2.get(0), "avalue");
@@ -2780,7 +2828,7 @@
*/
public void testAddFKAndLocalRequiredAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -2889,11 +2937,11 @@
*/
public void testAddFKAndMultipleLocalColumns()
{
+ // TODO
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;
}
@@ -2948,6 +2996,12 @@
assertEquals((Object)null, beans2.get(0), "avalue1");
assertEquals((Object)null, beans2.get(0), "avalue2");
}
+ else if (MckoiPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ assertEquals(new Integer(3), beans2.get(0), "pk");
+ assertEquals(new Integer(1), beans2.get(0), "avalue1");
+ assertEquals((Object)null, beans2.get(0), "avalue2");
+ }
else
{
assertTrue(beans2.isEmpty());
@@ -2999,7 +3053,7 @@
*/
public void testAddFKAndForeignAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -3195,7 +3249,7 @@
*/
public void testAddAutoIncrementColumnIntoFK()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -3358,7 +3412,7 @@
*/
public void testAddRequiredAutoIncrementColumnIntoFK()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
diff --git a/src/test/org/apache/ddlutils/io/TestAlteration.java b/src/test/org/apache/ddlutils/io/TestAlteration.java
index 2991587..a2af82f 100644
--- a/src/test/org/apache/ddlutils/io/TestAlteration.java
+++ b/src/test/org/apache/ddlutils/io/TestAlteration.java
@@ -19,13 +19,11 @@
* under the License.
*/
-import java.math.BigDecimal;
import java.util.List;
import java.util.Properties;
import junit.framework.Test;
-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;
@@ -57,695 +55,6 @@
}
/**
- * Tests the alteration of a column datatype.
- */
- public void testChangeDatatype1()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' required='false'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='DOUBLE' required='false'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Double(2.0), beans.get(0), "avalue");
- }
-
- /**
- * Tests the alteration of a column datatype.
- */
- public void testChangeDatatype2()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='SMALLINT' required='true'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='20' required='true'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Short((short)2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
- DynaBean bean = (DynaBean)beans.get(0);
-
- // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
- if (bean.get("avalue") instanceof String)
- {
- bean.set("avalue", ((String)bean.get("avalue")).trim());
- }
- assertEquals((Object)"2", beans.get(0), "avalue");
- }
-
- /**
- * Tests the alteration of the datatypes of PK and FK columns.
- */
- public void testChangePKAndFKDatatypes()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='INTEGER' required='false'/>\n"+
- " <foreign-key foreignTable='roundtrip1'>\n"+
- " <reference local='fk' foreign='pk'/>\n"+
- " </foreign-key>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='VARCHAR' size='128' primaryKey='true' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='VARCHAR' size='128' required='false'/>\n"+
- " <foreign-key foreignTable='roundtrip1'>\n"+
- " <reference local='fk' foreign='pk'/>\n"+
- " </foreign-key>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip1", new Object[] { new Integer(1) });
- insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip2");
- DynaBean bean = (DynaBean)beans.get(0);
-
- // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
- if (bean.get("fk") instanceof String)
- {
- bean.set("fk", ((String)bean.get("fk")).trim());
- }
- assertEquals((Object)"1", bean, "fk");
- }
-
- /**
- * Tests the alteration of the sizes of PK and FK columns.
- */
- public void testChangePKAndFKSizes()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='VARCHAR' size='32' required='false'/>\n"+
- " <foreign-key foreignTable='roundtrip1'>\n"+
- " <reference local='fk' foreign='pk'/>\n"+
- " </foreign-key>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='VARCHAR' size='128' primaryKey='true' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='VARCHAR' size='128' required='false'/>\n"+
- " <foreign-key foreignTable='roundtrip1'>\n"+
- " <reference local='fk' foreign='pk'/>\n"+
- " </foreign-key>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip1", new Object[] { "test" });
- insertRow("roundtrip2", new Object[] { new Integer(1), "test" });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip2");
- DynaBean bean = (DynaBean)beans.get(0);
-
- assertEquals((Object)"test", bean, "fk");
- }
-
- /**
- * Tests the alteration of the datatypes of columns of a PK and FK that
- * will be dropped.
- */
- public void testChangeDroppedPKAndFKDatatypes()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='INTEGER' required='false'/>\n"+
- " <foreign-key foreignTable='roundtrip1'>\n"+
- " <reference local='fk' foreign='pk'/>\n"+
- " </foreign-key>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip1'>\n"+
- " <column name='pk' type='VARCHAR' primaryKey='false' required='true'/>\n"+
- " </table>\n"+
- " <table name='roundtrip2'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='fk' type='VARCHAR' required='false'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip1", new Object[] { new Integer(1) });
- insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip2");
- DynaBean bean = (DynaBean)beans.get(0);
-
- // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
- if (bean.get("fk") instanceof String)
- {
- bean.set("fk", ((String)bean.get("fk")).trim());
- }
- assertEquals((Object)"1", bean, "fk");
- }
-
- /**
- * Tests the alteration of the datatypes of a column that is indexed.
- */
- public void testChangeIndexColumnDatatype()
- {
- if (!getPlatformInfo().isIndicesSupported())
- {
- return;
- }
-
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='8' required='false'/>\n"+
- " <index name='avalue_index'>\n"+
- " <index-column name='avalue'/>\n"+
- " </index>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' required='false'/>\n"+
- " <index name='avalue_index'>\n"+
- " <index-column name='avalue'/>\n"+
- " </index>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(1) });
- insertRow("roundtrip", new Object[] { new Integer(2), new Integer(10) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Integer(1), beans.get(0), "avalue");
- assertEquals(new Integer(10), beans.get(1), "avalue");
- }
-
- /**
- * Tests the alteration of the datatypes of an indexed column where
- * the index will be dropped.
- */
- public void testChangeDroppedIndexColumnDatatype()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='8' required='false'/>\n"+
- " <index name='avalue_index'>\n"+
- " <index-column name='avalue'/>\n"+
- " </index>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' required='false'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(1) });
- insertRow("roundtrip", new Object[] { new Integer(2), new Integer(10) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Integer(1), beans.get(0), "avalue");
- assertEquals(new Integer(10), beans.get(1), "avalue");
- }
-
- /**
- * Tests the alteration of a column size.
- */
- public void testChangeSize()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='20' required='true'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='32' required='true'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), "test" });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals((Object)"test", beans.get(0), "avalue");
- }
-
- /**
- * Tests the alteration of a column's datatype and size.
- */
- public void testChangeDatatypeAndSize()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='CHAR' size='4' required='true'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='32' required='true'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), "test" });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals((Object)"test", beans.get(0), "avalue");
- }
-
- /**
- * Tests the alteration of a column null constraint.
- */
- public void testChangeNull()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' required='true'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' required='false'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Integer(2), beans.get(0), "avalue");
- }
-
- /**
- * Tests the addition of a column's default value.
- */
- public void testAddDefault()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='DOUBLE'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='DOUBLE' default='2.0'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Double(2.0) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Double(2.0), beans.get(0), "avalue");
- }
-
- /**
- * Tests the change of a column default value.
- */
- public void testChangeDefault()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' default='1'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' default='20'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Integer(2), beans.get(0), "avalue");
- }
-
- /**
- * Tests the removal of a column default value.
- */
- public void testDropDefault()
- {
- final String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='20' default='test'/>\n"+
- " </table>\n"+
- "</database>";
- final String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='VARCHAR' size='20'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals((Object)"test", beans.get(0), "avalue");
- }
-
- /**
- * Tests the change of a column's auto-increment state.
- */
- public void testMakeAutoIncrement()
- {
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
- {
- return;
- }
- // Sybase does not like INTEGER auto-increment columns
- if (SybasePlatform.DATABASENAME.equals(getPlatform().getName()))
- {
- String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='12,0'/>\n"+
- " </table>\n"+
- "</database>";
- String model2Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='12,0' autoIncrement='true' required='true'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal(2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new BigDecimal(2), beans.get(0), "avalue");
- }
- else
- {
- String model1Xml =
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER'/>\n"+
- " </table>\n"+
- "</database>";
- String model2Xml=
- "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' autoIncrement='true' required='true'/>\n"+
- " </table>\n"+
- "</database>";
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- assertEquals(new Integer(2), beans.get(0), "avalue");
- }
- }
-
- /**
- * Tests the removal the column auto-increment status.
- */
- public void testDropAutoIncrement()
- {
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
- {
- return;
- }
-
- boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
- final String model1Xml;
- final String model2Xml;
-
- if (isSybase)
- {
- model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='12,0' required='true' autoIncrement='true'/>\n"+
- " </table>\n"+
- "</database>";
- model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='NUMERIC' size='12,0' required='true' autoIncrement='false'/>\n"+
- " </table>\n"+
- "</database>";
- }
- else
- {
- model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' autoIncrement='true'/>\n"+
- " </table>\n"+
- "</database>";
- model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
- "<database name='roundtriptest'>\n"+
- " <table name='roundtrip'>\n"+
- " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
- " <column name='avalue' type='INTEGER' autoIncrement='false'/>\n"+
- " </table>\n"+
- "</database>";
- }
-
- createDatabase(model1Xml);
-
- insertRow("roundtrip", new Object[] { new Integer(1) });
-
- alterDatabase(model2Xml);
-
- assertEquals(getAdjustedModel(),
- readModelFromDatabase("roundtriptest"));
-
- List beans = getRows("roundtrip");
-
- if (isSybase)
- {
- assertEquals(new BigDecimal(1), beans.get(0), "avalue");
- }
- else
- {
- assertEquals(new Integer(1), beans.get(0), "avalue");
- }
- }
-
- /**
* Tests the change of the order of the columns of a table.
*/
public void testChangeColumnOrder()
@@ -830,7 +139,7 @@
*/
public void testDropAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -1417,7 +726,8 @@
*/
public void testDropFKAndCorrespondingIndex()
{
- if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isIndicesSupported() ||
+ 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;
@@ -1483,7 +793,8 @@
*/
public void testDropFKButNotCorrespondingIndex()
{
- if (FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
+ if (!getPlatformInfo().isIndicesSupported() ||
+ 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;
@@ -1556,7 +867,8 @@
// 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()) ||
+ if (!getPlatformInfo().isIndicesSupported() ||
+ MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
{
@@ -1625,7 +937,8 @@
// 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()) ||
+ if (!getPlatformInfo().isIndicesSupported() ||
+ MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
FirebirdPlatform.DATABASENAME.equals(getPlatform().getName()))
{
diff --git a/src/test/org/apache/ddlutils/io/TestChangeColumn.java b/src/test/org/apache/ddlutils/io/TestChangeColumn.java
new file mode 100644
index 0000000..25b65f3
--- /dev/null
+++ b/src/test/org/apache/ddlutils/io/TestChangeColumn.java
@@ -0,0 +1,735 @@
+package org.apache.ddlutils.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import junit.framework.Test;
+
+import org.apache.commons.beanutils.DynaBean;
+import org.apache.ddlutils.platform.sybase.SybasePlatform;
+
+/**
+ * Tests changing columns, e.g. changing the data type or size.
+ *
+ * @version $Revision: $
+ */
+public class TestChangeColumn extends RoundtripTestBase
+{
+ /**
+ * Parameterized test case pattern.
+ *
+ * @return The tests
+ */
+ public static Test suite() throws Exception
+ {
+ return getTests(TestChangeColumn.class);
+ }
+
+ /**
+ * Tests the alteration of a column datatype.
+ */
+ public void testChangeDatatype1()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' required='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='DOUBLE' required='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Double(2.0), beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the alteration of a column datatype.
+ */
+ public void testChangeDatatype2()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='SMALLINT' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='20' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Short((short)2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+ DynaBean bean = (DynaBean)beans.get(0);
+
+ // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
+ if (bean.get("avalue") instanceof String)
+ {
+ bean.set("avalue", ((String)bean.get("avalue")).trim());
+ }
+ assertEquals((Object)"2", beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the alteration of the datatypes of PK and FK columns.
+ */
+ public void testChangePKAndFKDatatypes()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='INTEGER' required='false'/>\n"+
+ " <foreign-key foreignTable='roundtrip1'>\n"+
+ " <reference local='fk' foreign='pk'/>\n"+
+ " </foreign-key>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='VARCHAR' size='128' primaryKey='true' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='VARCHAR' size='128' required='false'/>\n"+
+ " <foreign-key foreignTable='roundtrip1'>\n"+
+ " <reference local='fk' foreign='pk'/>\n"+
+ " </foreign-key>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip1", new Object[] { new Integer(1) });
+ insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip2");
+ DynaBean bean = (DynaBean)beans.get(0);
+
+ // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
+ if (bean.get("fk") instanceof String)
+ {
+ bean.set("fk", ((String)bean.get("fk")).trim());
+ }
+ assertEquals((Object)"1", bean, "fk");
+ }
+
+ /**
+ * Tests the alteration of the sizes of PK and FK columns.
+ */
+ public void testChangePKAndFKSizes()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='VARCHAR' size='32' required='false'/>\n"+
+ " <foreign-key foreignTable='roundtrip1'>\n"+
+ " <reference local='fk' foreign='pk'/>\n"+
+ " </foreign-key>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='VARCHAR' size='128' primaryKey='true' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='VARCHAR' size='128' required='false'/>\n"+
+ " <foreign-key foreignTable='roundtrip1'>\n"+
+ " <reference local='fk' foreign='pk'/>\n"+
+ " </foreign-key>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip1", new Object[] { "test" });
+ insertRow("roundtrip2", new Object[] { new Integer(1), "test" });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip2");
+ DynaBean bean = (DynaBean)beans.get(0);
+
+ assertEquals((Object)"test", bean, "fk");
+ }
+
+ /**
+ * Tests the alteration of the datatypes of columns of a PK and FK that
+ * will be dropped.
+ */
+ public void testChangeDroppedPKAndFKDatatypes()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='INTEGER' required='false'/>\n"+
+ " <foreign-key foreignTable='roundtrip1'>\n"+
+ " <reference local='fk' foreign='pk'/>\n"+
+ " </foreign-key>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip1'>\n"+
+ " <column name='pk' type='VARCHAR' primaryKey='false' required='true'/>\n"+
+ " </table>\n"+
+ " <table name='roundtrip2'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='fk' type='VARCHAR' required='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip1", new Object[] { new Integer(1) });
+ insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip2");
+ DynaBean bean = (DynaBean)beans.get(0);
+
+ // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
+ if (bean.get("fk") instanceof String)
+ {
+ bean.set("fk", ((String)bean.get("fk")).trim());
+ }
+ assertEquals((Object)"1", bean, "fk");
+ }
+
+ /**
+ * Tests the alteration of the datatypes of a column that is indexed.
+ */
+ public void testChangeIndexColumnDatatype()
+ {
+ if (!getPlatformInfo().isIndicesSupported())
+ {
+ return;
+ }
+
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='8' required='false'/>\n"+
+ " <index name='avalue_index'>\n"+
+ " <index-column name='avalue'/>\n"+
+ " </index>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' required='false'/>\n"+
+ " <index name='avalue_index'>\n"+
+ " <index-column name='avalue'/>\n"+
+ " </index>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(1) });
+ insertRow("roundtrip", new Object[] { new Integer(2), new Integer(10) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ assertEquals(new Integer(10), beans.get(1), "avalue");
+ }
+
+ /**
+ * Tests the alteration of the datatypes of an indexed column where
+ * the index will be dropped.
+ */
+ public void testChangeDroppedIndexColumnDatatype()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='8' required='false'/>\n"+
+ " <index name='avalue_index'>\n"+
+ " <index-column name='avalue'/>\n"+
+ " </index>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' required='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(1) });
+ insertRow("roundtrip", new Object[] { new Integer(2), new Integer(10) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ assertEquals(new Integer(10), beans.get(1), "avalue");
+ }
+
+ /**
+ * Tests the alteration of a column size.
+ */
+ public void testChangeSize()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='20' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='32' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), "test" });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals((Object)"test", beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the alteration of a column's datatype and size.
+ */
+ public void testChangeDatatypeAndSize()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='CHAR' size='4' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='32' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), "test" });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals((Object)"test", beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the alteration of a column null constraint.
+ */
+ public void testChangeNull()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' required='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Integer(2), beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the addition of a column's default value.
+ */
+ public void testAddDefault()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='DOUBLE'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='DOUBLE' default='2.0'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Double(2.0) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Double(2.0), beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the change of a column default value.
+ */
+ public void testChangeDefault()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' default='1'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' default='20'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Integer(2), beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the removal of a column default value.
+ */
+ public void testDropDefault()
+ {
+ final String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='20' default='test'/>\n"+
+ " </table>\n"+
+ "</database>";
+ final String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='VARCHAR' size='20'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals((Object)"test", beans.get(0), "avalue");
+ }
+
+ /**
+ * Tests the change of a column's auto-increment state.
+ */
+ public void testMakeAutoIncrement()
+ {
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
+ {
+ return;
+ }
+ // Sybase does not like INTEGER auto-increment columns
+ if (SybasePlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='12,0'/>\n"+
+ " </table>\n"+
+ "</database>";
+ String model2Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='12,0' autoIncrement='true' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal(2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new BigDecimal(2), beans.get(0), "avalue");
+ }
+ else
+ {
+ String model1Xml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER'/>\n"+
+ " </table>\n"+
+ "</database>";
+ String model2Xml=
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' autoIncrement='true' required='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ assertEquals(new Integer(2), beans.get(0), "avalue");
+ }
+ }
+
+ /**
+ * Tests the removal the column auto-increment status.
+ */
+ public void testDropAutoIncrement()
+ {
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
+ {
+ return;
+ }
+
+ boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
+ final String model1Xml;
+ final String model2Xml;
+
+ if (isSybase)
+ {
+ model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='12,0' required='true' autoIncrement='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='NUMERIC' size='12,0' required='true' autoIncrement='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+ }
+ else
+ {
+ model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' autoIncrement='true'/>\n"+
+ " </table>\n"+
+ "</database>";
+ model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database name='roundtriptest'>\n"+
+ " <table name='roundtrip'>\n"+
+ " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
+ " <column name='avalue' type='INTEGER' autoIncrement='false'/>\n"+
+ " </table>\n"+
+ "</database>";
+ }
+
+ createDatabase(model1Xml);
+
+ insertRow("roundtrip", new Object[] { new Integer(1) });
+
+ alterDatabase(model2Xml);
+
+ assertEquals(getAdjustedModel(),
+ readModelFromDatabase("roundtriptest"));
+
+ List beans = getRows("roundtrip");
+
+ if (isSybase)
+ {
+ assertEquals(new BigDecimal(1), beans.get(0), "avalue");
+ }
+ else
+ {
+ assertEquals(new Integer(1), beans.get(0), "avalue");
+ }
+ }
+}
diff --git a/src/test/org/apache/ddlutils/io/TestConstraints.java b/src/test/org/apache/ddlutils/io/TestConstraints.java
index b294637..083e69d 100644
--- a/src/test/org/apache/ddlutils/io/TestConstraints.java
+++ b/src/test/org/apache/ddlutils/io/TestConstraints.java
@@ -215,7 +215,7 @@
public void testAutoIncrementIntegerColumn()
{
// only test this if the platform supports it
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
diff --git a/src/test/org/apache/ddlutils/io/TestDropColumn.java b/src/test/org/apache/ddlutils/io/TestDropColumn.java
index 610fde0..2570b04 100644
--- a/src/test/org/apache/ddlutils/io/TestDropColumn.java
+++ b/src/test/org/apache/ddlutils/io/TestDropColumn.java
@@ -82,7 +82,7 @@
*/
public void testDropAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -266,7 +266,7 @@
*/
public void testDropMultipleColumnsInclAutoIncrement()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
diff --git a/src/test/org/apache/ddlutils/io/TestInsertColumn.java b/src/test/org/apache/ddlutils/io/TestInsertColumn.java
index 6fd8255..7cedcf1 100644
--- a/src/test/org/apache/ddlutils/io/TestInsertColumn.java
+++ b/src/test/org/apache/ddlutils/io/TestInsertColumn.java
@@ -84,7 +84,7 @@
*/
public void testInsertAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
@@ -227,7 +227,7 @@
*/
public void testInsertRequiredAutoIncrementColumn()
{
- if (!getPlatformInfo().isNonPKIdentityColumnsSupported())
+ if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}