1: # 2004 December 07
2: #
3: # The author disclaims copyright to this source code. In place of
4: # a legal notice, here is a blessing:
5: #
6: # May you do good and not evil.
7: # May you find forgiveness for yourself and forgive others.
8: # May you share freely, never taking more than you give.
9: #
10: #***********************************************************************
11: # This file implements regression tests for SQLite library.
12: #
13: # This file implements tests to make sure expression of an INSERT
14: # and UPDATE statement are only evaluated once. See ticket #980.
15: # If an expression uses a function that has side-effects or which
16: # is not deterministic (ex: random()) then we want to make sure
17: # that the same evaluation occurs for the actual INSERT/UPDATE and
18: # for the NEW.* fields of any triggers that fire.
19: #
20: # $Id: trigger6.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
21:
22: set testdir [file dirname $argv0]
23: source $testdir/tester.tcl
24: ifcapable {!trigger} {
25: finish_test
26: return
27: }
28:
29: do_test trigger6-1.1 {
30: execsql {
31: CREATE TABLE t1(x, y);
32: CREATE TABLE log(a, b, c);
33: CREATE TRIGGER r1 BEFORE INSERT ON t1 BEGIN
34: INSERT INTO log VALUES(1, new.x, new.y);
35: END;
36: CREATE TRIGGER r2 BEFORE UPDATE ON t1 BEGIN
37: INSERT INTO log VALUES(2, new.x, new.y);
38: END;
39: }
40: set ::trigger6_cnt 0
41: proc trigger6_counter {args} {
42: incr ::trigger6_cnt
43: return $::trigger6_cnt
44: }
45: db function counter trigger6_counter
46: execsql {
47: INSERT INTO t1 VALUES(1,counter());
48: SELECT * FROM t1;
49: }
50: } {1 1}
51: do_test trigger6-1.2 {
52: execsql {
53: SELECT * FROM log;
54: }
55: } {1 1 1}
56: do_test trigger6-1.3 {
57: execsql {
58: DELETE FROM t1;
59: DELETE FROM log;
60: INSERT INTO t1 VALUES(2,counter(2,3)+4);
61: SELECT * FROM t1;
62: }
63: } {2 6}
64: do_test trigger6-1.4 {
65: execsql {
66: SELECT * FROM log;
67: }
68: } {1 2 6}
69: do_test trigger6-1.5 {
70: execsql {
71: DELETE FROM log;
72: UPDATE t1 SET y=counter(5);
73: SELECT * FROM t1;
74: }
75: } {2 3}
76: do_test trigger6-1.6 {
77: execsql {
78: SELECT * FROM log;
79: }
80: } {2 2 3}
81:
82: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>