You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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
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!)
The text was updated successfully, but these errors were encountered:
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.
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.
Search first
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.
(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:
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
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:
Are you willing to submit a PR?
The text was updated successfully, but these errors were encountered: