[ 
https://issues.apache.org/jira/browse/CALCITE-6288?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Konstantin updated CALCITE-6288:
--------------------------------
    Description: 
After update to calcite v1.36 we are getting the following error on execution 
of the following query:
{code:sql}
SELECT * FROM "calls_m" WHERE "params"['web.url'] LIKE '%resign%';
{code}
{code:java}
 -> CompileException: Line 16, Column 174: No applicable constructor/method 
found for actual parameters "java.lang.Object, java.lang.String"; candidates 
are: "public boolean 
org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
java.lang.String, java.lang.String)", "public boolean 
org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
java.lang.String)"
{code}
 [^Error.txt] 
In v.1.33 it was working fine.
Generated code from v1.33:
 [^NormalGenCode.txt] 
So, in 1.33 it was calling:
{code:java}
Boolean.valueOf(org.apache.calcite.runtime.SqlFunctions.like(item_value == null 
? (String) null : item_value.toString(), "%resign%"));
{code}
but in 1.36 it's:
{code:java}
Boolean.valueOf($L4J$C$new_org_apache_calcite_runtime_SqlFunctions_LikeFunction_.like(item_value,
 "%resign%"));
{code}
So, it's not calling +toString()+ anymore.
Looks like it's because it's using reflective implementor instead of method 
implementor:
v.1.33
 !image-2024-03-04-12-02-53-920.png! 
v.1.36
 !image-2024-03-04-12-03-15-637.png! 
org.apache.calcite.adapter.enumerable.RexImpTable.Builder

Table DDL:
{code:sql}
CREATE TABLE "profiler"."calls_m" (
        "start_timestamp" TIMESTAMP(3) NOT NULL NOT NULL,
        "method_id" JavaType(long) NOT NULL NOT NULL,
        "method_name" JavaType(class java.lang.String),
        "duration" JavaType(int) NOT NULL NOT NULL,
        "cpu_time" JavaType(long) NOT NULL NOT NULL,
        "suspend_duration" JavaType(int) NOT NULL NOT NULL,
        "queue_wait_duration" JavaType(int) NOT NULL NOT NULL,
        "memory_used" JavaType(long) NOT NULL NOT NULL,
        "calls" JavaType(int) NOT NULL NOT NULL,
        "transactions" JavaType(long) NOT NULL NOT NULL,
        "logs_generated" JavaType(int) NOT NULL NOT NULL,
        "logs_written" JavaType(int) NOT NULL NOT NULL,
        "file_read" JavaType(long) NOT NULL NOT NULL,
        "file_written" JavaType(long) NOT NULL NOT NULL,
        "net_read" JavaType(long) NOT NULL NOT NULL,
        "net_written" JavaType(long) NOT NULL NOT NULL,
        "node_name" JavaType(class java.lang.String),
        "thread_name" JavaType(class java.lang.String),
        "dump_dir_id" JavaType(int) NOT NULL NOT NULL,
        "trace_id" JavaType(class 
com.netcracker.profiler.calcite.trace.TraceId),
        "profiler_url" JavaType(class java.lang.String),
        "params" JavaType(interface java.util.Map)
);
{code}


  was:
After update to calcite v1.36 we are getting the following error on execution 
of the following query:
{code:sql}
SELECT * FROM "calls_m" WHERE "params"['web.url'] LIKE '%resign%';
{code}
{code:java}
 -> CompileException: Line 16, Column 174: No applicable constructor/method 
found for actual parameters "java.lang.Object, java.lang.String"; candidates 
are: "public boolean 
org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
java.lang.String, java.lang.String)", "public boolean 
org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
java.lang.String)"
{code}
 [^Error.txt] 
In v.1.33 it was working fine.
Generated code from v1.33:
 [^NormalGenCode.txt] 
So, in 1.33 it was calling:
{code:java}
Boolean.valueOf(org.apache.calcite.runtime.SqlFunctions.like(item_value == null 
? (String) null : item_value.toString(), "%resign%"));
{code}
but in 1.36 it's:
{code:java}
Boolean.valueOf($L4J$C$new_org_apache_calcite_runtime_SqlFunctions_LikeFunction_.like(item_value,
 "%resign%"));
{code}
So, it's not calling +toString()+ anymore.
Looks like it's because it's using reflective implementor instead of method 
implementor:
 !image-2024-03-04-12-02-53-920.png! 
 !image-2024-03-04-12-03-15-637.png! 
org.apache.calcite.adapter.enumerable.RexImpTable.Builder

Table DDL:
{code:sql}
CREATE TABLE "profiler"."calls_m" (
        "start_timestamp" TIMESTAMP(3) NOT NULL NOT NULL,
        "method_id" JavaType(long) NOT NULL NOT NULL,
        "method_name" JavaType(class java.lang.String),
        "duration" JavaType(int) NOT NULL NOT NULL,
        "cpu_time" JavaType(long) NOT NULL NOT NULL,
        "suspend_duration" JavaType(int) NOT NULL NOT NULL,
        "queue_wait_duration" JavaType(int) NOT NULL NOT NULL,
        "memory_used" JavaType(long) NOT NULL NOT NULL,
        "calls" JavaType(int) NOT NULL NOT NULL,
        "transactions" JavaType(long) NOT NULL NOT NULL,
        "logs_generated" JavaType(int) NOT NULL NOT NULL,
        "logs_written" JavaType(int) NOT NULL NOT NULL,
        "file_read" JavaType(long) NOT NULL NOT NULL,
        "file_written" JavaType(long) NOT NULL NOT NULL,
        "net_read" JavaType(long) NOT NULL NOT NULL,
        "net_written" JavaType(long) NOT NULL NOT NULL,
        "node_name" JavaType(class java.lang.String),
        "thread_name" JavaType(class java.lang.String),
        "dump_dir_id" JavaType(int) NOT NULL NOT NULL,
        "trace_id" JavaType(class 
com.netcracker.profiler.calcite.trace.TraceId),
        "profiler_url" JavaType(class java.lang.String),
        "params" JavaType(interface java.util.Map)
);
{code}



> Error while compiling LIKE function after update to 1.36
> --------------------------------------------------------
>
>                 Key: CALCITE-6288
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6288
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.36.0
>            Reporter: Konstantin
>            Priority: Major
>         Attachments: Error.txt, NormalGenCode.txt, 
> image-2024-03-04-12-02-53-920.png, image-2024-03-04-12-03-15-637.png
>
>
> After update to calcite v1.36 we are getting the following error on execution 
> of the following query:
> {code:sql}
> SELECT * FROM "calls_m" WHERE "params"['web.url'] LIKE '%resign%';
> {code}
> {code:java}
>  -> CompileException: Line 16, Column 174: No applicable constructor/method 
> found for actual parameters "java.lang.Object, java.lang.String"; candidates 
> are: "public boolean 
> org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
> java.lang.String, java.lang.String)", "public boolean 
> org.apache.calcite.runtime.SqlFunctions$LikeFunction.like(java.lang.String, 
> java.lang.String)"
> {code}
>  [^Error.txt] 
> In v.1.33 it was working fine.
> Generated code from v1.33:
>  [^NormalGenCode.txt] 
> So, in 1.33 it was calling:
> {code:java}
> Boolean.valueOf(org.apache.calcite.runtime.SqlFunctions.like(item_value == 
> null ? (String) null : item_value.toString(), "%resign%"));
> {code}
> but in 1.36 it's:
> {code:java}
> Boolean.valueOf($L4J$C$new_org_apache_calcite_runtime_SqlFunctions_LikeFunction_.like(item_value,
>  "%resign%"));
> {code}
> So, it's not calling +toString()+ anymore.
> Looks like it's because it's using reflective implementor instead of method 
> implementor:
> v.1.33
>  !image-2024-03-04-12-02-53-920.png! 
> v.1.36
>  !image-2024-03-04-12-03-15-637.png! 
> org.apache.calcite.adapter.enumerable.RexImpTable.Builder
> Table DDL:
> {code:sql}
> CREATE TABLE "profiler"."calls_m" (
>       "start_timestamp" TIMESTAMP(3) NOT NULL NOT NULL,
>       "method_id" JavaType(long) NOT NULL NOT NULL,
>       "method_name" JavaType(class java.lang.String),
>       "duration" JavaType(int) NOT NULL NOT NULL,
>       "cpu_time" JavaType(long) NOT NULL NOT NULL,
>       "suspend_duration" JavaType(int) NOT NULL NOT NULL,
>       "queue_wait_duration" JavaType(int) NOT NULL NOT NULL,
>       "memory_used" JavaType(long) NOT NULL NOT NULL,
>       "calls" JavaType(int) NOT NULL NOT NULL,
>       "transactions" JavaType(long) NOT NULL NOT NULL,
>       "logs_generated" JavaType(int) NOT NULL NOT NULL,
>       "logs_written" JavaType(int) NOT NULL NOT NULL,
>       "file_read" JavaType(long) NOT NULL NOT NULL,
>       "file_written" JavaType(long) NOT NULL NOT NULL,
>       "net_read" JavaType(long) NOT NULL NOT NULL,
>       "net_written" JavaType(long) NOT NULL NOT NULL,
>       "node_name" JavaType(class java.lang.String),
>       "thread_name" JavaType(class java.lang.String),
>       "dump_dir_id" JavaType(int) NOT NULL NOT NULL,
>       "trace_id" JavaType(class 
> com.netcracker.profiler.calcite.trace.TraceId),
>       "profiler_url" JavaType(class java.lang.String),
>       "params" JavaType(interface java.util.Map)
> );
> {code}



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

Reply via email to