Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning when precondition references column starting with underscore #5666

Closed
1 of 2 tasks
PetterIsberg opened this issue Mar 7, 2024 · 3 comments · Fixed by #5795
Closed
1 of 2 tasks

Warning when precondition references column starting with underscore #5666

PetterIsberg opened this issue Mar 7, 2024 · 3 comments · Fixed by #5795

Comments

@PetterIsberg
Copy link

Search first

  • I searched and no similar issues were found

Description

Hi.

Using Liquibase 4.24.0 or newer (tested with 4.26.0) we are getting warnings in the Liquibase log / output when we have a precondition on a column starting with an underscore.

        <preConditions onFail="HALT">
            <columnExists tableName="table_a" columnName="_a" />
        </preConditions>

(Full example below)

Default schema is configured in liquibase.properties: defaultSchemaName: my_db and the tables are indeed created in this schema.
The warning indicates that something regarding fetching column information is not using the default schema:

[INFO] ChangeSet changelog-01.xml::1.1::p ran successfully in 17ms
[INFO] Running Changeset: changelog-01.xml::1.2::p
[WARNING] Error fetching extra values
liquibase.exception.DatabaseException: Expected single row from SELECT EXTRA FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'null'
AND TABLE_NAME = 'table_a'
AND COLUMN_NAME = '_a' but got 0

Changing the precondition to col_a does not give the same warning, we have only been able to reproduce the issue with columns starting with an underscore.

Steps To Reproduce

Create a changelog with a chagneset checking if a column exists, where the column name starts with an underscore

    <changeSet id="1.1" author="p">
        <createTable tableName="table_a">
            <column name="col_a" type="int"></column>
            <column name="_a" type="int"></column>
        </createTable>
    </changeSet>

    <changeSet id="1.2" author="p">
        <preConditions onFail="HALT">
            <columnExists tableName="table_a" columnName="_a" />
        </preConditions>

        <addColumn tableName="table_a">
            <column name="column_b" type="int"></column>
        </addColumn>
    </changeSet>

Set defaultSchemaName in properties-file or as commandline argument.

run mvn liquibase:update

Expected/Desired Behavior

No warnings in the output

Liquibase Version

4.24.0+

Database Vendor & Version

MySql 8.x

Liquibase Integration

maven

Liquibase Extensions

No response

OS and/or Infrastructure Type/Provider

Ubuntu

Additional Context

Command output, including stacktrace:

Starting Liquibase at 16:01:27 (version 4.24.0 #14062 built at 2023-09-28 12:18+0000)
[INFO] Parsing Liquibase Properties File liquibase.properties for changeLog parameters
[INFO] Executing on Database: jdbc:mysql://localhost:3306
[INFO] Creating database history table with name: a.DATABASECHANGELOG
[INFO] Reading from a.DATABASECHANGELOG
[WARNING] Integer display width is deprecated and will be removed in a future release.
[INFO] Successfully acquired change log lock
[INFO] Using deploymentId: 9823688484
[INFO] Reading from a.DATABASECHANGELOG
[INFO] Running Changeset: changelog-01.xml::1.1::p
[INFO] Table table_a created
[INFO] ChangeSet changelog-01.xml::1.1::p ran successfully in 13ms
[INFO] Running Changeset: changelog-01.xml::1.2::p
[WARNING] Error fetching extra values
liquibase.exception.DatabaseException: Expected single row from SELECT EXTRA FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'null'
AND TABLE_NAME = 'table_a'
AND COLUMN_NAME = '_a' but got 0
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:242)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:253)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:248)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readDefaultValueForMysqlDatabase (ColumnSnapshotGenerator.java:599)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readDefaultValue (ColumnSnapshotGenerator.java:558)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readColumn (ColumnSnapshotGenerator.java:291)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.snapshotObject (ColumnSnapshotGenerator.java:83)
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot (JdbcSnapshotGenerator.java:65)
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot (SnapshotGeneratorChain.java:49)
    at liquibase.snapshot.DatabaseSnapshot.include (DatabaseSnapshot.java:313)
    at liquibase.snapshot.DatabaseSnapshot.init (DatabaseSnapshot.java:106)
    at liquibase.snapshot.DatabaseSnapshot.<init> (DatabaseSnapshot.java:59)
    at liquibase.snapshot.JdbcDatabaseSnapshot.<init> (JdbcDatabaseSnapshot.java:34)
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot (SnapshotGeneratorFactory.java:215)
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot (SnapshotGeneratorFactory.java:244)
    at liquibase.snapshot.SnapshotGeneratorFactory.has (SnapshotGeneratorFactory.java:133)
    at liquibase.precondition.core.ColumnExistsPrecondition.checkUsingSnapshot (ColumnExistsPrecondition.java:97)
    at liquibase.precondition.core.ColumnExistsPrecondition.check (ColumnExistsPrecondition.java:85)
    at liquibase.precondition.core.AndPrecondition.check (AndPrecondition.java:39)
    at liquibase.precondition.core.PreconditionContainer.check (PreconditionContainer.java:213)
    at liquibase.changelog.ChangeSet.execute (ChangeSet.java:659)
    at liquibase.changelog.visitor.UpdateVisitor.executeAcceptedChange (UpdateVisitor.java:118)
    at liquibase.changelog.visitor.UpdateVisitor.visit (UpdateVisitor.java:68)
    at liquibase.changelog.ChangeLogIterator$2.lambda$run$0 (ChangeLogIterator.java:110)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at liquibase.changelog.ChangeLogIterator$2.run (ChangeLogIterator.java:100)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at liquibase.Scope.child (Scope.java:254)
    at liquibase.changelog.ChangeLogIterator.run (ChangeLogIterator.java:74)
    at liquibase.command.core.AbstractUpdateCommandStep.lambda$doRun$1 (AbstractUpdateCommandStep.java:105)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.command.core.AbstractUpdateCommandStep.doRun (AbstractUpdateCommandStep.java:104)
    at liquibase.command.core.AbstractUpdateCommandStep.lambda$run$0 (AbstractUpdateCommandStep.java:63)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.command.core.AbstractUpdateCommandStep.run (AbstractUpdateCommandStep.java:62)
    at liquibase.command.core.UpdateCommandStep.run (UpdateCommandStep.java:106)
    at com.datical.liquibase.ext.command.ProUpdateCommandStep.run (Unknown Source)
    at liquibase.command.CommandScope.execute (CommandScope.java:214)
    at liquibase.Liquibase.lambda$update$0 (Liquibase.java:222)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Liquibase.runInScope (Liquibase.java:1371)
    at liquibase.Liquibase.update (Liquibase.java:211)
    at liquibase.Liquibase.update (Liquibase.java:193)
    at liquibase.Liquibase.update (Liquibase.java:372)
    at org.liquibase.maven.plugins.LiquibaseUpdate.lambda$doUpdate$0 (LiquibaseUpdate.java:46)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate (LiquibaseUpdate.java:42)
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask (AbstractLiquibaseUpdateMojo.java:41)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$1 (AbstractLiquibaseMojo.java:862)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$2 (AbstractLiquibaseMojo.java:862)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$3 (AbstractLiquibaseMojo.java:779)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute (AbstractLiquibaseMojo.java:715)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
Caused by: liquibase.exception.DatabaseException: Empty result set, expected one row
    at liquibase.util.JdbcUtil.requiredSingleResult (JdbcUtil.java:134)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:240)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:253)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject (JdbcExecutor.java:248)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readDefaultValueForMysqlDatabase (ColumnSnapshotGenerator.java:599)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readDefaultValue (ColumnSnapshotGenerator.java:558)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.readColumn (ColumnSnapshotGenerator.java:291)
    at liquibase.snapshot.jvm.ColumnSnapshotGenerator.snapshotObject (ColumnSnapshotGenerator.java:83)
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot (JdbcSnapshotGenerator.java:65)
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot (SnapshotGeneratorChain.java:49)
    at liquibase.snapshot.DatabaseSnapshot.include (DatabaseSnapshot.java:313)
    at liquibase.snapshot.DatabaseSnapshot.init (DatabaseSnapshot.java:106)
    at liquibase.snapshot.DatabaseSnapshot.<init> (DatabaseSnapshot.java:59)
    at liquibase.snapshot.JdbcDatabaseSnapshot.<init> (JdbcDatabaseSnapshot.java:34)
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot (SnapshotGeneratorFactory.java:215)
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot (SnapshotGeneratorFactory.java:244)
    at liquibase.snapshot.SnapshotGeneratorFactory.has (SnapshotGeneratorFactory.java:133)
    at liquibase.precondition.core.ColumnExistsPrecondition.checkUsingSnapshot (ColumnExistsPrecondition.java:97)
    at liquibase.precondition.core.ColumnExistsPrecondition.check (ColumnExistsPrecondition.java:85)
    at liquibase.precondition.core.AndPrecondition.check (AndPrecondition.java:39)
    at liquibase.precondition.core.PreconditionContainer.check (PreconditionContainer.java:213)
    at liquibase.changelog.ChangeSet.execute (ChangeSet.java:659)
    at liquibase.changelog.visitor.UpdateVisitor.executeAcceptedChange (UpdateVisitor.java:118)
    at liquibase.changelog.visitor.UpdateVisitor.visit (UpdateVisitor.java:68)
    at liquibase.changelog.ChangeLogIterator$2.lambda$run$0 (ChangeLogIterator.java:110)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at liquibase.changelog.ChangeLogIterator$2.run (ChangeLogIterator.java:100)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at liquibase.Scope.child (Scope.java:254)
    at liquibase.changelog.ChangeLogIterator.run (ChangeLogIterator.java:74)
    at liquibase.command.core.AbstractUpdateCommandStep.lambda$doRun$1 (AbstractUpdateCommandStep.java:105)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.command.core.AbstractUpdateCommandStep.doRun (AbstractUpdateCommandStep.java:104)
    at liquibase.command.core.AbstractUpdateCommandStep.lambda$run$0 (AbstractUpdateCommandStep.java:63)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.command.core.AbstractUpdateCommandStep.run (AbstractUpdateCommandStep.java:62)
    at liquibase.command.core.UpdateCommandStep.run (UpdateCommandStep.java:106)
    at com.datical.liquibase.ext.command.ProUpdateCommandStep.run (Unknown Source)
    at liquibase.command.CommandScope.execute (CommandScope.java:214)
    at liquibase.Liquibase.lambda$update$0 (Liquibase.java:222)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Liquibase.runInScope (Liquibase.java:1371)
    at liquibase.Liquibase.update (Liquibase.java:211)
    at liquibase.Liquibase.update (Liquibase.java:193)
    at liquibase.Liquibase.update (Liquibase.java:372)
    at org.liquibase.maven.plugins.LiquibaseUpdate.lambda$doUpdate$0 (LiquibaseUpdate.java:46)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at liquibase.Scope.child (Scope.java:250)
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate (LiquibaseUpdate.java:42)
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask (AbstractLiquibaseUpdateMojo.java:41)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$1 (AbstractLiquibaseMojo.java:862)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$2 (AbstractLiquibaseMojo.java:862)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.lambda$execute$3 (AbstractLiquibaseMojo.java:779)
    at liquibase.Scope.lambda$child$0 (Scope.java:184)
    at liquibase.Scope.child (Scope.java:193)
    at liquibase.Scope.child (Scope.java:183)
    at liquibase.Scope.child (Scope.java:162)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute (AbstractLiquibaseMojo.java:715)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
[INFO] Columns column_b(int) added to table_a
[INFO] ChangeSet changelog-01.xml::1.2::p ran successfully in 124ms

UPDATE SUMMARY
Run:                          2
Previously run:               0
Filtered out:                 0
-------------------------------
Total change sets:            2

Are you willing to submit a PR?

  • I'm willing to submit a PR (Thank you!)
@PetterIsberg
Copy link
Author

Adding schemaName="${database.defaultSchemaName}" to the columnExists precondition gets rid of the exception and warning.

@tati-qalified
Copy link
Contributor

Hi @PetterIsberg, thank you for reporting this issue.

I have been able to replicate it with Liquibase versions 4.24.0 and the latest 4.27.0. The warning appears only for MySQL and only for the columnExists precondition.

Having a column starting with an underscore will not generate any warnings. Referencing that column with columnExists will.

If this is done with a table starting with an underscore, the tableExists precondition does't generate any warnings either.

It's a strange bug for sure, but luckily it doesn't block the execution of the changesets. I'll be leaving this ticket open for the community to propose a fix for. Our development team will be available to provide guidance if necessary.

Thank you,
Tatiana

@mpvvliet
Copy link
Contributor

mpvvliet commented Apr 14, 2024

The reason Liquibase acts differently based on the column name starting with a _ is this line of code in ColumnExistsPrecondition. Because of the underscore, the existence of the column is checked using a snapshot instead of a single SQL query.

Changing the regexp to match columns with a starting underscore works with MySQL, but I'm not sure it will work for every database. I think there is probably a safer fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants