Hi Guido
On 4/12/07, Guido Schreuder <[EMAIL PROTECTED]> wrote:
I am looking for a way to prevent tables from being dropped when
executing Platform.alterTables(Database, boolean)
The reason for this is that my model is iteratively constructed without
prior knowledge of the final model. Currently this will lead to
"unknown" tables being dropped, causing data to be lost.
An option like would be welcome, but maybe being able to somehow
decorate the SqlBuilder and/or ModelComparator might yield a more
flexible solution. Although the latter would probably not be trivial.
Unfortunately, you can't at the moment, at least not out of the box
(but a feature request in JIRA would be appreciated).
However, you might be able to achieve what you want by using a
modified version of e.g. the
PlatformImplBase#getAlterTablesSql(Connection, String, String,
String[], Database, CreationParameters) method. More precisely, if you
do the following:
String sql = null;
Database currentModel = readModelFromDatabase(connection,
desiredModel.getName(), catalog, schema, tableTypes);
// Filter the read model here so that only relevant tables are in the
currentModel
try
{
StringWriter buffer = new StringWriter();
getSqlBuilder().setWriter(buffer);
getSqlBuilder().alterDatabase(currentModel, desiredModel, params);
sql = buffer.toString();
}
catch (IOException ex)
{
// won't happen because we're using a string writer
}
return sql;
The alterTables is nothing more than a wrapper around getAlterTablesSql:
Connection connection = borrowConnection();
try
{
return getAlterTablesSql(...);
}
finally
{
returnConnection(connection);
}
hope that helps,
Tom