1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Handle "RETURNING rowid" clauses attached to INSERTs on views without causing an assert() to fail. Fixes dbsqlfuzz crash 0081f863d7b2002045ac2361879fc80dfebb98f1.

FossilOrigin-Name: 9c5b7386d013a7f22a93c69722c4648e2ab60eef180f48b5470bfea6fa74b3da
This commit is contained in:
dan
2021-04-06 13:53:10 +00:00
parent 8119aab3c8
commit 2a1aeaa36e
4 changed files with 51 additions and 9 deletions

View File

@ -189,4 +189,41 @@ do_catchsql_test 9.1 {
UPDATE pragma_encoding SET encoding='UTF-8' RETURNING a, b, *;
} {1 {table pragma_encoding may not be modified}}
# dbsqlfuzz crash-0081f863d7b2002045ac2361879fc80dfebb98f1
reset_db
do_execsql_test 10.1 {
CREATE TABLE t1_a(a, b);
CREATE VIEW t1 AS SELECT a, b FROM t1_a;
INSERT INTO t1_a VALUES('x', 'y');
INSERT INTO t1_a VALUES('x', 'y');
INSERT INTO t1_a VALUES('x', 'y');
CREATE TABLE log(op, r, a, b);
}
do_execsql_test 10.2 {
CREATE TRIGGER tr1 INSTEAD OF INSERT ON t1 BEGIN
INSERT INTO log VALUES('insert', new.rowid, new.a, new.b);
END;
CREATE TRIGGER tr2 INSTEAD OF UPDATE ON t1 BEGIN
INSERT INTO log VALUES('update', new.rowid, new.a, new.b);
END;
}
do_execsql_test 10.3 {
INSERT INTO t1(a, b) VALUES(1234, 5678) RETURNING rowid;
} {-1}
do_execsql_test 10.3 {
UPDATE t1 SET a='z' WHERE b='y' RETURNING rowid;
} {1 2 3}
do_execsql_test 10.4 {
SELECT * FROM log;
} {
insert -1 1234 5678 update 1 z y update 2 z y update 3 z y
}
finish_test