3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
12 # Testing of the STMT virtual table.
14 # This also validates the SQLITE_STMTSTATUS_REPREPARE and
15 # SQLITE_STMTSTATUS_RUN values for sqlite3_stmt_status().
18 set testdir [file dirname $argv0]
19 source $testdir/tester.tcl
28 unset -nocomplain x y z
32 do_execsql_test stmtvtab1-100 {
33 CREATE TABLE t1(a,b,c);
34 INSERT INTO t1 VALUES($a,$b,$c);
35 CREATE INDEX t1a ON t1(a);
36 SELECT run, sql FROM sqlite_stmt ORDER BY 1;
37 } {1 {SELECT run, sql FROM sqlite_stmt ORDER BY 1;} 1 {CREATE INDEX t1a ON t1(a);} 1 {INSERT INTO t1 VALUES($a,$b,$c);} 1 {CREATE TABLE t1(a,b,c);}}
41 do_execsql_test stmtvtab1-110 {
42 INSERT INTO t1 VALUES($a,$b,$c);
43 SELECT reprep,run,SQL FROM sqlite_stmt WHERE sql LIKE '%INSERT%' AND NOT busy;
44 } {1 2 {INSERT INTO t1 VALUES($a,$b,$c);}}
48 do_execsql_test stmtvtab1-120 {
49 INSERT INTO t1 VALUES($a,$b,$c);
50 SELECT reprep,run,SQL FROM sqlite_stmt WHERE sql LIKE '%INSERT%' AND NOT busy;
51 } {1 3 {INSERT INTO t1 VALUES($a,$b,$c);}}
55 do_execsql_test stmtvtab1-130 {
56 CREATE INDEX t1b ON t1(b);
57 INSERT INTO t1 VALUES($a,$b,$c);
58 SELECT reprep,run,SQL FROM sqlite_stmt WHERE sql LIKE '%INSERT%' AND NOT busy;
59 } {2 4 {INSERT INTO t1 VALUES($a,$b,$c);}}
61 # All statements are still in cache
63 do_execsql_test stmtvtab1-140 {
64 SELECT count(*) FROM sqlite_stmt WHERE NOT busy;
67 # None of the prepared statements should use more than a couple thousand
70 #db eval {SELECT mem, sql FROM sqlite_stmt} {puts [format {%5d %s} $mem $sql]}
71 do_execsql_test stmtvtab1-150 {
72 SELECT count(*) FROM sqlite_stmt WHERE mem>5000;
75 # Flushing the cache clears all of the prepared statements.
78 do_execsql_test stmtvtab1-160 {
79 SELECT * FROM sqlite_stmt WHERE NOT busy;