1 2#pragma ident "%Z%%M% %I% %E% SMI" 3 4# 2004 Jan 14 5# 6# The author disclaims copyright to this source code. In place of 7# a legal notice, here is a blessing: 8# 9# May you do good and not evil. 10# May you find forgiveness for yourself and forgive others. 11# May you share freely, never taking more than you give. 12# 13#*********************************************************************** 14# This file implements regression tests for TCL interface to the 15# SQLite library. 16# 17# The focus of the tests in this file is the following interface: 18# 19# sqlite_commit_hook 20# 21# $Id: hook.test,v 1.3 2004/01/15 02:44:03 drh Exp $ 22 23set testdir [file dirname $argv0] 24source $testdir/tester.tcl 25 26do_test hook-1.2 { 27 db commit_hook 28} {} 29 30 31do_test hook-3.1 { 32 set commit_cnt 0 33 proc commit_hook {} { 34 incr ::commit_cnt 35 return 0 36 } 37 db commit_hook ::commit_hook 38 db commit_hook 39} {::commit_hook} 40do_test hook-3.2 { 41 set commit_cnt 42} {0} 43do_test hook-3.3 { 44 execsql { 45 CREATE TABLE t2(a,b); 46 } 47 set commit_cnt 48} {1} 49do_test hook-3.4 { 50 execsql { 51 INSERT INTO t2 VALUES(1,2); 52 INSERT INTO t2 SELECT a+1, b+1 FROM t2; 53 INSERT INTO t2 SELECT a+2, b+2 FROM t2; 54 } 55 set commit_cnt 56} {4} 57do_test hook-3.5 { 58 set commit_cnt {} 59 proc commit_hook {} { 60 set ::commit_cnt [execsql {SELECT * FROM t2}] 61 return 0 62 } 63 execsql { 64 INSERT INTO t2 VALUES(5,6); 65 } 66 set commit_cnt 67} {1 2 2 3 3 4 4 5 5 6} 68do_test hook-3.6 { 69 set commit_cnt {} 70 proc commit_hook {} { 71 set ::commit_cnt [execsql {SELECT * FROM t2}] 72 return 1 73 } 74 catchsql { 75 INSERT INTO t2 VALUES(6,7); 76 } 77} {1 {constraint failed}} 78do_test hook-3.7 { 79 set commit_cnt 80} {1 2 2 3 3 4 4 5 5 6 6 7} 81do_test hook-3.8 { 82 execsql {SELECT * FROM t2} 83} {1 2 2 3 3 4 4 5 5 6} 84 85 86finish_test 87