Annotation of embedaddon/sqlite3/test/capi3d.test, revision 1.1

1.1     ! misho       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 and
        !            14: # sqlite3_stmt_readonly and sqlite3_stmt_busy interfaces.
        !            15: #
        !            16: # $Id: capi3d.test,v 1.2 2008/07/14 15:11:20 drh Exp $
        !            17: #
        !            18: 
        !            19: set testdir [file dirname $argv0]
        !            20: source $testdir/tester.tcl
        !            21: 
        !            22: # Create N prepared statements against database connection db
        !            23: # and return a list of all the generated prepared statements.
        !            24: #
        !            25: proc make_prepared_statements {N} {
        !            26:   set plist {}
        !            27:   for {set i 0} {$i<$N} {incr i} {
        !            28:     set sql "SELECT $i FROM sqlite_master WHERE name LIKE '%$i%'"
        !            29:     if {rand()<0.33} {    
        !            30:       set s [sqlite3_prepare_v2 db $sql -1 notused]
        !            31:     } else {
        !            32:       ifcapable utf16 {
        !            33:         if {rand()<0.5} {
        !            34:           set sql [encoding convertto unicode $sql]\x00\x00
        !            35:           set s [sqlite3_prepare16 db $sql -1 notused]
        !            36:         } else {
        !            37:           set s [sqlite3_prepare db $sql -1 notused]
        !            38:         }
        !            39:       }
        !            40:       ifcapable !utf16 {
        !            41:         set s [sqlite3_prepare db $sql -1 notused]
        !            42:       }
        !            43:     }
        !            44:     lappend plist $s
        !            45:   }
        !            46:   return $plist
        !            47: }
        !            48: 
        !            49: 
        !            50: # Scramble the $inlist into a random order.
        !            51: #
        !            52: proc scramble {inlist} {
        !            53:   set y {}
        !            54:   foreach x $inlist {
        !            55:     lappend y [list [expr {rand()}] $x]
        !            56:   }
        !            57:   set y [lsort $y]
        !            58:   set outlist {}
        !            59:   foreach x $y {
        !            60:     lappend outlist [lindex $x 1]
        !            61:   }
        !            62:   return $outlist
        !            63: }
        !            64: 
        !            65: # Database initially has no prepared statements.
        !            66: #
        !            67: do_test capi3d-1.1 {
        !            68:   db cache flush
        !            69:   sqlite3_next_stmt db 0
        !            70: } {}
        !            71: 
        !            72: # Run the following tests for between 1 and 100 prepared statements.
        !            73: #
        !            74: for {set i 1} {$i<=100} {incr i} {
        !            75:   set stmtlist [make_prepared_statements $i]
        !            76:   do_test capi3d-1.2.$i.1 {
        !            77:     set p [sqlite3_next_stmt db 0]
        !            78:     set x {}
        !            79:     while {$p!=""} {
        !            80:       lappend x $p
        !            81:       set p [sqlite3_next_stmt db $p]
        !            82:     }
        !            83:     lsort $x
        !            84:   } [lsort $stmtlist]
        !            85:   do_test capi3-1.2.$i.2 {
        !            86:     foreach p [scramble $::stmtlist] {
        !            87:       sqlite3_finalize $p
        !            88:     }
        !            89:     sqlite3_next_stmt db 0
        !            90:   } {}
        !            91: }
        !            92: 
        !            93: # Tests for the is-read-only interface.
        !            94: #
        !            95: proc test_is_readonly {testname sql truth} {
        !            96:   do_test $testname [format {
        !            97:     set DB [sqlite3_connection_pointer db]
        !            98:     set STMT [sqlite3_prepare $DB {%s} -1 TAIL]
        !            99:     set rc [sqlite3_stmt_readonly $STMT]
        !           100:     sqlite3_finalize $STMT
        !           101:     set rc
        !           102:   } $sql] $truth
        !           103: }
        !           104: 
        !           105: test_is_readonly capi3d-2.1 {SELECT * FROM sqlite_master} 1
        !           106: test_is_readonly capi3d-2.2 {CREATE TABLE t1(x)} 0
        !           107: db eval {CREATE TABLE t1(x)}
        !           108: test_is_readonly capi3d-2.3 {INSERT INTO t1 VALUES(5)} 0
        !           109: test_is_readonly capi3d-2.4 {UPDATE t1 SET x=x+1 WHERE x<0} 0
        !           110: test_is_readonly capi3d-2.5 {SELECT * FROM t1} 1
        !           111: do_test capi3-2.99 {
        !           112:   sqlite3_stmt_readonly 0
        !           113: } 1
        !           114: 
        !           115: # Tests for sqlite3_stmt_busy
        !           116: #
        !           117: do_test capi3d-3.1 {
        !           118:   db eval {INSERT INTO t1 VALUES(6); INSERT INTO t1 VALUES(7);}
        !           119:   set STMT [sqlite3_prepare db {SELECT * FROM t1} -1 TAIL]
        !           120:   sqlite3_stmt_busy $STMT
        !           121: } {0}
        !           122: do_test capi3d-3.2 {
        !           123:   sqlite3_step $STMT
        !           124:   sqlite3_stmt_busy $STMT
        !           125: } {1}
        !           126: do_test capi3d-3.3 {
        !           127:   sqlite3_step $STMT
        !           128:   sqlite3_stmt_busy $STMT
        !           129: } {1}
        !           130: do_test capi3d-3.4 {
        !           131:   sqlite3_reset $STMT
        !           132:   sqlite3_stmt_busy $STMT
        !           133: } {0}
        !           134: 
        !           135: do_test capi3d-3.99 {
        !           136:   sqlite3_finalize $STMT
        !           137:   sqlite3_stmt_busy 0
        !           138: } {0}
        !           139: 
        !           140: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>