Small performance optimization in sqlite3VdbeRecordCompareWithSkip() for
[sqlite.git] / test / stmtvtab1.test
blobe8a79fdacdf7e5c9c7bbad893b31996f4d88ca20
1 # 2017-06-29
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
21 ifcapable !stmtvtab {
22   finish_test
23   return
26 db cache flush
27 db cache size 20
28 unset -nocomplain x y z
29 set x giraffe
30 set y mango
31 set z alabama
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);}}
38 set x neon
39 set y event
40 set z future
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);}}
45 set x network
46 set y fit
47 set z metal
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);}}
52 set x history
53 set y detail
54 set z grace
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;
65 } {6}
67 # None of the prepared statements should use more than a couple thousand
68 # bytes of memory
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;
73 } {0}
75 # Flushing the cache clears all of the prepared statements.
77 db cache flush
78 do_execsql_test stmtvtab1-160 {
79   SELECT * FROM sqlite_stmt WHERE NOT busy;
80 } {}
82 finish_test