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

[jira] [Commented] (IGNITE-18163) Old-style join on different column types fails with ClassCastException

    [ https://issues.apache.org/jira/browse/IGNITE-18163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17636564#comment-17636564 ] 

Konstantin Orlov commented on IGNITE-18163:
-------------------------------------------

Looks like we miss a cast when creating a comparator for MergeJoin

> Old-style join on different column types fails with ClassCastException
> ----------------------------------------------------------------------
>
>                 Key: IGNITE-18163
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18163
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 3.0.0-beta1
>            Reporter: Pavel Tupitsyn
>            Priority: Major
>              Labels: calcite3-required, ignite-3
>             Fix For: 3.0.0-beta2
>
>
> Query:
> {code}
> select _T0.KEY, _T1.VAL from PUBLIC.TBL1 as _T0, PUBLIC.TBL_INT32 as _T1 where _T0.KEY IS NOT DISTINCT FROM _T1.KEY
> {code}
> Result:
> {code}
> org.apache.ignite.lang.IgniteException: IGN-CMN-65535 TraceId:ef4217b1-04ef-4f08-b1c3-76effc3fc262 class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
> 	at org.apache.ignite.lang.IgniteException.wrap(IgniteException.java:289)
> 	at org.apache.ignite.internal.sql.engine.AsyncSqlCursorImpl.lambda$requestNextAsync$0(AsyncSqlCursorImpl.java:77)
> 	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
> 	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
> 	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
> 	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.lambda$closeAsync$0(AsyncRootNode.java:193)
> 	at java.base/java.util.concurrent.LinkedBlockingQueue.forEachFrom(LinkedBlockingQueue.java:1010)
> 	at java.base/java.util.concurrent.LinkedBlockingQueue.forEach(LinkedBlockingQueue.java:979)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.closeAsync(AsyncRootNode.java:193)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AsyncRootNode.onError(AsyncRootNode.java:148)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:155)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:155)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:155)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:155)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.MergeJoinNode$1.onError(MergeJoinNode.java:124)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.AbstractNode.onError(AbstractNode.java:155)
> 	at org.apache.ignite.internal.sql.engine.exec.ExchangeServiceImpl.onMessage(ExchangeServiceImpl.java:205)
> 	at org.apache.ignite.internal.sql.engine.exec.ExchangeServiceImpl.lambda$start$2(ExchangeServiceImpl.java:81)
> 	at org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.onMessageInternal(MessageServiceImpl.java:164)
> 	at org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.lambda$onMessage$3(MessageServiceImpl.java:133)
> 	at org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:80)
> 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> 	at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
> 	at java.base/java.lang.Integer.compareTo(Integer.java:59)
> 	at org.apache.calcite.rel.RelFieldCollation.compare(RelFieldCollation.java:43)
> 	at org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.compare(ExpressionFactoryImpl.java:235)
> 	at org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl$2.compare(ExpressionFactoryImpl.java:217)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.MergeJoinNode$InnerJoin.join(MergeJoinNode.java:318)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.MergeJoinNode.pushLeft(MergeJoinNode.java:162)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.MergeJoinNode$1.push(MergeJoinNode.java:112)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.Inbox.pushOrdered(Inbox.java:259)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.Inbox.push(Inbox.java:205)
> 	at org.apache.ignite.internal.sql.engine.exec.rel.Inbox.onBatchReceived(Inbox.java:181)
> 	at org.apache.ignite.internal.sql.engine.exec.ExchangeServiceImpl.onMessage(ExchangeServiceImpl.java:203)
> 	... 7 more
> {code}
> T0.KEY is int32, T1.KEY is int64.



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