Skip to content

Commit

Permalink
Introduce quarkus.datasource.devservices.init-script-path
Browse files Browse the repository at this point in the history
- This enables specifying a SQL initialization script for Dev Services Databases

Added tests
  • Loading branch information
gastaldi committed Jan 19, 2023
1 parent 1d30c00 commit 6b4baf2
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class DevServicesDatasourceContainerConfig {
private final Optional<String> dbName;
private final Optional<String> username;
private final Optional<String> password;
private final Optional<String> initScriptPath;

public DevServicesDatasourceContainerConfig(Optional<String> imageName,
Map<String, String> containerProperties,
Expand All @@ -22,7 +23,8 @@ public DevServicesDatasourceContainerConfig(Optional<String> imageName,
Optional<String> command,
Optional<String> dbName,
Optional<String> username,
Optional<String> password) {
Optional<String> password,
Optional<String> initScriptPath) {
this.imageName = imageName;
this.containerProperties = containerProperties;
this.additionalJdbcUrlProperties = additionalJdbcUrlProperties;
Expand All @@ -31,6 +33,7 @@ public DevServicesDatasourceContainerConfig(Optional<String> imageName,
this.dbName = dbName;
this.username = username;
this.password = password;
this.initScriptPath = initScriptPath;
}

public Optional<String> getImageName() {
Expand Down Expand Up @@ -64,4 +67,8 @@ public Optional<String> getUsername() {
public Optional<String> getPassword() {
return password;
}

public Optional<String> getInitScriptPath() {
return initScriptPath;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ private RunningDevService startDevDb(String dbName,
dataSourceBuildTimeConfig.devservices.command,
dataSourceBuildTimeConfig.devservices.dbName,
dataSourceBuildTimeConfig.devservices.username,
dataSourceBuildTimeConfig.devservices.password);
dataSourceBuildTimeConfig.devservices.password,
dataSourceBuildTimeConfig.devservices.initScriptPath);

DevServicesDatasourceProvider.RunningDevServicesDatasource datasource = devDbProvider
.startDatabase(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,12 @@ public class DevServicesBuildTimeConfig {
*/
@ConfigItem
public Optional<String> password;

/**
* Path to a SQL script that will be loaded from the classpath and applied to the Dev Service database
*
* If the provider is not container based (e.g. a H2 or Derby Database) then this has no effect.
*/
@ConfigItem
public Optional<String> initScriptPath;
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);
container.start();

LOG.info("Dev Services for IBM Db2 started.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public RunningDevServicesDatasource startDatabase(Optional<String> username, Opt

containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam);
containerConfig.getCommand().ifPresent(container::setCommand);
containerConfig.getInitScriptPath().ifPresent(container::withInitScript);

container.start();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package io.quarkus.jdbc.postgresql.deployment;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusUnitTest;

public class DevServicesPostgresqlDatasourceWithInitScriptTestCase {

@RegisterExtension
static QuarkusUnitTest test = new QuarkusUnitTest()
.withApplicationRoot(javaArchive -> javaArchive.addAsResource("init-db.sql"))
.overrideConfigKey("quarkus.datasource.db-kind", "postgresql")
.overrideConfigKey("quarkus.datasource.devservices.init-script-path", "init-db.sql");

@Inject
DataSource ds;

@Test
@DisplayName("Test if init-script-path executed successfully")
public void testDatasource() throws Exception {
int result = 0;
try (Connection con = ds.getConnection();
CallableStatement cs = con.prepareCall("SELECT my_func()");
ResultSet rs = cs.executeQuery()) {
if (rs.next()) {
result = rs.getInt(1);
}
}
assertEquals(100, result, "The init script should have been executed");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE OR REPLACE FUNCTION my_func() RETURNS integer LANGUAGE plpgsql as $func$ BEGIN return 100; END $func$;

0 comments on commit 6b4baf2

Please sign in to comment.