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