You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2006/04/17 01:47:20 UTC

svn commit: r394581 [2/2] - in /db/ddlutils/trunk/src: check/ java/org/apache/ddlutils/alteration/ java/org/apache/ddlutils/model/ test/org/apache/ddlutils/alteration/

Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestModelComparator.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestModelComparator.java?rev=394581&view=auto
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestModelComparator.java (added)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/TestModelComparator.java Sun Apr 16 16:47:18 2006
@@ -0,0 +1,1219 @@
+package org.apache.ddlutils.alteration;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * Licensed 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.io.StringReader;
+import java.sql.Types;
+import java.util.List;
+
+import org.apache.ddlutils.io.DatabaseIO;
+import org.apache.ddlutils.model.Database;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the model comparison.
+ * 
+ * @version $Revision: $
+ */
+public class TestModelComparator extends TestCase
+{
+    /**
+     * Parses the database defined in the given XML definition.
+     * 
+     * @param dbDef
+     *            The database XML definition
+     * @return The database model
+     */
+    private Database parseDatabaseFromString(String dbDef)
+    {
+        DatabaseIO dbIO = new DatabaseIO();
+        
+        dbIO.setUseInternalDtd(true);
+        dbIO.setValidateXml(false);
+        return dbIO.read(new StringReader(dbDef));
+    }
+
+    /**
+     * Tests the addition of a table.
+     */
+    public void testAddTable()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TABLEB'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        AddTableChange change = (AddTableChange)changes.get(0);
+
+        assertEquals("TABLEB",
+                     change.getNewTable().getName());
+    }
+
+    /**
+     * Tests the removal of a table.
+     */
+    public void testRemoveTable()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEB'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        RemoveTableChange change = (RemoveTableChange)changes.get(0);
+
+        assertEquals("TableA",
+                     change.getTable().getName());
+    }
+
+    /**
+     * Tests the addition and removal of a table.
+     */
+    public void testAddAndRemoveTable()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        AddTableChange    change1 = (AddTableChange)changes.get(0);
+        RemoveTableChange change2 = (RemoveTableChange)changes.get(1);
+
+        assertEquals("TABLEA",
+                     change1.getNewTable().getName());
+        assertEquals("TableA",
+                     change2.getTable().getName());
+    }
+
+    /**
+     * Tests the addition of a foreign key.
+     */
+    public void testAddForeignKey()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COLFK' type='INTEGER'/>\n" +
+            "    <foreign-key name='TESTFK' foreignTable='TABLEB'>\n" +
+            "      <reference local='COLFK' foreign='COLPK'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "  <table name='TABLEB'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        AddForeignKeyChange change = (AddForeignKeyChange)changes.get(0);
+
+        assertEquals("TESTFK",
+                     change.getNewForeignKey().getName());
+    }
+
+    /**
+     * Tests the removal of a foreign key.
+     */
+    public void testRemoveForeignKey()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableA'>\n" +
+            "      <reference local='ColFK' foreign='ColPK'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TABLEB'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COLFK' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        RemoveForeignKeyChange change = (RemoveForeignKeyChange)changes.get(0);
+
+        assertEquals("TestFK",
+                     change.getForeignKey().getName());
+    }
+
+    /**
+     * Tests the addition and removal of a foreign key.
+     */
+    public void testAddAndRemoveForeignKey1()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableA'>\n" +
+            "      <reference local='ColFK' foreign='ColPK'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK' type='INTEGER'/>\n" +
+            "    <foreign-key name='TESTFK' foreignTable='TableA'>\n" +
+            "      <reference local='ColFK' foreign='ColPK'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveForeignKeyChange change1 = (RemoveForeignKeyChange)changes.get(0);
+        AddForeignKeyChange    change2 = (AddForeignKeyChange)changes.get(1);
+
+        assertEquals("TestFK",
+                     change1.getForeignKey().getName());
+        assertEquals("TESTFK",
+                     change2.getNewForeignKey().getName());
+    }
+
+    /**
+     * Tests the addition and removal of a foreign key because of a change of the references.
+     */
+    public void testAddAndRemoveForeignKey2()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK1' type='INTEGER'/>\n" +
+            "    <column name='ColFK2' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableB'>\n" +
+            "      <reference local='ColFK1' foreign='ColPK1'/>\n" +
+            "      <reference local='ColFK2' foreign='ColPK2'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK1' type='INTEGER'/>\n" +
+            "    <column name='ColFK2' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableB'>\n" +
+            "      <reference local='ColFK1' foreign='ColPK2'/>\n" +
+            "      <reference local='ColFK2' foreign='ColPK1'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveForeignKeyChange change1 = (RemoveForeignKeyChange)changes.get(0);
+        AddForeignKeyChange    change2 = (AddForeignKeyChange)changes.get(1);
+
+        assertEquals("TestFK",
+                     change1.getForeignKey().getName());
+        assertEquals("TestFK",
+                     change2.getNewForeignKey().getName());
+    }
+
+
+    /**
+     * Tests that the order of the references in a foreign key is not important.
+     */
+    public void testForeignKeyReferenceOrder()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK1' type='INTEGER'/>\n" +
+            "    <column name='ColFK2' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableB'>\n" +
+            "      <reference local='ColFK1' foreign='ColPK1'/>\n" +
+            "      <reference local='ColFK2' foreign='ColPK2'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColFK1' type='INTEGER'/>\n" +
+            "    <column name='ColFK2' type='INTEGER'/>\n" +
+            "    <foreign-key name='TestFK' foreignTable='TableB'>\n" +
+            "      <reference local='ColFK2' foreign='ColPK2'/>\n" +
+            "      <reference local='ColFK1' foreign='ColPK1'/>\n" +
+            "    </foreign-key>\n" +
+            "  </table>\n" +
+            "  <table name='TableB'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertTrue(changes.isEmpty());
+    }
+
+    /**
+     * Tests the addition of an index.
+     */
+    public void testAddIndex()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='INTEGER'/>\n" +
+            "    <index name='TESTINDEX'>\n" +
+            "      <index-column name='COL'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        AddIndexChange change = (AddIndexChange)changes.get(0);
+
+        assertEquals("TESTINDEX",
+                     change.getNewIndex().getName());
+    }
+
+    /**
+     * Tests the removal of an index.
+     */
+    public void testRemoveIndex()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "    <unique name='TestIndex'>\n" +
+            "      <unique-column name='Col'/>\n" +
+            "    </unique>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        RemoveIndexChange change = (RemoveIndexChange)changes.get(0);
+
+        assertEquals("TestIndex",
+                     change.getIndex().getName());
+    }
+
+    /**
+     * Tests the addition and removal of an index because of the change of type of the index.
+     */
+    public void testAddAndRemoveIndex()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "    <unique name='TestIndex'>\n" +
+            "      <unique-column name='Col'/>\n" +
+            "    </unique>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveIndexChange change1 = (RemoveIndexChange)changes.get(0);
+        AddIndexChange    change2 = (AddIndexChange)changes.get(1);
+
+        assertEquals("TestIndex",
+                     change1.getIndex().getName());
+        assertEquals("TestIndex",
+                     change2.getNewIndex().getName());
+    }
+
+    /**
+     * Tests the addition and removal of an index because of the change of column order.
+     */
+    public void testChangeIndexColumnOrder()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "      <index-column name='Col2'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col2'/>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveIndexChange change1 = (RemoveIndexChange)changes.get(0);
+        AddIndexChange    change2 = (AddIndexChange)changes.get(1);
+
+        assertEquals("TestIndex",
+                     change1.getIndex().getName());
+        assertEquals("TestIndex",
+                     change2.getNewIndex().getName());
+    }
+
+    /**
+     * Tests the addition and removal of an index because of the addition of an index column.
+     */
+    public void testAddIndexColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "      <index-column name='Col2'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveIndexChange change1 = (RemoveIndexChange)changes.get(0);
+        AddIndexChange    change2 = (AddIndexChange)changes.get(1);
+
+        assertEquals("TestIndex",
+                     change1.getIndex().getName());
+        assertEquals("TestIndex",
+                     change2.getNewIndex().getName());
+    }
+
+    /**
+     * Tests the addition and removal of an index because of the removal of an index column.
+     */
+    public void testRemoveIndexColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "      <index-column name='Col2'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='INTEGER'/>\n" +
+            "    <column name='Col2' type='DOUBLE'/>\n" +
+            "    <index name='TestIndex'>\n" +
+            "      <index-column name='Col1'/>\n" +
+            "    </index>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(2,
+                     changes.size());
+
+        RemoveIndexChange change1 = (RemoveIndexChange)changes.get(0);
+        AddIndexChange    change2 = (AddIndexChange)changes.get(1);
+
+        assertEquals("TestIndex",
+                     change1.getIndex().getName());
+        assertEquals("TestIndex",
+                     change2.getNewIndex().getName());
+    }
+
+    /**
+     * Tests the addition of a primary key.
+     */
+    public void testAddPrimaryKey()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        AddPrimaryKeyChange change = (AddPrimaryKeyChange)changes.get(0);
+
+        assertEquals(1,
+                     change.getPrimaryKeyColumns().length);
+        assertEquals("ColPK",
+                     change.getPrimaryKeyColumns()[0].getName());
+    }
+
+    /**
+     * Tests the removal of a primary key.
+     */
+    public void testRemovePrimaryKey()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        RemovePrimaryKeyChange change = (RemovePrimaryKeyChange)changes.get(0);
+
+        assertEquals(1,
+                     change.getPrimaryKeyColumns().length);
+        assertEquals("ColPK",
+                     change.getPrimaryKeyColumns()[0].getName());
+    }
+
+    /**
+     * Tests the addition of a column to the primary key.
+     */
+    public void testAddPrimaryKeyColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        PrimaryKeyChange change = (PrimaryKeyChange)changes.get(0);
+
+        assertEquals(1,
+                     change.getOldPrimaryKeyColumns().length);
+        assertEquals(2,
+                     change.getNewPrimaryKeyColumns().length);
+        assertEquals("ColPK1",
+                     change.getOldPrimaryKeyColumns()[0].getName());
+        assertEquals("ColPK1",
+                     change.getNewPrimaryKeyColumns()[0].getName());
+        assertEquals("ColPK2",
+                     change.getNewPrimaryKeyColumns()[1].getName());
+    }
+
+    /**
+     * Tests the removal of a column from the primary key.
+     */
+    public void testRemovePrimaryKeyColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK1' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK1' type='INTEGER' required='true'/>\n" +
+            "    <column name='ColPK2' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        PrimaryKeyChange change = (PrimaryKeyChange)changes.get(0);
+
+        assertEquals(2,
+                     change.getOldPrimaryKeyColumns().length);
+        assertEquals(1,
+                     change.getNewPrimaryKeyColumns().length);
+        assertEquals("ColPK1",
+                     change.getOldPrimaryKeyColumns()[0].getName());
+        assertEquals("ColPK2",
+                     change.getOldPrimaryKeyColumns()[1].getName());
+        assertEquals("ColPK2",
+                     change.getNewPrimaryKeyColumns()[0].getName());
+    }
+
+    
+    /**
+     * Tests the addition a column.
+     */
+    public void testAddColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='DOUBLE'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        AddColumnChange change = (AddColumnChange)changes.get(0);
+
+        assertEquals("Col1",
+                     change.getNewColumn().getName());
+    }
+
+    /**
+     * Tests the removal of a column.
+     */
+    public void testRemoveColumn()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col1' type='DOUBLE'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        RemoveColumnChange change = (RemoveColumnChange)changes.get(0);
+
+        assertEquals("Col1",
+                     change.getColumn().getName());
+    }
+
+    /**
+     * Tests changing the data type of a column.
+     */
+    public void testChangeColumnDataType()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='DOUBLE'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnDataTypeChange change = (ColumnDataTypeChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals(Types.INTEGER,
+                     change.getNewTypeCode());
+    }
+
+    /**
+     * Tests changing the size of a column.
+     */
+    public void testChangeColumnSize()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='VARCHAR' size='16'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='VARCHAR' size='32'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnSizeChange change = (ColumnSizeChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals(32,
+                     change.getNewSize());
+        assertEquals(0,
+                     change.getNewScale());
+    }
+
+    /**
+     * Tests changing the scale of a column.
+     */
+    public void testChangeColumnScale()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='NUMERIC' size='32,0'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='NUMERIC' size='32,5'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnSizeChange change = (ColumnSizeChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals(32,
+                     change.getNewSize());
+        assertEquals(5,
+                     change.getNewScale());
+    }
+
+    /**
+     * Tests removing the size of a column. This test shows how the comparator
+     * reacts in the common case of comparing a model read from a live database
+     * (which usually returns sizes for every column) and a model from XML.
+     * The model comparator will not filter out these changes, it is up to the
+     * platform to decide whether such a change is valid or can be ignored. 
+     */
+    public void testRemoveColumnSize()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' size='8'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnSizeChange change = (ColumnSizeChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals(0,
+                     change.getNewSize());
+        assertEquals(0,
+                     change.getNewScale());
+    }
+
+    /**
+     * Tests changing the default value of a column.
+     */
+    public void testChangeDefaultValue()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' default='1'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' default='2'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnDefaultValueChange change = (ColumnDefaultValueChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals("2",
+                     change.getNewDefaultValue());
+    }
+
+    /**
+     * Tests that shows that the same default value expressed differently does not
+     * result in a change.
+     */
+    public void testSameDefaultValueExpressedDifferently()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='DOUBLE' default='10'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='DOUBLE' default='1e+1'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertTrue(changes.isEmpty());
+    }
+
+    /**
+     * Tests adding a default value to a column.
+     */
+    public void testAddDefaultValue()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' default='0'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(true).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnDefaultValueChange change = (ColumnDefaultValueChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+        assertEquals("0",
+                     change.getNewDefaultValue());
+    }
+
+    /**
+     * Tests chainging the required-constraint of a column.
+     */
+    public void testChangeColumnRequired()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' required='false'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='INTEGER' required='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnRequiredChange change = (ColumnRequiredChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+    }
+
+    /**
+     * Tests chainging the auto-increment-constraint of a column.
+     */
+    public void testChangeColumnAutoIncrement()
+    {
+        final String MODEL1 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TableA'>\n" +
+            "    <column name='ColPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='Col' type='INTEGER' autoIncrement='true'/>\n" +
+            "  </table>\n" +
+            "</database>";
+        final String MODEL2 = 
+            "<?xml version='1.0' encoding='ISO-8859-1'?>\n" +
+            "<database name='test'>\n" +
+            "  <table name='TABLEA'>\n" +
+            "    <column name='COLPK' type='INTEGER' primaryKey='true' required='true'/>\n" +
+            "    <column name='COL' type='INTEGER' autoIncrement='false'/>\n" +
+            "  </table>\n" +
+            "</database>";
+
+        Database model1  = parseDatabaseFromString(MODEL1);
+        Database model2  = parseDatabaseFromString(MODEL2);
+        List     changes = new ModelComparator(false).compare(model1, model2);
+
+        assertEquals(1,
+                     changes.size());
+
+        ColumnAutoIncrementChange change = (ColumnAutoIncrementChange)changes.get(0);
+
+        assertEquals("Col",
+                     change.getColumn().getName());
+    }
+}

Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/package.html
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/package.html?rev=394581&view=auto
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/package.html (added)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/alteration/package.html Sun Apr 16 16:47:18 2006
@@ -0,0 +1,26 @@
+<html>
+<head>
+<!-- 
+ Copyright 1999-2005 The Apache Software Foundation.
+ 
+ Licensed 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.
+ -->
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Thomas Dudziak">
+</head>
+<body bgcolor="white">
+  <p>
+  	This package contains the tests for the alteration algorithm.
+  </p>
+</body>
+</html>