[ https://issues.apache.org/jira/browse/CALCITE-3598?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16994716#comment-16994716 ]
Feng Zhu commented on CALCITE-3598: ----------------------------------- In my first impression, the root cause seems to be related with _JavaRowFormat_ in _EnumerableTableScan._ It fails to choose a proper *_JavaRowFormat.SCALAR_* in _format()_ method, but fall through to {color:#FF0000}_JavaRowFormat.CUSTOM_.{color} Consequently, the code below for input is produced: {code:java} org.apache.calcite.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("hr"), java.lang.String.class, "m0").asEnumerable().select( new org.apache.calcite.linq4j.function.Function1() { public java.util.Comparator apply(String row) { return row.CASE_INSENSITIVE_ORDER; } public Object apply(Object row) { return apply( (String) row); } } {code} The right code should be {code:java} org.apache.calcite.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("hr"), java.lang.String.class, "m0").asEnumerable() {code} *Why the issue is "hidden" before?* I ever noticed some unusual cases when I was working on some related JIRAs. It seems that the "toString" method help it to pass the complition. Howver, the NestedLoopJoin's predicate code (_(String) ..._) exposes this issue. > ClassCastException in MaterializationTest testJoinMaterialization8 and > testJoinMaterialization9 > ----------------------------------------------------------------------------------------------- > > Key: CALCITE-3598 > URL: https://issues.apache.org/jira/browse/CALCITE-3598 > Project: Calcite > Issue Type: Bug > Affects Versions: 1.21.0 > Reporter: Ruben Q L > Priority: Minor > Attachments: codeHashJoin.txt, codeNestedLoopJoin.txt > > > Problem unveiled by CALCITE-3535, and also separately by CALCITE-3576. > When CALCITE-3535 was committed, it made > {{MaterializationTest#testJoinMaterialization8}} and > {{MaterializationTest#testJoinMaterialization9}} change their execution plan > from hashJoin to nestedLoopJoin. This caused an exception > {code} > java.lang.ClassCastException: java.lang.String$CaseInsensitiveComparator > cannot be cast to java.lang.String > {code} > which seems unrelated to CALCITE-3535 (or CALCITE-3576), so the tests were > temporarily disabled. > The goal of this ticket is to investigate the root cause of this issue and > re-activate both tests. -- This message was sent by Atlassian Jira (v8.3.4#803005)