e = (MetadataException)e.getCause();
assertEquals("err.meta.sql.statementAdapter", e.getErrorCode());
}
// setup for second upgrade version
SupportAdapterStep adapterStep = new SupportAdapterStep();
CreateTableStep createTableStep = new CreateTableStep(); // step has match for current adapter
Table table = new Table(schema);
SQLScript tableScript = new SQLScript();
SQLStatement tableStmtInvalid = new SQLStatement();
SQLStatement tableStmtValid = new SQLStatement();
tableStmtInvalid.addAdapter(invalid.getName(), ds.getType());
tableStmtInvalid.setSQL("SQLStatement Table SQL Invalid");
tableStmtValid.addAdapter(ds.getAdapter().getName(), ds.getType());
tableStmtValid.setSQL("SQLStatement Table SQL Valid");
tableScript.addStatement(tableStmtValid);
tableScript.addStatement(tableStmtInvalid);
tableScript.addStatement(stepStmt);
table.setName("Table");
table.setType(Table.VIEW);
table.setViewScript(tableScript);
schema.addTable(table);
createTableStep.setName(table.getName());
createTableStep.setType(table.getType());
createTableStep.setViewScript(tableScript);
adapterStep.setAdapter(invalid);
// incompatible step -> compatible step
metadata.setVersion("2-step");
upgradeVersion = new RelationalSchemaUpgrade(metadata.getVersion());
upgradeVersion.addStep(adapterStep);
upgradeVersion.addStep(createTableStep);
upgradeVersion.setDataSource(ds);
upgrade.addVersion(upgradeVersion);
try
{
upgrade.validate(null, null); // must fail since an incompatible step "1-step" exists
fail(); // exception expected
}
catch (MetadataException e)
{
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertEquals("err.meta.sql.statementAdapter", e.getErrorCode());
}
try
{
manager.upgrade(schema, null); // must fail since an incompatible step "1-step" exists
fail(); // exception expected
}
catch (MetadataException e)
{
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertEquals("err.meta.sql.statementAdapter", e.getErrorCode());
}
buf.getBuffer().setLength(0);
ds.setAdapter(invalid);
manager.upgrade(schema, "2-step"); // validation of invalid adapter should not be prevented
AssertUtil.assertContained(tableStmtInvalid.getSQL(), buf.toString());
ds.setAdapter(valid);
try
{
manager.upgrade(schema, "2-step"); // must fail since validating current adapter from start
fail(); // exception expected
}
catch (MetadataException e)
{
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertTrue(e.getCause() instanceof MetadataException);
e = (MetadataException)e.getCause();
assertEquals("err.meta.sql.statementAdapter", e.getErrorCode());
}
adapterStep.setAdapter(ds.getAdapter());
upgrade.validate(null, null); // must pass since adapter validation from "2-step"
buf.getBuffer().setLength(0);
manager.upgrade(schema, null); // must upgrade starting from "2-step"
AssertUtil.assertContained(tableStmtValid.getSQL(), buf.toString());