Liquibase 4.12.0 Release Notes

Liquibase v4.12.0 is a major release.

See GitHub formatted release notes for more information. Full changelog: 4.11.0–4.12.0 (June 17, 2022)

Breaking Changes

Support for Snowflake database has been moved from the external extension liquibase-snowflake into the main Liquibase artifact. If you are using the Snowflake extension, remove it from your lib directory or however you are including it in your project. If you are using the Docker image, the snowflake docker label will no longer be updated so you need to update your reference to either latest or the version tag you prefer. For CLI users, the Snowflake driver also ships out of the box and so you should remove that from the lib directory as well #2841

Enhancements

  • Quality Checks for Databases (DAT-9298) by @StevenMassaro in #2715
    • This capability extends checks from just the changelog to look at the database itself for conditions of compliance, security, and more. This is currently a Liquibase Labs restricted capability, so please contact mario@liquibase.com to request a license key.
  • Added a new "liquibase.showBanner" setting. Setting this value to 'false' will disable the Liquibase startup banner from being shown. By @nvoxland in #2871
  • Added a new "liquibase.missingPropertyMode" setting to control what happens when a changelog contains a ${...} string that doesn't correspond to a set changelog property. The default continues to be "preserve," which leaves it as-is. But other possible values are ERROR or EMPTY which will either stop execution with an error or replace it with an empty string. By @dwieland in #2656
  • Added new "liquibase.preserveSchemaCase" argument to preserve the case of schemas exactly as passed to the various schema settings. Default remains "false" as before. DAT-10027 By @wwillard7800 in #2888
  • Introduced "latest" xsd file path. In addition to http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.12.xsd type XSDs references, you can now also use http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd instead. By using "latest", Liquibase will use the bundled XSD for its version. The uploaded "latest" XSD will always be the most recent Liquibase release, so note how they can be different and locally cached IDE versions may be different yet. By @nvoxland in #2886
  • Added new ConfiguredValueModifier extension point. This allows extensions to be written which will translate or convert configuration values from what was passed by the user before the value is passed to the internal code. By @mcred in #2252
  • Updated StandardLockService interface to make it more useful for extensions by @Cliftonz in #2785

JDBC Driver and Third-Party Library Updates

  • Added connector-api.jar to internal/lib by @nvoxland in #2873
  • Upgraded mysql-connector-java from 8.0.28 to 8.0.29 by @dependabot in #2798
  • Move opencsv to be non-shaded by @nvoxland in #2903
  • Added Snowflake driver to CLI by @nvoxland in #2931
  • Upgraded mssql-jdbc from 10.2.0.jre8 to 10.2.1.jre8 by @dependabot in #2846

Fixes

  • Fixed BLOBs in loadData for MySQL/MariaDB by @MichaelCkr in #2595
  • Fixed getting ENUM column values from Mysql database having multiple schemas by @akatiyar in #2616
  • Added logic to Derby.getDefaultDriver() to check for availability of different driver classes by @AlexanderSashchenko in #2571
  • Fixed TableOutput spaces when using long words (DAT-10069) by @StevenMassaro in #2879
  • Fixed addAutoIncrementstartValue and incrementBy support on Postgresql by @nvoxland in #2588
  • Support non-classpath: protocols in Spring by @reallyinsane in #2524
  • Fixed #2780: AddColumnChange with schema and NOT NULL constraint fails by @MartinRied in #2781
  • Make extension matching for SQL parsers case-insensitve DAT-10265 by @wwillard7800 in #2884
  • Restored outputDefaultSchema and outputDefaultCatalog command arguments by @nvoxland in #2834
  • Quote liquibase.jar path in bash launcher by @nvoxland in #2885
  • Fix for working with Firebird 2 and newer versions. Fixes nullables and boolean type. by @mngsgoncalves in #2277
  • Fixed issue if change changelog object is null by @kamalnigam in #2837
  • Filter out license key strings for Hub communication DAT-10522 by @wwillard7800 in #2926
  • Specify which parameter is missing in the error message by @bendem in #2567
  • Split license information into OSS vs. Pro directories by @nvoxland in #2868
  • Use the method setBlob to insert blob data by @xjodoin in #605
  • Smooth out differences in "./" paths by @nvoxland in #2915
  • Include inherited labels in DATABASECHANGELOG table by @nvoxland in #2870
  • Restored OSGi headers by @nvoxland in #2924
  • Working on better Git Bash console solution DAT-10230 by @wwillard7800 in #2882
  • Close InputStream in SQLFileChange (DAT-9855) by @StevenMassaro in #2920
  • Support prepared statements for query by @fbiville in #2913
  • Implement NOT VALID for Postgres databases by @coenvk in #2600

New Contributors

  • @MichaelCkr made their first contribution in #2595
  • @akatiyar made their first contribution in #2616
  • @Cliftonz made their first contribution in #2785
  • @reallyinsane made their first contribution in #2524
  • @MartinRied made their first contribution in #2781
  • @dwieland made their first contribution in #2656
  • @mngsgoncalves made their first contribution in #2277
  • @kamalnigam made their first contribution in #2837
  • @bendem made their first contribution in #2567
  • @xjodoin made their first contribution in #605
  • @abrackx made their first contribution in #2934
  • @coenvk made their first contribution in #2600