Maksim Zhuravkov created IGNITE-19917:
-----------------------------------------

             Summary: 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
             Fix For: 3.0.0-beta2


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 queries likes this would not issue redundant requests 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)

Reply via email to