From fbb73d465c70d627a9400a606f44ec7ef545c531 Mon Sep 17 00:00:00 2001 From: Noemi Praml Date: Fri, 2 Sep 2022 10:08:31 +0200 Subject: [PATCH] FIX DB2 migration: reorg table must be called after drop not null --- .../dbmigration/ddlgeneration/platform/DB2Ddl.java | 11 ++++++----- .../io/ebean/xtest/dbmigration/DbMigrationTest.java | 1 + .../src/test/java/misc/migration/v1_0/ETable.java | 12 ++++++++++++ .../src/test/java/misc/migration/v1_1/ETable.java | 5 +++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java index e0eea9377..265cc4392 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java @@ -39,12 +39,12 @@ public class DB2Ddl extends PlatformDdl { return String.format(MOVE_TABLE, tablename.toUpperCase(), tableSpace, indexSpace, lobSpace); } } - + @Override public String alterTableAddUniqueConstraint(String tableName, String uqName, String[] columns, String[] nullableColumns) { if (nullableColumns == null || nullableColumns.length == 0) { return super.alterTableAddUniqueConstraint(tableName, uqName, columns, nullableColumns); - } + } if (uqName == null) { throw new NullPointerException(); @@ -66,7 +66,7 @@ public class DB2Ddl extends PlatformDdl { public void addTablespace(DdlBuffer apply, String tablespaceName, String indexTablespace, String lobTablespace) { apply.append(" in ").append(tablespaceName).append(" index in ").append(indexTablespace).append(" long in ").append(lobTablespace); } - + @Override public void alterTableAddColumn(DdlWrite writer, String tableName, Column column, boolean onHistoryTable, String defaultValue) { @@ -209,7 +209,7 @@ public class DB2Ddl extends PlatformDdl { /** * determine, if we need a reorg. - * + * * See: https://www.ibm.com/docs/en/db2/11.5?topic=statements-alter-table The following is the full list of REORG-recommended * ALTER statements that cause a version change and place the table into a REORG-pending state: * - * + * */ private boolean checkReorg(AlterCmd cmd) { switch (cmd.getOperation()) { @@ -230,6 +230,7 @@ public class DB2Ddl extends PlatformDdl { case "alter column": String alter = cmd.getAlternation(); return alter.equals("set not null") + || alter.equals("drop not null") || alter.equals("drop not default") || alter.startsWith("set data type"); // note: altering varchar length only is not detected here default: diff --git a/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java b/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java index 02378bc86..9a3cff37c 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java +++ b/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java @@ -293,6 +293,7 @@ public class DbMigrationTest extends BaseTestCase { table.setFrom("foo"); table.setTo("bar"); table.setIndex("id"); + table.setTextfield("test"); tmpServer.save(table); table = tmpServer.find(ETable.class).where().eq("index", "id").findOne(); assert table != null; diff --git a/ebean-test/src/test/java/misc/migration/v1_0/ETable.java b/ebean-test/src/test/java/misc/migration/v1_0/ETable.java index dce7920af..0a593993f 100644 --- a/ebean-test/src/test/java/misc/migration/v1_0/ETable.java +++ b/ebean-test/src/test/java/misc/migration/v1_0/ETable.java @@ -3,6 +3,7 @@ package misc.migration.v1_0; import io.ebean.annotation.DbComment; import io.ebean.annotation.History; import io.ebean.annotation.Index; +import io.ebean.annotation.NotNull; import javax.persistence.*; import java.util.List; @@ -36,6 +37,17 @@ public class ETable { @OneToMany(mappedBy = "foreign") List foreigns; + @NotNull + private String textfield; + + public void setTextfield(String textfield) { + this.textfield = textfield; + } + + public String getTextfield() { + return textfield; + } + public String getIndex() { return index; } diff --git a/ebean-test/src/test/java/misc/migration/v1_1/ETable.java b/ebean-test/src/test/java/misc/migration/v1_1/ETable.java index 6372c9233..20926d60f 100644 --- a/ebean-test/src/test/java/misc/migration/v1_1/ETable.java +++ b/ebean-test/src/test/java/misc/migration/v1_1/ETable.java @@ -39,4 +39,9 @@ public class ETable { @OneToMany(mappedBy = "foreign") List foreigns; + + private String textfield; + + @Index + private String textfield2; }