1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

Do not crash when compiling an "INSERT INTO tbl DEFAULT VALUES" when tbl has either BEFORE or INSTEAD OF triggers attached to it. Ticket [f3162063fd].

FossilOrigin-Name: ca359a3e8048bd11605c41c4b48134c0343e543b
This commit is contained in:
dan
2010-03-30 12:40:32 +00:00
parent d454214ddd
commit 7ba4597135
4 changed files with 72 additions and 20 deletions

View File

@ -855,5 +855,67 @@ do_test triggerC-10.3 {
}
} {5 2 3 35 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 22 34 35 36 37 38 39 40}
#-------------------------------------------------------------------------
# Test that bug [371bab5d65] has been fixed. BEFORE INSERT and INSTEAD OF
# INSERT triggers with the DEFAULT VALUES INSERT syntax.
#
do_test triggerC-11.0 {
catchsql { DROP TABLE log }
execsql { CREATE TABLE log(a, b) }
} {}
foreach {testno tbl defaults} {
1 "CREATE TABLE t1(a, b)" {{} {}}
2 "CREATE TABLE t1(a DEFAULT 1, b DEFAULT 'abc')" {1 abc}
3 "CREATE TABLE t1(a, b DEFAULT 4.5)" {{} 4.5}
} {
do_test triggerC-11.$testno.1 {
catchsql { DROP TABLE t1 }
execsql { DELETE FROM log }
execsql $tbl
execsql {
CREATE TRIGGER tt1 BEFORE INSERT ON t1 BEGIN
INSERT INTO log VALUES(new.a, new.b);
END;
INSERT INTO t1 DEFAULT VALUES;
SELECT * FROM log;
}
} $defaults
do_test triggerC-11.$testno.2 {
execsql { DELETE FROM log }
execsql {
CREATE TRIGGER tt2 AFTER INSERT ON t1 BEGIN
INSERT INTO log VALUES(new.a, new.b);
END;
INSERT INTO t1 DEFAULT VALUES;
SELECT * FROM log;
}
} [concat $defaults $defaults]
do_test triggerC-11.$testno.3 {
execsql { DROP TRIGGER tt1 }
execsql { DELETE FROM log }
execsql {
INSERT INTO t1 DEFAULT VALUES;
SELECT * FROM log;
}
} $defaults
}
do_test triggerC-11.4 {
catchsql { DROP TABLE t2 }
execsql {
DELETE FROM log;
CREATE TABLE t2(a, b);
CREATE VIEW v2 AS SELECT * FROM t2;
CREATE TRIGGER tv2 INSTEAD OF INSERT ON v2 BEGIN
INSERT INTO log VALUES(new.a, new.b);
END;
INSERT INTO v2 DEFAULT VALUES;
SELECT a, b, a IS NULL, b IS NULL FROM log;
}
} {{} {} 1 1}
finish_test