From 7e825f52895a9a7b49f7c7ae655cf31c657bf521 Mon Sep 17 00:00:00 2001 From: Colin Sharples Date: Fri, 29 Jul 2022 03:13:22 +1200 Subject: [PATCH] Set max fractional timestamp digits to 12 for all DB2 editions (fix #2880) (#2892) Set max fractional timestamp digits to 12 for all DB2 editions (#2880) Co-authored-by: ctg --- .../database/core/AbstractDb2Database.java | 19 ++++++++++++++++++- .../liquibase/database/core/Db2zDatabase.java | 11 +---------- .../database/core/DB2DatabaseTest.java | 6 ++++++ .../database/core/DB2zDatabaseTest.java | 5 +++++ 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/liquibase-core/src/main/java/liquibase/database/core/AbstractDb2Database.java b/liquibase-core/src/main/java/liquibase/database/core/AbstractDb2Database.java index b47c4e8d89d..5004854cb6f 100644 --- a/liquibase-core/src/main/java/liquibase/database/core/AbstractDb2Database.java +++ b/liquibase-core/src/main/java/liquibase/database/core/AbstractDb2Database.java @@ -24,7 +24,9 @@ public abstract class AbstractDb2Database extends AbstractJdbcDatabase { - public AbstractDb2Database() { + private static final int MAX_DB2_TIMESTAMP_FRACTIONAL_DIGITS = 12; + + public AbstractDb2Database() { super.setCurrentDateTimeFunction("CURRENT TIMESTAMP"); super.sequenceNextValueFunction = "NEXT VALUE FOR %s"; super.sequenceCurrentValueFunction = "PREVIOUS VALUE FOR %s"; @@ -235,4 +237,19 @@ protected boolean mustQuoteObjectName(String objectName, Class 9 || getDatabaseMajorVersion() == 9 && getDatabaseMinorVersion() >= 7) { + return MAX_DB2_TIMESTAMP_FRACTIONAL_DIGITS; + } else { + return super.getMaxFractionalDigitsForTimestamp(); + } + } catch (Exception e) { + return super.getMaxFractionalDigitsForTimestamp(); + } + } } diff --git a/liquibase-core/src/main/java/liquibase/database/core/Db2zDatabase.java b/liquibase-core/src/main/java/liquibase/database/core/Db2zDatabase.java index c6955277ce2..bf6b89c9454 100644 --- a/liquibase-core/src/main/java/liquibase/database/core/Db2zDatabase.java +++ b/liquibase-core/src/main/java/liquibase/database/core/Db2zDatabase.java @@ -9,11 +9,7 @@ public class Db2zDatabase extends AbstractDb2Database { - // See https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/sqlref/src/tpc/db2z_limits.html#db2z_limits__limdt, - // may not apply to older versions, caveat emptor - private static final int MAX_DB2Z_TIMESTAMP_FRACTIONAL_DIGITS = 12; - - public Db2zDatabase() { + public Db2zDatabase() { super.setCurrentDateTimeFunction("CURRENT TIMESTAMP"); super.sequenceNextValueFunction = "NEXT VALUE FOR %s"; super.sequenceCurrentValueFunction = "PREVIOUS VALUE FOR %s"; @@ -51,9 +47,4 @@ public boolean isSystemObject(DatabaseObject example) { protected String getDefaultDatabaseProductName() { return "DB2/z"; } - - @Override - public int getMaxFractionalDigitsForTimestamp() { - return MAX_DB2Z_TIMESTAMP_FRACTIONAL_DIGITS; - } } diff --git a/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java b/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java index 9546275e1a4..23ad7886fa5 100644 --- a/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java +++ b/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java @@ -16,4 +16,10 @@ public void testGetDefaultDriver() throws DatabaseException { } } + public void testMaxFractionDigits() { + Database database = new DB2Database(); + assertEquals(12, database.getMaxFractionalDigitsForTimestamp()); + } + + } diff --git a/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java b/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java index 9b3533f538d..6eecde644a0 100644 --- a/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java +++ b/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java @@ -16,4 +16,9 @@ public void testGetDefaultDriver() throws DatabaseException { } } + public void testMaxFractionDigits() { + Database database = new Db2zDatabase(); + assertEquals(12, database.getMaxFractionalDigitsForTimestamp()); + } + }