keycloak-uncached
Changes
model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java 4(+4 -0)
model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java 56(+56 -0)
testsuite/integration/pom.xml 1(+1 -0)
Details
diff --git a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
index 464e51f..211c00e 100755
--- a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
+++ b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
@@ -109,6 +109,10 @@ public class LiquibaseJpaUpdaterProvider implements JpaUpdaterProvider {
}
LogFactory.setInstance(new LogWrapper());
+
+ // Adding PostgresPlus support to liquibase
+ DatabaseFactory.getInstance().register(new PostgresPlusDatabase());
+
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
if (defaultSchema != null) {
database.setDefaultSchemaName(defaultSchema);
diff --git a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java
new file mode 100644
index 0000000..ffea018
--- /dev/null
+++ b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java
@@ -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);
+ }
+ }
+
+}
testsuite/integration/pom.xml 1(+1 -0)
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 20f0387..83596c4 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -502,6 +502,7 @@
<password>${keycloak.connectionsJpa.password}</password>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
+ <databaseClass>${keycloak.connectionsJpa.liquibaseDatabaseClass}</databaseClass>
</configuration>
<executions>
<execution>