[ 
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)

Reply via email to