blob: 16ed4678141a2d263ebedc67fc17cfacc067aecc [file] [log] [blame]
drhf573c992002-07-31 00:32:50 +00001# The author disclaims copyright to this source code. In place of
2# a legal notice, here is a blessing:
3#
4# May you do good and not evil.
5# May you find forgiveness for yourself and forgive others.
6# May you share freely, never taking more than you give.
7#
8#***********************************************************************
9#
10# This file tests the triggers of views.
11#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15
16do_test trigger4-1.1 {
17 execsql {
18 create table test1(id integer primary key,a);
19 create table test2(id integer,b);
20 create view test as
21 select test1.id as id,a as a,b as b
22 from test1 join test2 on test2.id = test1.id;
23 create trigger I_test instead of insert on test
24 begin
25 insert into test1 (id,a) values (NEW.id,NEW.a);
26 insert into test2 (id,b) values (NEW.id,NEW.b);
27 end;
28 insert into test values(1,2,3);
29 select * from test1;
30 }
31} {1 2}
32do_test trigger4-1.2 {
33 execsql {
34 select * from test2;
35 }
36} {1 3}
37do_test trigger4-1.3 {
38 db close
drhef4ac8f2004-06-19 00:16:31 +000039 sqlite3 db test.db
drhf573c992002-07-31 00:32:50 +000040 execsql {
41 insert into test values(4,5,6);
42 select * from test1;
43 }
44} {1 2 4 5}
45do_test trigger4-1.4 {
46 execsql {
47 select * from test2;
48 }
49} {1 3 4 6}
50
51do_test trigger4-2.1 {
52 execsql {
53 create trigger U_test instead of update on test
54 begin
55 update test1 set a=NEW.a where id=NEW.id;
56 update test2 set b=NEW.b where id=NEW.id;
57 end;
58 update test set a=22 where id=1;
59 select * from test1;
60 }
61} {1 22 4 5}
62do_test trigger4-2.2 {
63 execsql {
64 select * from test2;
65 }
66} {1 3 4 6}
67do_test trigger4-2.3 {
68 db close
drhef4ac8f2004-06-19 00:16:31 +000069 sqlite3 db test.db
drhf573c992002-07-31 00:32:50 +000070 execsql {
71 update test set b=66 where id=4;
72 select * from test1;
73 }
74} {1 22 4 5}
75do_test trigger4-2.4 {
76 execsql {
77 select * from test2;
78 }
79} {1 3 4 66}
80
81do_test trigger4-3.1 {
82 catchsql {
83 drop table test2;
84 insert into test values(7,8,9);
85 }
drhf26e09c2003-05-31 16:21:12 +000086} {1 {no such table: main.test2}}
drhf573c992002-07-31 00:32:50 +000087do_test trigger4-3.2 {
88 db close
drhef4ac8f2004-06-19 00:16:31 +000089 sqlite3 db test.db
drhf573c992002-07-31 00:32:50 +000090 catchsql {
91 insert into test values(7,8,9);
92 }
drhf26e09c2003-05-31 16:21:12 +000093} {1 {no such table: main.test2}}
drhf573c992002-07-31 00:32:50 +000094do_test trigger4-3.3 {
95 catchsql {
96 update test set a=222 where id=1;
97 }
drhf26e09c2003-05-31 16:21:12 +000098} {1 {no such table: main.test2}}
drhf573c992002-07-31 00:32:50 +000099do_test trigger4-3.4 {
100 execsql {
101 select * from test1;
102 }
103} {1 22 4 5}
104do_test trigger4-3.5 {
105 execsql {
106 create table test2(id,b);
107 insert into test values(7,8,9);
108 select * from test1;
109 }
110} {1 22 4 5 7 8}
111do_test trigger4-3.6 {
112 execsql {
113 select * from test2;
114 }
115} {7 9}
116do_test trigger4-3.7 {
117 db close
drhef4ac8f2004-06-19 00:16:31 +0000118 sqlite3 db test.db
drhf573c992002-07-31 00:32:50 +0000119 execsql {
120 update test set b=99 where id=7;
121 select * from test2;
122 }
123} {7 99}
124
drhed717fe2003-06-15 23:42:24 +0000125integrity_check trigger4-4.1
126
drhf573c992002-07-31 00:32:50 +0000127finish_test