#sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE
-# Uncomment the following property if the Oracle account has permissions to access multiple schemas,
-# for example sonar schemas with different versions. In that case, use the same property during project analysis
-# (-Dsonar.jdbc.schema=<schema>)
-# The schema is case-sensitive.
-#sonar.jdbc.schema=sonar
-
-
#----- PostgreSQL 8.x/9.x
# Comment the embedded database and uncomment the following property to use PostgreSQL
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar
-# Uncomment the following property if the PostgreSQL account has permissions to access multiple schemas,
-# for example sonar schemas with different versions. In that case, use the same property during project analysis
-# (-Dsonar.jdbc.schema=<schema>)
-#sonar.jdbc.schema=public
-
-
#----- Microsoft SQLServer
# The Jtds open source driver is available in extensions/jdbc-driver/mssql. More details on http://jtds.sourceforge.net
#sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor
private void replaceSettings(String databasePath) {
settings
- .removeProperty("sonar.jdbc.schema")
.setProperty(DatabaseProperties.PROP_DIALECT, DIALECT)
.setProperty(DatabaseProperties.PROP_DRIVER, DRIVER)
.setProperty(DatabaseProperties.PROP_USER, USER)
*/
Dialect getDialect();
- String getSchema();
-
Properties getHibernateProperties();
}
private static final String SONAR_JDBC_DIALECT = "sonar.jdbc.dialect";
private static final String SONAR_JDBC_URL = "sonar.jdbc.url";
private static final String SONAR_JDBC_DRIVER_CLASS_NAME = "sonar.jdbc.driverClassName";
- private static final String SONAR_JDBC_SCHEMA = "sonar.jdbc.schema";
private static final String VALIDATE = "validate";
private Settings settings;
void initSettings() {
initProperties();
initDialect();
- initSchema();
}
private void initProperties() {
}
}
- private void initSchema() {
- String deprecatedSchema = null;
- if (PostgreSql.ID.equals(dialect.getId())) {
- // this property has been deprecated in version 2.13
- deprecatedSchema = getSchemaPropertyValue(properties, "sonar.jdbc.postgreSearchPath");
-
- } else if (Oracle.ID.equals(dialect.getId())) {
- // this property has been deprecated in version 2.13
- deprecatedSchema = getSchemaPropertyValue(properties, "sonar.hibernate.default_schema");
- }
- if (StringUtils.isNotBlank(deprecatedSchema)) {
- properties.setProperty(SONAR_JDBC_SCHEMA, deprecatedSchema);
- }
- }
-
private void initDatasource() throws Exception {// NOSONAR this exception is thrown by BasicDataSourceFactory
// but it's correctly caught by start()
LOG.info("Create JDBC datasource for " + properties.getProperty(DatabaseProperties.PROP_URL, DEFAULT_URL));
datasource = (BasicDataSource) BasicDataSourceFactory.createDataSource(extractCommonsDbcpProperties(properties));
- datasource.setConnectionInitSqls(dialect.getConnectionInitStatements(getSchema()));
+ datasource.setConnectionInitSqls(dialect.getConnectionInitStatements());
datasource.setValidationQuery(dialect.getValidationQuery());
}
return dialect;
}
- public final String getSchema() {
- return properties.getProperty(SONAR_JDBC_SCHEMA);
- }
-
public Properties getHibernateProperties() {
Properties props = new Properties();
props.put("hibernate.hbm2ddl.auto", VALIDATE);
props.put(Environment.CONNECTION_PROVIDER, CustomHibernateConnectionProvider.class.getName());
- String schema = getSchema();
- if (StringUtils.isNotBlank(schema)) {
- props.put("hibernate.default_schema", schema);
- }
return props;
}
return result;
}
- private static String getSchemaPropertyValue(Properties props, String deprecatedKey) {
- String value = props.getProperty(SONAR_JDBC_SCHEMA);
- if (StringUtils.isBlank(value) && deprecatedKey != null) {
- value = props.getProperty(deprecatedKey);
- }
- return StringUtils.isNotBlank(value) ? value : null;
- }
-
private static void completeDefaultProperties(Properties props) {
completeDefaultProperty(props, DatabaseProperties.PROP_DRIVER, props.getProperty(DatabaseProperties.PROP_DRIVER_DEPRECATED));
completeDefaultProperty(props, DatabaseProperties.PROP_URL, DEFAULT_URL);
return validationQuery;
}
- public List<String> getConnectionInitStatements(String schema) {
+ public List<String> getConnectionInitStatements() {
return Collections.emptyList();
}
}
*/
String getDefaultDriverClassName();
- List<String> getConnectionInitStatements(String schema);
+ List<String> getConnectionInitStatements();
/**
* @since 2.14
return OracleSequenceGenerator.class;
}
}
-
- @Override
- public List<String> getConnectionInitStatements(String schema) {
- List<String> statements = Lists.newArrayList();
- if (StringUtils.isNotBlank(schema)) {
- statements.add("ALTER SESSION SET CURRENT_SCHEMA = \"" + schema + "\"");
- }
- return statements;
- }
}
*/
package org.sonar.core.persistence.dialect;
-import com.google.common.collect.Lists;
+import com.google.common.collect.ImmutableList;
import org.apache.commons.lang.StringUtils;
import org.hibernate.dialect.PostgreSQLDialect;
public class PostgreSql extends AbstractDialect {
public static final String ID = "postgresql";
+ static final List<String> INIT_STATEMENTS = ImmutableList.of("SET standard_conforming_strings=on", "SET backslash_quote=off");
public PostgreSql() {
super(ID, "postgre", "org.postgresql.Driver", "true", "false", "SELECT 1");
}
@Override
- public List<String> getConnectionInitStatements(String schema) {
- List<String> statements = Lists.newArrayList("SET standard_conforming_strings=on", "SET backslash_quote=off");
- if (StringUtils.isNotBlank(schema)) {
- statements.add("SET SEARCH_PATH TO " + schema);
- }
- return statements;
+ public List<String> getConnectionInitStatements() {
+ return INIT_STATEMENTS;
}
}
assertThat(((BasicDataSource) db.getDataSource()).getMaxActive()).isEqualTo(1);
}
- @Test
- public void shouldInitSchema() {
- Settings settings = new Settings();
- settings.setProperty("sonar.jdbc.schema", "my_schema");
-
- DefaultDatabase database = new DefaultDatabase(settings);
- database.initSettings();
-
- assertThat(database.getSchema()).isEqualTo("my_schema");
- }
-
- @Test
- public void shouldInitPostgresqlSchemaWithDeprecatedProperty() {
- Settings settings = new Settings();
- settings.setProperty("sonar.jdbc.dialect", PostgreSql.ID);
- settings.setProperty("sonar.jdbc.postgreSearchPath", "my_schema");
-
- DefaultDatabase database = new DefaultDatabase(settings);
- database.initSettings();
-
- assertThat(database.getSchema()).isEqualTo("my_schema");
- }
-
- @Test
- public void shouldNotInitPostgresqlSchemaByDefault() {
- Settings settings = new Settings();
- settings.setProperty("sonar.jdbc.dialect", PostgreSql.ID);
-
- DefaultDatabase database = new DefaultDatabase(settings);
- database.initSettings();
-
- assertThat(database.getSchema()).isNull();
- }
-
- @Test
- public void shouldInitOracleSchemaWithDeprecatedProperty() {
- Settings settings = new Settings();
- settings.setProperty("sonar.jdbc.dialect", Oracle.ID);
- settings.setProperty("sonar.hibernate.default_schema", "my_schema");
-
- DefaultDatabase database = new DefaultDatabase(settings);
- database.initSettings();
-
- assertThat(database.getSchema()).isEqualTo("my_schema");
- }
-
- @Test
- public void shouldNotInitOracleSchemaByDefault() {
- Settings settings = new Settings();
- settings.setProperty("sonar.jdbc.dialect", Oracle.ID);
-
- DefaultDatabase database = new DefaultDatabase(settings);
- database.initSettings();
-
- assertThat(database.getSchema()).isNull();
- }
-
@Test
public void shouldGuessDialectFromUrl() {
Settings settings = new Settings();
public void shouldSetHibernateProperties() {
Settings settings = new Settings();
settings.setProperty("sonar.jdbc.url", "jdbc:postgresql://localhost/sonar");
- settings.setProperty("sonar.hibernate.default_schema", "foo");
DefaultDatabase database = new DefaultDatabase(settings);
database.initSettings();
Properties hibernateProps = database.getHibernateProperties();
assertThat(hibernateProps.getProperty("hibernate.hbm2ddl.auto")).isEqualTo("validate");
- assertThat(hibernateProps.getProperty("hibernate.default_schema")).isEqualTo("foo");
}
}
return new H2();
}
- public String getSchema() {
- return null;
- }
-
public Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.hbm2ddl.auto", "validate");
import org.junit.Test;
-import java.util.List;
-
import static org.fest.assertions.Assertions.assertThat;
public class OracleTest {
assertThat(oracle.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
}
- /**
- * Avoid conflicts with other schemas
- */
- @Test
- public void shouldChangeOracleSchema() {
- List<String> initStatements = oracle.getConnectionInitStatements("my_schema");
-
- assertThat(initStatements).containsExactly("ALTER SESSION SET CURRENT_SCHEMA = \"my_schema\"");
- }
-
- @Test
- public void shouldNotChangeOracleSchemaByDefault() {
- assertThat(oracle.getConnectionInitStatements(null)).isEmpty();
- }
-
@Test
public void testBooleanSqlValues() {
assertThat(oracle.getTrueSqlValue()).isEqualTo("1");
*/
package org.sonar.core.persistence.dialect;
-import org.fest.assertions.Condition;
import org.junit.Test;
-import java.util.List;
-
import static org.fest.assertions.Assertions.assertThat;
public class PostgreSqlTest {
}
@Test
- public void should_avoid_conflict_with_other_schemas() {
- List<String> initStatements = postgreSql.getConnectionInitStatements("my_schema");
-
- assertThat(initStatements).contains("SET SEARCH_PATH TO my_schema");
+ public void should_set_connection_properties() {
+ assertThat(postgreSql.getConnectionInitStatements()).isEqualTo(PostgreSql.INIT_STATEMENTS);
}
- @Test
- public void shouldNotChangePostgreSearchPathByDefault() {
- for (String statement : postgreSql.getConnectionInitStatements(null)) {
- assertThat(statement).doesNotMatch("SET SEARCH_PATH .*");
- }
- }
@Test
public void testBooleanSqlValues() {
String PROP_HIBERNATE_HBM2DLL = "sonar.jdbc.hibernate.hbm2ddl";
String PROP_HIBERNATE_GENERATE_STATISTICS = "sonar.jdbc.hibernate.generate_statistics";
String PROP_DIALECT = "sonar.jdbc.dialect";
+
+ /**
+ * @deprecated in 4.2. Not supported anymore. See http://jira.codehaus.org/browse/SONAR-5000.
+ */
+ @Deprecated
String PROP_HIBERNATE_DEFAULT_SCHEMA = "sonar.hibernate.default_schema";
String PROP_EMBEDDED_DATA_DIR = "sonar.embeddedDatabase.dataDir";
add_property(sonar_info, 'Database Driver') {"#{jdbc_metadata.getDriverName()} #{jdbc_metadata.getDriverVersion()}"}
add_property(sonar_info, 'Database Driver Class') {sonar_property('sonar.jdbc.driverClassName')}
add_property(sonar_info, 'Database Dialect (Hibernate)') {"#{Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getId()} (#{Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getHibernateDialectClass().getName()})"}
- add_property(sonar_info, 'Hibernate Default Schema') {sonar_property('sonar.hibernate.default_schema')}
add_property(sonar_info, 'External User Authentication') {realm_name}
add_property(sonar_info, 'Automatic User Creation') {sonar_property(org.sonar.api.CoreProperties.CORE_AUTHENTICATOR_CREATE_USERS)}
add_property(sonar_info, 'Allow Users to Sign Up') {sonar_property(org.sonar.api.CoreProperties.CORE_ALLOW_USERS_TO_SIGNUP_PROPERTY)}
dialect: <%= ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getActiveRecordDialectCode() %>
pool: <%= ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getConfigurationValue('sonar.jdbc.maxActive') || 10 %>
- # postgreSQL
- schema_search_path: <%= ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getSchema() %>
-
- # Oracle
- schema: <%= ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getSchema() %>
-
development:
<<: *base
adapter: sqlite3
database: db/test.sqlite3
pool: 5
- timeout: 5000
\ No newline at end of file
+ timeout: 5000