[ 
https://issues.apache.org/jira/browse/IGNITE-24514?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergey Korotkov updated IGNITE-24514:
-------------------------------------
    Description: 
Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) 
can leave the H2 sql query engine in the state that the following bad things 
can happen:

- Table can not be dropped correctly. Call to {{ignite.destroyCache}} or "DROP 
TABLE" SQL  succseed. Ignite cache is removed but not the table.
- Table can not be recreated (it fails saying table already exists)
- If table has index and created via the Ignite API and {{QueryEntity}}'s  the 
ignite node crashes with AsserionError.
 

Sample query:
{code:sql}
WITH cte AS (SELECT id FROM T2) 
SELECT * FROM absent_table_to_emulate_statement_parse_failure
{code}

After such a query the drop table fails leaving the below WARNING in the ignite 
node log.  Reason is that the temporary view created for the CTE is still bound 
to the "T2" table. It wasn't removed after query parsing failure. *Note that NO 
error will be reported to user application*.  It fails silently. 

{noformat}
[2025-02-13T22:31:07,203][WARN 
][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener]
 Failed to notify listener (will ignore): Failed to drop database table 
[type=T2, table="PUBLIC"."T2"]
 org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to drop 
database table [type=T2, table="PUBLIC"."T2"]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397)
 ~[classes/:?]
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830)
 ~[classes/:?]
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624)
 [classes/:?]
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004)
 [classes/:?]
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) 
[classes/:?]
        at java.base/java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.NullPointerException"; SQL statement:
DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.message.DbException.get(DbException.java:168) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.message.DbException.convert(DbException.java:307) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.Command.executeUpdate(Command.java:274) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
 ~[classes/:?]
        ... 26 more
Caused by: java.lang.NullPointerException
        at org.h2.engine.Session.removeLocalTempTable(Session.java:407) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.engine.Database.removeSchemaObject(Database.java:1884) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.table.Table.removeChildrenAndResources(Table.java:531) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614)
 ~[classes/:?]
        at org.h2.engine.Database.removeSchemaObject(Database.java:1918) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.ddl.DropTable.update(DropTable.java:130) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.CommandContainer.update(CommandContainer.java:102) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.Command.executeUpdate(Command.java:261) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
 ~[classes/:?]
        ... 26 more

{noformat}

If try to recreated table with SQL the following error will be returned:
{noformat}
class org.apache.ignite.internal.processors.query.IgniteSQLException: Table 
already exists: T2

        at 
org.apache.ignite.internal.processors.query.QueryUtils.convert(QueryUtils.java:1710)
        at 
org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:435)
        at 
org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:162)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:900)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:985)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3135)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075)
        at 
org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995)
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968)
        at 
org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.sql(SqlFailedCteQueryTest.java:166)
        at 
org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.testFailedCteQueryDoesNotPreventTableRecreate(SqlFailedCteQueryTest.java:140)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2506)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: SchemaOperationException [code=3, msg=Table already exists: T2]
        at 
org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:255)
        ... 24 more
{noformat}






  was:
Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) 
can leave the H2 sql query engine in the state that the following bad things 
can happen:

- Table can not be dropped correctly. Call to {{ignite.destroyCache}} or "DROP 
TABLE" SQL  succseed. Ignite cache is removed but not the table.
- Table can not be recreated (it fails saying table already exists)
- If table has index and created via the Ignite API and {{QueryEntity}}'s  the 
ignite node crashes with AsserionError.
 

Sample query:
{code:sql}
WITH cte AS (SELECT id FROM T2) 
SELECT * FROM absent_table_to_emulate_statement_parse_failure
{code}

After such a query the drop table fails leaving the below WARNING in the ignite 
node log.  Reason is that the temporary view created for the CTE is still bound 
to the "T2" table. It wasn't removed after query parsing failure. *Note that NO 
error will be reported to user application*.  It fails silently. 

{noformat}
[2025-02-13T22:31:07,203][WARN 
][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener]
 Failed to notify listener (will ignore): Failed to drop database table 
[type=T2, table="PUBLIC"."T2"]
 org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to drop 
database table [type=T2, table="PUBLIC"."T2"]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397)
 ~[classes/:?]
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589)
 ~[classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830)
 ~[classes/:?]
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624)
 [classes/:?]
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170)
 [classes/:?]
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004)
 [classes/:?]
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) 
[classes/:?]
        at java.base/java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.NullPointerException"; SQL statement:
DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.message.DbException.get(DbException.java:168) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.message.DbException.convert(DbException.java:307) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.Command.executeUpdate(Command.java:274) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
 ~[classes/:?]
        ... 26 more
Caused by: java.lang.NullPointerException
        at org.h2.engine.Session.removeLocalTempTable(Session.java:407) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.engine.Database.removeSchemaObject(Database.java:1884) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.table.Table.removeChildrenAndResources(Table.java:531) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614)
 ~[classes/:?]
        at org.h2.engine.Database.removeSchemaObject(Database.java:1918) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.ddl.DropTable.update(DropTable.java:130) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.CommandContainer.update(CommandContainer.java:102) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.command.Command.executeUpdate(Command.java:261) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
~[h2-1.4.197.jar:1.4.197]
        at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
~[h2-1.4.197.jar:1.4.197]
        at 
org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
 ~[classes/:?]
        ... 26 more

{noformat}

If try to recreated table with SQL the following error will be returned:
{noformat}

{noformat}







> Invalid SQL query prevent table drop and causes node crash on table recreate
> ----------------------------------------------------------------------------
>
>                 Key: IGNITE-24514
>                 URL: https://issues.apache.org/jira/browse/IGNITE-24514
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Sergey Korotkov
>            Assignee: Sergey Korotkov
>            Priority: Major
>
> Invalid SQL query with the WITH clause (AKA Common Table Expressions - CTEs) 
> can leave the H2 sql query engine in the state that the following bad things 
> can happen:
> - Table can not be dropped correctly. Call to {{ignite.destroyCache}} or 
> "DROP TABLE" SQL  succseed. Ignite cache is removed but not the table.
> - Table can not be recreated (it fails saying table already exists)
> - If table has index and created via the Ignite API and {{QueryEntity}}'s  
> the ignite node crashes with AsserionError.
>  
> Sample query:
> {code:sql}
> WITH cte AS (SELECT id FROM T2) 
> SELECT * FROM absent_table_to_emulate_statement_parse_failure
> {code}
> After such a query the drop table fails leaving the below WARNING in the 
> ignite node log.  Reason is that the temporary view created for the CTE is 
> still bound to the "T2" table. It wasn't removed after query parsing failure. 
> *Note that NO error will be reported to user application*.  It fails 
> silently. 
> {noformat}
> [2025-02-13T22:31:07,203][WARN 
> ][exchange-worker-#92%query.SqlFailedCteQueryTest%][SchemaManager$CompoundSchemaChangeListener]
>  Failed to notify listener (will ignore): Failed to drop database table 
> [type=T2, table="PUBLIC"."T2"]
>  org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to 
> drop database table [type=T2, table="PUBLIC"."T2"]
>       at 
> org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:213)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.h2.H2SchemaManager.onSqlTypeDropped(H2SchemaManager.java:183)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$10(SchemaManager.java:1397)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.executeSafe(SchemaManager.java:1459)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.lambda$onSqlTypeDropped$11(SchemaManager.java:1397)
>  ~[classes/:?]
>       at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?]
>       at 
> org.apache.ignite.internal.processors.query.schema.management.SchemaManager$CompoundSchemaChangeListener.onSqlTypeDropped(SchemaManager.java:1397)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.schema.management.SchemaManager.onCacheStopped(SchemaManager.java:446)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop0(GridQueryProcessor.java:2462)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.onCacheStop(GridQueryProcessor.java:1322)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.stopCache(GridCacheProcessor.java:1041)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2610)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStop(GridCacheProcessor.java:2589)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$processCacheStopRequestOnExchangeDone$a1367cb0$1(GridCacheProcessor.java:2830)
>  ~[classes/:?]
>       at 
> org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11624)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11526)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.processCacheStopRequestOnExchangeDone(GridCacheProcessor.java:2804)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCacheProcessor.onExchangeDone(GridCacheProcessor.java:2956)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onDone(GridDhtPartitionsExchangeFuture.java:2467)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3945)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3717)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1768)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:1049)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3170)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3004)
>  [classes/:?]
>       at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) 
> [classes/:?]
>       at java.base/java.lang.Thread.run(Thread.java:829) [?:?]
> Caused by: org.h2.jdbc.JdbcSQLException: General error: 
> "java.lang.NullPointerException"; SQL statement:
> DROP TABLE IF EXISTS "PUBLIC"."T2" [50000-197]
>       at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.message.DbException.get(DbException.java:168) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.message.DbException.convert(DbException.java:307) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.command.Command.executeUpdate(Command.java:274) 
> ~[h2-1.4.197.jar:1.4.197]
>       at 
> org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
> ~[h2-1.4.197.jar:1.4.197]
>       at 
> org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
>  ~[classes/:?]
>       ... 26 more
> Caused by: java.lang.NullPointerException
>       at org.h2.engine.Session.removeLocalTempTable(Session.java:407) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.engine.Database.removeSchemaObject(Database.java:1884) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.table.Table.removeChildrenAndResources(Table.java:531) 
> ~[h2-1.4.197.jar:1.4.197]
>       at 
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.removeChildrenAndResources(GridH2Table.java:614)
>  ~[classes/:?]
>       at org.h2.engine.Database.removeSchemaObject(Database.java:1918) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.command.ddl.DropTable.executeDrop(DropTable.java:119) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.command.ddl.DropTable.update(DropTable.java:130) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.command.CommandContainer.update(CommandContainer.java:102) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.command.Command.executeUpdate(Command.java:261) 
> ~[h2-1.4.197.jar:1.4.197]
>       at 
> org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:169) 
> ~[h2-1.4.197.jar:1.4.197]
>       at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:126) 
> ~[h2-1.4.197.jar:1.4.197]
>       at 
> org.apache.ignite.internal.processors.query.h2.H2SchemaManager.dropTable(H2SchemaManager.java:209)
>  ~[classes/:?]
>       ... 26 more
> {noformat}
> If try to recreated table with SQL the following error will be returned:
> {noformat}
> class org.apache.ignite.internal.processors.query.IgniteSQLException: Table 
> already exists: T2
>       at 
> org.apache.ignite.internal.processors.query.QueryUtils.convert(QueryUtils.java:1710)
>       at 
> org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:435)
>       at 
> org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommand(CommandProcessor.java:162)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeCommand(IgniteH2Indexing.java:900)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:985)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3135)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075)
>       at 
> org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995)
>       at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968)
>       at 
> org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.sql(SqlFailedCteQueryTest.java:166)
>       at 
> org.apache.ignite.internal.processors.query.SqlFailedCteQueryTest.testFailedCteQueryDoesNotPreventTableRecreate(SqlFailedCteQueryTest.java:140)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>       at 
> org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2506)
>       at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: SchemaOperationException [code=3, msg=Table already exists: T2]
>       at 
> org.apache.ignite.internal.processors.query.h2.CommandProcessor.runCommandH2(CommandProcessor.java:255)
>       ... 24 more
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to