Liquibase v4.24.0
Liquibase 4.24.0 is a major release
Important
For Liquibase Pro native executor users, if you've experienced checksum issues in Liquibase 4.19.0 through 4.23.1, please skip those releases and upgrade to this release, Liquibase 4.24.0.
Note
See the Liquibase 4.24.0 Release Notes for the complete set of release information.
Notable Changes
[PRO]
Liquibase Flows
- Flow file variables are now shared across "nested" flow files and can be passed through multiple flow files.
- Flow files running quality checks will now exit with a return code from the highest return code triggered by any check.
Structured Logging (Observability)
- You can now add custom (user-defined) tags to your structured logs. These tags can be used later to segment your reporting. For instance, you can add tags that indicate the team, pipeline, or environment (and any other attributes that are meaningful to your organization) when reporting on Liquibase events.
- Custom data is now included in every log message. This enables you to use dashboard queries and reports, which depend on these custom
key:value
pairs.
Security Improvement
- Sensitive information is now obfuscated for people using passwords in their JDBC URL strings in structured logging.
[OSS and PRO]
- Database platform improvements for: SQL Anywhere, MySQL, MariaDB, Oracle, DB2 LUW, DB2 z/OS, PostgreSQL, H2, and HSQLDB.
- Performance improvements
- JAVA API improvements
- General Enhancements
- The
generate-changelog
anddiff-changelog
commands now support the--labels
and--contextFilter
arguments. The specified values will be included as attributes for each generated changeset. - The
diff
,diff-changelog
, andsnapshot-reference
commands now allow you to specify thereferenceLiquibaseCatalogName
andreferenceLiquibaseSchemaName
arguments. - The update command summary reports that you can enable with the
--show-summary
argument can now be selectively sent to the console, log, or all with the--show-summary-output
argument (prior to this release, they went to both the console and log). - The
includeAll
tag now supports an optionalendsWithFilter
attribute that directs Liquibase to only include files ending with the value specified by the new attribute. All other files located by the specified path attribute will be skipped and will not be included as deployable changes. - The Maven integration now supports the
logLevel
property. This gives Maven integration users control over the severity level of log messages sent to the Liquibase log file.
- The
🚀 Changelog
[PRO]
- DAT-15343 Allow logFile and logLevel to be specified as globalArgs to Action by @wwillard7800 in liquibase/liquibase-pro#1172
- DAT-15799: show flow-specific userMetadata in all log messages executed as part of Flow command execution by @StevenMassaro in liquibase/liquibase-pro#1202
- DAT-15130 Make Flow variables available in called flows by @wwillard7800 in liquibase/liquibase-pro#1178
- Add an explicit FlowFile constructor by @wwillard7800 in liquibase/liquibase-pro#1207
- DAT-15753 Handle flow exit code when both drift and QC checks are run by @wwillard7800 in liquibase/liquibase-pro#1184
- DAT-15455 Refactor ChangelogRewriters to follow general Factory approach by @vitaliimak in liquibase/liquibase-pro#1195
- DAT-15860: obfuscate user/pass in urls entered in MDC by @StevenMassaro in liquibase/liquibase-pro#1233
- DAT-10223: use syntax which allows for parsing multiple SQL statements in a single changeset by @StevenMassaro in liquibase/liquibase-pro#1160
- DAT-12612: add Lombok by @StevenMassaro in liquibase/liquibase-pro#1166
- DAT-15572: custom log data key-value pairs are injected multiple times per operation by @StevenMassaro in liquibase/liquibase-pro#1150
- DAT-15214: custom log data property substitution using environment variables by @StevenMassaro in liquibase/liquibase-pro#1165
- DAT-15471 Implement a global severity for drift exit code by @wwillard7800 in liquibase/liquibase-pro#1163
- DAT-12827 Always honor end delimiter for SQLPLUS by @wwillard7800 in liquibase/liquibase-pro#1169
- DAT-15367 Added build directory for Azure dependencies by @wwillard7800 in liquibase/liquibase-pro#1121
- DAT-15749: do not serialize warningMessage to checks settings file by @StevenMassaro in liquibase/liquibase-pro#1180
- DAT-15511 Use the checks exit code when running in Flow by @wwillard7800 in liquibase/liquibase-pro#1173
- DAT-15774: add missing short name, name and description when upgrading checks settings config file by @StevenMassaro in liquibase/liquibase-pro#1190
- DAT-15845: Fix drift detection configuration key hierarchy by @abrackx in liquibase/liquibase-pro#1216
- DAT-14924 Set the default schema name before running by @wwillard7800 in liquibase/liquibase-pro#1206
- DAT-15857 Remember the original value of splitStatements for native executor change checksum by @wwillard7800 in liquibase/liquibase-pro#1223
- Downgrades Oracle version by @filipelautert in liquibase/liquibase-pro#1237
- Xsd and flow file for 4.24.0 by @filipelautert in liquibase/liquibase-pro#1266
[OSS]
- (#4574) Implement showSummaryOutput parameter @EvaristeGalois11
- (#4395) Improve update summary usability @EvaristeGalois11
- (#4697) Replacing special constants specific to SQL Anywhere by commonly supported JDBC Escape Functions @mkarg
- (#4805) include tag in history tabular output (DAT-15244) @StevenMassaro
- (#4692) add update report (DAT-15576) @StevenMassaro
- (#4352) Adding support to parameters referenceLiquibaseCatalogName and referenceLiquibaseSchemaName. @filipelautert
- (#3978) Introducing removeChangeSetProperty feature @kirangodishala
- (#4461) support concurrent build in maven plugin @piotrwielgolaski-tomtom
- (#4537) SQL Anywhere: Switching off view definition checks to allow creation of dependent views even if dependency does not yet exist. @mkarg
- (#4658) Upgrade installer version to 17.0.8+7 @filipelautert
- (#4387) Use more parameter markers for DB2z catalogue queries @MichaelKern-IVV
- (#4148) maven-plugin: Support increasing maven log level @mensinda
- (#4534) Fix database test system external driver load. @filipelautert
- (#4680) Allow both include and includeAll to appear in modifyChangeSets tag @wwillard7800
- (#4605) custom log data key-value pairs are injected multiple times per operation (DAT-15572) @StevenMassaro
- (#4628) DAT -15524 Clear-Checksums implementation using command scope @MalloD12
- (#4905) Check for duplicate core and commercial JARs DAT-15837 @wwillard7800
- (#4799) parameter binding for DB2luw to improve performance and other trifles @MichaelKern-IVV
- (#4926) Adding properties to the update report template to allow all the update family commands to use reports DAT-15638 @wwillard7800
- (#4688) MySQL/MariaDB add extra info for date/timestamp columns for the diffChangeLog @filipelautert
- (#4579) Use native oracle BOOLEAN for >=23c | fixes #4576 @mensinda
- (#4834) Optimise the logic for tableIsEmpty check constraint @filipelautert
- (#4729) DAT-15603 Attach Azure jar to liquibase release artifacts @jandroav
🐛 Bug Fixes 🛠
[OSS]
- (#4827) Handle XML data types for DB2 DAT-12878 @wwillard7800
- (#4812) More consistent message when included file is empty DAT-15551 @wwillard7800
- (#4670) Fixed: Fails to detect LONG VARCHAR as CLOB and LONG BINARY as BLOB @mkarg
- (#4648) Fixed: SQL Anywhere reports fancy precision with LONG NVARCHAR @mkarg
- (#4845) Fix liquibase.bat java home handling under Windows @filipelautert
- (#4726) Allow update command to handle additional properties that are passed on the command line DAT-15769 @wwillard7800
- (#4841) Update README link to contribution docs @nwcm
- (#4589) Fixes JdbcExecutor's uses of RawParameterizedSqlStatement @andrew-simmons
- (#4683) Fixed: #4682 - MSSQL: Doesn't support (n CHAR) syntax, but only (n) syntax @mkarg
- (#4798) Fix poor performance of listunrunchangesets @filipelautert
- (#4803) Fix liquibase 4.23.1 won't work on windows if there is no JAVA_HOME system variable set @filipelautert
- (#4502) Fixed: generateChangelog creates invalid changelog @mkarg
- (#4772) Make sure that the correct argument name is displayed in help for commands with aliases DAT-15681 @wwillard7800
- (#4441) Fix primaryKeyTablespace when attribute value is an empty string @delayk
- (#4651) Fixing issue #4650 @mkarg
- (#4404) enable REPLACE OR EXISTS for procedures on DB2 @MichaelKern-IVV
- (#4541) remove dependency on javax.activation @filipelautert
- (#4520) Fixed: SQL Anywhere reports fancy precision with DOUBLE, SMALLINT and TINYINT @mkarg
- (#4609) fix standardlockservice when changelog-lock-wait-time-in-minutes is set to 0 and lock does not exist in database @jgarec
- (#4591) Added changelog parameters to rollback commands @blaghed
- (#4531) SQL Anywhere does not support "NO ACTION", but reports it for "SET DEFAULT" foreign keys @mkarg
- (#4653) Allow DatabaseChangelog object to be passed as a parameter to DatabaseChangelogCommandStep @filipelautert
- (#4613) Fix sequence from serial pre-condition validation for Postgresql @filipelautert
- (#4507) Fixing Issue #4429: SQL Anywhere: generateChangeLog fails when column's default value is an expression (e. g. Unexpected error running Liquibase: Unknown boolean value: if "mycol" is null then 0 else 1 endif) @mkarg
- (#4090) Fixes MySQL BIT / TINYINT(1) Boolean Behaviours @nwcm
- (#4052) Fix H2 database case-sensitive identifier issues + upgrades JUnit tests cases to version 5 @mches
- (#4709) Fix Regression in 4.23.1 where Log table is created multiple times for H2 and HSQLDB @filipelautert
- (#4480) not to use class field for thread safe. @Wenkee
- (#4515) Fixed: LONG VARCHAR DEFAULT NULL instead of LONG VARCHAR DEFAULT 'NULL' @mkarg
- (#4534) Fix database test system external driver load. @filipelautert
- (#4702) DAT-15602 @sayaliM0412
- (#4689) Make operation start time be UTC DAT-15593 @wwillard7800
- (#4585) DAT-15470 @sayaliM0412
- (#4611) [DAT-15439] Fix adding redundant semicolon character for generateChangelog for MSSQL @vitaliimak
- (#4625) Handle leading spaces in formatted SQL changelog DAT-15221 @wwillard7800
- (#4672) DAT-15602 @sayaliM0412
- (#4654) Correctly escape spaces in table name when it is used in a query DAT-11529 @wwillard7800
- (#4956) Fix typo in SqlGeneratorFactory @asashour
- (#4937) [DAT-15924] Handle AbstractSQLChange runWith checksum v8 variants @filipelautert
- (#4900) Enable scoped value to be looked up from Java properties loaded from the command line -D properties DAT-15668 @wwillard7800
- (#4725) Change type of
RowCountPrecondition#expectedRows
fromInteger
toLong
(#1549) @kzander91 - (#4762) Fetch ran change sets before updating check sums @hpoettker
- (#4598) SQL Anywhere allows two foreign keys to differ only by name @mkarg
- (#4621) Fixed: Issue #4620 - "SQL Anywhere DOES support CREATE OR REPLACE VIEW, despite what the source code says!" @mkarg
- (#4705) DAT-15338 Refactor connection string patterns to allow extensions to extend they @vitaliimak
- (#4902) obfuscate user/pass in urls entered in MDC (DAT-15860) @StevenMassaro
- (#4862) DAT-15821 :: OperationOutcomeErrorMsg field added to Operation Info @MalloD12
- (#4909) Rollbacks Oracle Driver to LTS series 19.x @filipelautert
- (#4853) update truelicense text @suryaaki2
- (#4854) Fix LabelExpression constructors when using array or collection @MalloD12
- (#4859) Fix regression in recognizing formatted SQL file DAT-15865 @wwillard7800
- (#4846) do not attempt to recreate DBCL when it is specified with mixed case (DAT-15570) @StevenMassaro
- (#4722) Moved ValueHandlerTest to OSS @wwillard7800
- (#4936) Added FDHUT license information DAT-15915 @wwillard7800
💥 API Change (Non-Breaking)
- (#4785) change MdcManager API to accept Map<String, Object> instead of Map<String, String> (DAT-15799) @StevenMassaro
🤖 Security, Driver and Other Updates
22 changes
- (#....) com.h2database:h2 from 2.1.214 to 2.2.222 by @dependabot in liquibase/liquibase-pro#1212
- (#....) actions/checkout from 3 to 4 by @dependabot in liquibase/liquibase-pro#1213
- (#....) com.github.jsqlparser:jsqlparser from 4.6 to 4.7 by @dependabot in liquibase/liquibase-pro#1215
- (#4717) Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.3.0 to 3.4.0 @dependabot
- (#4838) Bump groovy.version from 2.5.22 to 2.5.23 @MalloD12
- (#4752) Bump ant.version from 1.10.13 to 1.10.14 @dependabot
- (#4784) Bump org.xerial:sqlite-jdbc from 3.42.0.0 to 3.43.0.0 @dependabot
- (#4768) Bump info.picocli:picocli from 4.7.4 to 4.7.5 @dependabot
- (#4747) Bump net.snowflake:snowflake-jdbc from 3.14.0 to 3.14.1 @dependabot
- (#4828) Bump com.h2database:h2 from 2.2.220 to 2.2.222 @dependabot
- (#4767) Bump org.junit:junit-bom from 5.9.3 to 5.10.0 @dependabot
- (#4601) Bump targetMavenVersion from 3.9.2 to 3.9.4 @dependabot
- (#4793) Bump com.microsoft.sqlserver:mssql-jdbc from 12.2.0.jre8 to 12.4.1.jre8 @dependabot
- (#4792) Bump org.junit.jupiter:junit-jupiter-params from 5.9.3 to 5.10.0 @MalloD12
- (#4529) Bump com.opencsv:opencsv from 5.7.1 to 5.8 @dependabot
- (#4791) Bump whelk-io/maven-settings-xml-action from 20 to 21 @MalloD12
- (#4782) DAT-15790 add security reports @jnewton03
- (#4764) Bump org.yaml:snakeyaml from 2.0 to 2.2 @dependabot
- (#4477) Bump h2 from 2.1.214 to 2.2.220 in /liquibase-dist @dependabot
- (#4410) Bump xml-maven-plugin from 1.0.2 to 1.1.0 @dependabot
- (#4557) Bump net.snowflake:snowflake-jdbc from 3.13.32 to 3.14.0 @dependabot
- (#4829) Bump org.slf4j:slf4j-jdk14 from 2.0.7 to 2.0.9 @dependabot
- (#4940) Bump org.projectlombok:lombok from 1.18.28 to 1.18.30 @dependabot
- (#4766) Bump org.mariadb.jdbc:mariadb-java-client from 3.1.4 to 3.2.0 @dependabot
- (#4923) DAT-15922 add fossa license checking action @jnewton03
Full Changelog: v4.23.2...v4.24.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/.
Meet 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
Set up a chat with the Product team
Thanks to everyone who helps make the Liquibase community strong!
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