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

Maksim Zhuravkov updated IGNITE-18831:
--------------------------------------
    Description: 
At the moment the execution runtime is not aware of dynamic parameter types 
inferred at the validation stage and when the validation stage completes and 
those types are thrown away. During the execution, the runtime uses the 
_java_class_ of a type parameter to perform an operation, which fails in the 
following case:

A query has a dynamic parameter (string) but the validator, by using implicit 
cast rules inferred, the actual type for that dynamic parameter to be some 
another type that can be implicitly created from a string. 

{code:java}
CREATE TABLE UUIDS (id INTEGER PRIMARY KEY, uuid_key UUID);
INSERT INTO UUIDS VALUES(1, ?);
{code}

* Execution runtime loses type information of the dynamic parameter and assumes 
it to be a string. 
* At the runtime toInternal call is going to fail, because it expects the type 
of this parameter to be UUID but dynamic parameter contains a string.

There several possible approaches to resolve this issue: 

* Add dynamic cast to all dynamic parameters after validation completes .
* Pass type information to the execution runtime so it would add the necessary 
casts (? - this looks like a correct approach).

Either of the above approaches can help resolving another issue with dynamic 
parameters: https://issues.apache.org/jira/browse/IGNITE-18645: Sql. Type 
System. Reject plans with not matching dynamic parameters types during query 
validation.


  was:
At the moment the execution runtime is not aware of dynamic parameter types 
inferred at the validation stage and when the validation stage completes and 
those types are thrown away. During the execution, the runtime uses the 
_java_class_ of a type parameter to perform an operation, which fails in the 
following case:

A query has a dynamic parameter (string) but the validator, by using implicit 
cast rules inferred, the actual type for that dynamic parameter to be some 
another type that can be implicitly created from a string. 

{code:java}
CREATE TABLE UUIDS (id INTEGER PRIMARY KEY, uuid_key UUID);
INSERT INTO UUIDS VALUES(1, ?);
{code}

* Execution runtime loses type information of the dynamic parameter and assumes 
it to be a string. 
* At the runtime toInternal call is going to fail, because it expects the type 
of this parameter to be UUID but dynamic parameter contains a string.

There several possible approaches to resolve this issue: 

* Add dynamic cast to all dynamic parameters after validation completes .
* Pass type information to the execution runtime so it would add the necessary 
casts (? - this looks like a correct approach).

Either of this approaches can help resolving another issue with dynamic 
parameters: https://issues.apache.org/jira/browse/IGNITE-18645: Sql. Type 
System. Reject plans with not matching dynamic parameters types during query 
validation.



> Sql. Dynamic parameters. Inferred types of dynamic parameters are not used by 
> the execution runtime.
> ----------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-18831
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18831
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 3.0.0-beta2
>            Reporter: Maksim Zhuravkov
>            Priority: Minor
>              Labels: calcite2-required, calcite3-required, ignite-3
>
> At the moment the execution runtime is not aware of dynamic parameter types 
> inferred at the validation stage and when the validation stage completes and 
> those types are thrown away. During the execution, the runtime uses the 
> _java_class_ of a type parameter to perform an operation, which fails in the 
> following case:
> A query has a dynamic parameter (string) but the validator, by using implicit 
> cast rules inferred, the actual type for that dynamic parameter to be some 
> another type that can be implicitly created from a string. 
> {code:java}
> CREATE TABLE UUIDS (id INTEGER PRIMARY KEY, uuid_key UUID);
> INSERT INTO UUIDS VALUES(1, ?);
> {code}
> * Execution runtime loses type information of the dynamic parameter and 
> assumes it to be a string. 
> * At the runtime toInternal call is going to fail, because it expects the 
> type of this parameter to be UUID but dynamic parameter contains a string.
> There several possible approaches to resolve this issue: 
> * Add dynamic cast to all dynamic parameters after validation completes .
> * Pass type information to the execution runtime so it would add the 
> necessary casts (? - this looks like a correct approach).
> Either of the above approaches can help resolving another issue with dynamic 
> parameters: https://issues.apache.org/jira/browse/IGNITE-18645: Sql. Type 
> System. Reject plans with not matching dynamic parameters types during query 
> validation.



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

Reply via email to