You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksey Plekhanov (Jira)" <ji...@apache.org> on 2026/06/08 11:38:00 UTC

[jira] [Created] (IGNITE-28755) Calcite engine. Avoid typeId collisions for autogenerated type names

Aleksey Plekhanov created IGNITE-28755:
------------------------------------------

             Summary: Calcite engine. Avoid typeId collisions for autogenerated type names
                 Key: IGNITE-28755
                 URL: https://issues.apache.org/jira/browse/IGNITE-28755
             Project: Ignite
          Issue Type: Improvement
            Reporter: Aleksey Plekhanov
            Assignee: Aleksey Plekhanov


When table is created via DDL type name for key or value can be explicetely provided, but if not provided it generated using pattern:
{{SQL_<schema>_<table>_<random UUID>}}, or {{SQL_<schema>_<table>_<random UUID>_KEY}}.
Sometimes these autogenerated types have collisions with predefined or other user types. User will get exception only after first insert to this table. 
When types are provided explicetely they are also can have collisions with already registered types, and again, exception will be thrown only on first insert.
We should check typeId collision on table creation via DDL. In case of explicit type - thow an exception, in case of implicit autogenerated type name - regenerate type name to avoid collisions.
Failed test on TC: https://ci2.ignite.apache.org/viewLog.html?buildTypeId=IgniteTests24Java8_CalciteSql3&buildId=9097118


{noformat}
[2026-05-30T21:55:16,227][ERROR][main][] Test failed [test=SetOpIntegrationTest#testNumbersCastInIntersect[sqlTxMode=ALL], duration=898]
class org.apache.ignite.internal.processors.query.IgniteSQLException: An error occurred while query executing - Failed to register class.
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode.checkException(RootNode.java:325)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode.exchangeBuffers(RootNode.java:314)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode.hasNext(RootNode.java:213)
	at org.apache.ignite.internal.processors.query.calcite.util.ConvertingClosableIterator.hasNext(ConvertingClosableIterator.java:71)
	at org.apache.ignite.internal.processors.query.calcite.exec.ClosableIteratorsHolder$DelegatingIterator.hasNext(ClosableIteratorsHolder.java:138)
	at org.apache.ignite.internal.processors.query.calcite.exec.ExecutionServiceImpl.executePlan(ExecutionServiceImpl.java:528)
	at org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.lambda$parseAndProcessQuery$6(CalciteQueryProcessor.java:588)
	at org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.processQuery(CalciteQueryProcessor.java:752)
	at org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.parseAndProcessQuery(CalciteQueryProcessor.java:576)
	at org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.query(CalciteQueryProcessor.java:445)
	at org.apache.ignite.internal.processors.query.calcite.integration.AbstractBasicIntegrationTest.sql(AbstractBasicIntegrationTest.java:273)
	at org.apache.ignite.internal.processors.query.calcite.integration.AbstractBasicIntegrationTransactionalTest.sql(AbstractBasicIntegrationTransactionalTest.java:142)
	at org.apache.ignite.internal.processors.query.calcite.integration.AbstractBasicIntegrationTest.sql(AbstractBasicIntegrationTest.java:258)
	at org.apache.ignite.internal.processors.query.calcite.integration.SetOpIntegrationTest.doTestNumbersCastInSetOp(SetOpIntegrationTest.java:566)
	at org.apache.ignite.internal.processors.query.calcite.integration.SetOpIntegrationTest.testNumbersCastInIntersect(SetOpIntegrationTest.java:532)
	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:2486)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to register class.
	at org.apache.ignite.internal.binary.BinaryContext.registerUserClassName(BinaryContext.java:1240)
	at org.apache.ignite.internal.binary.BinaryContext.updateMetaIfNeeded(BinaryContext.java:1389)
	at org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl.serializeTo(BinaryObjectBuilderImpl.java:340)
	at org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl.build(BinaryObjectBuilderImpl.java:188)
	at org.apache.ignite.internal.processors.query.calcite.schema.CacheTableDescriptorImpl.insertTuple(CacheTableDescriptorImpl.java:330)
	at org.apache.ignite.internal.processors.query.calcite.schema.CacheTableDescriptorImpl.toTuple(CacheTableDescriptorImpl.java:312)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ModifyNode.push(ModifyNode.java:133)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ProjectNode.push(ProjectNode.java:63)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ScanNode.processNextBatch(ScanNode.java:186)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ScanNode.push(ScanNode.java:142)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ScanNode.request(ScanNode.java:95)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ProjectNode.request(ProjectNode.java:54)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ModifyNode.tryEnd(ModifyNode.java:183)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.ModifyNode.request(ModifyNode.java:120)
	at org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode.lambda$exchangeBuffers$b615d61c$1(RootNode.java:292)
	at org.apache.ignite.internal.util.lang.RunnableX.run(RunnableX.java:37)
	at org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext.lambda$execute$1(ExecutionContext.java:430)
	at org.apache.ignite.internal.processors.query.calcite.exec.task.AbstractQueryTaskExecutor$SecurityAwareTask.run(AbstractQueryTaskExecutor.java:78)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	... 1 more
Caused by: class org.apache.ignite.internal.DuplicateTypeIdException: Duplicate ID [platformId=0, typeId=-179778976, oldCls=org.apache.ignite.transactions.TransactionConcurrency, newCls=SQL_PUBLIC_T1_85fe3916_800f_40de_9e8f_8dbbae60c04d_KEY]
	at org.apache.ignite.internal.MarshallerContextImpl.registerClassName(MarshallerContextImpl.java:313)
	at org.apache.ignite.internal.binary.BinaryContext.registerUserClassName(BinaryContext.java:1224)
{noformat}




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