Hi,

Here my first post on this list :)

I noticed that when I do a database model change by doing:

        DataSource oldDataSource = testDdlUtils.getDataSource(
                "org.postgresql.Driver", "jdbc:postgresql://localhost/test1", 
"test", "test");

        DataSource newDataSource = testDdlUtils.getDataSource(
                "org.postgresql.Driver", "jdbc:postgresql://localhost/test2", 
"test", "test");
        
        Platform oldPlatform = 
PlatformFactory.createNewPlatformInstance(oldDataSource);
        Platform newPlatform = 
PlatformFactory.createNewPlatformInstance(newDataSource);

        Database newDatabaseModel = 
newPlatform.readModelFromDatabase("databaseNewModel");

        oldPlatform.alterTables(newDatabaseModel, false);        

that the sequences aren't created, but when I do a createTables (or 
getCreateTablesSql) they are. I looked into the code and saw that on creation 
in the PostgresSqlBuilder the sequences are created when a table query is 
build, but there was no code to do this when the database model was altered and 
a new table was created in this proces. So I added the following code and it 
seems to work:

    /**
     * Processes the addition of a table with auto increment columns.
     * 
     * @param currentModel The current database schema
     * @param desiredModel The desired database schema
     * @param params       The parameters used in the creation of new tables. 
Note that for existing
     *                     tables, the parameters won't be applied
     * @param change       The change object
     */
    protected void processChange(
                Database           currentModel,
                Database           desiredModel,
                CreationParameters params,
                AddTableChange     change) throws IOException
    {
        Table table = change.getNewTable();

        for (int idx = 0; idx < table.getColumnCount(); idx++)
        {
            Column column = table.getColumn(idx);

            if (column.isAutoIncrement())
            {
                createAutoIncrementSequence(table, column);
            }
        }
        super.processChange(currentModel, desiredModel, params, change);        
    }

I hope someone can look at this and see if this can be used. It should ofcourse 
also be implemented for other database types than PostgreSQL.

Regards,

Igor

Reply via email to