⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capi3.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
📖 第 1 页 / 共 2 页
字号:
# 2003 January 29## The author disclaims copyright to this source code.  In place of# a legal notice, here is a blessing:##    May you do good and not evil.#    May you find forgiveness for yourself and forgive others.#    May you share freely, never taking more than you give.##***********************************************************************# This file implements regression tests for SQLite library.  The# focus of this script testing the callback-free C/C++ API.## $Id: capi3.test,v 1.50 2007/06/21 15:25:05 drh Exp $#set testdir [file dirname $argv0]source $testdir/tester.tcl# Return the UTF-16 representation of the supplied UTF-8 string $str.# If $nt is true, append two 0x00 bytes as a nul terminator.proc utf16 {str {nt 1}} {  set r [encoding convertto unicode $str]  if {$nt} {    append r "\x00\x00"  }  return $r}# Return the UTF-8 representation of the supplied UTF-16 string $str. proc utf8 {str} {  # If $str ends in two 0x00 0x00 bytes, knock these off before  # converting to UTF-8 using TCL.  binary scan $str \c* vals  if {[lindex $vals end]==0 && [lindex $vals end-1]==0} {    set str [binary format \c* [lrange $vals 0 end-2]]  }  set r [encoding convertfrom unicode $str]  return $r}# These tests complement those in capi2.test. They are organized# as follows:## capi3-1.*: Test sqlite3_prepare # capi3-2.*: Test sqlite3_prepare16# capi3-3.*: Test sqlite3_open# capi3-4.*: Test sqlite3_open16# capi3-5.*: Test the various sqlite3_result_* APIs# capi3-6.*: Test that sqlite3_close fails if there are outstanding VMs.#set DB [sqlite3_connection_pointer db]do_test capi3-1.0 {  sqlite3_get_autocommit $DB} 1do_test capi3-1.1 {  set STMT [sqlite3_prepare $DB {SELECT name FROM sqlite_master} -1 TAIL]  sqlite3_finalize $STMT  set TAIL} {}do_test capi3-1.2 {  sqlite3_errcode $DB} {SQLITE_OK}do_test capi3-1.3 {  sqlite3_errmsg $DB} {not an error}do_test capi3-1.4 {  set sql {SELECT name FROM sqlite_master;SELECT 10}  set STMT [sqlite3_prepare $DB $sql -1 TAIL]  sqlite3_finalize $STMT  set TAIL} {SELECT 10}do_test capi3-1.5 {  set sql {SELECT namex FROM sqlite_master}  catch {    set STMT [sqlite3_prepare $DB $sql -1 TAIL]  }} {1}do_test capi3-1.6 {  sqlite3_errcode $DB} {SQLITE_ERROR}do_test capi3-1.7 {  sqlite3_errmsg $DB} {no such column: namex}ifcapable {utf16} {  do_test capi3-2.1 {    set sql16 [utf16 {SELECT name FROM sqlite_master}]    set STMT [sqlite3_prepare16 $DB $sql16 -1 ::TAIL]    sqlite3_finalize $STMT    utf8 $::TAIL  } {}  do_test capi3-2.2 {    set sql [utf16 {SELECT name FROM sqlite_master;SELECT 10}]    set STMT [sqlite3_prepare16 $DB $sql -1 TAIL]    sqlite3_finalize $STMT    utf8 $TAIL  } {SELECT 10}  do_test capi3-2.3 {    set sql [utf16 {SELECT namex FROM sqlite_master}]    catch {      set STMT [sqlite3_prepare16 $DB $sql -1 TAIL]    }  } {1}  do_test capi3-2.4 {    sqlite3_errcode $DB  } {SQLITE_ERROR}  do_test capi3-2.5 {    sqlite3_errmsg $DB  } {no such column: namex}  ifcapable schema_pragmas {    do_test capi3-2.6 {      execsql {CREATE TABLE tablename(x)}      set sql16 [utf16 {PRAGMA table_info("TableName")}]      set STMT [sqlite3_prepare16 $DB $sql16 -1 TAIL]      sqlite3_step $STMT    } SQLITE_ROW    do_test capi3-2.7 {      sqlite3_step $STMT    } SQLITE_DONE    do_test capi3-2.8 {      sqlite3_finalize $STMT    } SQLITE_OK  }} ;# endif utf16# rename sqlite3_open sqlite3_open_old# proc sqlite3_open {fname options} {sqlite3_open_new $fname $options}do_test capi3-3.1 {  set db2 [sqlite3_open test.db {}]  sqlite3_errcode $db2} {SQLITE_OK}# FIX ME: Should test the db handle works.do_test capi3-3.2 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3-3.3 {  catch {    set db2 [sqlite3_open /bogus/path/test.db {}]  }  sqlite3_errcode $db2} {SQLITE_CANTOPEN}do_test capi3-3.4 {  sqlite3_errmsg $db2} {unable to open database file}do_test capi3-3.5 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3-3.6.1-misuse {  sqlite3_close $db2} {SQLITE_MISUSE}do_test capi3-3.6.2-misuse {  sqlite3_errmsg $db2} {library routine called out of sequence}ifcapable {utf16} {  do_test capi3-3.6.3-misuse {    utf8 [sqlite3_errmsg16 $db2]  } {library routine called out of sequence}}# rename sqlite3_open ""# rename sqlite3_open_old sqlite3_openifcapable {utf16} {do_test capi3-4.1 {  set db2 [sqlite3_open16 [utf16 test.db] {}]  sqlite3_errcode $db2} {SQLITE_OK}# FIX ME: Should test the db handle works.do_test capi3-4.2 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3-4.3 {  catch {    set db2 [sqlite3_open16 [utf16 /bogus/path/test.db] {}]  }  sqlite3_errcode $db2} {SQLITE_CANTOPEN}do_test capi3-4.4 {  utf8 [sqlite3_errmsg16 $db2]} {unable to open database file}do_test capi3-4.5 {  sqlite3_close $db2} {SQLITE_OK}} ;# utf16# This proc is used to test the following API calls:## sqlite3_column_count# sqlite3_column_name# sqlite3_column_name16# sqlite3_column_decltype# sqlite3_column_decltype16## $STMT is a compiled SQL statement. $test is a prefix# to use for test names within this proc. $names is a list# of the column names that should be returned by $STMT.# $decltypes is a list of column declaration types for $STMT.## Example:## set STMT [sqlite3_prepare "SELECT 1, 2, 2;" -1 DUMMY]# check_header test1.1 {1 2 3} {"" "" ""}#proc check_header {STMT test names decltypes} {  # Use the return value of sqlite3_column_count() to build  # a list of column indexes. i.e. If sqlite3_column_count  # is 3, build the list {0 1 2}.  set ::idxlist [list]  set ::numcols [sqlite3_column_count $STMT]  for {set i 0} {$i < $::numcols} {incr i} {lappend ::idxlist $i}  # Column names in UTF-8  do_test $test.1 {    set cnamelist [list]    foreach i $idxlist {lappend cnamelist [sqlite3_column_name $STMT $i]}     set cnamelist  } $names  # Column names in UTF-16  ifcapable {utf16} {    do_test $test.2 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]      }      set cnamelist    } $names  }  # Column names in UTF-8  do_test $test.3 {    set cnamelist [list]    foreach i $idxlist {lappend cnamelist [sqlite3_column_name $STMT $i]}     set cnamelist  } $names  # Column names in UTF-16  ifcapable {utf16} {    do_test $test.4 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]      }      set cnamelist    } $names  }  # Column names in UTF-8  do_test $test.5 {    set cnamelist [list]    foreach i $idxlist {lappend cnamelist [sqlite3_column_decltype $STMT $i]}     set cnamelist  } $decltypes  # Column declaration types in UTF-16  ifcapable {utf16} {    do_test $test.6 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [utf8 [sqlite3_column_decltype16 $STMT $i]]      }      set cnamelist    } $decltypes  }  # Test some out of range conditions:  ifcapable {utf16} {    do_test $test.7 {      list \        [sqlite3_column_name $STMT -1] \        [sqlite3_column_name16 $STMT -1] \        [sqlite3_column_decltype $STMT -1] \        [sqlite3_column_decltype16 $STMT -1] \        [sqlite3_column_name $STMT $numcols] \        [sqlite3_column_name16 $STMT $numcols] \        [sqlite3_column_decltype $STMT $numcols] \        [sqlite3_column_decltype16 $STMT $numcols]    } {{} {} {} {} {} {} {} {}}  }} # This proc is used to test the following API calls:## sqlite3_column_origin_name# sqlite3_column_origin_name16# sqlite3_column_table_name# sqlite3_column_table_name16# sqlite3_column_database_name# sqlite3_column_database_name16## $STMT is a compiled SQL statement. $test is a prefix# to use for test names within this proc. $names is a list# of the column names that should be returned by $STMT.# $decltypes is a list of column declaration types for $STMT.## Example:## set STMT [sqlite3_prepare "SELECT 1, 2, 2;" -1 DUMMY]# check_header test1.1 {1 2 3} {"" "" ""}#proc check_origin_header {STMT test dbs tables cols} {  # If sqlite3_column_origin_name() and friends are not compiled into  # this build, this proc is a no-op.ifcapable columnmetadata {    # Use the return value of sqlite3_column_count() to build    # a list of column indexes. i.e. If sqlite3_column_count    # is 3, build the list {0 1 2}.    set ::idxlist [list]    set ::numcols [sqlite3_column_count $STMT]    for {set i 0} {$i < $::numcols} {incr i} {lappend ::idxlist $i}      # Database names in UTF-8    do_test $test.8 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [sqlite3_column_database_name $STMT $i]      }       set cnamelist    } $dbs      # Database names in UTF-16    ifcapable {utf16} {      do_test $test.9 {        set cnamelist [list]        foreach i $idxlist {          lappend cnamelist [utf8 [sqlite3_column_database_name16 $STMT $i]]        }        set cnamelist      } $dbs    }      # Table names in UTF-8    do_test $test.10 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [sqlite3_column_table_name $STMT $i]      }       set cnamelist    } $tables      # Table names in UTF-16    ifcapable {utf16} {      do_test $test.11 {        set cnamelist [list]        foreach i $idxlist {          lappend cnamelist [utf8 [sqlite3_column_table_name16 $STMT $i]]        }        set cnamelist      } $tables    }      # Origin names in UTF-8    do_test $test.12 {      set cnamelist [list]      foreach i $idxlist {        lappend cnamelist [sqlite3_column_origin_name $STMT $i]      }       set cnamelist    } $cols      # Origin declaration types in UTF-16    ifcapable {utf16} {      do_test $test.13 {        set cnamelist [list]        foreach i $idxlist {          lappend cnamelist [utf8 [sqlite3_column_origin_name16 $STMT $i]]        }        set cnamelist      } $cols    }  }}# This proc is used to test the following APIs:## sqlite3_data_count# sqlite3_column_type# sqlite3_column_int# sqlite3_column_text# sqlite3_column_text16# sqlite3_column_double## $STMT is a compiled SQL statement for which the previous call # to sqlite3_step returned SQLITE_ROW. $test is a prefix to use # for test names within this proc. $types is a list of the # manifest types for the current row. $ints, $doubles and $strings# are lists of the integer, real and string representations of# the values in the current row.## Example:## set STMT [sqlite3_prepare "SELECT 'hello', 1.1, NULL" -1 DUMMY]# sqlite3_step $STMT# check_data test1.2 {TEXT REAL NULL} {0 1 0} {0 1.1 0} {hello 1.1 {}}#proc check_data {STMT test types ints doubles strings} {  # Use the return value of sqlite3_column_count() to build  # a list of column indexes. i.e. If sqlite3_column_count  # is 3, build the list {0 1 2}.  set ::idxlist [list]  set numcols [sqlite3_data_count $STMT]  for {set i 0} {$i < $numcols} {incr i} {lappend ::idxlist $i}# typesdo_test $test.1 {  set types [list]  foreach i $idxlist {lappend types [sqlite3_column_type $STMT $i]}  set types} $types# Integersdo_test $test.2 {  set ints [list]  foreach i $idxlist {lappend ints [sqlite3_column_int64 $STMT $i]}  set ints} $ints# bytesset lens [list]foreach i $::idxlist {  lappend lens [string length [lindex $strings $i]]}do_test $test.3 {  set bytes [list]  set lens [list]  foreach i $idxlist {    lappend bytes [sqlite3_column_bytes $STMT $i]  }  set bytes} $lens# bytes16ifcapable {utf16} {  set lens [list]  foreach i $::idxlist {    lappend lens [expr 2 * [string length [lindex $strings $i]]]  }  do_test $test.4 {    set bytes [list]    set lens [list]    foreach i $idxlist {      lappend bytes [sqlite3_column_bytes16 $STMT $i]    }    set bytes  } $lens}# Blobdo_test $test.5 {  set utf8 [list]  foreach i $idxlist {lappend utf8 [sqlite3_column_blob $STMT $i]}  set utf8} $strings# UTF-8do_test $test.6 {  set utf8 [list]  foreach i $idxlist {lappend utf8 [sqlite3_column_text $STMT $i]}  set utf8} $strings# Floatsdo_test $test.7 {  set utf8 [list]  foreach i $idxlist {lappend utf8 [sqlite3_column_double $STMT $i]}  set utf8} $doubles# UTF-16ifcapable {utf16} {  do_test $test.8 {    set utf8 [list]    foreach i $idxlist {lappend utf8 [utf8 [sqlite3_column_text16 $STMT $i]]}    set utf8  } $strings}# Integersdo_test $test.9 {  set ints [list]  foreach i $idxlist {lappend ints [sqlite3_column_int $STMT $i]}  set ints} $ints# Floatsdo_test $test.10 {  set utf8 [list]  foreach i $idxlist {lappend utf8 [sqlite3_column_double $STMT $i]}  set utf8} $doubles# UTF-8do_test $test.11 {  set utf8 [list]  foreach i $idxlist {lappend utf8 [sqlite3_column_text $STMT $i]}  set utf8} $strings# Typesdo_test $test.12 {  set types [list]  foreach i $idxlist {lappend types [sqlite3_column_type $STMT $i]}  set types} $types# Test that an out of range request returns the equivalent of NULLdo_test $test.13 {  sqlite3_column_int $STMT -1} {0}do_test $test.13 {  sqlite3_column_text $STMT -1} {}}ifcapable !floatingpoint {  finish_test  return}do_test capi3-5.0 {  execsql {    CREATE TABLE t1(a VARINT, b BLOB, c VARCHAR(16));    INSERT INTO t1 VALUES(1, 2, 3);    INSERT INTO t1 VALUES('one', 'two', NULL);    INSERT INTO t1 VALUES(1.2, 1.3, 1.4);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -