Liquibase 4.26.0 Release Notes

Liquibase 4.26.0 is a major release

Note: Liquibase 4.26.0 contains several Notable Changes for Liquibase Pro users: Advanced IF conditionals, Simpler Regex-based pattern checks, and Checks Reports.

Full changelog: 4.25.1 - 4.26.0 (February 7, 2024)

Notable Changes

Liquibase Pro

Liquibase Flow: Advanced IF conditionals

  • In Liquibase flow files, use AND (&&), OR (||), and NOT (!) logic options, in single or grouped conditions, as well as substring matching and checking if a key or file exists.
  • Learn more here: flow files, Flow Conditionals, Flow Variables

Quality Checks: Simpler Regex-based pattern checks

Observability: Checks Reports

  • Understand and share the data on the execution of Quality Checks with a new Checks Report. Easily scan and understand your results with the summary section, Analyze your checks by viewing details by ChangeSet, by check, and by database. And collaborate with your team with shareable report.
  • Learn more here: Liquibase Observability, Checks Report

Formatted SQL changelogs can use rollback scripts

  • Previously, Formatted SQL ChangeLogs could only run in-line rollback commands. But, sometimes you need something more complex, like a full rollbackSqlFile. This functionality has been available for XML, JSON, and YAML formatted changelogs.
  • Learn more here: Example Changelogs: SQL Format

Liquibase Open Source and Liquibase Pro

Liquibase capability enhancements

  • The diffChangeLog command has been updated only to create a changelog when changes are detected. This is a change from the previous behavior of creating an empty changelog.
  • Adds two new generateChangelog options:
    • --run-on-change-types=createView,createProcedure will set runOnChange="true" for each changeSet which contains solely createView and createProcedure changes. For backward compatibility, the default is an empty list.
    • --replace-if-exists=createView,createProcedure will set replaceIfExists="true" for each createView and createProcedure changes. For backward compatibility, the default is an empty list.
  • Fix a bug that previously included substituted properties in the checksum calculation for SQLFile change types

JDBC driver updates

  • MariaDB JDBC driver updated from 3.2.0 to 3.3.2
  • Snowflake JDBC driver updated from 3.14.3 to 3.14.4
  • Firebird SQL JDBC driver updated from 5.0.2.java8 to 5.0.3.java8
  • SQLite JDBC driver updated from 3.43.2.2 to 3.44.1.0

Database platform improvements

General

  • Adds create table if not exists support for the following databases: CockroachDB, DB2 LUW, H2, HSQL, Informix, Ingres9, MariaDB, MySQL, Postgres, and SQLite.
  • Fix the generated default column value in PostgreSQL and Oracle for char/clob data types.

Maria DB

  • Adds Liquibase support for Maria DB 10.10.6 and later's new UUID data type.
  • For boolean columns on MariaDB, revert the change made in Liquibase 4.25.1. It has been returned from TINYINT back to TINYINT(1).

DB2 z/OS

  • Improves support for the empty table precondition.

Java API Changes

  • AbstractJdbcDatabase now delegates the execution of Changes to the executor, which allows the executor more control over how Changes are executed. This gives executors access to Changes and ChangeSets which enables the management of transaction commits.
  • Failure exceptions in ChangeSet.execute are now logged as a SEVERE level for easier access to a concise error message.

Changelog

[PRO] Changelog

[PRO] Security, Driver and Other Updates

  • Bump com.oracle.database.jdbc:ojdbc8 from 19.20.0.0 to 19.21.0.0 #1339 by dependabot bot

[OSS] Changelog

New Features

  • (#5525) Add labels, context and rollback on error info to report (DAT-16531) @abrackx
  • (#5490) DAT-16675: add support for command aliases @StevenMassaro
  • (#5406) Allow snapshot control creation to be overridden for snapshot filters DAT-16054 @wwillard7800
  • (#5256) Added exclusion for MVEL DAT-16282 @wwillard7800
  • (#5336) add default constructor + setters to RanChangeSet & related classes @rursprung
  • (#5340) Fixes #2352 by adding support for loading embedded jar files @hayeskl
  • (#5164) Write changelog only if changes exist @brachi-wernick
  • (#5360) Introduce support for primitive types in new changes @fbiville
  • (#5274) Use mariadb UUID when specify UUID type @mohamed-ahrrass-nw
  • (#5413) add changeset identifier to exceptions thrown from LiquibaseSqlParser (DAT-16397) @StevenMassaro
  • (#5402) Adds pending changesets to update report (DAT-16332) @abrackx
  • (#3581) Support create table if not exists @taeyeon-Kim
  • (#4635) generateChangelog optionally creates runOnChange=true and replaceIfExists=true for createView changes @mkarg

Changes

  • (#5329) Support runWith executors committing after the change set completes @dzeigler
  • (#5452) Log the exception in case of failure in ChangeSet.execute @bignoncedric
  • (#5043) Improve support for DB2[z] empty table precondition @MichaelKern-IVV
  • (#5424) Moved saved_state/compareGenerateSql.. directory from java source to resources bundle @MalloD12
  • (#5462) map testcontainers to random available host port @StevenMassaro
  • (#5457) prevent multiple databases in test classes @StevenMassaro
  • (#5416) do not clear a subset of MDC keys when scope exits (DAT-16500) @StevenMassaro
  • (#5417) switch integration tests to use h2 where possible (DAT-16015) @StevenMassaro
  • (#5347) Added extra space for command help arguments display DAT-13864 @wwillard7800

Bug Fixes

  • (#5522) MariaDB boolean: back to TINYINT(1) instead of TINYINT (MySQL) @famod
  • (#5524) Don't execute CustomSqlChanges to generate logs @Alf-Melmac
  • (#5498) Add missing OSGI settings @filipelautert
  • (#5391) fix SQLFileChange.generateCheckSum() to calculate checksum without property substitution @jglass524
  • (#5398) Fix issue #3516 addColumn ignores deleteCascade=true @andreiyusupau
  • (#5479) do not skip over duplicate tags when doing rollback (DAT-16277) @StevenMassaro
  • (#5484) Workaround failing test containers startup for mysql by falling back to previous version. @abrackx
  • (#5397) Fix DatabaseFactory db loading when Database implementation is specified (fix for Issues 5371 & 5396 ) @dhsmith1001
  • (#5202) 4464 fix generated default column value using in PostgreSQL and Oracle for char/clob data types @LonwoLonwo
  • (#5350) Fix getSerializableFieldValue when dealing with rollback object @MalloD12
  • (#5414) Fix NPE in generateChangelog and diffChangelog DAT-16534 @wwillard7800
  • (#5267) fix #5266: comma separated dbms-attribute for createProcedure-change triggers validation-check @jclohmann