SQLite

View Ticket
Login
Ticket Hash: 1b266395d6bc1041dbd907194539b2b81b7af1e2
Title: INSERT OR REPLACE with a foreign key constraint leads to assertion fault
Status: Fixed Type: Code_Defect
Severity: Severe Priority: Immediate
Subsystem: Unknown Resolution: Fixed
Last Modified: 2015-09-30 14:06:49
Version Found In: 3.8.11.1
User Comments:
drh added on 2015-09-30 12:10:31:

The following script causes an assertion fault:

PRAGMA foreign_keys=1;
CREATE TABLE Foo (Id INTEGER PRIMARY KEY, ParentId INTEGER REFERENCES Foo(Id) ON DELETE CASCADE, C1);
INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (1, null, 'A');
INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 1, 'A-2-1');
INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (3, 2, 'A-3-2');
INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (4, 3, 'A-4-3');
INSERT OR REPLACE INTO Foo(Id, ParentId, C1) VALUES (2, 3, 'A-2-3');

This problem appears to have been introduced with version 3.8.4, specifically at check-in [56bc5ce8958c8e625].


drh added on 2015-09-30 12:36:57:

A simpler test case:

PRAGMA foreign_keys=ON;
CREATE TABLE t1(x INTEGER PRIMARY KEY, parent REFERENCES t1 ON DELETE CASCADE);
INSERT INTO t1 VALUES(1, NULL),(2, 1),(3, 2);
INSERT OR REPLACE INTO t1 VALUES(2, 3);