From 23cd45b5d1306760e76b33063949411a87ecf961 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Wed, 22 Sep 2021 16:51:47 +1200 Subject: [PATCH] #2039 LocalDateTime ignore timestamp->localdatetime as a type change Historically LocalDateTime mapped to logical timestamp and we need to treat that to be not a change in type. Migrations then will not generate a AlterColumn migration when we start using the new logical type localdatetime. --- .../dbmigration/model/MColumn.java | 11 ++- .../dbmigration/model/MColumnTest.java | 83 +++++++++---------- 2 files changed, 48 insertions(+), 46 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java index de71d794d..712690e0b 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java @@ -15,6 +15,8 @@ import java.util.Objects; */ public class MColumn { + private static final String LOCALDATETIME = "localdatetime"; + private static final String TIMESTAMP = "timestamp"; private String name; private String type; private String checkConstraint; @@ -377,7 +379,7 @@ public class MColumn { getAlterColumn(tableName, tableWithHistory).setHistoryExclude(newColumn.historyExclude); } - if (different(type, newColumn.type)) { + if (different(type, newColumn.type) && !localDateTime(type, newColumn.type)) { changeBaseAttribute = true; getAlterColumn(tableName, tableWithHistory).setType(newColumn.type); } @@ -465,6 +467,13 @@ public class MColumn { } } + /** + * Ignore the case of new type LocalDateTime which was historically mapped to Timestamp. + */ + boolean localDateTime(String type, String newType) { + return LOCALDATETIME.equalsIgnoreCase(newType) && TIMESTAMP.equalsIgnoreCase(type); + } + public void setDbMigrationInfos(List dbMigrationInfos) { this.dbMigrationInfos = dbMigrationInfos; } diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/MColumnTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/MColumnTest.java index 29d01efdc..501fd8b0b 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/MColumnTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/MColumnTest.java @@ -4,23 +4,36 @@ import io.ebeaninternal.dbmigration.migration.AlterColumn; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +class MColumnTest { -public class MColumnTest { + private final MTable table = new MTable("tab"); - MTable table = new MTable("tab"); - - MColumn basic() { + private MColumn basic() { return new MColumn("col", "integer"); } - ModelDiff diff() { + private ModelDiff diff() { return new ModelDiff(); } @Test - public void noDiff() throws Exception { + void localDateTime() { + assertTrue(basic().localDateTime("timestamp", "localdatetime")); + } + @Test + void localDateTime_when_not() { + assertFalse(basic().localDateTime("other", "localdatetime")); + assertFalse(basic().localDateTime("timestamp", "other")); + assertFalse(basic().localDateTime("localdatetime", "timestamp")); + assertFalse(basic().localDateTime("timestamp2", "localdatetime")); + } + + @Test + void noDiff(){ ModelDiff diff = diff(); basic().compare(diff, table, basic()); @@ -29,8 +42,7 @@ public class MColumnTest { } @Test - public void diffType() throws Exception { - + void diffType() { ModelDiff diff = diff(); basic().compare(diff, table, new MColumn("col", "integer(8)")); @@ -40,8 +52,7 @@ public class MColumnTest { } @Test - public void diffNotNull() throws Exception { - + void diffNotNull() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setNotnull(true); @@ -58,8 +69,7 @@ public class MColumnTest { } @Test - public void diffNull() throws Exception { - + void diffNull() { ModelDiff diff = diff(); MColumn newCol = basic(); @@ -76,8 +86,7 @@ public class MColumnTest { } @Test - public void applyNotNull_expect_notNull() throws Exception { - + void applyNotNull_expect_notNull() { MColumn newCol = basic(); newCol.setNotnull(true); @@ -89,8 +98,7 @@ public class MColumnTest { } @Test - public void diffCheckAdd() throws Exception { - + void diffCheckAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setCheckConstraint("abc"); @@ -102,8 +110,7 @@ public class MColumnTest { } @Test - public void diffCheckRemove() throws Exception { - + void diffCheckRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic(); @@ -117,8 +124,7 @@ public class MColumnTest { } @Test - public void diffCheckChange() throws Exception { - + void diffCheckChange() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setCheckConstraint("abc"); @@ -133,8 +139,7 @@ public class MColumnTest { } @Test - public void diffDefaultValueAdd() throws Exception { - + void diffDefaultValueAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setDefaultValue("abc"); @@ -145,8 +150,7 @@ public class MColumnTest { } @Test - public void diffDefaultValueRemove() throws Exception { - + void diffDefaultValueRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic(); @@ -158,8 +162,7 @@ public class MColumnTest { } @Test - public void diffDefaultValueChange() throws Exception { - + void diffDefaultValueChange() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setDefaultValue("abc"); @@ -172,8 +175,7 @@ public class MColumnTest { } @Test - public void diffReferencesAdd() throws Exception { - + void diffReferencesAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setReferences("abc"); @@ -184,10 +186,8 @@ public class MColumnTest { assertThat(getAlterColumn(diff).getDropForeignKey()).isNull(); } - @Test - public void diffReferencesRemove() throws Exception { - + void diffReferencesRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic(); @@ -206,8 +206,7 @@ public class MColumnTest { } @Test - public void diffReferencesChange() throws Exception { - + void diffReferencesChange() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setReferences("ab"); @@ -231,8 +230,7 @@ public class MColumnTest { } @Test - public void diffUniqueAdd() throws Exception { - + void diffUniqueAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setUnique("uq_one"); @@ -243,8 +241,7 @@ public class MColumnTest { } @Test - public void diffUniqueRemove() throws Exception { - + void diffUniqueRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic(); @@ -256,8 +253,7 @@ public class MColumnTest { } @Test - public void diffUniqueOneToOneAdd() throws Exception { - + void diffUniqueOneToOneAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setUniqueOneToOne("uq_new"); @@ -271,8 +267,7 @@ public class MColumnTest { } @Test - public void diffUniqueOneToOneRemove() throws Exception { - + void diffUniqueOneToOneRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic(); @@ -284,8 +279,7 @@ public class MColumnTest { } @Test - public void diffHistoryExcludeAdd() throws Exception { - + void diffHistoryExcludeAdd() { ModelDiff diff = diff(); MColumn newCol = basic(); newCol.setHistoryExclude(true); @@ -296,8 +290,7 @@ public class MColumnTest { } @Test - public void diffHistoryExcludeRemove() throws Exception { - + void diffHistoryExcludeRemove() { ModelDiff diff = diff(); MColumn newCol = basic(); MColumn oldCol = basic();