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)