From 605150de5cf205f19644cf53840fe7350146e682 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 29 Jan 2020 11:29:29 +1300 Subject: [PATCH] Update ebean-migration to 12.1.3 with support for Postgres create index concurrently --- pom.xml | 2 +- .../dbmigration/DdlGenerator.java | 18 +++++++++++++----- .../dbmigration/DbMigrationTest.java | 9 ++++----- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index a9598294e..bec721071 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ io.ebean ebean-migration - 12.1.2 + 12.1.3 diff --git a/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java b/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java index a5bcf2b1e..ebc8b9ded 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java +++ b/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java @@ -3,6 +3,7 @@ package io.ebeaninternal.dbmigration; import io.ebean.config.DbMigrationConfig; import io.ebean.config.ServerConfig; import io.ebean.config.dbplatform.DatabasePlatform; +import io.ebean.migration.ddl.DdlAutoCommit; import io.ebean.migration.ddl.DdlRunner; import io.ebean.migration.runner.ScriptTransform; import io.ebean.util.JdbcClose; @@ -47,6 +48,7 @@ public class DdlGenerator { private final boolean ddlAutoCommit; private final String dbSchema; private final ScriptTransform scriptTransform; + private final String platformName; private CurrentModel currentModel; private String dropAllContent; @@ -60,13 +62,15 @@ public class DdlGenerator { this.extraDdl = serverConfig.isDdlExtra(); this.createOnly = serverConfig.isDdlCreateOnly(); this.dbSchema = serverConfig.getDbSchema(); + final DatabasePlatform databasePlatform = server.getDatabasePlatform(); + this.platformName = databasePlatform.getPlatform().base().name(); if (!serverConfig.getTenantMode().isDdlEnabled() && serverConfig.isDdlRun()) { log.warn("DDL can't be run on startup with TenantMode " + serverConfig.getTenantMode()); this.runDdl = false; this.ddlAutoCommit = false; } else { this.runDdl = serverConfig.isDdlRun(); - this.ddlAutoCommit = server.getDatabasePlatform().isDdlAutoCommit(); + this.ddlAutoCommit = databasePlatform.isDdlAutoCommit(); } this.scriptTransform = createScriptTransform(serverConfig.getMigrationConfig()); this.baseDir = initBaseDir(); @@ -156,19 +160,19 @@ public class DdlGenerator { /** * Execute all the DDL statements in the script. */ - public int runScript(Connection connection, boolean expectErrors, String content, String scriptName) { + public void runScript(Connection connection, boolean expectErrors, String content, String scriptName) { - DdlRunner runner = new DdlRunner(expectErrors, scriptName); + DdlRunner runner = createDdlRunner(expectErrors, scriptName); try { if (expectErrors || ddlAutoCommit) { connection.setAutoCommit(true); } - int count = runner.runAll(scriptTransform.transform(content), connection); + runner.runAll(scriptTransform.transform(content), connection); if (expectErrors || ddlAutoCommit) { connection.setAutoCommit(false); } connection.commit(); - return count; + runner.runNonTransactional(connection); } catch (SQLException e) { throw new PersistenceException("Failed to run script", e); @@ -177,6 +181,10 @@ public class DdlGenerator { } } + private DdlRunner createDdlRunner(boolean expectErrors, String scriptName) { + return new DdlRunner(expectErrors, scriptName, DdlAutoCommit.forPlatform(platformName)); + } + protected void runDropSql(Connection connection) throws IOException { if (!createOnly) { if (extraDdl && jaxbPresent) { diff --git a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java index cb461820c..4be34902a 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java @@ -20,12 +20,12 @@ import static org.assertj.core.api.Assertions.assertThat; public class DbMigrationTest extends BaseTestCase { - private int runScript(boolean expectErrors, String scriptName) throws IOException { + private void runScript(boolean expectErrors, String scriptName) throws IOException { String ddl = Helper.asText(this, "/dbmigration/migrationtest/" + server().getPluginApi().getDatabasePlatform().getName()+"/" + scriptName); - return runScript(expectErrors, ddl, scriptName); + runScript(expectErrors, ddl, scriptName); } - private int runScript(boolean expectErrors, String content, String scriptName) { + private void runScript(boolean expectErrors, String content, String scriptName) { DdlRunner runner = new DdlRunner(expectErrors, scriptName); @@ -35,12 +35,11 @@ public class DbMigrationTest extends BaseTestCase { if (expectErrors) { connection.setAutoCommit(true); } - int count = runner.runAll(content, connection); + runner.runAll(content, connection); if (expectErrors) { connection.setAutoCommit(false); } transaction.commit(); - return count; } catch (SQLException e) { throw new PersistenceException("Failed to run script", e);