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)