[
https://issues.apache.org/jira/browse/IGNITE-19353?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Evgeny Stanilovsky updated IGNITE-19353:
----------------------------------------
Ignite Flags: (was: Docs Required,Release Notes Required)
> 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
> Assignee: Maksim Zhuravkov
> Priority: Major
> Labels: ignite-3
> Fix For: 3.0.0-beta2
>
> Time Spent: 3h 40m
> Remaining Estimate: 0h
>
> 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 with character types:
> {code:java}
> @Test
> public void test() {
> assertQuery("SELECT CAST(? AS
> VARCHAR(2))").withParams("abcd").returns("ab").check();
> }
> {code}
> The code returns `abcd` when `ab` is expected.
> Problem with numeric types:
> {code:java}
> @Test
> public void test() {
> assertQuery("SELECT CAST(? AS DECIMAL(2))").withParams(new
> BigDecimal("123")).check();
> }
> {code}
> The code returns original value where Postgres/Oracle/SQL Server return
> conversion error.
> *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)