1# 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 39 sqlite db test.db 40 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 69 sqlite db test.db 70 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 } 86} {1 {no such table: main.test2}} 87do_test trigger4-3.2 { 88 db close 89 sqlite db test.db 90 catchsql { 91 insert into test values(7,8,9); 92 } 93} {1 {no such table: main.test2}} 94do_test trigger4-3.3 { 95 catchsql { 96 update test set a=222 where id=1; 97 } 98} {1 {no such table: main.test2}} 99do_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 118 sqlite db test.db 119 execsql { 120 update test set b=99 where id=7; 121 select * from test2; 122 } 123} {7 99} 124 125integrity_check trigger4-4.1 126 127finish_test 128