dropView fails to find view and viewExists doesn't work on liquibase 4.32.0

I have two changesets in a change log (delete a view if it exists and add a view if it doesn’t exist) that works with liquibase 4.31.1 and fails with liquibase 4.32.0.

Any ideas?

From the error messages it looks like the view isn’t found by and the of the next change test fails to detect that the view is still present…?

Platform is: debian bookworm 12.11, amd64, java 21.0.4, derby 10.14.2.0 (memory database used for unit tests) and liquibase 4.32.0

Changesets and liquibase log error messages follows.

Here are the changesets:

    <changeSet author="sb" id="remove-measures_view-to-add-ratings">
        <preConditions onFail="CONTINUE" >
            <viewExists viewName="measures_view" />
        </preConditions>

        <dropView viewName="measures_view" />
    </changeSet>

    <changeSet author="sb" id="add-ratings-to-measures_view">
        <preConditions onFail="CONTINUE" >
            <not>
                <viewExists viewName="measures_view" />
            </not>
        </preConditions>

        <createView viewName="measures_view">select id,project_key,version,version_is_release,analysis_time,lines,bugs,new_bugs,vulnerabilities,new_vulnerabilities,code_smells,new_code_smells,coverage,new_coverage,complexity, (bugs + vulnerabilities + code_smells) as issues,sqale_rating,new_maintainability_rating,security_rating,new_security_rating,reliability_rating,new_reliability_rating from measures </createView>
    </changeSet>

Here are the error log messages for those changesets in 4.32.0:

[ERROR] Sonar Collector servlet unable to create or update the database schema liquibase.exception.LiquibaseException: java.lang.NullPointerException: Cannot invoke "java.sql.Connection.getMetaData()" because "this.con" is null
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
[INFO] sonar-collector webhook called for project no.priv.bang.sonar.sonar-collector:parent from server http://localhost:9000
[ERROR] Sonar Collector caught exception  java.net.ConnectException: Connection refused
May 27, 2025 11:02:14 PM liquibase.changelog
INFO: Creating database history table with name: APP.DATABASECHANGELOG
May 27, 2025 11:02:14 PM liquibase.changelog
INFO: Reading from APP.DATABASECHANGELOG
May 27, 2025 11:02:14 PM liquibase.snapshot
INFO: Creating snapshot
May 27, 2025 11:02:15 PM liquibase.lockservice
INFO: Successfully acquired change log lock
May 27, 2025 11:02:15 PM liquibase.command
INFO: Using deploymentId: 8379732046
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Reading from APP.DATABASECHANGELOG
Running Changeset: db-changelog/db-changelog-1.0.0.xml::sonar-collector-measures-1.0.0::sb
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Table measures created
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::sonar-collector-measures-1.0.0::sb ran successfully in 21ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measure-add-indexes-1.0.0::sb
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Index idx_project_key created
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Index idx_version_is_release created
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measure-add-indexes-1.0.0::sb ran successfully in 12ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measures-add-complexity::sb
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Columns complexity(BIGINT) added to measures
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.complexity
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measures-add-complexity::sb ran successfully in 26ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::create-measures_view::sb
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: View measures_view created
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::create-measures_view::sb ran successfully in 20ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measures-add-ratings::sb
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Columns sqale_rating(VARCHAR(1)),new_maintainability_rating(VARCHAR(1)),security_rating(VARCHAR(1)),new_security_rating(VARCHAR(1)),reliability_rating(VARCHAR(1)),new_reliability_rating(VARCHAR(1)) added to measures
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.sqale_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_maintainability_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.security_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_security_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.reliability_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_reliability_rating
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measures-add-ratings::sb ran successfully in 110ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::remove-measures_view-to-add-ratings::sb
May 27, 2025 11:02:15 PM liquibase.snapshot
INFO: Creating snapshot
May 27, 2025 11:02:15 PM liquibase.changelog
INFO: Continuing past: db-changelog/db-changelog-1.0.0.xml::remove-measures_view-to-add-ratings::sb despite precondition failure due to onFail='CONTINUE': 
          db-changelog/db-changelog-1.0.0.xml : View APP.measures_view does not exist

Running Changeset: db-changelog/db-changelog-1.0.0.xml::add-ratings-to-measures_view::sb
May 27, 2025 11:02:15 PM liquibase.snapshot
INFO: Creating snapshot
May 27, 2025 11:02:15 PM liquibase.changelog
SEVERE: ChangeSet db-changelog/db-changelog-1.0.0.xml::add-ratings-to-measures_view::sb encountered an exception.
liquibase.exception.DatabaseException: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'. [Failed SQL: (20000) CREATE VIEW APP.measures_view AS select id,project_key,version,version_is_release,analysis_time,lines,bugs,new_bugs,vulnerabilities,new_vulnerabilities,code_smells,new_code_smells,coverage,new_coverage,complexity, (bugs + vulnerabilities + code_smells) as issues,sqale_rating,new_maintainability_rating,security_rating,new_security_rating,reliability_rating,new_reliability_rating from measures]
	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:519)
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:85)
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:187)
	at liquibase.executor.AbstractExecutor.execute(AbstractExecutor.java:148)
	at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1198)
	at liquibase.changelog.ChangeSet.execute(ChangeSet.java:793)
	at liquibase.changelog.visitor.UpdateVisitor.executeAcceptedChange(UpdateVisitor.java:127)
	at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:71)
	at liquibase.changelog.ChangeLogIterator.lambda$run$0(ChangeLogIterator.java:133)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.changelog.ChangeLogIterator.lambda$run$1(ChangeLogIterator.java:122)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.Scope.child(Scope.java:282)
	at liquibase.Scope.child(Scope.java:286)
	at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:91)
	at liquibase.command.core.AbstractUpdateCommandStep.lambda$run$0(AbstractUpdateCommandStep.java:114)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.command.core.AbstractUpdateCommandStep.run(AbstractUpdateCommandStep.java:112)
	at liquibase.command.core.UpdateCommandStep.run(UpdateCommandStep.java:100)
	at liquibase.command.CommandScope.lambda$execute$6(CommandScope.java:263)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:201)
	at liquibase.command.CommandScope.execute(CommandScope.java:251)
	at no.priv.bang.karaf.liquibase.runner.LiquibaseClassPathChangeLogRunner.lambda$applyLiquibaseChangelist$0(LiquibaseClassPathChangeLogRunner.java:56)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:201)
	at no.priv.bang.karaf.liquibase.runner.LiquibaseClassPathChangeLogRunner.applyLiquibaseChangelist(LiquibaseClassPathChangeLogRunner.java:53)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServlet.createSchemaWithLiquibase(SonarCollectorServlet.java:92)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServlet.activate(SonarCollectorServlet.java:86)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServletTest.testReceiveSonarWebhookCall(SonarCollectorServletTest.java:111)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:775)
	at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:479)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:161)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:152)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:91)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:112)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:94)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:87)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:216)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:212)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:156)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:201)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:170)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:94)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:59)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:142)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:58)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
	at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$2(InterceptingLauncher.java:47)
	at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
	at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:46)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
	at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:100)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:530)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:758)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:453)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:211)
Caused by: java.sql.SQLException: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:511)
	... 113 more
Caused by: ERROR X0Y32: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.duplicateDescriptorException(Unknown Source)
	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.addDescriptor(Unknown Source)
	at org.apache.derby.impl.sql.execute.CreateViewConstantAction.executeConstantAction(Unknown Source)
	at org.apache.derby.impl.sql.execute.MiscResultSet.open(Unknown Source)
	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
	... 117 more


UPDATE SUMMARY
Run:                          5
Previously run:               0
Filtered out:                 1
-------------------------------
Total change sets:            7


FILTERED CHANGE SETS SUMMARY
Preconditions:                1

May 27, 2025 11:02:15 PM liquibase.util
INFO: UPDATE SUMMARY
May 27, 2025 11:02:15 PM liquibase.util
INFO: Run:                          5
May 27, 2025 11:02:15 PM liquibase.util
INFO: Previously run:               0
May 27, 2025 11:02:15 PM liquibase.util
INFO: Filtered out:                 1
May 27, 2025 11:02:15 PM liquibase.util
INFO: -------------------------------
May 27, 2025 11:02:15 PM liquibase.util
INFO: Total change sets:            7
May 27, 2025 11:02:15 PM liquibase.util
INFO: FILTERED CHANGE SETS SUMMARY
May 27, 2025 11:02:15 PM liquibase.util
INFO: Preconditions:                1
May 27, 2025 11:02:15 PM liquibase.util
INFO: Update summary generated
May 27, 2025 11:02:15 PM liquibase.command
INFO: Update command encountered an exception.
May 27, 2025 11:02:15 PM liquibase.lockservice
INFO: Successfully released change log lock
May 27, 2025 11:02:15 PM liquibase.command
INFO: Logging exception.
ERROR: Exception Details
ERROR: Exception Primary Class:  StandardException
ERROR: Exception Primary Reason:  Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
ERROR: Exception Primary Source:  Apache Derby 10.14.2.0 - (1828579)
May 27, 2025 11:02:15 PM liquibase.command
INFO: Command execution complete

It could be the positively antiquated derby version I’m running the tests in…?

I’m using derby version 10.14.2.0, because that’s the version compatible with pax-jdbc 1.5.7, but that’s not important for this particular projects since I never start it with a derby test database in apache karaf.

I tried using derby 10.17.1.0 which is the newest (from November 10 2023, so not super new), but that failed because it was compiled with Java 19 (runtime 63) and it refused to run in a JVM with runtime 61 (Java 17), which is kind of weird because the default Java for me is Java 21 and 21 is the one I had selected as the eclipse java runtime.

So I tried the next one after that: derby 10.16.1.1 but that had the same problem as 10.14.2.0

Sorry to hear the new release is giving you trouble @SteinarBang. Thanks for the detailed post on what you’re experiencing. When I review the changelog and log output you’ve shared, it leads me to suspect you may be running afoul of a casing issue. Your changelog has the view name in lower case consistently. The log reports that the view name is in all caps:

liquibase.exception.DatabaseException: Table/View ‘MEASURES_VIEW’ already exists in Schema ‘APP’.

I’m not sure what change could have caused this, but casing issues often creep in when drivers are updated or we address other issues and features with DB connections and metadata look ups. I would recommend updating the viewName attribute in your pre-conditions to MEASURES_VIEW to see if that unblocks you. Let me know how it goes!

Thanks, I will try.

But if I change the case, that will change the checksums of the changesets and create problems with the production PostgreSQL database?

(the derby memory database (which is the one with the problem) is just used for unit tests)

The first thing I tried was to switch the of maven-compiler-plugin from 17 to 21 so that I could run derby 10.17.1.0 instead of derby 10.16.1.1 to see if that made a difference: it didn’t. I got the same errors around views.

Then I tried changing from “measures_view” to “MEASURES_VIEW” but still got the same error.

Here is the changelog file with uppercased view names: db-changelog-1.0.0.xml · GitHub

Here is the log output from the failing test after uppercasing the view name (running just the single test in the eclipse test console to keep the noise down, but all database setups have the same migration failures):

Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
WARNING: A Java agent has been loaded dynamically (/home/sb/.m2/repository/net/bytebuddy/byte-buddy-agent/1.17.5/byte-buddy-agent-1.17.5.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
May 30, 2025 7:29:16 AM liquibase.changelog
INFO: Creating database history table with name: APP.DATABASECHANGELOG
May 30, 2025 7:29:16 AM liquibase.changelog
INFO: Reading from APP.DATABASECHANGELOG
May 30, 2025 7:29:16 AM liquibase.snapshot
INFO: Creating snapshot
May 30, 2025 7:29:17 AM liquibase.lockservice
INFO: Successfully acquired change log lock
May 30, 2025 7:29:17 AM liquibase.command
INFO: Using deploymentId: 8582956175
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Reading from APP.DATABASECHANGELOG
Running Changeset: db-changelog/db-changelog-1.0.0.xml::sonar-collector-measures-1.0.0::sb
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Table measures created
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::sonar-collector-measures-1.0.0::sb ran successfully in 15ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measure-add-indexes-1.0.0::sb
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Index idx_project_key created
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Index idx_version_is_release created
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measure-add-indexes-1.0.0::sb ran successfully in 10ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measures-add-complexity::sb
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Columns complexity(BIGINT) added to measures
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.complexity
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measures-add-complexity::sb ran successfully in 21ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::create-measures_view::sb
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: View MEASURES_VIEW created
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::create-measures_view::sb ran successfully in 17ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::measures-add-ratings::sb
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Columns sqale_rating(VARCHAR(1)),new_maintainability_rating(VARCHAR(1)),security_rating(VARCHAR(1)),new_security_rating(VARCHAR(1)),reliability_rating(VARCHAR(1)),new_reliability_rating(VARCHAR(1)) added to measures
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.sqale_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_maintainability_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.security_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_security_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.reliability_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: NOT NULL constraint has been added to measures.new_reliability_rating
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: ChangeSet db-changelog/db-changelog-1.0.0.xml::measures-add-ratings::sb ran successfully in 97ms
Running Changeset: db-changelog/db-changelog-1.0.0.xml::remove-measures_view-to-add-ratings::sb
May 30, 2025 7:29:17 AM liquibase.snapshot
INFO: Creating snapshot
May 30, 2025 7:29:17 AM liquibase.changelog
INFO: Continuing past: db-changelog/db-changelog-1.0.0.xml::remove-measures_view-to-add-ratings::sb despite precondition failure due to onFail='CONTINUE': 
          db-changelog/db-changelog-1.0.0.xml : View APP.MEASURES_VIEW does not exist

Running Changeset: db-changelog/db-changelog-1.0.0.xml::add-ratings-to-measures_view::sb
May 30, 2025 7:29:17 AM liquibase.snapshot
INFO: Creating snapshot
May 30, 2025 7:29:17 AM liquibase.changelog
SEVERE: ChangeSet db-changelog/db-changelog-1.0.0.xml::add-ratings-to-measures_view::sb encountered an exception.
liquibase.exception.DatabaseException: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'. [Failed SQL: (20000) CREATE VIEW APP.MEASURES_VIEW AS select id,project_key,version,version_is_release,analysis_time,lines,bugs,new_bugs,vulnerabilities,new_vulnerabilities,code_smells,new_code_smells,coverage,new_coverage,complexity, (bugs + vulnerabilities + code_smells) as issues,sqale_rating,new_maintainability_rating,security_rating,new_security_rating,reliability_rating,new_reliability_rating from measures]
	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:519)
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:85)
	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:187)
	at liquibase.executor.AbstractExecutor.execute(AbstractExecutor.java:148)
	at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1198)
	at liquibase.changelog.ChangeSet.execute(ChangeSet.java:793)
	at liquibase.changelog.visitor.UpdateVisitor.executeAcceptedChange(UpdateVisitor.java:127)
	at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:71)
	at liquibase.changelog.ChangeLogIterator.lambda$run$0(ChangeLogIterator.java:133)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.changelog.ChangeLogIterator.lambda$run$1(ChangeLogIterator.java:122)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.Scope.child(Scope.java:282)
	at liquibase.Scope.child(Scope.java:286)
	at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:91)
	at liquibase.command.core.AbstractUpdateCommandStep.lambda$run$0(AbstractUpdateCommandStep.java:114)
	at liquibase.Scope.lambda$child$0(Scope.java:216)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:215)
	at liquibase.Scope.child(Scope.java:194)
	at liquibase.command.core.AbstractUpdateCommandStep.run(AbstractUpdateCommandStep.java:112)
	at liquibase.command.core.UpdateCommandStep.run(UpdateCommandStep.java:100)
	at liquibase.command.CommandScope.lambda$execute$6(CommandScope.java:263)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:201)
	at liquibase.command.CommandScope.execute(CommandScope.java:251)
	at no.priv.bang.karaf.liquibase.runner.LiquibaseClassPathChangeLogRunner.lambda$applyLiquibaseChangelist$0(LiquibaseClassPathChangeLogRunner.java:56)
	at liquibase.Scope.child(Scope.java:225)
	at liquibase.Scope.child(Scope.java:201)
	at no.priv.bang.karaf.liquibase.runner.LiquibaseClassPathChangeLogRunner.applyLiquibaseChangelist(LiquibaseClassPathChangeLogRunner.java:53)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServlet.createSchemaWithLiquibase(SonarCollectorServlet.java:92)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServlet.activate(SonarCollectorServlet.java:86)
	at no.priv.bang.sonar.collector.webhook.SonarCollectorServletTest.testMeasuresView(SonarCollectorServletTest.java:265)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:775)
	at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:479)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:161)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:152)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:91)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:112)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:94)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:87)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:216)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:212)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:156)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:201)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:170)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:94)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:59)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:142)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:58)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
	at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$2(InterceptingLauncher.java:47)
	at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
	at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:46)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
	at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:100)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:530)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:758)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:453)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:211)
Caused by: java.sql.SQLException: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:230)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:431)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:360)
	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2400)
	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:86)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1436)
	at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:710)
	at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:637)
	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:511)
	... 111 more
Caused by: ERROR X0Y32: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
	at org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:299)
	at org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:294)
	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.duplicateDescriptorException(DataDictionaryImpl.java:2034)
	at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.addDescriptor(DataDictionaryImpl.java:2024)
	at org.apache.derby.impl.sql.execute.CreateViewConstantAction.executeConstantAction(CreateViewConstantAction.java:173)
	at org.apache.derby.impl.sql.execute.MiscResultSet.open(MiscResultSet.java:61)
	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:470)
	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:349)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1344)
	... 114 more


UPDATE SUMMARY
Run:                          5
Previously run:               0
Filtered out:                 1
-------------------------------
Total change sets:            7


FILTERED CHANGE SETS SUMMARY
Preconditions:                1

May 30, 2025 7:29:17 AM liquibase.util
INFO: UPDATE SUMMARY
May 30, 2025 7:29:17 AM liquibase.util
INFO: Run:                          5
May 30, 2025 7:29:17 AM liquibase.util
INFO: Previously run:               0
May 30, 2025 7:29:17 AM liquibase.util
INFO: Filtered out:                 1
May 30, 2025 7:29:17 AM liquibase.util
INFO: -------------------------------
May 30, 2025 7:29:17 AM liquibase.util
INFO: Total change sets:            7
May 30, 2025 7:29:17 AM liquibase.util
INFO: FILTERED CHANGE SETS SUMMARY
May 30, 2025 7:29:17 AM liquibase.util
INFO: Preconditions:                1
May 30, 2025 7:29:17 AM liquibase.util
INFO: Update summary generated
May 30, 2025 7:29:17 AM liquibase.command
INFO: Update command encountered an exception.
May 30, 2025 7:29:17 AM liquibase.lockservice
INFO: Successfully released change log lock
May 30, 2025 7:29:17 AM liquibase.command
INFO: Logging exception.
ERROR: Exception Details
ERROR: Exception Primary Class:  StandardException
ERROR: Exception Primary Reason:  Table/View 'MEASURES_VIEW' already exists in Schema 'APP'.
ERROR: Exception Primary Source:  Apache Derby 10.17.1.0 - (1913217)
May 30, 2025 7:29:17 AM liquibase.command
INFO: Command execution complete
May 30, 2025 7:29:17 AM liquibase.analytics
SEVERE: Analytics is disabled because this is not a release build and the user has not provided a value for the liquibase.analytics.devOverride option.
May 30, 2025 7:29:17 AM liquibase.database
INFO: Shutting down derby connection: jdbc:derby:memory:sonar4;shutdown=true
[ERROR] Sonar Collector servlet unable to create or update the database schema liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset db-changelog/db-changelog-1.0.0.xml::add-ratings-to-measures_view::sb:
     Reason: liquibase.exception.DatabaseException: Table/View 'MEASURES_VIEW' already exists in Schema 'APP'. [Failed SQL: (20000) CREATE VIEW APP.MEASURES_VIEW AS select id,project_key,version,version_is_release,analysis_time,lines,bugs,new_bugs,vulnerabilities,new_vulnerabilities,code_smells,new_code_smells,coverage,new_coverage,complexity, (bugs + vulnerabilities + code_smells) as issues,sqale_rating,new_maintainability_rating,security_rating,new_security_rating,reliability_rating,new_reliability_rating from measures]
[INFO] sonar-collector webhook called for project no.priv.bang.sonar.sonar-collector:parent from server http://localhost:9000

@Pete Will it help you if I can make this a test case you can debug?
Is there a particular form this test case should have?
Will a maven project with a failing JUnit 5 test be ok?
Do you have any runtime constraints? (I run only Java 17 and 21 currently and am in the process of phasing out 17 and targetting 25)

Here is a simplified test case GitHub - steinarb/liquibase-derby-view-problem-repro: Liquibase 4.32.0 derby view problem repro

I will create an issue for this problem and refer to the test case.

Liquibase issue created: dropView fails to find view and viewExists doesn’t work in derby on liquibase 4.32.0 · Issue #7003 · liquibase/liquibase · GitHub

Thanks @SteinarBang ! I was going to suggest opening an issue so the team could look at it. At this point it sounds like there’s no workaround.