From 07983847c9fd81f9f471cf3ad78e5748a43ee031 Mon Sep 17 00:00:00 2001 From: simonbrandhof Date: Mon, 18 Apr 2011 14:40:13 +0200 Subject: [PATCH] Fix loading of db dialect in ruby on rails --- sonar-application/src/main/assembly/conf/sonar.properties | 5 ++--- sonar-core/src/main/java/org/sonar/jpa/dialect/Derby.java | 4 ++++ .../src/main/java/org/sonar/jpa/dialect/Dialect.java | 7 ++++++- sonar-core/src/main/java/org/sonar/jpa/dialect/HsqlDb.java | 6 +++++- sonar-core/src/main/java/org/sonar/jpa/dialect/MsSql.java | 6 +++++- sonar-core/src/main/java/org/sonar/jpa/dialect/MySql.java | 6 +++++- sonar-core/src/main/java/org/sonar/jpa/dialect/Oracle.java | 6 +++++- .../src/main/java/org/sonar/jpa/dialect/PostgreSql.java | 6 +++++- .../org/sonar/jpa/session/AbstractDatabaseConnector.java | 3 ++- sonar-server/src/main/webapp/WEB-INF/config/environment.rb | 6 +++--- 10 files changed, 42 insertions(+), 13 deletions(-) diff --git a/sonar-application/src/main/assembly/conf/sonar.properties b/sonar-application/src/main/assembly/conf/sonar.properties index 23823ae59ec..d03383e0020 100644 --- a/sonar-application/src/main/assembly/conf/sonar.properties +++ b/sonar-application/src/main/assembly/conf/sonar.properties @@ -102,12 +102,11 @@ sonar.jdbc.timeBetweenEvictionRunsMillis: 30000 #----- JDBC Datasource bounded to JNDI # When sonar webapp is deployed into a JEE server, the JDBC datasource can be configured into the JEE server and registered into JNDI. # In such a case Sonar uses this datasource to connect to database. -# If you activate this feature, then the properties starting with "sonar.jdbc." can be commented, EXCEPT "sonar.jdbc.driverClassName". +# If you activate this feature, then the properties starting with "sonar.jdbc." can be commented, except "sonar.jdbc.dialect". # The JDBC driver must still be deployed into the directory /extensions/jdbc-driver. #sonar.jdbc.jndiName: jdbc/sonar -# If you don't use the default JDBC drivers, as listed above, then you have to explicitly set the dialect to use. -# Values are : mysql, derby, oracle, postgresql +# Values are : mysql, mssql, derby, oracle, postgresql #sonar.jdbc.dialect= diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/Derby.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/Derby.java index 7f17ac50a67..b0c0ec5614d 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/Derby.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/Derby.java @@ -35,6 +35,10 @@ public class Derby implements Dialect { return "derby"; } + public String getActiveRecordDialectCode() { + return "derby"; + } + public Class getHibernateDialectClass() { return DerbyWithDecimalDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/Dialect.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/Dialect.java index b2537a36096..0f860ae4e32 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/Dialect.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/Dialect.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -34,6 +34,11 @@ public interface Dialect { */ Class getHibernateDialectClass(); + /** + * @return the activerecord dialect to be used + */ + String getActiveRecordDialectCode(); + /** * Used to autodetect a dialect for a given driver URL * diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/HsqlDb.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/HsqlDb.java index e5ffebe4477..b6bb3a68392 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/HsqlDb.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/HsqlDb.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -31,6 +31,10 @@ public class HsqlDb implements Dialect { return "hsqldb"; } + public String getActiveRecordDialectCode() { + return "hsqldb"; + } + public Class getHibernateDialectClass() { return HSQLDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/MsSql.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/MsSql.java index 764e8a57324..f59c2ee4240 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/MsSql.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/MsSql.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -32,6 +32,10 @@ public class MsSql implements Dialect { return "mssql"; } + public String getActiveRecordDialectCode() { + return "sqlserver"; + } + public Class getHibernateDialectClass() { return MsSqlDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/MySql.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/MySql.java index e062e61aa4f..180dec0b1ee 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/MySql.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/MySql.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -34,6 +34,10 @@ public class MySql implements Dialect { return "mysql"; } + public String getActiveRecordDialectCode() { + return "mysql"; + } + public Class getHibernateDialectClass() { return MySqlWithDecimalDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/Oracle.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/Oracle.java index 221848bb0a7..ebec6753619 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/Oracle.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/Oracle.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -34,6 +34,10 @@ public class Oracle implements Dialect { return "oracle"; } + public String getActiveRecordDialectCode() { + return "oracle"; + } + public Class getHibernateDialectClass() { return Oracle10gWithDecimalDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/dialect/PostgreSql.java b/sonar-core/src/main/java/org/sonar/jpa/dialect/PostgreSql.java index 65f3436ca33..7d7318e51eb 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/dialect/PostgreSql.java +++ b/sonar-core/src/main/java/org/sonar/jpa/dialect/PostgreSql.java @@ -1,6 +1,6 @@ /* * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource + * Copyright (C) 2009 SonarSource SA * mailto:contact AT sonarsource DOT com * * Sonar is free software; you can redistribute it and/or @@ -33,6 +33,10 @@ public class PostgreSql implements Dialect { return "postgresql"; } + public String getActiveRecordDialectCode() { + return "postgre"; + } + public Class getHibernateDialectClass() { return PostgreSQLWithDecimalDialect.class; } diff --git a/sonar-core/src/main/java/org/sonar/jpa/session/AbstractDatabaseConnector.java b/sonar-core/src/main/java/org/sonar/jpa/session/AbstractDatabaseConnector.java index 3ba4cbc5d47..ba3e77928fa 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/session/AbstractDatabaseConnector.java +++ b/sonar-core/src/main/java/org/sonar/jpa/session/AbstractDatabaseConnector.java @@ -21,6 +21,7 @@ package org.sonar.jpa.session; import org.apache.commons.configuration.Configuration; import org.apache.commons.lang.StringUtils; +import org.hibernate.cfg.Environment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.database.DatabaseProperties; @@ -154,7 +155,7 @@ public abstract class AbstractDatabaseConnector implements DatabaseConnector { props.put("hibernate.connection.isolation", Integer.toString(transactionIsolation)); } props.put("hibernate.hbm2ddl.auto", getConfiguration().getString(DatabaseProperties.PROP_HIBERNATE_HBM2DLL, "validate")); - props.put("hibernate.dialect", getDialectClass()); + props.put(Environment.DIALECT, getDialectClass()); props.put("hibernate.generate_statistics", getConfiguration().getBoolean(DatabaseProperties.PROP_HIBERNATE_GENERATE_STATISTICS, false)); props.put("hibernate.show_sql", Boolean.valueOf(LOG_SQL.isInfoEnabled()).toString()); diff --git a/sonar-server/src/main/webapp/WEB-INF/config/environment.rb b/sonar-server/src/main/webapp/WEB-INF/config/environment.rb index 721bd127307..2ce9d7254ca 100644 --- a/sonar-server/src/main/webapp/WEB-INF/config/environment.rb +++ b/sonar-server/src/main/webapp/WEB-INF/config/environment.rb @@ -62,11 +62,11 @@ module ActiveRecord @config[:connection_alive_sql] ||= ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getConfigurationValue('sonar.jdbc.validationQuery') @jndi_connection = true # used in JndiConnectionPoolCallbacks to close this initial connection - + @connection_factory = JdbcConnectionFactory.impl do ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getConnection() end - @config[:driver] = ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getConfigurationValue('sonar.jdbc.driverClassName') + @config[:dialect] = ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDialect().getActiveRecordDialectCode() connection # force the connection to load set_native_database_types @@ -81,7 +81,7 @@ end class ActiveRecord::Migration def self.alter_to_big_primary_key(tablename) - dialect = ActiveRecord::Base.configurations[ ENV['RAILS_ENV'] ]["dialect"] + dialect = ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDialect().getActiveRecordDialectCode() case dialect when "postgre" execute "ALTER TABLE #{tablename} ALTER COLUMN id TYPE bigint" -- 2.39.5