From 1707907ae5834ace2b2b31601b99b9813cf9646c Mon Sep 17 00:00:00 2001 From: ctg Date: Mon, 30 May 2022 15:49:29 +1200 Subject: [PATCH] #2880: Set max fractional timestamp digits to 12 for all DB2 editions --- .../database/core/AbstractDb2Database.java | 19 ++++++++++++++++++- .../liquibase/database/core/Db2zDatabase.java | 11 +---------- .../database/core/DB2DatabaseTest.java | 5 +++++ .../database/core/DB2zDatabaseTest.java | 4 ++++ 4 files changed, 28 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 33a017efd7c..dccd013a50c 100644 --- a/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java +++ b/liquibase-core/src/test/java/liquibase/database/core/DB2DatabaseTest.java @@ -12,5 +12,10 @@ public void testGetDefaultDriver() { assertNull(database.getDefaultDriver("jdbc:oracle://localhost;databaseName=liquibase")); } + 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 95750b66846..cbabceb1632 100644 --- a/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java +++ b/liquibase-core/src/test/java/liquibase/database/core/DB2zDatabaseTest.java @@ -12,5 +12,9 @@ public void testGetDefaultDriver() { assertNull(database.getDefaultDriver("jdbc:oracle://localhost;databaseName=liquibase")); } + public void testMaxFractionDigits() { + Database database = new Db2zDatabase(); + assertEquals(12, database.getMaxFractionalDigitsForTimestamp()); + } }