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.Date; | |
import java.util.List; | |
import junit.framework.Test; | |
/** | |
* Tests database alterations that drop columns. | |
* | |
* @version $Revision: $ | |
*/ | |
public class TestDropColumn extends RoundtripTestBase | |
{ | |
/** | |
* Parameterized test case pattern. | |
* | |
* @return The tests | |
*/ | |
public static Test suite() throws Exception | |
{ | |
return getTests(TestDropColumn.class); | |
} | |
/** | |
* Tests the removal of a column. | |
*/ | |
public void testDropColumn() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='TIMESTAMP'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), new Date(new java.util.Date().getTime()) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(1), beans.get(0), "pk"); | |
} | |
/** | |
* Tests the removal of a auto increment column. | |
*/ | |
public void testDropAutoIncrementColumn() | |
{ | |
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='INTEGER' autoIncrement='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </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"); | |
} | |
/** | |
* Tests the removal of a required column. | |
*/ | |
public void testDropRequiredColumn() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='NUMERIC' size='12,0' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), new BigDecimal(2) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(1), beans.get(0), "pk"); | |
} | |
/** | |
* Tests the removal of a column that has a default value. | |
*/ | |
public void testDropColumnWithDefault() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='DOUBLE' default='3.1'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </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"); | |
} | |
/** | |
* Tests the removal of a required column that has a default value. | |
*/ | |
public void testDropRequiredColumnWithDefault() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='CHAR' size='8' required='true' default='text'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </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"); | |
} | |
/** | |
* Tests the removal of multiple columns. | |
*/ | |
public void testDropMultipleColumns() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='CHAR' size='8' default='text'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <column name='avalue3' type='DOUBLE' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), null, new Integer(2), new Double(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), "avalue2"); | |
} | |
/** | |
* Tests the removal of multiple columns, including one with auto incremen. | |
*/ | |
public void testDropMultipleColumnsInclAutoIncrement() | |
{ | |
if (!getPlatformInfo().isNonPrimaryKeyIdentityColumnsSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='CHAR' size='8' default='text'/>\n"+ | |
" <column name='avalue2' type='DOUBLE' required='true'/>\n"+ | |
" <column name='avalue3' type='INTEGER' autoIncrement='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue2' type='DOUBLE' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), null, new Double(2), null }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(1), beans.get(0), "pk"); | |
assertEquals(new Double(2), beans.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of a primary key column. | |
*/ | |
public void testDropPKColumn() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk1' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' 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 name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk2' 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), new Integer(3) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(2), beans.get(0), "pk2"); | |
assertEquals(new Integer(3), beans.get(0), "avalue"); | |
} | |
/** | |
* Tests the removal of the single primary key column. | |
*/ | |
public void testDropSinglePKColumn() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='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(2), beans.get(0), "avalue"); | |
} | |
/** | |
* Tests the removal of multiple primary key columns. | |
*/ | |
public void testDropMultiplePKColumns() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk1' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk3' 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 name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk2' 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), new Integer(3), new Integer(4) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(2), beans.get(0), "pk2"); | |
assertEquals(new Integer(4), beans.get(0), "avalue"); | |
} | |
/** | |
* Tests the removal of all primary key columns. | |
*/ | |
public void testDropAllPKColumns() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk1' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk3' 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 name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), new Integer(3), new Integer(4) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(4), beans.get(0), "avalue"); | |
} | |
/** | |
* Tests the removal of a column from a non-unique index. | |
*/ | |
public void testDropColumnFromIndex() | |
{ | |
if (!getPlatformInfo().isIndicesSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='INTEGER'/>\n"+ | |
" <column name='avalue2' type='VARCHAR' size='32'/>\n"+ | |
" <index name='test'>\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 name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue2' type='VARCHAR' size='32'/>\n"+ | |
" <index name='test'>\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((Object)"text", beans.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of the single column from an unique index. | |
*/ | |
public void testDropSingleColumnFromIndex() | |
{ | |
if (!getPlatformInfo().isIndicesSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" <unique name='test'>\n"+ | |
" <unique-column name='avalue'/>\n"+ | |
" </unique>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </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"); | |
} | |
/** | |
* Tests the removal of a column from a non-unique index. | |
*/ | |
public void testDropMultipleColumnsFromIndex() | |
{ | |
if (!getPlatformInfo().isIndicesSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='INTEGER'/>\n"+ | |
" <column name='avalue2' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue3' type='TIMESTAMP'/>\n"+ | |
" <index name='test'>\n"+ | |
" <index-column name='avalue1'/>\n"+ | |
" <index-column name='avalue2'/>\n"+ | |
" <index-column name='avalue3'/>\n"+ | |
" </index>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue2' type='VARCHAR' size='32'/>\n"+ | |
" <index name='test'>\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((Object)"text", beans.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of all column from an unique index. | |
*/ | |
public void testDropAllColumnsFromIndex() | |
{ | |
if (!getPlatformInfo().isIndicesSupported()) | |
{ | |
return; | |
} | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='INTEGER' required='true'/>\n"+ | |
" <column name='avalue2' type='VARCHAR' size='32' required='true'/>\n"+ | |
" <column name='avalue3' type='DOUBLE' required='true'/>\n"+ | |
" <unique name='test'>\n"+ | |
" <unique-column name='avalue1'/>\n"+ | |
" <unique-column name='avalue2'/>\n"+ | |
" <unique-column name='avalue3'/>\n"+ | |
" </unique>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2), "text", new Double(2.0) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans = getRows("roundtrip"); | |
assertEquals(new Integer(1), beans.get(0), "pk"); | |
} | |
/** | |
* Tests the removal of the single local column from a foreign key. | |
*/ | |
public void testDropSingleLocalColumnFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='VARCHAR' size='32'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue' foreign='pk'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text" }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text" }); | |
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), beans2.get(0), "pk"); | |
} | |
/** | |
* Tests the removal of the single foreign column from a foreign key. | |
*/ | |
public void testDropSingleForeignColumnFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='VARCHAR' size='32'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue' foreign='pk'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue' type='VARCHAR' size='32'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text" }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals(new Integer(2), beans1.get(0), "avalue"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
assertEquals((Object)"text", beans2.get(0), "avalue"); | |
} | |
/** | |
* Tests the removal of all local columns from a foreign key. | |
*/ | |
public void testDropAllLocalColumnsFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' 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='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue1' foreign='pk1'/>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text", new Integer(2) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals((Object)"text", beans1.get(0), "pk1"); | |
assertEquals(new Integer(2), beans1.get(0), "pk2"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
} | |
/** | |
* Tests the removal of all foreign columns from a foreign key. | |
*/ | |
public void testDropAllForeignColumnsFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' 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"+ | |
" <column name='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue1' foreign='pk1'/>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2), new Integer(3) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text", new Integer(2) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals(new Integer(3), beans1.get(0), "avalue"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
assertEquals((Object)"text", beans2.get(0), "avalue1"); | |
assertEquals(new Integer(2), beans2.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of a local and foreign column from a foreign key. | |
*/ | |
public void testDropLocalAndForeignColumnFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' 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"+ | |
" <column name='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue1' foreign='pk1'/>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk2' 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"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2), new Integer(3) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text", new Integer(2) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals(new Integer(2), beans1.get(0), "pk2"); | |
assertEquals(new Integer(3), beans1.get(0), "avalue"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
assertEquals(new Integer(2), beans2.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of multiple local and foreign columns from a foreign key. | |
*/ | |
public void testDropMultipleLocalAndForeignColumnsFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk3' type='DOUBLE' 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='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <column name='avalue3' type='DOUBLE'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue1' foreign='pk1'/>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" <reference local='avalue3' foreign='pk3'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk2' 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"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2), new Double(4), new Integer(3) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text", new Integer(2), new Double(4) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals(new Integer(2), beans1.get(0), "pk2"); | |
assertEquals(new Integer(3), beans1.get(0), "avalue"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
assertEquals(new Integer(2), beans2.get(0), "avalue2"); | |
} | |
/** | |
* Tests the removal of all local and foreign columns from a foreign key. | |
*/ | |
public void testDropAllLocalAndForeignColumnsFromFK() | |
{ | |
final String model1Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='pk1' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk2' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" <column name='pk3' type='DOUBLE' 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='avalue1' type='VARCHAR' size='32'/>\n"+ | |
" <column name='avalue2' type='INTEGER'/>\n"+ | |
" <column name='avalue3' type='DOUBLE'/>\n"+ | |
" <foreign-key foreignTable='roundtrip1'>\n"+ | |
" <reference local='avalue1' foreign='pk1'/>\n"+ | |
" <reference local='avalue2' foreign='pk2'/>\n"+ | |
" <reference local='avalue3' foreign='pk3'/>\n"+ | |
" </foreign-key>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
final String model2Xml = | |
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+ | |
"<database name='roundtriptest'>\n"+ | |
" <table name='roundtrip1'>\n"+ | |
" <column name='avalue' type='INTEGER'/>\n"+ | |
" </table>\n"+ | |
" <table name='roundtrip2'>\n"+ | |
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+ | |
" </table>\n"+ | |
"</database>"; | |
createDatabase(model1Xml); | |
insertRow("roundtrip1", new Object[] { "text", new Integer(2), new Double(4), new Integer(3) }); | |
insertRow("roundtrip2", new Object[] { new Integer(1), "text", new Integer(2), new Double(4) }); | |
alterDatabase(model2Xml); | |
assertEquals(getAdjustedModel(), | |
readModelFromDatabase("roundtriptest")); | |
List beans1 = getRows("roundtrip1"); | |
List beans2 = getRows("roundtrip2"); | |
assertEquals(new Integer(3), beans1.get(0), "avalue"); | |
assertEquals(new Integer(1), beans2.get(0), "pk"); | |
} | |
} |