[ 
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)

Reply via email to