/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 3910a73c38ac76d69778dd9eb481ab7cd6ed59117fc047b4f6056a5c72529de1:


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 73 71 6c 69 74 65 33 5f 64 62  b.    sqlite3_db
4bb0: 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e  _config db DEFEN
4bc0: 53 49 56 45 20 30 0a 20 20 20 20 65 78 65 63 73  SIVE 0.    execs
4bd0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
4be0: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
4bf0: 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45  a=ON;.      INSE
4c00: 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d  RT INTO sqlite_m
4c10: 61 73 74 65 72 20 56 41 4c 55 45 53 28 4e 55 4c  aster VALUES(NUL
4c20: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  L,NULL,NULL,NULL
4c30: 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20  ,NULL);.    }.  
4c40: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b    db close.  } {
4c50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
4c60: 33 2d 38 2e 33 20 7b 0a 20 20 20 20 63 61 74 63  3-8.3 {.    catc
4c70: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
4c80: 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74  est.db }.    cat
4c90: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  chsql {.      SE
4ca0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
4cb0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
4cc0: 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d  .  } {1 {malform
4cd0: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
4ce0: 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f 74 65  ma (?)}}.  do_te
4cf0: 73 74 20 63 61 70 69 33 2d 38 2e 34 20 7b 0a 20  st capi3-8.4 {. 
4d00: 20 20 20 23 20 42 75 69 6c 64 20 61 20 35 2d 66     # Build a 5-f
4d10: 69 65 6c 64 20 72 6f 77 20 72 65 63 6f 72 64 2e  ield row record.
4d20: 20 54 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   The first field
4d30: 20 69 73 20 61 20 73 74 72 69 6e 67 20 27 74 61   is a string 'ta
4d40: 62 6c 65 27 2c 20 61 6e 64 0a 20 20 20 20 23 20  ble', and.    # 
4d50: 73 75 62 73 65 71 75 65 6e 74 20 66 69 65 6c 64  subsequent field
4d60: 73 20 61 72 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a  s are all NULL..
4d70: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
4d80: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
4d90: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
4da0: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
4db0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
4dc0: 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
4dd0: 67 20 64 62 20 44 45 46 45 4e 53 49 56 45 20 30  g db DEFENSIVE 0
4de0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4df0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
4e00: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20 50  E t1(a);.      P
4e10: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
4e20: 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20  chema=ON;.      
4e30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69  INSERT INTO sqli
4e40: 74 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53  te_master VALUES
4e50: 28 27 74 61 62 6c 65 27 2c 4e 55 4c 4c 2c 4e 55  ('table',NULL,NU
4e60: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20  LL,NULL,NULL);. 
4e70: 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73     }.    db clos
4e80: 65 0a 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f 74  e.  } {};.  do_t
4e90: 65 73 74 20 63 61 70 69 33 2d 38 2e 35 20 7b 0a  est capi3-8.5 {.
4ea0: 20 20 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69      catch { sqli
4eb0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d  te3 db test.db }
4ec0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
4ed0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
4ee0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4ef0: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  r;.    }.  } {1 
4f00: 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62  {malformed datab
4f10: 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d  ase schema (?)}}
4f20: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 6f  .  db close.}.fo
4f30: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
4f40: 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  b.forcedelete te
4f50: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a  st.db-journal...
4f60: 23 20 54 65 73 74 20 74 68 65 20 65 6e 67 6c 69  # Test the engli
4f70: 73 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69  sh language stri
4f80: 6e 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66  ng equivalents f
4f90: 6f 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20  or sqlite error 
4fa0: 63 6f 64 65 73 0a 73 65 74 20 63 6f 64 65 32 65  codes.set code2e
4fb0: 6e 67 6c 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53  nglish [list \.S
4fc0: 51 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20 20 20  QLITE_OK        
4fd0: 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20   {not an error} 
4fe0: 5c 0a 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20  \.SQLITE_ERROR  
4ff0: 20 20 20 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65      {SQL logic e
5000: 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 50  rror} \.SQLITE_P
5010: 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63 65 73  ERM       {acces
5020: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
5030: 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 42  ied} \.SQLITE_AB
5040: 4f 52 54 20 20 20 20 20 20 7b 71 75 65 72 79 20  ORT      {query 
5050: 61 62 6f 72 74 65 64 7d 20 5c 0a 53 51 4c 49 54  aborted} \.SQLIT
5060: 45 5f 42 55 53 59 20 20 20 20 20 20 20 7b 64 61  E_BUSY       {da
5070: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
5080: 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  } \.SQLITE_LOCKE
5090: 44 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20  D     {database 
50a0: 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d  table is locked}
50b0: 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20   \.SQLITE_NOMEM 
50c0: 20 20 20 20 20 7b 6f 75 74 20 6f 66 20 6d 65 6d       {out of mem
50d0: 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 45  ory} \.SQLITE_RE
50e0: 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74 65 6d 70  ADONLY   {attemp
50f0: 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65 61  t to write a rea
5100: 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 7d 20  donly database} 
5110: 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  \.SQLITE_INTERRU
5120: 50 54 20 20 7b 69 6e 74 65 72 72 75 70 74 65 64  PT  {interrupted
5130: 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f 45 52 52  } \.SQLITE_IOERR
5140: 20 20 20 20 20 20 7b 64 69 73 6b 20 49 2f 4f 20        {disk I/O 
5150: 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f  error} \.SQLITE_
5160: 43 4f 52 52 55 50 54 20 20 20 20 7b 64 61 74 61  CORRUPT    {data
5170: 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20  base disk image 
5180: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a  is malformed} \.
5190: 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20 20  SQLITE_FULL     
51a0: 20 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64    {database or d
51b0: 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20 5c 0a 53  isk is full} \.S
51c0: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20  QLITE_CANTOPEN  
51d0: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
51e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 20   database file} 
51f0: 5c 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  \.SQLITE_SCHEMA 
5200: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 73 63      {database sc
5210: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
5220: 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54  } \.SQLITE_CONST
5230: 52 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e  RAINT {constrain
5240: 74 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49  t failed} \.SQLI
5250: 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64  TE_MISMATCH   {d
5260: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
5270: 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53  } \.SQLITE_MISUS
5280: 45 20 20 20 20 20 7b 62 61 64 20 70 61 72 61 6d  E     {bad param
5290: 65 74 65 72 20 6f 72 20 6f 74 68 65 72 20 41 50  eter or other AP
52a0: 49 20 6d 69 73 75 73 65 7d 20 5c 0a 53 51 4c 49  I misuse} \.SQLI
52b0: 54 45 5f 41 55 54 48 20 20 20 20 20 20 20 7b 61  TE_AUTH       {a
52c0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e  uthorization den
52d0: 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 41  ied} \.SQLITE_RA
52e0: 4e 47 45 20 20 20 20 20 20 7b 63 6f 6c 75 6d 6e  NGE      {column
52f0: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
5300: 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f  nge} \.SQLITE_NO
5310: 54 41 44 42 20 20 20 20 20 7b 66 69 6c 65 20 69  TADB     {file i
5320: 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
5330: 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72  } \.unknownerror
5340: 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65        {unknown e
5350: 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74  rror} \.]..set t
5360: 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a 66 6f 72  est_number 1.for
5370: 65 61 63 68 20 7b 63 6f 64 65 20 65 6e 67 6c 69  each {code engli
5380: 73 68 7d 20 24 63 6f 64 65 32 65 6e 67 6c 69 73  sh} $code2englis
5390: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  h {.  do_test ca
53a0: 70 69 33 2d 39 2e 24 74 65 73 74 5f 6e 75 6d 62  pi3-9.$test_numb
53b0: 65 72 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74  er "sqlite3_test
53c0: 5f 65 72 72 73 74 72 20 24 63 6f 64 65 22 20 24  _errstr $code" $
53d0: 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63 72 20 74  english.  incr t
53e0: 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20  est_number.}..# 
53f0: 54 65 73 74 20 74 68 65 20 65 72 72 6f 72 20 6d  Test the error m
5400: 65 73 73 61 67 65 20 77 68 65 6e 20 61 20 22 72  essage when a "r
5410: 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d 65 6d 6f  eal" out of memo
5420: 72 79 20 6f 63 63 75 72 73 2e 0a 69 66 20 7b 20  ry occurs..if { 
5430: 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 21 3d  [permutation] !=
5440: 20 22 6e 6f 66 61 75 6c 74 73 69 6d 22 20 7d 20   "nofaultsim" } 
5450: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
5460: 33 2d 31 30 2d 31 20 7b 0a 20 20 20 20 73 71 6c  3-10-1 {.    sql
5470: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
5480: 20 20 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69      set DB [sqli
5490: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
54a0: 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 73  ointer db].    s
54b0: 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f  qlite3_memdebug_
54c0: 66 61 69 6c 20 31 0a 20 20 20 20 63 61 74 63 68  fail 1.    catch
54d0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65  sql {.      sele
54e0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
54f0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
5500: 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65   } {1 {out of me
5510: 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  mory}}.  do_test
5520: 20 63 61 70 69 33 2d 31 30 2d 32 20 7b 0a 20 20   capi3-10-2 {.  
5530: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
5540: 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20   $::DB.  } {out 
5550: 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63  of memory}.  ifc
5560: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
5570: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70  .    do_test cap
5580: 69 33 2d 31 30 2d 33 20 7b 0a 20 20 20 20 20 20  i3-10-3 {.      
5590: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
55a0: 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20  rmsg16 $::DB].  
55b0: 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f    } {out of memo
55c0: 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f  ry}.  }.  db clo
55d0: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  se.  sqlite3_mem
55e0: 64 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 20 20  debug_fail -1.  
55f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30  do_test capi3-10
5600: 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  -4 {.    sqlite3
5610: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
5620: 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f  set DB [sqlite3_
5630: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
5640: 65 72 20 64 62 5d 0a 20 20 20 20 73 71 6c 69 74  er db].    sqlit
5650: 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c  e3_memdebug_fail
5660: 20 31 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   1.    catchsql 
5670: 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a  {.      select *
5680: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
5690: 74 65 72 20 77 68 65 72 65 20 72 6f 77 69 64 3e  ter where rowid>
56a0: 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  5;.    }.  } {1 
56b0: 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d  {out of memory}}
56c0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
56d0: 2d 31 30 2d 35 20 7b 0a 20 20 20 20 73 71 6c 69  -10-5 {.    sqli
56e0: 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42  te3_errmsg $::DB
56f0: 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  .  } {out of mem
5700: 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  ory}.  ifcapable
5710: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64   {utf16} {.    d
5720: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d  o_test capi3-10-
5730: 36 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b  6 {.      utf8 [
5740: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
5750: 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b 6f   $::DB].    } {o
5760: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20  ut of memory}.  
5770: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  }.  db close.  s
5780: 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f  qlite3_memdebug_
5790: 66 61 69 6c 20 2d 31 0a 7d 0a 0a 23 20 54 68 65  fail -1.}..# The
57a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
57b0: 20 2d 20 63 61 70 69 33 2d 31 31 2e 2a 20 2d 20   - capi3-11.* - 
57c0: 74 65 73 74 20 74 68 61 74 20 61 20 43 4f 4d 4d  test that a COMM
57d0: 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23  IT or ROLLBACK.#
57e0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 73 75 65   statement issue
57f0: 64 20 77 68 69 6c 65 20 74 68 65 72 65 20 61 72  d while there ar
5800: 65 20 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64  e still outstand
5810: 69 6e 67 20 56 4d 73 20 74 68 61 74 20 61 72 65  ing VMs that are
5820: 20 70 61 72 74 20 6f 66 0a 23 20 74 68 65 20 74   part of.# the t
5830: 72 61 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c 73  ransaction fails
5840: 2e 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  ..sqlite3 db tes
5850: 74 2e 64 62 0a 73 65 74 20 44 42 20 5b 73 71 6c  t.db.set DB [sql
5860: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5870: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69  pointer db].sqli
5880: 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74  te_register_test
5890: 5f 66 75 6e 63 74 69 6f 6e 20 24 44 42 20 66 75  _function $DB fu
58a0: 6e 63 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  nc.do_test capi3
58b0: 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -11.1 {.  execsq
58c0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
58d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
58e0: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e  t1(a, b);.    IN
58f0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5900: 55 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20  UES(1, 'int');. 
5910: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5920: 31 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74  1 VALUES(2, 'not
5930: 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b  atype');.  }.} {
5940: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5950: 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.1.1 {.  sqlit
5960: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5970: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
5980: 74 20 63 61 70 69 33 2d 31 31 2e 32 20 7b 0a 20  t capi3-11.2 {. 
5990: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
59a0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 22  e3_prepare $DB "
59b0: 53 45 4c 45 43 54 20 66 75 6e 63 28 62 2c 20 61  SELECT func(b, a
59c0: 29 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54 41  ) FROM t1" -1 TA
59d0: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
59e0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
59f0: 54 45 5f 52 4f 57 7d 0a 0a 23 20 41 73 20 6f 66  TE_ROW}..# As of
5a00: 20 33 2e 36 2e 35 20 61 20 43 4f 4d 4d 49 54 20   3.6.5 a COMMIT 
5a10: 69 73 20 4f 4b 20 64 75 72 69 6e 67 20 77 68 69  is OK during whi
5a20: 6c 65 20 61 20 71 75 65 72 79 20 69 73 20 73 74  le a query is st
5a30: 69 6c 6c 20 72 75 6e 6e 69 6e 67 20 2d 0a 23 20  ill running -.# 
5a40: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
5a50: 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 71 75 65   a read-only que
5a60: 72 79 20 61 6e 64 20 6e 6f 74 20 61 6e 20 69 6e  ry and not an in
5a70: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 77  cremental BLOB w
5a80: 72 69 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  rite..#.do_test 
5a90: 63 61 70 69 33 2d 31 31 2e 33 2e 31 20 7b 0a 20  capi3-11.3.1 {. 
5aa0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5ab0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
5ac0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5ad0: 69 33 2d 31 31 2e 33 2e 32 20 7b 0a 20 20 73 71  i3-11.3.2 {.  sq
5ae0: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
5af0: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
5b00: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
5b10: 20 63 61 70 69 33 2d 31 31 2e 33 2e 33 20 7b 0a   capi3-11.3.3 {.
5b20: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5b30: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5b40: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5b50: 31 2e 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61  1.3.4 {.  db eva
5b60: 6c 20 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73  l {PRAGMA lock_s
5b70: 74 61 74 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20 73  tatus}.} {main s
5b80: 68 61 72 65 64 20 74 65 6d 70 20 63 6c 6f 73 65  hared temp close
5b90: 64 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  d}..do_test capi
5ba0: 33 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74  3-11.4 {.  sqlit
5bb0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5bc0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
5bd0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5be0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  5 {.  sqlite3_fi
5bf0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5c00: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
5c10: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 36  _test capi3-11.6
5c20: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5c30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5c40: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t1;.  }.} {0 {
5c50: 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70 65  1 int 2 notatype
5c60: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5c70: 2d 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  -11.7 {.  sqlite
5c80: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5c90: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
5ca0: 20 63 61 70 69 33 2d 31 31 2e 38 20 7b 0a 20 20   capi3-11.8 {.  
5cb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
5cc0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 29  EATE TABLE t2(a)
5cd0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5ce0: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t2 VALUES(1);.
5cf0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5d00: 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20  t2 VALUES(2);.  
5d10: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53    BEGIN;.    INS
5d20: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
5d30: 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ES(3);.  }.} {}.
5d40: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5d50: 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .8.1 {.  sqlite3
5d60: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5d70: 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20  $DB.} 0.do_test 
5d80: 63 61 70 69 33 2d 31 31 2e 39 20 7b 0a 20 20 73  capi3-11.9 {.  s
5d90: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5da0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45  _prepare $DB "SE
5db0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20  LECT a FROM t2" 
5dc0: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
5dd0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5de0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5df0: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39 2e  test capi3-11.9.
5e00: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5e10: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5e20: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5e30: 69 33 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61  i3-11.9.2 {.  ca
5e40: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c  tchsql {.    ROL
5e50: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20  LBACK;.  }.} {0 
5e60: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5e70: 33 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c  3-11.9.3 {.  sql
5e80: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5e90: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
5ea0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 30 20  est capi3-11.10 
5eb0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
5ec0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5ed0: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
5ee0: 70 69 33 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71  pi3-11.11 {.  sq
5ef0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5f00: 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d  .} {SQLITE_DONE}
5f10: 0a 69 66 63 61 70 61 62 6c 65 20 21 61 75 74 6f  .ifcapable !auto
5f20: 72 65 73 65 74 20 7b 0a 20 20 64 6f 5f 74 65 73  reset {.  do_tes
5f30: 74 20 63 61 70 69 33 2d 31 31 2e 31 32 61 72 6d  t capi3-11.12arm
5f40: 6f 72 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  or {.    sqlite3
5f50: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20  _step $STMT.    
5f60: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5f70: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d  MT.  } {SQLITE_M
5f80: 49 53 55 53 45 7d 0a 7d 20 65 6c 73 65 20 7b 0a  ISUSE}.} else {.
5f90: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
5fa0: 31 31 2e 31 32 20 7b 0a 20 20 20 20 73 71 6c 69  11.12 {.    sqli
5fb0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
5fc0: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
5fd0: 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54  $STMT.  } {SQLIT
5fe0: 45 5f 52 4f 57 7d 0a 7d 0a 64 6f 5f 74 65 73 74  E_ROW}.}.do_test
5ff0: 20 63 61 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20   capi3-11.13 {. 
6000: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6010: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6020: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
6030: 70 69 33 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78  pi3-11.14 {.  ex
6040: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
6050: 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT a FROM t2;.  
6060: 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73  }.} {1 2}.do_tes
6070: 74 20 63 61 70 69 33 2d 31 31 2e 31 34 2e 31 20  t capi3-11.14.1 
6080: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
6090: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
60a0: 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   1.do_test capi3
60b0: 2d 31 31 2e 31 35 20 7b 0a 20 20 63 61 74 63 68  -11.15 {.  catch
60c0: 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41  sql {.    ROLLBA
60d0: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61  CK;.  }.} {1 {ca
60e0: 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
60f0: 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
6100: 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65  s active}}.do_te
6110: 73 74 20 63 61 70 69 33 2d 31 31 2e 31 35 2e 31  st capi3-11.15.1
6120: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
6130: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
6140: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 1.do_test capi
6150: 33 2d 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63  3-11.16 {.  exec
6160: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
6170: 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   a FROM t2;.  }.
6180: 7d 20 7b 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74  } {1 2}..# Sanit
6190: 79 20 63 68 65 63 6b 20 6f 6e 20 74 68 65 20 64  y check on the d
61a0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75  efinition of 'ou
61b0: 74 73 74 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54  tstanding VM'. T
61c0: 68 69 73 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d  his means any VM
61d0: 0a 23 20 74 68 61 74 20 68 61 73 20 68 61 64 20  .# that has had 
61e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
61f0: 61 6c 6c 65 64 20 6d 6f 72 65 20 72 65 63 65 6e  alled more recen
6200: 74 6c 79 20 74 68 61 6e 20 73 71 6c 69 74 65 33  tly than sqlite3
6210: 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23  _finalize() or.#
6220: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29   sqlite3_reset()
6230: 2e 20 53 6f 20 61 20 56 4d 20 74 68 61 74 20 68  . So a VM that h
6240: 61 73 20 6a 75 73 74 20 62 65 65 6e 20 70 72 65  as just been pre
6250: 70 61 72 65 64 20 6f 72 20 72 65 73 65 74 20 64  pared or reset d
6260: 6f 65 73 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20  oes not.# count 
6270: 61 73 20 61 6e 20 61 63 74 69 76 65 20 56 4d 2e  as an active VM.
6280: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6290: 31 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.17 {.  execsql
62a0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
62b0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
62c0: 61 70 69 33 2d 31 31 2e 31 38 20 7b 0a 20 20 73  api3-11.18 {.  s
62d0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
62e0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45  _prepare $DB "SE
62f0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
6300: 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68  -1 TAIL].  catch
6310: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
6320: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
6330: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
6340: 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  19 {.  sqlite3_s
6350: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
6360: 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74  ITE_ROW}.do_test
6370: 20 63 61 70 69 33 2d 31 31 2e 32 30 20 7b 0a 20   capi3-11.20 {. 
6380: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
6390: 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49  BEGIN;.    COMMI
63a0: 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  T;.  }.} {0 {}}.
63b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
63c0: 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .20 {.  sqlite3_
63d0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 63 61  reset $STMT.  ca
63e0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
63f0: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63  MIT;.  }.} {1 {c
6400: 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
6410: 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
6420: 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73   active}}.do_tes
6430: 74 20 63 61 70 69 33 2d 31 31 2e 32 31 20 7b 0a  t capi3-11.21 {.
6440: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6450: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
6460: 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f  TE_OK}..# The fo
6470: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20  llowing tests - 
6480: 63 61 70 69 33 2d 31 32 2e 2a 20 2d 20 63 68 65  capi3-12.* - che
6490: 63 6b 20 74 68 61 74 20 69 74 73 20 4f 6b 20 74  ck that its Ok t
64a0: 6f 20 73 74 61 72 74 20 61 0a 23 20 74 72 61 6e  o start a.# tran
64b0: 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74  saction while ot
64c0: 68 65 72 20 56 4d 73 20 61 72 65 20 61 63 74 69  her VMs are acti
64d0: 76 65 2c 20 61 6e 64 20 74 68 61 74 20 69 74 73  ve, and that its
64e0: 20 4f 6b 20 74 6f 20 65 78 65 63 75 74 65 0a 23   Ok to execute.#
64f0: 20 61 74 6f 6d 69 63 20 75 70 64 61 74 65 73 20   atomic updates 
6500: 69 6e 20 74 68 65 20 73 61 6d 65 20 73 69 74 75  in the same situ
6510: 61 74 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74  ation .#.do_test
6520: 20 63 61 70 69 33 2d 31 32 2e 31 20 7b 0a 20 20   capi3-12.1 {.  
6530: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
6540: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53  3_prepare $DB "S
6550: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22  ELECT a FROM t2"
6560: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
6570: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6580: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
6590: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 32  _test capi3-12.2
65a0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
65b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
65c0: 74 31 20 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c  t1 VALUES(3, NUL
65d0: 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  L);.  }.} {0 {}}
65e0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
65f0: 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.3 {.  catchsql
6600: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
6610: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34 29 3b  TO t2 VALUES(4);
6620: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
6630: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 34  _test capi3-12.4
6640: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
6650: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49      BEGIN;.    I
6660: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6670: 4c 55 45 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20  LUES(4, NULL);. 
6680: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6690: 65 73 74 20 63 61 70 69 33 2d 31 32 2e 35 20 7b  est capi3-12.5 {
66a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
66b0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
66c0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
66d0: 69 33 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71  i3-12.5.1 {.  sq
66e0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
66f0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
6700: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32  do_test capi3-12
6710: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .6 {.  sqlite3_s
6720: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
6730: 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73  ITE_DONE}.do_tes
6740: 74 20 63 61 70 69 33 2d 31 32 2e 37 20 7b 0a 20  t capi3-12.7 {. 
6750: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6760: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6770: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
6780: 70 69 33 2d 31 32 2e 38 20 7b 0a 20 20 65 78 65  pi3-12.8 {.  exe
6790: 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49  csql {.    COMMI
67a0: 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  T;.    SELECT a 
67b0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
67c0: 31 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73 74  1 2 3 4}..# Test
67d0: 20 63 61 73 65 73 20 63 61 70 69 33 2d 31 33 2e   cases capi3-13.
67e0: 2a 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  * test the sqlit
67f0: 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
6800: 73 28 29 20 61 6e 64 20 0a 23 20 73 71 6c 69 74  s() and .# sqlit
6810: 65 33 5f 73 6c 65 65 70 20 41 50 49 73 2e 0a 23  e3_sleep APIs..#
6820: 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69  .if {[llength [i
6830: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c  nfo commands sql
6840: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
6850: 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f  ngs]]>0} {.  do_
6860: 74 65 73 74 20 63 61 70 69 33 2d 31 33 2e 31 20  test capi3-13.1 
6870: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
6880: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
6890: 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  M t1;.    }.    
68a0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
68b0: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 49  3_prepare $DB "I
68c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
68d0: 4c 55 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54  LUES(?, ?)" -1 T
68e0: 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33  AIL].    sqlite3
68f0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20  _step $STMT.  } 
6900: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20  {SQLITE_DONE}.  
6910: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33  do_test capi3-13
6920: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
6930: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20  _reset $STMT.   
6940: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
6950: 78 74 20 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f  xt $STMT 1 hello
6960: 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   5.    sqlite3_b
6970: 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 32  ind_text $STMT 2
6980: 20 77 6f 72 6c 64 20 35 0a 20 20 20 20 73 71 6c   world 5.    sql
6990: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
69a0: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45    } {SQLITE_DONE
69b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
69c0: 33 2d 31 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c  3-13.3 {.    sql
69d0: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
69e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65  .    sqlite3_cle
69f0: 61 72 5f 62 69 6e 64 69 6e 67 73 20 24 53 54 4d  ar_bindings $STM
6a00: 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  T.    sqlite3_st
6a10: 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51  ep $STMT.  } {SQ
6a20: 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f  LITE_DONE}.  do_
6a30: 74 65 73 74 20 63 61 70 69 33 2d 31 33 2d 34 20  test capi3-13-4 
6a40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
6a50: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20  nalize $STMT.   
6a60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
6a70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
6a80: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d  1;.    }.  } {{}
6a90: 20 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20   {} hello world 
6aa0: 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c  {} {}}.}.if {[ll
6ab0: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d  ength [info comm
6ac0: 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 73 6c 65  ands sqlite3_sle
6ad0: 65 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74  ep]]>0} {.  do_t
6ae0: 65 73 74 20 63 61 70 69 33 2d 31 33 2d 35 20 7b  est capi3-13-5 {
6af0: 0a 20 20 20 20 73 65 74 20 6d 73 20 5b 73 71 6c  .    set ms [sql
6b00: 69 74 65 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20  ite3_sleep 80]. 
6b10: 20 20 20 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30     expr {$ms==80
6b20: 20 7c 7c 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20   || $ms==1000}. 
6b30: 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b   } {1}.}..# Tick
6b40: 65 74 20 23 31 32 31 39 3a 20 20 4d 61 6b 65 20  et #1219:  Make 
6b50: 73 75 72 65 20 62 69 6e 64 69 6e 67 20 41 50 49  sure binding API
6b60: 73 20 63 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e  s can handle a N
6b70: 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a 23 20 0a  ULL pointer..# .
6b80: 69 66 20 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69 74  if {[clang_sanit
6b90: 69 7a 65 5f 61 64 64 72 65 73 73 5d 3d 3d 30 7d  ize_address]==0}
6ba0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
6bb0: 69 33 2d 31 34 2e 31 2d 6d 69 73 75 73 65 20 7b  i3-14.1-misuse {
6bc0: 0a 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74  .    set rc [cat
6bd0: 63 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64  ch {sqlite3_bind
6be0: 5f 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20  _text 0 1 hello 
6bf0: 35 7d 20 6d 73 67 5d 0a 20 20 20 20 20 20 6c 61  5} msg].      la
6c00: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 20 20  ppend rc $msg.  
6c10: 7d 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55  } {1 SQLITE_MISU
6c20: 53 45 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20  SE}.}..# Ticket 
6c30: 23 31 36 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68  #1650:  Honor th
6c40: 65 20 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74  e nBytes paramet
6c50: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 70 72  er to sqlite3_pr
6c60: 65 70 61 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  epare..#.do_test
6c70: 20 63 61 70 69 33 2d 31 35 2e 31 20 7b 0a 20 20   capi3-15.1 {.  
6c80: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
6c90: 2a 20 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74  * FROM t2}.  set
6ca0: 20 6e 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20   nbytes [string 
6cb0: 6c 65 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61  length $sql].  a
6cc0: 70 70 65 6e 64 20 73 71 6c 20 7b 20 57 48 45 52  ppend sql { WHER
6cd0: 45 20 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54  E a==1}.  set ST
6ce0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6cf0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 24 6e 62  are $DB $sql $nb
6d00: 79 74 65 73 20 54 41 49 4c 5d 0a 20 20 73 71 6c  ytes TAIL].  sql
6d10: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6d20: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6d30: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b  _int $STMT 0.} {
6d40: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
6d50: 2d 31 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -15.2 {.  sqlite
6d60: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6d70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
6d80: 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a  t $STMT 0.} {2}.
6d90: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
6da0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .3 {.  sqlite3_f
6db0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6dc0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
6dd0: 65 73 74 20 63 61 70 69 33 2d 31 35 2e 34 20 7b  est capi3-15.4 {
6de0: 0a 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34  .  #        1234
6df0: 35 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20  56789 1234567.  
6e00: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
6e10: 31 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65  1234567890}.  se
6e20: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6e30: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
6e40: 20 38 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74   8 TAIL].  sqlit
6e50: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6e60: 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f  set v1 [sqlite3_
6e70: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6e80: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
6e90: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6ea0: 65 74 20 76 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  et v1.} {1}.do_t
6eb0: 65 73 74 20 63 61 70 69 33 2d 31 35 2e 35 20 7b  est capi3-15.5 {
6ec0: 0a 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34  .  #        1234
6ed0: 35 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20  56789 1234567.  
6ee0: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
6ef0: 31 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65  1234567890}.  se
6f00: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6f10: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
6f20: 20 39 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74   9 TAIL].  sqlit
6f30: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6f40: 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f  set v1 [sqlite3_
6f50: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6f60: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
6f70: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6f80: 65 74 20 76 31 0a 7d 20 7b 31 32 7d 0a 64 6f 5f  et v1.} {12}.do_
6f90: 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 36 20  test capi3-15.6 
6fa0: 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31 32 33  {.  #        123
6fb0: 34 35 36 37 38 39 20 31 32 33 34 35 36 37 0a 20  456789 1234567. 
6fc0: 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54   set sql {SELECT
6fd0: 20 31 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73   1234567890}.  s
6fe0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6ff0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
7000: 6c 20 31 32 20 54 41 49 4c 5d 0a 20 20 73 71 6c  l 12 TAIL].  sql
7010: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7020: 20 20 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65    set v1 [sqlite
7030: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
7040: 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f  MT 0].  sqlite3_
7050: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7060: 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 33 34 35   set v1.} {12345
7070: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
7080: 31 35 2e 37 20 7b 0a 20 20 23 20 20 20 20 20 20  15.7 {.  #      
7090: 20 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34    123456789 1234
70a0: 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53  567.  set sql {S
70b0: 45 4c 45 43 54 20 31 32 2e 33 34 35 36 37 38 39  ELECT 12.3456789
70c0: 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  0}.  set STMT [s
70d0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
70e0: 44 42 20 24 73 71 6c 20 31 32 20 54 41 49 4c 5d  DB $sql 12 TAIL]
70f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7100: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b  $STMT.  set v1 [
7110: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
7120: 6f 75 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20  ouble $STMT 0]. 
7130: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7140: 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31  e $STMT.  set v1
7150: 0a 7d 20 7b 31 32 2e 33 34 7d 0a 64 6f 5f 74 65  .} {12.34}.do_te
7160: 73 74 20 63 61 70 69 33 2d 31 35 2e 38 20 7b 0a  st capi3-15.8 {.
7170: 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35    #        12345
7180: 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73  6789 1234567.  s
7190: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31  et sql {SELECT 1
71a0: 32 2e 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65  2.34567890}.  se
71b0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
71c0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
71d0: 20 31 34 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   14 TAIL].  sqli
71e0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
71f0: 20 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33   set v1 [sqlite3
7200: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24  _column_double $
7210: 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65  STMT 0].  sqlite
7220: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7230: 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 2e  .  set v1.} {12.
7240: 33 34 35 36 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  3456}..# Make su
7250: 72 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79  re code is alway
7260: 73 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e  s generated even
7270: 20 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53   if an IF EXISTS
7280: 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58   or .# IF NOT EX
7290: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
72a0: 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20  resent that the 
72b0: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f  table does not o
72c0: 72 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e  r.# does exists.
72d0: 20 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69    That way we wi
72e0: 6c 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61  ll always have a
72f0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
7300: 65 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20  ent.# to expire 
7310: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
7320: 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65  changes..#.do_te
7330: 73 74 20 63 61 70 69 33 2d 31 36 2e 31 20 7b 0a  st capi3-16.1 {.
7340: 20 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50 20    set sql {DROP 
7350: 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20  TABLE IF EXISTS 
7360: 74 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  t3}.  set STMT [
7370: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
7380: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
7390: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
73a0: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
73b0: 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20  r {$STMT!=""}.} 
73c0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
73d0: 33 2d 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73  3-16.2 {.  set s
73e0: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
73f0: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74   IF NOT EXISTS t
7400: 31 28 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54  1(x,y)}.  set ST
7410: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
7420: 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20  are $DB $sql -1 
7430: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
7440: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7450: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
7460: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73  }.} {1}..# But s
7470: 74 69 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67  till we do not g
7480: 65 6e 65 72 61 74 65 20 63 6f 64 65 20 69 66 20  enerate code if 
7490: 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a  there is no SQL.
74a0: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
74b0: 31 36 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.3 {.  set STM
74c0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
74d0: 72 65 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49  re $DB {} -1 TAI
74e0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  L].  sqlite3_fin
74f0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78  alize $STMT.  ex
7500: 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d  pr {$STMT==""}.}
7510: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {1}.do_test cap
7520: 69 33 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20  i3-16.4 {.  set 
7530: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7540: 65 70 61 72 65 20 24 44 42 20 7b 3b 7d 20 2d 31  epare $DB {;} -1
7550: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7560: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7570: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
7580: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b  "}.} {1}..# Tick
7590: 65 74 20 23 32 34 32 36 3a 20 20 4d 69 73 75 73  et #2426:  Misus
75a0: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  e of sqlite3_col
75b0: 75 6d 6e 5f 2a 20 62 79 20 63 61 6c 6c 69 6e 67  umn_* by calling
75c0: 20 69 74 20 61 66 74 65 72 0a 23 20 61 20 73 71   it after.# a sq
75d0: 6c 69 74 65 33 5f 72 65 73 65 74 20 73 68 6f 75  lite3_reset shou
75e0: 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73 2e 0a  ld be harmless..
75f0: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
7600: 31 37 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d  17.1 {.  set STM
7610: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7620: 72 65 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a  re $DB {SELECT *
7630: 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49   FROM t2} -1 TAI
7640: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
7650: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
7660: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
7670: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
7680: 73 74 20 63 61 70 69 33 2d 31 37 2e 32 20 7b 0a  st capi3-17.2 {.
7690: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
76a0: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
76b0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
76c0: 20 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   0.} {0}.do_test
76d0: 20 63 61 70 69 33 2d 31 37 2e 33 20 7b 0a 20 20   capi3-17.3 {.  
76e0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
76f0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
7700: 5f 4f 4b 7d 0a 0a 23 20 56 65 72 69 66 79 20 74  _OK}..# Verify t
7710: 68 61 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70  hat sqlite3_step
7720: 28 29 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  () fails with an
7730: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
7740: 72 72 6f 72 0a 23 20 77 68 65 6e 20 74 68 65 20  rror.# when the 
7750: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
7760: 70 61 72 65 64 20 77 69 74 68 20 73 71 6c 69 74  pared with sqlit
7770: 65 33 5f 70 72 65 70 61 72 65 28 29 20 28 6e 6f  e3_prepare() (no
7780: 74 0a 23 20 73 71 6c 69 74 65 33 5f 70 72 65 70  t.# sqlite3_prep
7790: 61 72 65 5f 76 32 28 29 29 20 61 6e 64 20 74 68  are_v2()) and th
77a0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
77b0: 6e 67 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  nged..#.do_test 
77c0: 63 61 70 69 33 2d 31 38 2e 31 20 7b 0a 20 20 73  capi3-18.1 {.  s
77d0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
77e0: 5f 70 72 65 70 61 72 65 20 64 62 20 7b 53 45 4c  _prepare db {SEL
77f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d  ECT * FROM t2} -
7800: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
7810: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
7820: 64 62 32 20 65 76 61 6c 20 7b 43 52 45 41 54 45  db2 eval {CREATE
7830: 20 54 41 42 4c 45 20 74 33 28 78 29 7d 0a 20 20   TABLE t3(x)}.  
7840: 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69  db2 close.  sqli
7850: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
7860: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
7870: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38  do_test capi3-18
7880: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  .2 {.  sqlite3_r
7890: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c  eset $STMT.  sql
78a0: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64 62 0a  ite3_errcode db.
78b0: 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  } {SQLITE_SCHEMA
78c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
78d0: 31 38 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  18.3 {.  sqlite3
78e0: 5f 65 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61  _errmsg db.} {da
78f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
7900: 73 20 63 68 61 6e 67 65 64 7d 0a 23 20 54 68 65  s changed}.# The
7910: 20 65 72 72 6f 72 20 70 65 72 73 69 73 74 20 6f   error persist o
7920: 6e 20 72 65 74 72 79 20 77 68 65 6e 20 73 71 6c  n retry when sql
7930: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 68  ite3_prepare() h
7940: 61 73 20 62 65 65 6e 20 75 73 65 64 2e 0a 64 6f  as been used..do
7950: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 34  _test capi3-18.4
7960: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
7970: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
7980: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
7990: 20 63 61 70 69 33 2d 31 38 2e 35 20 7b 0a 20 20   capi3-18.5 {.  
79a0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
79b0: 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  TMT.  sqlite3_er
79c0: 72 63 6f 64 65 20 64 62 0a 7d 20 7b 53 51 4c 49  rcode db.} {SQLI
79d0: 54 45 5f 53 43 48 45 4d 41 7d 0a 64 6f 5f 74 65  TE_SCHEMA}.do_te
79e0: 73 74 20 63 61 70 69 33 2d 31 38 2e 36 20 7b 0a  st capi3-18.6 {.
79f0: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
7a00: 20 64 62 0a 7d 20 7b 64 61 74 61 62 61 73 65 20   db.} {database 
7a10: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
7a20: 65 64 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61  ed}.sqlite3_fina
7a30: 6c 69 7a 65 20 24 53 54 4d 54 0a 0a 23 20 54 69  lize $STMT..# Ti
7a40: 63 6b 65 74 20 23 33 31 33 34 2e 20 20 50 72 65  cket #3134.  Pre
7a50: 70 61 72 65 20 61 20 73 74 61 74 65 6d 65 6e 74  pare a statement
7a60: 20 77 69 74 68 20 61 6e 20 6e 42 79 74 65 73 20   with an nBytes 
7a70: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 30 2e 0a  parameter of 0..
7a80: 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73  # Make sure this
7a90: 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79   works correctly
7aa0: 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 72 65   and does not re
7ab0: 66 65 72 65 6e 63 65 20 6d 65 6d 6f 72 79 20 6f  ference memory o
7ac0: 75 74 20 6f 66 0a 23 20 72 61 6e 67 65 2e 0a 23  ut of.# range..#
7ad0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
7ae0: 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.1 {.  sqlite3_
7af0: 70 72 65 70 61 72 65 5f 74 6b 74 33 31 33 34 20  prepare_tkt3134 
7b00: 64 62 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20  db.} {}..# Test 
7b10: 74 68 61 74 20 63 61 6c 6c 69 6e 67 20 73 71 6c  that calling sql
7b20: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
7b30: 28 29 20 6f 6e 20 61 20 54 45 58 54 20 76 61 6c  () on a TEXT val
7b40: 75 65 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e  ue does not chan
7b50: 67 65 0a 23 20 74 68 65 20 72 65 74 75 72 6e 20  ge.# the return 
7b60: 74 79 70 65 20 6f 66 20 73 75 62 73 65 71 75 65  type of subseque
7b70: 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
7b80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
7b90: 29 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  )..#.do_execsql_
7ba0: 74 65 73 74 20 32 30 2e 31 20 7b 0a 20 20 43 52  test 20.1 {.  CR
7bb0: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 78 29  EATE TABLE t4(x)
7bc0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
7bd0: 74 34 20 56 41 4c 55 45 53 28 27 61 62 63 64 65  t4 VALUES('abcde
7be0: 66 67 68 69 6a 27 29 3b 0a 7d 0a 64 6f 5f 74 65  fghij');.}.do_te
7bf0: 73 74 20 32 30 2e 32 20 7b 0a 20 20 73 65 74 20  st 20.2 {.  set 
7c00: 73 74 6d 74 20 5b 73 71 6c 69 74 65 33 5f 70 72  stmt [sqlite3_pr
7c10: 65 70 61 72 65 20 64 62 20 22 53 45 4c 45 43 54  epare db "SELECT
7c20: 20 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 64   * FROM t4" -1 d
7c30: 75 6d 6d 79 5d 0a 20 20 73 71 6c 69 74 65 33 5f  ummy].  sqlite3_
7c40: 73 74 65 70 20 24 73 74 6d 74 0a 7d 20 7b 53 51  step $stmt.} {SQ
7c50: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
7c60: 74 20 32 30 2e 33 20 7b 20 73 71 6c 69 74 65 33  t 20.3 { sqlite3
7c70: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 73 74  _column_type $st
7c80: 6d 74 20 30 20 7d 20 7b 54 45 58 54 7d 0a 64 6f  mt 0 } {TEXT}.do
7c90: 5f 74 65 73 74 20 32 30 2e 34 20 7b 20 73 71 6c  _test 20.4 { sql
7ca0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
7cb0: 20 24 73 74 6d 74 20 30 20 7d 20 7b 61 62 63 64   $stmt 0 } {abcd
7cc0: 65 66 67 68 69 6a 7d 0a 64 6f 5f 74 65 73 74 20  efghij}.do_test 
7cd0: 32 30 2e 35 20 7b 20 73 71 6c 69 74 65 33 5f 63  20.5 { sqlite3_c
7ce0: 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 73 74 6d 74  olumn_type $stmt
7cf0: 20 30 20 7d 20 7b 54 45 58 54 7d 0a 64 6f 5f 74   0 } {TEXT}.do_t
7d00: 65 73 74 20 32 30 2e 36 20 7b 20 73 71 6c 69 74  est 20.6 { sqlit
7d10: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d  e3_finalize $stm
7d20: 74 20 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a  t } SQLITE_OK...
7d30: 23 20 54 65 73 74 73 20 6f 66 20 74 68 65 20 69  # Tests of the i
7d40: 6e 74 65 72 66 61 63 65 20 77 68 65 6e 20 6e 6f  nterface when no
7d50: 20 56 46 53 20 69 73 20 72 65 67 69 73 74 65 72   VFS is register
7d60: 65 64 2e 0a 23 0a 69 66 20 7b 21 5b 69 6e 66 6f  ed..#.if {![info
7d70: 20 65 78 69 73 74 73 20 74 65 73 74 65 72 5f 64   exists tester_d
7d80: 6f 5f 62 69 6e 61 72 79 6c 6f 67 5d 7d 20 7b 0a  o_binarylog]} {.
7d90: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 76 66 73    db close.  vfs
7da0: 5f 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a  _unregister_all.
7db0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
7dc0: 32 30 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  20.1 {.    sqlit
7dd0: 65 33 5f 73 6c 65 65 70 20 31 30 30 0a 20 20 7d  e3_sleep 100.  }
7de0: 20 7b 30 7d 0a 20 20 76 66 73 5f 72 65 72 65 67   {0}.  vfs_rereg
7df0: 69 73 74 65 72 5f 61 6c 6c 0a 7d 0a 0a 66 69 6e  ister_all.}..fin
7e00: 69 73 68 5f 74 65 73 74 0a                       ish_test.