Skip to content

Commit

Permalink
Merge pull request #16405 from gastaldi/init_sql
Browse files Browse the repository at this point in the history
Support Flyway's initSql property to specify SQL to run
  • Loading branch information
gastaldi committed Apr 9, 2021
2 parents dc9edb4 + 5c36168 commit 53f9d96
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 0 deletions.
@@ -0,0 +1,45 @@
package io.quarkus.flyway.test;

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

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
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 FlywayExtensionInitSqlTest {
// Quarkus built object
@Inject
DataSource datasource;

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource("db/migration/V1.0.0__Quarkus.sql")
.addAsResource("init-sql-config.properties", "application.properties"));

@Test
@DisplayName("Check if initSql is invoked")
public void testFlywayInitSql() throws SQLException {
int var = 0;
try (Connection con = datasource.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT ONE_HUNDRED");
ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
var = rs.getInt(1);
}
}
assertEquals(100, var, "Init SQL was not executed");
}
}
@@ -0,0 +1,8 @@
quarkus.datasource.db-kind=h2
quarkus.datasource.username=sa
quarkus.datasource.password=sa
quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test-quarkus-migrate-at-start;DB_CLOSE_DELAY=-1

# Flyway config properties
quarkus.flyway.migrate-at-start=true
quarkus.flyway.init-sql=CREATE CONSTANT IF NOT EXISTS ONE_HUNDRED VALUE 100
Expand Up @@ -32,6 +32,9 @@ public FlywayCreator withCallbacks(Collection<Callback> callbacks) {
public Flyway createFlyway(DataSource dataSource) {
FluentConfiguration configure = Flyway.configure();
configure.dataSource(dataSource);
if (flywayRuntimeConfig.initSql.isPresent()) {
configure.initSql(flywayRuntimeConfig.initSql.get());
}
if (flywayRuntimeConfig.connectRetries.isPresent()) {
configure.connectRetries(flywayRuntimeConfig.connectRetries.getAsInt());
}
Expand Down
Expand Up @@ -148,4 +148,9 @@ public static final FlywayDataSourceRuntimeConfig defaultConfig() {
@ConfigItem
public Optional<String> placeholderSuffix = Optional.empty();

/**
* The SQL statements to run to initialize a new database connection immediately after opening it.
*/
@ConfigItem
public Optional<String> initSql = Optional.empty();
}
Expand Up @@ -61,4 +61,18 @@ public Map<String, String> returnPlaceholders() {
public boolean returnCreateSchema() {
return flyway.getConfiguration().getCreateSchemas();
}

@GET
@Path("init-sql")
public String returnInitSql() {
return flyway.getConfiguration().getInitSql();
}

@GET
@Path("init-sql-result")
public Integer returnInitSqlResult() {
return (Integer) entityManager.createNativeQuery("SELECT ONE_HUNDRED")
.getSingleResult();
}

}
Expand Up @@ -18,6 +18,7 @@ quarkus.flyway.placeholders.foo=bar
quarkus.flyway.placeholders.title=REPLACED
quarkus.flyway.placeholder-prefix=#[
quarkus.flyway.placeholder-suffix=]
quarkus.flyway.init-sql=CREATE CONSTANT IF NOT EXISTS ONE_HUNDRED VALUE 100

quarkus.hibernate-orm.database.generation=validate

Expand Down
Expand Up @@ -42,4 +42,16 @@ public void testPlaceholdersPrefixSuffix() {
when().get("/flyway/title").then().body(is("1.0.1 REPLACED"));
}

@Test
@DisplayName("Returns whether the init-sql is CREATE CONSTANT IF NOT EXISTS ONE_HUNDRED VALUE 100 or not")
public void testReturnInitSql() {
when().get("/flyway/init-sql").then().body(is("CREATE CONSTANT IF NOT EXISTS ONE_HUNDRED VALUE 100"));
}

@Test
@DisplayName("Returns whether the init-sql executed")
public void testInitSqlExecuted() {
when().get("/flyway/init-sql-result").then().body(is("100"));
}

}

0 comments on commit 53f9d96

Please sign in to comment.