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