From cef879f5e04df2f7f0cace2435705f7df5f3a134 Mon Sep 17 00:00:00 2001 From: Steven Massaro Date: Wed, 10 Nov 2021 12:31:08 -0600 Subject: [PATCH 1/3] Cleanup SQLite database after tests complete and JVM exits --- .../dbtest/sqlite/SQLiteIntegrationTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/liquibase-integration-tests/src/test/java/liquibase/dbtest/sqlite/SQLiteIntegrationTest.java b/liquibase-integration-tests/src/test/java/liquibase/dbtest/sqlite/SQLiteIntegrationTest.java index 0a62035fdab..e22d70a757c 100644 --- a/liquibase-integration-tests/src/test/java/liquibase/dbtest/sqlite/SQLiteIntegrationTest.java +++ b/liquibase-integration-tests/src/test/java/liquibase/dbtest/sqlite/SQLiteIntegrationTest.java @@ -73,4 +73,17 @@ public void testOutputChangeLog() throws Exception { assertTrue(true); } + @Override + public void tearDown() throws Exception { + super.tearDown(); + try { + String url = getDatabase().getConnection().getURL() + .replaceFirst("jdbc:sqlite:", ""); // remove the prefix of the URL jdbc:sqlite:C:\path\to\tmp\dir\liquibase.db + Scope.getCurrentScope().getLog(getClass()).info("Marking SQLite database as delete on exit: " + url); + // Want to delete the sqlite db on jvm exit so that future runs are not using stale data. + new File(url).deleteOnExit(); + } catch (Exception e) { + Scope.getCurrentScope().getLog(getClass()).warning("Failed to mark SQLite database as delete on exit.", e); + } + } } From 5c6f4dccd3e341eea093201457e0781634a43b39 Mon Sep 17 00:00:00 2001 From: Steven Massaro Date: Wed, 10 Nov 2021 13:30:23 -0600 Subject: [PATCH 2/3] Resolve SQLite test failure (unsure if this is the correct resolution to issue) --- .../resources/changelogs/sqlite/complete/root.changelog.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquibase-integration-tests/src/test/resources/changelogs/sqlite/complete/root.changelog.xml b/liquibase-integration-tests/src/test/resources/changelogs/sqlite/complete/root.changelog.xml index 5a0891b40a9..e201673d75e 100644 --- a/liquibase-integration-tests/src/test/resources/changelogs/sqlite/complete/root.changelog.xml +++ b/liquibase-integration-tests/src/test/resources/changelogs/sqlite/complete/root.changelog.xml @@ -84,7 +84,7 @@ - + From 648e2a0d5f10ec64183e21dcd0eec9cdac4cb537 Mon Sep 17 00:00:00 2001 From: Wesley Willard Date: Thu, 11 Nov 2021 08:22:32 -0600 Subject: [PATCH 3/3] Make lock granted time be consistent with change set executed time Enhance listLocks message LB-2126 --- liquibase-core/src/main/java/liquibase/Liquibase.java | 3 ++- .../sqlgenerator/core/LockDatabaseChangeLogGenerator.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/liquibase-core/src/main/java/liquibase/Liquibase.java b/liquibase-core/src/main/java/liquibase/Liquibase.java index f863099492e..5cdfa58aa39 100644 --- a/liquibase-core/src/main/java/liquibase/Liquibase.java +++ b/liquibase-core/src/main/java/liquibase/Liquibase.java @@ -1942,12 +1942,13 @@ public void reportLocks(PrintStream out) throws LiquibaseException { + "@" + getDatabase().getConnection().getURL()); if (locks.length == 0) { out.println(" - No locks"); + return; } for (DatabaseChangeLogLock lock : locks) { out.println(" - " + lock.getLockedBy() + " at " + DateFormat.getDateTimeInstance().format(lock.getLockGranted())); } - + out.println("NOTE: The lock time displayed is based on the database's configured time"); } public void forceReleaseLocks() throws LiquibaseException { diff --git a/liquibase-core/src/main/java/liquibase/sqlgenerator/core/LockDatabaseChangeLogGenerator.java b/liquibase-core/src/main/java/liquibase/sqlgenerator/core/LockDatabaseChangeLogGenerator.java index dfcd5933109..17d19558a03 100644 --- a/liquibase-core/src/main/java/liquibase/sqlgenerator/core/LockDatabaseChangeLogGenerator.java +++ b/liquibase-core/src/main/java/liquibase/sqlgenerator/core/LockDatabaseChangeLogGenerator.java @@ -8,6 +8,7 @@ import liquibase.sql.Sql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.sqlgenerator.SqlGeneratorFactory; +import liquibase.statement.DatabaseFunction; import liquibase.statement.core.LockDatabaseChangeLogStatement; import liquibase.statement.core.UpdateStatement; import liquibase.util.NetUtil; @@ -44,9 +45,10 @@ public Sql[] generateSql(LockDatabaseChangeLogStatement statement, Database data ObjectQuotingStrategy currentStrategy = database.getObjectQuotingStrategy(); database.setObjectQuotingStrategy(ObjectQuotingStrategy.LEGACY); try { + String dateValue = database.getCurrentDateTimeFunction(); UpdateStatement updateStatement = new UpdateStatement(liquibaseCatalog, liquibaseSchema, database.getDatabaseChangeLogLockTableName()); updateStatement.addNewColumnValue("LOCKED", true); - updateStatement.addNewColumnValue("LOCKGRANTED", new Timestamp(new java.util.Date().getTime())); + updateStatement.addNewColumnValue("LOCKGRANTED", new DatabaseFunction(dateValue)); updateStatement.addNewColumnValue("LOCKEDBY", hostname + hostDescription + " (" + hostaddress + ")"); updateStatement.setWhereClause(database.escapeColumnName(liquibaseCatalog, liquibaseSchema, database.getDatabaseChangeLogTableName(), "ID") + " = 1 AND " + database.escapeColumnName(liquibaseCatalog, liquibaseSchema, database.getDatabaseChangeLogTableName(), "LOCKED") + " = "+ DataTypeFactory.getInstance().fromDescription("boolean", database).objectToSql(false, database));