Maksim Zhuravkov created IGNITE-18831:
-----------------------------------------
Summary: Sql. Dynamic parameters. Pass inferred types of dynamic
parameters to 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
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 and adds
no additional casts.
There multiple 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 (*).
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.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)