aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-db-dao/src')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/MyBatisIT.java2
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/SQDatabaseForH2IT.java2
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java6
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java3
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java226
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java2
6 files changed, 8 insertions, 233 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/MyBatisIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/MyBatisIT.java
index d4db5c5ceae..616d30862f6 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/MyBatisIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/MyBatisIT.java
@@ -34,7 +34,7 @@ public class MyBatisIT {
@BeforeClass
public static void start() {
- database = SQDatabase.newH2Database("sonar2", true);
+ database = new SQDatabase.Builder().asH2Database("sonar2").createSchema(true).build();
database.start();
}
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/SQDatabaseForH2IT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/SQDatabaseForH2IT.java
index 732beddd367..8985b5d7cc3 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/SQDatabaseForH2IT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/SQDatabaseForH2IT.java
@@ -29,7 +29,7 @@ import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class SQDatabaseForH2IT {
- SQDatabase db = SQDatabase.newH2Database("sonar2", true);
+ SQDatabase db = new SQDatabase.Builder().asH2Database("sonar2").createSchema(true).build();
@Before
public void startDb() {
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java b/server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java
index 69701ca7595..986839abd77 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/createdb/CreateDb.java
@@ -24,10 +24,10 @@ import com.sonar.orchestrator.db.DatabaseClient;
import com.sonar.orchestrator.db.DatabaseFactory;
import com.sonar.orchestrator.db.DefaultDatabase;
import java.util.function.Consumer;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.config.internal.Settings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.config.internal.Settings;
import org.sonar.db.SQDatabase;
public class CreateDb {
@@ -37,7 +37,7 @@ public class CreateDb {
Settings settings = new MapSettings();
configuration.asMap().forEach(settings::setProperty);
logJdbcSettings(settings);
- SQDatabase.newDatabase(settings, true).start();
+ new SQDatabase.Builder().createSchema(true).withSettings(settings).build().start();
});
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java b/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
index de7f2b31f25..4a11252538b 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/dump/SQSchemaDumper.java
@@ -55,7 +55,8 @@ class SQSchemaDumper {
}).thenComparing(String.CASE_INSENSITIVE_ORDER);
String dumpToText() throws SQLException {
- SQDatabase database = SQDatabase.newH2Database("SQSchemaDumper", true);
+
+ SQDatabase database = new SQDatabase.Builder().asH2Database("SQSchemaDumper").createSchema(true).build();
database.start();
try (Connection connection = database.getDataSource().getConnection();
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java
deleted file mode 100644
index 4a3485c6c06..00000000000
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/SQDatabase.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2023 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.db;
-
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.List;
-import javax.sql.DataSource;
-import org.apache.commons.io.output.NullWriter;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.jdbc.ScriptRunner;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.config.internal.Settings;
-import org.sonar.api.utils.System2;
-import org.sonar.api.utils.Version;
-import org.slf4j.LoggerFactory;
-import org.sonar.core.platform.Container;
-import org.sonar.core.platform.SonarQubeVersion;
-import org.sonar.core.platform.SpringComponentContainer;
-import org.sonar.core.util.UuidFactoryFast;
-import org.sonar.core.util.logs.Profiler;
-import org.sonar.db.dialect.Dialect;
-import org.sonar.process.logging.LogbackHelper;
-import org.sonar.server.platform.db.migration.MigrationConfigurationModule;
-import org.sonar.server.platform.db.migration.engine.MigrationContainer;
-import org.sonar.server.platform.db.migration.engine.MigrationContainerImpl;
-import org.sonar.server.platform.db.migration.history.MigrationHistoryTableImpl;
-import org.sonar.server.platform.db.migration.step.MigrationStep;
-import org.sonar.server.platform.db.migration.step.MigrationStepExecutionException;
-import org.sonar.server.platform.db.migration.step.MigrationSteps;
-import org.sonar.server.platform.db.migration.step.MigrationStepsExecutor;
-import org.sonar.server.platform.db.migration.step.RegisteredMigrationStep;
-
-import static com.google.common.base.Preconditions.checkState;
-
-public class SQDatabase extends DefaultDatabase {
- private static final String IGNORED_KEYWORDS_OPTION = ";NON_KEYWORDS=VALUE";
- private final boolean createSchema;
-
- private SQDatabase(Settings settings, boolean createSchema) {
- super(new LogbackHelper(), settings);
- this.createSchema = createSchema;
- }
-
- public static SQDatabase newDatabase(Settings settings, boolean createSchema) {
- return new SQDatabase(settings, createSchema);
- }
-
- public static SQDatabase newH2Database(String name, boolean createSchema) {
- MapSettings settings = new MapSettings()
- .setProperty("sonar.jdbc.dialect", "h2")
- .setProperty("sonar.jdbc.driverClassName", "org.h2.Driver")
- .setProperty("sonar.jdbc.url", "jdbc:h2:mem:" + name + IGNORED_KEYWORDS_OPTION)
- .setProperty("sonar.jdbc.username", "sonar")
- .setProperty("sonar.jdbc.password", "sonar");
- return new SQDatabase(settings, createSchema);
- }
-
- @Override
- public void start() {
- super.start();
- if (createSchema) {
- createSchema();
- }
- }
-
- private void createSchema() {
- Connection connection = null;
- try {
- connection = getDataSource().getConnection();
- NoopDatabase noopDatabase = new NoopDatabase(getDialect(), getDataSource());
- // create and populate schema
- createMigrationHistoryTable(noopDatabase);
- executeDbMigrations(noopDatabase);
- } catch (SQLException e) {
- throw new IllegalStateException("Fail to create schema", e);
- } finally {
- DatabaseUtils.closeQuietly(connection);
- }
- }
-
- public static final class H2StepExecutor implements MigrationStepsExecutor {
- private static final String STEP_START_PATTERN = "{}...";
- private static final String STEP_STOP_PATTERN = "{}: {}";
-
- private final Container container;
-
- public H2StepExecutor(Container container) {
- this.container = container;
- }
-
- @Override
- public void execute(List<RegisteredMigrationStep> steps) {
- steps.forEach(step -> execute(step, container));
- }
-
- private void execute(RegisteredMigrationStep step, Container container) {
- MigrationStep migrationStep = container.getComponentByType(step.getStepClass());
- checkState(migrationStep != null, "Can not find instance of " + step.getStepClass());
-
- execute(step, migrationStep);
- }
-
- private void execute(RegisteredMigrationStep step, MigrationStep migrationStep) {
- Profiler stepProfiler = Profiler.create(LoggerFactory.getLogger(SQDatabase.class));
- stepProfiler.startInfo(STEP_START_PATTERN, step);
- boolean done = false;
- try {
- migrationStep.execute();
- done = true;
- } catch (Exception e) {
- throw new MigrationStepExecutionException(step, e);
- } finally {
- if (done) {
- stepProfiler.stopInfo(STEP_STOP_PATTERN, step, "success");
- } else {
- stepProfiler.stopError(STEP_STOP_PATTERN, step, "failure");
- }
- }
- }
- }
-
- private void executeDbMigrations(NoopDatabase noopDatabase) {
- SpringComponentContainer container = new SpringComponentContainer();
- container.add(noopDatabase);
- MigrationConfigurationModule migrationConfigurationModule = new MigrationConfigurationModule();
- migrationConfigurationModule.configure(container);
-
- // dependencies required by DB migrations
- container.add(new SonarQubeVersion(Version.create(8, 0)));
- container.add(UuidFactoryFast.getInstance());
- container.add(System2.INSTANCE);
- container.add(MapSettings.class);
-
- container.startComponents();
- MigrationContainer migrationContainer = new MigrationContainerImpl(container, H2StepExecutor.class);
- MigrationSteps migrationSteps = migrationContainer.getComponentByType(MigrationSteps.class);
- MigrationStepsExecutor executor = migrationContainer.getComponentByType(MigrationStepsExecutor.class);
-
- executor.execute(migrationSteps.readAll());
- }
-
- private void createMigrationHistoryTable(NoopDatabase noopDatabase) {
- new MigrationHistoryTableImpl(noopDatabase).start();
- }
-
- private static class NoopDatabase implements Database {
- private final Dialect dialect;
- private final DataSource dataSource;
-
- private NoopDatabase(Dialect dialect, DataSource dataSource) {
- this.dialect = dialect;
- this.dataSource = dataSource;
- }
-
- @Override
- public DataSource getDataSource() {
- return dataSource;
- }
-
- @Override
- public Dialect getDialect() {
- return dialect;
- }
-
- @Override
- public void enableSqlLogging(boolean enable) {
-
- }
-
- @Override
- public void start() {
- // do nothing
- }
-
- @Override
- public void stop() {
- // do nothing
- }
- }
-
- public void executeScript(String classloaderPath) {
- try (Connection connection = getDataSource().getConnection()) {
- executeScript(connection, classloaderPath);
- } catch (SQLException e) {
- throw new IllegalStateException("Fail to execute script: " + classloaderPath, e);
- }
- }
-
- private static void executeScript(Connection connection, String path) {
- ScriptRunner scriptRunner = newScriptRunner(connection);
- try {
- scriptRunner.runScript(Resources.getResourceAsReader(path));
- connection.commit();
-
- } catch (Exception e) {
- throw new IllegalStateException("Fail to restore: " + path, e);
- }
- }
-
- private static ScriptRunner newScriptRunner(Connection connection) {
- ScriptRunner scriptRunner = new ScriptRunner(connection);
- scriptRunner.setDelimiter(";");
- scriptRunner.setStopOnError(true);
- scriptRunner.setLogWriter(new PrintWriter(new NullWriter()));
- return scriptRunner;
- }
-}
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java
index 874c7d26556..dc958cb32f7 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java
@@ -62,7 +62,7 @@ class TestDbImpl extends CoreTestDb {
if (dialect != null && !"h2".equals(dialect)) {
return new DefaultDatabase(new LogbackHelper(), settings);
}
- return SQDatabase.newH2Database("h2Tests" + DigestUtils.md5Hex(StringUtils.defaultString(schemaPath)), schemaPath == null);
+ return new SQDatabase.Builder().asH2Database("h2Tests" + DigestUtils.md5Hex(StringUtils.defaultString(schemaPath))).createSchema(schemaPath == null).build();
};
Consumer<Database> schemaPathExecutor = database -> {
if (schemaPath == null) {