From 8d6d47609289086cfe0bf2b4978aa936a9e414ea Mon Sep 17 00:00:00 2001 From: Eric Long Date: Thu, 8 Aug 2019 08:33:44 -0400 Subject: [PATCH] 0004064: Allow zero date on MySQL or convert to null otherwise --- .../db/platform/AbstractDatabasePlatform.java | 4 ++++ .../java/org/jumpmind/db/platform/DatabaseInfo.java | 11 ++++++++++- .../jumpmind/db/platform/mysql/MySqlDdlBuilder.java | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index acbaeae929..43862b9e14 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -76,6 +76,7 @@ public abstract class AbstractDatabasePlatform implements IDatabasePlatform { public static final String REQUIRED_FIELD_NULL_SUBSTITUTE = " "; + public static final String ZERO_DATE_STRING = "0000-00-00 00:00:00"; /* * The default name for models read from the database, if no name as given. */ @@ -868,6 +869,9 @@ public java.util.Date parseTimestamp(int type, String value) { try { return Timestamp.valueOf(value); } catch (IllegalArgumentException ex) { + if (!getDatabaseInfo().isZeroDateAllowed() && value != null && value.startsWith(ZERO_DATE_STRING)) { + return null; + } try { return new Timestamp(FormatUtils.parseDate(value, FormatUtils.TIMESTAMP_PATTERNS).getTime()); } catch (Exception e) { diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java index b42f6a692a..99e50f8468 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseInfo.java @@ -275,6 +275,8 @@ public class DatabaseInfo { private boolean notNullColumnsSupported = true; + private boolean zeroDateAllowed; + /** * Creates a new platform info object. */ @@ -1357,5 +1359,12 @@ public void setNotNullColumnsSupported(boolean notNullColumnsSupported) { this.notNullColumnsSupported = notNullColumnsSupported; } - + public boolean isZeroDateAllowed() { + return zeroDateAllowed; + } + + public void setZeroDateAllowed(boolean zeroDateAllowed) { + this.zeroDateAllowed = zeroDateAllowed; + } + } diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java index f3ff5f6d3d..14b39ed220 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/mysql/MySqlDdlBuilder.java @@ -38,7 +38,6 @@ import org.jumpmind.db.model.Database; import org.jumpmind.db.model.ForeignKey; import org.jumpmind.db.model.IIndex; -import org.jumpmind.db.model.IndexColumn; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractDdlBuilder; import org.jumpmind.db.platform.DatabaseNamesConstants; @@ -65,6 +64,7 @@ public MySqlDdlBuilder() { // Double quotes are only allowed for delimiting identifiers if the // server SQL mode includes ANSI_QUOTES databaseInfo.setDelimiterToken("`"); + databaseInfo.setZeroDateAllowed(true); databaseInfo.addNativeTypeMapping(Types.ARRAY, "LONGBLOB", Types.LONGVARBINARY); databaseInfo.addNativeTypeMapping(Types.BIT, "BIT");