diff --git a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java index aa727ac13..e04a67737 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java @@ -164,9 +164,6 @@ public class DbMigration { *

*/ public void addPlatform(DbPlatformName platform, String prefix) { - if (!prefix.endsWith("-")) { - prefix += "-"; - } platforms.add(new Pair(getPlatform(platform), prefix)); } @@ -215,7 +212,9 @@ public class DbMigration { try { Request request = createRequest(); - generateExtraDdl(request); + if (platforms.isEmpty()) { + generateExtraDdl(request.migrationDir, databasePlatform); + } String pendingVersion = generatePendingDrop(); if (pendingVersion != null) { @@ -239,15 +238,15 @@ public class DbMigration { * migration runner. *

*/ - private void generateExtraDdl(Request request) throws IOException { + private void generateExtraDdl(File migrationDir, DatabasePlatform dbPlatform) throws IOException { - if (databasePlatform != null) { + if (dbPlatform != null) { ExtraDdl extraDdl = ExtraDdlXmlReader.read("/extra-ddl.xml"); if (extraDdl != null) { List ddlScript = extraDdl.getDdlScript(); for (DdlScript script : ddlScript) { - if (ExtraDdlXmlReader.matchPlatform(databasePlatform.getName(), script.getPlatforms())) { - writeExtraDdl(request, script); + if (ExtraDdlXmlReader.matchPlatform(dbPlatform.getName(), script.getPlatforms())) { + writeExtraDdl(migrationDir, script); } } } @@ -257,13 +256,13 @@ public class DbMigration { /** * Write (or override) the "repeatable" migration script. */ - private void writeExtraDdl(Request request, DdlScript script) throws IOException { + private void writeExtraDdl(File migrationDir, DdlScript script) throws IOException { String fullName = repeatableMigrationName(script.getName()); logger.info("writing repeatable script {}", fullName); - File file = new File(request.migrationDir, fullName); + File file = new File(migrationDir, fullName); FileWriter writer = new FileWriter(file); writer.write(script.getValue()); writer.flush(); @@ -433,7 +432,10 @@ public class DbMigration { for (Pair pair : platforms) { DdlWrite platformBuffer = new DdlWrite(new MConfiguration(), currentModel.read()); PlatformDdlWriter platformWriter = createDdlWriter(pair); - platformWriter.processMigration(dbMigration, platformBuffer, writePath, fullVersion); + File subPath = platformWriter.subPath(writePath, pair.prefix); + platformWriter.processMigration(dbMigration, platformBuffer, subPath, fullVersion); + + generateExtraDdl(subPath, pair.platform); } } diff --git a/src/main/java/com/avaje/ebean/dbmigration/model/PlatformDdlWriter.java b/src/main/java/com/avaje/ebean/dbmigration/model/PlatformDdlWriter.java index b98f8ff12..1a6f3f965 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/model/PlatformDdlWriter.java +++ b/src/main/java/com/avaje/ebean/dbmigration/model/PlatformDdlWriter.java @@ -9,6 +9,8 @@ import com.avaje.ebean.dbmigration.ddlgeneration.DdlWrite; import com.avaje.ebean.dbmigration.migration.ChangeSet; import com.avaje.ebean.dbmigration.migration.ChangeSetType; import com.avaje.ebean.dbmigration.migration.Migration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileWriter; @@ -21,6 +23,8 @@ import java.util.List; */ public class PlatformDdlWriter { + private static final Logger logger = LoggerFactory.getLogger(PlatformDdlWriter.class); + private final ServerConfig serverConfig; private final DatabasePlatform platform; @@ -67,7 +71,7 @@ public class PlatformDdlWriter { protected void writePlatformDdl(DdlWrite write, File resourcePath, String fullVersion) throws IOException { if (!write.isApplyEmpty()) { - FileWriter applyWriter = createWriter(resourcePath, fullVersion, "", config.getApplySuffix()); + FileWriter applyWriter = createWriter(resourcePath, fullVersion, config.getApplySuffix()); try { writeApplyDdl(applyWriter, write); applyWriter.flush(); @@ -77,28 +81,12 @@ public class PlatformDdlWriter { } } - protected FileWriter createWriter(File path, String fullVersion, String subPath, String suffix) throws IOException { + protected FileWriter createWriter(File path, String fullVersion, String suffix) throws IOException { - String fileName = fullVersion; - if (!platformPrefix.isEmpty()) { - fileName += "-"+platformPrefix; - } - if (subPath != null && !subPath.isEmpty()) { - path = subPath(path, subPath); - } - fileName += suffix; - File applyFile = new File(path, fileName); + File applyFile = new File(path, fullVersion + suffix); return new FileWriter(applyFile); } - protected File subPath(File path, String suffix) { - File subPath = new File(path, suffix); - if (!subPath.exists()) { - subPath.mkdirs(); - } - return subPath; - } - /** * Write the 'Apply' DDL buffers to the writer. */ @@ -127,4 +115,17 @@ public class PlatformDdlWriter { return platform.createDdlHandler(serverConfig); } + /** + * Return a sub directory (for multi-platform ddl generation). + */ + public File subPath(File path, String suffix) { + File subPath = new File(path, suffix); + if (!subPath.exists()) { + if (!subPath.mkdirs()) { + logger.error("failed to create directories for " + subPath.getAbsolutePath()); + } + } + return subPath; + } + }