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

Artifact 168e2cd66c58c510955b0f299750e4de73b8d952:


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 0a 23  ir/tester.tcl..#
0260: 20 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d   Return the UTF-
0270: 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
0280: 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  n of the supplie
0290: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 24  d UTF-8 string $
02a0: 73 74 72 2e 0a 23 20 49 66 20 24 6e 74 20 69 73  str..# If $nt is
02b0: 20 74 72 75 65 2c 20 61 70 70 65 6e 64 20 74 77   true, append tw
02c0: 6f 20 30 78 30 30 20 62 79 74 65 73 20 61 73 20  o 0x00 bytes as 
02d0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72  a nul terminator
02e0: 2e 0a 70 72 6f 63 20 75 74 66 31 36 20 7b 73 74  ..proc utf16 {st
02f0: 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20 73 65  r {nt 1}} {.  se
0300: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
0310: 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64 65 20  nvertto unicode 
0320: 24 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e 74 7d  $str].  if {$nt}
0330: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 72 20   {.    append r 
0340: 22 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d 0a 20  "\x00\x00".  }. 
0350: 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20   return $r.}..# 
0360: 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d 38  Return the UTF-8
0370: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
0380: 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
0390: 55 54 46 2d 31 36 20 73 74 72 69 6e 67 20 24 73  UTF-16 string $s
03a0: 74 72 2e 20 0a 70 72 6f 63 20 75 74 66 38 20 7b  tr. .proc utf8 {
03b0: 73 74 72 7d 20 7b 0a 20 20 23 20 49 66 20 24 73  str} {.  # If $s
03c0: 74 72 20 65 6e 64 73 20 69 6e 20 74 77 6f 20 30  tr ends in two 0
03d0: 78 30 30 20 30 78 30 30 20 62 79 74 65 73 2c 20  x00 0x00 bytes, 
03e0: 6b 6e 6f 63 6b 20 74 68 65 73 65 20 6f 66 66 20  knock these off 
03f0: 62 65 66 6f 72 65 0a 20 20 23 20 63 6f 6e 76 65  before.  # conve
0400: 72 74 69 6e 67 20 74 6f 20 55 54 46 2d 38 20 75  rting to UTF-8 u
0410: 73 69 6e 67 20 54 43 4c 2e 0a 20 20 62 69 6e 61  sing TCL..  bina
0420: 72 79 20 73 63 61 6e 20 24 73 74 72 20 5c 63 2a  ry scan $str \c*
0430: 20 76 61 6c 73 0a 20 20 69 66 20 7b 5b 6c 69 6e   vals.  if {[lin
0440: 64 65 78 20 24 76 61 6c 73 20 65 6e 64 5d 3d 3d  dex $vals end]==
0450: 30 20 26 26 20 5b 6c 69 6e 64 65 78 20 24 76 61  0 && [lindex $va
0460: 6c 73 20 65 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a  ls end-1]==0} {.
0470: 20 20 20 20 73 65 74 20 73 74 72 20 5b 62 69 6e      set str [bin
0480: 61 72 79 20 66 6f 72 6d 61 74 20 5c 63 2a 20 5b  ary format \c* [
0490: 6c 72 61 6e 67 65 20 24 76 61 6c 73 20 30 20 65  lrange $vals 0 e
04a0: 6e 64 2d 32 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65  nd-2]].  }..  se
04b0: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
04c0: 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64  nvertfrom unicod
04d0: 65 20 24 73 74 72 5d 0a 20 20 72 65 74 75 72 6e  e $str].  return
04e0: 20 24 72 0a 7d 0a 0a 23 20 54 68 65 73 65 20 74   $r.}..# These t
04f0: 65 73 74 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  ests complement 
0500: 74 68 6f 73 65 20 69 6e 20 63 61 70 69 32 2e 74  those in capi2.t
0510: 65 73 74 2e 20 54 68 65 79 20 61 72 65 20 6f 72  est. They are or
0520: 67 61 6e 69 7a 65 64 0a 23 20 61 73 20 66 6f 6c  ganized.# as fol
0530: 6c 6f 77 73 3a 0a 23 0a 23 20 63 61 70 69 33 2d  lows:.#.# capi3-
0540: 31 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74 65  1.*: Test sqlite
0550: 33 5f 70 72 65 70 61 72 65 20 0a 23 20 63 61 70  3_prepare .# cap
0560: 69 33 2d 32 2e 2a 3a 20 54 65 73 74 20 73 71 6c  i3-2.*: Test sql
0570: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 0a 23  ite3_prepare16.#
0580: 20 63 61 70 69 33 2d 33 2e 2a 3a 20 54 65 73 74   capi3-3.*: Test
0590: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a 23 20   sqlite3_open.# 
05a0: 63 61 70 69 33 2d 34 2e 2a 3a 20 54 65 73 74 20  capi3-4.*: Test 
05b0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 0a 23  sqlite3_open16.#
05c0: 20 63 61 70 69 33 2d 35 2e 2a 3a 20 54 65 73 74   capi3-5.*: Test
05d0: 20 74 68 65 20 76 61 72 69 6f 75 73 20 73 71 6c   the various sql
05e0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 20 41 50  ite3_result_* AP
05f0: 49 73 0a 23 20 63 61 70 69 33 2d 36 2e 2a 3a 20  Is.# capi3-6.*: 
0600: 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74 65  Test that sqlite
0610: 33 5f 63 6c 6f 73 65 20 66 61 69 6c 73 20 69 66  3_close fails if
0620: 20 74 68 65 72 65 20 61 72 65 20 6f 75 74 73 74   there are outst
0630: 61 6e 64 69 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73  anding VMs..#..s
0640: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
0650: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
0660: 72 20 64 62 5d 0a 0a 64 6f 5f 74 65 73 74 20 63  r db]..do_test c
0670: 61 70 69 33 2d 31 2e 30 20 7b 0a 20 20 73 71 6c  api3-1.0 {.  sql
0680: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
0690: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
06a0: 65 73 74 20 63 61 70 69 33 2d 31 2e 31 20 7b 0a  est capi3-1.1 {.
06b0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
06c0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
06d0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
06e0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
06f0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
0700: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
0710: 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20  MT.  set TAIL.} 
0720: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
0730: 2d 31 2e 32 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -1.2.1 {.  sqlit
0740: 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  e3_errcode $DB.}
0750: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
0760: 74 65 73 74 20 63 61 70 69 33 2d 31 2e 32 2e 32  test capi3-1.2.2
0770: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74   {.  sqlite3_ext
0780: 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44  ended_errcode $D
0790: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
07a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e  do_test capi3-1.
07b0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  3 {.  sqlite3_er
07c0: 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 74 20  rmsg $DB.} {not 
07d0: 61 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74 65 73  an error}.do_tes
07e0: 74 20 63 61 70 69 33 2d 31 2e 34 20 7b 0a 20 20  t capi3-1.4 {.  
07f0: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
0800: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0810: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0820: 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  0}.  set STMT [s
0830: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
0840: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
0850: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
0860: 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20  ize $STMT.  set 
0870: 54 41 49 4c 0a 7d 20 7b 53 45 4c 45 43 54 20 31  TAIL.} {SELECT 1
0880: 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  0}.do_test capi3
0890: 2d 31 2e 35 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.5 {.  set sql
08a0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
08b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
08c0: 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20 73 65  ;SELECT 10}.  se
08d0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
08e0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
08f0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
0900: 24 73 71 6c 5d 20 54 41 49 4c 5d 0a 20 20 73 71  $sql] TAIL].  sq
0910: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0920: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0930: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64 6f  } {SELECT 10}.do
0940: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 36 20  _test capi3-1.6 
0950: 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  {.  set sql {SEL
0960: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0970: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c 45  lite_master;SELE
0980: 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54 4d  CT 10}.  set STM
0990: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
09a0: 72 65 20 24 44 42 20 24 73 71 6c 20 5b 65 78 70  re $DB $sql [exp
09b0: 72 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  r [string length
09c0: 20 24 73 71 6c 5d 2b 31 5d 20 54 41 49 4c 5d 0a   $sql]+1] TAIL].
09d0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
09e0: 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54  ze $STMT.  set T
09f0: 41 49 4c 0a 7d 20 7b 53 45 4c 45 43 54 20 31 30  AIL.} {SELECT 10
0a00: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }..do_test capi3
0a10: 2d 31 2e 37 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.7 {.  set sql
0a20: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 78 20 46   {SELECT namex F
0a30: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0a40: 72 7d 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20  r}.  catch {.   
0a50: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
0a60: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
0a70: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 7d  sql -1 TAIL].  }
0a80: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {1}.do_test c
0a90: 61 70 69 33 2d 31 2e 38 2e 31 20 7b 0a 20 20 73  api3-1.8.1 {.  s
0aa0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
0ab0: 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  DB.} {SQLITE_ERR
0ac0: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
0ad0: 33 2d 31 2e 38 2e 32 20 7b 0a 20 20 73 71 6c 69  3-1.8.2 {.  sqli
0ae0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
0af0: 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49  code $DB.} {SQLI
0b00: 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73  TE_ERROR}.do_tes
0b10: 74 20 63 61 70 69 33 2d 31 2e 39 20 7b 0a 20 20  t capi3-1.9 {.  
0b20: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
0b30: 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 63 6f  DB.} {no such co
0b40: 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 69 66  lumn: namex}..if
0b50: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
0b60: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
0b70: 33 2d 32 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  3-2.1 {.    set 
0b80: 73 71 6c 31 36 20 5b 75 74 66 31 36 20 7b 53 45  sql16 [utf16 {SE
0b90: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0ba0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d 0a 20  qlite_master}]. 
0bb0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0bc0: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20 24  ite3_prepare16 $
0bd0: 44 42 20 24 73 71 6c 31 36 20 2d 31 20 3a 3a 54  DB $sql16 -1 ::T
0be0: 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33  AIL].    sqlite3
0bf0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
0c00: 20 20 20 20 75 74 66 38 20 24 3a 3a 54 41 49 4c      utf8 $::TAIL
0c10: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
0c20: 74 20 63 61 70 69 33 2d 32 2e 32 20 7b 0a 20 20  t capi3-2.2 {.  
0c30: 20 20 73 65 74 20 73 71 6c 20 5b 75 74 66 31 36    set sql [utf16
0c40: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0c50: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0c60: 3b 53 45 4c 45 43 54 20 31 30 7d 5d 0a 20 20 20  ;SELECT 10}].   
0c70: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
0c80: 65 33 5f 70 72 65 70 61 72 65 31 36 20 24 44 42  e3_prepare16 $DB
0c90: 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20   $sql -1 TAIL]. 
0ca0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
0cb0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 75 74  ize $STMT.    ut
0cc0: 66 38 20 24 54 41 49 4c 0a 20 20 7d 20 7b 53 45  f8 $TAIL.  } {SE
0cd0: 4c 45 43 54 20 31 30 7d 0a 20 20 64 6f 5f 74 65  LECT 10}.  do_te
0ce0: 73 74 20 63 61 70 69 33 2d 32 2e 33 20 7b 0a 20  st capi3-2.3 {. 
0cf0: 20 20 20 73 65 74 20 73 71 6c 20 5b 75 74 66 31     set sql [utf1
0d00: 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 78 20  6 {SELECT namex 
0d10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0d20: 65 72 7d 5d 0a 20 20 20 20 63 61 74 63 68 20 7b  er}].    catch {
0d30: 0a 20 20 20 20 20 20 73 65 74 20 53 54 4d 54 20  .      set STMT 
0d40: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0d50: 31 36 20 24 44 42 20 24 73 71 6c 20 2d 31 5d 0a  16 $DB $sql -1].
0d60: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20      }.  } {1}.  
0d70: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0d80: 34 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  4.1 {.    sqlite
0d90: 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  3_errcode $DB.  
0da0: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
0db0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
0dc0: 2d 32 2e 34 2e 32 20 7b 0a 20 20 20 20 73 71 6c  -2.4.2 {.    sql
0dd0: 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
0de0: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
0df0: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
0e00: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 35  o_test capi3-2.5
0e10: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
0e20: 72 72 6d 73 67 20 24 44 42 0a 20 20 7d 20 7b 6e  rrmsg $DB.  } {n
0e30: 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e  o such column: n
0e40: 61 6d 65 78 7d 0a 0a 20 20 69 66 63 61 70 61 62  amex}..  ifcapab
0e50: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
0e60: 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  s {.    do_test 
0e70: 63 61 70 69 33 2d 32 2e 36 20 7b 0a 20 20 20 20  capi3-2.6 {.    
0e80: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
0e90: 45 20 54 41 42 4c 45 20 74 61 62 6c 65 6e 61 6d  E TABLE tablenam
0ea0: 65 28 78 29 7d 0a 20 20 20 20 20 20 73 65 74 20  e(x)}.      set 
0eb0: 73 71 6c 31 36 20 5b 75 74 66 31 36 20 7b 50 52  sql16 [utf16 {PR
0ec0: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
0ed0: 22 54 61 62 6c 65 4e 61 6d 65 22 29 3b 20 2d 2d  "TableName"); --
0ee0: 65 78 63 65 73 73 20 74 65 78 74 7d 5d 0a 20 20  excess text}].  
0ef0: 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71      set STMT [sq
0f00: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20  lite3_prepare16 
0f10: 24 44 42 20 24 73 71 6c 31 36 20 2d 31 5d 0a 20  $DB $sql16 -1]. 
0f20: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65       sqlite3_ste
0f30: 70 20 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51  p $STMT.    } SQ
0f40: 4c 49 54 45 5f 52 4f 57 0a 20 20 20 20 64 6f 5f  LITE_ROW.    do_
0f50: 74 65 73 74 20 63 61 70 69 33 2d 32 2e 37 20 7b  test capi3-2.7 {
0f60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
0f70: 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20 7d 20  tep $STMT.    } 
0f80: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 20 20 20 20  SQLITE_DONE.    
0f90: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0fa0: 38 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  8 {.      sqlite
0fb0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
0fc0: 0a 20 20 20 20 7d 20 53 51 4c 49 54 45 5f 4f 4b  .    } SQLITE_OK
0fd0: 0a 20 20 7d 0a 0a 7d 20 3b 23 20 65 6e 64 69 66  .  }..} ;# endif
0fe0: 20 75 74 66 31 36 0a 0a 23 20 72 65 6e 61 6d 65   utf16..# rename
0ff0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 73 71   sqlite3_open sq
1000: 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 0a 23  lite3_open_old.#
1010: 20 70 72 6f 63 20 73 71 6c 69 74 65 33 5f 6f 70   proc sqlite3_op
1020: 65 6e 20 7b 66 6e 61 6d 65 20 6f 70 74 69 6f 6e  en {fname option
1030: 73 7d 20 7b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  s} {sqlite3_open
1040: 5f 6e 65 77 20 24 66 6e 61 6d 65 20 24 6f 70 74  _new $fname $opt
1050: 69 6f 6e 73 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  ions}..do_test c
1060: 61 70 69 33 2d 33 2e 31 20 7b 0a 20 20 73 65 74  api3-3.1 {.  set
1070: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
1080: 65 6e 20 74 65 73 74 2e 64 62 20 7b 7d 5d 0a 20  en test.db {}]. 
1090: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
10a0: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
10b0: 4f 4b 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68  OK}.# FIX ME: Sh
10c0: 6f 75 6c 64 20 74 65 73 74 20 74 68 65 20 64 62  ould test the db
10d0: 20 68 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64   handle works..d
10e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 32  o_test capi3-3.2
10f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
1100: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
1110: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
1120: 70 69 33 2d 33 2e 33 20 7b 0a 20 20 63 61 74 63  pi3-3.3 {.  catc
1130: 68 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20  h {.    set db2 
1140: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 2f 62  [sqlite3_open /b
1150: 6f 67 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64  ogus/path/test.d
1160: 62 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69  b {}].  }.  sqli
1170: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
1180: 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  code $db2.} {SQL
1190: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f  ITE_CANTOPEN}.do
11a0: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 34 20  _test capi3-3.4 
11b0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
11c0: 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e 61 62 6c  sg $db2.} {unabl
11d0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
11e0: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
11f0: 20 63 61 70 69 33 2d 33 2e 35 20 7b 0a 20 20 73   capi3-3.5 {.  s
1200: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62  qlite3_close $db
1210: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1220: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e  do_test capi3-3.
1230: 36 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20 20 73  6.1-misuse {.  s
1240: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62  qlite3_close $db
1250: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55  2.} {SQLITE_MISU
1260: 53 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  SE}.do_test capi
1270: 33 2d 33 2e 36 2e 32 2d 6d 69 73 75 73 65 20 7b  3-3.6.2-misuse {
1280: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  .  sqlite3_errms
1290: 67 20 24 64 62 32 0a 7d 20 7b 6c 69 62 72 61 72  g $db2.} {librar
12a0: 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64  y routine called
12b0: 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65   out of sequence
12c0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  }.ifcapable {utf
12d0: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
12e0: 63 61 70 69 33 2d 33 2e 36 2e 33 2d 6d 69 73 75  capi3-3.6.3-misu
12f0: 73 65 20 7b 0a 20 20 20 20 75 74 66 38 20 5b 73  se {.    utf8 [s
1300: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 20  qlite3_errmsg16 
1310: 24 64 62 32 5d 0a 20 20 7d 20 7b 6c 69 62 72 61  $db2].  } {libra
1320: 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65  ry routine calle
1330: 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63  d out of sequenc
1340: 65 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  e}.}..do_test ca
1350: 70 69 33 2d 33 2e 37 20 7b 0a 20 20 73 65 74 20  pi3-3.7 {.  set 
1360: 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  db2 [sqlite3_ope
1370: 6e 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72  n].  sqlite3_err
1380: 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  code $db2.} {SQL
1390: 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20  ITE_OK}.do_test 
13a0: 63 61 70 69 33 2d 33 2e 38 20 7b 0a 20 20 73 71  capi3-3.8 {.  sq
13b0: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32  lite3_close $db2
13c0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a  .} {SQLITE_OK}..
13d0: 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33  # rename sqlite3
13e0: 5f 6f 70 65 6e 20 22 22 0a 23 20 72 65 6e 61 6d  _open "".# renam
13f0: 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f  e sqlite3_open_o
1400: 6c 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a  ld sqlite3_open.
1410: 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31  .ifcapable {utf1
1420: 36 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 63 61 70  6} {.do_test cap
1430: 69 33 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20 64  i3-4.1 {.  set d
1440: 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  b2 [sqlite3_open
1450: 31 36 20 5b 75 74 66 31 36 20 74 65 73 74 2e 64  16 [utf16 test.d
1460: 62 5d 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33  b] {}].  sqlite3
1470: 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20  _errcode $db2.} 
1480: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49  {SQLITE_OK}.# FI
1490: 58 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65 73  X ME: Should tes
14a0: 74 20 74 68 65 20 64 62 20 68 61 6e 64 6c 65 20  t the db handle 
14b0: 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63  works..do_test c
14c0: 61 70 69 33 2d 34 2e 32 20 7b 0a 20 20 73 71 6c  api3-4.2 {.  sql
14d0: 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a  ite3_close $db2.
14e0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
14f0: 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 33 20  _test capi3-4.3 
1500: 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20  {.  catch {.    
1510: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
1520: 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20 2f  _open16 [utf16 /
1530: 62 6f 67 75 73 2f 70 61 74 68 2f 74 65 73 74 2e  bogus/path/test.
1540: 64 62 5d 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71  db] {}].  }.  sq
1550: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64  lite3_errcode $d
1560: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e  b2.} {SQLITE_CAN
1570: 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63  TOPEN}.do_test c
1580: 61 70 69 33 2d 34 2e 34 20 7b 0a 20 20 75 74 66  api3-4.4 {.  utf
1590: 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  8 [sqlite3_errms
15a0: 67 31 36 20 24 64 62 32 5d 0a 7d 20 7b 75 6e 61  g16 $db2].} {una
15b0: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
15c0: 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65  base file}.do_te
15d0: 73 74 20 63 61 70 69 33 2d 34 2e 35 20 7b 0a 20  st capi3-4.5 {. 
15e0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
15f0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
1600: 7d 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a 23 20  }.} ;# utf16..# 
1610: 54 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65  This proc is use
1620: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f  d to test the fo
1630: 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c  llowing API call
1640: 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63  s:.#.# sqlite3_c
1650: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20 73 71  olumn_count.# sq
1660: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1670: 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e.# sqlite3_colu
1680: 6d 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  mn_name16.# sqli
1690: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
16a0: 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ype.# sqlite3_co
16b0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 0a  lumn_decltype16.
16c0: 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63  #.# $STMT is a c
16d0: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
16e0: 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20  ement. $test is 
16f0: 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73  a prefix.# to us
1700: 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73  e for test names
1710: 20 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f   within this pro
1720: 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c  c. $names is a l
1730: 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c  ist.# of the col
1740: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73  umn names that s
1750: 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  hould be returne
1760: 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64  d by $STMT..# $d
1770: 65 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69  ecltypes is a li
1780: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  st of column dec
1790: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66  laration types f
17a0: 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78  or $STMT..#.# Ex
17b0: 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53  ample:.#.# set S
17c0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
17d0: 70 61 72 65 20 22 53 45 4c 45 43 54 20 31 2c 20  pare "SELECT 1, 
17e0: 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d  2, 2;" -1 DUMMY]
17f0: 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65 72 20  .# check_header 
1800: 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33 7d 20  test1.1 {1 2 3} 
1810: 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f  {"" "" ""}.#.pro
1820: 63 20 63 68 65 63 6b 5f 68 65 61 64 65 72 20 7b  c check_header {
1830: 53 54 4d 54 20 74 65 73 74 20 6e 61 6d 65 73 20  STMT test names 
1840: 64 65 63 6c 74 79 70 65 73 7d 20 7b 0a 0a 20 20  decltypes} {..  
1850: 23 20 55 73 65 20 74 68 65 20 72 65 74 75 72 6e  # Use the return
1860: 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
1870: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29  3_column_count()
1880: 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20 61 20   to build.  # a 
1890: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  list of column i
18a0: 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66 20  ndexes. i.e. If 
18b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
18c0: 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c 20 62  ount.  # is 3, b
18d0: 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 7b 30  uild the list {0
18e0: 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a 3a 69   1 2}..  set ::i
18f0: 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  dxlist [list].  
1900: 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73  set ::numcols [s
1910: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1920: 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72  unt $STMT].  for
1930: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
1940: 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   $::numcols} {in
1950: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
1960: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 20 20  :idxlist $i}..  
1970: 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  # Column names i
1980: 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73  n UTF-8.  do_tes
1990: 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20 20 20  t $test.1 {.    
19a0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
19b0: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
19c0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
19d0: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
19e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
19f0: 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a  ame $STMT $i]} .
1a00: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1a10: 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20  t.  } $names..  
1a20: 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  # Column names i
1a30: 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70  n UTF-16.  ifcap
1a40: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1a50: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1a60: 2e 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  .2 {.      set c
1a70: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
1a80: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
1a90: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
1aa0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
1ab0: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
1ac0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
1ad0: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
1ae0: 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63     }.      set c
1af0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24  namelist.    } $
1b00: 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43  names.  }..  # C
1b10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1b20: 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24  TF-8.  do_test $
1b30: 74 65 73 74 2e 33 20 7b 0a 20 20 20 20 73 65 74  test.3 {.    set
1b40: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1b50: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ].    foreach i 
1b60: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
1b70: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
1b80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1b90: 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20   $STMT $i]} .   
1ba0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
1bb0: 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23 20 43   } $names..  # C
1bc0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1bd0: 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61 62 6c  TF-16.  ifcapabl
1be0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
1bf0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 34 20  do_test $test.4 
1c00: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
1c10: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
1c20: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
1c30: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
1c40: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
1c50: 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33  t [utf8 [sqlite3
1c60: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
1c70: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
1c80: 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  }.      set cnam
1c90: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e 61 6d  elist.    } $nam
1ca0: 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f 6c 75  es.  }..  # Colu
1cb0: 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  mn names in UTF-
1cc0: 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73  8.  do_test $tes
1cd0: 74 2e 35 20 7b 0a 20 20 20 20 73 65 74 20 63 6e  t.5 {.    set cn
1ce0: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1cf0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
1d00: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 63  xlist {lappend c
1d10: 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65  namelist [sqlite
1d20: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
1d30: 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20  e $STMT $i]} .  
1d40: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1d50: 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73 0a 0a    } $decltypes..
1d60: 20 20 23 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61    # Column decla
1d70: 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69 6e 20  ration types in 
1d80: 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61 62  UTF-16.  ifcapab
1d90: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20  le {utf16} {.   
1da0: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 36   do_test $test.6
1db0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61   {.      set cna
1dc0: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
1dd0: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
1de0: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20  dxlist {.       
1df0: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
1e00: 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  st [utf8 [sqlite
1e10: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
1e20: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
1e30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1e40: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1e50: 20 24 64 65 63 6c 74 79 70 65 73 0a 20 20 7d 0a   $decltypes.  }.
1e60: 0a 0a 20 20 23 20 54 65 73 74 20 73 6f 6d 65 20  ..  # Test some 
1e70: 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 63 6f 6e  out of range con
1e80: 64 69 74 69 6f 6e 73 3a 0a 20 20 69 66 63 61 70  ditions:.  ifcap
1e90: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1ea0: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1eb0: 2e 37 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20  .7 {.      list 
1ec0: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1ed0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24  e3_column_name $
1ee0: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
1ef0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1f00: 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  mn_name16 $STMT 
1f10: 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73  -1] \.        [s
1f20: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1f30: 63 6c 74 79 70 65 20 24 53 54 4d 54 20 2d 31 5d  cltype $STMT -1]
1f40: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
1f50: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1f60: 79 70 65 31 36 20 24 53 54 4d 54 20 2d 31 5d 20  ype16 $STMT -1] 
1f70: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1f80: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24  e3_column_name $
1f90: 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c  STMT $numcols] \
1fa0: 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65  .        [sqlite
1fb0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20  3_column_name16 
1fc0: 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20  $STMT $numcols] 
1fd0: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1fe0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1ff0: 70 65 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c  pe $STMT $numcol
2000: 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  s] \.        [sq
2010: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
2020: 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 24 6e  ltype16 $STMT $n
2030: 75 6d 63 6f 6c 73 5d 0a 20 20 20 20 7d 20 7b 7b  umcols].    } {{
2040: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d  } {} {} {} {} {}
2050: 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 0a 7d 20 0a 0a   {} {}}.  }.} ..
2060: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
2070: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
2080: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63 61  following API ca
2090: 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33  lls:.#.# sqlite3
20a0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
20b0: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
20c0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
20d0: 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  16.# sqlite3_col
20e0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 0a 23  umn_table_name.#
20f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2100: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 0a 23 20 73  table_name16.# s
2110: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
2120: 74 61 62 61 73 65 5f 6e 61 6d 65 0a 23 20 73 71  tabase_name.# sq
2130: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
2140: 61 62 61 73 65 5f 6e 61 6d 65 31 36 0a 23 0a 23  abase_name16.#.#
2150: 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f 6d 70   $STMT is a comp
2160: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
2170: 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61 20 70  nt. $test is a p
2180: 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65 20 66  refix.# to use f
2190: 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69  or test names wi
21a0: 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20  thin this proc. 
21b0: 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69 73 74  $names is a list
21c0: 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  .# of the column
21d0: 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68 6f 75   names that shou
21e0: 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 62  ld be returned b
21f0: 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65 63 6c  y $STMT..# $decl
2200: 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74 20  types is a list 
2210: 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72  of column declar
2220: 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f 72 20  ation types for 
2230: 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61 6d 70  $STMT..#.# Examp
2240: 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54 4d 54  le:.#.# set STMT
2250: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
2260: 65 20 22 53 45 4c 45 43 54 20 31 2c 20 32 2c 20  e "SELECT 1, 2, 
2270: 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20  2;" -1 DUMMY].# 
2280: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 74 65 73  check_header tes
2290: 74 31 2e 31 20 7b 31 20 32 20 33 7d 20 7b 22 22  t1.1 {1 2 3} {""
22a0: 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f 63 20 63   "" ""}.#.proc c
22b0: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
22c0: 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20 64 62  er {STMT test db
22d0: 73 20 74 61 62 6c 65 73 20 63 6f 6c 73 7d 20 7b  s tables cols} {
22e0: 0a 20 20 23 20 49 66 20 73 71 6c 69 74 65 33 5f  .  # If sqlite3_
22f0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
2300: 6d 65 28 29 20 61 6e 64 20 66 72 69 65 6e 64 73  me() and friends
2310: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 69 6c 65   are not compile
2320: 64 20 69 6e 74 6f 0a 20 20 23 20 74 68 69 73 20  d into.  # this 
2330: 62 75 69 6c 64 2c 20 74 68 69 73 20 70 72 6f 63  build, this proc
2340: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 20 20 69   is a no-op..  i
2350: 66 63 61 70 61 62 6c 65 20 63 6f 6c 75 6d 6e 6d  fcapable columnm
2360: 65 74 61 64 61 74 61 20 7b 0a 20 20 20 20 23 20  etadata {.    # 
2370: 55 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76  Use the return v
2380: 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  alue of sqlite3_
2390: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74  column_count() t
23a0: 6f 20 62 75 69 6c 64 0a 20 20 20 20 23 20 61 20  o build.    # a 
23b0: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  list of column i
23c0: 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66 20  ndexes. i.e. If 
23d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
23e0: 6f 75 6e 74 0a 20 20 20 20 23 20 69 73 20 33 2c  ount.    # is 3,
23f0: 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   build the list 
2400: 7b 30 20 31 20 32 7d 2e 0a 20 20 20 20 73 65 74  {0 1 2}..    set
2410: 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74   ::idxlist [list
2420: 5d 0a 20 20 20 20 73 65 74 20 3a 3a 6e 75 6d 63  ].    set ::numc
2430: 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ols [sqlite3_col
2440: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d  umn_count $STMT]
2450: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20  .    for {set i 
2460: 30 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63  0} {$i < $::numc
2470: 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c  ols} {incr i} {l
2480: 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74  append ::idxlist
2490: 20 24 69 7d 0a 20 20 0a 20 20 20 20 23 20 44 61   $i}.  .    # Da
24a0: 74 61 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20  tabase names in 
24b0: 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73  UTF-8.    do_tes
24c0: 74 20 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20  t $test.8 {.    
24d0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
24e0: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
24f0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2500: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
2510: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
2520: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
2530: 62 61 73 65 5f 6e 61 6d 65 20 24 53 54 4d 54 20  base_name $STMT 
2540: 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20  $i].      } .   
2550: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
2560: 0a 20 20 20 20 7d 20 24 64 62 73 0a 20 20 0a 20  .    } $dbs.  . 
2570: 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e 61     # Database na
2580: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
2590: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
25a0: 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74  16} {.      do_t
25b0: 65 73 74 20 24 74 65 73 74 2e 39 20 7b 0a 20 20  est $test.9 {.  
25c0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
25d0: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
25e0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
25f0: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2600: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2610: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
2620: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
2630: 73 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  se_name16 $STMT 
2640: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
2650: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2660: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 64 62  list.      } $db
2670: 73 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 23  s.    }.  .    #
2680: 20 54 61 62 6c 65 20 6e 61 6d 65 73 20 69 6e 20   Table names in 
2690: 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73  UTF-8.    do_tes
26a0: 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20 20 20  t $test.10 {.   
26b0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
26c0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f   [list].      fo
26d0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
26e0: 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65   {.        lappe
26f0: 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71  nd cnamelist [sq
2700: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
2710: 6c 65 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69  le_name $STMT $i
2720: 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  ].      } .     
2730: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
2740: 20 20 20 7d 20 24 74 61 62 6c 65 73 0a 20 20 0a     } $tables.  .
2750: 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65      # Table name
2760: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20  s in UTF-16.    
2770: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
2780: 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  } {.      do_tes
2790: 74 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20 20  t $test.11 {.   
27a0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
27b0: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
27c0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
27d0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20  list {.         
27e0: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
27f0: 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  st [utf8 [sqlite
2800: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
2810: 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ame16 $STMT $i]]
2820: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2830: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
2840: 0a 20 20 20 20 20 20 7d 20 24 74 61 62 6c 65 73  .      } $tables
2850: 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 23 20  .    }.  .    # 
2860: 4f 72 69 67 69 6e 20 6e 61 6d 65 73 20 69 6e 20  Origin names in 
2870: 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73  UTF-8.    do_tes
2880: 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20 20 20  t $test.12 {.   
2890: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
28a0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f   [list].      fo
28b0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
28c0: 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65   {.        lappe
28d0: 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71  nd cnamelist [sq
28e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
28f0: 67 69 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  gin_name $STMT $
2900: 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  i].      } .    
2910: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
2920: 20 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20 0a 20      } $cols.  . 
2930: 20 20 20 23 20 4f 72 69 67 69 6e 20 64 65 63 6c     # Origin decl
2940: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69 6e  aration types in
2950: 20 55 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61   UTF-16.    ifca
2960: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
2970: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74        do_test $t
2980: 65 73 74 2e 31 33 20 7b 0a 20 20 20 20 20 20 20  est.13 {.       
2990: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
29a0: 6c 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f  list].        fo
29b0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
29c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70   {.          lap
29d0: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
29e0: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
29f0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
2a00: 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20  16 $STMT $i]].  
2a10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2a20: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
2a30: 20 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20 20 20      } $cols.    
2a40: 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 54 68 69 73 20  }.  }.}..# This 
2a50: 70 72 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20  proc is used to 
2a60: 74 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69  test the followi
2a70: 6e 67 20 41 50 49 73 3a 0a 23 0a 23 20 73 71 6c  ng APIs:.#.# sql
2a80: 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 0a  ite3_data_count.
2a90: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2aa0: 5f 74 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f  _type.# sqlite3_
2ab0: 63 6f 6c 75 6d 6e 5f 69 6e 74 0a 23 20 73 71 6c  column_int.# sql
2ac0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
2ad0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2ae0: 6e 5f 74 65 78 74 31 36 0a 23 20 73 71 6c 69 74  n_text16.# sqlit
2af0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
2b00: 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20  .#.# $STMT is a 
2b10: 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61  compiled SQL sta
2b20: 74 65 6d 65 6e 74 20 66 6f 72 20 77 68 69 63 68  tement for which
2b30: 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 63 61   the previous ca
2b40: 6c 6c 20 0a 23 20 74 6f 20 73 71 6c 69 74 65 33  ll .# to sqlite3
2b50: 5f 73 74 65 70 20 72 65 74 75 72 6e 65 64 20 53  _step returned S
2b60: 51 4c 49 54 45 5f 52 4f 57 2e 20 24 74 65 73 74  QLITE_ROW. $test
2b70: 20 69 73 20 61 20 70 72 65 66 69 78 20 74 6f 20   is a prefix to 
2b80: 75 73 65 20 0a 23 20 66 6f 72 20 74 65 73 74 20  use .# for test 
2b90: 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69  names within thi
2ba0: 73 20 70 72 6f 63 2e 20 24 74 79 70 65 73 20 69  s proc. $types i
2bb0: 73 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 20  s a list of the 
2bc0: 0a 23 20 6d 61 6e 69 66 65 73 74 20 74 79 70 65  .# manifest type
2bd0: 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
2be0: 74 20 72 6f 77 2e 20 24 69 6e 74 73 2c 20 24 64  t row. $ints, $d
2bf0: 6f 75 62 6c 65 73 20 61 6e 64 20 24 73 74 72 69  oubles and $stri
2c00: 6e 67 73 0a 23 20 61 72 65 20 6c 69 73 74 73 20  ngs.# are lists 
2c10: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 2c 20  of the integer, 
2c20: 72 65 61 6c 20 61 6e 64 20 73 74 72 69 6e 67 20  real and string 
2c30: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20  representations 
2c40: 6f 66 0a 23 20 74 68 65 20 76 61 6c 75 65 73 20  of.# the values 
2c50: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2c60: 6f 77 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a  ow..#.# Example:
2c70: 0a 23 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73  .#.# set STMT [s
2c80: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 22  qlite3_prepare "
2c90: 53 45 4c 45 43 54 20 27 68 65 6c 6c 6f 27 2c 20  SELECT 'hello', 
2ca0: 31 2e 31 2c 20 4e 55 4c 4c 22 20 2d 31 20 44 55  1.1, NULL" -1 DU
2cb0: 4d 4d 59 5d 0a 23 20 73 71 6c 69 74 65 33 5f 73  MMY].# sqlite3_s
2cc0: 74 65 70 20 24 53 54 4d 54 0a 23 20 63 68 65 63  tep $STMT.# chec
2cd0: 6b 5f 64 61 74 61 20 74 65 73 74 31 2e 32 20 7b  k_data test1.2 {
2ce0: 54 45 58 54 20 52 45 41 4c 20 4e 55 4c 4c 7d 20  TEXT REAL NULL} 
2cf0: 7b 30 20 31 20 30 7d 20 7b 30 20 31 2e 31 20 30  {0 1 0} {0 1.1 0
2d00: 7d 20 7b 68 65 6c 6c 6f 20 31 2e 31 20 7b 7d 7d  } {hello 1.1 {}}
2d10: 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 64 61  .#.proc check_da
2d20: 74 61 20 7b 53 54 4d 54 20 74 65 73 74 20 74 79  ta {STMT test ty
2d30: 70 65 73 20 69 6e 74 73 20 64 6f 75 62 6c 65 73  pes ints doubles
2d40: 20 73 74 72 69 6e 67 73 7d 20 7b 0a 0a 20 20 23   strings} {..  #
2d50: 20 55 73 65 20 74 68 65 20 72 65 74 75 72 6e 20   Use the return 
2d60: 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33  value of sqlite3
2d70: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20  _column_count() 
2d80: 74 6f 20 62 75 69 6c 64 0a 20 20 23 20 61 20 6c  to build.  # a l
2d90: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ist of column in
2da0: 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66 20 73  dexes. i.e. If s
2db0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
2dc0: 75 6e 74 0a 20 20 23 20 69 73 20 33 2c 20 62 75  unt.  # is 3, bu
2dd0: 69 6c 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20  ild the list {0 
2de0: 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a 3a 69 64  1 2}..  set ::id
2df0: 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 73  xlist [list].  s
2e00: 65 74 20 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69  et numcols [sqli
2e10: 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20 24  te3_data_count $
2e20: 53 54 4d 54 5d 0a 20 20 66 6f 72 20 7b 73 65 74  STMT].  for {set
2e30: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 75 6d   i 0} {$i < $num
2e40: 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  cols} {incr i} {
2e50: 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73  lappend ::idxlis
2e60: 74 20 24 69 7d 0a 0a 23 20 74 79 70 65 73 0a 64  t $i}..# types.d
2e70: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b  o_test $test.1 {
2e80: 0a 20 20 73 65 74 20 74 79 70 65 73 20 5b 6c 69  .  set types [li
2e90: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
2ea0: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
2eb0: 64 20 74 79 70 65 73 20 5b 73 71 6c 69 74 65 33  d types [sqlite3
2ec0: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54  _column_type $ST
2ed0: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 74 79  MT $i]}.  set ty
2ee0: 70 65 73 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20  pes.} $types..# 
2ef0: 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74  Integers.do_test
2f00: 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 73 65 74   $test.2 {.  set
2f10: 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66   ints [list].  f
2f20: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
2f30: 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20  t {lappend ints 
2f40: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2f50: 69 6e 74 36 34 20 24 53 54 4d 54 20 24 69 5d 7d  int64 $STMT $i]}
2f60: 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20 24 69  .  set ints.} $i
2f70: 6e 74 73 0a 0a 23 20 62 79 74 65 73 0a 73 65 74  nts..# bytes.set
2f80: 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 66 6f 72   lens [list].for
2f90: 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73  each i $::idxlis
2fa0: 74 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 6c 65  t {.  lappend le
2fb0: 6e 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  ns [string lengt
2fc0: 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e  h [lindex $strin
2fd0: 67 73 20 24 69 5d 5d 0a 7d 0a 64 6f 5f 74 65 73  gs $i]].}.do_tes
2fe0: 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 73 65  t $test.3 {.  se
2ff0: 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20  t bytes [list]. 
3000: 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d   set lens [list]
3010: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3020: 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70  xlist {.    lapp
3030: 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c 69 74  end bytes [sqlit
3040: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20  e3_column_bytes 
3050: 24 53 54 4d 54 20 24 69 5d 0a 20 20 7d 0a 20 20  $STMT $i].  }.  
3060: 73 65 74 20 62 79 74 65 73 0a 7d 20 24 6c 65 6e  set bytes.} $len
3070: 73 0a 0a 23 20 62 79 74 65 73 31 36 0a 69 66 63  s..# bytes16.ifc
3080: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
3090: 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73  .  set lens [lis
30a0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
30b0: 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20  ::idxlist {.    
30c0: 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b 65 78  lappend lens [ex
30d0: 70 72 20 32 20 2a 20 5b 73 74 72 69 6e 67 20 6c  pr 2 * [string l
30e0: 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20 24 73  ength [lindex $s
30f0: 74 72 69 6e 67 73 20 24 69 5d 5d 5d 0a 20 20 7d  trings $i]]].  }
3100: 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74  .  do_test $test
3110: 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 62 79 74  .4 {.    set byt
3120: 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65  es [list].    se
3130: 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20  t lens [list].  
3140: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3150: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 6c 61 70  list {.      lap
3160: 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c 69  pend bytes [sqli
3170: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
3180: 31 36 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20  16 $STMT $i].   
3190: 20 7d 0a 20 20 20 20 73 65 74 20 62 79 74 65 73   }.    set bytes
31a0: 0a 20 20 7d 20 24 6c 65 6e 73 0a 7d 0a 0a 23 20  .  } $lens.}..# 
31b0: 42 6c 6f 62 0a 64 6f 5f 74 65 73 74 20 24 74 65  Blob.do_test $te
31c0: 73 74 2e 35 20 7b 0a 20 20 73 65 74 20 75 74 66  st.5 {.  set utf
31d0: 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  8 [list].  forea
31e0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
31f0: 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c  append utf8 [sql
3200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
3210: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3220: 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67  t utf8.} $string
3230: 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65  s..# UTF-8.do_te
3240: 73 74 20 24 74 65 73 74 2e 36 20 7b 0a 20 20 73  st $test.6 {.  s
3250: 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20  et utf8 [list]. 
3260: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
3270: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66  ist {lappend utf
3280: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
3290: 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69 5d  n_text $STMT $i]
32a0: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
32b0: 73 74 72 69 6e 67 73 0a 0a 23 20 46 6c 6f 61 74  strings..# Float
32c0: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
32d0: 37 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  7 {.  set utf8 [
32e0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
32f0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
3300: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
3310: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20  3_column_double 
3320: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
3330: 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65 73   utf8.} $doubles
3340: 0a 0a 23 20 55 54 46 2d 31 36 0a 69 66 63 61 70  ..# UTF-16.ifcap
3350: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
3360: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38   do_test $test.8
3370: 20 7b 0a 20 20 20 20 73 65 74 20 75 74 66 38 20   {.    set utf8 
3380: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
3390: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
33a0: 61 70 70 65 6e 64 20 75 74 66 38 20 5b 75 74 66  append utf8 [utf
33b0: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
33c0: 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 24  n_text16 $STMT $
33d0: 69 5d 5d 7d 0a 20 20 20 20 73 65 74 20 75 74 66  i]]}.    set utf
33e0: 38 0a 20 20 7d 20 24 73 74 72 69 6e 67 73 0a 7d  8.  } $strings.}
33f0: 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f  ..# Integers.do_
3400: 74 65 73 74 20 24 74 65 73 74 2e 39 20 7b 0a 20  test $test.9 {. 
3410: 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73 74 5d   set ints [list]
3420: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3430: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 69  xlist {lappend i
3440: 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  nts [sqlite3_col
3450: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 24 69  umn_int $STMT $i
3460: 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20  ]}.  set ints.} 
3470: 24 69 6e 74 73 0a 0a 23 20 46 6c 6f 61 74 73 0a  $ints..# Floats.
3480: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30  do_test $test.10
3490: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
34a0: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
34b0: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
34c0: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
34d0: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24  _column_double $
34e0: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
34f0: 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65 73 0a  utf8.} $doubles.
3500: 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74  .# UTF-8.do_test
3510: 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20 73 65   $test.11 {.  se
3520: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
3530: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3540: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
3550: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3560: 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69 5d 7d  _text $STMT $i]}
3570: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 73  .  set utf8.} $s
3580: 74 72 69 6e 67 73 0a 0a 23 20 54 79 70 65 73 0a  trings..# Types.
3590: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32  do_test $test.12
35a0: 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73 20 5b   {.  set types [
35b0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
35c0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
35d0: 65 6e 64 20 74 79 70 65 73 20 5b 73 71 6c 69 74  end types [sqlit
35e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24  e3_column_type $
35f0: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3600: 74 79 70 65 73 0a 7d 20 24 74 79 70 65 73 0a 0a  types.} $types..
3610: 23 20 54 65 73 74 20 74 68 61 74 20 61 6e 20 6f  # Test that an o
3620: 75 74 20 6f 66 20 72 61 6e 67 65 20 72 65 71 75  ut of range requ
3630: 65 73 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  est returns the 
3640: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 4e 55  equivalent of NU
3650: 4c 4c 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  LL.do_test $test
3660: 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .13 {.  sqlite3_
3670: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
3680: 20 2d 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73   -1.} {0}.do_tes
3690: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73  t $test.13 {.  s
36a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
36b0: 78 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 7d  xt $STMT -1.} {}
36c0: 0a 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 21  ..}..ifcapable !
36d0: 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 20 7b 0a  floatingpoint {.
36e0: 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20    finish_test.  
36f0: 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73  return.}..do_tes
3700: 74 20 63 61 70 69 33 2d 35 2e 30 20 7b 0a 20 20  t capi3-5.0 {.  
3710: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
3720: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
3730: 56 41 52 49 4e 54 2c 20 62 20 42 4c 4f 42 2c 20  VARINT, b BLOB, 
3740: 63 20 56 41 52 43 48 41 52 28 31 36 29 29 3b 0a  c VARCHAR(16));.
3750: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3760: 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t1 VALUES(1, 2, 
3770: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
3780: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f  NTO t1 VALUES('o
3790: 6e 65 27 2c 20 27 74 77 6f 27 2c 20 4e 55 4c 4c  ne', 'two', NULL
37a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
37b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2e 32  TO t1 VALUES(1.2
37c0: 2c 20 31 2e 33 2c 20 31 2e 34 29 3b 0a 20 20 7d  , 1.3, 1.4);.  }
37d0: 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45  .  set sql "SELE
37e0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 22 0a 20 20  CT * FROM t1".  
37f0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
3800: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73  3_prepare $DB $s
3810: 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ql -1 TAIL].  sq
3820: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
3830: 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68  nt $STMT.} 3..ch
3840: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3850: 20 63 61 70 69 33 2d 35 2e 31 20 7b 61 20 62 20   capi3-5.1 {a b 
3860: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3870: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3880: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3890: 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 31   $STMT capi3-5.1
38a0: 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e   {main main main
38b0: 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20  } {t1 t1 t1} {a 
38c0: 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  b c}.do_test cap
38d0: 69 33 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74  i3-5.2 {.  sqlit
38e0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
38f0: 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63  SQLITE_ROW..chec
3900: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
3910: 61 70 69 33 2d 35 2e 33 20 7b 61 20 62 20 63 7d  api3-5.3 {a b c}
3920: 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41   {VARINT BLOB VA
3930: 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b  RCHAR(16)}.check
3940: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24  _origin_header $
3950: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 20 7b  STMT capi3-5.3 {
3960: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3970: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
3980: 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  c}.check_data $S
3990: 54 4d 54 20 63 61 70 69 33 2d 35 2e 34 20 7b 49  TMT capi3-5.4 {I
39a0: 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 54  NTEGER INTEGER T
39b0: 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b 31 2e  EXT} {1 2 3} {1.
39c0: 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20 32 20  0 2.0 3.0} {1 2 
39d0: 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  3}..do_test capi
39e0: 33 2d 35 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65  3-5.5 {.  sqlite
39f0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
3a00: 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b  QLITE_ROW..check
3a10: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3a20: 70 69 33 2d 35 2e 36 20 7b 61 20 62 20 63 7d 20  pi3-5.6 {a b c} 
3a30: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
3a40: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
3a50: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3a60: 54 4d 54 20 63 61 70 69 33 2d 35 2e 36 20 7b 6d  TMT capi3-5.6 {m
3a70: 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b  ain main main} {
3a80: 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63  t1 t1 t1} {a b c
3a90: 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53 54  }.check_data $ST
3aa0: 4d 54 20 63 61 70 69 33 2d 35 2e 37 20 7b 54 45  MT capi3-5.7 {TE
3ab0: 58 54 20 54 45 58 54 20 4e 55 4c 4c 7d 20 7b 30  XT TEXT NULL} {0
3ac0: 20 30 20 30 7d 20 7b 30 2e 30 20 30 2e 30 20 30   0 0} {0.0 0.0 0
3ad0: 2e 30 7d 20 7b 6f 6e 65 20 74 77 6f 20 7b 7d 7d  .0} {one two {}}
3ae0: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  ..do_test capi3-
3af0: 35 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  5.8 {.  sqlite3_
3b00: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
3b10: 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68  ITE_ROW..check_h
3b20: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3b30: 33 2d 35 2e 39 20 7b 61 20 62 20 63 7d 20 7b 56  3-5.9 {a b c} {V
3b40: 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48  ARINT BLOB VARCH
3b50: 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72  AR(16)}.check_or
3b60: 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d  igin_header $STM
3b70: 54 20 63 61 70 69 33 2d 35 2e 39 20 7b 6d 61 69  T capi3-5.9 {mai
3b80: 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31  n main main} {t1
3b90: 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a   t1 t1} {a b c}.
3ba0: 63 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54  check_data $STMT
3bb0: 20 63 61 70 69 33 2d 35 2e 31 30 20 7b 46 4c 4f   capi3-5.10 {FLO
3bc0: 41 54 20 46 4c 4f 41 54 20 54 45 58 54 7d 20 7b  AT FLOAT TEXT} {
3bd0: 31 20 31 20 31 7d 20 7b 31 2e 32 20 31 2e 33 20  1 1 1} {1.2 1.3 
3be0: 31 2e 34 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e  1.4} {1.2 1.3 1.
3bf0: 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  4}..do_test capi
3c00: 33 2d 35 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  3-5.11 {.  sqlit
3c10: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
3c20: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 0a 64 6f 5f  SQLITE_DONE..do_
3c30: 74 65 73 74 20 63 61 70 69 33 2d 35 2e 31 32 20  test capi3-5.12 
3c40: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
3c50: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
3c60: 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20  ITE_OK..do_test 
3c70: 63 61 70 69 33 2d 35 2e 32 30 20 7b 0a 20 20 73  capi3-5.20 {.  s
3c80: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61  et sql "SELECT a
3c90: 2c 20 73 75 6d 28 62 29 2c 20 6d 61 78 28 63 29  , sum(b), max(c)
3ca0: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
3cb0: 59 20 61 22 0a 20 20 73 65 74 20 53 54 4d 54 20  Y a".  set STMT 
3cc0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
3cd0: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
3ce0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  L].  sqlite3_col
3cf0: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a  umn_count $STMT.
3d00: 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  } 3..check_heade
3d10: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
3d20: 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d 61 78  21 {a sum(b) max
3d30: 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20  (c)} {VARINT {} 
3d40: 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  {}}.check_origin
3d50: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3d60: 70 69 33 2d 35 2e 32 32 20 7b 6d 61 69 6e 20 7b  pi3-5.22 {main {
3d70: 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d  } {}} {t1 {} {}}
3d80: 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65   {a {} {}}.do_te
3d90: 73 74 20 63 61 70 69 33 2d 35 2e 32 33 20 7b 0a  st capi3-5.23 {.
3da0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
3db0: 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ze $STMT.} SQLIT
3dc0: 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK..do_test ca
3dd0: 70 69 33 2d 35 2e 33 30 20 7b 0a 20 20 73 65 74  pi3-5.30 {.  set
3de0: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61 20 41   sql "SELECT a A
3df0: 53 20 78 2c 20 73 75 6d 28 62 29 20 41 53 20 79  S x, sum(b) AS y
3e00: 2c 20 6d 61 78 28 63 29 20 41 53 20 7a 20 46 52  , max(c) AS z FR
3e10: 4f 4d 20 74 31 20 41 53 20 6d 20 47 52 4f 55 50  OM t1 AS m GROUP
3e20: 20 42 59 20 78 22 0a 20 20 73 65 74 20 53 54 4d   BY x".  set STM
3e30: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
3e40: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
3e50: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63  AIL].  sqlite3_c
3e60: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d  olumn_count $STM
3e70: 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61  T.} 3..check_hea
3e80: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3e90: 35 2e 33 31 20 7b 78 20 79 20 7a 7d 20 7b 56 41  5.31 {x y z} {VA
3ea0: 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63  RINT {} {}}.chec
3eb0: 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20  k_origin_header 
3ec0: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 32  $STMT capi3-5.32
3ed0: 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74   {main {} {}} {t
3ee0: 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b  1 {} {}} {a {} {
3ef0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
3f00: 2d 35 2e 33 33 20 7b 0a 20 20 73 71 6c 69 74 65  -5.33 {.  sqlite
3f10: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
3f20: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 73  .} SQLITE_OK...s
3f30: 65 74 20 3a 3a 45 4e 43 20 5b 65 78 65 63 73 71  et ::ENC [execsq
3f40: 6c 20 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64 69  l {pragma encodi
3f50: 6e 67 7d 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64  ng}].db close..d
3f60: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 30  o_test capi3-6.0
3f70: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   {.  sqlite3 db 
3f80: 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 44 42  test.db.  set DB
3f90: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
3fa0: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
3fb0: 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 24  .  sqlite3_key $
3fc0: 44 42 20 78 79 7a 7a 79 0a 20 20 73 65 74 20 73  DB xyzzy.  set s
3fd0: 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  ql {SELECT a FRO
3fe0: 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20 72 6f  M t1 order by ro
3ff0: 77 69 64 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  wid}.  set STMT 
4000: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
4010: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
4020: 4c 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20 7b 30  L].  expr 0.} {0
4030: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
4040: 36 2e 31 20 7b 0a 20 20 64 62 20 63 61 63 68 65  6.1 {.  db cache
4050: 20 66 6c 75 73 68 0a 20 20 73 71 6c 69 74 65 33   flush.  sqlite3
4060: 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b 53 51  _close $DB.} {SQ
4070: 4c 49 54 45 5f 42 55 53 59 7d 0a 64 6f 5f 74 65  LITE_BUSY}.do_te
4080: 73 74 20 63 61 70 69 33 2d 36 2e 32 20 7b 0a 20  st capi3-6.2 {. 
4090: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
40a0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
40b0: 57 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  W}.check_data $S
40c0: 54 4d 54 20 63 61 70 69 33 2d 36 2e 33 20 7b 49  TMT capi3-6.3 {I
40d0: 4e 54 45 47 45 52 7d 20 7b 31 7d 20 7b 31 2e 30  NTEGER} {1} {1.0
40e0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } {1}.do_test ca
40f0: 70 69 33 2d 36 2e 33 20 7b 0a 20 20 73 71 6c 69  pi3-6.3 {.  sqli
4100: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
4110: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
4120: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
4130: 2e 34 2d 6d 69 73 75 73 65 20 7b 0a 20 20 64 62  .4-misuse {.  db
4140: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73   cache flush.  s
4150: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42  qlite3_close $DB
4160: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
4170: 62 20 63 6c 6f 73 65 0a 0a 23 20 54 68 69 73 20  b close..# This 
4180: 70 72 6f 63 65 64 75 72 65 20 73 65 74 73 20 74  procedure sets t
4190: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
41a0: 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66  file-format in f
41b0: 69 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23 20  ile 'test.db'.# 
41c0: 74 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73 6f  to $newval. Also
41d0: 2c 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  , the schema coo
41e0: 6b 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  kie is increment
41f0: 65 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74 5f  ed..# .proc set_
4200: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65 77  file_format {new
4210: 76 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f 77  val} {.  hexio_w
4220: 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 34 20  rite test.db 44 
4230: 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e  [hexio_render_in
4240: 74 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20 73  t32 $newval].  s
4250: 65 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 20  et schemacookie 
4260: 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b  [hexio_get_int [
4270: 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74 2e  hexio_read test.
4280: 64 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63 72  db 40 4]].  incr
4290: 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20 20   schemacookie.  
42a0: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
42b0: 2e 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72 65  .db 40 [hexio_re
42c0: 6e 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68 65  nder_int32 $sche
42d0: 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74 75  macookie].  retu
42e0: 72 6e 20 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73 20  rn {}.}..# This 
42f0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
4300: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
4310: 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69  he file-format i
4320: 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62 27  n file 'test.db'
4330: 2e 0a 23 20 0a 70 72 6f 63 20 67 65 74 5f 66 69  ..# .proc get_fi
4340: 6c 65 5f 66 6f 72 6d 61 74 20 7b 7b 66 6e 61 6d  le_format {{fnam
4350: 65 20 74 65 73 74 2e 64 62 7d 7d 20 7b 0a 20 20  e test.db}} {.  
4360: 72 65 74 75 72 6e 20 5b 68 65 78 69 6f 5f 67 65  return [hexio_ge
4370: 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61  t_int [hexio_rea
4380: 64 20 24 66 6e 61 6d 65 20 34 34 20 34 5d 5d 0a  d $fname 44 4]].
4390: 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65 33  }..if {![sqlite3
43a0: 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a   -has-codec]} {.
43b0: 20 20 23 20 54 65 73 74 20 77 68 61 74 20 68 61    # Test what ha
43c0: 70 70 65 6e 73 20 77 68 65 6e 20 74 68 65 20 6c  ppens when the l
43d0: 69 62 72 61 72 79 20 65 6e 63 6f 75 6e 74 65 72  ibrary encounter
43e0: 73 20 61 20 6e 65 77 65 72 20 66 69 6c 65 20 66  s a newer file f
43f0: 6f 72 6d 61 74 2e 0a 20 20 64 6f 5f 74 65 73 74  ormat..  do_test
4400: 20 63 61 70 69 33 2d 37 2e 31 20 7b 0a 20 20 20   capi3-7.1 {.   
4410: 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74   set_file_format
4420: 20 35 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   5.  } {}.  do_t
4430: 65 73 74 20 63 61 70 69 33 2d 37 2e 32 20 7b 0a  est capi3-7.2 {.
4440: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
4450: 65 73 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68  est.db.    catch
4460: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4470: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4480: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4490: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
44a0: 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d  ed file format}}
44b0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69  .  db close.}..i
44c0: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
44d0: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
44e0: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
44f0: 65 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63  e library correc
4500: 74 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75  tly handles bogu
4510: 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  s entries in the
4520: 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74  .  # sqlite_mast
4530: 65 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61  er table (schema
4540: 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20   corruption)..  
4550: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
4560: 31 20 7b 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  1 {.    file del
4570: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force test.
4580: 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  db test.db-journ
4590: 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  al.    sqlite3 d
45a0: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  b test.db.    ex
45b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
45c0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29  EATE TABLE t1(a)
45d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63  ;.    }.    db c
45e0: 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  lose.  } {}.  do
45f0: 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 32 20  _test capi3-8.2 
4600: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
4610: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
4620: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4630: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
4640: 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e  ema=ON;.      IN
4650: 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65  SERT INTO sqlite
4660: 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28 4e  _master VALUES(N
4670: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  ULL,NULL,NULL,NU
4680: 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a  LL,NULL);.    }.
4690: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d      db close.  }
46a0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
46b0: 70 69 33 2d 38 2e 33 20 7b 0a 20 20 20 20 73 71  pi3-8.3 {.    sq
46c0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
46d0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
46e0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
46f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4700: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  r;.    }.  } {1 
4710: 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62  {malformed datab
4720: 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d  ase schema (?)}}
4730: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
4740: 2d 38 2e 34 20 7b 0a 20 20 20 20 23 20 42 75 69  -8.4 {.    # Bui
4750: 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72 6f 77  ld a 5-field row
4760: 20 72 65 63 6f 72 64 2e 20 54 68 65 20 66 69 72   record. The fir
4770: 73 74 20 66 69 65 6c 64 20 69 73 20 61 20 73 74  st field is a st
4780: 72 69 6e 67 20 27 74 61 62 6c 65 27 2c 20 61 6e  ring 'table', an
4790: 64 0a 20 20 20 20 23 20 73 75 62 73 65 71 75 65  d.    # subseque
47a0: 6e 74 20 66 69 65 6c 64 73 20 61 72 65 20 61 6c  nt fields are al
47b0: 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20 64 62 20 63  l NULL..    db c
47c0: 6c 6f 73 65 0a 20 20 20 20 66 69 6c 65 20 64 65  lose.    file de
47d0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
47e0: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
47f0: 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20  nal.    sqlite3 
4800: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
4810: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
4820: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
4830: 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  );.      PRAGMA 
4840: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
4850: 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  ON;.      INSERT
4860: 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73   INTO sqlite_mas
4870: 74 65 72 20 56 41 4c 55 45 53 28 27 74 61 62 6c  ter VALUES('tabl
4880: 65 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c  e',NULL,NULL,NUL
4890: 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20  L,NULL);.    }. 
48a0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
48b0: 7b 7d 3b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  {};.  do_test ca
48c0: 70 69 33 2d 38 2e 35 20 7b 0a 20 20 20 20 73 71  pi3-8.5 {.    sq
48d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
48e0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
48f0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
4900: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4910: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  r;.    }.  } {1 
4920: 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62  {malformed datab
4930: 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d  ase schema (?)}}
4940: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 69  .  db close.}.fi
4950: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
4960: 20 74 65 73 74 2e 64 62 0a 66 69 6c 65 20 64 65   test.db.file de
4970: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4980: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23 20  .db-journal...# 
4990: 54 65 73 74 20 74 68 65 20 65 6e 67 6c 69 73 68  Test the english
49a0: 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67   language string
49b0: 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72   equivalents for
49c0: 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f   sqlite error co
49d0: 64 65 73 0a 73 65 74 20 63 6f 64 65 32 65 6e 67  des.set code2eng
49e0: 6c 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51 4c  lish [list \.SQL
49f0: 49 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 7b  ITE_OK         {
4a00: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c 0a  not an error} \.
4a10: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20  SQLITE_ERROR    
4a20: 20 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72    {SQL logic err
4a30: 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  or or missing da
4a40: 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45  tabase} \.SQLITE
4a50: 5f 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63  _PERM       {acc
4a60: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
4a70: 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  enied} \.SQLITE_
4a80: 41 42 4f 52 54 20 20 20 20 20 20 7b 63 61 6c 6c  ABORT      {call
4a90: 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71  back requested q
4aa0: 75 65 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53 51  uery abort} \.SQ
4ab0: 4c 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20  LITE_BUSY       
4ac0: 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  {database is loc
4ad0: 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f  ked} \.SQLITE_LO
4ae0: 43 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62 61  CKED     {databa
4af0: 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
4b00: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d  ed} \.SQLITE_NOM
4b10: 45 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20  EM      {out of 
4b20: 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45  memory} \.SQLITE
4b30: 5f 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74  _READONLY   {att
4b40: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
4b50: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
4b60: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45  e} \.SQLITE_INTE
4b70: 52 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70  RRUPT  {interrup
4b80: 74 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f  ted} \.SQLITE_IO
4b90: 45 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49  ERR      {disk I
4ba0: 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49  /O error} \.SQLI
4bb0: 54 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64  TE_CORRUPT    {d
4bc0: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
4bd0: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
4be0: 20 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20   \.SQLITE_FULL  
4bf0: 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f       {database o
4c00: 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20  r disk is full} 
4c10: 5c 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  \.SQLITE_CANTOPE
4c20: 4e 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f  N   {unable to o
4c30: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
4c40: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50 54  e} \.SQLITE_EMPT
4c50: 59 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63 6f  Y      {table co
4c60: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d 20  ntains no data} 
4c70: 5c 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  \.SQLITE_SCHEMA 
4c80: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 73 63      {database sc
4c90: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
4ca0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54  } \.SQLITE_CONST
4cb0: 52 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e  RAINT {constrain
4cc0: 74 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49  t failed} \.SQLI
4cd0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64  TE_MISMATCH   {d
4ce0: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
4cf0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53  } \.SQLITE_MISUS
4d00: 45 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20 72  E     {library r
4d10: 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75  outine called ou
4d20: 74 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20 5c  t of sequence} \
4d30: 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20  .SQLITE_NOLFS   
4d40: 20 20 20 7b 6c 61 72 67 65 20 66 69 6c 65 20 73     {large file s
4d50: 75 70 70 6f 72 74 20 69 73 20 64 69 73 61 62 6c  upport is disabl
4d60: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55 54  ed} \.SQLITE_AUT
4d70: 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f 72 69  H       {authori
4d80: 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c  zation denied} \
4d90: 0a 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20 20  .SQLITE_FORMAT  
4da0: 20 20 20 7b 61 75 78 69 6c 69 61 72 79 20 64 61     {auxiliary da
4db0: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
4dc0: 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 41  ror} \.SQLITE_RA
4dd0: 4e 47 45 20 20 20 20 20 20 7b 62 69 6e 64 20 6f  NGE      {bind o
4de0: 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f  r column index o
4df0: 75 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53  ut of range} \.S
4e00: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20  QLITE_NOTADB    
4e10: 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70   {file is encryp
4e20: 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ted or is not a 
4e30: 64 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e  database} \.unkn
4e40: 6f 77 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75  ownerror      {u
4e50: 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a  nknown error} \.
4e60: 5d 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62  ]..set test_numb
4e70: 65 72 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f  er 1.foreach {co
4e80: 64 65 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64  de english} $cod
4e90: 65 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f  e2english {.  do
4ea0: 5f 74 65 73 74 20 63 61 70 69 33 2d 39 2e 24 74  _test capi3-9.$t
4eb0: 65 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c 69  est_number "sqli
4ec0: 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20  te3_test_errstr 
4ed0: 24 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68 0a  $code" $english.
4ee0: 20 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d 62    incr test_numb
4ef0: 65 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  er.}..# Test the
4f00: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77   error message w
4f10: 68 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75 74  hen a "real" out
4f20: 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75 72   of memory occur
4f30: 73 2e 0a 69 66 63 61 70 61 62 6c 65 20 6d 65 6d  s..ifcapable mem
4f40: 64 65 62 75 67 20 7b 0a 20 20 64 6f 5f 74 65 73  debug {.  do_tes
4f50: 74 20 63 61 70 69 33 2d 31 30 2d 31 20 7b 0a 20  t capi3-10-1 {. 
4f60: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
4f70: 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 44 42  st.db.    set DB
4f80: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
4f90: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
4fa0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  .    sqlite3_mem
4fb0: 64 65 62 75 67 5f 66 61 69 6c 20 31 0a 20 20 20  debug_fail 1.   
4fc0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
4fd0: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
4fe0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
4ff0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74     }.  } {1 {out
5000: 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64   of memory}}.  d
5010: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d  o_test capi3-10-
5020: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
5030: 65 72 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d  errmsg $::DB.  }
5040: 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d   {out of memory}
5050: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74  .  ifcapable {ut
5060: 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  f16} {.    do_te
5070: 73 74 20 63 61 70 69 33 2d 31 30 2d 33 20 7b 0a  st capi3-10-3 {.
5080: 20 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69        utf8 [sqli
5090: 74 65 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a  te3_errmsg16 $::
50a0: 44 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f  DB].    } {out o
50b0: 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20  f memory}.  }.  
50c0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
50d0: 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c  e3_memdebug_fail
50e0: 20 2d 31 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   -1.  do_test ca
50f0: 70 69 33 2d 31 30 2d 34 20 7b 0a 20 20 20 20 73  pi3-10-4 {.    s
5100: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5110: 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73 71  b.    set DB [sq
5120: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
5130: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 20  _pointer db].   
5140: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75   sqlite3_memdebu
5150: 67 5f 66 61 69 6c 20 31 0a 20 20 20 20 63 61 74  g_fail 1.    cat
5160: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  chsql {.      se
5170: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
5180: 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72 65 20  te_master where 
5190: 72 6f 77 69 64 3e 35 3b 0a 20 20 20 20 7d 0a 20  rowid>5;.    }. 
51a0: 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65   } {1 {out of me
51b0: 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  mory}}.  do_test
51c0: 20 63 61 70 69 33 2d 31 30 2d 35 20 7b 0a 20 20   capi3-10-5 {.  
51d0: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
51e0: 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20   $::DB.  } {out 
51f0: 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63  of memory}.  ifc
5200: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
5210: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70  .    do_test cap
5220: 69 33 2d 31 30 2d 36 20 7b 0a 20 20 20 20 20 20  i3-10-6 {.      
5230: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
5240: 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20  rmsg16 $::DB].  
5250: 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f    } {out of memo
5260: 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f  ry}.  }.  db clo
5270: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  se.  sqlite3_mem
5280: 64 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 7d 0a  debug_fail -1.}.
5290: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
52a0: 20 74 65 73 74 73 20 2d 20 63 61 70 69 33 2d 31   tests - capi3-1
52b0: 31 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20  1.* - test that 
52c0: 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  a COMMIT or ROLL
52d0: 42 41 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e 74  BACK.# statement
52e0: 20 69 73 73 75 65 64 20 77 68 69 6c 65 20 74 68   issued while th
52f0: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6f 75  ere are still ou
5300: 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 20 74 68  tstanding VMs th
5310: 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 0a 23  at are part of.#
5320: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5330: 20 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33 20   fails..sqlite3 
5340: 64 62 20 74 65 73 74 2e 64 62 0a 73 65 74 20 44  db test.db.set D
5350: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
5360: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
5370: 5d 0a 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65  ].sqlite_registe
5380: 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  r_test_function 
5390: 24 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73 74  $DB func.do_test
53a0: 20 63 61 70 69 33 2d 31 31 2e 31 20 7b 0a 20 20   capi3-11.1 {.  
53b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
53c0: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
53d0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a  TABLE t1(a, b);.
53e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
53f0: 74 31 20 56 41 4c 55 45 53 28 31 2c 20 27 69 6e  t1 VALUES(1, 'in
5400: 74 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  t');.    INSERT 
5410: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
5420: 2c 20 27 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20  , 'notatype');. 
5430: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
5440: 63 61 70 69 33 2d 31 31 2e 31 2e 31 20 7b 0a 20  capi3-11.1.1 {. 
5450: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5460: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a  ocommit $DB.} 0.
5470: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5480: 2e 32 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .2 {.  set STMT 
5490: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
54a0: 20 24 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e   $DB "SELECT fun
54b0: 63 28 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22  c(b, a) FROM t1"
54c0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
54d0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
54e0: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a 23   {SQLITE_ROW}..#
54f0: 20 41 73 20 6f 66 20 33 2e 36 2e 35 20 61 20 43   As of 3.6.5 a C
5500: 4f 4d 4d 49 54 20 69 73 20 4f 4b 20 64 75 72 69  OMMIT is OK duri
5510: 6e 67 20 77 68 69 6c 65 20 61 20 71 75 65 72 79  ng while a query
5520: 20 69 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   is still runnin
5530: 67 20 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61 73  g -.# as long as
5540: 20 69 74 20 69 73 20 61 20 72 65 61 64 2d 6f 6e   it is a read-on
5550: 6c 79 20 71 75 65 72 79 20 61 6e 64 20 6e 6f 74  ly query and not
5560: 20 61 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20   an incremental 
5570: 42 4c 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64 6f  BLOB write..#.do
5580: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33  _test capi3-11.3
5590: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
55a0: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
55b0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
55c0: 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 32 20  st capi3-11.3.2 
55d0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65  {.  sqlite3_exte
55e0: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
55f0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
5600: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5610: 33 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.3 {.  sqlite3_
5620: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
5630: 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63  DB.} 1.do_test c
5640: 61 70 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20 20  api3-11.3.4 {.  
5650: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
5660: 6c 6f 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20 7b  lock_status}.} {
5670: 6d 61 69 6e 20 73 68 61 72 65 64 20 74 65 6d 70  main shared temp
5680: 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65 73   closed}..do_tes
5690: 74 20 63 61 70 69 33 2d 31 31 2e 34 20 7b 0a 20  t capi3-11.4 {. 
56a0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
56b0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52  TMT.} {SQLITE_ER
56c0: 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROR}.do_test cap
56d0: 69 33 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69  i3-11.5 {.  sqli
56e0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
56f0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5700: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5710: 33 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63 68  3-11.6 {.  catch
5720: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
5730: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   * FROM t1;.  }.
5740: 7d 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e 6f  } {0 {1 int 2 no
5750: 74 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73 74  tatype}}.do_test
5760: 20 63 61 70 69 33 2d 31 31 2e 37 20 7b 0a 20 20   capi3-11.7 {.  
5770: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
5780: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64  commit $DB.} 1.d
5790: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
57a0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
57b0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
57c0: 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45   t2(a);.    INSE
57d0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
57e0: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
57f0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5800: 32 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  2);.    BEGIN;. 
5810: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5820: 32 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d  2 VALUES(3);.  }
5830: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
5840: 70 69 33 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73  pi3-11.8.1 {.  s
5850: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5860: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5870: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39  _test capi3-11.9
5880: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
5890: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
58a0: 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f  DB "SELECT a FRO
58b0: 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2" -1 TAIL]. 
58c0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
58d0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
58e0: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
58f0: 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.9.1 {.  sqli
5900: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5910: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5920: 73 74 20 63 61 70 69 33 2d 31 31 2e 39 2e 32 20  st capi3-11.9.2 
5930: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5940: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5950: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f  .} {1 {cannot ro
5960: 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
5970: 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  on - SQL stateme
5980: 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 7d  nts in progress}
5990: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
59a0: 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74  11.9.3 {.  sqlit
59b0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
59c0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
59d0: 74 20 63 61 70 69 33 2d 31 31 2e 31 30 20 7b 0a  t capi3-11.10 {.
59e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
59f0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
5a00: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
5a10: 33 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71 6c 69  3-11.11 {.  sqli
5a20: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5a30: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5a40: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5a50: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
5a60: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5a70: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
5a80: 20 63 61 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20   capi3-11.13 {. 
5a90: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5aa0: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
5ab0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5ac0: 70 69 33 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78  pi3-11.14 {.  ex
5ad0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
5ae0: 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT a FROM t2;.  
5af0: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
5b00: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 34 2e  est capi3-11.14.
5b10: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5b20: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5b30: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5b40: 69 33 2d 31 31 2e 31 35 20 7b 0a 20 20 63 61 74  i3-11.15 {.  cat
5b50: 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c  chsql {.    ROLL
5b60: 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  BACK;.  }.} {0 {
5b70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5b80: 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c  -11.15.1 {.  sql
5b90: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5ba0: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
5bb0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 36 20  est capi3-11.16 
5bc0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5bd0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5be0: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a  t2;.  }.} {1 2}.
5bf0: 0a 23 20 53 61 6e 69 74 79 20 63 68 65 63 6b 20  .# Sanity check 
5c00: 6f 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  on the definitio
5c10: 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e 64 69 6e  n of 'outstandin
5c20: 67 20 56 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e  g VM'. This mean
5c30: 73 20 61 6e 79 20 56 4d 0a 23 20 74 68 61 74 20  s any VM.# that 
5c40: 68 61 73 20 68 61 64 20 73 71 6c 69 74 65 33 5f  has had sqlite3_
5c50: 73 74 65 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f  step() called mo
5c60: 72 65 20 72 65 63 65 6e 74 6c 79 20 74 68 61 6e  re recently than
5c70: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5c80: 65 28 29 20 6f 72 0a 23 20 73 71 6c 69 74 65 33  e() or.# sqlite3
5c90: 5f 72 65 73 65 74 28 29 2e 20 53 6f 20 61 20 56  _reset(). So a V
5ca0: 4d 20 74 68 61 74 20 68 61 73 20 6a 75 73 74 20  M that has just 
5cb0: 62 65 65 6e 20 70 72 65 70 61 72 65 64 20 6f 72  been prepared or
5cc0: 20 72 65 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a   reset does not.
5cd0: 23 20 63 6f 75 6e 74 20 61 73 20 61 6e 20 61 63  # count as an ac
5ce0: 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74  tive VM..do_test
5cf0: 20 63 61 70 69 33 2d 31 31 2e 31 37 20 7b 0a 20   capi3-11.17 {. 
5d00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
5d10: 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  EGIN;.  }.} {}.d
5d20: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5d30: 31 38 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  18 {.  set STMT 
5d40: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5d50: 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46   $DB "SELECT a F
5d60: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
5d70: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5d80: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
5d90: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
5da0: 61 70 69 33 2d 31 31 2e 31 39 20 7b 0a 20 20 73  api3-11.19 {.  s
5db0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5dc0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5dd0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5de0: 31 2e 32 30 20 7b 0a 20 20 63 61 74 63 68 73 71  1.20 {.  catchsq
5df0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
5e00: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d     COMMIT;.  }.}
5e10: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5e20: 63 61 70 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20  capi3-11.20 {.  
5e30: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
5e40: 54 4d 54 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  TMT.  catchsql {
5e50: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
5e60: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f  .} {1 {cannot co
5e70: 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
5e80: 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d  ction is active}
5e90: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5ea0: 31 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65  11.21 {.  sqlite
5eb0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5ec0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a  .} {SQLITE_OK}..
5ed0: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
5ee0: 74 65 73 74 73 20 2d 20 63 61 70 69 33 2d 31 32  tests - capi3-12
5ef0: 2e 2a 20 2d 20 63 68 65 63 6b 20 74 68 61 74 20  .* - check that 
5f00: 69 74 73 20 4f 6b 20 74 6f 20 73 74 61 72 74 20  its Ok to start 
5f10: 61 0a 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  a.# transaction 
5f20: 77 68 69 6c 65 20 6f 74 68 65 72 20 56 4d 73 20  while other VMs 
5f30: 61 72 65 20 61 63 74 69 76 65 2c 20 61 6e 64 20  are active, and 
5f40: 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20 65  that its Ok to e
5f50: 78 65 63 75 74 65 0a 23 20 61 74 6f 6d 69 63 20  xecute.# atomic 
5f60: 75 70 64 61 74 65 73 20 69 6e 20 74 68 65 20 73  updates in the s
5f70: 61 6d 65 20 73 69 74 75 61 74 69 6f 6e 20 0a 23  ame situation .#
5f80: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5f90: 32 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  2.1 {.  set STMT
5fa0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
5fb0: 65 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20  e $DB "SELECT a 
5fc0: 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49 4c  FROM t2" -1 TAIL
5fd0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
5fe0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5ff0: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
6000: 70 69 33 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74  pi3-12.2 {.  cat
6010: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
6020: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
6030: 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a  S(3, NULL);.  }.
6040: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6050: 20 63 61 70 69 33 2d 31 32 2e 33 20 7b 0a 20 20   capi3-12.3 {.  
6060: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49  catchsql {.    I
6070: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
6080: 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b  LUES(4);.  }.} {
6090: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
60a0: 70 69 33 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74  pi3-12.4 {.  cat
60b0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
60c0: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
60d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20  TO t1 VALUES(4, 
60e0: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  NULL);.  }.} {0 
60f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
6100: 33 2d 31 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74  3-12.5 {.  sqlit
6110: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6120: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
6130: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 35 2e  test capi3-12.5.
6140: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  1 {.  sqlite3_st
6150: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
6160: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
6170: 63 61 70 69 33 2d 31 32 2e 36 20 7b 0a 20 20 73  capi3-12.6 {.  s
6180: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6190: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45  T.} {SQLITE_DONE
61a0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
61b0: 31 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.7 {.  sqlite3
61c0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
61d0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
61e0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 38  _test capi3-12.8
61f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6200: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53     COMMIT;.    S
6210: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 3b  ELECT a FROM t1;
6220: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d  .  }.} {1 2 3 4}
6230: 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 63  ..# Test cases c
6240: 61 70 69 33 2d 31 33 2e 2a 20 74 65 73 74 20 74  api3-13.* test t
6250: 68 65 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  he sqlite3_clear
6260: 5f 62 69 6e 64 69 6e 67 73 28 29 20 61 6e 64 20  _bindings() and 
6270: 0a 23 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  .# sqlite3_sleep
6280: 20 41 50 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c   APIs..#.if {[ll
6290: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d  ength [info comm
62a0: 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 63 6c 65  ands sqlite3_cle
62b0: 61 72 5f 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d  ar_bindings]]>0}
62c0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
62d0: 69 33 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78  i3-13.1 {.    ex
62e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45  ecsql {.      DE
62f0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
6300: 20 20 7d 0a 20 20 20 20 73 65 74 20 53 54 4d 54    }.    set STMT
6310: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6320: 65 20 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e  e $DB "INSERT IN
6330: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20  TO t1 VALUES(?, 
6340: 3f 29 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20  ?)" -1 TAIL].   
6350: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6360: 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  TMT.  } {SQLITE_
6370: 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  DONE}.  do_test 
6380: 63 61 70 69 33 2d 31 33 2e 32 20 7b 0a 20 20 20  capi3-13.2 {.   
6390: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
63a0: 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33  STMT.    sqlite3
63b0: 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54  _bind_text $STMT
63c0: 20 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73   1 hello 5.    s
63d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
63e0: 20 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35   $STMT 2 world 5
63f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
6400: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
6410: 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ITE_DONE}.  do_t
6420: 65 73 74 20 63 61 70 69 33 2d 31 33 2e 33 20 7b  est capi3-13.3 {
6430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
6440: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
6450: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
6460: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
6470: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6480: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
6490: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
64a0: 69 33 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73 71  i3-13-4 {.    sq
64b0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
64c0: 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71 6c  STMT.    execsql
64d0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
64e0: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d  * FROM t1;.    }
64f0: 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c 6c  .  } {{} {} hell
6500: 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d  o world {} {}}.}
6510: 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69  .if {[llength [i
6520: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c  nfo commands sql
6530: 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d 20  ite3_sleep]]>0} 
6540: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
6550: 33 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73 65 74  3-13-5 {.    set
6560: 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65   ms [sqlite3_sle
6570: 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70 72 20  ep 80].    expr 
6580: 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d  {$ms==80 || $ms=
6590: 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d  =1000}.  } {1}.}
65a0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32 31 39  ..# Ticket #1219
65b0: 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62 69 6e  :  Make sure bin
65c0: 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20 68 61  ding APIs can ha
65d0: 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  ndle a NULL poin
65e0: 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ter..#.do_test c
65f0: 61 70 69 33 2d 31 34 2e 31 2d 6d 69 73 75 73 65  api3-14.1-misuse
6600: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
6610: 63 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64  ch {sqlite3_bind
6620: 5f 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20  _text 0 1 hello 
6630: 35 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  5} msg].  lappen
6640: 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 53  d rc $msg.} {1 S
6650: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 0a 23  QLITE_MISUSE}..#
6660: 20 54 69 63 6b 65 74 20 23 31 36 35 30 3a 20 20   Ticket #1650:  
6670: 48 6f 6e 6f 72 20 74 68 65 20 6e 42 79 74 65 73  Honor the nBytes
6680: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
6690: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 2e 0a 23  lite3_prepare..#
66a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
66b0: 35 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  5.1 {.  set sql 
66c0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
66d0: 32 7d 0a 20 20 73 65 74 20 6e 62 79 74 65 73 20  2}.  set nbytes 
66e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
66f0: 73 71 6c 5d 0a 20 20 61 70 70 65 6e 64 20 73 71  sql].  append sq
6700: 6c 20 7b 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a  l { WHERE a==1}.
6710: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6720: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
6730: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
6740: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
6750: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
6760: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
6770: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
6780: 73 74 20 63 61 70 69 33 2d 31 35 2e 32 20 7b 0a  st capi3-15.2 {.
6790: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
67a0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
67b0: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
67c0: 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  0.} {2}.do_test 
67d0: 63 61 70 69 33 2d 31 35 2e 33 20 7b 0a 20 20 73  capi3-15.3 {.  s
67e0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
67f0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
6800: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
6810: 33 2d 31 35 2e 34 20 7b 0a 20 20 23 20 20 20 20  3-15.4 {.  #    
6820: 20 20 20 20 31 32 33 34 35 36 37 38 39 20 31 32      123456789 12
6830: 33 34 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20  34567.  set sql 
6840: 7b 53 45 4c 45 43 54 20 31 32 33 34 35 36 37 38  {SELECT 12345678
6850: 39 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  90}.  set STMT [
6860: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
6870: 24 44 42 20 24 73 71 6c 20 38 20 54 41 49 4c 5d  $DB $sql 8 TAIL]
6880: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6890: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b  $STMT.  set v1 [
68a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
68b0: 6e 74 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71  nt $STMT 0].  sq
68c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
68d0: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20  STMT.  set v1.} 
68e0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
68f0: 33 2d 31 35 2e 35 20 7b 0a 20 20 23 20 20 20 20  3-15.5 {.  #    
6900: 20 20 20 20 31 32 33 34 35 36 37 38 39 20 31 32      123456789 12
6910: 33 34 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20  34567.  set sql 
6920: 7b 53 45 4c 45 43 54 20 31 32 33 34 35 36 37 38  {SELECT 12345678
6930: 39 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  90}.  set STMT [
6940: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
6950: 24 44 42 20 24 73 71 6c 20 39 20 54 41 49 4c 5d  $DB $sql 9 TAIL]
6960: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6970: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b  $STMT.  set v1 [
6980: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6990: 6e 74 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71  nt $STMT 0].  sq
69a0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
69b0: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20  STMT.  set v1.} 
69c0: 7b 31 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  {12}.do_test cap
69d0: 69 33 2d 31 35 2e 36 20 7b 0a 20 20 23 20 20 20  i3-15.6 {.  #   
69e0: 20 20 20 20 20 31 32 33 34 35 36 37 38 39 20 31       123456789 1
69f0: 32 33 34 35 36 37 0a 20 20 73 65 74 20 73 71 6c  234567.  set sql
6a00: 20 7b 53 45 4c 45 43 54 20 31 32 33 34 35 36 37   {SELECT 1234567
6a10: 38 39 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  890}.  set STMT 
6a20: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6a30: 20 24 44 42 20 24 73 71 6c 20 31 32 20 54 41 49   $DB $sql 12 TAI
6a40: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
6a50: 70 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31  p $STMT.  set v1
6a60: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
6a70: 5f 69 6e 74 20 24 53 54 4d 54 20 30 5d 0a 20 20  _int $STMT 0].  
6a80: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6a90: 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a   $STMT.  set v1.
6aa0: 7d 20 7b 31 32 33 34 35 7d 0a 64 6f 5f 74 65 73  } {12345}.do_tes
6ab0: 74 20 63 61 70 69 33 2d 31 35 2e 37 20 7b 0a 20  t capi3-15.7 {. 
6ac0: 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36   #        123456
6ad0: 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65  789 1234567.  se
6ae0: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  t sql {SELECT 12
6af0: 2e 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74  .34567890}.  set
6b00: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6b10: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6b20: 31 32 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  12 TAIL].  sqlit
6b30: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6b40: 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f  set v1 [sqlite3_
6b50: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53  column_double $S
6b60: 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33  TMT 0].  sqlite3
6b70: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6b80: 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33    set v1.} {12.3
6b90: 34 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  4}.do_test capi3
6ba0: 2d 31 35 2e 38 20 7b 0a 20 20 23 20 20 20 20 20  -15.8 {.  #     
6bb0: 20 20 20 31 32 33 34 35 36 37 38 39 20 31 32 33     123456789 123
6bc0: 34 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b  4567.  set sql {
6bd0: 53 45 4c 45 43 54 20 31 32 2e 33 34 35 36 37 38  SELECT 12.345678
6be0: 39 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  90}.  set STMT [
6bf0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
6c00: 24 44 42 20 24 73 71 6c 20 31 34 20 54 41 49 4c  $DB $sql 14 TAIL
6c10: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
6c20: 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20   $STMT.  set v1 
6c30: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
6c40: 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a  double $STMT 0].
6c50: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6c60: 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76  ze $STMT.  set v
6c70: 31 0a 7d 20 7b 31 32 2e 33 34 35 36 7d 0a 0a 23  1.} {12.3456}..#
6c80: 20 4d 61 6b 65 20 73 75 72 65 20 63 6f 64 65 20   Make sure code 
6c90: 69 73 20 61 6c 77 61 79 73 20 67 65 6e 65 72 61  is always genera
6ca0: 74 65 64 20 65 76 65 6e 20 69 66 20 61 6e 20 49  ted even if an I
6cb0: 46 20 45 58 49 53 54 53 20 6f 72 20 0a 23 20 49  F EXISTS or .# I
6cc0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
6cd0: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 74  use is present t
6ce0: 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 64 6f  hat the table do
6cf0: 65 73 20 6e 6f 74 20 6f 72 0a 23 20 64 6f 65 73  es not or.# does
6d00: 20 65 78 69 73 74 73 2e 20 20 54 68 61 74 20 77   exists.  That w
6d10: 61 79 20 77 65 20 77 69 6c 6c 20 61 6c 77 61 79  ay we will alway
6d20: 73 20 68 61 76 65 20 61 20 70 72 65 70 61 72 65  s have a prepare
6d30: 64 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 74 6f  d statement.# to
6d40: 20 65 78 70 69 72 65 20 77 68 65 6e 20 74 68 65   expire when the
6d50: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
6d60: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .#.do_test capi3
6d70: 2d 31 36 2e 31 20 7b 0a 20 20 73 65 74 20 73 71  -16.1 {.  set sq
6d80: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 49 46  l {DROP TABLE IF
6d90: 20 45 58 49 53 54 53 20 74 33 7d 0a 20 20 73 65   EXISTS t3}.  se
6da0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6db0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
6dc0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
6dd0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6de0: 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54  MT.  expr {$STMT
6df0: 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  !=""}.} {1}.do_t
6e00: 65 73 74 20 63 61 70 69 33 2d 31 36 2e 32 20 7b  est capi3-16.2 {
6e10: 0a 20 20 73 65 74 20 73 71 6c 20 7b 43 52 45 41  .  set sql {CREA
6e20: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
6e30: 45 58 49 53 54 53 20 74 31 28 78 2c 79 29 7d 0a  EXISTS t1(x,y)}.
6e40: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6e50: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
6e60: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6e70: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6e80: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6e90: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
6ea0: 0a 23 20 42 75 74 20 73 74 69 6c 6c 20 77 65 20  .# But still we 
6eb0: 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 20  do not generate 
6ec0: 63 6f 64 65 20 69 66 20 74 68 65 72 65 20 69 73  code if there is
6ed0: 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73   no SQL.#.do_tes
6ee0: 74 20 63 61 70 69 33 2d 31 36 2e 33 20 7b 0a 20  t capi3-16.3 {. 
6ef0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6f00: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
6f10: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  } -1 TAIL].  sql
6f20: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
6f30: 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d  TMT.  expr {$STM
6f40: 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  T==""}.} {1}.do_
6f50: 74 65 73 74 20 63 61 70 69 33 2d 31 36 2e 34 20  test capi3-16.4 
6f60: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
6f70: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6f80: 42 20 7b 3b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  B {;} -1 TAIL]. 
6f90: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6fa0: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
6fb0: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
6fc0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 34 32 36  ..# Ticket #2426
6fd0: 3a 20 20 4d 69 73 75 73 65 20 6f 66 20 73 71 6c  :  Misuse of sql
6fe0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 20 62 79  ite3_column_* by
6ff0: 20 63 61 6c 6c 69 6e 67 20 69 74 20 61 66 74 65   calling it afte
7000: 72 0a 23 20 61 20 73 71 6c 69 74 65 33 5f 72 65  r.# a sqlite3_re
7010: 73 65 74 20 73 68 6f 75 6c 64 20 62 65 20 68 61  set should be ha
7020: 72 6d 6c 65 73 73 2e 0a 23 0a 64 6f 5f 74 65 73  rmless..#.do_tes
7030: 74 20 63 61 70 69 33 2d 31 37 2e 31 20 7b 0a 20  t capi3-17.1 {. 
7040: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
7050: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
7060: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
7070: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  } -1 TAIL].  sql
7080: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7090: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
70a0: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b  _int $STMT 0.} {
70b0: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
70c0: 2d 31 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -17.2 {.  sqlite
70d0: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
70e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
70f0: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 30 7d  nt $STMT 0.} {0}
7100: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
7110: 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  7.3 {.  sqlite3_
7120: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
7130: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20   {SQLITE_OK}..# 
7140: 56 65 72 69 66 79 20 74 68 61 74 20 73 71 6c 69  Verify that sqli
7150: 74 65 33 5f 73 74 65 70 28 29 20 66 61 69 6c 73  te3_step() fails
7160: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
7170: 53 43 48 45 4d 41 20 65 72 72 6f 72 0a 23 20 77  SCHEMA error.# w
7180: 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hen the statemen
7190: 74 20 69 73 20 70 72 65 70 61 72 65 64 20 77 69  t is prepared wi
71a0: 74 68 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  th sqlite3_prepa
71b0: 72 65 28 29 20 28 6e 6f 74 0a 23 20 73 71 6c 69  re() (not.# sqli
71c0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
71d0: 29 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  ) and the schema
71e0: 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 23 0a   has changed..#.
71f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38  do_test capi3-18
7200: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
7210: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
7220: 20 64 62 20 7b 53 45 4c 45 43 54 20 2a 20 46 52   db {SELECT * FR
7230: 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a  OM t2} -1 TAIL].
7240: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
7250: 73 74 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c  st.db.  db2 eval
7260: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
7270: 33 28 78 29 7d 0a 20 20 64 62 32 20 63 6c 6f 73  3(x)}.  db2 clos
7280: 65 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  e.  sqlite3_step
7290: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
72a0: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
72b0: 63 61 70 69 33 2d 31 38 2e 32 20 7b 0a 20 20 73  capi3-18.2 {.  s
72c0: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
72d0: 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72  MT.  sqlite3_err
72e0: 63 6f 64 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54  code db.} {SQLIT
72f0: 45 5f 53 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73  E_SCHEMA}.do_tes
7300: 74 20 63 61 70 69 33 2d 31 38 2e 33 20 7b 0a 20  t capi3-18.3 {. 
7310: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
7320: 64 62 0a 7d 20 7b 64 61 74 61 62 61 73 65 20 73  db.} {database s
7330: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
7340: 64 7d 0a 23 20 54 68 65 20 65 72 72 6f 72 20 70  d}.# The error p
7350: 65 72 73 69 73 74 20 6f 6e 20 72 65 74 72 79 20  ersist on retry 
7360: 77 68 65 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  when sqlite3_pre
7370: 70 61 72 65 28 29 20 68 61 73 20 62 65 65 6e 20  pare() has been 
7380: 75 73 65 64 2e 0a 64 6f 5f 74 65 73 74 20 63 61  used..do_test ca
7390: 70 69 33 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c  pi3-18.4 {.  sql
73a0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
73b0: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
73c0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
73d0: 38 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.5 {.  sqlite3_
73e0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 73 71  reset $STMT.  sq
73f0: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64 62  lite3_errcode db
7400: 0a 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d  .} {SQLITE_SCHEM
7410: 41 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  A}.do_test capi3
7420: 2d 31 38 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -18.6 {.  sqlite
7430: 33 5f 65 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64  3_errmsg db.} {d
7440: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
7450: 61 73 20 63 68 61 6e 67 65 64 7d 0a 73 71 6c 69  as changed}.sqli
7460: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
7470: 4d 54 0a 0a 23 20 54 69 63 6b 65 74 20 23 33 31  MT..# Ticket #31
7480: 33 34 2e 20 20 50 72 65 70 61 72 65 20 61 20 73  34.  Prepare a s
7490: 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e  tatement with an
74a0: 20 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74 65   nBytes paramete
74b0: 72 20 6f 66 20 30 2e 0a 23 20 4d 61 6b 65 20 73  r of 0..# Make s
74c0: 75 72 65 20 74 68 69 73 20 77 6f 72 6b 73 20 63  ure this works c
74d0: 6f 72 72 65 63 74 6c 79 20 61 6e 64 20 64 6f 65  orrectly and doe
74e0: 73 20 6e 6f 74 20 72 65 66 65 72 65 6e 63 65 20  s not reference 
74f0: 6d 65 6d 6f 72 79 20 6f 75 74 20 6f 66 0a 23 20  memory out of.# 
7500: 72 61 6e 67 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  range..#.do_test
7510: 20 63 61 70 69 33 2d 31 39 2e 31 20 7b 0a 20 20   capi3-19.1 {.  
7520: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
7530: 74 6b 74 33 31 33 34 20 64 62 0a 7d 20 7b 7d 0a  tkt3134 db.} {}.
7540: 0a 23 20 54 65 73 74 73 20 6f 66 20 74 68 65 20  .# Tests of the 
7550: 69 6e 74 65 72 66 61 63 65 20 77 68 65 6e 20 6e  interface when n
7560: 6f 20 56 46 53 20 69 73 20 72 65 67 69 73 74 65  o VFS is registe
7570: 72 65 64 2e 0a 23 0a 69 66 20 7b 21 5b 69 6e 66  red..#.if {![inf
7580: 6f 20 65 78 69 73 74 73 20 74 65 73 74 65 72 5f  o exists tester_
7590: 64 6f 5f 62 69 6e 61 72 79 6c 6f 67 5d 7d 20 7b  do_binarylog]} {
75a0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 76 66  .  db close.  vf
75b0: 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c  s_unregister_all
75c0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
75d0: 2d 32 30 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69  -20.1 {.    sqli
75e0: 74 65 33 5f 73 6c 65 65 70 20 31 30 30 0a 20 20  te3_sleep 100.  
75f0: 7d 20 7b 30 7d 0a 20 20 76 66 73 5f 72 65 72 65  } {0}.  vfs_rere
7600: 67 69 73 74 65 72 5f 61 6c 6c 0a 7d 0a 0a 66 69  gister_all.}..fi
7610: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.