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

Maksim Zhuravkov updated IGNITE-19353:
--------------------------------------
    Description: 
Current implementation of expression execution runtime incorrectly translates 
types of dynamic parameters because (a) it losses type informations of dynamic 
parameters (see https://issues.apache.org/jira/browse/IGNITE-18831), (b) it 
goes against the rules of calcite's enumerables/link4j (on which the code is 
based), which expect dynamic parameters to be converted into their java values 
according to their inferred types.

The following code illustrates the problem:
{code:java}
 @Test
    public void testReduceLength() {
        assertQuery("SELECT CAST(? AS 
VARCHAR(2))").withParams("abcd").returns("ab").check();
    }
{code}

The code returns `abcd` when `ab` is expected.

*Solution*: convert values of dynamic parameters to java values according to 
type information inferred at the validation stage and pass converted values to 
expression execution runtime.




  was:
Current implementation of expression execution runtime incorrectly translates 
types of dynamic parameters because (a) it losses type informations of dynamic 
parameters (see https://issues.apache.org/jira/browse/IGNITE-18831), (b) it 
goes against the rules of calcite's enumerables/link4j (on which the code is 
based), which expect dynamic parameters to be converted into their java values 
according to their inferred types.

The following code illustrates the problem:
{code:java}
 @Test
    public void testReduceLength() {
        assertQuery("SELECT CAST(? AS 
VARCHAR(2))").withParams("abcd").returns("ab").check();
    }
{code}

The code returns `abcd` when `ab` is expected.

*Solution*: expression execution runtime should use values of dynamic 
parameters converted to java values according to type information inferred at 
the validation stage.





> Sql. Incorrect type conversion for dynamic parameters - CAST operation 
> ignores type precision.
> ----------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-19353
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19353
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>            Reporter: Maksim Zhuravkov
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>
> Current implementation of expression execution runtime incorrectly translates 
> types of dynamic parameters because (a) it losses type informations of 
> dynamic parameters (see https://issues.apache.org/jira/browse/IGNITE-18831), 
> (b) it goes against the rules of calcite's enumerables/link4j (on which the 
> code is based), which expect dynamic parameters to be converted into their 
> java values according to their inferred types.
> The following code illustrates the problem:
> {code:java}
>  @Test
>     public void testReduceLength() {
>         assertQuery("SELECT CAST(? AS 
> VARCHAR(2))").withParams("abcd").returns("ab").check();
>     }
> {code}
> The code returns `abcd` when `ab` is expected.
> *Solution*: convert values of dynamic parameters to java values according to 
> type information inferred at the validation stage and pass converted values 
> to expression execution runtime.



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

Reply via email to