KEYCLOAK-2601 Fix incorrectly autodetected dialect with MSSQL2014
This commit is contained in:
1 parent
76df229967
commit
1939f25a71
3 files changed
+62
-9
No files matched your search
+42
-6
@@ -121,11 +121,6 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
|
||||
}
|
||||
}
|
||||
|
||||
String driverDialect = config.get("driverDialect");
|
||||
if (driverDialect != null && driverDialect.length() > 0) {
|
||||
properties.put("hibernate.dialect", driverDialect);
|
||||
}
|
||||
|
||||
String schema = getSchema();
|
||||
if (schema != null) {
|
||||
properties.put(JpaUtils.HIBERNATE_DEFAULT_SCHEMA, schema);
|
||||
@@ -147,6 +142,11 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
|
||||
connection = getConnection();
|
||||
try{
|
||||
prepareOperationalInfo(connection);
|
||||
|
||||
String driverDialect = detectDialect(connection);
|
||||
if (driverDialect != null) {
|
||||
properties.put("hibernate.dialect", driverDialect);
|
||||
}
|
||||
|
||||
if (databaseSchema != null) {
|
||||
logger.trace("Updating database");
|
||||
@@ -209,7 +209,7 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void prepareOperationalInfo(Connection connection) {
|
||||
try {
|
||||
operationalInfo = new LinkedHashMap<>();
|
||||
@@ -225,6 +225,42 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected String detectDialect(Connection connection) {
|
||||
String driverDialect = config.get("driverDialect");
|
||||
if (driverDialect != null && driverDialect.length() > 0) {
|
||||
return driverDialect;
|
||||
} else {
|
||||
try {
|
||||
String dbProductName = connection.getMetaData().getDatabaseProductName();
|
||||
String dbProductVersion = connection.getMetaData().getDatabaseProductVersion();
|
||||
|
||||
// For MSSQL2014, we may need to fix the autodetected dialect by hibernate
|
||||
if (dbProductName.equals("Microsoft SQL Server")) {
|
||||
String topVersionStr = dbProductVersion.split("\\.")[0];
|
||||
boolean shouldSet2012Dialect = true;
|
||||
try {
|
||||
int topVersion = Integer.parseInt(topVersionStr);
|
||||
if (topVersion < 12) {
|
||||
shouldSet2012Dialect = false;
|
||||
}
|
||||
} catch (NumberFormatException nfe) {
|
||||
}
|
||||
if (shouldSet2012Dialect) {
|
||||
String sql2012Dialect = "org.hibernate.dialect.SQLServer2012Dialect";
|
||||
logger.debugf("Manually override hibernate dialect to %s", sql2012Dialect);
|
||||
return sql2012Dialect;
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
logger.warnf("Unable to detect hibernate dialect due database exception : %s", e.getMessage());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Connection getConnection() {
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user