1# 2008 June 18 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 is devoted to testing the sqlite3_next_stmt interface. 14# 15# $Id: capi3d.test,v 1.1 2008/06/19 02:52:25 drh Exp $ 16# 17 18set testdir [file dirname $argv0] 19source $testdir/tester.tcl 20 21# Create N prepared statements against database connection db 22# and return a list of all the generated prepared statements. 23# 24proc make_prepared_statements {N} { 25 set plist {} 26 for {set i 0} {$i<$N} {incr i} { 27 set sql "SELECT $i FROM sqlite_master WHERE name LIKE '%$i%'" 28 if {rand()<0.33} { 29 set s [sqlite3_prepare_v2 db $sql -1 notused] 30 } else { 31 ifcapable utf16 { 32 if {rand()<0.5} { 33 set sql [encoding convertto unicode $sql]\x00\x00 34 set s [sqlite3_prepare16 db $sql -1 notused] 35 } else { 36 set s [sqlite3_prepare db $sql -1 notused] 37 } 38 } 39 ifcapable !utf16 { 40 set s [sqlite3_prepare db $sql -1 notused] 41 } 42 } 43 lappend plist $s 44 } 45 return $plist 46} 47 48 49# Scramble the $inlist into a random order. 50# 51proc scramble {inlist} { 52 set y {} 53 foreach x $inlist { 54 lappend y [list [expr {rand()}] $x] 55 } 56 set y [lsort $y] 57 set outlist {} 58 foreach x $y { 59 lappend outlist [lindex $x 1] 60 } 61 return $outlist 62} 63 64# Database initially has no prepared statements. 65# 66do_test capi3d-1.1 { 67 sqlite3_next_stmt db 0 68} {} 69 70# Run the following tests for between 1 and 100 prepared statements. 71# 72for {set i 1} {$i<=100} {incr i} { 73 set stmtlist [make_prepared_statements $i] 74 do_test capi3d-1.2.$i.1 { 75 set p [sqlite3_next_stmt db 0] 76 set x {} 77 while {$p!=""} { 78 lappend x $p 79 set p [sqlite3_next_stmt db $p] 80 } 81 lsort $x 82 } [lsort $stmtlist] 83 do_test capi3-1.2.$i.2 { 84 foreach p [scramble $::stmtlist] { 85 sqlite3_finalize $p 86 } 87 sqlite3_next_stmt db 0 88 } {} 89} 90 91 92finish_test 93