[ 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)