mirror of
https://gitlab.com/cznic/sqlite.git
synced 2024-11-24 02:26:14 +00:00
95 lines
2.4 KiB
Plaintext
95 lines
2.4 KiB
Plaintext
# 2017-03-24
|
|
#
|
|
# The author disclaims copyright to this source code. In place of
|
|
# a legal notice', here is a blessing:
|
|
#
|
|
# May you do good and not evil.
|
|
# May you find forgiveness for yourself and forgive others.
|
|
# May you share freely, never taking more than you give.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
set testprefix triggerG
|
|
ifcapable {!trigger} {
|
|
finish_test
|
|
return
|
|
}
|
|
|
|
# Test cases for ticket
|
|
# https://www.sqlite.org/src/tktview/06796225f59c057cd120f
|
|
#
|
|
# The OP_Once opcode was not working correctly for recursive triggers.
|
|
#
|
|
do_execsql_test 100 {
|
|
PRAGMA recursive_triggers = 1;
|
|
|
|
CREATE TABLE t1(a);
|
|
CREATE INDEX i1 ON t1(a);
|
|
INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9);
|
|
CREATE TABLE t2(b);
|
|
CREATE TABLE t3(c);
|
|
|
|
CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN
|
|
INSERT INTO t3 SELECT new.c+1 WHERE new.c<5;
|
|
INSERT INTO t2 SELECT new.c*100+a FROM t1 WHERE a IN (1, 2, 3, 4);
|
|
END;
|
|
|
|
INSERT INTO t3 VALUES(2);
|
|
SELECT c FROM t3 ORDER BY c;;
|
|
} {2 3 4 5}
|
|
do_execsql_test 110 {
|
|
SELECT b FROM t2 ORDER BY b;
|
|
} {202 203 302 303 402 403 502 503}
|
|
|
|
do_execsql_test 200 {
|
|
DELETE FROM t1;
|
|
INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9);
|
|
DELETE FROM t2;
|
|
DELETE FROM t3;
|
|
DROP TRIGGER tr;
|
|
CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN
|
|
INSERT INTO t3 SELECT new.c+1 WHERE new.c<5;
|
|
INSERT INTO t2 SELECT new.c*10000+xx.a*100+yy.a
|
|
FROM t1 AS xx, t1 AS yy
|
|
WHERE xx.a IN (1,2,3,4)
|
|
AND yy.a IN (2,3,4,5);
|
|
END;
|
|
|
|
INSERT INTO t3 VALUES(2);
|
|
SELECT b FROM t2 ORDER BY b;
|
|
} {20202 20203 20302 20303 30202 30203 30302 30303 40202 40203 40302 40303 50202 50203 50302 50303}
|
|
|
|
# At one point the following was causing an assert() to fail.
|
|
#
|
|
do_execsql_test 300 {
|
|
CREATE TABLE t4(x);
|
|
CREATE TRIGGER tr4 AFTER INSERT ON t4 BEGIN
|
|
SELECT 0x2147483648e0e0099 AS y WHERE y;
|
|
END;
|
|
}
|
|
|
|
do_catchsql_test 310 {
|
|
INSERT INTO t4 VALUES(1);
|
|
} {1 {hex literal too big: 0x2147483648e0e0099}}
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
do_execsql_test 400 {
|
|
CREATE VIEW v0(a) AS SELECT 1234;
|
|
CREATE TRIGGER t0001 INSTEAD OF DELETE ON v0 BEGIN
|
|
SELECT old.a;
|
|
END;
|
|
}
|
|
do_execsql_test 405 {
|
|
SELECT a FROM v0;
|
|
} {1234}
|
|
do_execsql_test 410 {
|
|
DELETE FROM v0;
|
|
}
|
|
|
|
|
|
finish_test
|