[
https://issues.apache.org/jira/browse/IGNITE-16578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Evgeny Stanilovsky updated IGNITE-16578:
----------------------------------------
Description:
Partial PK update possibilities:
{noformat}
CREATE TABLE test1 (k1 int, k2 int, a int, b int, CONSTRAINT PK PRIMARY KEY
(k1, k2));
INSERT INTO test1 (k2, b) VALUES (1, 1); <-- need to be rejected
CREATE TABLE test2 (k1 int DEFAULT 0, k2 int, a int, b int, CONSTRAINT PK
PRIMARY KEY (k1, k2));
INSERT INTO test1 (k2, b) VALUES (1, 1); <-- it`s all ok there.
{noformat}
At first case now we obtain below trace, seems it helpful to check constraints
on validation phase before RowAssembler was called.
{noformat}
class org.apache.ignite.lang.IgniteInternalException: Unexpected exception
at
org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:300)
at
org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:75)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: class org.apache.ignite.internal.schema.SchemaMismatchException:
Failed to set column (null was passed, but column is not nullable): Column
[schemaIndex=0, columnOrder=0, name=K1, type=NativeType [name=INT32,
sizeInBytes=4, fixed=true], nullable=false]
at
org.apache.ignite.internal.schema.row.RowAssembler.appendNull(RowAssembler.java:342)
at
org.apache.ignite.internal.schema.row.RowAssembler.writeValue(RowAssembler.java:166)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertTuple(IgniteTableImpl.java:310)
at
org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.toModifyRow(IgniteTableImpl.java:273)
at
org.apache.ignite.internal.sql.engine.exec.rel.ModifyNode.push(ModifyNode.java:122)
at
org.apache.ignite.internal.sql.engine.exec.rel.ProjectNode.push(ProjectNode.java:71)
at
org.apache.ignite.internal.sql.engine.exec.rel.ScanNode.push(ScanNode.java:113)
{noformat}
was:
Partial PK update possibilities:
{noformat}
CREATE TABLE test1 (k1 int, k2 int, a int, b int, CONSTRAINT PK PRIMARY KEY
(k1, k2));
INSERT INTO test1 (k2, b) VALUES (1, 1); <-- need to be rejected
CREATE TABLE test2 (k1 int DEFAULT 0, k2 int, a int, b int, CONSTRAINT PK
PRIMARY KEY (k1, k2));
INSERT INTO test1 (k2, b) VALUES (1, 1); <-- it`s all ok there.
{noformat}
> Sql. Implement validation of inserts with composite PK and partially
> determined PK consistent columns.
> ------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-16578
> URL: https://issues.apache.org/jira/browse/IGNITE-16578
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Evgeny Stanilovsky
> Assignee: Evgeny Stanilovsky
> Priority: Major
> Labels: ignite-3
> Fix For: 3.0.0-alpha5
>
>
> Partial PK update possibilities:
> {noformat}
> CREATE TABLE test1 (k1 int, k2 int, a int, b int, CONSTRAINT PK PRIMARY KEY
> (k1, k2));
> INSERT INTO test1 (k2, b) VALUES (1, 1); <-- need to be rejected
> CREATE TABLE test2 (k1 int DEFAULT 0, k2 int, a int, b int, CONSTRAINT PK
> PRIMARY KEY (k1, k2));
> INSERT INTO test1 (k2, b) VALUES (1, 1); <-- it`s all ok there.
> {noformat}
> At first case now we obtain below trace, seems it helpful to check
> constraints on validation phase before RowAssembler was called.
> {noformat}
> class org.apache.ignite.lang.IgniteInternalException: Unexpected exception
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:300)
> at
> org.apache.ignite.internal.sql.engine.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:75)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: class org.apache.ignite.internal.schema.SchemaMismatchException:
> Failed to set column (null was passed, but column is not nullable): Column
> [schemaIndex=0, columnOrder=0, name=K1, type=NativeType [name=INT32,
> sizeInBytes=4, fixed=true], nullable=false]
> at
> org.apache.ignite.internal.schema.row.RowAssembler.appendNull(RowAssembler.java:342)
> at
> org.apache.ignite.internal.schema.row.RowAssembler.writeValue(RowAssembler.java:166)
> at
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertTuple(IgniteTableImpl.java:310)
> at
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.toModifyRow(IgniteTableImpl.java:273)
> at
> org.apache.ignite.internal.sql.engine.exec.rel.ModifyNode.push(ModifyNode.java:122)
> at
> org.apache.ignite.internal.sql.engine.exec.rel.ProjectNode.push(ProjectNode.java:71)
> at
> org.apache.ignite.internal.sql.engine.exec.rel.ScanNode.push(ScanNode.java:113)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)