blob: 02295d628cbb711585c5137b68db9cd69442db69 [file] [log] [blame]
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.sql.Timestamp;
import java.text.ParseException;
import java.util.Date;
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.
*
* TODO:
* - more type conversion tests (parameterized ?)
* - more size change tests (parameterized ?)
*
* @version $Revision: $
*/
public class TestChangeColumn extends RoundtripTestBase
{
/**
* Parameterized test case pattern.
*
* @return The tests
*/
public static Test suite() throws Exception
{
return getTests(TestChangeColumn.class);
}
// - change default value (add default, remove default, change default)
// - combined changes, e.g
// - type & size
// - type & auto increment status
// - type & required
// - size & required
// - required & default value
// - for each of the above: normal column, pk column, fk column (local), index column, unique index column
/**
* Tests the alteration of a column datatype change from integer to double.
*/
public void testColumnTypeIntegerToDouble()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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>";
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(1), beans.get(0), "pk");
assertEquals(new Double(2.0), beans.get(0), "avalue");
}
/**
* Tests the alteration of a column datatype change from smallint to varchar.
*/
public void testColumnTypeSmallintToVarchar()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='SMALLINT'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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), 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(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"2", beans.get(0), "avalue");
}
/**
* Tests the alteration of a pk column datatype change from integer to double.
*/
public void testPKColumnTypeIntegerToDouble()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='DOUBLE' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Double(2.0) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Double(2.0), beans.get(0), "pk");
}
/**
* Tests the alteration of a pk column datatype change from integer to varchar.
*/
public void testPKColumnTypeIntegerToVarchar()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='VARCHAR' size='20' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1) });
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("pk") instanceof String)
{
bean.set("pk", ((String)bean.get("pk")).trim());
}
assertEquals((Object)"1", beans.get(0), "pk");
}
/**
* Tests the change of the datatypes of PK and FK columns from integer to varchar.
*/
public void testPKAndFKColumnTypesIntegerToVarchar()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
DynaBean bean1 = (DynaBean)beans1.get(0);
DynaBean bean2 = (DynaBean)beans2.get(0);
// Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
if (bean1.get("pk") instanceof String)
{
bean1.set("pk", ((String)bean1.get("pk")).trim());
}
if (bean2.get("fk") instanceof String)
{
bean2.set("fk", ((String)bean2.get("fk")).trim());
}
assertEquals((Object)"1", bean1, "pk");
assertEquals(new Integer(1), bean2, "pk");
assertEquals((Object)"1", bean2, "fk");
}
/**
* Tests the alteration of the datatypes of columns of a PK and FK that
* will be dropped.
*/
public void testPKAndFKColumnTypesAndDropFK()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
DynaBean bean1 = (DynaBean)beans1.get(0);
DynaBean bean2 = (DynaBean)beans2.get(0);
// Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
if (bean1.get("pk") instanceof String)
{
bean1.set("pk", ((String)bean1.get("pk")).trim());
}
if (bean2.get("fk") instanceof String)
{
bean2.set("fk", ((String)bean2.get("fk")).trim());
}
assertEquals((Object)"1", bean1, "pk");
assertEquals(new Integer(1), bean2, "pk");
assertEquals((Object)"1", bean2, "fk");
}
/**
* Tests the alteration of an indexed column datatype change from integer to double.
*/
public void testIndexColumnTypeIntegerToDouble()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DOUBLE'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Double(2.0), beans.get(0), "avalue1");
assertEquals((Object)"text", beans.get(0), "avalue2");
}
/**
* Tests the alteration of an indexed column datatype change from smallint to varchar.
*/
public void testIndexColumnTypeSmallintToVarchar()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='SMALLINT'/>\n"+
" <column name='avalue2' type='DOUBLE'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='20'/>\n"+
" <column name='avalue2' type='DOUBLE'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Short((short)2), new Double(3.0) });
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("avalue1") instanceof String)
{
bean.set("avalue1", ((String)bean.get("avalue1")).trim());
}
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"2", beans.get(0), "avalue1");
assertEquals(new Double(3.0), beans.get(0), "avalue2");
}
/**
* Tests the alteration of the datatype of an indexed column where
* the index will be dropped.
*/
public void testIndexColumnTypeAndDropIndex()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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), "pk");
assertEquals(new Integer(1), beans.get(0), "avalue");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(10), beans.get(1), "avalue");
}
/**
* Tests the alteration of an indexed column datatype change from integer to double.
*/
public void testUniqueIndexColumnTypeIntegerToDouble()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DOUBLE'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Double(2.0), beans.get(0), "avalue1");
assertEquals((Object)"text", beans.get(0), "avalue2");
}
/**
* Tests the alteration of an indexed column datatype change from smallint to varchar.
*/
public void testUniqueIndexColumnTypeSmallintToVarchar()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='SMALLINT'/>\n"+
" <column name='avalue2' type='DOUBLE'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='20'/>\n"+
" <column name='avalue2' type='DOUBLE'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Short((short)2), new Double(3.0) });
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("avalue1") instanceof String)
{
bean.set("avalue1", ((String)bean.get("avalue1")).trim());
}
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"2", beans.get(0), "avalue1");
assertEquals(new Double(3.0), beans.get(0), "avalue2");
}
/**
* Tests increasng the size of a column.
*/
public void testColumnIncreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"test", beans.get(0), "avalue");
}
/**
* Tests decreasing the size of a column.
*/
public void testColumnDecreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='16' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), "12345678901234567890123456789012" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertTrue("12345678901234567890123456789012".equals(bean.get("avalue")) || "1234567890123456".equals(bean.get("avalue")));
}
/**
* Tests increasing the size of a primary key column.
*/
public void testPKColumnIncreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='CHAR' size='20' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='CHAR' size='32' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { "test" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals("test", ((String)bean.get("pk")).trim());
}
/**
* Tests decreasing the size of a column.
*/
public void testPKColumnDecreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='CHAR' size='32' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='CHAR' size='16' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { "12345678901234567890123456789012" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertTrue("12345678901234567890123456789012".equals(bean.get("pk")) || "1234567890123456".equals(bean.get("pk")));
}
/**
* Tests increasing the sizes of PK and FK columns.
*/
public void testPKAndFKColumnIncreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals((Object)"test", beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals((Object)"test", beans2.get(0), "fk");
}
/**
* Tests decreasing the sizes of PK and FK columns.
*/
public void testPKAndFKColumnDecreaseSize()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='CHAR' 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='CHAR' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='CHAR' size='16' 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='CHAR' size='16' 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 beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
DynaBean bean1 = (DynaBean)beans1.get(0);
DynaBean bean2 = (DynaBean)beans2.get(0);
assertEquals("test", ((String)bean1.get("pk")).trim());
assertEquals(new Integer(1), bean2, "pk");
assertEquals("test", ((String)bean2.get("fk")).trim());
}
/**
* Tests increasing the size of an indexed column.
*/
public void testIndexColumnIncreaseSize()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='40'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals((Object)"text", beans.get(0), "avalue2");
}
/**
* Tests decreasing the size of an indexed column.
*/
public void testIndexColumnDecreaseSize()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='32'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue1");
assertEquals((Object)"text", ((String)bean.get("avalue2")).trim());
}
/**
* Tests increasing the size of an indexed column.
*/
public void testUniqueIndexColumnIncreaseSize()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='16'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue1");
assertEquals((Object)"text", ((String)bean.get("avalue2")).trim());
}
/**
* Tests decreasing the size of an indexed column.
*/
public void testUniqueIndexColumnDecreaseSize()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='40'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals((Object)"text", beans.get(0), "avalue2");
}
/**
* Tests increasing the precision of a column.
*/
public void testColumnIncreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='NUMERIC' size='10,5' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='NUMERIC' size='16,5' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("12345.12345") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("12345.12345"), beans.get(0), "avalue");
}
/**
* Tests decreasng the precision of a column.
*/
public void testColumnDecreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='12,5' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='10,5' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("12345.12345") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("12345.12345"), beans.get(0), "avalue");
}
/**
* Tests increasing the precision of a primary key column.
*/
public void testPKColumnIncreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='DECIMAL' size='10,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='DECIMAL' size='16,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345.12345") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new BigDecimal("12345.12345"), beans.get(0), "pk");
}
/**
* Tests decreasing the precision of a primary key column.
*/
public void testPKColumnDecreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='DECIMAL' size='12,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='DECIMAL' size='10,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345.12345") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new BigDecimal("12345.12345"), beans.get(0), "pk");
}
/**
* Tests increasing the precision of PK and FK columns.
*/
public void testPKAndFKColumnIncreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='8,2' 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='NUMERIC' size='8,2' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='11,2' 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='NUMERIC' size='11,2' 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 BigDecimal("123456.12") });
insertRow("roundtrip2", new Object[] { new Integer(1), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new BigDecimal("123456.12"), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans2.get(0), "fk");
}
/**
* Tests decreasing the precision of PK and FK columns.
*/
public void testPKAndFKColumnDecreasePrecision()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='10,2' 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='NUMERIC' size='10,2' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='8,2' 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='NUMERIC' size='8,2' 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 BigDecimal("123456.12") });
insertRow("roundtrip2", new Object[] { new Integer(1), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new BigDecimal("123456.12"), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans2.get(0), "fk");
}
/**
* Tests increasing the precision of an indexed column.
*/
public void testIndexColumnIncreasePrecision()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='8,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='12,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("123456.12"), new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue1");
assertEquals(new Integer(2), beans.get(0), "avalue2");
}
/**
* Tests decreasing the precision of an indexed column.
*/
public void testIndexColumnDecreasePrecision()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='10,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='8,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("123456.12"), new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue1");
assertEquals(new Integer(2), beans.get(0), "avalue2");
}
/**
* Tests increasing the precision of an indexed column.
*/
public void testUniqueIndexColumnIncreasePrecision()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='8,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='9,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue2");
}
/**
* Tests decreasing the precision of an indexed column.
*/
public void testUniqueIndexColumnDecreasePrecision()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='9,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='8,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue2");
}
/**
* Tests increasing the scale of a column.
*/
public void testColumnIncreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='10,4' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='10,5' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("12345.1234") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
// Some DBs return the BigDecimal with the five digits scale, some don't
assertTrue(bean.get("avalue").equals(new BigDecimal("12345.1234")) ||
bean.get("avalue").equals(new BigDecimal("12345.12340")));
}
/**
* Tests decreasing the scale of a column.
*/
public void testColumnDecreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='10,5' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='DECIMAL' size='10,3' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("12345.123") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("12345.123"), beans.get(0), "avalue");
}
/**
* Tests increasing the scale of a primary key column.
*/
public void testPKColumnIncreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,3' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345.123") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
// Some DBs return the BigDecimal with the three digits scale, some don't
assertTrue(bean.get("pk").equals(new BigDecimal("12345.123")) ||
bean.get("pk").equals(new BigDecimal("12345.12300")));
}
/**
* Tests decreasing the scale of a primary key column.
*/
public void testPKColumnDecreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,5' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,3' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345.123") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new BigDecimal("12345.123"), beans.get(0), "pk");
}
/**
* Tests increasing the scale of PK and FK columns.
*/
public void testPKAndFKColumnIncreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DECIMAL' size='11,2' 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='DECIMAL' size='11,2' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DECIMAL' size='11,5' 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='DECIMAL' size='11,5' 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 BigDecimal("123456.12") });
insertRow("roundtrip2", new Object[] { new Integer(1), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
DynaBean bean1 = (DynaBean)beans1.get(0);
DynaBean bean2 = (DynaBean)beans2.get(0);
// Some DBs return the BigDecimal with the three digits scale, some don't
assertTrue(bean1.get("pk").equals(new BigDecimal("123456.12")) ||
bean1.get("pk").equals(new BigDecimal("123456.12000")));
assertEquals(new Integer(1), beans2.get(0), "pk");
assertTrue(bean2.get("fk").equals(new BigDecimal("123456.12")) ||
bean2.get("fk").equals(new BigDecimal("123456.12000")));
}
/**
* Tests decreasing the scale of PK and FK columns.
*/
public void testPKAndFKColumnDecreaseScale()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='11,5' 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='NUMERIC' size='11,5' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='11,2' 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='NUMERIC' size='11,2' 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 BigDecimal("123456.12") });
insertRow("roundtrip2", new Object[] { new Integer(1), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new BigDecimal("123456.12"), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans2.get(0), "fk");
}
/**
* Tests increasing the scale of an indexed column.
*/
public void testIndexColumnIncreaseScale()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='NUMERIC' size='11,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='NUMERIC' size='11,5'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("123456.12"), new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue2");
assertTrue(new BigDecimal("123456.12").equals(bean.get("avalue1")) || new BigDecimal("123456.12000").equals(bean.get("avalue1")));
}
/**
* Tests decreasing the scale of an indexed column.
*/
public void testIndexColumnDecreaseScale()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='11,5'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='DECIMAL' size='11,2'/>\n"+
" <column name='avalue2' type='INTEGER'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("123456.12"), new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue1");
assertEquals(new Integer(2), beans.get(0), "avalue2");
}
/**
* Tests increasing the scale of an indexed column.
*/
public void testUniqueIndexColumnIncreaseScale()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='DECIMAL' size='11,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='DECIMAL' size='11,5'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue1");
assertTrue(new BigDecimal("123456.12").equals(bean.get("avalue2")) || new BigDecimal("123456.12000").equals(bean.get("avalue2")));
}
/**
* Tests decreasing the scale of an indexed column.
*/
public void testUniqueIndexColumnDecreaseScale()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='11,5'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='11,2'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), new BigDecimal("123456.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(new BigDecimal("123456.12"), beans.get(0), "avalue2");
}
/**
* Tests making a column required.
*/
public void testColumnMakeRequired()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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), "test" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"test", beans.get(0), "avalue");
}
/**
* Tests making a column no longer required.
*/
public void testColumnUnmakeRequired()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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>";
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(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue");
}
/**
* Tests making a primary key column required.
*/
public void testPKColumnMakeRequired()
{
if (getPlatformInfo().isPrimaryKeyColumnAutomaticallyRequired() ||
getPlatformInfo().isPrimaryKeyColumnsHaveToBeRequired())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,2' primaryKey='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,2' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345678.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new BigDecimal("12345678.12"), beans.get(0), "pk");
}
/**
* Tests making a primary key column no longer required.
*/
public void testPKColumnUnmakeRequired()
{
if (getPlatformInfo().isPrimaryKeyColumnAutomaticallyRequired() ||
getPlatformInfo().isPrimaryKeyColumnsHaveToBeRequired())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,2' primaryKey='true' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='10,2' primaryKey='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new BigDecimal("12345678.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new BigDecimal("12345678.12"), beans.get(0), "pk");
}
/**
* Tests making a FK column required.
*/
public void testFKColumnMakeRequired()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE' required='true'/>\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 Double(2.0) });
insertRow("roundtrip2", new Object[] { new Integer(1), new Double(2.0) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Double(2.0), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Double(2.0), beans2.get(0), "fk");
}
/**
* Tests making a FK column no longer required.
*/
public void testFKColumnUnmakeRequired()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE' required='true'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE'/>\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 Double(2.0) });
insertRow("roundtrip2", new Object[] { new Integer(1), new Double(2.0) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Double(2.0), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Double(2.0), beans2.get(0), "fk");
}
/**
* Tests making PK and FK columns required.
*/
public void testPKAndFKColumnMakeRequired()
{
if (getPlatformInfo().isPrimaryKeyColumnAutomaticallyRequired() ||
getPlatformInfo().isPrimaryKeyColumnsHaveToBeRequired())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='CHAR' size='10' primaryKey='true'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='CHAR' size='10'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='CHAR' size='10' 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='CHAR' size='10' required='true'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip1", new Object[] { "1234567890" });
insertRow("roundtrip2", new Object[] { new Integer(1), "1234567890" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals((Object)"1234567890", beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals((Object)"1234567890", beans2.get(0), "fk");
}
/**
* Tests making PK and FK columns no longer required.
*/
public void testPKAndFKColumnUnmakeRequired()
{
if (getPlatformInfo().isPrimaryKeyColumnAutomaticallyRequired() ||
getPlatformInfo().isPrimaryKeyColumnsHaveToBeRequired())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE' required='true'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' primaryKey='true'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='DOUBLE'/>\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 Double(2.0) });
insertRow("roundtrip2", new Object[] { new Integer(1), new Double(2.0) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Double(2.0), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Double(2.0), beans2.get(0), "fk");
}
/**
* Tests making an indexed column required.
*/
public void testIndexColumnMakeRequired()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='TIMESTAMP' required='true'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// some databases (such as MySql) don't store micro-/nanoseconds
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
}
/**
* Tests making an indexed column no longer required.
*/
public void testIndexColumnUnmakeRequired()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='SMALLINT' required='true'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='SMALLINT'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// some databases (such as MySql) don't store micro-/nanoseconds
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
}
/**
* Tests making an indexed column required.
*/
public void testUniqueIndexColumnMakeRequired()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='16'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='20' required='true'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue1");
assertEquals((Object)"text", ((String)bean.get("avalue2")).trim());
}
/**
* Tests making an indexed column no longer required.
*/
public void testUniqueIndexColumnUnmakeRequired()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER' required='true'/>\n"+
" <column name='avalue2' type='CHAR' size='16'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='CHAR' size='20'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
assertEquals(new Integer(1), bean, "pk");
assertEquals(new Integer(2), bean, "avalue1");
assertEquals((Object)"text", ((String)bean.get("avalue2")).trim());
}
/**
* Tests making a column auto increment.
*/
public void testColumnMakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue' type='INTEGER'/>\n") +
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue' type='INTEGER' autoIncrement='true'/>\n") +
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("0") : new Integer(0);
insertRow("roundtrip", new Object[] { new Integer(1), value });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(value, beans.get(0), "avalue");
}
/**
* Tests making a column no longer auto increment.
*/
public void testColumnUnmakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue' type='INTEGER' autoIncrement='true'/>\n") +
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue' type='INTEGER'/>\n") +
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(value, beans.get(0), "avalue");
}
/**
* Tests making a primary column auto increment.
*/
public void testPKColumnMakeAutoIncrement()
{
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n") +
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true' autoIncrement='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true' autoIncrement='true'/>\n") +
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("5") : new Integer(5);
insertRow("roundtrip", new Object[] { value });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(value, beans.get(0), "pk");
}
/**
* Tests making a primary column no longer auto increment.
*/
public void testPKColumnUnmakeAutoIncrement()
{
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true' autoIncrement='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true' autoIncrement='true'/>\n") +
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n") +
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { null, new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
assertEquals(value, beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue");
}
/**
* Tests making a FK column auto increment.
*/
public void testFKColumnMakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\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"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0'/>\n"
: " <column name='fk' type='INTEGER'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\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"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='fk' type='INTEGER' autoIncrement='true'/>\n") +
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("0") : new Integer(0);
insertRow("roundtrip1", new Object[] { value });
insertRow("roundtrip2", new Object[] { new Integer(1), value });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(value, beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(value, beans2.get(0), "fk");
}
/**
* Tests making a FK column no longer auto increment.
*/
public void testFKColumnnUnmakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\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"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='fk' type='INTEGER' autoIncrement='true'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\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"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0'/>\n"
: " <column name='fk' type='INTEGER'/>\n") +
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
insertRow("roundtrip1", new Object[] { value });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(value, beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(value, beans2.get(0), "fk");
}
/**
* Tests making PK and FK columns auto increment.
*/
public void testPKAndFKColumnMakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\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"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0'/>\n"
: " <column name='fk' type='INTEGER'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true' autoIncrement='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true' autoIncrement='true'/>\n") +
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='fk' type='INTEGER' autoIncrement='true'/>\n") +
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("0") : new Integer(0);
insertRow("roundtrip1", new Object[] { value });
insertRow("roundtrip2", new Object[] { new Integer(1), value });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(value, beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(value, beans2.get(0), "fk");
}
/**
* Tests making PK and FK columns no longer auto increment.
*/
public void testPKAndFKColumnUnmakeAutoIncrement()
{
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true' autoIncrement='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true' autoIncrement='true'/>\n") +
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='fk' type='INTEGER' autoIncrement='true'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
(isSybase ?
" <column name='pk' type='NUMERIC' size='12,0' primaryKey='true' required='true'/>\n"
: " <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n") +
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='fk' type='NUMERIC' size='12,0'/>\n"
: " <column name='fk' type='INTEGER'/>\n") +
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip1", new Object[] { null, new Integer(2) });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(value, beans1.get(0), "pk");
assertEquals(new Integer(2), beans1.get(0), "avalue");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(value, beans2.get(0), "fk");
}
/**
* Tests making an indexed column auto increment.
*/
public void testIndexColumnMakeAutoIncrement()
{
if (!getPlatformInfo().isIndicesSupported() ||
!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue1' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue1' type='INTEGER'/>\n") +
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue1' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue1' type='INTEGER' autoIncrement='true'/>\n") +
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("0") : new Integer(0);
Timestamp time = new Timestamp(new Date().getTime());
// to avoid problems with the database's time resolution
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), value, time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(value, beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
}
/**
* Tests making an indexed column no longer auto increment.
*/
public void testIndexColumnUnmakeAutoIncrement()
{
if (!getPlatformInfo().isIndicesSupported() ||
!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16'/>\n"+
(isSybase ?
" <column name='avalue2' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue2' type='INTEGER' autoIncrement='true'/>\n") +
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16'/>\n"+
(isSybase ?
" <column name='avalue2' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue2' type='INTEGER'/>\n") +
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), "test" });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"test", beans.get(0), "avalue1");
assertEquals(value, beans.get(0), "avalue2");
}
/**
* Tests making an indexed column auto increment.
*/
public void testUniqueIndexColumnMakeAutoIncrement()
{
if (!getPlatformInfo().isIndicesSupported() ||
!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16'/>\n"+
(isSybase ?
" <column name='avalue2' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue2' type='INTEGER'/>\n") +
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16'/>\n"+
(isSybase ?
" <column name='avalue2' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue2' type='INTEGER' autoIncrement='true'/>\n") +
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Object value = isSybase ? (Object)new BigDecimal("0") : new Integer(0);
insertRow("roundtrip", new Object[] { new Integer(1), "test", value });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"test", beans.get(0), "avalue1");
assertEquals(value, beans.get(0), "avalue2");
}
/**
* Tests making an indexed column no longer auto increment.
*/
public void testUniqeIndexColumnUnmakeAutoIncrement()
{
if (!getPlatformInfo().isIndicesSupported() ||
!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported())
{
return;
}
boolean isSybase = SybasePlatform.DATABASENAME.equals(getPlatform().getName());
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue1' type='NUMERIC' size='12,0' autoIncrement='true'/>\n"
: " <column name='avalue1' type='INTEGER' autoIncrement='true'/>\n") +
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
(isSybase ?
" <column name='avalue1' type='NUMERIC' size='12,0'/>\n"
: " <column name='avalue1' type='INTEGER'/>\n") +
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// to avoid problems with the database's time resolution
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), null, time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
Object value = isSybase ? (Object)new BigDecimal("1") : new Integer(1);
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(value, beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
}
/**
* Tests adding a default value to a column.
*/
public void testColumnAddDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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(1.0) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Double(1.0), beans.get(0), "avalue");
}
/**
* Tests changing the default value of a column.
*/
public void testColumnChangeDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue");
}
/**
* Tests removing the default value of a column.
*/
public void testColumnRemoveDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"test", beans.get(0), "avalue");
}
/**
* Tests adding a default value to a primary key column.
*/
public void testPKColumnAddDefault() throws ParseException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='TIMESTAMP' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='TIMESTAMP' primaryKey='true' required='true' default='2000-01-01 00:00:00'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// some databases (such as MySql) don't store micro-/nanoseconds
time.setNanos(0);
insertRow("roundtrip", new Object[] { time, new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { null, new Integer(2) });
List beans = getRows("roundtrip", "avalue");
Timestamp defaultTime = Timestamp.valueOf("2000-01-01 00:00:00");
assertEquals(time, beans.get(0), "pk");
assertEquals(new Integer(1), beans.get(0), "avalue");
assertEquals(defaultTime, beans.get(1), "pk");
assertEquals(new Integer(2), beans.get(1), "avalue");
}
/**
* Tests changing the default value of a primary key column.
*/
public void testPKColumnChangeDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='VARCHAR' size='20' primaryKey='true' required='true' default='old'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='VARCHAR' size='20' primaryKey='true' required='true' default='new'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { null, new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { null, new Integer(2) });
List beans = getRows("roundtrip", "avalue");
assertEquals((Object)"old", beans.get(0), "pk");
assertEquals(new Integer(1), beans.get(0), "avalue");
assertEquals((Object)"new", beans.get(1), "pk");
assertEquals(new Integer(2), beans.get(1), "avalue");
}
/**
* Tests removing the default value of a primary key column.
*/
public void testPKColumnRemoveDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='12,2' primaryKey='true' required='true' default='2'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='NUMERIC' size='12,2' primaryKey='true' required='true' default='2.20'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { null, new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
DynaBean bean = (DynaBean)beans.get(0);
// Some DBs return the BigDecimal with the two digits scale, some don't
assertTrue(bean.get("pk").equals(new BigDecimal("2")) || bean.get("pk").equals(new BigDecimal("2.00")));
assertEquals(new Integer(1), bean, "avalue");
}
/**
* Tests adding a default value to a FK column.
*/
public void testFKColumnAddDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='12' 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='12'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='12' 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='12' default='text'/>\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"));
insertRow("roundtrip1", new Object[] { "text" });
insertRow("roundtrip2", new Object[] { new Integer(2) });
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals((Object)"test", beans1.get(0), "pk");
assertEquals((Object)"text", beans1.get(1), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals((Object)"test", beans2.get(0), "fk");
assertEquals(new Integer(2), beans2.get(1), "pk");
assertEquals((Object)"text", beans2.get(1), "fk");
}
/**
* Tests changing the default value of a FK column.
*/
public void testFKColumnChangeDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE' default='2.0'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='DOUBLE' 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='DOUBLE' default='3.0'/>\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 Double(2.0) });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip1", new Object[] { new Double(3.0) });
insertRow("roundtrip2", new Object[] { new Integer(2) });
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Double(2.0), beans1.get(0), "pk");
assertEquals(new Double(3.0), beans1.get(1), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Double(2.0), beans2.get(0), "fk");
assertEquals(new Integer(2), beans2.get(1), "pk");
assertEquals(new Double(3.0), beans2.get(1), "fk");
}
/**
* Tests removing the default value of a FK column.
*/
public void testFKColumnRemoveDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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' default='2'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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'/>\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(2) });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Integer(2), beans1.get(0), "pk");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Integer(2), beans2.get(0), "fk");
}
/**
* Tests adding default values to PK and FK columns.
*/
public void testPKAndFKColumnAddDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='12' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='NUMERIC' size='12'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='NUMERIC' size='12' primaryKey='true' required='true' default='1'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='NUMERIC' size='12' default='1'/>\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 BigDecimal("0"), new Integer(1) });
insertRow("roundtrip2", new Object[] { new Integer(1), new BigDecimal("0") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip1", new Object[] { null, new Integer(2) });
insertRow("roundtrip2", new Object[] { new Integer(2) });
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new BigDecimal("0"), beans1.get(0), "pk");
assertEquals(new Integer(1), beans1.get(0), "avalue");
assertEquals(new BigDecimal("1"), beans1.get(1), "pk");
assertEquals(new Integer(2), beans1.get(1), "avalue");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new BigDecimal("0"), beans2.get(0), "fk");
assertEquals(new Integer(2), beans2.get(1), "pk");
assertEquals(new BigDecimal("1"), beans2.get(1), "fk");
}
/**
* Tests changing the default values of PK and FK columns.
*/
public void testPKAndFKColumnChangeDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true' default='2'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='INTEGER' default='2'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true' default='3'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='INTEGER' default='3'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip1", new Object[] { null, new Integer(1) });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip1", new Object[] { null, new Integer(2) });
insertRow("roundtrip2", new Object[] { new Integer(2) });
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals(new Integer(2), beans1.get(0), "pk");
assertEquals(new Integer(1), beans1.get(0), "avalue");
assertEquals(new Integer(3), beans1.get(1), "pk");
assertEquals(new Integer(2), beans1.get(1), "avalue");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals(new Integer(2), beans2.get(0), "fk");
assertEquals(new Integer(2), beans2.get(1), "pk");
assertEquals(new Integer(3), beans2.get(1), "fk");
}
/**
* Tests removing the default values of PK and FK columns.
*/
public void testPKAndFKColumnRemoveDefault()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='16' primaryKey='true' required='true' default='text'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='VARCHAR' size='16' default='text'/>\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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='16' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='fk' type='VARCHAR' size='16'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='fk' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip1", new Object[] { null, new Integer(1) });
insertRow("roundtrip2", new Object[] { new Integer(1) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans1 = getRows("roundtrip1");
List beans2 = getRows("roundtrip2");
assertEquals((Object)"text", beans1.get(0), "pk");
assertEquals(new Integer(1), beans1.get(0), "avalue");
assertEquals(new Integer(1), beans2.get(0), "pk");
assertEquals((Object)"text", beans2.get(0), "fk");
}
/**
* Tests adding a default value to an indexed column.
*/
public void testIndexColumnAddDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER' default='3'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// some databases (such as MySql) don't store micro-/nanoseconds
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), null, time });
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(3), beans.get(1), "avalue1");
assertEquals(time, beans.get(1), "avalue2");
}
/**
* Tests changing the default value of an indexed column.
*/
public void testIndexColumnChangeDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12' default='3'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12' default='4'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), new Integer(3) });
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(new BigDecimal("3"), beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(3), beans.get(1), "avalue1");
assertEquals(new BigDecimal("4"), beans.get(1), "avalue2");
}
/**
* Tests removing the default value of an indexed column.
*/
public void testIndexColumnRemoveDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16' default='text'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='VARCHAR' size='16'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12'/>\n"+
" <index name='testindex'>\n"+
" <index-column name='avalue1'/>\n"+
" <index-column name='avalue2'/>\n"+
" </index>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), null, new BigDecimal("3") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), "test", new BigDecimal("4") });
List beans = getRows("roundtrip", "pk");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals((Object)"text", beans.get(0), "avalue1");
assertEquals(new BigDecimal("3"), beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals((Object)"test", beans.get(1), "avalue1");
assertEquals(new BigDecimal("4"), beans.get(1), "avalue2");
}
/**
* Tests adding a default value to an indexed column.
*/
public void testUniqueIndexColumnAddDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='TIMESTAMP'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='TIMESTAMP' default='2000-01-01 00:00:00'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
Timestamp time = new Timestamp(new Date().getTime());
// some databases (such as MySql) don't store micro-/nanoseconds
time.setNanos(0);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), time });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), new Integer(3) });
List beans = getRows("roundtrip");
Timestamp defaultTime = Timestamp.valueOf("2000-01-01 00:00:00");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(2), beans.get(0), "avalue1");
assertEquals(time, beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(3), beans.get(1), "avalue1");
assertEquals(defaultTime, beans.get(1), "avalue2");
}
/**
* Tests changing the default value of an indexed column.
*/
public void testUniqueIndexColumnChangeDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER' default='3'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER' default='4'/>\n"+
" <column name='avalue2' type='NUMERIC' size='12'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), null, new BigDecimal("2") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), null, new BigDecimal("3") });
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(3), beans.get(0), "avalue1");
assertEquals(new BigDecimal("2"), beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(4), beans.get(1), "avalue1");
assertEquals(new BigDecimal("3"), beans.get(1), "avalue2");
}
/**
* Tests removing the default value of an indexed column.
*/
public void testUniqueIndexColumnRemoveDefault()
{
if (!getPlatformInfo().isIndicesSupported())
{
return;
}
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='16' default='text'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue1' type='INTEGER'/>\n"+
" <column name='avalue2' type='VARCHAR' size='16'/>\n"+
" <unique name='testindex'>\n"+
" <unique-column name='avalue1'/>\n"+
" <unique-column name='avalue2'/>\n"+
" </unique>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(3) });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
insertRow("roundtrip", new Object[] { new Integer(2), new Integer(4), "test" });
List beans = getRows("roundtrip");
assertEquals(new Integer(1), beans.get(0), "pk");
assertEquals(new Integer(3), beans.get(0), "avalue1");
assertEquals((Object)"text", beans.get(0), "avalue2");
assertEquals(new Integer(2), beans.get(1), "pk");
assertEquals(new Integer(4), beans.get(1), "avalue1");
assertEquals((Object)"test", beans.get(1), "avalue2");
}
/**
* Tests the alteration of a column's datatype and size.
*/
public void testChangeDatatypeAndSize1()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' 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 testChangeDatatypeAndSize2()
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='NUMERIC' size='10,2' required='true'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='8' required='true'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal("12345678.12") });
alterDatabase(model2Xml);
assertEquals(getAdjustedModel(),
readModelFromDatabase("roundtriptest"));
List beans = getRows("roundtrip");
assertEquals((Object)"12345678", beans.get(0), "avalue");
}
}