aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2011-11-14 22:36:08 +0100
committersimonbrandhof <simon.brandhof@gmail.com>2011-11-14 22:36:08 +0100
commitfc3d5f350739c74350f2d8779cec18f646b9b65d (patch)
treea50d60412396ebe63ca23a57451893a9e6ead7fd /sonar-core
parent23e24bd33a8e66ce01c99c8f256b1d1423c69bdb (diff)
downloadsonarqube-fc3d5f350739c74350f2d8779cec18f646b9b65d.tar.gz
sonarqube-fc3d5f350739c74350f2d8779cec18f646b9b65d.zip
SONAR-2975 refactor the activerecord configuration
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/persistence/Database.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/persistence/DefaultDatabase.java61
-rw-r--r--sonar-core/src/test/java/org/sonar/persistence/DefaultDatabaseTest.java74
-rw-r--r--sonar-core/src/test/java/org/sonar/persistence/InMemoryDatabase.java4
4 files changed, 100 insertions, 41 deletions
diff --git a/sonar-core/src/main/java/org/sonar/persistence/Database.java b/sonar-core/src/main/java/org/sonar/persistence/Database.java
index 4153c56d805..9fd31c7b652 100644
--- a/sonar-core/src/main/java/org/sonar/persistence/Database.java
+++ b/sonar-core/src/main/java/org/sonar/persistence/Database.java
@@ -42,5 +42,7 @@ public interface Database {
*/
Dialect getDialect();
+ String getSchema();
+
Properties getHibernateProperties();
}
diff --git a/sonar-core/src/main/java/org/sonar/persistence/DefaultDatabase.java b/sonar-core/src/main/java/org/sonar/persistence/DefaultDatabase.java
index d4dd8da80b0..c0bc4e6b2e6 100644
--- a/sonar-core/src/main/java/org/sonar/persistence/DefaultDatabase.java
+++ b/sonar-core/src/main/java/org/sonar/persistence/DefaultDatabase.java
@@ -28,10 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.config.Settings;
import org.sonar.api.database.DatabaseProperties;
-import org.sonar.jpa.dialect.Dialect;
-import org.sonar.jpa.dialect.DialectRepository;
-import org.sonar.jpa.dialect.Oracle;
-import org.sonar.jpa.dialect.PostgreSql;
+import org.sonar.jpa.dialect.*;
import org.sonar.jpa.session.CustomHibernateConnectionProvider;
import javax.sql.DataSource;
@@ -50,6 +47,7 @@ public class DefaultDatabase implements Database {
private Settings settings;
private BasicDataSource datasource;
private Dialect dialect;
+ private String schema;
public DefaultDatabase(Settings settings) {
this.settings = settings;
@@ -61,7 +59,8 @@ public class DefaultDatabase implements Database {
Properties properties = getProperties();
dialect = initDialect(properties);
- datasource = initDatasource(properties, dialect);
+ schema = initSchema(properties, dialect);
+ datasource = initDatasource(properties, dialect, schema);
return this;
} catch (Exception e) {
@@ -69,18 +68,29 @@ public class DefaultDatabase implements Database {
}
}
- BasicDataSource initDatasource(Properties properties, Dialect dialect) throws Exception {
- LOG.info("Create JDBC datasource");
- BasicDataSource result = (BasicDataSource) BasicDataSourceFactory.createDataSource(extractCommonsDbcpProperties(properties));
- result.setConnectionInitSqls(getConnectionInitStatements(properties, dialect));
+ static Dialect initDialect(Properties properties) {
+ Dialect result = DialectRepository.find(properties.getProperty("sonar.jdbc.dialect"), properties.getProperty("sonar.jdbc.url"));
+ if (result != null && Derby.ID.equals(result.getId())) {
+ LoggerFactory.getLogger(DefaultDatabase.class).warn("Derby database should be used for evaluation purpose only");
+ }
return result;
}
- Dialect initDialect(Properties properties) {
- Dialect result = DialectRepository.find(properties.getProperty("sonar.jdbc.dialect"), properties.getProperty("sonar.jdbc.url"));
- if (result != null && "derby".equals(result.getId())) {
- LoggerFactory.getLogger(getClass()).warn("Derby database should be used for evaluation purpose only");
+ static String initSchema(Properties properties, Dialect dialect) {
+ String result = null;
+ if (PostgreSql.ID.equals(dialect.getId())) {
+ result = getSchemaPropertyValue(properties, "sonar.jdbc.postgreSearchPath");
+
+ } else if (Oracle.ID.equals(dialect.getId())) {
+ result = getSchemaPropertyValue(properties, "sonar.hibernate.default_schema");
}
+ return StringUtils.isNotBlank(result) ? result : null;
+ }
+
+ static BasicDataSource initDatasource(Properties properties, Dialect dialect, String schema) throws Exception {
+ LOG.info("Create JDBC datasource");
+ BasicDataSource result = (BasicDataSource) BasicDataSourceFactory.createDataSource(extractCommonsDbcpProperties(properties));
+ result.setConnectionInitSqls(getConnectionInitStatements(dialect, schema));
return result;
}
@@ -107,6 +117,10 @@ public class DefaultDatabase implements Database {
return dialect;
}
+ public final String getSchema() {
+ return schema;
+ }
+
public Properties getHibernateProperties() {
Properties props = new Properties();
@@ -118,6 +132,10 @@ public class DefaultDatabase implements Database {
props.put("hibernate.generate_statistics", settings.getBoolean(DatabaseProperties.PROP_HIBERNATE_GENERATE_STATISTICS));
props.put("hibernate.hbm2ddl.auto", "validate");
props.put(Environment.CONNECTION_PROVIDER, CustomHibernateConnectionProvider.class.getName());
+
+ if (schema!=null) {
+ props.put("hibernate.default_schema", schema);
+ }
return props;
}
@@ -161,23 +179,20 @@ public class DefaultDatabase implements Database {
return result;
}
- static List<String> getConnectionInitStatements(Properties properties, Dialect dialect) {
+ static List<String> getConnectionInitStatements(Dialect dialect, String schema) {
List<String> result = Lists.newArrayList();
- if (PostgreSql.ID.equals(dialect.getId())) {
- String searchPath = getSchema(properties, "sonar.jdbc.postgreSearchPath");
- if (StringUtils.isNotBlank(searchPath)) {
- result.add("SET SEARCH_PATH TO " + searchPath);
- }
- } else if (Oracle.ID.equals(dialect.getId())) {
- String schema = getSchema(properties, "sonar.hibernate.default_schema");
- if (StringUtils.isNotBlank(schema)) {
+ if (StringUtils.isNotBlank(schema)) {
+ if (PostgreSql.ID.equals(dialect.getId())) {
+ result.add("SET SEARCH_PATH TO " + schema);
+
+ } else if (Oracle.ID.equals(dialect.getId())) {
result.add("ALTER SESSION SET CURRENT SCHEMA = " + schema);
}
}
return result;
}
- static String getSchema(Properties props, String deprecatedKey) {
+ static String getSchemaPropertyValue(Properties props, String deprecatedKey) {
String value = props.getProperty("sonar.jdbc.schema");
if (StringUtils.isBlank(value) && deprecatedKey != null) {
value = props.getProperty(deprecatedKey);
diff --git a/sonar-core/src/test/java/org/sonar/persistence/DefaultDatabaseTest.java b/sonar-core/src/test/java/org/sonar/persistence/DefaultDatabaseTest.java
index 45238a9bb8a..8bd4c9fe48d 100644
--- a/sonar-core/src/test/java/org/sonar/persistence/DefaultDatabaseTest.java
+++ b/sonar-core/src/test/java/org/sonar/persistence/DefaultDatabaseTest.java
@@ -23,6 +23,7 @@ import org.apache.commons.dbcp.BasicDataSource;
import org.hamcrest.core.Is;
import org.junit.Test;
import org.sonar.api.config.Settings;
+import org.sonar.jpa.dialect.MySql;
import org.sonar.jpa.dialect.Oracle;
import org.sonar.jpa.dialect.PostgreSql;
@@ -30,6 +31,7 @@ import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
+import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
public class DefaultDatabaseTest {
@@ -117,10 +119,7 @@ public class DefaultDatabaseTest {
*/
@Test
public void shouldChangePostgreSearchPath() {
- Properties props = new Properties();
- props.setProperty("sonar.jdbc.postgreSearchPath", "my_schema");
-
- List<String> statements = DefaultDatabase.getConnectionInitStatements(props, new PostgreSql());
+ List<String> statements = DefaultDatabase.getConnectionInitStatements(new PostgreSql(), "my_schema");
assertThat(statements.size(), Is.is(1));
assertThat(statements.get(0), Is.is("SET SEARCH_PATH TO my_schema"));
@@ -128,7 +127,7 @@ public class DefaultDatabaseTest {
@Test
public void shouldNotChangePostgreSearchPathByDefault() {
- List<String> statements = DefaultDatabase.getConnectionInitStatements(new Properties(), new PostgreSql());
+ List<String> statements = DefaultDatabase.getConnectionInitStatements(new PostgreSql(), null);
assertThat(statements.size(), Is.is(0));
}
@@ -138,10 +137,7 @@ public class DefaultDatabaseTest {
*/
@Test
public void shouldAlterOracleSession() {
- Properties props = new Properties();
- props.setProperty("sonar.hibernate.default_schema", "my_schema");
-
- List<String> statements = DefaultDatabase.getConnectionInitStatements(props, new Oracle());
+ List<String> statements = DefaultDatabase.getConnectionInitStatements(new Oracle(), "my_schema");
assertThat(statements.size(), Is.is(1));
assertThat(statements.get(0), Is.is("ALTER SESSION SET CURRENT SCHEMA = my_schema"));
@@ -149,30 +145,72 @@ public class DefaultDatabaseTest {
@Test
public void shouldNotAlterOracleSessionByDefault() {
- List<String> statements = DefaultDatabase.getConnectionInitStatements(new Properties(), new Oracle());
+ List<String> statements = DefaultDatabase.getConnectionInitStatements(new Oracle(), null);
assertThat(statements.size(), Is.is(0));
}
@Test
- public void shouldSupportGenericSchemaPropertyForPostgreSQL() {
+ public void shouldInitPostgresqlSchema() {
Properties props = new Properties();
props.setProperty("sonar.jdbc.schema", "my_schema");
- List<String> statements = DefaultDatabase.getConnectionInitStatements(props, new PostgreSql());
+ String schema = DefaultDatabase.initSchema(props, new PostgreSql());
- assertThat(statements.size(), Is.is(1));
- assertThat(statements.get(0), Is.is("SET SEARCH_PATH TO my_schema"));
+ assertThat(schema, Is.is("my_schema"));
+ }
+
+ @Test
+ public void shouldInitPostgresqlSchemaWithDeprecatedProperty() {
+ Properties props = new Properties();
+ props.setProperty("sonar.jdbc.postgreSearchPath", "my_schema");
+
+ String schema = DefaultDatabase.initSchema(props, new PostgreSql());
+
+ assertThat(schema, Is.is("my_schema"));
}
@Test
- public void shouldSupportGenericSchemaPropertyForOracle() {
+ public void shouldNotInitPostgresqlSchemaByDefault() {
+ String schema = DefaultDatabase.initSchema(new Properties(), new PostgreSql());
+
+ assertThat(schema, nullValue());
+ }
+
+ @Test
+ public void shouldInitOracleSchema() {
Properties props = new Properties();
props.setProperty("sonar.jdbc.schema", "my_schema");
- List<String> statements = DefaultDatabase.getConnectionInitStatements(props, new Oracle());
+ String schema = DefaultDatabase.initSchema(props, new Oracle());
- assertThat(statements.size(), Is.is(1));
- assertThat(statements.get(0), Is.is("ALTER SESSION SET CURRENT SCHEMA = my_schema"));
+ assertThat(schema, Is.is("my_schema"));
+ }
+
+ @Test
+ public void shouldInitOracleSchemaWithDeprecatedProperty() {
+ Properties props = new Properties();
+ props.setProperty("sonar.hibernate.default_schema", "my_schema");
+
+ String schema = DefaultDatabase.initSchema(props, new Oracle());
+
+ assertThat(schema, Is.is("my_schema"));
+ }
+
+ @Test
+ public void shouldNotInitOracleSchemaByDefault() {
+ String schema = DefaultDatabase.initSchema(new Properties(), new Oracle());
+
+ assertThat(schema, nullValue());
+ }
+
+ @Test
+ public void shouldNotSchemaOnOtherDatabases() {
+ Properties props = new Properties();
+ props.setProperty("sonar.jdbc.schema", "my_schema");
+
+ String schema = DefaultDatabase.initSchema(props, new MySql());
+
+ assertThat(schema, nullValue());
}
}
diff --git a/sonar-core/src/test/java/org/sonar/persistence/InMemoryDatabase.java b/sonar-core/src/test/java/org/sonar/persistence/InMemoryDatabase.java
index 0a145afaaa6..f499b6a83d9 100644
--- a/sonar-core/src/test/java/org/sonar/persistence/InMemoryDatabase.java
+++ b/sonar-core/src/test/java/org/sonar/persistence/InMemoryDatabase.java
@@ -149,6 +149,10 @@ public class InMemoryDatabase implements Database {
return new Derby();
}
+ public String getSchema() {
+ return null;
+ }
+
public Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.hbm2ddl.auto", "validate");