[ 
https://issues.apache.org/jira/browse/IGNITE-25983?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Pereslegin updated IGNITE-25983:
--------------------------------------
    Description: 
Currently multibounds are not built for HASH index.

Consider the following example:
{code:Java}
    sql("CREATE TABLE t (id INT PRIMARY KEY, val INT)");
    sql("CREATE INDEX t_val_idx_hash ON t USING HASH(val)");
    sql("INSERT INTO t values (1, 1), (2, 2), (3, 3), (7, 4), (17, 5), (27, 6), 
(-38, 7)");

    assertQuery("SELECT /*+ FORCE_INDEX(T_VAL_IDX_HASH) */ val FROM t WHERE val 
IN (2, 3)")
            .matches(QueryChecker.containsIndexScan("PUBLIC", "T"))
            .check();;
{code}

Result
{noformat}
java.lang.AssertionError: Invalid plan:
Exchange
    distribution: single
    est: (rows=1)
  TableScan
      table: PUBLIC.T
      predicate: SEARCH(VAL, Sarg[2, 3])
      fieldNames: [VAL]
      est: (rows=1)
{noformat}

The same example with SORTED index works fine.

Looks like the problem is in {{RexUtils#buildHashSearchBounds(RelOptCluster, 
RelCollation, RexNode, RelDataType, mmutableIntList)}}.

  was:
Currently multibounds are not built for HASH index.

Consider the following example:
{code:Java}
        sql("CREATE TABLE t (id INT PRIMARY KEY, val INT)");
        sql("CREATE INDEX t_val_idx_hash ON t USING HASH(val)");
        sql("INSERT INTO t values (1, 1), (2, 2), (3, 3), (7, 4), (17, 5), (27, 
6), (-38, 7)");

        assertQuery("SELECT /*+ FORCE_INDEX(T_VAL_IDX_HASH) */ val FROM t WHERE 
val IN (2, 3)")
                .matches(QueryChecker.containsIndexScan("PUBLIC", "T"))
                .check();;
{code}

Result
{noformat}
java.lang.AssertionError: Invalid plan:
Exchange
    distribution: single
    est: (rows=1)
  TableScan
      table: PUBLIC.T
      predicate: SEARCH(VAL, Sarg[2, 3])
      fieldNames: [VAL]
      est: (rows=1)
{noformat}

The same example with SORTED index works fine.

Looks like the problem is in {{RexUtils#buildHashSearchBounds(RelOptCluster, 
RelCollation, RexNode, RelDataType, mmutableIntList)}}.


> Hash index isn't used with multiple keys
> ----------------------------------------
>
>                 Key: IGNITE-25983
>                 URL: https://issues.apache.org/jira/browse/IGNITE-25983
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql ai3
>            Reporter: Pavel Pereslegin
>            Priority: Major
>              Labels: ignite-3
>
> Currently multibounds are not built for HASH index.
> Consider the following example:
> {code:Java}
>     sql("CREATE TABLE t (id INT PRIMARY KEY, val INT)");
>     sql("CREATE INDEX t_val_idx_hash ON t USING HASH(val)");
>     sql("INSERT INTO t values (1, 1), (2, 2), (3, 3), (7, 4), (17, 5), (27, 
> 6), (-38, 7)");
>     assertQuery("SELECT /*+ FORCE_INDEX(T_VAL_IDX_HASH) */ val FROM t WHERE 
> val IN (2, 3)")
>             .matches(QueryChecker.containsIndexScan("PUBLIC", "T"))
>             .check();;
> {code}
> Result
> {noformat}
> java.lang.AssertionError: Invalid plan:
> Exchange
>     distribution: single
>     est: (rows=1)
>   TableScan
>       table: PUBLIC.T
>       predicate: SEARCH(VAL, Sarg[2, 3])
>       fieldNames: [VAL]
>       est: (rows=1)
> {noformat}
> The same example with SORTED index works fine.
> Looks like the problem is in {{RexUtils#buildHashSearchBounds(RelOptCluster, 
> RelCollation, RexNode, RelDataType, mmutableIntList)}}.



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

Reply via email to