From 906d5f04adb945badc7ca2c45052a099d3cec3f0 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Tue, 14 May 2019 20:01:20 +0200 Subject: [PATCH] FIX: Migration when default value was changed --- .../ddlgeneration/platform/BaseTableDdl.java | 1 + .../ddlgeneration/platform/HanaTableDdl.java | 5 +---- .../ddlgeneration/platform/MySqlDdl.java | 5 ++++- .../ddlgeneration/platform/SqlServerDdl.java | 5 ++++- src/test/java/misc/migration/v1_0/EBasic.java | 9 +++++++-- src/test/java/misc/migration/v1_1/EBasic.java | 3 +++ src/test/java/misc/migration/v1_2/EBasic.java | 14 +++++++++----- 7 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index f82021634..54d0ec5be 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -840,6 +840,7 @@ public class BaseTableDdl implements TableDdl { /** * This is mysql specific - alter all the base attributes of the column together. + * Will be called, if there is a type, dbdefault or notnull change. */ protected void alterColumnBaseAttributes(DdlWrite writer, AlterColumn alter) throws IOException { diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaTableDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaTableDdl.java index 8740db1c4..c0ce7dcee 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaTableDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaTableDdl.java @@ -30,10 +30,7 @@ public class HanaTableDdl extends BaseTableDdl { @Override protected void alterColumnDefaultValue(DdlWrite writer, AlterColumn alter) throws IOException { - String ddl = platformDdl.alterColumnBaseAttributes(alter); - if (hasValue(ddl)) { - writer.apply().append(ddl).endOfStatement(); - } + // done in alterColumnBaseAttributes } @Override diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java index 46ed420eb..0c83e2706 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java @@ -112,7 +112,10 @@ public class MySqlDdl extends PlatformDdl { @Override public String alterColumnBaseAttributes(AlterColumn alter) { - if (DdlHelp.isDropDefault(alter.getDefaultValue())) { + if (alter.getType() == null + && alter.isNotnull() == null) { + // No type change or notNull change + // defaultValue change already handled in alterColumnDefaultValue return null; } String tableName = alter.getTableName(); diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerDdl.java index 0e8885645..c431851c4 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerDdl.java @@ -149,7 +149,10 @@ public class SqlServerDdl extends PlatformDdl { @Override public String alterColumnBaseAttributes(AlterColumn alter) { - if (DdlHelp.isDropDefault(alter.getDefaultValue())) { + if (alter.getType() == null + && alter.isNotnull() == null) { + // No type change or notNull change + // defaultValue change already handled in alterColumnDefaultValue return null; } String tableName = alter.getTableName(); diff --git a/src/test/java/misc/migration/v1_0/EBasic.java b/src/test/java/misc/migration/v1_0/EBasic.java index 8c90882ef..e1c16afd6 100644 --- a/src/test/java/misc/migration/v1_0/EBasic.java +++ b/src/test/java/misc/migration/v1_0/EBasic.java @@ -1,5 +1,6 @@ package misc.migration.v1_0; +import io.ebean.annotation.DbDefault; import io.ebean.annotation.EnumValue; import io.ebean.annotation.Index; import io.ebean.annotation.NotNull; @@ -32,6 +33,10 @@ public class EBasic { Status status; + @DbDefault("N") + @NotNull + Status status2; + @Size(max=127) String name; @@ -39,11 +44,11 @@ public class EBasic { String description; Timestamp someDate; - + boolean old_boolean; Boolean old_boolean2; - + @ManyToOne ERef eref; diff --git a/src/test/java/misc/migration/v1_1/EBasic.java b/src/test/java/misc/migration/v1_1/EBasic.java index b46d426ad..9e5b1742d 100644 --- a/src/test/java/misc/migration/v1_1/EBasic.java +++ b/src/test/java/misc/migration/v1_1/EBasic.java @@ -52,6 +52,9 @@ public class EBasic { @DbDefault("A") Status status; + @Size(max=127) + String status2; + @Index(unique = true) @Size(max=127) String name; diff --git a/src/test/java/misc/migration/v1_2/EBasic.java b/src/test/java/misc/migration/v1_2/EBasic.java index 5753cb767..eb2a16d9e 100644 --- a/src/test/java/misc/migration/v1_2/EBasic.java +++ b/src/test/java/misc/migration/v1_2/EBasic.java @@ -33,6 +33,10 @@ public class EBasic { Status status; + @DbDefault("N") + @NotNull + Status status2; + @Size(max=127) String name; @@ -40,15 +44,15 @@ public class EBasic { String description; Timestamp someDate; - + boolean old_boolean; Boolean old_boolean2; - + @ManyToOne ERef eref; - - + + // test add & remove indices @Index @Size(max=127) @@ -75,7 +79,7 @@ public class EBasic { @NotNull @DbDefault("23") int user_id; - + public EBasic() { }