Maksim Zhuravkov created IGNITE-22785:
-----------------------------------------

             Summary: Sql. Partition pruning. Insert. ArrayOutOfBoundsError 
when value of key column overflows.
                 Key: IGNITE-22785
                 URL: https://issues.apache.org/jira/browse/IGNITE-22785
             Project: Ignite
          Issue Type: Improvement
          Components: sql
            Reporter: Maksim Zhuravkov


Reproducer:

1. Disable KeyValueModifyPlan.
2. Run the following test case:

{noformat}
    @Test
    public void dmlOps() {
        sql("CREATE TABLE test (id INT PRIMARY KEY, val INT);");
        sql(String.format("INSERT INTO test VALUES(%d, 1)", Long.MAX_VALUE));
    }
{noformat}

*Expected error*: SMALLINT out of range
*Actual error*:

{noformat}
*no* further _formatting_ is done here
{noformat}

*Plan*:

{noformat}
Project(ROWCOUNT=[CAST($0):BIGINT NOT NULL]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=8.0, cpu=11.0, memory=7.0, io=2.0, network=6.0], id = 60
  ColocatedHashAggregate(group=[{}], agg#0=[$SUM0($0)]): rowcount = 1.0, 
cumulative cost = IgniteCost [rowCount=6.0, cpu=9.0, memory=6.0, io=1.0, 
network=5.0], id = 59
    Exchange(distribution=[single]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=5.0, cpu=8.0, memory=1.0, io=1.0, network=5.0], id = 58
      TableModify(table=[[PUBLIC, TEST]], operation=[INSERT], 
flattened=[false], tableId=[9]): rowcount = 1.0, cumulative cost = IgniteCost 
[rowCount=4.0, cpu=7.0, memory=1.0, io=1.0, network=1.0], id = 57
        TrimExchange(distribution=[affinity[tableId=9, zoneId=9][0]]): rowcount 
= 1.0, cumulative cost = IgniteCost [rowCount=3.0, cpu=6.0, memory=0.0, io=0.0, 
network=0.0], id = 56
          Project(ID=[CAST(9223372036854775807:BIGINT):INTEGER NOT NULL], 
VAL=[1]): rowcount = 1.0, cumulative cost = IgniteCost [rowCount=2.0, cpu=2.0, 
memory=0.0, io=0.0, network=0.0], id = 55
            Values(tuples=[[{ 0 }]]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=1.0, cpu=1.0, memory=0.0, io=0.0, network=0.0], id = 47

{noformat}

Possible culprit:

{noformat}
 ref = (RexLocalRef) projections.get(mapping.getSourceOpt(key)); <<<--- this 
line
{noformat}
If a primary key column is wrapped into a cast, then 
`mapping.getSourceOpt(key)` returns -1;

*Additional context*:

This query does not produce an error:
{noformat}
sql("INSERT INTO test VALUES('11111'::INT, 1)");
{noformat}

*Plan*:

{noformat}
Project(ROWCOUNT=[CAST($0):BIGINT NOT NULL]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=7.0, cpu=10.0, memory=7.0, io=2.0, network=6.0], id = 38
  ColocatedHashAggregate(group=[{}], agg#0=[$SUM0($0)]): rowcount = 1.0, 
cumulative cost = IgniteCost [rowCount=5.0, cpu=8.0, memory=6.0, io=1.0, 
network=5.0], id = 37
    Exchange(distribution=[single]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=4.0, cpu=7.0, memory=1.0, io=1.0, network=5.0], id = 36
      TableModify(table=[[PUBLIC, TEST]], operation=[INSERT], 
flattened=[false], tableId=[9]): rowcount = 1.0, cumulative cost = IgniteCost 
[rowCount=3.0, cpu=6.0, memory=1.0, io=1.0, network=1.0], id = 35
        TrimExchange(distribution=[affinity[tableId=9, zoneId=9][0]]): rowcount 
= 1.0, cumulative cost = IgniteCost [rowCount=2.0, cpu=5.0, memory=0.0, io=0.0, 
network=0.0], id = 34
          Values(tuples=[[{ 11111, 1 }]]): rowcount = 1.0, cumulative cost = 
IgniteCost [rowCount=1.0, cpu=1.0, memory=0.0, io=0.0, network=0.0], id = 29

{noformat}








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

Reply via email to