[ 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 for impossible search conditions with numeric literals. (was: Sql. Do not perform index lookups for impossible search conditions for numeric literals.) > Sql. Do not perform index operations for 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 fix remove this redudant lookup 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)