From 6f702098bc8a2935e8099642369a3a2c7a1ea0d1 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 9 Feb 2016 12:55:41 +1300 Subject: [PATCH] Update DB Migration runner --- pom.xml | 4 +- .../ebean/dbmigration/MigrationRunner.java | 6 ++- .../runner/LocalMigrationResource.java | 38 ++++++++++++++----- .../runner/LocalMigrationResources.java | 6 +-- .../dbmigration/runner/MigrationTable.java | 21 +++++++++- 5 files changed, 58 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index 4aa0107f4..80ec96e15 100644 --- a/pom.xml +++ b/pom.xml @@ -62,9 +62,9 @@ - org.avaje.util + org.avaje avaje-classpath-scanner - 1.1.1-SNAPSHOT + 1.1.1 diff --git a/src/main/java/com/avaje/ebean/dbmigration/MigrationRunner.java b/src/main/java/com/avaje/ebean/dbmigration/MigrationRunner.java index 7af720bc2..e0d3b319f 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/MigrationRunner.java +++ b/src/main/java/com/avaje/ebean/dbmigration/MigrationRunner.java @@ -46,10 +46,14 @@ public class MigrationRunner { MigrationTable table = new MigrationTable(server, migrationConfig, connection); table.createIfNeeded(); + LocalMigrationResource priorVersion = null; List localVersions = resources.getVersions(); for (int i = 0; i < localVersions.size(); i++) { LocalMigrationResource localVersion = localVersions.get(i); - if (!table.shouldRun(i, localVersion)) { + if (i > 0) { + priorVersion = localVersions.get(i-1); + } + if (!table.shouldRun(i, localVersion, priorVersion)) { break; } } diff --git a/src/main/java/com/avaje/ebean/dbmigration/runner/LocalMigrationResource.java b/src/main/java/com/avaje/ebean/dbmigration/runner/LocalMigrationResource.java index 5345dd6d8..979552e07 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/runner/LocalMigrationResource.java +++ b/src/main/java/com/avaje/ebean/dbmigration/runner/LocalMigrationResource.java @@ -4,7 +4,7 @@ import com.avaje.ebean.dbmigration.model.MigrationVersion; import org.avaje.classpath.scanner.Resource; /** - * + * A DB migration resource. */ public class LocalMigrationResource implements Comparable { @@ -14,22 +14,42 @@ public class LocalMigrationResource implements Comparable resourceList = scanner.scanForResources(new Location(migrationPath), new Match(migrationConfig)); + List resourceList = scanner.scanForResources(migrationPath, new Match(migrationConfig)); logger.debug("resources: {}", resourceList); @@ -49,8 +49,8 @@ public class LocalMigrationResources { int pos = filename.lastIndexOf(migrationConfig.getApplySuffix()); String mainName = filename.substring(0, pos); - MigrationVersion v0 = MigrationVersion.parse(mainName); - LocalMigrationResource res = new LocalMigrationResource(v0, resource.getLocation(), resource); + MigrationVersion migrationVersion = MigrationVersion.parse(mainName); + LocalMigrationResource res = new LocalMigrationResource(migrationVersion, resource.getLocation(), resource); versions.add(res); } } diff --git a/src/main/java/com/avaje/ebean/dbmigration/runner/MigrationTable.java b/src/main/java/com/avaje/ebean/dbmigration/runner/MigrationTable.java index 809b128fe..73fb01754 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/runner/MigrationTable.java +++ b/src/main/java/com/avaje/ebean/dbmigration/runner/MigrationTable.java @@ -40,6 +40,7 @@ public class MigrationTable { private final String schema; private final String table; private final ServerConfig serverConfig; + private final String envUserName; int metaRowPosition; @@ -56,6 +57,8 @@ public class MigrationTable { this.catalog = null; this.schema = null; this.table = "ebean_migration"; + + this.envUserName = System.getProperty("user.name"); } @@ -93,7 +96,15 @@ public class MigrationTable { } - public boolean shouldRun(int runPosition, LocalMigrationResource localVersion) { + public boolean shouldRun(int runPosition, LocalMigrationResource localVersion, LocalMigrationResource priorVersion) { + + // if prior != null check previous version installed + // if previous version not installed ... error - missing version (prior version) + + // if localVersion installed + // check checksum and return ok, or re-installable? + // else + // install version and continue if (runPosition >= metaRows.size()) { logger.debug("No matching row"); @@ -112,6 +123,12 @@ public class MigrationTable { logger.debug("run migration "+localVersion.getLocation()); + + String script = localVersion.getContent(); + + MigrationScriptRunner run = new MigrationScriptRunner(connection); + run.runScript(false, script, "run migration version: "+localVersion.getVersion()); + String sql = "insert into ebean_migration (id,status,run_version,dep_version,comment,checksum,run_on,run_by,run_ip) "+ "values (?,?,?,?,?,?,?,?,?)"; @@ -123,7 +140,7 @@ public class MigrationTable { sqlUpdate.setParameter(5, "comm"); sqlUpdate.setParameter(6, 0); sqlUpdate.setParameter(7, new Timestamp(System.currentTimeMillis())); - sqlUpdate.setParameter(8, "user"); + sqlUpdate.setParameter(8, envUserName); sqlUpdate.setParameter(9, "userIp"); ExternalJdbcTransaction t = new ExternalJdbcTransaction(connection);