Merge pull request #2124 from mposolda/master

KEYCLOAK-1402 Postgresplus 9.4 support
This commit is contained in:
Marek Posolda 2016-01-28 10:18:14 +01:00
commit 1618d9250a
3 changed files with 61 additions and 0 deletions

View file

@ -109,6 +109,10 @@ public class LiquibaseJpaUpdaterProvider implements JpaUpdaterProvider {
} }
LogFactory.setInstance(new LogWrapper()); LogFactory.setInstance(new LogWrapper());
// Adding PostgresPlus support to liquibase
DatabaseFactory.getInstance().register(new PostgresPlusDatabase());
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection)); Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
if (defaultSchema != null) { if (defaultSchema != null) {
database.setDefaultSchemaName(defaultSchema); database.setDefaultSchemaName(defaultSchema);

View file

@ -0,0 +1,56 @@
package org.keycloak.connections.jpa.updater.liquibase;
import liquibase.database.DatabaseConnection;
import liquibase.database.core.PostgresDatabase;
import liquibase.exception.DatabaseException;
import liquibase.executor.ExecutorService;
import liquibase.statement.core.RawSqlStatement;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class PostgresPlusDatabase extends PostgresDatabase {
public static final String POSTGRESPLUS_PRODUCT_NAME = "EnterpriseDB";
@Override
public String getShortName() {
return "postgresplus";
}
@Override
protected String getDefaultDatabaseProductName() {
return POSTGRESPLUS_PRODUCT_NAME;
}
@Override
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
return POSTGRESPLUS_PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
}
@Override
public String getDefaultDriver(String url) {
String defaultDriver = super.getDefaultDriver(url);
if (defaultDriver == null) {
if (url.startsWith("jdbc:edb:")) {
defaultDriver = "com.edb.Driver";
}
}
return defaultDriver;
}
@Override
protected String getConnectionSchemaName() {
try {
String currentSchema = ExecutorService.getInstance().getExecutor(this)
.queryForObject(new RawSqlStatement("select current_schema"), String.class);
return currentSchema;
} catch (Exception e) {
throw new RuntimeException("Failed to get current schema", e);
}
}
}

View file

@ -502,6 +502,7 @@
<password>${keycloak.connectionsJpa.password}</password> <password>${keycloak.connectionsJpa.password}</password>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<databaseClass>${keycloak.connectionsJpa.liquibaseDatabaseClass}</databaseClass>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>