[
https://issues.apache.org/jira/browse/IGNITE-21736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maksim Zhuravkov updated IGNITE-21736:
--------------------------------------
Summary: Sql. Do not perform index operations impossible search conditions
with numeric literals. (was: Sql. Do not perform index operations impossible
search conditions with numeric literals.)
> Sql. Do not perform index operations impossible search conditions with
> numeric literals.
> ----------------------------------------------------------------------------------------
>
> Key: IGNITE-21736
> URL: https://issues.apache.org/jira/browse/IGNITE-21736
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Maksim Zhuravkov
> Priority: Minor
> Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> IGNITE-19615 introduced saturated values to overcome a problem in index
> lookups, caused by the fact that SQL allows implict conversions between
> numeric types.
> This approach is not effiecent because instead of immediately returning an
> empty collection of rows, IndexScanNode performs a look up for
> TYPE::MAX_VALUE and then applying post condition to remove rows (See example).
> 1. Let's remove this redundant operations by introducing/updating search
> bounds that represent unsatisfiable/impossible conditions (conditions that
> never hold true).
> 2. Let's fix code related to introduction of saturated values to use these
> bounds.
> 3. Update IndexScanNode to always produce no rows in cause when impossible
> bounds are being used.
> Example:
> {code:java}
> SELECT * FROM t WHERE t.tinyint_col = 1111111111
> {code}
> With type annotations:
> {code:java}
> SELECT * FROM t WHERE t.t.tinyint_col (TINYINT) = 1111111111 (INT)
> {code}
> After applying type coercions rules:
> {code:java}
> SELECT * FROM t WHERE CAST(t.tiny_int AS INT) = 1111111111
> // Behaviour:
> // This query performs an index look up to return all rows that have
> tinyint_col = SHORT::MAX_VALUE
> // Then it applies a predicate CAST(tinyint_col) = 1111111111 (to eliminate
> all results)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)