Maksim Zhuravkov created IGNITE-22451:
-----------------------------------------

             Summary: Sql. An insert may cause specific later updates to fail.
                 Key: IGNITE-22451
                 URL: https://issues.apache.org/jira/browse/IGNITE-22451
             Project: Ignite
          Issue Type: Bug
          Components: sql
            Reporter: Maksim Zhuravkov



{noformat}
statement ok
CREATE TABLE tmp (c5 VARCHAR(5), c10 VARCHAR(10));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(5));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(3));

statement ok
UPDATE tmp SET c5=c5::CHAR(6)

{noformat}
Update statement fails with:

{noformat}
 java.lang.IllegalStateException: Row has not been fully built. Index: 2, 
fields: 3
        at 
org.apache.ignite.internal.sql.engine.exec.SqlRowHandler$RowBuilderImpl.checkState(SqlRowHandler.java:474)
 ~[main/:?]
        at 
org.apache.ignite.internal.sql.engine.exec.SqlRowHandler$RowBuilderImpl.build(SqlRowHandler.java:457)
 ~[main/:?]
        at 
org.apache.ignite.internal.sql.engine.exec.SqlRowHandler$RowBuilderImpl.build(SqlRowHandler.java:425)
 ~[main/:?]
        at 
org.apache.ignite.internal.sql.engine.util.TypeUtils.validateCharactersOverflowAndTrimIfPossible(TypeUtils.java:739)
 ~[main/:?]
        at 
org.apache.ignite.internal.sql.engine.exec.UpdatableTableImpl.validateCharactersOverflowAndTrimIfPossible(UpdatableTableImpl.java:387)
 ~[main/:?]
        at 
org.apache.ignite.internal.sql.engine.exec.UpdatableTableImpl.upsertAll(UpdatableTableImpl.java:122)
 ~[main/:?]
{noformat}

The following sequences also produces the same error

{noformat}
statement ok
CREATE TABLE tmp (c5 VARCHAR(5), c10 VARCHAR(10));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(5));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(10));

statement ok
UPDATE tmp SET c5=c5::CHAR(6)
{noformat}

The error won't happen, when there is no second update

{noformat}
statement ok
CREATE TABLE tmp (c5 VARCHAR(5), c10 VARCHAR(10));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(5));

statement ok
UPDATE tmp SET c5=c5::CHAR(6)
{noformat}

OR c5::CHAR(6) is replaced with CHAR(n) where n is less or equal than 5

{noformat}
statement ok
CREATE TABLE tmp (c5 VARCHAR(5), c10 VARCHAR(10));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(5));

statement ok
INSERT INTO tmp (c5) VALUES('a'::CHAR(3));

statement ok
UPDATE tmp SET c5=c5::CHAR(4)
{noformat}








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

Reply via email to