MariaDB 10.3.6: ColumnSnapshotGenerator.readDefaultValue() failed with NumberFormatException on parsing value "NULL"

Description

With help of Liquibase 3.3.1 on MariaDB 10.3.6 we are creating some table with column definition:

... <column name="issued_field" type="BOOLEAN"/> ...

It successfully creates table with column:

MariaDB [DB]> describe tableName; +----------------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------------+--------------+------+-----+---------+-------+ ... | issued_field | bit(1) | YES | | NULL | | ... +----------------------------+--------------+------+-----+---------+-------+

But on next DB migration step with precondition check:

... <preConditions onFail="MARK_RAN"> <not> <columnExists tableName="someAnotherTable" columnName="some_field"/> </not> </preConditions> ...

updating process is failing with error:

Reason: liquibase.exception.MigrationFailedException: Migration failed for change set upgrade.xml::0110::migration: Reason: upgrade.xml : liquibase.precondition.core.ColumnExistsPrecondition@32cfbd5b : For input string: "NULL" at liquibase.changelog.ChangeSet.execute(ChangeSet.java:514) at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:43) at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) at liquibase.Liquibase.update(Liquibase.java:200) at liquibase.Liquibase.update(Liquibase.java:181) at liquibase.Liquibase.update(Liquibase.java:174) ... Caused by: liquibase.exception.PreconditionErrorException: Precondition Error at liquibase.precondition.core.ColumnExistsPrecondition.check(ColumnExistsPrecondition.java:81) at liquibase.precondition.core.NotPrecondition.check(NotPrecondition.java:38) at liquibase.precondition.core.AndPrecondition.check(AndPrecondition.java:43) at liquibase.precondition.core.PreconditionContainer.check(PreconditionContainer.java:201) at liquibase.changelog.ChangeSet.execute(ChangeSet.java:471) ... 79 common frames omitted Caused by: liquibase.exception.DatabaseException: java.lang.NumberFormatException: For input string: "NULL" at liquibase.snapshot.jvm.ColumnSnapshotGenerator.snapshotObject(ColumnSnapshotGenerator.java:69) at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:60) at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:50) at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:163) at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:241) at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:195) at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:177) at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:241) at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:263) at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:195) at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:177) at liquibase.snapshot.DatabaseSnapshot.init(DatabaseSnapshot.java:60) at liquibase.snapshot.DatabaseSnapshot.<init>(DatabaseSnapshot.java:37) at liquibase.snapshot.JdbcDatabaseSnapshot.<init>(JdbcDatabaseSnapshot.java:25) at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:126) at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:119) at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:107) at liquibase.snapshot.SnapshotGeneratorFactory.has(SnapshotGeneratorFactory.java:97) at liquibase.precondition.core.ColumnExistsPrecondition.check(ColumnExistsPrecondition.java:77) ... 83 common frames omitted Caused by: java.lang.NumberFormatException: For input string: "NULL" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.<init>(Integer.java:867) at liquibase.util.SqlUtil.parseValue(SqlUtil.java:129) at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readDefaultValue(ColumnSnapshotGenerator.java:345) at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readColumn(ColumnSnapshotGenerator.java:200) at liquibase.snapshot.jvm.ColumnSnapshotGenerator.snapshotObject(ColumnSnapshotGenerator.java:45) ... 101 common frames omitted

During debug this issue I may confirm that columnMetadataResultSet.get("COLUMN_DEF") returned "NULL" string value by some unknown reason.
But I can not reproduce this issue on MariaDB 10.1.31 and during debug I saw that default value was just null value instead of string "NULL".

So, looks like we need fix similar to CORE-2133, DB2 sees empty string default values as "NULL", especially in oracle-compatibility mode.

Environment

Liquibase 3.3.1
MariaDB 10.3.6
Ubuntu 16.04
Java 1.8.0_131

Activity

Show:

Bojan Milenkoski August 22, 2019 at 12:23 PM

Same issue here (older version of Liquibase):

Liquibase 3.1.1

MariaDB 10.4.7

OpenJDK 1.8.0_212

Details

Reporter

Affects versions

Priority

Created May 16, 2018 at 5:21 PM
Updated August 22, 2019 at 12:23 PM

Flag notifications