xref: /sqlite-3.40.0/test/trace.test (revision 4dcbdbff)
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