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;
+ }
+
}