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

📄 capi3c.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
📖 第 1 页 / 共 3 页
字号:
# 2006 November 08## 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.  ## This is a copy of the capi3.test file that has been adapted to# test the new sqlite3_prepare_v2 interface.## $Id: capi3c.test,v 1.9 2007/07/19 22:30:19 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:## capi3c-1.*: Test sqlite3_prepare_v2 # capi3c-2.*: Test sqlite3_prepare16_v2 # capi3c-3.*: Test sqlite3_open# capi3c-4.*: Test sqlite3_open16# capi3c-5.*: Test the various sqlite3_result_* APIs# capi3c-6.*: Test that sqlite3_close fails if there are outstanding VMs.#set DB [sqlite3_connection_pointer db]do_test capi3c-1.0 {  sqlite3_get_autocommit $DB} 1do_test capi3c-1.1 {  set STMT [sqlite3_prepare_v2 $DB {SELECT name FROM sqlite_master} -1 TAIL]  sqlite3_finalize $STMT  set TAIL} {}do_test capi3c-1.2 {  sqlite3_errcode $DB} {SQLITE_OK}do_test capi3c-1.3 {  sqlite3_errmsg $DB} {not an error}do_test capi3c-1.4 {  set sql {SELECT name FROM sqlite_master;SELECT 10}  set STMT [sqlite3_prepare_v2 $DB $sql -1 TAIL]  sqlite3_finalize $STMT  set TAIL} {SELECT 10}do_test capi3c-1.5 {  set sql {SELECT namex FROM sqlite_master}  catch {    set STMT [sqlite3_prepare_v2 $DB $sql -1 TAIL]  }} {1}do_test capi3c-1.6 {  sqlite3_errcode $DB} {SQLITE_ERROR}do_test capi3c-1.7 {  sqlite3_errmsg $DB} {no such column: namex}ifcapable {utf16} {  do_test capi3c-2.1 {    set sql16 [utf16 {SELECT name FROM sqlite_master}]    set STMT [sqlite3_prepare16_v2  $DB $sql16 -1 ::TAIL]    sqlite3_finalize $STMT    utf8 $::TAIL  } {}  do_test capi3c-2.2 {    set sql [utf16 {SELECT name FROM sqlite_master;SELECT 10}]    set STMT [sqlite3_prepare16_v2  $DB $sql -1 TAIL]    sqlite3_finalize $STMT    utf8 $TAIL  } {SELECT 10}  do_test capi3c-2.3 {    set sql [utf16 {SELECT namex FROM sqlite_master}]    catch {      set STMT [sqlite3_prepare16_v2  $DB $sql -1 TAIL]    }  } {1}  do_test capi3c-2.4 {    sqlite3_errcode $DB  } {SQLITE_ERROR}  do_test capi3c-2.5 {    sqlite3_errmsg $DB  } {no such column: namex}  ifcapable schema_pragmas {    do_test capi3c-2.6 {      execsql {CREATE TABLE tablename(x)}      set sql16 [utf16 {PRAGMA table_info("TableName")}]      set STMT [sqlite3_prepare16_v2  $DB $sql16 -1 TAIL]      sqlite3_step $STMT    } SQLITE_ROW    do_test capi3c-2.7 {      sqlite3_step $STMT    } SQLITE_DONE    do_test capi3c-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 capi3c-3.1 {  set db2 [sqlite3_open test.db {}]  sqlite3_errcode $db2} {SQLITE_OK}# FIX ME: Should test the db handle works.do_test capi3c-3.2 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3c-3.3 {  catch {    set db2 [sqlite3_open /bogus/path/test.db {}]  }  sqlite3_errcode $db2} {SQLITE_CANTOPEN}do_test capi3c-3.4 {  sqlite3_errmsg $db2} {unable to open database file}do_test capi3c-3.5 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3c-3.6.1-misuse {  sqlite3_close $db2} {SQLITE_MISUSE}do_test capi3c-3.6.2-misuse {  sqlite3_errmsg $db2} {library routine called out of sequence}ifcapable {utf16} {  do_test capi3c-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 capi3c-4.1 {  set db2 [sqlite3_open16 [utf16 test.db] {}]  sqlite3_errcode $db2} {SQLITE_OK}# FIX ME: Should test the db handle works.do_test capi3c-4.2 {  sqlite3_close $db2} {SQLITE_OK}do_test capi3c-4.3 {  catch {    set db2 [sqlite3_open16 [utf16 /bogus/path/test.db] {}]  }  sqlite3_errcode $db2} {SQLITE_CANTOPEN}do_test capi3c-4.4 {  utf8 [sqlite3_errmsg16 $db2]} {unable to open database file}do_test capi3c-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_v2 "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_v2 "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_v2 "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}

⌨️ 快捷键说明

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