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

Maksim Zhuravkov updated IGNITE-18644:
--------------------------------------
    Description: 
Types in predicate expressions may have unnecessary casts that makes a result 
of a query execution dependent depends on data that resides in a table.

Table:
{code:java}
CREATE TABLE t1 (ID INTEGER PRIMARY KEY, c1 INTEGER);
{code}
Query:
{code:java}
SELECT c1 FROM t1 WHERE c1 IN (1, 2, 'b')  {code}
Execution of the following query depends on data that is stored in a table:

 
 - if c1 is 1 or 2 the following query does not raise an error.

 - If c2 is neither of those the query fails at runtime with Integer parse 
error.

it would be better to have consistent behaviour (this requires removing the 
rendudant casts in predicate expressions).

Reproducer:
{code:java}
sql("CREATE TABLE T11 (c1 int primary key, c2 INTEGER)");

Transaction tx = CLUSTER_NODES.get(0).transactions().begin();
sql(tx, "INSERT INTO T11 VALUES(1, 2)");
sql(tx, "INSERT INTO T11 VALUES(2, 3)");
tx.commit();

// ok
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (2, 'b')").check();
// ok
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (3, 'b')").check();
// fails with java.lang.NumberFormatException: For input string: "b"
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (4, 'b')").check(); {code}
 

  was:
Types in predicate expressions may have unnecessary casts that makes a result 
of a query execution dependent depends on data that resides in a table.

Table:
{code:java}
CREATE TABLE t1 (ID INTEGER PRIMARY KEY, c1 INTEGER);
{code}
Query:

 
{code:java}
SELECT c1 FROM t1 WHERE c1 IN (1, 2, 'b')  {code}
Execution of the following query depends on data that is stored in a table:

 

- if c1 is 1 or 2 the following query does not raise an error.

- If c2 is neither of those the query fails at runtime with Integer parse error.

it would be better to have consistent behaviour (this requires removing the 
rendudant casts in predicate expressions).

Reproducer:
{code:java}
sql("CREATE TABLE T11 (c1 int primary key, c2 INTEGER)");

Transaction tx = CLUSTER_NODES.get(0).transactions().begin();
sql(tx, "INSERT INTO T11 VALUES(1, 2)");
sql(tx, "INSERT INTO T11 VALUES(2, 3)");
tx.commit();

// ok
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (2, 'b')").check();
// ok
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (3, 'b')").check();
// fails with java.lang.NumberFormatException: For input string: "b"
assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (4, 'b')").check(); {code}
 


> Sql. Type system. Types in predicate expressions may have unnecessary casts.
> ----------------------------------------------------------------------------
>
>                 Key: IGNITE-18644
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18644
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>            Reporter: Maksim Zhuravkov
>            Priority: Major
>              Labels: calcite3-required, ignite-3
>
> Types in predicate expressions may have unnecessary casts that makes a result 
> of a query execution dependent depends on data that resides in a table.
> Table:
> {code:java}
> CREATE TABLE t1 (ID INTEGER PRIMARY KEY, c1 INTEGER);
> {code}
> Query:
> {code:java}
> SELECT c1 FROM t1 WHERE c1 IN (1, 2, 'b')  {code}
> Execution of the following query depends on data that is stored in a table:
>  
>  - if c1 is 1 or 2 the following query does not raise an error.
>  - If c2 is neither of those the query fails at runtime with Integer parse 
> error.
> it would be better to have consistent behaviour (this requires removing the 
> rendudant casts in predicate expressions).
> Reproducer:
> {code:java}
> sql("CREATE TABLE T11 (c1 int primary key, c2 INTEGER)");
> Transaction tx = CLUSTER_NODES.get(0).transactions().begin();
> sql(tx, "INSERT INTO T11 VALUES(1, 2)");
> sql(tx, "INSERT INTO T11 VALUES(2, 3)");
> tx.commit();
> // ok
> assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (2, 'b')").check();
> // ok
> assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (3, 'b')").check();
> // fails with java.lang.NumberFormatException: For input string: "b"
> assertQuery("SELECT T11.c2 FROM T11 WHERE c2 IN (4, 'b')").check(); {code}
>  



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

Reply via email to