github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/stmtvtab1.test (about) 1 # 2017-06-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 # 12 # Testing of the STMT virtual table. 13 # 14 # This also validates the SQLITE_STMTSTATUS_REPREPARE and 15 # SQLITE_STMTSTATUS_RUN values for sqlite3_stmt_status(). 16 # 17 18 set testdir [file dirname $argv0] 19 source $testdir/tester.tcl 20 21 ifcapable !stmtvtab { 22 finish_test 23 return 24 } 25 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);}} 60 61 # All statements are still in cache 62 # 63 do_execsql_test stmtvtab1-140 { 64 SELECT count(*) FROM sqlite_stmt WHERE NOT busy; 65 } {6} 66 67 # None of the prepared statements should use more than a couple thousand 68 # bytes of memory 69 # 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} 74 75 # Flushing the cache clears all of the prepared statements. 76 # 77 db cache flush 78 do_execsql_test stmtvtab1-160 { 79 SELECT * FROM sqlite_stmt WHERE NOT busy; 80 } {} 81 82 finish_test