diff --git a/src/main/java/io/ebean/dbmigration/DbMigration.java b/src/main/java/io/ebean/dbmigration/DbMigration.java index 5319719ba..fd0fe7e4e 100644 --- a/src/main/java/io/ebean/dbmigration/DbMigration.java +++ b/src/main/java/io/ebean/dbmigration/DbMigration.java @@ -144,6 +144,15 @@ public interface DbMigration { */ void setAddForeignKeySkipCheck(boolean addForeignKeySkipCheck); + /** + * Set the lock timeout to be included with the DDL generation. + *
+ * Currently this is only useful for Postgres migrations adding a set lock_timeout
+ * statement to the generated database migration.
+ *
diff --git a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index 2c2016e8c..48e705cc6 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -108,6 +108,7 @@ public class DefaultDbMigration implements DbMigration {
protected String name;
protected String generatePendingDrop;
private boolean addForeignKeySkipCheck;
+ private int lockTimeoutSeconds;
protected boolean includeBuiltInPartitioning = true;
@@ -187,6 +188,11 @@ public class DefaultDbMigration implements DbMigration {
this.addForeignKeySkipCheck = addForeignKeySkipCheck;
}
+ @Override
+ public void setLockTimeout(int seconds) {
+ this.lockTimeoutSeconds = seconds;
+ }
+
@Override
public void setGeneratePendingDrop(String generatePendingDrop) {
this.generatePendingDrop = generatePendingDrop;
@@ -641,7 +647,7 @@ public class DefaultDbMigration implements DbMigration {
}
private PlatformDdlWriter createDdlWriter(DatabasePlatform platform) {
- return new PlatformDdlWriter(platform, serverConfig, migrationConfig);
+ return new PlatformDdlWriter(platform, serverConfig, migrationConfig, lockTimeoutSeconds);
}
/**
diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java
index 209df5276..a78a80b58 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java
@@ -211,6 +211,13 @@ public class PlatformDdl {
return inlineForeignKeys;
}
+ /**
+ * By default this does nothing returning null / no lock timeout.
+ */
+ public String setLockTimeout(int lockTimeoutSeconds) {
+ return null;
+ }
+
/**
* Write all the table columns converting to platform types as necessary.
*/
diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java
index 56d307892..017f8f4fb 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java
@@ -20,6 +20,10 @@ public class PostgresDdl extends PlatformDdl {
this.addForeignKeySkipCheck = " not valid";
}
+ public String setLockTimeout(int lockTimeoutSeconds) {
+ return "set lock_timeout = " + (lockTimeoutSeconds * 1000);
+ }
+
@Override
public boolean suppressPrimaryKeyOnPartition() {
return true;
diff --git a/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java b/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
index 8b2bd71ab..43ce498b9 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
@@ -33,10 +33,13 @@ public class PlatformDdlWriter {
private final PlatformDdl platformDdl;
- public PlatformDdlWriter(DatabasePlatform platform, ServerConfig serverConfig, DbMigrationConfig config) {
+ private final int lockTimeoutSeconds;
+
+ public PlatformDdlWriter(DatabasePlatform platform, ServerConfig serverConfig, DbMigrationConfig config, int lockTimeoutSeconds) {
this.platformDdl = PlatformDdlBuilder.create(platform);
this.serverConfig = serverConfig;
this.config = config;
+ this.lockTimeoutSeconds = lockTimeoutSeconds;
}
/**
@@ -46,6 +49,13 @@ public class PlatformDdlWriter {
DdlHandler handler = handler();
handler.generateProlog(write);
+ if (lockTimeoutSeconds > 0) {
+ String lockSql = platformDdl.setLockTimeout(lockTimeoutSeconds);
+ if (lockSql != null) {
+ write.apply().append(lockSql).endOfStatement().newLine();
+ }
+ }
+
List