use of liquibase.database.DatabaseConnection in project liquibase by liquibase.
the class SybaseASADatabase method setConnection.
@Override
public void setConnection(DatabaseConnection conn) {
DatabaseConnection dbConn;
if (conn instanceof JdbcConnection) {
// If conn is a real connection (JDBC), wrap it to prevent a driver bug
// (see SysbaseASAConnection for details)
dbConn = new SybaseASAConnection(((JdbcConnection) conn).getWrappedConnection());
} else {
dbConn = conn;
}
super.setConnection(dbConn);
}
use of liquibase.database.DatabaseConnection in project liquibase by liquibase.
the class SpringLiquibase method createDatabase.
/**
* Subclasses may override this method add change some database settings such as
* default schema before returning the database object.
*
* @param c
* @return a Database implementation retrieved from the {@link DatabaseFactory}.
* @throws DatabaseException
*/
protected Database createDatabase(Connection c, ResourceAccessor resourceAccessor) throws DatabaseException {
DatabaseConnection liquibaseConnection;
if (c == null) {
log.warning("Null connection returned by liquibase datasource. Using offline unknown database");
liquibaseConnection = new OfflineConnection("offline:unknown", resourceAccessor);
} else {
liquibaseConnection = new JdbcConnection(c);
}
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(liquibaseConnection);
if (StringUtil.trimToNull(this.defaultSchema) != null) {
if (database.supportsSchemas()) {
database.setDefaultSchemaName(this.defaultSchema);
} else if (database.supportsCatalogs()) {
database.setDefaultCatalogName(this.defaultSchema);
}
}
if (StringUtil.trimToNull(this.liquibaseSchema) != null) {
if (database.supportsSchemas()) {
database.setLiquibaseSchemaName(this.liquibaseSchema);
} else if (database.supportsCatalogs()) {
database.setLiquibaseCatalogName(this.liquibaseSchema);
}
}
if (StringUtil.trimToNull(this.liquibaseTablespace) != null && database.supportsTablespaces()) {
database.setLiquibaseTablespaceName(this.liquibaseTablespace);
}
if (StringUtil.trimToNull(this.databaseChangeLogTable) != null) {
database.setDatabaseChangeLogTableName(this.databaseChangeLogTable);
}
if (StringUtil.trimToNull(this.databaseChangeLogLockTable) != null) {
database.setDatabaseChangeLogLockTableName(this.databaseChangeLogLockTable);
}
return database;
}
use of liquibase.database.DatabaseConnection in project liquibase by liquibase.
the class AbstractIntegrationTest method testRerunDiffChangeLogAltSchema.
@Test
public void testRerunDiffChangeLogAltSchema() throws Exception {
assumeNotNull(this.getDatabase());
if (database.getShortName().equalsIgnoreCase("mssql")) {
// not possible on MSSQL.
return;
}
if (!database.supportsSchemas()) {
return;
}
Liquibase liquibase = createLiquibase(includedChangeLog);
database.setDefaultSchemaName("lbschem2");
clearDatabase();
LockService lockService = LockServiceFactory.getInstance().getLockService(database);
lockService.forceReleaseLock();
liquibase.update(includedChangeLog);
DatabaseSnapshot originalSnapshot = SnapshotGeneratorFactory.getInstance().createSnapshot(database.getDefaultSchema(), database, new SnapshotControl(database));
CompareControl compareControl = new CompareControl(new CompareControl.SchemaComparison[] { new CompareControl.SchemaComparison(CatalogAndSchema.DEFAULT, new CatalogAndSchema("lbcat2", null)) }, originalSnapshot.getSnapshotControl().getTypesToInclude());
DiffResult diffResult = DiffGeneratorFactory.getInstance().compare(database, null, compareControl);
File tempFile = File.createTempFile("liquibase-test", ".xml");
FileOutputStream output = new FileOutputStream(tempFile);
try {
new DiffToChangeLog(diffResult, new DiffOutputControl()).print(new PrintStream(output));
output.flush();
} finally {
output.close();
}
liquibase = createLiquibase(tempFile.getName());
clearDatabase();
// run again to test changelog testing logic
Executor executor = Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", database);
try {
executor.execute(new DropTableStatement("lbcat2", null, database.getDatabaseChangeLogTableName(), false));
} catch (DatabaseException e) {
// ok
}
try {
executor.execute(new DropTableStatement("lbcat2", null, database.getDatabaseChangeLogLockTableName(), false));
} catch (DatabaseException e) {
// ok
}
database.commit();
DatabaseConnection connection = new JdbcConnection(testSystem.getConnection());
database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(connection);
database.setDefaultSchemaName("lbschem2");
liquibase = createLiquibase(tempFile.getName());
try {
liquibase.update(this.contexts);
} catch (ValidationFailedException e) {
e.printDescriptiveError(System.out);
throw e;
}
tempFile.deleteOnExit();
DatabaseSnapshot finalSnapshot = SnapshotGeneratorFactory.getInstance().createSnapshot(database.getDefaultSchema(), database, new SnapshotControl(database));
CompareControl finalCompareControl = new CompareControl();
finalCompareControl.addSuppressedField(Column.class, "autoIncrementInformation");
DiffResult finalDiffResult = DiffGeneratorFactory.getInstance().compare(originalSnapshot, finalSnapshot, finalCompareControl);
new DiffToReport(finalDiffResult, System.out).print();
assertTrue("running the same change log two times against an alternative schema should produce " + "equal snapshots.", finalDiffResult.areEqual());
}
use of liquibase.database.DatabaseConnection in project collect by openforis.
the class LiquibaseRelationalSchemaCreator method getDatabaseImplementation.
private Database getDatabaseImplementation(Connection targetConn) throws DatabaseException {
DatabaseConnection dbconn = new JdbcConnection(targetConn);
DatabaseFactory dbFactory = DatabaseFactory.getInstance();
Database rdb = dbFactory.findCorrectDatabaseImplementation(dbconn);
if (rdb instanceof PostgresDatabase) {
rdb = new CollectPostgresDatabase(dbconn);
}
return rdb;
}
use of liquibase.database.DatabaseConnection in project iaf by ibissource.
the class LiquibaseMigrator method createMigrator.
private Liquibase createMigrator(Resource resource) throws SQLException, LiquibaseException {
if (resource == null) {
throw new LiquibaseException("no resource provided");
}
ResourceAccessor resourceAccessor = new LiquibaseResourceAccessor(resource);
DatabaseConnection connection = getDatabaseConnection();
return new Liquibase(resource.getSystemId(), resourceAccessor, connection);
}
Aggregations