/ Hex Artifact Content
Login

Artifact 36f5c859c91a9bb0075d6ddcfcf2476cad629b09f7bfd135776fb94b06c04706:


0000: 23 20 32 30 30 33 20 4a 61 6e 75 61 72 79 20 32  # 2003 January 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 63 61 6c 6c  testing the call
01d0: 62 61 63 6b 2d 66 72 65 65 20 43 2f 43 2b 2b 20  back-free C/C++ 
01e0: 41 50 49 2e 0a 23 0a 23 20 24 49 64 3a 20 63 61  API..#.# $Id: ca
01f0: 70 69 33 2e 74 65 73 74 2c 76 20 31 2e 37 30 20  pi3.test,v 1.70 
0200: 32 30 30 39 2f 30 31 2f 30 39 20 30 32 3a 34 39  2009/01/09 02:49
0210: 3a 33 32 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :32 drh Exp $.#.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65  ir/tester.tcl.se
0260: 74 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20 63  t ::testprefix c
0270: 61 70 69 33 0a 0a 23 20 44 6f 20 6e 6f 74 20 75  api3..# Do not u
0280: 73 65 20 61 20 63 6f 64 65 63 20 66 6f 72 20 74  se a codec for t
0290: 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ests in this fil
02a0: 65 2c 20 61 73 20 74 68 65 20 64 61 74 61 62 61  e, as the databa
02b0: 73 65 20 66 69 6c 65 20 69 73 0a 23 20 6d 61 6e  se file is.# man
02c0: 69 70 75 6c 61 74 65 64 20 64 69 72 65 63 74 6c  ipulated directl
02d0: 79 20 75 73 69 6e 67 20 74 63 6c 20 73 63 72 69  y using tcl scri
02e0: 70 74 73 20 28 75 73 69 6e 67 20 74 68 65 20 5b  pts (using the [
02f0: 68 65 78 69 6f 5f 77 72 69 74 65 5d 20 63 6f 6d  hexio_write] com
0300: 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e 6f 74 5f  mand)..#.do_not_
0310: 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20 52 65 74  use_codec..# Ret
0320: 75 72 6e 20 74 68 65 20 55 54 46 2d 31 36 20 72  urn the UTF-16 r
0330: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
0340: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 55 54   the supplied UT
0350: 46 2d 38 20 73 74 72 69 6e 67 20 24 73 74 72 2e  F-8 string $str.
0360: 0a 23 20 49 66 20 24 6e 74 20 69 73 20 74 72 75  .# If $nt is tru
0370: 65 2c 20 61 70 70 65 6e 64 20 74 77 6f 20 30 78  e, append two 0x
0380: 30 30 20 62 79 74 65 73 20 61 73 20 61 20 6e 75  00 bytes as a nu
0390: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a 70 72  l terminator..pr
03a0: 6f 63 20 75 74 66 31 36 20 7b 73 74 72 20 7b 6e  oc utf16 {str {n
03b0: 74 20 31 7d 7d 20 7b 0a 20 20 73 65 74 20 72 20  t 1}} {.  set r 
03c0: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
03d0: 74 74 6f 20 75 6e 69 63 6f 64 65 20 24 73 74 72  tto unicode $str
03e0: 5d 0a 20 20 69 66 20 7b 24 6e 74 7d 20 7b 0a 20  ].  if {$nt} {. 
03f0: 20 20 20 61 70 70 65 6e 64 20 72 20 22 5c 78 30     append r "\x0
0400: 30 5c 78 30 30 22 0a 20 20 7d 0a 20 20 72 65 74  0\x00".  }.  ret
0410: 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 52 65 74 75  urn $r.}..# Retu
0420: 72 6e 20 74 68 65 20 55 54 46 2d 38 20 72 65 70  rn the UTF-8 rep
0430: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
0440: 68 65 20 73 75 70 70 6c 69 65 64 20 55 54 46 2d  he supplied UTF-
0450: 31 36 20 73 74 72 69 6e 67 20 24 73 74 72 2e 20  16 string $str. 
0460: 0a 70 72 6f 63 20 75 74 66 38 20 7b 73 74 72 7d  .proc utf8 {str}
0470: 20 7b 0a 20 20 23 20 49 66 20 24 73 74 72 20 65   {.  # If $str e
0480: 6e 64 73 20 69 6e 20 74 77 6f 20 30 78 30 30 20  nds in two 0x00 
0490: 30 78 30 30 20 62 79 74 65 73 2c 20 6b 6e 6f 63  0x00 bytes, knoc
04a0: 6b 20 74 68 65 73 65 20 6f 66 66 20 62 65 66 6f  k these off befo
04b0: 72 65 0a 20 20 23 20 63 6f 6e 76 65 72 74 69 6e  re.  # convertin
04c0: 67 20 74 6f 20 55 54 46 2d 38 20 75 73 69 6e 67  g to UTF-8 using
04d0: 20 54 43 4c 2e 0a 20 20 62 69 6e 61 72 79 20 73   TCL..  binary s
04e0: 63 61 6e 20 24 73 74 72 20 5c 63 2a 20 76 61 6c  can $str \c* val
04f0: 73 0a 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20  s.  if {[lindex 
0500: 24 76 61 6c 73 20 65 6e 64 5d 3d 3d 30 20 26 26  $vals end]==0 &&
0510: 20 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65   [lindex $vals e
0520: 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20  nd-1]==0} {.    
0530: 73 65 74 20 73 74 72 20 5b 62 69 6e 61 72 79 20  set str [binary 
0540: 66 6f 72 6d 61 74 20 5c 63 2a 20 5b 6c 72 61 6e  format \c* [lran
0550: 67 65 20 24 76 61 6c 73 20 30 20 65 6e 64 2d 32  ge $vals 0 end-2
0560: 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65 74 20 72 20  ]].  }..  set r 
0570: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
0580: 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20 24 73  tfrom unicode $s
0590: 74 72 5d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a  tr].  return $r.
05a0: 7d 0a 0a 23 20 54 68 65 73 65 20 74 65 73 74 73  }..# These tests
05b0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 74 68 6f 73   complement thos
05c0: 65 20 69 6e 20 63 61 70 69 32 2e 74 65 73 74 2e  e in capi2.test.
05d0: 20 54 68 65 79 20 61 72 65 20 6f 72 67 61 6e 69   They are organi
05e0: 7a 65 64 0a 23 20 61 73 20 66 6f 6c 6c 6f 77 73  zed.# as follows
05f0: 3a 0a 23 0a 23 20 63 61 70 69 33 2d 31 2e 2a 3a  :.#.# capi3-1.*:
0600: 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f 70 72   Test sqlite3_pr
0610: 65 70 61 72 65 20 0a 23 20 63 61 70 69 33 2d 32  epare .# capi3-2
0620: 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74 65 33  .*: Test sqlite3
0630: 5f 70 72 65 70 61 72 65 31 36 0a 23 20 63 61 70  _prepare16.# cap
0640: 69 33 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c  i3-3.*: Test sql
0650: 69 74 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69  ite3_open.# capi
0660: 33 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69  3-4.*: Test sqli
0670: 74 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61 70  te3_open16.# cap
0680: 69 33 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68 65  i3-5.*: Test the
0690: 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74 65 33   various sqlite3
06a0: 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73 0a 23  _result_* APIs.#
06b0: 20 63 61 70 69 33 2d 36 2e 2a 3a 20 54 65 73 74   capi3-6.*: Test
06c0: 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 63 6c   that sqlite3_cl
06d0: 6f 73 65 20 66 61 69 6c 73 20 69 66 20 74 68 65  ose fails if the
06e0: 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64 69  re are outstandi
06f0: 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65 74 20 44  ng VMs..#..set D
0700: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
0710: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
0720: 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  ]..do_test capi3
0730: 2d 31 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.0 {.  sqlite3
0740: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
0750: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
0760: 63 61 70 69 33 2d 31 2e 31 20 7b 0a 20 20 73 65  capi3-1.1 {.  se
0770: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0780: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
0790: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
07a0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20  lite_master} -1 
07b0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
07c0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
07d0: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 7d 0a 64   set TAIL.} {}.d
07e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 32  o_test capi3-1.2
07f0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .1 {.  sqlite3_e
0800: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
0810: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
0820: 20 63 61 70 69 33 2d 31 2e 32 2e 32 20 7b 0a 20   capi3-1.2.2 {. 
0830: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0840: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0850: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
0860: 65 73 74 20 63 61 70 69 33 2d 31 2e 33 20 7b 0a  est capi3-1.3 {.
0870: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
0880: 20 24 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65   $DB.} {not an e
0890: 72 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 63 61  rror}.do_test ca
08a0: 70 69 33 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20  pi3-1.4 {.  set 
08b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
08c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
08d0: 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20  ter;SELECT 10}. 
08e0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
08f0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
0900: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
0910: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0920: 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c  $STMT.  set TAIL
0930: 0a 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64  .} {SELECT 10}.d
0940: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 35  o_test capi3-1.5
0950: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0960: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0970: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0980: 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54  ECT 10}.  set ST
0990: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
09a0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 5b 73 74  are $DB $sql [st
09b0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
09c0: 5d 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  ] TAIL].  sqlite
09d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
09e0: 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53  .  set TAIL.} {S
09f0: 45 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73  ELECT 10}.do_tes
0a00: 74 20 63 61 70 69 33 2d 31 2e 36 20 7b 0a 20 20  t capi3-1.6 {.  
0a10: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
0a20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0a30: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0a40: 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  0}.  set STMT [s
0a50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
0a60: 44 42 20 24 73 71 6c 20 5b 65 78 70 72 20 5b 73  DB $sql [expr [s
0a70: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71  tring length $sq
0a80: 6c 5d 2b 31 5d 20 54 41 49 4c 5d 0a 20 20 73 71  l]+1] TAIL].  sq
0a90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0aa0: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0ab0: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 0a 64  } {SELECT 10}..d
0ac0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 37  o_test capi3-1.7
0ad0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0ae0: 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20  LECT namex FROM 
0af0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
0b00: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
0b10: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0b20: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
0b30: 2d 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b  -1 TAIL].  }.} {
0b40: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
0b50: 2d 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -1.8.1 {.  sqlit
0b60: 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  e3_errcode $DB.}
0b70: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
0b80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e  do_test capi3-1.
0b90: 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.2 {.  sqlite3_
0ba0: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
0bb0: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 45   $DB.} {SQLITE_E
0bc0: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61  RROR}.do_test ca
0bd0: 70 69 33 2d 31 2e 39 20 7b 0a 20 20 73 71 6c 69  pi3-1.9 {.  sqli
0be0: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d  te3_errmsg $DB.}
0bf0: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
0c00: 3a 20 6e 61 6d 65 78 7d 0a 0a 69 66 63 61 70 61  : namex}..ifcapa
0c10: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
0c20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0c30: 31 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 31  1 {.    set sql1
0c40: 36 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54  6 [utf16 {SELECT
0c50: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0c60: 65 5f 6d 61 73 74 65 72 7d 5d 0a 20 20 20 20 73  e_master}].    s
0c70: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
0c80: 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20 24  _prepare16 $DB $
0c90: 73 71 6c 31 36 20 2d 31 20 3a 3a 54 41 49 4c 5d  sql16 -1 ::TAIL]
0ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
0cb0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
0cc0: 75 74 66 38 20 24 3a 3a 54 41 49 4c 0a 20 20 7d  utf8 $::TAIL.  }
0cd0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
0ce0: 70 69 33 2d 32 2e 32 20 7b 0a 20 20 20 20 73 65  pi3-2.2 {.    se
0cf0: 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53 45  t sql [utf16 {SE
0d00: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0d10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0d20: 45 43 54 20 31 30 7d 5d 0a 20 20 20 20 73 65 74  ECT 10}].    set
0d30: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0d40: 72 65 70 61 72 65 31 36 20 24 44 42 20 24 73 71  repare16 $DB $sq
0d50: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  l -1 TAIL].    s
0d60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0d70: 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24  $STMT.    utf8 $
0d80: 54 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43 54  TAIL.  } {SELECT
0d90: 20 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   10}.  do_test c
0da0: 61 70 69 33 2d 32 2e 33 20 7b 0a 20 20 20 20 73  api3-2.3 {.    s
0db0: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0dc0: 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d  ELECT namex FROM
0dd0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0de0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
0df0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0e00: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20 24  ite3_prepare16 $
0e10: 44 42 20 24 73 71 6c 20 2d 31 5d 0a 20 20 20 20  DB $sql -1].    
0e20: 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74  }.  } {1}.  do_t
0e30: 65 73 74 20 63 61 70 69 33 2d 32 2e 34 2e 31 20  est capi3-2.4.1 
0e40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
0e50: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
0e60: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
0e70: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 34  o_test capi3-2.4
0e80: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
0e90: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
0ea0: 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54  e $DB.  } {SQLIT
0eb0: 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65  E_ERROR}.  do_te
0ec0: 73 74 20 63 61 70 69 33 2d 32 2e 35 20 7b 0a 20  st capi3-2.5 {. 
0ed0: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
0ee0: 67 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75  g $DB.  } {no su
0ef0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0f00: 7d 0a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73  }..  ifcapable s
0f10: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
0f20: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0f30: 33 2d 32 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  3-2.6 {.      ex
0f40: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
0f50: 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65 28 78 29  BLE tablename(x)
0f60: 7d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 31  }.      set sql1
0f70: 36 20 5b 75 74 66 31 36 20 7b 50 52 41 47 4d 41  6 [utf16 {PRAGMA
0f80: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62   table_info("Tab
0f90: 6c 65 4e 61 6d 65 22 29 3b 20 2d 2d 65 78 63 65  leName"); --exce
0fa0: 73 73 20 74 65 78 74 7d 5d 0a 20 20 20 20 20 20  ss text}].      
0fb0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
0fc0: 33 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20  3_prepare16 $DB 
0fd0: 24 73 71 6c 31 36 20 2d 31 5d 0a 20 20 20 20 20  $sql16 -1].     
0fe0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
0ff0: 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49 54 45  TMT.    } SQLITE
1000: 5f 52 4f 57 0a 20 20 20 20 64 6f 5f 74 65 73 74  _ROW.    do_test
1010: 20 63 61 70 69 33 2d 32 2e 37 20 7b 0a 20 20 20   capi3-2.7 {.   
1020: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
1030: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
1040: 54 45 5f 44 4f 4e 45 0a 20 20 20 20 64 6f 5f 74  TE_DONE.    do_t
1050: 65 73 74 20 63 61 70 69 33 2d 32 2e 38 20 7b 0a  est capi3-2.8 {.
1060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
1070: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20  nalize $STMT.   
1080: 20 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d   } SQLITE_OK.  }
1090: 0a 0a 7d 20 3b 23 20 65 6e 64 69 66 20 75 74 66  ..} ;# endif utf
10a0: 31 36 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c  16..# rename sql
10b0: 69 74 65 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65  ite3_open sqlite
10c0: 33 5f 6f 70 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f  3_open_old.# pro
10d0: 63 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 7b  c sqlite3_open {
10e0: 66 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 7d 20 7b  fname options} {
10f0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6e 65 77  sqlite3_open_new
1100: 20 24 66 6e 61 6d 65 20 24 6f 70 74 69 6f 6e 73   $fname $options
1110: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }..do_test capi3
1120: 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32  -3.1 {.  set db2
1130: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74   [sqlite3_open t
1140: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c  est.db {}].  sql
1150: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62  ite3_errcode $db
1160: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1170: 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64  # FIX ME: Should
1180: 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61 6e   test the db han
1190: 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65  dle works..do_te
11a0: 73 74 20 63 61 70 69 33 2d 33 2e 32 20 7b 0a 20  st capi3-3.2 {. 
11b0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
11c0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
11d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
11e0: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a  3.3 {.  catch {.
11f0: 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c      set db2 [sql
1200: 69 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67 75 73  ite3_open /bogus
1210: 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 20 7b 7d  /path/test.db {}
1220: 5d 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 63 61  ].  }.  set ::ca
1230: 70 69 33 5f 65 72 72 6e 6f 20 5b 73 71 6c 69 74  pi3_errno [sqlit
1240: 65 33 5f 73 79 73 74 65 6d 5f 65 72 72 6e 6f 20  e3_system_errno 
1250: 24 64 62 32 5d 0a 20 20 6c 69 73 74 20 5b 73 71  $db2].  list [sq
1260: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
1270: 72 72 63 6f 64 65 20 24 64 62 32 5d 20 5b 65 78  rrcode $db2] [ex
1280: 70 72 20 7b 24 3a 3a 63 61 70 69 33 5f 65 72 72  pr {$::capi3_err
1290: 6e 6f 21 3d 30 7d 5d 0a 7d 20 7b 53 51 4c 49 54  no!=0}].} {SQLIT
12a0: 45 5f 43 41 4e 54 4f 50 45 4e 20 31 7d 0a 64 6f  E_CANTOPEN 1}.do
12b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 34 20  _test capi3-3.4 
12c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
12d0: 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e 61 62 6c  sg $db2.} {unabl
12e0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
12f0: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
1300: 20 63 61 70 69 33 2d 33 2e 35 20 7b 0a 20 20 6c   capi3-3.5 {.  l
1310: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 73 79 73  ist [sqlite3_sys
1320: 74 65 6d 5f 65 72 72 6e 6f 20 24 64 62 32 5d 20  tem_errno $db2] 
1330: 5b 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24  [sqlite3_close $
1340: 64 62 32 5d 0a 7d 20 5b 6c 69 73 74 20 24 3a 3a  db2].} [list $::
1350: 63 61 70 69 33 5f 65 72 72 6e 6f 20 53 51 4c 49  capi3_errno SQLI
1360: 54 45 5f 4f 4b 5d 0a 69 66 20 7b 5b 63 6c 61 6e  TE_OK].if {[clan
1370: 67 5f 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65  g_sanitize_addre
1380: 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74  ss]==0} {.  do_t
1390: 65 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 31 2d  est capi3-3.6.1-
13a0: 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 73 71 6c  misuse {.    sql
13b0: 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a  ite3_close $db2.
13c0: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55    } {SQLITE_MISU
13d0: 53 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  SE}.  do_test ca
13e0: 70 69 33 2d 33 2e 36 2e 32 2d 6d 69 73 75 73 65  pi3-3.6.2-misuse
13f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
1400: 72 72 6d 73 67 20 24 64 62 32 0a 20 20 7d 20 7b  rrmsg $db2.  } {
1410: 62 61 64 20 70 61 72 61 6d 65 74 65 72 20 6f 72  bad parameter or
1420: 20 6f 74 68 65 72 20 41 50 49 20 6d 69 73 75 73   other API misus
1430: 65 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  e}.  ifcapable {
1440: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f  utf16} {.    do_
1450: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 33  test capi3-3.6.3
1460: 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 20 20  -misuse {.      
1470: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
1480: 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 20 20 20  rmsg16 $db2].   
1490: 20 7d 20 7b 62 61 64 20 70 61 72 61 6d 65 74 65   } {bad paramete
14a0: 72 20 6f 72 20 6f 74 68 65 72 20 41 50 49 20 6d  r or other API m
14b0: 69 73 75 73 65 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f  isuse}.  }.}..do
14c0: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 37 20  _test capi3-3.7 
14d0: 7b 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c  {.  set db2 [sql
14e0: 69 74 65 33 5f 6f 70 65 6e 5d 0a 20 20 73 71 6c  ite3_open].  sql
14f0: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62  ite3_errcode $db
1500: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1510: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e  do_test capi3-3.
1520: 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  8 {.  sqlite3_cl
1530: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
1540: 54 45 5f 4f 4b 7d 0a 0a 23 20 72 65 6e 61 6d 65  TE_OK}..# rename
1550: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22   sqlite3_open ""
1560: 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65  .# rename sqlite
1570: 33 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74  3_open_old sqlit
1580: 65 33 5f 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62  e3_open..ifcapab
1590: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f  le {utf16} {.do_
15a0: 74 65 73 74 20 63 61 70 69 33 2d 34 2e 31 20 7b  test capi3-4.1 {
15b0: 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69  .  set db2 [sqli
15c0: 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31  te3_open16 [utf1
15d0: 36 20 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20  6 test.db] {}]. 
15e0: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
15f0: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1600: 4f 4b 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68  OK}.# FIX ME: Sh
1610: 6f 75 6c 64 20 74 65 73 74 20 74 68 65 20 64 62  ould test the db
1620: 20 68 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64   handle works..d
1630: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 32  o_test capi3-4.2
1640: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
1650: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
1660: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
1670: 70 69 33 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63  pi3-4.3 {.  catc
1680: 68 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20  h {.    set db2 
1690: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20  [sqlite3_open16 
16a0: 5b 75 74 66 31 36 20 2f 62 6f 67 75 73 2f 70 61  [utf16 /bogus/pa
16b0: 74 68 2f 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a  th/test.db] {}].
16c0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72    }.  sqlite3_er
16d0: 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51  rcode $db2.} {SQ
16e0: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64  LITE_CANTOPEN}.d
16f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 34  o_test capi3-4.4
1700: 20 7b 0a 20 20 75 74 66 38 20 5b 73 71 6c 69 74   {.  utf8 [sqlit
1710: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 64 62 32  e3_errmsg16 $db2
1720: 5d 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f  ].} {unable to o
1730: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
1740: 65 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  e}.do_test capi3
1750: 2d 34 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  -4.5 {.  sqlite3
1760: 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53  _close $db2.} {S
1770: 51 4c 49 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75  QLITE_OK}.} ;# u
1780: 74 66 31 36 0a 0a 23 20 54 68 69 73 20 70 72 6f  tf16..# This pro
1790: 63 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  c is used to tes
17a0: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
17b0: 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73  API calls:.#.# s
17c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
17d0: 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  unt.# sqlite3_co
17e0: 6c 75 6d 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69  lumn_name.# sqli
17f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
1800: 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  6.# sqlite3_colu
1810: 6d 6e 5f 64 65 63 6c 74 79 70 65 0a 23 20 73 71  mn_decltype.# sq
1820: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1830: 6c 74 79 70 65 31 36 0a 23 0a 23 20 24 53 54 4d  ltype16.#.# $STM
1840: 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20  T is a compiled 
1850: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 24  SQL statement. $
1860: 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69 78  test is a prefix
1870: 0a 23 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65  .# to use for te
1880: 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20  st names within 
1890: 74 68 69 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65  this proc. $name
18a0: 73 20 69 73 20 61 20 6c 69 73 74 0a 23 20 6f 66  s is a list.# of
18b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
18c0: 73 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  s that should be
18d0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 24 53 54   returned by $ST
18e0: 4d 54 2e 0a 23 20 24 64 65 63 6c 74 79 70 65 73  MT..# $decltypes
18f0: 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 63 6f   is a list of co
1900: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
1910: 20 74 79 70 65 73 20 66 6f 72 20 24 53 54 4d 54   types for $STMT
1920: 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23  ..#.# Example:.#
1930: 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .# set STMT [sql
1940: 69 74 65 33 5f 70 72 65 70 61 72 65 20 22 53 45  ite3_prepare "SE
1950: 4c 45 43 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d  LECT 1, 2, 2;" -
1960: 31 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b  1 DUMMY].# check
1970: 5f 68 65 61 64 65 72 20 74 65 73 74 31 2e 31 20  _header test1.1 
1980: 7b 31 20 32 20 33 7d 20 7b 22 22 20 22 22 20 22  {1 2 3} {"" "" "
1990: 22 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f  "}.#.proc check_
19a0: 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65 73  header {STMT tes
19b0: 74 20 6e 61 6d 65 73 20 64 65 63 6c 74 79 70 65  t names decltype
19c0: 73 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68  s} {..  # Use th
19d0: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f  e return value o
19e0: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
19f0: 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c  _count() to buil
1a00: 64 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20  d.  # a list of 
1a10: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20  column indexes. 
1a20: 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f  i.e. If sqlite3_
1a30: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23  column_count.  #
1a40: 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65   is 3, build the
1a50: 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20   list {0 1 2}.. 
1a60: 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b   set ::idxlist [
1a70: 6c 69 73 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75  list].  set ::nu
1a80: 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63  mcols [sqlite3_c
1a90: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d  olumn_count $STM
1aa0: 54 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  T].  for {set i 
1ab0: 30 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63  0} {$i < $::numc
1ac0: 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c  ols} {incr i} {l
1ad0: 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74  append ::idxlist
1ae0: 20 24 69 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e   $i}..  # Column
1af0: 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a   names in UTF-8.
1b00: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
1b10: 31 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d  1 {.    set cnam
1b20: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
1b30: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
1b40: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61  ist {lappend cna
1b50: 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f  melist [sqlite3_
1b60: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d  column_name $STM
1b70: 54 20 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20  T $i]} .    set 
1b80: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e  cnamelist.  } $n
1b90: 61 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e  ames..  # Column
1ba0: 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36   names in UTF-16
1bb0: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74  .  ifcapable {ut
1bc0: 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  f16} {.    do_te
1bd0: 73 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 20  st $test.2 {.   
1be0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1bf0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f   [list].      fo
1c00: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
1c10: 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65   {.        lappe
1c20: 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74  nd cnamelist [ut
1c30: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
1c40: 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  mn_name16 $STMT 
1c50: 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20  $i]].      }.   
1c60: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1c70: 0a 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20  .    } $names.  
1c80: 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  }..  # Column na
1c90: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64  mes in UTF-8.  d
1ca0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b  o_test $test.3 {
1cb0: 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69  .    set cnameli
1cc0: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  st [list].    fo
1cd0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
1ce0: 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c   {lappend cnamel
1cf0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
1d00: 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  umn_name $STMT $
1d10: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1d20: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65  melist.  } $name
1d30: 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  s..  # Column na
1d40: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
1d50: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1d60: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1d70: 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 20 20  $test.4 {.      
1d80: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1d90: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1da0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1db0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1dc0: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1dd0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1de0: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
1df0: 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ].      }.      
1e00: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
1e10: 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a    } $names.  }..
1e20: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1e30: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
1e40: 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20  est $test.5 {.  
1e50: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1e60: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
1e70: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
1e80: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
1e90: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1ea0: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
1eb0: 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e  $i]} .    set cn
1ec0: 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 64 65 63  amelist.  } $dec
1ed0: 6c 74 79 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75  ltypes..  # Colu
1ee0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
1ef0: 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ypes in UTF-16. 
1f00: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
1f10: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
1f20: 20 24 74 65 73 74 2e 36 20 7b 0a 20 20 20 20 20   $test.6 {.     
1f30: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
1f40: 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65  list].      fore
1f50: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
1f60: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
1f70: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
1f80: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1f90: 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d  _decltype16 $STM
1fa0: 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20  T $i]].      }. 
1fb0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
1fc0: 73 74 0a 20 20 20 20 7d 20 24 64 65 63 6c 74 79  st.    } $declty
1fd0: 70 65 73 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65  pes.  }...  # Te
1fe0: 73 74 20 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72  st some out of r
1ff0: 61 6e 67 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a  ange conditions:
2000: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74  .  ifcapable {ut
2010: 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  f16} {.    do_te
2020: 73 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 20  st $test.7 {.   
2030: 20 20 20 6c 69 73 74 20 5c 0a 20 20 20 20 20 20     list \.      
2040: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
2050: 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d  n_name $STMT -1]
2060: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
2070: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
2080: 36 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20  6 $STMT -1] \.  
2090: 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63        [sqlite3_c
20a0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24  olumn_decltype $
20b0: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
20c0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
20d0: 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53  mn_decltype16 $S
20e0: 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20  TMT -1] \.      
20f0: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
2100: 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 6e 75  n_name $STMT $nu
2110: 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20  mcols] \.       
2120: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2130: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 6e  _name16 $STMT $n
2140: 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20  umcols] \.      
2150: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
2160: 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54  n_decltype $STMT
2170: 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20   $numcols] \.   
2180: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
2190: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20  lumn_decltype16 
21a0: 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a  $STMT $numcols].
21b0: 20 20 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20      } {{} {} {} 
21c0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  {} {} {} {} {}}.
21d0: 20 20 7d 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70    }.} ..# This p
21e0: 72 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20 74  roc is used to t
21f0: 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  est the followin
2200: 67 20 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23  g API calls:.#.#
2210: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2220: 6f 72 69 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71  origin_name.# sq
2230: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2240: 67 69 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c  gin_name16.# sql
2250: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
2260: 65 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33  e_name.# sqlite3
2270: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
2280: 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63  me16.# sqlite3_c
2290: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
22a0: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
22b0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
22c0: 6d 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69  me16.#.# $STMT i
22d0: 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  s a compiled SQL
22e0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73   statement. $tes
22f0: 74 20 69 73 20 61 20 70 72 65 66 69 78 0a 23 20  t is a prefix.# 
2300: 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74 20  to use for test 
2310: 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69  names within thi
2320: 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69  s proc. $names i
2330: 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68  s a list.# of th
2340: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
2350: 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65  hat should be re
2360: 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e  turned by $STMT.
2370: 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20 69 73  .# $decltypes is
2380: 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d   a list of colum
2390: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
23a0: 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23  pes for $STMT..#
23b0: 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  .# Example:.#.# 
23c0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
23d0: 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45 43  3_prepare "SELEC
23e0: 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44  T 1, 2, 2;" -1 D
23f0: 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65  UMMY].# check_he
2400: 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20  ader test1.1 {1 
2410: 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a  2 3} {"" "" ""}.
2420: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69  #.proc check_ori
2430: 67 69 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d 54  gin_header {STMT
2440: 20 74 65 73 74 20 64 62 73 20 74 61 62 6c 65 73   test dbs tables
2450: 20 63 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20   cols} {.  # If 
2460: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
2470: 72 69 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64  rigin_name() and
2480: 20 66 72 69 65 6e 64 73 20 61 72 65 20 6e 6f 74   friends are not
2490: 20 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20   compiled into. 
24a0: 20 23 20 74 68 69 73 20 62 75 69 6c 64 2c 20 74   # this build, t
24b0: 68 69 73 20 70 72 6f 63 20 69 73 20 61 20 6e 6f  his proc is a no
24c0: 2d 6f 70 2e 0a 20 20 69 66 63 61 70 61 62 6c 65  -op..  ifcapable
24d0: 20 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20   columnmetadata 
24e0: 7b 0a 20 20 20 20 23 20 55 73 65 20 74 68 65 20  {.    # Use the 
24f0: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2500: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2510: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2520: 20 20 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20      # a list of 
2530: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20  column indexes. 
2540: 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f  i.e. If sqlite3_
2550: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20  column_count.   
2560: 20 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74   # is 3, build t
2570: 68 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e  he list {0 1 2}.
2580: 0a 20 20 20 20 73 65 74 20 3a 3a 69 64 78 6c 69  .    set ::idxli
2590: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65  st [list].    se
25a0: 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c  t ::numcols [sql
25b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
25c0: 74 20 24 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72  t $STMT].    for
25d0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
25e0: 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   $::numcols} {in
25f0: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2600: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a  :idxlist $i}.  .
2610: 20 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e      # Database n
2620: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
2630: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2640: 38 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  8 {.      set cn
2650: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2660: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2670: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2680: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2690: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
26a0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
26b0: 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20  e $STMT $i].    
26c0: 20 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63    } .      set c
26d0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24  namelist.    } $
26e0: 64 62 73 0a 20 20 0a 20 20 20 20 23 20 44 61 74  dbs.  .    # Dat
26f0: 61 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55  abase names in U
2700: 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61  TF-16.    ifcapa
2710: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
2720: 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73      do_test $tes
2730: 74 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 73 65  t.9 {.        se
2740: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
2750: 74 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  t].        forea
2760: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
2770: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
2780: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66  d cnamelist [utf
2790: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
27a0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
27b0: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
27c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
27d0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
27e0: 20 20 20 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a     } $dbs.    }.
27f0: 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e    .    # Table n
2800: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
2810: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2820: 31 30 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  10 {.      set c
2830: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2840: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2850: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2860: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
2870: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
2880: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20  lumn_table_name 
2890: 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20  $STMT $i].      
28a0: 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61  } .      set cna
28b0: 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 74 61  melist.    } $ta
28c0: 62 6c 65 73 0a 20 20 0a 20 20 20 20 23 20 54 61  bles.  .    # Ta
28d0: 62 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46  ble names in UTF
28e0: 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c  -16.    ifcapabl
28f0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
2900: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2910: 31 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  11 {.        set
2920: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
2930: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
2940: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
2950: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2960: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
2970: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2980: 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53  _table_name16 $S
2990: 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20  TMT $i]].       
29a0: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   }.        set c
29b0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d  namelist.      }
29c0: 20 24 74 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20   $tables.    }. 
29d0: 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 6e   .    # Origin n
29e0: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
29f0: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2a00: 31 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  12 {.      set c
2a10: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2a20: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2a30: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2a40: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
2a50: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
2a60: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
2a70: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20   $STMT $i].     
2a80: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e   } .      set cn
2a90: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 63  amelist.    } $c
2aa0: 6f 6c 73 0a 20 20 0a 20 20 20 20 23 20 4f 72 69  ols.  .    # Ori
2ab0: 67 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  gin declaration 
2ac0: 74 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  types in UTF-16.
2ad0: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75      ifcapable {u
2ae0: 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f  tf16} {.      do
2af0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b  _test $test.13 {
2b00: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61  .        set cna
2b10: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
2b20: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2b30: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2b40: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
2b50: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
2b60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2b70: 67 69 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  gin_name16 $STMT
2b80: 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a   $i]].        }.
2b90: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
2ba0: 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 63  elist.      } $c
2bb0: 6f 6c 73 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  ols.    }.  }.}.
2bc0: 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20  .# This proc is 
2bd0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
2be0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a   following APIs:
2bf0: 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 64 61 74  .#.# sqlite3_dat
2c00: 61 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65  a_count.# sqlite
2c10: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20  3_column_type.# 
2c20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
2c30: 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt.# sqlite3_col
2c40: 75 6d 6e 5f 74 65 78 74 0a 23 20 73 71 6c 69 74  umn_text.# sqlit
2c50: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
2c60: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2c70: 6e 5f 64 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54  n_double.#.# $ST
2c80: 4d 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64  MT is a compiled
2c90: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66   SQL statement f
2ca0: 6f 72 20 77 68 69 63 68 20 74 68 65 20 70 72 65  or which the pre
2cb0: 76 69 6f 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f  vious call .# to
2cc0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 72 65   sqlite3_step re
2cd0: 74 75 72 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f  turned SQLITE_RO
2ce0: 57 2e 20 24 74 65 73 74 20 69 73 20 61 20 70 72  W. $test is a pr
2cf0: 65 66 69 78 20 74 6f 20 75 73 65 20 0a 23 20 66  efix to use .# f
2d00: 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69  or test names wi
2d10: 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20  thin this proc. 
2d20: 24 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74  $types is a list
2d30: 20 6f 66 20 74 68 65 20 0a 23 20 6d 61 6e 69 66   of the .# manif
2d40: 65 73 74 20 74 79 70 65 73 20 66 6f 72 20 74 68  est types for th
2d50: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 24  e current row. $
2d60: 69 6e 74 73 2c 20 24 64 6f 75 62 6c 65 73 20 61  ints, $doubles a
2d70: 6e 64 20 24 73 74 72 69 6e 67 73 0a 23 20 61 72  nd $strings.# ar
2d80: 65 20 6c 69 73 74 73 20 6f 66 20 74 68 65 20 69  e lists of the i
2d90: 6e 74 65 67 65 72 2c 20 72 65 61 6c 20 61 6e 64  nteger, real and
2da0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
2db0: 74 61 74 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65  tations of.# the
2dc0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
2dd0: 75 72 72 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20  urrent row..#.# 
2de0: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
2df0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
2e00: 72 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 27  repare "SELECT '
2e10: 68 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c  hello', 1.1, NUL
2e20: 4c 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73  L" -1 DUMMY].# s
2e30: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
2e40: 54 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74  T.# check_data t
2e50: 65 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41  est1.2 {TEXT REA
2e60: 4c 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20  L NULL} {0 1 0} 
2e70: 7b 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f  {0 1.1 0} {hello
2e80: 20 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20   1.1 {}}.#.proc 
2e90: 63 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54  check_data {STMT
2ea0: 20 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73   test types ints
2eb0: 20 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73   doubles strings
2ec0: 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65  } {..  # Use the
2ed0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66   return value of
2ee0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2ef0: 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64  count() to build
2f00: 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63  .  # a list of c
2f10: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
2f20: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
2f30: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20  olumn_count.  # 
2f40: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
2f50: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
2f60: 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c  set ::idxlist [l
2f70: 69 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f  ist].  set numco
2f80: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61  ls [sqlite3_data
2f90: 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20  _count $STMT].  
2fa0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
2fb0: 69 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69  i < $numcols} {i
2fc0: 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20  ncr i} {lappend 
2fd0: 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23  ::idxlist $i}..#
2fe0: 20 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24   types.do_test $
2ff0: 74 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74  test.1 {.  set t
3000: 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  ypes [list].  fo
3010: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
3020: 20 7b 0a 20 20 20 20 73 65 74 20 78 20 5b 73 71   {.    set x [sq
3030: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
3040: 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20  e $STMT $i].    
3050: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
3060: 2d 31 32 37 39 33 2d 34 33 32 38 33 20 45 76 65  -12793-43283 Eve
3070: 72 79 20 76 61 6c 75 65 20 69 6e 20 53 51 4c 69  ry value in SQLi
3080: 74 65 20 68 61 73 20 6f 6e 65 20 6f 66 20 66 69  te has one of fi
3090: 76 65 0a 20 20 20 20 23 20 66 75 6e 64 61 6d 65  ve.    # fundame
30a0: 6e 74 61 6c 20 64 61 74 61 74 79 70 65 73 3a 20  ntal datatypes: 
30b0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
30c0: 74 65 67 65 72 20 36 34 2d 62 69 74 20 49 45 45  teger 64-bit IEE
30d0: 45 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 23  E floating.    #
30e0: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 73 74   point number st
30f0: 72 69 6e 67 20 42 4c 4f 42 20 4e 55 4c 4c 0a 20  ring BLOB NULL. 
3100: 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20     if {[lsearch 
3110: 7b 49 4e 54 45 47 45 52 20 46 4c 4f 41 54 20 54  {INTEGER FLOAT T
3120: 45 58 54 20 42 4c 4f 42 20 4e 55 4c 4c 7d 20 24  EXT BLOB NULL} $
3130: 78 5d 3c 30 7d 20 7b 0a 20 20 20 20 20 20 73 65  x]<0} {.      se
3140: 74 20 74 79 70 65 73 20 45 52 52 4f 52 0a 20 20  t types ERROR.  
3150: 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 7d 20      break.    } 
3160: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 6c 61 70  else {.      lap
3170: 70 65 6e 64 20 74 79 70 65 73 20 24 78 0a 20 20  pend types $x.  
3180: 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20 74 79    }.  }.  set ty
3190: 70 65 73 0a 7d 20 24 74 79 70 65 73 0a 20 0a 0a  pes.} $types. ..
31a0: 23 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65  # Integers.do_te
31b0: 73 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 73  st $test.2 {.  s
31c0: 65 74 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20  et ints [list]. 
31d0: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
31e0: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74  ist {lappend int
31f0: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
3200: 6e 5f 69 6e 74 36 34 20 24 53 54 4d 54 20 24 69  n_int64 $STMT $i
3210: 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20  ]}.  set ints.} 
3220: 24 69 6e 74 73 0a 0a 23 20 62 79 74 65 73 0a 73  $ints..# bytes.s
3230: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 66  et lens [list].f
3240: 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c  oreach i $::idxl
3250: 69 73 74 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20  ist {.  lappend 
3260: 6c 65 6e 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e  lens [string len
3270: 67 74 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72  gth [lindex $str
3280: 69 6e 67 73 20 24 69 5d 5d 0a 7d 0a 64 6f 5f 74  ings $i]].}.do_t
3290: 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20  est $test.3 {.  
32a0: 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d  set bytes [list]
32b0: 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73  .  set lens [lis
32c0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
32d0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61  idxlist {.    la
32e0: 70 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c  ppend bytes [sql
32f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
3300: 73 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 7d 0a  s $STMT $i].  }.
3310: 20 20 73 65 74 20 62 79 74 65 73 0a 7d 20 24 6c    set bytes.} $l
3320: 65 6e 73 0a 0a 23 20 62 79 74 65 73 31 36 0a 69  ens..# bytes16.i
3330: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
3340: 20 7b 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c   {.  set lens [l
3350: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
3360: 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20   $::idxlist {.  
3370: 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b    lappend lens [
3380: 65 78 70 72 20 32 20 2a 20 5b 73 74 72 69 6e 67  expr 2 * [string
3390: 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20   length [lindex 
33a0: 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 5d 0a 20  $strings $i]]]. 
33b0: 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65   }.  do_test $te
33c0: 73 74 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 62  st.4 {.    set b
33d0: 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20  ytes [list].    
33e0: 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a  set lens [list].
33f0: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
3400: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 6c  dxlist {.      l
3410: 61 70 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71  append bytes [sq
3420: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
3430: 65 73 31 36 20 24 53 54 4d 54 20 24 69 5d 0a 20  es16 $STMT $i]. 
3440: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 62 79 74     }.    set byt
3450: 65 73 0a 20 20 7d 20 24 6c 65 6e 73 0a 7d 0a 0a  es.  } $lens.}..
3460: 23 20 42 6c 6f 62 0a 64 6f 5f 74 65 73 74 20 24  # Blob.do_test $
3470: 74 65 73 74 2e 35 20 7b 0a 20 20 73 65 74 20 75  test.5 {.  set u
3480: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
3490: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
34a0: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
34b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
34c0: 6f 62 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20  ob $STMT $i]}.  
34d0: 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69  set utf8.} $stri
34e0: 6e 67 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f  ngs..# UTF-8.do_
34f0: 74 65 73 74 20 24 74 65 73 74 2e 36 20 7b 0a 20  test $test.6 {. 
3500: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
3510: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3520: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
3530: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
3540: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24  umn_text $STMT $
3550: 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d  i]}.  set utf8.}
3560: 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 46 6c 6f   $strings..# Flo
3570: 61 74 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ats.do_test $tes
3580: 74 2e 37 20 7b 0a 20 20 73 65 74 20 75 74 66 38  t.7 {.  set utf8
3590: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
35a0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
35b0: 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69  ppend utf8 [sqli
35c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
35d0: 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  e $STMT $i]}.  s
35e0: 65 74 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c  et utf8.} $doubl
35f0: 65 73 0a 0a 23 20 55 54 46 2d 31 36 0a 69 66 63  es..# UTF-16.ifc
3600: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
3610: 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74  .  do_test $test
3620: 2e 38 20 7b 0a 20 20 20 20 73 65 74 20 75 74 66  .8 {.    set utf
3630: 38 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  8 [list].    for
3640: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
3650: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 75  {lappend utf8 [u
3660: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
3670: 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54  umn_text16 $STMT
3680: 20 24 69 5d 5d 7d 0a 20 20 20 20 73 65 74 20 75   $i]]}.    set u
3690: 74 66 38 0a 20 20 7d 20 24 73 74 72 69 6e 67 73  tf8.  } $strings
36a0: 0a 7d 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64  .}..# Integers.d
36b0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20 7b  o_test $test.9 {
36c0: 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73  .  set ints [lis
36d0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
36e0: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
36f0: 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63   ints [sqlite3_c
3700: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
3710: 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a  $i]}.  set ints.
3720: 7d 20 24 69 6e 74 73 0a 0a 23 20 46 6c 6f 61 74  } $ints..# Float
3730: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
3740: 31 30 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20  10 {.  set utf8 
3750: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
3760: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3770: 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74  pend utf8 [sqlit
3780: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
3790: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
37a0: 74 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65  t utf8.} $double
37b0: 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65  s..# UTF-8.do_te
37c0: 73 74 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20  st $test.11 {.  
37d0: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
37e0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
37f0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
3800: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
3810: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69  mn_text $STMT $i
3820: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
3830: 24 73 74 72 69 6e 67 73 0a 0a 23 20 54 79 70 65  $strings..# Type
3840: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
3850: 31 32 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73  12 {.  set types
3860: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3870: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3880: 70 70 65 6e 64 20 74 79 70 65 73 20 5b 73 71 6c  ppend types [sql
3890: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
38a0: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
38b0: 74 20 74 79 70 65 73 0a 7d 20 24 74 79 70 65 73  t types.} $types
38c0: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 61 6e  ..# Test that an
38d0: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 72 65   out of range re
38e0: 71 75 65 73 74 20 72 65 74 75 72 6e 73 20 74 68  quest returns th
38f0: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
3900: 4e 55 4c 4c 0a 64 6f 5f 74 65 73 74 20 24 74 65  NULL.do_test $te
3910: 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  st.13 {.  sqlite
3920: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
3930: 4d 54 20 2d 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  MT -1.} {0}.do_t
3940: 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20  est $test.13 {. 
3950: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3960: 74 65 78 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20  text $STMT -1.} 
3970: 7b 7d 0a 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  {}..}..ifcapable
3980: 20 21 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 20   !floatingpoint 
3990: 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a  {.  finish_test.
39a0: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74    return.}..do_t
39b0: 65 73 74 20 63 61 70 69 33 2d 35 2e 30 20 7b 0a  est capi3-5.0 {.
39c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
39d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
39e0: 61 20 56 41 52 49 4e 54 2c 20 62 20 42 4c 4f 42  a VARINT, b BLOB
39f0: 2c 20 63 20 56 41 52 43 48 41 52 28 31 36 29 29  , c VARCHAR(16))
3a00: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3a10: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  O t1 VALUES(1, 2
3a20: 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 3);.    INSERT
3a30: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3a40: 27 6f 6e 65 27 2c 20 27 74 77 6f 27 2c 20 4e 55  'one', 'two', NU
3a50: 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  LL);.    INSERT 
3a60: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
3a70: 2e 32 2c 20 31 2e 33 2c 20 31 2e 34 29 3b 0a 20  .2, 1.3, 1.4);. 
3a80: 20 7d 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45   }.  set sql "SE
3a90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 22 0a  LECT * FROM t1".
3aa0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
3ab0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
3ac0: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
3ad0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
3ae0: 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a  ount $STMT.} 3..
3af0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
3b00: 4d 54 20 63 61 70 69 33 2d 35 2e 31 20 7b 61 20  MT capi3-5.1 {a 
3b10: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3b20: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3b30: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3b40: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  er $STMT capi3-5
3b50: 2e 31 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .1 {main main ma
3b60: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3b70: 61 20 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 63  a b c}.do_test c
3b80: 61 70 69 33 2d 35 2e 32 20 7b 0a 20 20 73 71 6c  api3-5.2 {.  sql
3b90: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3ba0: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68  } SQLITE_ROW..ch
3bb0: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3bc0: 20 63 61 70 69 33 2d 35 2e 33 20 7b 61 20 62 20   capi3-5.3 {a b 
3bd0: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3be0: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3bf0: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3c00: 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33   $STMT capi3-5.3
3c10: 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e   {main main main
3c20: 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20  } {t1 t1 t1} {a 
3c30: 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20  b c}.check_data 
3c40: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 34 20  $STMT capi3-5.4 
3c50: 7b 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52  {INTEGER INTEGER
3c60: 20 54 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b   TEXT} {1 2 3} {
3c70: 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20  1.0 2.0 3.0} {1 
3c80: 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  2 3}..do_test ca
3c90: 70 69 33 2d 35 2e 35 20 7b 0a 20 20 73 71 6c 69  pi3-5.5 {.  sqli
3ca0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3cb0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65   SQLITE_ROW..che
3cc0: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
3cd0: 63 61 70 69 33 2d 35 2e 36 20 7b 61 20 62 20 63  capi3-5.6 {a b c
3ce0: 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56  } {VARINT BLOB V
3cf0: 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63  ARCHAR(16)}.chec
3d00: 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20  k_origin_header 
3d10: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 36 20  $STMT capi3-5.6 
3d20: 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d  {main main main}
3d30: 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62   {t1 t1 t1} {a b
3d40: 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24   c}.check_data $
3d50: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 37 20 7b  STMT capi3-5.7 {
3d60: 54 45 58 54 20 54 45 58 54 20 4e 55 4c 4c 7d 20  TEXT TEXT NULL} 
3d70: 7b 30 20 30 20 30 7d 20 7b 30 2e 30 20 30 2e 30  {0 0 0} {0.0 0.0
3d80: 20 30 2e 30 7d 20 7b 6f 6e 65 20 74 77 6f 20 7b   0.0} {one two {
3d90: 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  }}..do_test capi
3da0: 33 2d 35 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65  3-5.8 {.  sqlite
3db0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
3dc0: 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b  QLITE_ROW..check
3dd0: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3de0: 70 69 33 2d 35 2e 39 20 7b 61 20 62 20 63 7d 20  pi3-5.9 {a b c} 
3df0: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
3e00: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
3e10: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3e20: 54 4d 54 20 63 61 70 69 33 2d 35 2e 39 20 7b 6d  TMT capi3-5.9 {m
3e30: 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b  ain main main} {
3e40: 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63  t1 t1 t1} {a b c
3e50: 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53 54  }.check_data $ST
3e60: 4d 54 20 63 61 70 69 33 2d 35 2e 31 30 20 7b 46  MT capi3-5.10 {F
3e70: 4c 4f 41 54 20 46 4c 4f 41 54 20 54 45 58 54 7d  LOAT FLOAT TEXT}
3e80: 20 7b 31 20 31 20 31 7d 20 7b 31 2e 32 20 31 2e   {1 1 1} {1.2 1.
3e90: 33 20 31 2e 34 7d 20 7b 31 2e 32 20 31 2e 33 20  3 1.4} {1.2 1.3 
3ea0: 31 2e 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  1.4}..do_test ca
3eb0: 70 69 33 2d 35 2e 31 31 20 7b 0a 20 20 73 71 6c  pi3-5.11 {.  sql
3ec0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3ed0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 0a 64  } SQLITE_DONE..d
3ee0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 31  o_test capi3-5.1
3ef0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  2 {.  sqlite3_fi
3f00: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53  nalize $STMT.} S
3f10: 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73  QLITE_OK..do_tes
3f20: 74 20 63 61 70 69 33 2d 35 2e 32 30 20 7b 0a 20  t capi3-5.20 {. 
3f30: 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54   set sql "SELECT
3f40: 20 61 2c 20 73 75 6d 28 62 29 2c 20 6d 61 78 28   a, sum(b), max(
3f50: 63 29 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50  c) FROM t1 GROUP
3f60: 20 42 59 20 61 22 0a 20 20 73 65 74 20 53 54 4d   BY a".  set STM
3f70: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
3f80: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
3f90: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63  AIL].  sqlite3_c
3fa0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d  olumn_count $STM
3fb0: 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61  T.} 3..check_hea
3fc0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3fd0: 35 2e 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d  5.21 {a sum(b) m
3fe0: 61 78 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b  ax(c)} {VARINT {
3ff0: 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67  } {}}.check_orig
4000: 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  in_header $STMT 
4010: 63 61 70 69 33 2d 35 2e 32 32 20 7b 6d 61 69 6e  capi3-5.22 {main
4020: 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b   {} {}} {t1 {} {
4030: 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  }} {a {} {}}.do_
4040: 74 65 73 74 20 63 61 70 69 33 2d 35 2e 32 33 20  test capi3-5.23 
4050: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
4060: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
4070: 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20  ITE_OK..do_test 
4080: 63 61 70 69 33 2d 35 2e 33 30 20 7b 0a 20 20 73  capi3-5.30 {.  s
4090: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61  et sql "SELECT a
40a0: 20 41 53 20 78 2c 20 73 75 6d 28 62 29 20 41 53   AS x, sum(b) AS
40b0: 20 79 2c 20 6d 61 78 28 63 29 20 41 53 20 7a 20   y, max(c) AS z 
40c0: 46 52 4f 4d 20 74 31 20 41 53 20 6d 20 47 52 4f  FROM t1 AS m GRO
40d0: 55 50 20 42 59 20 78 22 0a 20 20 73 65 74 20 53  UP BY x".  set S
40e0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
40f0: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31  pare $DB $sql -1
4100: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
4110: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
4120: 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68  TMT.} 3..check_h
4130: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
4140: 33 2d 35 2e 33 31 20 7b 78 20 79 20 7a 7d 20 7b  3-5.31 {x y z} {
4150: 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63 68  VARINT {} {}}.ch
4160: 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65  eck_origin_heade
4170: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
4180: 33 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d 7d 20  32 {main {} {}} 
4190: 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20 7b 7d  {t1 {} {}} {a {}
41a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
41b0: 69 33 2d 35 2e 33 33 20 7b 0a 20 20 73 71 6c 69  i3-5.33 {.  sqli
41c0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
41d0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a  MT.} SQLITE_OK..
41e0: 23 20 32 30 31 38 2d 30 31 2d 30 39 3a 20 20 49  # 2018-01-09:  I
41f0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  f a column is th
4200: 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 69 66 20  e last token if 
4210: 61 20 73 74 72 69 6e 67 2c 20 74 68 65 20 63 6f  a string, the co
4220: 6c 75 6d 6e 20 6e 61 6d 65 0a 23 20 77 61 73 20  lumn name.# was 
4230: 6e 6f 74 20 62 65 69 6e 67 20 73 65 74 20 63 6f  not being set co
4240: 72 72 65 63 74 6c 79 2c 20 64 75 65 20 74 6f 20  rrectly, due to 
4250: 63 68 61 6e 67 65 73 20 69 6e 20 63 68 65 63 6b  changes in check
4260: 2d 69 6e 0a 23 20 68 74 74 70 73 3a 2f 2f 73 71  -in.# https://sq
4270: 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66  lite.org/src/inf
4280: 6f 2f 30 66 64 66 39 37 65 66 65 35 64 66 37 34  o/0fdf97efe5df74
4290: 35 35 0a 23 0a 23 20 54 68 69 73 20 70 72 6f 62  55.#.# This prob
42a0: 6c 65 6d 20 77 61 73 20 64 65 74 65 63 74 65 64  lem was detected
42b0: 20 62 79 20 74 68 65 20 63 6f 6d 6d 75 6e 69 74   by the communit
42c0: 79 20 64 75 72 69 6e 67 20 62 65 74 61 2d 74 65  y during beta-te
42d0: 73 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73 74  sting..#.do_test
42e0: 20 63 61 70 69 33 2d 35 2e 33 34 20 7b 0a 20 20   capi3-5.34 {.  
42f0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
4300: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b 53  3_prepare $DB {S
4310: 45 4c 45 43 54 20 3a 61 2c 20 3a 62 7d 20 2d 31  ELECT :a, :b} -1
4320: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
4330: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
4340: 54 4d 54 0a 7d 20 32 0a 63 68 65 63 6b 5f 68 65  TMT.} 2.check_he
4350: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 2d  ader $STMT capi-
4360: 35 2e 33 35 20 7b 3a 61 20 3a 62 7d 20 7b 7b 7d  5.35 {:a :b} {{}
4370: 20 7b 7d 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e   {}}.sqlite3_fin
4380: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 0a 73 65 74  alize $STMT..set
4390: 20 3a 3a 45 4e 43 20 5b 65 78 65 63 73 71 6c 20   ::ENC [execsql 
43a0: 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67  {pragma encoding
43b0: 7d 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f  }].db close..do_
43c0: 74 65 73 74 20 63 61 70 69 33 2d 36 2e 30 20 7b  test capi3-6.0 {
43d0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
43e0: 73 74 2e 64 62 0a 20 20 73 65 74 20 44 42 20 5b  st.db.  set DB [
43f0: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
4400: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20  on_pointer db]. 
4410: 20 69 66 20 7b 5b 73 71 6c 69 74 65 33 20 2d 68   if {[sqlite3 -h
4420: 61 73 2d 63 6f 64 65 63 5d 3d 3d 30 7d 20 7b 20  as-codec]==0} { 
4430: 73 71 6c 69 74 65 33 5f 6b 65 79 20 24 44 42 20  sqlite3_key $DB 
4440: 78 79 7a 7a 79 20 7d 0a 20 20 73 65 74 20 73 71  xyzzy }.  set sq
4450: 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  l {SELECT a FROM
4460: 20 74 31 20 6f 72 64 65 72 20 62 79 20 72 6f 77   t1 order by row
4470: 69 64 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  id}.  set STMT [
4480: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
4490: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
44a0: 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20 7b 30 7d  ].  expr 0.} {0}
44b0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
44c0: 2e 31 20 7b 0a 20 20 64 62 20 63 61 63 68 65 20  .1 {.  db cache 
44d0: 66 6c 75 73 68 0a 20 20 73 71 6c 69 74 65 33 5f  flush.  sqlite3_
44e0: 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b 53 51 4c  close $DB.} {SQL
44f0: 49 54 45 5f 42 55 53 59 7d 0a 0a 23 20 36 2e 32  ITE_BUSY}..# 6.2
4500: 20 61 6e 64 20 36 2e 33 20 75 73 65 64 20 74 6f   and 6.3 used to
4510: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4520: 52 52 4f 52 20 61 6e 64 20 53 51 4c 49 54 45 5f  RROR and SQLITE_
4530: 53 43 48 45 4d 41 2c 20 72 65 73 70 65 63 74 69  SCHEMA, respecti
4540: 76 65 6c 79 2e 0a 23 20 42 75 74 20 73 69 6e 63  vely..# But sinc
4550: 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  e attempting to 
4560: 63 6c 6f 73 65 20 61 20 63 6f 6e 6e 65 63 74 69  close a connecti
4570: 6f 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20 72 65 73  on no longer res
4580: 65 74 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ets the internal
4590: 0a 23 20 73 63 68 65 6d 61 20 61 6e 64 20 65 78  .# schema and ex
45a0: 70 69 72 65 73 20 61 6c 6c 20 73 74 61 74 65 6d  pires all statem
45b0: 65 6e 74 73 2c 20 74 68 69 73 20 69 73 20 6e 6f  ents, this is no
45c0: 20 6c 6f 6e 67 65 72 20 74 68 65 20 63 61 73 65   longer the case
45d0: 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  ..do_test capi3-
45e0: 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  6.2 {.  sqlite3_
45f0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
4600: 4c 49 54 45 5f 52 4f 57 7d 0a 23 63 68 65 63 6b  LITE_ROW}.#check
4610: 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69  _data $STMT capi
4620: 33 2d 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20  3-6.3 {INTEGER} 
4630: 7b 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f  {1} {1.0} {1}.do
4640: 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 33 20  _test capi3-6.3 
4650: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
4660: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
4670: 4c 49 54 45 5f 4f 4b 7d 0a 0a 69 66 20 7b 5b 63  LITE_OK}..if {[c
4680: 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65 5f 61 64  lang_sanitize_ad
4690: 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20 64  dress]==0} {.  d
46a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 34  o_test capi3-6.4
46b0: 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 64 62  -misuse {.    db
46c0: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 20   cache flush.   
46d0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
46e0: 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f  DB.  } {SQLITE_O
46f0: 4b 7d 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a 23  K}.}.db close..#
4700: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
4710: 73 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f  sets the value o
4720: 66 20 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61  f the file-forma
4730: 74 20 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e  t in file 'test.
4740: 64 62 27 0a 23 20 74 6f 20 24 6e 65 77 76 61 6c  db'.# to $newval
4750: 2e 20 41 6c 73 6f 2c 20 74 68 65 20 73 63 68 65  . Also, the sche
4760: 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 69 6e 63  ma cookie is inc
4770: 72 65 6d 65 6e 74 65 64 2e 0a 23 20 0a 70 72 6f  remented..# .pro
4780: 63 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61  c set_file_forma
4790: 74 20 7b 6e 65 77 76 61 6c 7d 20 7b 0a 20 20 68  t {newval} {.  h
47a0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
47b0: 64 62 20 34 34 20 5b 68 65 78 69 6f 5f 72 65 6e  db 44 [hexio_ren
47c0: 64 65 72 5f 69 6e 74 33 32 20 24 6e 65 77 76 61  der_int32 $newva
47d0: 6c 5d 0a 20 20 73 65 74 20 73 63 68 65 6d 61 63  l].  set schemac
47e0: 6f 6f 6b 69 65 20 5b 68 65 78 69 6f 5f 67 65 74  ookie [hexio_get
47f0: 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64  _int [hexio_read
4800: 20 74 65 73 74 2e 64 62 20 34 30 20 34 5d 5d 0a   test.db 40 4]].
4810: 20 20 69 6e 63 72 20 73 63 68 65 6d 61 63 6f 6f    incr schemacoo
4820: 6b 69 65 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  kie.  hexio_writ
4830: 65 20 74 65 73 74 2e 64 62 20 34 30 20 5b 68 65  e test.db 40 [he
4840: 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32  xio_render_int32
4850: 20 24 73 63 68 65 6d 61 63 6f 6f 6b 69 65 5d 0a   $schemacookie].
4860: 20 20 72 65 74 75 72 6e 20 7b 7d 0a 7d 0a 0a 23    return {}.}..#
4870: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
4880: 72 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75  returns the valu
4890: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f  e of the file-fo
48a0: 72 6d 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65  rmat in file 'te
48b0: 73 74 2e 64 62 27 2e 0a 23 20 0a 70 72 6f 63 20  st.db'..# .proc 
48c0: 67 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20  get_file_format 
48d0: 7b 7b 66 6e 61 6d 65 20 74 65 73 74 2e 64 62 7d  {{fname test.db}
48e0: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b 68 65  } {.  return [he
48f0: 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78  xio_get_int [hex
4900: 69 6f 5f 72 65 61 64 20 24 66 6e 61 6d 65 20 34  io_read $fname 4
4910: 34 20 34 5d 5d 0a 7d 0a 0a 69 66 20 7b 21 5b 73  4 4]].}..if {![s
4920: 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65  qlite3 -has-code
4930: 63 5d 7d 20 7b 0a 20 20 23 20 54 65 73 74 20 77  c]} {.  # Test w
4940: 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65 6e  hat happens when
4950: 20 74 68 65 20 6c 69 62 72 61 72 79 20 65 6e 63   the library enc
4960: 6f 75 6e 74 65 72 73 20 61 20 6e 65 77 65 72 20  ounters a newer 
4970: 66 69 6c 65 20 66 6f 72 6d 61 74 2e 0a 20 20 64  file format..  d
4980: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 37 2e 31  o_test capi3-7.1
4990: 20 7b 0a 20 20 20 20 73 65 74 5f 66 69 6c 65 5f   {.    set_file_
49a0: 66 6f 72 6d 61 74 20 35 0a 20 20 7d 20 7b 7d 0a  format 5.  } {}.
49b0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
49c0: 37 2e 32 20 7b 0a 20 20 20 20 63 61 74 63 68 20  7.2 {.    catch 
49d0: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
49e0: 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68  t.db }.    catch
49f0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4a00: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4a10: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4a20: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
4a30: 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d  ed file format}}
4a40: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69  .  db close.}..i
4a50: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
4a60: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
4a70: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
4a80: 65 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63  e library correc
4a90: 74 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75  tly handles bogu
4aa0: 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  s entries in the
4ab0: 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74  .  # sqlite_mast
4ac0: 65 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61  er table (schema
4ad0: 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20   corruption)..  
4ae0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
4af0: 31 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c  1 {.    forcedel
4b00: 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73 74  ete test.db test
4b10: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
4b20: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4b30: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
4b40: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
4b50: 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d  BLE t1(a);.    }
4b60: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
4b70: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  } {}.  do_test c
4b80: 61 70 69 33 2d 38 2e 32 20 7b 0a 20 20 20 20 73  api3-8.2 {.    s
4b90: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4ba0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
4bb0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69        PRAGMA wri
4bc0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
4bd0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4be0: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
4bf0: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c   VALUES(NULL,NUL
4c00: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  L,NULL,NULL,NULL
4c10: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  );.    }.    db 
4c20: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64  close.  } {}.  d
4c30: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 33  o_test capi3-8.3
4c40: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
4c50: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4c60: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4c70: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4c80: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4c90: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4ca0: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
4cb0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f  tabase schema (?
4cc0: 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  )}}.  do_test ca
4cd0: 70 69 33 2d 38 2e 34 20 7b 0a 20 20 20 20 23 20  pi3-8.4 {.    # 
4ce0: 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20  Build a 5-field 
4cf0: 72 6f 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  row record. The 
4d00: 66 69 72 73 74 20 66 69 65 6c 64 20 69 73 20 61  first field is a
4d10: 20 73 74 72 69 6e 67 20 27 74 61 62 6c 65 27 2c   string 'table',
4d20: 20 61 6e 64 0a 20 20 20 20 23 20 73 75 62 73 65   and.    # subse
4d30: 71 75 65 6e 74 20 66 69 65 6c 64 73 20 61 72 65  quent fields are
4d40: 20 61 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20 64   all NULL..    d
4d50: 62 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72 63  b close.    forc
4d60: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20  edelete test.db 
4d70: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
4d80: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
4d90: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
4da0: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
4db0: 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20  E TABLE t1(a);. 
4dc0: 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74       PRAGMA writ
4dd0: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a  able_schema=ON;.
4de0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
4df0: 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  O sqlite_master 
4e00: 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c 4e  VALUES('table',N
4e10: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  ULL,NULL,NULL,NU
4e20: 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  LL);.    }.    d
4e30: 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b 0a  b close.  } {};.
4e40: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4e50: 38 2e 35 20 7b 0a 20 20 20 20 63 61 74 63 68 20  8.5 {.    catch 
4e60: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
4e70: 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68  t.db }.    catch
4e80: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4e90: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4ea0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4eb0: 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64   } {1 {malformed
4ec0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
4ed0: 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63 6c 6f 73   (?)}}.  db clos
4ee0: 65 0a 7d 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  e.}.forcedelete 
4ef0: 74 65 73 74 2e 64 62 0a 66 6f 72 63 65 64 65 6c  test.db.forcedel
4f00: 65 74 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  ete test.db-jour
4f10: 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20 74 68 65  nal...# Test the
4f20: 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
4f30: 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c  e string equival
4f40: 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20  ents for sqlite 
4f50: 65 72 72 6f 72 20 63 6f 64 65 73 0a 73 65 74 20  error codes.set 
4f60: 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 5b 6c 69  code2english [li
4f70: 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b 20 20  st \.SQLITE_OK  
4f80: 20 20 20 20 20 20 20 7b 6e 6f 74 20 61 6e 20 65         {not an e
4f90: 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 45  rror} \.SQLITE_E
4fa0: 52 52 4f 52 20 20 20 20 20 20 7b 53 51 4c 20 6c  RROR      {SQL l
4fb0: 6f 67 69 63 20 65 72 72 6f 72 7d 20 5c 0a 53 51  ogic error} \.SQ
4fc0: 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20 20 20  LITE_PERM       
4fd0: 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69  {access permissi
4fe0: 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c  on denied} \.SQL
4ff0: 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20 20 7b  ITE_ABORT      {
5000: 71 75 65 72 79 20 61 62 6f 72 74 65 64 7d 20 5c  query aborted} \
5010: 0a 53 51 4c 49 54 45 5f 42 55 53 59 20 20 20 20  .SQLITE_BUSY    
5020: 20 20 20 7b 64 61 74 61 62 61 73 65 20 69 73 20     {database is 
5030: 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45  locked} \.SQLITE
5040: 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b 64 61 74  _LOCKED     {dat
5050: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
5060: 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  ocked} \.SQLITE_
5070: 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f 75 74 20  NOMEM      {out 
5080: 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c  of memory} \.SQL
5090: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20 7b  ITE_READONLY   {
50a0: 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
50b0: 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61   a readonly data
50c0: 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 49  base} \.SQLITE_I
50d0: 4e 54 45 52 52 55 50 54 20 20 7b 69 6e 74 65 72  NTERRUPT  {inter
50e0: 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c 49 54 45  rupted} \.SQLITE
50f0: 5f 49 4f 45 52 52 20 20 20 20 20 20 7b 64 69 73  _IOERR      {dis
5100: 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a 53  k I/O error} \.S
5110: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 20 20  QLITE_CORRUPT   
5120: 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   {database disk 
5130: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
5140: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 55 4c  ed} \.SQLITE_FUL
5150: 4c 20 20 20 20 20 20 20 7b 64 61 74 61 62 61 73  L       {databas
5160: 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c  e or disk is ful
5170: 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 41 4e 54  l} \.SQLITE_CANT
5180: 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c 65 20 74  OPEN   {unable t
5190: 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  o open database 
51a0: 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 53  file} \.SQLITE_S
51b0: 43 48 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62  CHEMA     {datab
51c0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
51d0: 68 61 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45  hanged} \.SQLITE
51e0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e  _CONSTRAINT {con
51f0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20  straint failed} 
5200: 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  \.SQLITE_MISMATC
5210: 48 20 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69  H   {datatype mi
5220: 73 6d 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45  smatch} \.SQLITE
5230: 5f 4d 49 53 55 53 45 20 20 20 20 20 7b 62 61 64  _MISUSE     {bad
5240: 20 70 61 72 61 6d 65 74 65 72 20 6f 72 20 6f 74   parameter or ot
5250: 68 65 72 20 41 50 49 20 6d 69 73 75 73 65 7d 20  her API misuse} 
5260: 5c 0a 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20  \.SQLITE_AUTH   
5270: 20 20 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69      {authorizati
5280: 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c  on denied} \.SQL
5290: 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b  ITE_RANGE      {
52a0: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74  column index out
52b0: 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53 51 4c   of range} \.SQL
52c0: 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 7b  ITE_NOTADB     {
52d0: 66 69 6c 65 20 69 73 20 6e 6f 74 20 61 20 64 61  file is not a da
52e0: 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77  tabase} \.unknow
52f0: 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75 6e 6b  nerror      {unk
5300: 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a  nown error} \.].
5310: 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62 65 72  .set test_number
5320: 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f 64 65   1.foreach {code
5330: 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64 65 32   english} $code2
5340: 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f 5f 74  english {.  do_t
5350: 65 73 74 20 63 61 70 69 33 2d 39 2e 24 74 65 73  est capi3-9.$tes
5360: 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c 69 74 65  t_number "sqlite
5370: 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20 24 63  3_test_errstr $c
5380: 6f 64 65 22 20 24 65 6e 67 6c 69 73 68 0a 20 20  ode" $english.  
5390: 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d 62 65 72  incr test_number
53a0: 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65  .}..# Test the e
53b0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 68 65  rror message whe
53c0: 6e 20 61 20 22 72 65 61 6c 22 20 6f 75 74 20 6f  n a "real" out o
53d0: 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75 72 73 2e  f memory occurs.
53e0: 0a 69 66 20 7b 20 5b 70 65 72 6d 75 74 61 74 69  .if { [permutati
53f0: 6f 6e 5d 20 21 3d 20 22 6e 6f 66 61 75 6c 74 73  on] != "nofaults
5400: 69 6d 22 20 7d 20 7b 0a 69 66 63 61 70 61 62 6c  im" } {.ifcapabl
5410: 65 20 6d 65 6d 64 65 62 75 67 20 7b 0a 20 20 64  e memdebug {.  d
5420: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d  o_test capi3-10-
5430: 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  1 {.    sqlite3 
5440: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73  db test.db.    s
5450: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
5460: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
5470: 72 20 64 62 5d 0a 20 20 20 20 73 71 6c 69 74 65  r db].    sqlite
5480: 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20  3_memdebug_fail 
5490: 31 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  1.    catchsql {
54a0: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
54b0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
54c0: 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  er;.    }.  } {1
54d0: 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d   {out of memory}
54e0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
54f0: 33 2d 31 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c  3-10-2 {.    sql
5500: 69 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44  ite3_errmsg $::D
5510: 42 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65  B.  } {out of me
5520: 6d 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c  mory}.  ifcapabl
5530: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
5540: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30  do_test capi3-10
5550: 2d 33 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20  -3 {.      utf8 
5560: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
5570: 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b  6 $::DB].    } {
5580: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
5590: 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   }.  db close.  
55a0: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
55b0: 5f 66 61 69 6c 20 2d 31 0a 20 20 64 6f 5f 74 65  _fail -1.  do_te
55c0: 73 74 20 63 61 70 69 33 2d 31 30 2d 34 20 7b 0a  st capi3-10-4 {.
55d0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
55e0: 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 44  est.db.    set D
55f0: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
5600: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
5610: 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65  ].    sqlite3_me
5620: 6d 64 65 62 75 67 5f 66 61 69 6c 20 31 0a 20 20  mdebug_fail 1.  
5630: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5640: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
5650: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 77   sqlite_master w
5660: 68 65 72 65 20 72 6f 77 69 64 3e 35 3b 0a 20 20  here rowid>5;.  
5670: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20    }.  } {1 {out 
5680: 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f  of memory}}.  do
5690: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 35  _test capi3-10-5
56a0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
56b0: 72 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20  rrmsg $::DB.  } 
56c0: 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a  {out of memory}.
56d0: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
56e0: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
56f0: 74 20 63 61 70 69 33 2d 31 30 2d 36 20 7b 0a 20  t capi3-10-6 {. 
5700: 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74       utf8 [sqlit
5710: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44  e3_errmsg16 $::D
5720: 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66  B].    } {out of
5730: 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64   memory}.  }.  d
5740: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
5750: 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20  3_memdebug_fail 
5760: 2d 31 0a 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  -1.}.}..# The fo
5770: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20  llowing tests - 
5780: 63 61 70 69 33 2d 31 31 2e 2a 20 2d 20 74 65 73  capi3-11.* - tes
5790: 74 20 74 68 61 74 20 61 20 43 4f 4d 4d 49 54 20  t that a COMMIT 
57a0: 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23 20 73 74  or ROLLBACK.# st
57b0: 61 74 65 6d 65 6e 74 20 69 73 73 75 65 64 20 77  atement issued w
57c0: 68 69 6c 65 20 74 68 65 72 65 20 61 72 65 20 73  hile there are s
57d0: 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67  till outstanding
57e0: 20 56 4d 73 20 74 68 61 74 20 61 72 65 20 70 61   VMs that are pa
57f0: 72 74 20 6f 66 0a 23 20 74 68 65 20 74 72 61 6e  rt of.# the tran
5800: 73 61 63 74 69 6f 6e 20 66 61 69 6c 73 2e 0a 73  saction fails..s
5810: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5820: 62 0a 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65  b.set DB [sqlite
5830: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
5840: 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69 74 65 5f  nter db].sqlite_
5850: 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75  register_test_fu
5860: 6e 63 74 69 6f 6e 20 24 44 42 20 66 75 6e 63 0a  nction $DB func.
5870: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5880: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
5890: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
58a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
58b0: 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  a, b);.    INSER
58c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
58d0: 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20 20 20 20  (1, 'int');.    
58e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
58f0: 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74 61 74 79  ALUES(2, 'notaty
5900: 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  pe');.  }.} {}.d
5910: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5920: 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.1 {.  sqlite3_
5930: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
5940: 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63  DB.} 0.do_test c
5950: 61 70 69 33 2d 31 31 2e 32 20 7b 0a 20 20 73 65  api3-11.2 {.  se
5960: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
5970: 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45 4c  prepare $DB "SEL
5980: 45 43 54 20 66 75 6e 63 28 62 2c 20 61 29 20 46  ECT func(b, a) F
5990: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
59a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
59b0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
59c0: 52 4f 57 7d 0a 0a 23 20 41 73 20 6f 66 20 33 2e  ROW}..# As of 3.
59d0: 36 2e 35 20 61 20 43 4f 4d 4d 49 54 20 69 73 20  6.5 a COMMIT is 
59e0: 4f 4b 20 64 75 72 69 6e 67 20 77 68 69 6c 65 20  OK during while 
59f0: 61 20 71 75 65 72 79 20 69 73 20 73 74 69 6c 6c  a query is still
5a00: 20 72 75 6e 6e 69 6e 67 20 2d 0a 23 20 61 73 20   running -.# as 
5a10: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 61 20  long as it is a 
5a20: 72 65 61 64 2d 6f 6e 6c 79 20 71 75 65 72 79 20  read-only query 
5a30: 61 6e 64 20 6e 6f 74 20 61 6e 20 69 6e 63 72 65  and not an incre
5a40: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 77 72 69 74  mental BLOB writ
5a50: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  e..#.do_test cap
5a60: 69 33 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 63 61  i3-11.3.1 {.  ca
5a70: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5a80: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5a90: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5aa0: 31 31 2e 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74  11.3.2 {.  sqlit
5ab0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
5ac0: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
5ad0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5ae0: 70 69 33 2d 31 31 2e 33 2e 33 20 7b 0a 20 20 73  pi3-11.3.3 {.  s
5af0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5b00: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5b10: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33  _test capi3-11.3
5b20: 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .4 {.  db eval {
5b30: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74  PRAGMA lock_stat
5b40: 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20 73 68 61 72  us}.} {main shar
5b50: 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a  ed temp closed}.
5b60: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5b70: 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.4 {.  sqlite3_
5b80: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5b90: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
5ba0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 35 20 7b  est capi3-11.5 {
5bb0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
5bc0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  ize $STMT.} {SQL
5bd0: 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65  ITE_ERROR}.do_te
5be0: 73 74 20 63 61 70 69 33 2d 31 31 2e 36 20 7b 0a  st capi3-11.6 {.
5bf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5c00: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5c10: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69  1;.  }.} {0 {1 i
5c20: 6e 74 20 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a  nt 2 notatype}}.
5c30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5c40: 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .7 {.  sqlite3_g
5c50: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
5c60: 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 1.do_test ca
5c70: 70 69 33 2d 31 31 2e 38 20 7b 0a 20 20 65 78 65  pi3-11.8 {.  exe
5c80: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
5c90: 45 20 54 41 42 4c 45 20 74 32 28 61 29 3b 0a 20  E TABLE t2(a);. 
5ca0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5cb0: 32 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20  2 VALUES(1);.   
5cc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
5cd0: 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 42  VALUES(2);.    B
5ce0: 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54  EGIN;.    INSERT
5cf0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5d00: 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  3);.  }.} {}.do_
5d10: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 38 2e  test capi3-11.8.
5d20: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5d30: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5d40: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5d50: 69 33 2d 31 31 2e 39 20 7b 0a 20 20 73 65 74 20  i3-11.9 {.  set 
5d60: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5d70: 65 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43  epare $DB "SELEC
5d80: 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20  T a FROM t2" -1 
5d90: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
5da0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5db0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5dc0: 74 20 63 61 70 69 33 2d 31 31 2e 39 2e 31 20 7b  t capi3-11.9.1 {
5dd0: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5de0: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5df0: 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  0.do_test capi3-
5e00: 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61 74 63 68  11.9.2 {.  catch
5e10: 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41  sql {.    ROLLBA
5e20: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  CK;.  }.} {0 {}}
5e30: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5e40: 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  1.9.3 {.  sqlite
5e50: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5e60: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
5e70: 20 63 61 70 69 33 2d 31 31 2e 31 30 20 7b 0a 20   capi3-11.10 {. 
5e80: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5e90: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
5ea0: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
5eb0: 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -11.11 {.  sqlit
5ec0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5ed0: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 69 66  {SQLITE_DONE}.if
5ee0: 63 61 70 61 62 6c 65 20 21 61 75 74 6f 72 65 73  capable !autores
5ef0: 65 74 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  et {.  do_test c
5f00: 61 70 69 33 2d 31 31 2e 31 32 61 72 6d 6f 72 20  api3-11.12armor 
5f10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  {.    sqlite3_st
5f20: 65 70 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  ep $STMT.    sql
5f30: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5f40: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55    } {SQLITE_MISU
5f50: 53 45 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  SE}.} else {.  d
5f60: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5f70: 31 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  12 {.    sqlite3
5f80: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20  _step $STMT.    
5f90: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5fa0: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52  MT.  } {SQLITE_R
5fb0: 4f 57 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61  OW}.}.do_test ca
5fc0: 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20 20 73 71  pi3-11.13 {.  sq
5fd0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
5fe0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  STMT.} {SQLITE_O
5ff0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
6000: 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  -11.14 {.  execs
6010: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
6020: 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  a FROM t2;.  }.}
6030: 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 63   {1 2}.do_test c
6040: 61 70 69 33 2d 31 31 2e 31 34 2e 31 20 7b 0a 20  api3-11.14.1 {. 
6050: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
6060: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a  ocommit $DB.} 1.
6070: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
6080: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
6090: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
60a0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f  .  }.} {1 {canno
60b0: 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
60c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
60d0: 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  ctive}}.do_test 
60e0: 63 61 70 69 33 2d 31 31 2e 31 35 2e 31 20 7b 0a  capi3-11.15.1 {.
60f0: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
6100: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
6110: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6120: 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.16 {.  execsql
6130: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
6140: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
6150: 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63  1 2}..# Sanity c
6160: 68 65 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69  heck on the defi
6170: 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74  nition of 'outst
6180: 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73  anding VM'. This
6190: 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20   means any VM.# 
61a0: 74 68 61 74 20 68 61 73 20 68 61 64 20 73 71 6c  that has had sql
61b0: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
61c0: 65 64 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79  ed more recently
61d0: 20 74 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69   than sqlite3_fi
61e0: 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71  nalize() or.# sq
61f0: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53  lite3_reset(). S
6200: 6f 20 61 20 56 4d 20 74 68 61 74 20 68 61 73 20  o a VM that has 
6210: 6a 75 73 74 20 62 65 65 6e 20 70 72 65 70 61 72  just been prepar
6220: 65 64 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73  ed or reset does
6230: 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20   not.# count as 
6240: 61 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f  an active VM..do
6250: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
6260: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
6270: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d      BEGIN;.  }.}
6280: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69   {}.do_test capi
6290: 33 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20  3-11.18 {.  set 
62a0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
62b0: 65 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43  epare $DB "SELEC
62c0: 54 20 61 20 46 52 4f 4d 20 74 31 22 20 2d 31 20  T a FROM t1" -1 
62d0: 54 41 49 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c  TAIL].  catchsql
62e0: 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20   {.    COMMIT;. 
62f0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6300: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 39 20  est capi3-11.19 
6310: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
6320: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
6330: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
6340: 70 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20 63 61  pi3-11.20 {.  ca
6350: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
6360: 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  IN;.    COMMIT;.
6370: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
6380: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32 30  test capi3-11.20
6390: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
63a0: 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74 63 68  et $STMT.  catch
63b0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
63c0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e  ;.  }.} {1 {cann
63d0: 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
63e0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
63f0: 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  tive}}.do_test c
6400: 61 70 69 33 2d 31 31 2e 32 31 20 7b 0a 20 20 73  api3-11.21 {.  s
6410: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6420: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
6430: 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  OK}..# The follo
6440: 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70  wing tests - cap
6450: 69 33 2d 31 32 2e 2a 20 2d 20 63 68 65 63 6b 20  i3-12.* - check 
6460: 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20 73  that its Ok to s
6470: 74 61 72 74 20 61 0a 23 20 74 72 61 6e 73 61 63  tart a.# transac
6480: 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68 65 72  tion while other
6490: 20 56 4d 73 20 61 72 65 20 61 63 74 69 76 65 2c   VMs are active,
64a0: 20 61 6e 64 20 74 68 61 74 20 69 74 73 20 4f 6b   and that its Ok
64b0: 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20 61 74   to execute.# at
64c0: 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69 6e 20  omic updates in 
64d0: 74 68 65 20 73 61 6d 65 20 73 69 74 75 61 74 69  the same situati
64e0: 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  on .#.do_test ca
64f0: 70 69 33 2d 31 32 2e 31 20 7b 0a 20 20 73 65 74  pi3-12.1 {.  set
6500: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6510: 72 65 70 61 72 65 20 24 44 42 20 22 53 45 4c 45  repare $DB "SELE
6520: 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31  CT a FROM t2" -1
6530: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6540: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
6550: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
6560: 73 74 20 63 61 70 69 33 2d 31 32 2e 32 20 7b 0a  st capi3-12.2 {.
6570: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
6580: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6590: 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b  VALUES(3, NULL);
65a0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
65b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 33  _test capi3-12.3
65c0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
65d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
65e0: 74 32 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20  t2 VALUES(4);.  
65f0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6600: 73 74 20 63 61 70 69 33 2d 31 32 2e 34 20 7b 0a  st capi3-12.4 {.
6610: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
6620: 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45   BEGIN;.    INSE
6630: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
6640: 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a  S(4, NULL);.  }.
6650: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6660: 20 63 61 70 69 33 2d 31 32 2e 35 20 7b 0a 20 20   capi3-12.5 {.  
6670: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6680: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
6690: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
66a0: 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74  12.5.1 {.  sqlit
66b0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
66c0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
66d0: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 36 20  test capi3-12.6 
66e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
66f0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
6700: 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63  _DONE}.do_test c
6710: 61 70 69 33 2d 31 32 2e 37 20 7b 0a 20 20 73 71  api3-12.7 {.  sq
6720: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
6730: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  STMT.} {SQLITE_O
6740: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
6750: 2d 31 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  -12.8 {.  execsq
6760: 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  l {.    COMMIT;.
6770: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
6780: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M t1;.  }.} {1 2
6790: 20 33 20 34 7d 0a 0a 23 20 54 65 73 74 20 63 61   3 4}..# Test ca
67a0: 73 65 73 20 63 61 70 69 33 2d 31 33 2e 2a 20 74  ses capi3-13.* t
67b0: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
67c0: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 29  clear_bindings()
67d0: 20 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 33 5f   and .# sqlite3_
67e0: 73 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a 69 66  sleep APIs..#.if
67f0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
6800: 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65   commands sqlite
6810: 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
6820: 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  ]]>0} {.  do_tes
6830: 74 20 63 61 70 69 33 2d 31 33 2e 31 20 7b 0a 20  t capi3-13.1 {. 
6840: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6850: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
6860: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  1;.    }.    set
6870: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6880: 72 65 70 61 72 65 20 24 44 42 20 22 49 4e 53 45  repare $DB "INSE
6890: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
68a0: 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41 49 4c  S(?, ?)" -1 TAIL
68b0: 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  ].    sqlite3_st
68c0: 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51  ep $STMT.  } {SQ
68d0: 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f  LITE_DONE}.  do_
68e0: 74 65 73 74 20 63 61 70 69 33 2d 31 33 2e 32 20  test capi3-13.2 
68f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
6900: 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71  set $STMT.    sq
6910: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
6920: 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f 20 35 0a  $STMT 1 hello 5.
6930: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
6940: 5f 74 65 78 74 20 24 53 54 4d 54 20 32 20 77 6f  _text $STMT 2 wo
6950: 72 6c 64 20 35 0a 20 20 20 20 73 71 6c 69 74 65  rld 5.    sqlite
6960: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d  3_step $STMT.  }
6970: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20   {SQLITE_DONE}. 
6980: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
6990: 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  3.3 {.    sqlite
69a0: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
69b0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f    sqlite3_clear_
69c0: 62 69 6e 64 69 6e 67 73 20 24 53 54 4d 54 0a 20  bindings $STMT. 
69d0: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
69e0: 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54  $STMT.  } {SQLIT
69f0: 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73  E_DONE}.  do_tes
6a00: 74 20 63 61 70 69 33 2d 31 33 2d 34 20 7b 0a 20  t capi3-13-4 {. 
6a10: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
6a20: 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 65 78  ize $STMT.    ex
6a30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
6a40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
6a50: 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d      }.  } {{} {}
6a60: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20   hello world {} 
6a70: 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67  {}}.}.if {[lleng
6a80: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  th [info command
6a90: 73 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 5d  s sqlite3_sleep]
6aa0: 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ]>0} {.  do_test
6ab0: 20 63 61 70 69 33 2d 31 33 2d 35 20 7b 0a 20 20   capi3-13-5 {.  
6ac0: 20 20 73 65 74 20 6d 73 20 5b 73 71 6c 69 74 65    set ms [sqlite
6ad0: 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20 20 20  3_sleep 80].    
6ae0: 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c  expr {$ms==80 ||
6af0: 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20   $ms==1000}.  } 
6b00: 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20  {1}.}..# Ticket 
6b10: 23 31 32 31 39 3a 20 20 4d 61 6b 65 20 73 75 72  #1219:  Make sur
6b20: 65 20 62 69 6e 64 69 6e 67 20 41 50 49 73 20 63  e binding APIs c
6b30: 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c  an handle a NULL
6b40: 20 70 6f 69 6e 74 65 72 2e 0a 23 20 0a 69 66 20   pointer..# .if 
6b50: 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65  {[clang_sanitize
6b60: 5f 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a  _address]==0} {.
6b70: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6b80: 31 34 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20 20  14.1-misuse {.  
6b90: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
6ba0: 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  {sqlite3_bind_te
6bb0: 78 74 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20  xt 0 1 hello 5} 
6bc0: 6d 73 67 5d 0a 20 20 20 20 20 20 6c 61 70 70 65  msg].      lappe
6bd0: 6e 64 20 72 63 20 24 6d 73 67 0a 20 20 7d 20 7b  nd rc $msg.  } {
6be0: 31 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d  1 SQLITE_MISUSE}
6bf0: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 36  .}..# Ticket #16
6c00: 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20 6e  50:  Honor the n
6c10: 42 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20  Bytes parameter 
6c20: 74 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  to sqlite3_prepa
6c30: 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  re..#.do_test ca
6c40: 70 69 33 2d 31 35 2e 31 20 7b 0a 20 20 73 65 74  pi3-15.1 {.  set
6c50: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46   sql {SELECT * F
6c60: 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20 6e 62  ROM t2}.  set nb
6c70: 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ytes [string len
6c80: 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70 70 65  gth $sql].  appe
6c90: 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45 20 61  nd sql { WHERE a
6ca0: 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  ==1}.  set STMT 
6cb0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6cc0: 20 24 44 42 20 24 73 71 6c 20 24 6e 62 79 74 65   $DB $sql $nbyte
6cd0: 73 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  s TAIL].  sqlite
6ce0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6cf0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
6d00: 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a  t $STMT 0.} {1}.
6d10: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
6d20: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
6d30: 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69  tep $STMT.  sqli
6d40: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
6d50: 53 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f  STMT 0.} {2}.do_
6d60: 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 33 20  test capi3-15.3 
6d70: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
6d80: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
6d90: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
6da0: 20 63 61 70 69 33 2d 31 35 2e 34 20 7b 0a 20 20   capi3-15.4 {.  
6db0: 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37  #        1234567
6dc0: 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74  89 1234567.  set
6dd0: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 33   sql {SELECT 123
6de0: 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53  4567890}.  set S
6df0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
6e00: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 38 20  pare $DB $sql 8 
6e10: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6e20: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74  step $STMT.  set
6e30: 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   v1 [sqlite3_col
6e40: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 5d  umn_int $STMT 0]
6e50: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6e60: 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20  ize $STMT.  set 
6e70: 76 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  v1.} {1}.do_test
6e80: 20 63 61 70 69 33 2d 31 35 2e 35 20 7b 0a 20 20   capi3-15.5 {.  
6e90: 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37  #        1234567
6ea0: 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74  89 1234567.  set
6eb0: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 33   sql {SELECT 123
6ec0: 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53  4567890}.  set S
6ed0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
6ee0: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 39 20  pare $DB $sql 9 
6ef0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6f00: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74  step $STMT.  set
6f10: 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   v1 [sqlite3_col
6f20: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 5d  umn_int $STMT 0]
6f30: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6f40: 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20  ize $STMT.  set 
6f50: 76 31 0a 7d 20 7b 31 32 7d 0a 64 6f 5f 74 65 73  v1.} {12}.do_tes
6f60: 74 20 63 61 70 69 33 2d 31 35 2e 36 20 7b 0a 20  t capi3-15.6 {. 
6f70: 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36   #        123456
6f80: 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65  789 1234567.  se
6f90: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  t sql {SELECT 12
6fa0: 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20  34567890}.  set 
6fb0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6fc0: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 31  epare $DB $sql 1
6fd0: 32 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  2 TAIL].  sqlite
6fe0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6ff0: 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63  et v1 [sqlite3_c
7000: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
7010: 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  0].  sqlite3_fin
7020: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65  alize $STMT.  se
7030: 74 20 76 31 0a 7d 20 7b 31 32 33 34 35 7d 0a 64  t v1.} {12345}.d
7040: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e  o_test capi3-15.
7050: 37 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31  7 {.  #        1
7060: 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37  23456789 1234567
7070: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
7080: 43 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d 0a  CT 12.34567890}.
7090: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
70a0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
70b0: 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a 20 20  $sql 12 TAIL].  
70c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
70d0: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
70e0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
70f0: 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71  le $STMT 0].  sq
7100: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
7110: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20  STMT.  set v1.} 
7120: 7b 31 32 2e 33 34 7d 0a 64 6f 5f 74 65 73 74 20  {12.34}.do_test 
7130: 63 61 70 69 33 2d 31 35 2e 38 20 7b 0a 20 20 23  capi3-15.8 {.  #
7140: 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38          12345678
7150: 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20  9 1234567.  set 
7160: 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 2e 33  sql {SELECT 12.3
7170: 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53  4567890}.  set S
7180: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7190: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 31 34  pare $DB $sql 14
71a0: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
71b0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65  _step $STMT.  se
71c0: 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t v1 [sqlite3_co
71d0: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d  lumn_double $STM
71e0: 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  T 0].  sqlite3_f
71f0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
7200: 73 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33 34 35  set v1.} {12.345
7210: 36 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  6}..# Make sure 
7220: 63 6f 64 65 20 69 73 20 61 6c 77 61 79 73 20 67  code is always g
7230: 65 6e 65 72 61 74 65 64 20 65 76 65 6e 20 69 66  enerated even if
7240: 20 61 6e 20 49 46 20 45 58 49 53 54 53 20 6f 72   an IF EXISTS or
7250: 20 0a 23 20 49 46 20 4e 4f 54 20 45 58 49 53 54   .# IF NOT EXIST
7260: 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  S clause is pres
7270: 65 6e 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ent that the tab
7280: 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72 0a 23  le does not or.#
7290: 20 64 6f 65 73 20 65 78 69 73 74 73 2e 20 20 54   does exists.  T
72a0: 68 61 74 20 77 61 79 20 77 65 20 77 69 6c 6c 20  hat way we will 
72b0: 61 6c 77 61 79 73 20 68 61 76 65 20 61 20 70 72  always have a pr
72c0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
72d0: 0a 23 20 74 6f 20 65 78 70 69 72 65 20 77 68 65  .# to expire whe
72e0: 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  n the schema cha
72f0: 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  nges..#.do_test 
7300: 63 61 70 69 33 2d 31 36 2e 31 20 7b 0a 20 20 73  capi3-16.1 {.  s
7310: 65 74 20 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  et sql {DROP TAB
7320: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33 7d  LE IF EXISTS t3}
7330: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
7340: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
7350: 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20   $sql -1 TAIL]. 
7360: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7370: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
7380: 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT!=""}.} {1}
7390: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
73a0: 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  6.2 {.  set sql 
73b0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  {CREATE TABLE IF
73c0: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28 78   NOT EXISTS t1(x
73d0: 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  ,y)}.  set STMT 
73e0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
73f0: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
7400: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  L].  sqlite3_fin
7410: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78  alize $STMT.  ex
7420: 70 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d  pr {$STMT!=""}.}
7430: 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73 74 69 6c   {1}..# But stil
7440: 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e 65  l we do not gene
7450: 72 61 74 65 20 63 6f 64 65 20 69 66 20 74 68 65  rate code if the
7460: 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a 64  re is no SQL.#.d
7470: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36 2e  o_test capi3-16.
7480: 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  3 {.  set STMT [
7490: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
74a0: 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a  $DB {} -1 TAIL].
74b0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
74c0: 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20  ze $STMT.  expr 
74d0: 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31  {$STMT==""}.} {1
74e0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
74f0: 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.4 {.  set STM
7500: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7510: 72 65 20 24 44 42 20 7b 3b 7d 20 2d 31 20 54 41  re $DB {;} -1 TA
7520: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  IL].  sqlite3_fi
7530: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65  nalize $STMT.  e
7540: 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a  xpr {$STMT==""}.
7550: 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20  } {1}..# Ticket 
7560: 23 32 34 32 36 3a 20 20 4d 69 73 75 73 65 20 6f  #2426:  Misuse o
7570: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
7580: 5f 2a 20 62 79 20 63 61 6c 6c 69 6e 67 20 69 74  _* by calling it
7590: 20 61 66 74 65 72 0a 23 20 61 20 73 71 6c 69 74   after.# a sqlit
75a0: 65 33 5f 72 65 73 65 74 20 73 68 6f 75 6c 64 20  e3_reset should 
75b0: 62 65 20 68 61 72 6d 6c 65 73 73 2e 0a 23 0a 64  be harmless..#.d
75c0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37 2e  o_test capi3-17.
75d0: 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  1 {.  set STMT [
75e0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
75f0: 24 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  $DB {SELECT * FR
7600: 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a  OM t2} -1 TAIL].
7610: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7620: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
7630: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
7640: 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  0.} {1}.do_test 
7650: 63 61 70 69 33 2d 31 37 2e 32 20 7b 0a 20 20 73  capi3-17.2 {.  s
7660: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
7670: 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  MT.  sqlite3_col
7680: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a  umn_int $STMT 0.
7690: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } {0}.do_test ca
76a0: 70 69 33 2d 31 37 2e 33 20 7b 0a 20 20 73 71 6c  pi3-17.3 {.  sql
76b0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
76c0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
76d0: 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 74  }..# Verify that
76e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
76f0: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 53 51  fails with an SQ
7700: 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
7710: 72 0a 23 20 77 68 65 6e 20 74 68 65 20 73 74 61  r.# when the sta
7720: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
7730: 65 64 20 77 69 74 68 20 73 71 6c 69 74 65 33 5f  ed with sqlite3_
7740: 70 72 65 70 61 72 65 28 29 20 28 6e 6f 74 0a 23  prepare() (not.#
7750: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
7760: 5f 76 32 28 29 29 20 61 6e 64 20 74 68 65 20 73  _v2()) and the s
7770: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
7780: 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  d..#.do_test cap
7790: 69 33 2d 31 38 2e 31 20 7b 0a 20 20 73 65 74 20  i3-18.1 {.  set 
77a0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
77b0: 65 70 61 72 65 20 64 62 20 7b 53 45 4c 45 43 54  epare db {SELECT
77c0: 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20 54   * FROM t2} -1 T
77d0: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 20 64  AIL].  sqlite3 d
77e0: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64 62 32  b2 test.db.  db2
77f0: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41   eval {CREATE TA
7800: 42 4c 45 20 74 33 28 78 29 7d 0a 20 20 64 62 32  BLE t3(x)}.  db2
7810: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
7820: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
7830: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
7840: 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 32 20  test capi3-18.2 
7850: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  {.  sqlite3_rese
7860: 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  t $STMT.  sqlite
7870: 33 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20 7b  3_errcode db.} {
7880: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 64  SQLITE_SCHEMA}.d
7890: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e  o_test capi3-18.
78a0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  3 {.  sqlite3_er
78b0: 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61 62  rmsg db.} {datab
78c0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
78d0: 68 61 6e 67 65 64 7d 0a 23 20 54 68 65 20 65 72  hanged}.# The er
78e0: 72 6f 72 20 70 65 72 73 69 73 74 20 6f 6e 20 72  ror persist on r
78f0: 65 74 72 79 20 77 68 65 6e 20 73 71 6c 69 74 65  etry when sqlite
7900: 33 5f 70 72 65 70 61 72 65 28 29 20 68 61 73 20  3_prepare() has 
7910: 62 65 65 6e 20 75 73 65 64 2e 0a 64 6f 5f 74 65  been used..do_te
7920: 73 74 20 63 61 70 69 33 2d 31 38 2e 34 20 7b 0a  st capi3-18.4 {.
7930: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7940: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45  STMT.} {SQLITE_E
7950: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61  RROR}.do_test ca
7960: 70 69 33 2d 31 38 2e 35 20 7b 0a 20 20 73 71 6c  pi3-18.5 {.  sql
7970: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
7980: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  .  sqlite3_errco
7990: 64 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45 5f  de db.} {SQLITE_
79a0: 53 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73 74 20  SCHEMA}.do_test 
79b0: 63 61 70 69 33 2d 31 38 2e 36 20 7b 0a 20 20 73  capi3-18.6 {.  s
79c0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62  qlite3_errmsg db
79d0: 0a 7d 20 7b 64 61 74 61 62 61 73 65 20 73 63 68  .} {database sch
79e0: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d  ema has changed}
79f0: 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
7a00: 65 20 24 53 54 4d 54 0a 0a 23 20 54 69 63 6b 65  e $STMT..# Ticke
7a10: 74 20 23 33 31 33 34 2e 20 20 50 72 65 70 61 72  t #3134.  Prepar
7a20: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77 69  e a statement wi
7a30: 74 68 20 61 6e 20 6e 42 79 74 65 73 20 70 61 72  th an nBytes par
7a40: 61 6d 65 74 65 72 20 6f 66 20 30 2e 0a 23 20 4d  ameter of 0..# M
7a50: 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 77 6f  ake sure this wo
7a60: 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 61 6e  rks correctly an
7a70: 64 20 64 6f 65 73 20 6e 6f 74 20 72 65 66 65 72  d does not refer
7a80: 65 6e 63 65 20 6d 65 6d 6f 72 79 20 6f 75 74 20  ence memory out 
7a90: 6f 66 0a 23 20 72 61 6e 67 65 2e 0a 23 0a 64 6f  of.# range..#.do
7aa0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 39 2e 31  _test capi3-19.1
7ab0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65   {.  sqlite3_pre
7ac0: 70 61 72 65 5f 74 6b 74 33 31 33 34 20 64 62 0a  pare_tkt3134 db.
7ad0: 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74 68 61  } {}..# Test tha
7ae0: 74 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  t calling sqlite
7af0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 29 20  3_column_blob() 
7b00: 6f 6e 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  on a TEXT value 
7b10: 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 0a  does not change.
7b20: 23 20 74 68 65 20 72 65 74 75 72 6e 20 74 79 70  # the return typ
7b30: 65 20 6f 66 20 73 75 62 73 65 71 75 65 6e 74 20  e of subsequent 
7b40: 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
7b50: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 29 2e 0a  _column_type()..
7b60: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
7b70: 74 20 32 30 2e 31 20 7b 0a 20 20 43 52 45 41 54  t 20.1 {.  CREAT
7b80: 45 20 54 41 42 4c 45 20 74 34 28 78 29 3b 0a 20  E TABLE t4(x);. 
7b90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
7ba0: 56 41 4c 55 45 53 28 27 61 62 63 64 65 66 67 68  VALUES('abcdefgh
7bb0: 69 6a 27 29 3b 0a 7d 0a 64 6f 5f 74 65 73 74 20  ij');.}.do_test 
7bc0: 32 30 2e 32 20 7b 0a 20 20 73 65 74 20 73 74 6d  20.2 {.  set stm
7bd0: 74 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  t [sqlite3_prepa
7be0: 72 65 20 64 62 20 22 53 45 4c 45 43 54 20 2a 20  re db "SELECT * 
7bf0: 46 52 4f 4d 20 74 34 22 20 2d 31 20 64 75 6d 6d  FROM t4" -1 dumm
7c00: 79 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  y].  sqlite3_ste
7c10: 70 20 24 73 74 6d 74 0a 7d 20 7b 53 51 4c 49 54  p $stmt.} {SQLIT
7c20: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 32  E_ROW}.do_test 2
7c30: 30 2e 33 20 7b 20 73 71 6c 69 74 65 33 5f 63 6f  0.3 { sqlite3_co
7c40: 6c 75 6d 6e 5f 74 79 70 65 20 24 73 74 6d 74 20  lumn_type $stmt 
7c50: 30 20 7d 20 7b 54 45 58 54 7d 0a 64 6f 5f 74 65  0 } {TEXT}.do_te
7c60: 73 74 20 32 30 2e 34 20 7b 20 73 71 6c 69 74 65  st 20.4 { sqlite
7c70: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24 73  3_column_blob $s
7c80: 74 6d 74 20 30 20 7d 20 7b 61 62 63 64 65 66 67  tmt 0 } {abcdefg
7c90: 68 69 6a 7d 0a 64 6f 5f 74 65 73 74 20 32 30 2e  hij}.do_test 20.
7ca0: 35 20 7b 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  5 { sqlite3_colu
7cb0: 6d 6e 5f 74 79 70 65 20 24 73 74 6d 74 20 30 20  mn_type $stmt 0 
7cc0: 7d 20 7b 54 45 58 54 7d 0a 64 6f 5f 74 65 73 74  } {TEXT}.do_test
7cd0: 20 32 30 2e 36 20 7b 20 73 71 6c 69 74 65 33 5f   20.6 { sqlite3_
7ce0: 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74 20 7d  finalize $stmt }
7cf0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 23 20 54   SQLITE_OK...# T
7d00: 65 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65  ests of the inte
7d10: 72 66 61 63 65 20 77 68 65 6e 20 6e 6f 20 56 46  rface when no VF
7d20: 53 20 69 73 20 72 65 67 69 73 74 65 72 65 64 2e  S is registered.
7d30: 0a 23 0a 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .#.if {![info ex
7d40: 69 73 74 73 20 74 65 73 74 65 72 5f 64 6f 5f 62  ists tester_do_b
7d50: 69 6e 61 72 79 6c 6f 67 5d 7d 20 7b 0a 20 20 64  inarylog]} {.  d
7d60: 62 20 63 6c 6f 73 65 0a 20 20 76 66 73 5f 75 6e  b close.  vfs_un
7d70: 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 20 20 64  register_all.  d
7d80: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 30 2e  o_test capi3-20.
7d90: 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  1 {.    sqlite3_
7da0: 73 6c 65 65 70 20 31 30 30 0a 20 20 7d 20 7b 30  sleep 100.  } {0
7db0: 7d 0a 20 20 76 66 73 5f 72 65 72 65 67 69 73 74  }.  vfs_reregist
7dc0: 65 72 5f 61 6c 6c 0a 7d 0a 0a 66 69 6e 69 73 68  er_all.}..finish
7dd0: 5f 74 65 73 74 0a                                _test.