1# 2004 Jun 29 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 for the "sqlite3_trace()" API. 14# 15# $Id: trace.test,v 1.4 2004/09/17 20:46:55 drh Exp $ 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20set ::stmtlist {} 21do_test trace-1.1 { 22 set rc [catch {db trace 1 2 3} msg] 23 lappend rc $msg 24} {1 {wrong # args: should be "db trace ?CALLBACK?"}} 25proc trace_proc cmd { 26 lappend ::stmtlist [string trim $cmd] 27} 28do_test trace-1.2 { 29 db trace trace_proc 30 db trace 31} {trace_proc} 32do_test trace-1.3 { 33 execsql { 34 CREATE TABLE t1(a,b); 35 INSERT INTO t1 VALUES(1,2); 36 SELECT * FROM t1; 37 } 38} {1 2} 39do_test trace-1.4 { 40 set ::stmtlist 41} {{CREATE TABLE t1(a,b);} {INSERT INTO t1 VALUES(1,2);} {SELECT * FROM t1;}} 42do_test trace-1.5 { 43 db trace {} 44 db trace 45} {} 46 47# If we prepare a statement and execute it multiple times, the trace 48# happens on each execution. 49# 50db close 51set DB [sqlite3 db test.db] 52do_test trace-2.1 { 53 set STMT [sqlite3_prepare $DB {INSERT INTO t1 VALUES(2,3)} -1 TAIL] 54 db trace trace_proc 55 proc trace_proc sql { 56 global TRACE_OUT 57 set TRACE_OUT $sql 58 } 59 set TRACE_OUT {} 60 sqlite3_step $STMT 61 set TRACE_OUT 62} {INSERT INTO t1 VALUES(2,3)} 63do_test trace-2.2 { 64 set TRACE_OUT {} 65 sqlite3_reset $STMT 66 set TRACE_OUT 67} {} 68do_test trace-2.3 { 69 sqlite3_step $STMT 70 set TRACE_OUT 71} {INSERT INTO t1 VALUES(2,3)} 72do_test trace-2.4 { 73 execsql {SELECT * FROM t1} 74} {1 2 2 3 2 3} 75do_test trace-2.5 { 76 set TRACE_OUT 77} {SELECT * FROM t1} 78catch {sqlite3_finalize $STMT} 79 80 81finish_test 82