[
https://issues.apache.org/jira/browse/IGNITE-19917?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Evgeny Stanilovsky updated IGNITE-19917:
----------------------------------------
Fix Version/s: 3.2
(was: 3.1)
> Sql. Index scans/lookups should not result in physical scans/looks when
> search conditions can not be satisfied.
> ---------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-19917
> URL: https://issues.apache.org/jira/browse/IGNITE-19917
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Maksim Zhuravkov
> Priority: Minor
> Labels: ignite-3
> Fix For: 3.2
>
>
> The following query issues redundant requests to perform index lookups:
> {code:java}
> sql("SELECT * FROM smallint_val = 1000000000");
> {code}
> This query returns no result because `1000000000` lies out of valid value
> range for `SMALLINT` type.
> *Explanation*:
> 1. Type coercion rules correctly applies a cast to the left side operand,
> translating the query into:
> {code:java}
> sql("SELECT * FROM smallint_val::INTEGER = 1000000000");
> {code}
> 2. Since `smallint_val` column has type SMALLINT, we replace `1000000000`
> with SMALLINT.MAX_VALUE.
> 3. Index scan/lookups are issued for ExactBounds
> smallint_val=`SMALLINT.MAX_VALUE`, are then filtered by `predicate` specified
> by `IgniteIndexScan`, thus producing no results.
> It would be better if such queries would not issue redundant physical
> scans/lookups at all. Such approach was implemented for IS NULL predicate
> (see RangeConditionImpl defined in ExpressionFactoryImpl).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)