Skip to content

Liquibase v4.30.0

Latest
Compare
Choose a tag to compare
@liquibot liquibot released this 06 Jan 18:29
· 107 commits to master since this release
38cc3e9

Liquibase 4.30.0 is a major release

Important

Liquibase 4.30.0 contains new capabilities and notable enhancements for Liquibase OSS and Pro users including:

  • Flow enhancements
  • Validation improvements
  • Clearer error messaging for thrown exceptions
  • Addition of Anonymous Analytics
  • Deprecation of the MacOS dmg installer in favor of installation via homebrew

Note

See the Liquibase 4.30.0 Release Notes for the complete set of release information.

Notable Changes

[PRO]

Anonymous Analytics:

  • Liquibase can now gather anonymous usage analytics when commands are run. No user-specific data will be gathered.

For Liquibase OSS users, this functionality is enabled by default, but can be opted-out of before any data is sent. For Liquibase Pro users, this is disabled by default with the ability to opt-in.

Gathering anonymous usage analytics allows us to better understand how Liquibase is actually being used by a very wide, diverse set of millions of users.

Flow Enhancements: Detect pending changesets, and variable-variables

  • There are two exciting Flow enhancements: the ability to condition action on presence of pending changesets, and the ability to use a global variable inside other global or stage variables, enabling variable-variables within flows.
  • Learn more https://docs.liquibase.com/flow

[OSS]

Usability Improvements:

  • Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging.
  • When using failOnError=false, changesets that failed will now show up in the default output.
  • When using STRICT mode, update-to-tag will now throw an error when there is no tag specified or the tag specified does not exist.
  • Added a Customizer that allows discovery of changesets that are not known to an application. This can be used to prevent an application's startup when discovering new, unexpected changesets before an update is made.

Deprecated: MacOS .dmg installer

  • The MacOS dmg installer no longer ships with release artifacts. Please use the tar.gz or .zip release artifacts, or install via homebrew by running brew install liquibase

For a full list of improvements and bug fixes, see the [OSS] Changelog section.

[PRO] Changelog

🚀 New Features

Changes

🐛 [PRO] Bug Fixes 🛠

🤖 [PRO] Security, Driver and Other Updates

12 changes

(#1973) Bump com.fasterxml.jackson.module:jackson-module-jaxb-annotations from 2.17.2 to 2.18.0 by dependabot
(#1974) Bump com.fasterxml.jackson.core:jackson-annotations from 2.17.2 to 2.18.0 by dependabot
(#1976) Bump com.fasterxml.jackson.core:jackson-databind from 2.17.2 to 2.18.0 by dependabot
(#1975) Bump com.fasterxml.jackson.core:jackson-core from 2.17.2 to 2.18.0 by dependabot
(#1988) Bump org.apache.maven.plugins:maven-failsafe-plugin from 2.22.2 to 3.5.1 by dependabot
(#1991) Bump org.apache.maven.plugins:maven-surefire-plugin from 2.22.2 to 3.5.1 by dependabot
(#2003) Bump org.junit.vintage:junit-vintage-engine from 5.10.3 to 5.11.3 by dependabot
(#2002) Bump org.junit:junit-bom from 5.10.3 to 5.11.3 by dependabot
(#1963) Bump com.networknt:json-schema-validator from 1.5.0 to 1.5.2 by dependabot
(#1947) Bump org.yaml:snakeyaml from 2.2 to 2.3 by dependabot
(#1984) Bump org.codehaus.gmavenplus:gmavenplus-plugin from 1.13.1 to 4.0.1 by dependabot
(#2005) Bump org.nanohttpd:nanohttpd from 2.2.0 to 2.3.1 by dependabot

[OSS] Changelog

🚀 New Features

  • (#6414) When using failOnError=false, changesets that failed will now show up in the default output. Thanks, @filipelautert
  • (#6413) Ensure all failed changesets show in the exceptionChangesets. Previously, output summaries did not include changesets that failed when running failOnError=false (DAT-18689). Thanks, @filipelautert
  • (#6169) When using STRICT mode, update-to-tag will now throw an error when there is no tag specified or the tag specified does not exist. Thanks, @MalloD12
  • (#6410) Modified clob handling in loadData by checking the string passed to a CLOB type column. Thanks, @tati-qalified
    • By default this value will be interpreted as a path. If the file at that path exists, the file's contents will be inserted into the column. If not, the passed value will be inserted as-is.
  • (#6067) Added additional modes for duplicateFileMode. Thanks, @k4pran
    • INFO - Logs when duplicate changelog files are found at the INFO level
    • DEBUG - Logs when duplicate changelog files are found at the FINE level
    • SILENT - Does not log when duplicate changelog files are detected
  • (#6432) Added a Customizer that allows discovery of changesets that are not known to an application. This can be used to prevent an application's startup when discovering new, unexpected changesets before an update is made. Thanks, @raphw
  • (#6288) Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging. Thanks, @asolntsev
  • (#6265) Enhanced include and includeAll to support logicalFilePath (DAT-18350). Thanks, @wwillard7800
  • (#6300) Added method to reset command definitions cache in CommandFactory for testing. Thanks, @wwillard7800
  • (#6280) Undeprecated StringUtil class (DAT-18538). Thanks, @MalloD12
  • (#5223) Improved empty check style by using isEmpty String method. Thanks, @MalloD12
  • BigQuery
    • (#6294) Suppress UnsupportedClassVersionErrors for Bigquery at info level (DAT-18534). Thanks, @filipelautert
  • Databricks
  • Maven
  • MSSQL
  • PostgreSQL
    • (#6402) Added pg_stat_statements and pg_stat_statements_info views to the list of system tables and views to prevent them from being dropped. Thank you, @rozenshteyn
    • (#6211) Updated PostgreSQL database major and minor versions. Thanks, @MalloD12

🐛 Bug Fixes 🛠

  • (#6266) Fix CustomTaskRollback rollback bug where it was being called twice. Thanks, @momosetkn
  • (#6205) Removed usage of the deprecated isEmpty() method. Thanks, @anton-erofeev
  • (#6366) Improve startup performance (DAT-18327). Thanks, @StevenMassaro
  • (#6407) Added filterable flag to ChangeLogParameter class (DAT-18811). Thanks, @abrackx
    • This enables users to use label filters such as @some-filter and still have values replaced from global changelog parameters like environment variables.
  • (#6416) When determining the schema name make sure a value was found (DAT-18673). Thanks, @abrackx
  • (#6418) Fix issue where context filters with @ symbols were not being executed properly (DAT-18843). Thanks, @abrackx
  • (#6406) Test assertion code modification. (DAT-17568). Thanks, @wwillard7800
  • (#6429) Check that getPriority method is correct for snapshot generators (DAT-18730). Thanks, @StevenMassaro
  • (#6417) Revert "Remove unneeded inclusion of commons-io in liquibase-core pom.xml". Thanks, @catull
  • (#6385) Do not check for nested database objects when using foreignKeyConstraintExists precondition (DAT-18624). Thanks, @abrackx
  • (#5894) Do not strip "classpath:" when normalizing the path. Thanks, @andrus
  • (#6359) Fix issue where change set with blank ID was allowed to run (DAT-18687). Thanks, @wwillard7800
  • (#6109) Fix classpath loading and incorrect configuration for addForeignKeyConstraint (DAT-18191 and DAT-18192). Thanks, @filipelautert
  • (#6287) Fix NPE when default value is null. Thanks, @asolntsev
  • (#6330) Unhide tag parameter for UpdateTestingRollback command (DAT-18563). Thanks, @MalloD12
  • (#6375) Initialize member variable in method to fix tests. Thanks, @wwillard7800
  • (#6358) Make global argument definitions static so that they are visible across all threads. Thanks, @StevenMassaro
  • (#6309) Fix Locale test. Thanks, @filipelautert
  • (#6463) Fix flakey test (DAT-18921). Thanks, @abrackx
  • (#6165) fix splitting SQL statements containing @begin or #begin. Thanks, @chrstnbrn
    • @begin is now returned as one token instead of two tokens (@ and begin). Same for #begin. This way the logic in processMultiLineSQL that looks for BEGIN does not apply to it and SQL containing @begin or #begin is correctly split into multiple statements.
  • (#4668) Expanded variables in the --sql argument to executeSql so that variables can be substituted in execute-sql --sql-file command. Thanks, @wwillard7800
  • (#6222) Fix: Handle command arguments static behavior. Thanks, @filipelautert
    • Liquibase CLI programmatically can now be called multiple times from different threads.
  • (#6286) Append the cause of the problem to thrown exception for better debugging. Thanks, @asolntsev
  • (#6187) Update JdbcDatabaseSnapshot.java. Thanks, @bmoers
  • (#6409) Added more logging (DAT-18114). Thanks, @wwillard7800
  • MariaDB
    • (#6241) Verify existence of the lock table to remove 'table does not exist' error messages. Thanks, @wwillard7800
  • Maven
    - (#6339) Added filter to the command scope so include/excludeObjects parameters get properly applied. Thanks, @Evan-Christensen!
    - (#6332) Updated project variables used in Maven configuration to reduce build warnings. Thanks, @catull!
  • MySQL
  • Oracle
    • (#6305) Allow generateChangelog to run against Oracle databases with blank schema names (DAT-18199). Thanks, @wwillard7800
  • PostgreSQL
  • SQLite
    - (#6341) Fix sqlite hsqldb and environment variable tests (DAT-18646). Thanks, @abrackx
  • Snowflake
    • (#6391) Handle Snowflake add NOT NULL constraint (DAT-18798). Thanks, @wwillard7800
      • (#6308) Handle offline connection for Snowflake during diff (DAT-18652). Thanks, @wwillard7800
  • Spring
    • (#6345) When using default schema for MultiTenantSpringLiquibase the log level is now info instead of warning. Thanks, @deblockt
    • (#6261) Fix: do not throw an unchecked exception for SpringBoot. Thanks, @filipelautert

🤖 Security, Driver and Other Updates

35 changes

Contributors

@andrus @catull @asolntsev @wwillard7800 @begin @raphw @bmoers @deblockt @chrstnbrn @filipelautert @anton-erofeev @abrackx @StevenMassaro @dependabot @momosetkn @rozenshteyn @liquibot @MalloD12 @sayaliM0412 @stephenatwell @tati-qalified @Evan-Christensen

Full Changelog: v4.29.2...v4.30.0

Get Certified

Learn all the Liquibase fundamentals from free online courses by Liquibase experts and see how to apply them in the real world at https://learn.liquibase.com/.

Read the Documentation

Please check out and contribute to the continually improving docs, now at https://docs.liquibase.com/.

Join the Community

Our community has built a lot. From extensions to integrations, you’ve helped make Liquibase the amazing open source project that it is today. Keep contributing to making it stronger:

Contribute code
Make doc updates
Help by asking and answering questions
Join our Discord server
Sign up to provide feedback to the product team

Thanks to everyone who helps make Liquibase better!

File Descriptions

  • Liquibase CLI -- Includes open source + commercial functionality
  • liquibase-x.y.z.tar.gz -- Archive in tar.gz format
  • liquibase-x.y.z.zip -- Archive in zip format
  • liquibase-windows-x64-installer-x.y.z.exe -- Installer for Windows
  • liquibase-macos-installer-x.y.z.dmg -- Installer for MacOS
  • Primary Libraries - For embedding in other software
    • liquibase-core-x.y.z.jar – Base Liquibase library (open source)
    • liquibase-commerical-x.y.z.jar – Additional commercial functionality
  • liquibase-additional-x.y.z.zip – Contains additional, less commonly used files
    • Additional libraries such as liquibase-maven-plugin.jar and liquibase-cdi.jar
    • Javadocs for all the libraries
    • Source archives for all the open source libraries
    • ASC/MD5/SHA1 verification hashes for all files