[
https://issues.apache.org/jira/browse/IGNITE-19065?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maksim Zhuravkov updated IGNITE-19065:
--------------------------------------
Description:
DML queries with missing columns that have NOT NULL constraint successfully
pass the validation phase and fail at the execution phase because that
constraint is violated.
Example:
{code:java}
@Test
public void test() {
sql("CREATE TABLE integers(i INTEGER, j INTEGER NOT NULL, k INTEGER)");
sql("INSERT INTO integers (i, k) VALUES (1, 0)");
}
{code}
Error:
{code:java}
Caused by: org.apache.ignite.internal.schema.SchemaMismatchException:
IGN-CMN-65535 TraceId:73ff8353-de43-4a58-9332-9f7d87718a93 Failed to set column
(null was passed, but column is not nullable): Column [schemaIndex=1,
columnOrder=1, name=J, type=NativeType [name=INT32, sizeInBytes=4, fixed=true],
nullable=false]
at
org.apache.ignite.internal.schema.row.RowAssembler.appendNull(RowAssembler.java:261)
at
org.apache.ignite.internal.schema.row.RowAssembler.writeValue(RowAssembler.java:112)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.convertRow(IgniteTableImpl.java:516)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertAll(IgniteTableImpl.java:390)
{code}
It would be better to reject INSERT statements with omitted not nullable
columns at the validation phase in order not execute queries that always fail.
was:
DML queries with missing columns that have NOT NULL constraint successfully
pass the validation phase and fail at the execution phase because that
constraint is violated.
Example:
{code:java}
@Test
public void test() {
sql("CREATE TABLE integers(i INTEGER, j INTEGER NOT NULL, k INTEGER)");
sql("INSERT INTO integers (i, k) VALUES (1, 0)");
}
{code}
Error:
{code:java}
Caused by: org.apache.ignite.internal.schema.SchemaMismatchException:
IGN-CMN-65535 TraceId:73ff8353-de43-4a58-9332-9f7d87718a93 Failed to set column
(null was passed, but column is not nullable): Column [schemaIndex=1,
columnOrder=1, name=J, type=NativeType [name=INT32, sizeInBytes=4, fixed=true],
nullable=false]
at
org.apache.ignite.internal.schema.row.RowAssembler.appendNull(RowAssembler.java:261)
at
org.apache.ignite.internal.schema.row.RowAssembler.writeValue(RowAssembler.java:112)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.convertRow(IgniteTableImpl.java:516)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertAll(IgniteTableImpl.java:390)
{code}
It would be better to reject INSERT statements with omitted not nullable
columns at the validation phase in order not execute the query that always
fails.
> Sql. Reject INSERT statements with missing not nullable columns at the
> validation phase.
> ----------------------------------------------------------------------------------------
>
> Key: IGNITE-19065
> URL: https://issues.apache.org/jira/browse/IGNITE-19065
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Maksim Zhuravkov
> Priority: Minor
> Labels: calcite3-required, ignite-3
> Fix For: 3.0.0-beta2
>
>
> DML queries with missing columns that have NOT NULL constraint successfully
> pass the validation phase and fail at the execution phase because that
> constraint is violated.
> Example:
> {code:java}
> @Test
> public void test() {
> sql("CREATE TABLE integers(i INTEGER, j INTEGER NOT NULL, k
> INTEGER)");
> sql("INSERT INTO integers (i, k) VALUES (1, 0)");
> }
> {code}
> Error:
> {code:java}
> Caused by: org.apache.ignite.internal.schema.SchemaMismatchException:
> IGN-CMN-65535 TraceId:73ff8353-de43-4a58-9332-9f7d87718a93 Failed to set
> column (null was passed, but column is not nullable): Column [schemaIndex=1,
> columnOrder=1, name=J, type=NativeType [name=INT32, sizeInBytes=4,
> fixed=true], nullable=false]
> at
> org.apache.ignite.internal.schema.row.RowAssembler.appendNull(RowAssembler.java:261)
> at
> org.apache.ignite.internal.schema.row.RowAssembler.writeValue(RowAssembler.java:112)
> at
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.convertRow(IgniteTableImpl.java:516)
> at
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertAll(IgniteTableImpl.java:390)
> {code}
> It would be better to reject INSERT statements with omitted not nullable
> columns at the validation phase in order not execute queries that always fail.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)