You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Pavel Pereslegin (Jira)" <ji...@apache.org> on 2023/07/20 09:53:00 UTC

[jira] [Commented] (IGNITE-19882) Sql. Queries that access columns of type DECIMAL do not pick index, when compared with INT/BIGINT.

    [ https://issues.apache.org/jira/browse/IGNITE-19882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17744998#comment-17744998 ] 

Pavel Pereslegin commented on IGNITE-19882:
-------------------------------------------

Since this is another problem with removing unnecessary implicit casts, it is recommended to solve it according to the plan proposed in IGNITE-19997.

> Sql. Queries that access columns of type DECIMAL do not pick index, when compared with INT/BIGINT.
> --------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-19882
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19882
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 3.0.0-beta1
>            Reporter: Maksim Zhuravkov
>            Priority: Minor
>              Labels: ignite-3
>
> When decimal column is compared with literal/dynamic parameter of integral numeric type, index is not picked:
> {code:java}
> sql("CREATE TABLE t_dec (ID INTEGER PRIMARY KEY, VAL DECIMAL(5,3))");
> sql("CREATE INDEX t_dec_idx ON t_dec(VAL)");
> sql("INSERT INTO t_dec VALUES (1, 42)");
> // 1 passes
> assertQuery("SELECT id FROM t_dec WHERE val = 42.000")
>                 .matches(containsIndexScan("PUBLIC", "T_DEC", "T_DEC_IDX"))
>                 .returns(1)
>                 .check();
> // 2 passes
> assertQuery("SELECT id FROM t_dec WHERE val = 42::DECIMAL(5,3)")
>    .matches(containsIndexScan("PUBLIC", "T_DEC", "T_DEC_IDX"))
>    .returns(1)
>    .check();
> // 3 fails
> assertQuery("SELECT id FROM t_dec WHERE val = 42")
>   .matches(containsIndexScan("PUBLIC", "T_DEC", "T_DEC_IDX"))
>   .returns(1)
>   .check();
> // 4 fails
> assertQuery("SELECT id FROM t_dec WHERE val = ?")
>   .withParams(42)
>   .matches(containsIndexScan("PUBLIC", "T_DEC", "T_DEC_IDX"))
>   .returns(1)
>   .check();
> // 5 fails
> assertQuery("SELECT id FROM t_dec WHERE val = ?")
>   .withParams(42L)
>   .matches(containsIndexScan("PUBLIC", "T_DEC", "T_DEC_IDX"))
>   .returns(1)
>   .check();
> {code}
> Expected behaviour: Queries 3, 4, 5 should use an index.



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