CAY-2694 Precision issues with reverse / forward engineering of time types on MySQL
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
index 8e0500f..81c7f33 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DbAttributeMerger.java
@@ -34,6 +34,13 @@
class DbAttributeMerger extends AbstractMerger<DbEntity, DbAttribute> {
+ static int[] typesWithMaxLength = {
+ Types.NCHAR, Types.NVARCHAR,
+ Types.CHAR, Types.VARCHAR,
+ Types.BINARY, Types.VARBINARY,
+ Types.TIME, Types.TIMESTAMP
+ };
+
private final ValueForNullProvider valueForNull;
DbAttributeMerger(MergerTokenFactory tokenFactory, ValueForNullProvider valueForNull) {
@@ -137,11 +144,6 @@
}
if(original.getMaxLength() != imported.getMaxLength()) {
- int[] typesWithMaxLength = {
- Types.NCHAR, Types.NVARCHAR,
- Types.CHAR, Types.VARCHAR,
- Types.BINARY, Types.VARBINARY
- };
for(int type : typesWithMaxLength) {
if(original.getType() == type) {
return true;
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CheckTypeTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CheckTypeTest.java
index 87a3cfc..387d2ab 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CheckTypeTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CheckTypeTest.java
@@ -169,6 +169,22 @@
}
@Test
+ public void testTimeType() {
+ original.setType(Types.TIMESTAMP);
+ original.setMaxLength(19);
+
+ imported.setType(Types.TIMESTAMP);
+ imported.setMaxLength(0);
+
+ Collection<MergerToken> mergerTokens = dbAttributeMerger.createTokensForSame(diffPair);
+ assertEquals(1, mergerTokens.size());
+
+ MergerToken mergerToken1 = (MergerToken) mergerTokens.toArray()[0];
+ String mergerToken = "NEW_TABLE.NAME maxLength: 0 -> 19";
+ assertEquals(mergerToken, mergerToken1.getTokenValue());
+ }
+
+ @Test
public void testCheckTypeWithoutChanges() {
diffPair = new MergerDiffPair<>(original, imported);