/ Hex Artifact Content
Login

Artifact 4063c4be79fb00704154a1e459a38364de9162a9:


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 34 37 20  pi3.test,v 1.47 
0200: 32 30 30 37 2f 30 31 2f 30 33 20 32 33 3a 33 37  2007/01/03 23:37
0210: 3a 32 39 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :29 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 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.2 {.  sqlite3
0740: 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b  _errcode $DB.} {
0750: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
0760: 73 74 20 63 61 70 69 33 2d 31 2e 33 20 7b 0a 20  st capi3-1.3 {. 
0770: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
0780: 24 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65 72  $DB.} {not an er
0790: 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ror}.do_test cap
07a0: 69 33 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20 73  i3-1.4 {.  set s
07b0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
07c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
07d0: 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20  er;SELECT 10}.  
07e0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
07f0: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73  3_prepare $DB $s
0800: 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ql -1 TAIL].  sq
0810: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0820: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0830: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64 6f  } {SELECT 10}.do
0840: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 35 20  _test capi3-1.5 
0850: 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  {.  set sql {SEL
0860: 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20 73  ECT namex FROM s
0870: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20  qlite_master}.  
0880: 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20  catch {.    set 
0890: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
08a0: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d  epare $DB $sql -
08b0: 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b 31  1 TAIL].  }.} {1
08c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
08d0: 31 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.6 {.  sqlite3_
08e0: 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53  errcode $DB.} {S
08f0: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
0900: 74 65 73 74 20 63 61 70 69 33 2d 31 2e 37 20 7b  test capi3-1.7 {
0910: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  .  sqlite3_errms
0920: 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68  g $DB.} {no such
0930: 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a   column: namex}.
0940: 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31  .ifcapable {utf1
0950: 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  6} {.  do_test c
0960: 61 70 69 33 2d 32 2e 31 20 7b 0a 20 20 20 20 73  api3-2.1 {.    s
0970: 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31 36 20  et sql16 [utf16 
0980: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0990: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
09a0: 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  ].    set STMT [
09b0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
09c0: 36 20 24 44 42 20 24 73 71 6c 31 36 20 2d 31 20  6 $DB $sql16 -1 
09d0: 3a 3a 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69  ::TAIL].    sqli
09e0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
09f0: 4d 54 0a 20 20 20 20 75 74 66 38 20 24 3a 3a 54  MT.    utf8 $::T
0a00: 41 49 4c 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  AIL.  } {}.  do_
0a10: 74 65 73 74 20 63 61 70 69 33 2d 32 2e 32 20 7b  test capi3-2.2 {
0a20: 0a 20 20 20 20 73 65 74 20 73 71 6c 20 5b 75 74  .    set sql [ut
0a30: 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  f16 {SELECT name
0a40: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0a50: 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 5d 0a  ter;SELECT 10}].
0a60: 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71      set STMT [sq
0a70: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20  lite3_prepare16 
0a80: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
0a90: 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  ].    sqlite3_fi
0aa0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20  nalize $STMT.   
0ab0: 20 75 74 66 38 20 24 54 41 49 4c 0a 20 20 7d 20   utf8 $TAIL.  } 
0ac0: 7b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20 64 6f  {SELECT 10}.  do
0ad0: 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 33 20  _test capi3-2.3 
0ae0: 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 20 5b 75  {.    set sql [u
0af0: 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d  tf16 {SELECT nam
0b00: 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ex FROM sqlite_m
0b10: 61 73 74 65 72 7d 5d 0a 20 20 20 20 63 61 74 63  aster}].    catc
0b20: 68 20 7b 0a 20 20 20 20 20 20 73 65 74 20 53 54  h {.      set ST
0b30: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
0b40: 61 72 65 31 36 20 24 44 42 20 24 73 71 6c 20 2d  are16 $DB $sql -
0b50: 31 20 54 41 49 4c 5d 0a 20 20 20 20 7d 0a 20 20  1 TAIL].    }.  
0b60: 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {1}.  do_test 
0b70: 63 61 70 69 33 2d 32 2e 34 20 7b 0a 20 20 20 20  capi3-2.4 {.    
0b80: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
0b90: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
0ba0: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
0bb0: 20 63 61 70 69 33 2d 32 2e 35 20 7b 0a 20 20 20   capi3-2.5 {.   
0bc0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
0bd0: 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75 63 68  $DB.  } {no such
0be0: 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a   column: namex}.
0bf0: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73 63 68  .  ifcapable sch
0c00: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ema_pragmas {.  
0c10: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
0c20: 32 2e 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63  2.6 {.      exec
0c30: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
0c40: 45 20 74 61 62 6c 65 6e 61 6d 65 28 78 29 7d 0a  E tablename(x)}.
0c50: 20 20 20 20 20 20 73 65 74 20 73 71 6c 31 36 20        set sql16 
0c60: 5b 75 74 66 31 36 20 7b 50 52 41 47 4d 41 20 74  [utf16 {PRAGMA t
0c70: 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62 6c 65  able_info("Table
0c80: 4e 61 6d 65 22 29 7d 5d 0a 20 20 20 20 20 20 73  Name")}].      s
0c90: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
0ca0: 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20 24  _prepare16 $DB $
0cb0: 73 71 6c 31 36 20 2d 31 20 54 41 49 4c 5d 0a 20  sql16 -1 TAIL]. 
0cc0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65       sqlite3_ste
0cd0: 70 20 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51  p $STMT.    } SQ
0ce0: 4c 49 54 45 5f 52 4f 57 0a 20 20 20 20 64 6f 5f  LITE_ROW.    do_
0cf0: 74 65 73 74 20 63 61 70 69 33 2d 32 2e 37 20 7b  test capi3-2.7 {
0d00: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
0d10: 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20 7d 20  tep $STMT.    } 
0d20: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 20 20 20 20  SQLITE_DONE.    
0d30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0d40: 38 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  8 {.      sqlite
0d50: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
0d60: 0a 20 20 20 20 7d 20 53 51 4c 49 54 45 5f 4f 4b  .    } SQLITE_OK
0d70: 0a 20 20 7d 0a 0a 7d 20 3b 23 20 65 6e 64 69 66  .  }..} ;# endif
0d80: 20 75 74 66 31 36 0a 0a 23 20 72 65 6e 61 6d 65   utf16..# rename
0d90: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 73 71   sqlite3_open sq
0da0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 0a 23  lite3_open_old.#
0db0: 20 70 72 6f 63 20 73 71 6c 69 74 65 33 5f 6f 70   proc sqlite3_op
0dc0: 65 6e 20 7b 66 6e 61 6d 65 20 6f 70 74 69 6f 6e  en {fname option
0dd0: 73 7d 20 7b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  s} {sqlite3_open
0de0: 5f 6e 65 77 20 24 66 6e 61 6d 65 20 24 6f 70 74  _new $fname $opt
0df0: 69 6f 6e 73 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  ions}..do_test c
0e00: 61 70 69 33 2d 33 2e 31 20 7b 0a 20 20 73 65 74  api3-3.1 {.  set
0e10: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
0e20: 65 6e 20 74 65 73 74 2e 64 62 20 7b 7d 5d 0a 20  en test.db {}]. 
0e30: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
0e40: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
0e50: 4f 4b 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68  OK}.# FIX ME: Sh
0e60: 6f 75 6c 64 20 74 65 73 74 20 74 68 65 20 64 62  ould test the db
0e70: 20 68 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64   handle works..d
0e80: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 32  o_test capi3-3.2
0e90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
0ea0: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
0eb0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
0ec0: 70 69 33 2d 33 2e 33 20 7b 0a 20 20 63 61 74 63  pi3-3.3 {.  catc
0ed0: 68 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20  h {.    set db2 
0ee0: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 2f 62  [sqlite3_open /b
0ef0: 6f 67 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64  ogus/path/test.d
0f00: 62 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69  b {}].  }.  sqli
0f10: 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32  te3_errcode $db2
0f20: 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f  .} {SQLITE_CANTO
0f30: 50 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  PEN}.do_test cap
0f40: 69 33 2d 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74  i3-3.4 {.  sqlit
0f50: 65 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d  e3_errmsg $db2.}
0f60: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
0f70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a   database file}.
0f80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e  do_test capi3-3.
0f90: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  5 {.  sqlite3_cl
0fa0: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
0fb0: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63  TE_OK}.do_test c
0fc0: 61 70 69 33 2d 33 2e 36 2e 31 2d 6d 69 73 75 73  api3-3.6.1-misus
0fd0: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  e {.  sqlite3_cl
0fe0: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
0ff0: 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65  TE_MISUSE}.do_te
1000: 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 32 2d 6d  st capi3-3.6.2-m
1010: 69 73 75 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  isuse {.  sqlite
1020: 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20  3_errmsg $db2.} 
1030: 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65  {library routine
1040: 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73   called out of s
1050: 65 71 75 65 6e 63 65 7d 0a 69 66 63 61 70 61 62  equence}.ifcapab
1060: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64  le {utf16} {.  d
1070: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 36  o_test capi3-3.6
1080: 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20  .3-misuse {.    
1090: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
10a0: 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 20 20 7d  rmsg16 $db2].  }
10b0: 20 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   {library routin
10c0: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
10d0: 73 65 71 75 65 6e 63 65 7d 0a 7d 0a 0a 23 20 72  sequence}.}..# r
10e0: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
10f0: 65 6e 20 22 22 0a 23 20 72 65 6e 61 6d 65 20 73  en "".# rename s
1100: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 20  qlite3_open_old 
1110: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a 0a 69 66  sqlite3_open..if
1120: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1130: 7b 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  {.do_test capi3-
1140: 34 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20  4.1 {.  set db2 
1150: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20  [sqlite3_open16 
1160: 5b 75 74 66 31 36 20 74 65 73 74 2e 64 62 5d 20  [utf16 test.db] 
1170: 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  {}].  sqlite3_er
1180: 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51  rcode $db2.} {SQ
1190: 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d  LITE_OK}.# FIX M
11a0: 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74  E: Should test t
11b0: 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72  he db handle wor
11c0: 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ks..do_test capi
11d0: 33 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  3-4.2 {.  sqlite
11e0: 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b  3_close $db2.} {
11f0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
1200: 73 74 20 63 61 70 69 33 2d 34 2e 33 20 7b 0a 20  st capi3-4.3 {. 
1210: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
1220: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
1230: 65 6e 31 36 20 5b 75 74 66 31 36 20 2f 62 6f 67  en16 [utf16 /bog
1240: 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 5d  us/path/test.db]
1250: 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74   {}].  }.  sqlit
1260: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
1270: 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  } {SQLITE_CANTOP
1280: 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  EN}.do_test capi
1290: 33 2d 34 2e 34 20 7b 0a 20 20 75 74 66 38 20 5b  3-4.4 {.  utf8 [
12a0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
12b0: 20 24 64 62 32 5d 0a 7d 20 7b 75 6e 61 62 6c 65   $db2].} {unable
12c0: 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73   to open databas
12d0: 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74 20  e file}.do_test 
12e0: 63 61 70 69 33 2d 34 2e 35 20 7b 0a 20 20 73 71  capi3-4.5 {.  sq
12f0: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32  lite3_close $db2
1300: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 7d  .} {SQLITE_OK}.}
1310: 20 3b 23 20 75 74 66 31 36 0a 0a 23 20 54 68 69   ;# utf16..# Thi
1320: 73 20 70 72 6f 63 20 69 73 20 75 73 65 64 20 74  s proc is used t
1330: 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f  o test the follo
1340: 77 69 6e 67 20 41 50 49 20 63 61 6c 6c 73 3a 0a  wing API calls:.
1350: 23 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  #.# sqlite3_colu
1360: 6d 6e 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74  mn_count.# sqlit
1370: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 0a 23  e3_column_name.#
1380: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1390: 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33  name16.# sqlite3
13a0: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
13b0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
13c0: 6e 5f 64 65 63 6c 74 79 70 65 31 36 0a 23 0a 23  n_decltype16.#.#
13d0: 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f 6d 70   $STMT is a comp
13e0: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
13f0: 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61 20 70  nt. $test is a p
1400: 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65 20 66  refix.# to use f
1410: 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69  or test names wi
1420: 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20  thin this proc. 
1430: 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69 73 74  $names is a list
1440: 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  .# of the column
1450: 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68 6f 75   names that shou
1460: 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 62  ld be returned b
1470: 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65 63 6c  y $STMT..# $decl
1480: 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74 20  types is a list 
1490: 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72  of column declar
14a0: 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f 72 20  ation types for 
14b0: 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61 6d 70  $STMT..#.# Examp
14c0: 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54 4d 54  le:.#.# set STMT
14d0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
14e0: 65 20 22 53 45 4c 45 43 54 20 31 2c 20 32 2c 20  e "SELECT 1, 2, 
14f0: 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20  2;" -1 DUMMY].# 
1500: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 74 65 73  check_header tes
1510: 74 31 2e 31 20 7b 31 20 32 20 33 7d 20 7b 22 22  t1.1 {1 2 3} {""
1520: 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f 63 20 63   "" ""}.#.proc c
1530: 68 65 63 6b 5f 68 65 61 64 65 72 20 7b 53 54 4d  heck_header {STM
1540: 54 20 74 65 73 74 20 6e 61 6d 65 73 20 64 65 63  T test names dec
1550: 6c 74 79 70 65 73 7d 20 7b 0a 0a 20 20 23 20 55  ltypes} {..  # U
1560: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
1570: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63  lue of sqlite3_c
1580: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f  olumn_count() to
1590: 20 62 75 69 6c 64 0a 20 20 23 20 61 20 6c 69 73   build.  # a lis
15a0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  t of column inde
15b0: 78 65 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c  xes. i.e. If sql
15c0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
15d0: 74 0a 20 20 23 20 69 73 20 33 2c 20 62 75 69 6c  t.  # is 3, buil
15e0: 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20 31 20  d the list {0 1 
15f0: 32 7d 2e 0a 20 20 73 65 74 20 3a 3a 69 64 78 6c  2}..  set ::idxl
1600: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  ist [list].  set
1610: 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69   ::numcols [sqli
1620: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1630: 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72 20 7b 73   $STMT].  for {s
1640: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a  et i 0} {$i < $:
1650: 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20  :numcols} {incr 
1660: 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64  i} {lappend ::id
1670: 78 6c 69 73 74 20 24 69 7d 0a 0a 20 20 23 20 43  xlist $i}..  # C
1680: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1690: 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24  TF-8.  do_test $
16a0: 74 65 73 74 2e 31 20 7b 0a 20 20 20 20 73 65 74  test.1 {.    set
16b0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
16c0: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ].    foreach i 
16d0: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
16e0: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
16f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1700: 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20   $STMT $i]} .   
1710: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
1720: 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23 20 43   } $names..  # C
1730: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1740: 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61 62 6c  TF-16.  ifcapabl
1750: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
1760: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20  do_test $test.2 
1770: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
1780: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
1790: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
17a0: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
17b0: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
17c0: 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33  t [utf8 [sqlite3
17d0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
17e0: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
17f0: 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  }.      set cnam
1800: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e 61 6d  elist.    } $nam
1810: 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f 6c 75  es.  }..  # Colu
1820: 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  mn names in UTF-
1830: 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73  8.  do_test $tes
1840: 74 2e 33 20 7b 0a 20 20 20 20 73 65 74 20 63 6e  t.3 {.    set cn
1850: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1860: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
1870: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 63  xlist {lappend c
1880: 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65  namelist [sqlite
1890: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53  3_column_name $S
18a0: 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20 20 73 65  TMT $i]} .    se
18b0: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20  t cnamelist.  } 
18c0: 24 6e 61 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75  $names..  # Colu
18d0: 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  mn names in UTF-
18e0: 31 36 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  16.  ifcapable {
18f0: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f  utf16} {.    do_
1900: 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b 0a 20  test $test.4 {. 
1910: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
1920: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
1930: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1940: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  st {.        lap
1950: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
1960: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
1970: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d  lumn_name16 $STM
1980: 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20  T $i]].      }. 
1990: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
19a0: 73 74 0a 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a  st.    } $names.
19b0: 20 20 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20    }..  # Column 
19c0: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20  names in UTF-8. 
19d0: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35   do_test $test.5
19e0: 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65   {.    set cname
19f0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
1a00: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1a10: 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d  st {lappend cnam
1a20: 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63  elist [sqlite3_c
1a30: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24  olumn_decltype $
1a40: 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20 20 73  STMT $i]} .    s
1a50: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d  et cnamelist.  }
1a60: 20 24 64 65 63 6c 74 79 70 65 73 0a 0a 20 20 23   $decltypes..  #
1a70: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
1a80: 69 6f 6e 20 74 79 70 65 73 20 69 6e 20 55 54 46  ion types in UTF
1a90: 2d 31 36 0a 20 20 69 66 63 61 70 61 62 6c 65 20  -16.  ifcapable 
1aa0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f  {utf16} {.    do
1ab0: 5f 74 65 73 74 20 24 74 65 73 74 2e 36 20 7b 0a  _test $test.6 {.
1ac0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
1ad0: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
1ae0: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
1af0: 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61  ist {.        la
1b00: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
1b10: 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63  [utf8 [sqlite3_c
1b20: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
1b30: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
1b40: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e    }.      set cn
1b50: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64  amelist.    } $d
1b60: 65 63 6c 74 79 70 65 73 0a 20 20 7d 0a 0a 0a 20  ecltypes.  }... 
1b70: 20 23 20 54 65 73 74 20 73 6f 6d 65 20 6f 75 74   # Test some out
1b80: 20 6f 66 20 72 61 6e 67 65 20 63 6f 6e 64 69 74   of range condit
1b90: 69 6f 6e 73 3a 0a 20 20 69 66 63 61 70 61 62 6c  ions:.  ifcapabl
1ba0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
1bb0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 37 20  do_test $test.7 
1bc0: 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5c 0a 20  {.      list \. 
1bd0: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1be0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d  column_name $STM
1bf0: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1c00: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1c10: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 2d 31 5d  name16 $STMT -1]
1c20: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
1c30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1c40: 79 70 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a  ype $STMT -1] \.
1c50: 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33          [sqlite3
1c60: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1c70: 31 36 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20  16 $STMT -1] \. 
1c80: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1c90: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d  column_name $STM
1ca0: 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20  T $numcols] \.  
1cb0: 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63        [sqlite3_c
1cc0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54  olumn_name16 $ST
1cd0: 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20  MT $numcols] \. 
1ce0: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1cf0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20  column_decltype 
1d00: 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20  $STMT $numcols] 
1d10: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1d20: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1d30: 70 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63  pe16 $STMT $numc
1d40: 6f 6c 73 5d 0a 20 20 20 20 7d 20 7b 7b 7d 20 7b  ols].    } {{} {
1d50: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d  } {} {} {} {} {}
1d60: 20 7b 7d 7d 0a 20 20 7d 0a 7d 20 0a 0a 23 20 54   {}}.  }.} ..# T
1d70: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
1d80: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
1d90: 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c 73  lowing API calls
1da0: 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  :.#.# sqlite3_co
1db0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
1dc0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1dd0: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 0a  n_origin_name16.
1de0: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
1df0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 0a 23 20 73 71  _table_name.# sq
1e00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
1e10: 6c 65 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  le_name16.# sqli
1e20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
1e30: 61 73 65 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  ase_name.# sqlit
1e40: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
1e50: 73 65 5f 6e 61 6d 65 31 36 0a 23 0a 23 20 24 53  se_name16.#.# $S
1e60: 54 4d 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  TMT is a compile
1e70: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
1e80: 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66   $test is a pref
1e90: 69 78 0a 23 20 74 6f 20 75 73 65 20 66 6f 72 20  ix.# to use for 
1ea0: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
1eb0: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 6e 61  n this proc. $na
1ec0: 6d 65 73 20 69 73 20 61 20 6c 69 73 74 0a 23 20  mes is a list.# 
1ed0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
1ee0: 6d 65 73 20 74 68 61 74 20 73 68 6f 75 6c 64 20  mes that should 
1ef0: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 24  be returned by $
1f00: 53 54 4d 54 2e 0a 23 20 24 64 65 63 6c 74 79 70  STMT..# $decltyp
1f10: 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  es is a list of 
1f20: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
1f30: 6f 6e 20 74 79 70 65 73 20 66 6f 72 20 24 53 54  on types for $ST
1f40: 4d 54 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a  MT..#.# Example:
1f50: 0a 23 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73  .#.# set STMT [s
1f60: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 22  qlite3_prepare "
1f70: 53 45 4c 45 43 54 20 31 2c 20 32 2c 20 32 3b 22  SELECT 1, 2, 2;"
1f80: 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65   -1 DUMMY].# che
1f90: 63 6b 5f 68 65 61 64 65 72 20 74 65 73 74 31 2e  ck_header test1.
1fa0: 31 20 7b 31 20 32 20 33 7d 20 7b 22 22 20 22 22  1 {1 2 3} {"" ""
1fb0: 20 22 22 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63   ""}.#.proc chec
1fc0: 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20  k_origin_header 
1fd0: 7b 53 54 4d 54 20 74 65 73 74 20 64 62 73 20 74  {STMT test dbs t
1fe0: 61 62 6c 65 73 20 63 6f 6c 73 7d 20 7b 0a 20 20  ables cols} {.  
1ff0: 23 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  # If sqlite3_col
2000: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
2010: 29 20 61 6e 64 20 66 72 69 65 6e 64 73 20 61 72  ) and friends ar
2020: 65 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 69  e not compiled i
2030: 6e 74 6f 0a 20 20 23 20 74 68 69 73 20 62 75 69  nto.  # this bui
2040: 6c 64 2c 20 74 68 69 73 20 70 72 6f 63 20 69 73  ld, this proc is
2050: 20 61 20 6e 6f 2d 6f 70 2e 0a 69 66 63 61 70 61   a no-op..ifcapa
2060: 62 6c 65 20 63 6f 6c 75 6d 6e 6d 65 74 61 64 61  ble columnmetada
2070: 74 61 20 7b 0a 0a 20 20 20 20 23 20 55 73 65 20  ta {..    # Use 
2080: 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
2090: 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   of sqlite3_colu
20a0: 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75  mn_count() to bu
20b0: 69 6c 64 0a 20 20 20 20 23 20 61 20 6c 69 73 74  ild.    # a list
20c0: 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
20d0: 65 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c 69  es. i.e. If sqli
20e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
20f0: 0a 20 20 20 20 23 20 69 73 20 33 2c 20 62 75 69  .    # is 3, bui
2100: 6c 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20 31  ld the list {0 1
2110: 20 32 7d 2e 0a 20 20 20 20 73 65 74 20 3a 3a 69   2}..    set ::i
2120: 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  dxlist [list].  
2130: 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20    set ::numcols 
2140: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2150: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 20  count $STMT].   
2160: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
2170: 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d  $i < $::numcols}
2180: 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65   {incr i} {lappe
2190: 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d  nd ::idxlist $i}
21a0: 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61  .  .    # Databa
21b0: 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  se names in UTF-
21c0: 38 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  8.    do_test $t
21d0: 65 73 74 2e 38 20 7b 0a 20 20 20 20 20 20 73 65  est.8 {.      se
21e0: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
21f0: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
2200: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
2210: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2220: 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  amelist [sqlite3
2230: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
2240: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a  _name $STMT $i].
2250: 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 73        } .      s
2260: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
2270: 20 7d 20 24 64 62 73 0a 20 20 0a 20 20 20 20 23   } $dbs.  .    #
2280: 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20   Database names 
2290: 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20 69 66  in UTF-16.    if
22a0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
22b0: 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  {.      do_test 
22c0: 24 74 65 73 74 2e 39 20 7b 0a 20 20 20 20 20 20  $test.9 {.      
22d0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
22e0: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66  [list].        f
22f0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
2300: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61  t {.          la
2310: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
2320: 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63  [utf8 [sqlite3_c
2330: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
2340: 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ame16 $STMT $i]]
2350: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2360: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
2370: 0a 20 20 20 20 20 20 7d 20 24 64 62 73 0a 20 20  .      } $dbs.  
2380: 20 20 7d 0a 20 20 0a 20 20 20 20 23 20 54 61 62    }.  .    # Tab
2390: 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  le names in UTF-
23a0: 38 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  8.    do_test $t
23b0: 65 73 74 2e 31 30 20 7b 0a 20 20 20 20 20 20 73  est.10 {.      s
23c0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
23d0: 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  st].      foreac
23e0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
23f0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
2400: 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65  namelist [sqlite
2410: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
2420: 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20  ame $STMT $i].  
2430: 20 20 20 20 7d 20 0a 20 20 20 20 20 20 73 65 74      } .      set
2440: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
2450: 20 24 74 61 62 6c 65 73 0a 20 20 0a 20 20 20 20   $tables.  .    
2460: 23 20 54 61 62 6c 65 20 6e 61 6d 65 73 20 69 6e  # Table names in
2470: 20 55 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61   UTF-16.    ifca
2480: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
2490: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74        do_test $t
24a0: 65 73 74 2e 31 31 20 7b 0a 20 20 20 20 20 20 20  est.11 {.       
24b0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
24c0: 6c 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f  list].        fo
24d0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
24e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70   {.          lap
24f0: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
2500: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
2510: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
2520: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
2530: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
2540: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
2550: 20 20 20 7d 20 24 74 61 62 6c 65 73 0a 20 20 20     } $tables.   
2560: 20 7d 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67   }.  .    # Orig
2570: 69 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  in names in UTF-
2580: 38 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  8.    do_test $t
2590: 65 73 74 2e 31 32 20 7b 0a 20 20 20 20 20 20 73  est.12 {.      s
25a0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
25b0: 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  st].      foreac
25c0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
25d0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
25e0: 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65  namelist [sqlite
25f0: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
2600: 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a 20  name $STMT $i]. 
2610: 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 73 65       } .      se
2620: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
2630: 7d 20 24 63 6f 6c 73 0a 20 20 0a 20 20 20 20 23  } $cols.  .    #
2640: 20 4f 72 69 67 69 6e 20 64 65 63 6c 61 72 61 74   Origin declarat
2650: 69 6f 6e 20 74 79 70 65 73 20 69 6e 20 55 54 46  ion types in UTF
2660: 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c  -16.    ifcapabl
2670: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
2680: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2690: 31 33 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  13 {.        set
26a0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
26b0: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
26c0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
26d0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
26e0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
26f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2700: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 20 24  _origin_name16 $
2710: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
2720: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20    }.        set 
2730: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20  cnamelist.      
2740: 7d 20 24 63 6f 6c 73 0a 20 20 20 20 7d 0a 20 20  } $cols.    }.  
2750: 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  }.}..# This proc
2760: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
2770: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
2780: 50 49 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33  PIs:.#.# sqlite3
2790: 5f 64 61 74 61 5f 63 6f 75 6e 74 0a 23 20 73 71  _data_count.# sq
27a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
27b0: 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e.# sqlite3_colu
27c0: 6d 6e 5f 69 6e 74 0a 23 20 73 71 6c 69 74 65 33  mn_int.# sqlite3
27d0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 0a 23 20 73  _column_text.# s
27e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
27f0: 78 74 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63  xt16.# sqlite3_c
2800: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 0a 23 0a 23  olumn_double.#.#
2810: 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f 6d 70   $STMT is a comp
2820: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
2830: 6e 74 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  nt for which the
2840: 20 70 72 65 76 69 6f 75 73 20 63 61 6c 6c 20 0a   previous call .
2850: 23 20 74 6f 20 73 71 6c 69 74 65 33 5f 73 74 65  # to sqlite3_ste
2860: 70 20 72 65 74 75 72 6e 65 64 20 53 51 4c 49 54  p returned SQLIT
2870: 45 5f 52 4f 57 2e 20 24 74 65 73 74 20 69 73 20  E_ROW. $test is 
2880: 61 20 70 72 65 66 69 78 20 74 6f 20 75 73 65 20  a prefix to use 
2890: 0a 23 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65  .# for test name
28a0: 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70 72  s within this pr
28b0: 6f 63 2e 20 24 74 79 70 65 73 20 69 73 20 61 20  oc. $types is a 
28c0: 6c 69 73 74 20 6f 66 20 74 68 65 20 0a 23 20 6d  list of the .# m
28d0: 61 6e 69 66 65 73 74 20 74 79 70 65 73 20 66 6f  anifest types fo
28e0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
28f0: 77 2e 20 24 69 6e 74 73 2c 20 24 64 6f 75 62 6c  w. $ints, $doubl
2900: 65 73 20 61 6e 64 20 24 73 74 72 69 6e 67 73 0a  es and $strings.
2910: 23 20 61 72 65 20 6c 69 73 74 73 20 6f 66 20 74  # are lists of t
2920: 68 65 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  he integer, real
2930: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 70 72   and string repr
2940: 65 73 65 6e 74 61 74 69 6f 6e 73 20 6f 66 0a 23  esentations of.#
2950: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
2960: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0a  he current row..
2970: 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23  #.# Example:.#.#
2980: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
2990: 65 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45  e3_prepare "SELE
29a0: 43 54 20 27 68 65 6c 6c 6f 27 2c 20 31 2e 31 2c  CT 'hello', 1.1,
29b0: 20 4e 55 4c 4c 22 20 2d 31 20 44 55 4d 4d 59 5d   NULL" -1 DUMMY]
29c0: 0a 23 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .# sqlite3_step 
29d0: 24 53 54 4d 54 0a 23 20 63 68 65 63 6b 5f 64 61  $STMT.# check_da
29e0: 74 61 20 74 65 73 74 31 2e 32 20 7b 54 45 58 54  ta test1.2 {TEXT
29f0: 20 52 45 41 4c 20 4e 55 4c 4c 7d 20 7b 30 20 31   REAL NULL} {0 1
2a00: 20 30 7d 20 7b 30 20 31 2e 31 20 30 7d 20 7b 68   0} {0 1.1 0} {h
2a10: 65 6c 6c 6f 20 31 2e 31 20 7b 7d 7d 0a 23 0a 70  ello 1.1 {}}.#.p
2a20: 72 6f 63 20 63 68 65 63 6b 5f 64 61 74 61 20 7b  roc check_data {
2a30: 53 54 4d 54 20 74 65 73 74 20 74 79 70 65 73 20  STMT test types 
2a40: 69 6e 74 73 20 64 6f 75 62 6c 65 73 20 73 74 72  ints doubles str
2a50: 69 6e 67 73 7d 20 7b 0a 0a 20 20 23 20 55 73 65  ings} {..  # Use
2a60: 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
2a70: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  e of sqlite3_col
2a80: 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62  umn_count() to b
2a90: 75 69 6c 64 0a 20 20 23 20 61 20 6c 69 73 74 20  uild.  # a list 
2aa0: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
2ab0: 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c 69 74  s. i.e. If sqlit
2ac0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a  e3_column_count.
2ad0: 20 20 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20    # is 3, build 
2ae0: 74 68 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d  the list {0 1 2}
2af0: 2e 0a 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73  ..  set ::idxlis
2b00: 74 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 6e  t [list].  set n
2b10: 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f  umcols [sqlite3_
2b20: 64 61 74 61 5f 63 6f 75 6e 74 20 24 53 54 4d 54  data_count $STMT
2b30: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
2b40: 7d 20 7b 24 69 20 3c 20 24 6e 75 6d 63 6f 6c 73  } {$i < $numcols
2b50: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70  } {incr i} {lapp
2b60: 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69  end ::idxlist $i
2b70: 7d 0a 0a 23 20 74 79 70 65 73 0a 64 6f 5f 74 65  }..# types.do_te
2b80: 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20 73  st $test.1 {.  s
2b90: 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a  et types [list].
2ba0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
2bb0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 74 79  list {lappend ty
2bc0: 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  pes [sqlite3_col
2bd0: 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54 20 24  umn_type $STMT $
2be0: 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a  i]}.  set types.
2bf0: 7d 20 24 74 79 70 65 73 0a 0a 23 20 49 6e 74 65  } $types..# Inte
2c00: 67 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  gers.do_test $te
2c10: 73 74 2e 32 20 7b 0a 20 20 73 65 74 20 69 6e 74  st.2 {.  set int
2c20: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
2c30: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
2c40: 61 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c  append ints [sql
2c50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
2c60: 34 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  4 $STMT $i]}.  s
2c70: 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a  et ints.} $ints.
2c80: 0a 23 20 62 79 74 65 73 0a 73 65 74 20 6c 65 6e  .# bytes.set len
2c90: 73 20 5b 6c 69 73 74 5d 0a 66 6f 72 65 61 63 68  s [list].foreach
2ca0: 20 69 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a   i $::idxlist {.
2cb0: 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b    lappend lens [
2cc0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c  string length [l
2cd0: 69 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24  index $strings $
2ce0: 69 5d 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 24 74  i]].}.do_test $t
2cf0: 65 73 74 2e 33 20 7b 0a 20 20 73 65 74 20 62 79  est.3 {.  set by
2d00: 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  tes [list].  set
2d10: 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66   lens [list].  f
2d20: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
2d30: 74 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  t {.    lappend 
2d40: 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  bytes [sqlite3_c
2d50: 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 24 53 54 4d  olumn_bytes $STM
2d60: 54 20 24 69 5d 0a 20 20 7d 0a 20 20 73 65 74 20  T $i].  }.  set 
2d70: 62 79 74 65 73 0a 7d 20 24 6c 65 6e 73 0a 0a 23  bytes.} $lens..#
2d80: 20 62 79 74 65 73 31 36 0a 69 66 63 61 70 61 62   bytes16.ifcapab
2d90: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 73  le {utf16} {.  s
2da0: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20  et lens [list]. 
2db0: 20 66 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64   foreach i $::id
2dc0: 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70  xlist {.    lapp
2dd0: 65 6e 64 20 6c 65 6e 73 20 5b 65 78 70 72 20 32  end lens [expr 2
2de0: 20 2a 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74   * [string lengt
2df0: 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e  h [lindex $strin
2e00: 67 73 20 24 69 5d 5d 5d 0a 20 20 7d 0a 20 20 64  gs $i]]].  }.  d
2e10: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b  o_test $test.4 {
2e20: 0a 20 20 20 20 73 65 74 20 62 79 74 65 73 20 5b  .    set bytes [
2e30: 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 6c 65  list].    set le
2e40: 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  ns [list].    fo
2e50: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
2e60: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
2e70: 20 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f   bytes [sqlite3_
2e80: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 24  column_bytes16 $
2e90: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 7d 0a 20  STMT $i].    }. 
2ea0: 20 20 20 73 65 74 20 62 79 74 65 73 0a 20 20 7d     set bytes.  }
2eb0: 20 24 6c 65 6e 73 0a 7d 0a 0a 23 20 42 6c 6f 62   $lens.}..# Blob
2ec0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35  .do_test $test.5
2ed0: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
2ee0: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
2ef0: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
2f00: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
2f10: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24 53 54  _column_blob $ST
2f20: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
2f30: 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23  f8.} $strings..#
2f40: 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24   UTF-8.do_test $
2f50: 74 65 73 74 2e 36 20 7b 0a 20 20 73 65 74 20 75  test.6 {.  set u
2f60: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
2f70: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2f80: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
2f90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
2fa0: 78 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20  xt $STMT $i]}.  
2fb0: 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69  set utf8.} $stri
2fc0: 6e 67 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f  ngs..# Floats.do
2fd0: 5f 74 65 73 74 20 24 74 65 73 74 2e 37 20 7b 0a  _test $test.7 {.
2fe0: 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74    set utf8 [list
2ff0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
3000: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
3010: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
3020: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d  lumn_double $STM
3030: 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66  T $i]}.  set utf
3040: 38 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20  8.} $doubles..# 
3050: 55 54 46 2d 31 36 0a 69 66 63 61 70 61 62 6c 65  UTF-16.ifcapable
3060: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f   {utf16} {.  do_
3070: 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a 20  test $test.8 {. 
3080: 20 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73     set utf8 [lis
3090: 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69  t].    foreach i
30a0: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
30b0: 6e 64 20 75 74 66 38 20 5b 75 74 66 38 20 5b 73  nd utf8 [utf8 [s
30c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
30d0: 78 74 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 7d  xt16 $STMT $i]]}
30e0: 0a 20 20 20 20 73 65 74 20 75 74 66 38 0a 20 20  .    set utf8.  
30f0: 7d 20 24 73 74 72 69 6e 67 73 0a 7d 0a 0a 23 20  } $strings.}..# 
3100: 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74  Integers.do_test
3110: 20 24 74 65 73 74 2e 39 20 7b 0a 20 20 73 65 74   $test.9 {.  set
3120: 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66   ints [list].  f
3130: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
3140: 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20  t {lappend ints 
3150: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3160: 69 6e 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  int $STMT $i]}. 
3170: 20 73 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74   set ints.} $int
3180: 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74  s..# Floats.do_t
3190: 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20  est $test.10 {. 
31a0: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
31b0: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
31c0: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
31d0: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
31e0: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
31f0: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
3200: 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55  .} $doubles..# U
3210: 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65  TF-8.do_test $te
3220: 73 74 2e 31 31 20 7b 0a 20 20 73 65 74 20 75 74  st.11 {.  set ut
3230: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
3240: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3250: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3260: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
3270: 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  t $STMT $i]}.  s
3280: 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e  et utf8.} $strin
3290: 67 73 0a 0a 23 20 54 79 70 65 73 0a 64 6f 5f 74  gs..# Types.do_t
32a0: 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20  est $test.12 {. 
32b0: 20 73 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74   set types [list
32c0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
32d0: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
32e0: 74 79 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  types [sqlite3_c
32f0: 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54  olumn_type $STMT
3300: 20 24 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65   $i]}.  set type
3310: 73 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20 54 65  s.} $types..# Te
3320: 73 74 20 74 68 61 74 20 61 6e 20 6f 75 74 20 6f  st that an out o
3330: 66 20 72 61 6e 67 65 20 72 65 71 75 65 73 74 20  f range request 
3340: 72 65 74 75 72 6e 73 20 74 68 65 20 65 71 75 69  returns the equi
3350: 76 61 6c 65 6e 74 20 6f 66 20 4e 55 4c 4c 0a 64  valent of NULL.d
3360: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20  o_test $test.13 
3370: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
3380: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 2d 31 0a  mn_int $STMT -1.
3390: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 24 74  } {0}.do_test $t
33a0: 65 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74  est.13 {.  sqlit
33b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
33c0: 53 54 4d 54 20 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a  STMT -1.} {}..}.
33d0: 0a 69 66 63 61 70 61 62 6c 65 20 21 66 6c 6f 61  .ifcapable !floa
33e0: 74 69 6e 67 70 6f 69 6e 74 20 7b 0a 20 20 66 69  tingpoint {.  fi
33f0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
3400: 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  rn.}..do_test ca
3410: 70 69 33 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63  pi3-5.0 {.  exec
3420: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3430: 20 54 41 42 4c 45 20 74 31 28 61 20 56 41 52 49   TABLE t1(a VARI
3440: 4e 54 2c 20 62 20 42 4c 4f 42 2c 20 63 20 56 41  NT, b BLOB, c VA
3450: 52 43 48 41 52 28 31 36 29 29 3b 0a 20 20 20 20  RCHAR(16));.    
3460: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3470: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
3480: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3490: 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  t1 VALUES('one',
34a0: 20 27 74 77 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20   'two', NULL);. 
34b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
34c0: 31 20 56 41 4c 55 45 53 28 31 2e 32 2c 20 31 2e  1 VALUES(1.2, 1.
34d0: 33 2c 20 31 2e 34 29 3b 0a 20 20 7d 0a 20 20 73  3, 1.4);.  }.  s
34e0: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 2a  et sql "SELECT *
34f0: 20 46 52 4f 4d 20 74 31 22 0a 20 20 73 65 74 20   FROM t1".  set 
3500: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
3510: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d  epare $DB $sql -
3520: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
3530: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
3540: 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f  STMT.} 3..check_
3550: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3560: 69 33 2d 35 2e 31 20 7b 61 20 62 20 63 7d 20 7b  i3-5.1 {a b c} {
3570: 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43  VARINT BLOB VARC
3580: 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f  HAR(16)}.check_o
3590: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
35a0: 4d 54 20 63 61 70 69 33 2d 35 2e 31 20 7b 6d 61  MT capi3-5.1 {ma
35b0: 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74  in main main} {t
35c0: 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d  1 t1 t1} {a b c}
35d0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35  .do_test capi3-5
35e0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
35f0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
3600: 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65  TE_ROW..check_he
3610: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3620: 2d 35 2e 33 20 7b 61 20 62 20 63 7d 20 7b 56 41  -5.3 {a b c} {VA
3630: 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41  RINT BLOB VARCHA
3640: 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69  R(16)}.check_ori
3650: 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54  gin_header $STMT
3660: 20 63 61 70 69 33 2d 35 2e 33 20 7b 6d 61 69 6e   capi3-5.3 {main
3670: 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20   main main} {t1 
3680: 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63  t1 t1} {a b c}.c
3690: 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20  heck_data $STMT 
36a0: 63 61 70 69 33 2d 35 2e 34 20 7b 49 4e 54 45 47  capi3-5.4 {INTEG
36b0: 45 52 20 49 4e 54 45 47 45 52 20 54 45 58 54 7d  ER INTEGER TEXT}
36c0: 20 7b 31 20 32 20 33 7d 20 7b 31 2e 30 20 32 2e   {1 2 3} {1.0 2.
36d0: 30 20 33 2e 30 7d 20 7b 31 20 32 20 33 7d 0a 0a  0 3.0} {1 2 3}..
36e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
36f0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  5 {.  sqlite3_st
3700: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
3710: 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61  E_ROW..check_hea
3720: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3730: 35 2e 36 20 7b 61 20 62 20 63 7d 20 7b 56 41 52  5.6 {a b c} {VAR
3740: 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52  INT BLOB VARCHAR
3750: 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67  (16)}.check_orig
3760: 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  in_header $STMT 
3770: 63 61 70 69 33 2d 35 2e 36 20 7b 6d 61 69 6e 20  capi3-5.6 {main 
3780: 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74  main main} {t1 t
3790: 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68  1 t1} {a b c}.ch
37a0: 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63  eck_data $STMT c
37b0: 61 70 69 33 2d 35 2e 37 20 7b 54 45 58 54 20 54  api3-5.7 {TEXT T
37c0: 45 58 54 20 4e 55 4c 4c 7d 20 7b 30 20 30 20 30  EXT NULL} {0 0 0
37d0: 7d 20 7b 30 2e 30 20 30 2e 30 20 30 2e 30 7d 20  } {0.0 0.0 0.0} 
37e0: 7b 6f 6e 65 20 74 77 6f 20 7b 7d 7d 0a 0a 64 6f  {one two {}}..do
37f0: 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 38 20  _test capi3-5.8 
3800: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
3810: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3820: 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  ROW..check_heade
3830: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
3840: 39 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e  9 {a b c} {VARIN
3850: 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31  T BLOB VARCHAR(1
3860: 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  6)}.check_origin
3870: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3880: 70 69 33 2d 35 2e 39 20 7b 6d 61 69 6e 20 6d 61  pi3-5.9 {main ma
3890: 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20  in main} {t1 t1 
38a0: 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63  t1} {a b c}.chec
38b0: 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70  k_data $STMT cap
38c0: 69 33 2d 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46  i3-5.10 {FLOAT F
38d0: 4c 4f 41 54 20 54 45 58 54 7d 20 7b 31 20 31 20  LOAT TEXT} {1 1 
38e0: 31 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d  1} {1.2 1.3 1.4}
38f0: 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a   {1.2 1.3 1.4}..
3900: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
3910: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  11 {.  sqlite3_s
3920: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
3930: 54 45 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73 74  TE_DONE..do_test
3940: 20 63 61 70 69 33 2d 35 2e 31 32 20 7b 0a 20 20   capi3-5.12 {.  
3950: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
3960: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3970: 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK..do_test capi
3980: 33 2d 35 2e 32 30 20 7b 0a 20 20 73 65 74 20 73  3-5.20 {.  set s
3990: 71 6c 20 22 53 45 4c 45 43 54 20 61 2c 20 73 75  ql "SELECT a, su
39a0: 6d 28 62 29 2c 20 6d 61 78 28 63 29 20 46 52 4f  m(b), max(c) FRO
39b0: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 61 22  M t1 GROUP BY a"
39c0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
39d0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
39e0: 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20   $sql -1 TAIL]. 
39f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3a00: 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a  count $STMT.} 3.
3a10: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
3a20: 54 4d 54 20 63 61 70 69 33 2d 35 2e 32 31 20 7b  TMT capi3-5.21 {
3a30: 61 20 73 75 6d 28 62 29 20 6d 61 78 28 63 29 7d  a sum(b) max(c)}
3a40: 20 7b 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a   {VARINT {} {}}.
3a50: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
3a60: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3a70: 35 2e 32 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d  5.22 {main {} {}
3a80: 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20  } {t1 {} {}} {a 
3a90: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {} {}}.do_test c
3aa0: 61 70 69 33 2d 35 2e 32 33 20 7b 0a 20 20 73 71  api3-5.23 {.  sq
3ab0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
3ac0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b  STMT.} SQLITE_OK
3ad0: 0a 0a 0a 73 65 74 20 3a 3a 45 4e 43 20 5b 65 78  ...set ::ENC [ex
3ae0: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65 6e  ecsql {pragma en
3af0: 63 6f 64 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f 73  coding}].db clos
3b00: 65 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  e..do_test capi3
3b10: 2d 36 2e 30 20 7b 0a 62 74 72 65 65 5f 62 72 65  -6.0 {.btree_bre
3b20: 61 6b 70 6f 69 6e 74 0a 20 20 73 71 6c 69 74 65  akpoint.  sqlite
3b30: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73  3 db test.db.  s
3b40: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
3b50: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
3b60: 72 20 64 62 5d 0a 62 74 72 65 65 5f 62 72 65 61  r db].btree_brea
3b70: 6b 70 6f 69 6e 74 0a 20 20 73 71 6c 69 74 65 33  kpoint.  sqlite3
3b80: 5f 6b 65 79 20 24 44 42 20 78 79 7a 7a 79 0a 20  _key $DB xyzzy. 
3b90: 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54   set sql {SELECT
3ba0: 20 61 20 46 52 4f 4d 20 74 31 20 6f 72 64 65 72   a FROM t1 order
3bb0: 20 62 79 20 72 6f 77 69 64 7d 0a 20 20 73 65 74   by rowid}.  set
3bc0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
3bd0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
3be0: 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 70 72 20  -1 TAIL].  expr 
3bf0: 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  0.} {0}.do_test 
3c00: 63 61 70 69 33 2d 36 2e 31 20 7b 0a 20 20 64 62  capi3-6.1 {.  db
3c10: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73   cache flush.  s
3c20: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42  qlite3_close $DB
3c30: 0a 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 7d  .} {SQLITE_BUSY}
3c40: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
3c50: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
3c60: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
3c70: 49 54 45 5f 52 4f 57 7d 0a 63 68 65 63 6b 5f 64  ITE_ROW}.check_d
3c80: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d  ata $STMT capi3-
3c90: 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20 7b 31  6.3 {INTEGER} {1
3ca0: 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74  } {1.0} {1}.do_t
3cb0: 65 73 74 20 63 61 70 69 33 2d 36 2e 33 20 7b 0a  est capi3-6.3 {.
3cc0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
3cd0: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
3ce0: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63  TE_OK}.do_test c
3cf0: 61 70 69 33 2d 36 2e 34 2d 6d 69 73 75 73 65 20  api3-6.4-misuse 
3d00: 7b 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75  {.  db cache flu
3d10: 73 68 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  sh.  sqlite3_clo
3d20: 73 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45  se $DB.} {SQLITE
3d30: 5f 4f 4b 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a 69  _OK}.db close..i
3d40: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
3d50: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
3d60: 54 65 73 74 20 77 68 61 74 20 68 61 70 70 65 6e  Test what happen
3d70: 73 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61  s when the libra
3d80: 72 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  ry encounters a 
3d90: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
3da0: 74 2e 0a 20 20 23 20 44 6f 20 74 68 69 73 20 62  t..  # Do this b
3db0: 79 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 66  y updating the f
3dc0: 69 6c 65 20 66 6f 72 6d 61 74 20 76 69 61 20 74  ile format via t
3dd0: 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 0a  he btree layer..
3de0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
3df0: 37 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  7.1 {.    set ::
3e00: 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74  bt [btree_open t
3e10: 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20 20  est.db 10 0].   
3e20: 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61   btree_begin_tra
3e30: 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a 20  nsaction $::bt. 
3e40: 20 20 20 73 65 74 20 6d 65 74 61 20 5b 62 74 72     set meta [btr
3e50: 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62  ee_get_meta $::b
3e60: 74 5d 0a 20 20 20 20 6c 73 65 74 20 6d 65 74 61  t].    lset meta
3e70: 20 32 20 35 0a 20 20 20 20 65 76 61 6c 20 5b 63   2 5.    eval [c
3e80: 6f 6e 63 61 74 20 62 74 72 65 65 5f 75 70 64 61  oncat btree_upda
3e90: 74 65 5f 6d 65 74 61 20 24 3a 3a 62 74 20 5b 6c  te_meta $::bt [l
3ea0: 72 61 6e 67 65 20 24 6d 65 74 61 20 30 20 65 6e  range $meta 0 en
3eb0: 64 5d 5d 0a 20 20 20 20 62 74 72 65 65 5f 63 6f  d]].    btree_co
3ec0: 6d 6d 69 74 20 24 3a 3a 62 74 0a 20 20 20 20 62  mmit $::bt.    b
3ed0: 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74  tree_close $::bt
3ee0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
3ef0: 74 20 63 61 70 69 33 2d 37 2e 32 20 7b 0a 20 20  t capi3-7.2 {.  
3f00: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
3f10: 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71  t.db.    catchsq
3f20: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
3f30: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
3f40: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
3f50: 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64   {1 {unsupported
3f60: 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a 20   file format}}. 
3f70: 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 20   db close.}..if 
3f80: 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d  {![sqlite3 -has-
3f90: 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e 6f  codec]} {.  # No
3fa0: 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20  w test that the 
3fb0: 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c  library correctl
3fc0: 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73 20  y handles bogus 
3fd0: 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20  entries in the. 
3fe0: 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72   # sqlite_master
3ff0: 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20 63   table (schema c
4000: 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64 6f  orruption)..  do
4010: 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 31 20  _test capi3-8.1 
4020: 7b 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74  {.    file delet
4030: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62  e -force test.db
4040: 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65  .    file delete
4050: 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 2d   -force test.db-
4060: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69  journal.    sqli
4070: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4080: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4090: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
40a0: 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t1(a);.    }.   
40b0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d   db close.  } {}
40c0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
40d0: 2d 38 2e 32 20 7b 0a 20 20 20 20 73 65 74 20 3a  -8.2 {.    set :
40e0: 3a 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20  :bt [btree_open 
40f0: 74 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20  test.db 10 0].  
4100: 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72    btree_begin_tr
4110: 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a  ansaction $::bt.
4120: 20 20 20 20 73 65 74 20 3a 3a 62 63 20 5b 62 74      set ::bc [bt
4130: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 74  ree_cursor $::bt
4140: 20 31 20 31 5d 0a 0a 20 20 20 20 23 20 42 75 69   1 1]..    # Bui
4150: 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72 6f 77  ld a 5-field row
4160: 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 69   record consisti
4170: 6e 67 20 6f 66 20 35 20 6e 75 6c 6c 20 72 65 63  ng of 5 null rec
4180: 6f 72 64 73 2e 20 54 68 69 73 20 69 73 0a 20 20  ords. This is.  
4190: 20 20 23 20 6f 66 66 69 63 69 61 6c 6c 79 20 62    # officially b
41a0: 6c 61 63 6b 20 6d 61 67 69 63 2e 0a 20 20 20 20  lack magic..    
41b0: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 64 61 74  catch {unset dat
41c0: 61 7d 0a 20 20 20 20 73 65 74 20 64 61 74 61 20  a}.    set data 
41d0: 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 63  [binary format c
41e0: 36 20 7b 36 20 30 20 30 20 30 20 30 20 30 7d 5d  6 {6 0 0 0 0 0}]
41f0: 0a 20 20 20 20 62 74 72 65 65 5f 69 6e 73 65 72  .    btree_inser
4200: 74 20 24 3a 3a 62 63 20 35 20 24 64 61 74 61 0a  t $::bc 5 $data.
4210: 0a 20 20 20 20 62 74 72 65 65 5f 63 6c 6f 73 65  .    btree_close
4220: 5f 63 75 72 73 6f 72 20 24 3a 3a 62 63 0a 20 20  _cursor $::bc.  
4230: 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24    btree_commit $
4240: 3a 3a 62 74 0a 20 20 20 20 62 74 72 65 65 5f 63  ::bt.    btree_c
4250: 6c 6f 73 65 20 24 3a 3a 62 74 0a 20 20 7d 20 7b  lose $::bt.  } {
4260: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
4270: 33 2d 38 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69  3-8.3 {.    sqli
4280: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4290: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
42a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
42b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  M sqlite_master;
42c0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d  .    }.  } {1 {m
42d0: 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  alformed databas
42e0: 65 20 73 63 68 65 6d 61 7d 7d 0a 20 20 64 6f 5f  e schema}}.  do_
42f0: 74 65 73 74 20 63 61 70 69 33 2d 38 2e 34 20 7b  test capi3-8.4 {
4300: 0a 20 20 20 20 73 65 74 20 3a 3a 62 74 20 5b 62  .    set ::bt [b
4310: 74 72 65 65 5f 6f 70 65 6e 20 74 65 73 74 2e 64  tree_open test.d
4320: 62 20 31 30 20 30 5d 0a 20 20 20 20 62 74 72 65  b 10 0].    btre
4330: 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74  e_begin_transact
4340: 69 6f 6e 20 24 3a 3a 62 74 0a 20 20 20 20 73 65  ion $::bt.    se
4350: 74 20 3a 3a 62 63 20 5b 62 74 72 65 65 5f 63 75  t ::bc [btree_cu
4360: 72 73 6f 72 20 24 3a 3a 62 74 20 31 20 31 5d 0a  rsor $::bt 1 1].
4370: 20 20 0a 20 20 20 20 23 20 42 75 69 6c 64 20 61    .    # Build a
4380: 20 35 2d 66 69 65 6c 64 20 72 6f 77 20 72 65 63   5-field row rec
4390: 6f 72 64 2e 20 54 68 65 20 66 69 72 73 74 20 66  ord. The first f
43a0: 69 65 6c 64 20 69 73 20 61 20 73 74 72 69 6e 67  ield is a string
43b0: 20 27 74 61 62 6c 65 27 2c 20 61 6e 64 0a 20 20   'table', and.  
43c0: 20 20 23 20 73 75 62 73 65 71 75 65 6e 74 20 66    # subsequent f
43d0: 69 65 6c 64 73 20 61 72 65 20 61 6c 6c 20 4e 55  ields are all NU
43e0: 4c 4c 2e 20 52 65 70 6c 61 63 65 20 74 68 65 20  LL. Replace the 
43f0: 6f 74 68 65 72 20 62 72 6f 6b 65 6e 20 72 65 63  other broken rec
4400: 6f 72 64 20 77 69 74 68 0a 20 20 20 20 23 20 74  ord with.    # t
4410: 68 69 73 20 6f 6e 65 20 61 6e 64 20 74 72 79 20  his one and try 
4420: 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65  to read the sche
4430: 6d 61 20 61 67 61 69 6e 2e 20 54 68 65 20 62 72  ma again. The br
4440: 6f 6b 65 6e 20 72 65 63 6f 72 64 20 75 73 65 73  oken record uses
4450: 0a 20 20 20 20 23 20 65 69 74 68 65 72 20 55 54  .    # either UT
4460: 46 2d 38 20 6f 72 20 6e 61 74 69 76 65 20 55 54  F-8 or native UT
4470: 46 2d 31 36 20 28 69 66 20 74 68 69 73 20 66 69  F-16 (if this fi
4480: 6c 65 20 69 73 20 62 65 69 6e 67 20 72 75 6e 20  le is being run 
4490: 62 79 0a 20 20 20 20 23 20 75 74 66 31 36 2e 74  by.    # utf16.t
44a0: 65 73 74 29 2e 0a 20 20 20 20 69 66 20 7b 20 5b  est)..    if { [
44b0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 55 54 46  string match UTF
44c0: 2d 31 36 2a 20 24 3a 3a 45 4e 43 5d 20 7d 20 7b  -16* $::ENC] } {
44d0: 0a 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20  .      set data 
44e0: 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 63  [binary format c
44f0: 36 61 31 30 20 7b 36 20 33 33 20 30 20 30 20 30  6a10 {6 33 0 0 0
4500: 20 30 7d 20 5b 75 74 66 31 36 20 74 61 62 6c 65   0} [utf16 table
4510: 5d 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ]].    } else {.
4520: 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20 5b        set data [
4530: 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 63 36  binary format c6
4540: 61 35 20 7b 36 20 32 33 20 30 20 30 20 30 20 30  a5 {6 23 0 0 0 0
4550: 7d 20 74 61 62 6c 65 5d 0a 20 20 20 20 7d 0a 20  } table].    }. 
4560: 20 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20     btree_insert 
4570: 24 3a 3a 62 63 20 35 20 24 64 61 74 61 0a 20 20  $::bc 5 $data.  
4580: 0a 20 20 20 20 62 74 72 65 65 5f 63 6c 6f 73 65  .    btree_close
4590: 5f 63 75 72 73 6f 72 20 24 3a 3a 62 63 0a 20 20  _cursor $::bc.  
45a0: 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24    btree_commit $
45b0: 3a 3a 62 74 0a 20 20 20 20 62 74 72 65 65 5f 63  ::bt.    btree_c
45c0: 6c 6f 73 65 20 24 3a 3a 62 74 0a 20 20 7d 20 7b  lose $::bt.  } {
45d0: 7d 3b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  };.  do_test cap
45e0: 69 33 2d 38 2e 35 20 7b 0a 20 20 20 20 64 62 20  i3-8.5 {.    db 
45f0: 63 6c 6f 73 65 20 0a 20 20 20 20 73 71 6c 69 74  close .    sqlit
4600: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4610: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4620: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4630: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
4640: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61      }.  } {1 {ma
4650: 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  lformed database
4660: 20 73 63 68 65 6d 61 7d 7d 0a 20 20 64 62 20 63   schema}}.  db c
4670: 6c 6f 73 65 0a 7d 0a 66 69 6c 65 20 64 65 6c 65  lose.}.file dele
4680: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64  te -force test.d
4690: 62 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66  b.file delete -f
46a0: 6f 72 63 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75  orce test.db-jou
46b0: 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20 74 68  rnal...# Test th
46c0: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
46d0: 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61  ge string equiva
46e0: 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65  lents for sqlite
46f0: 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73 65 74   error codes.set
4700: 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 5b 6c   code2english [l
4710: 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b 20  ist \.SQLITE_OK 
4720: 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61 6e 20          {not an 
4730: 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f  error} \.SQLITE_
4740: 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51 4c 20  ERROR      {SQL 
4750: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
4760: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d  issing database}
4770: 20 5c 0a 53 51 4c 49 54 45 5f 50 45 52 4d 20 20   \.SQLITE_PERM  
4780: 20 20 20 20 20 7b 61 63 63 65 73 73 20 70 65 72       {access per
4790: 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 7d 20  mission denied} 
47a0: 5c 0a 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 20  \.SQLITE_ABORT  
47b0: 20 20 20 20 7b 63 61 6c 6c 62 61 63 6b 20 72 65      {callback re
47c0: 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62  quested query ab
47d0: 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 42 55  ort} \.SQLITE_BU
47e0: 53 59 20 20 20 20 20 20 20 7b 64 61 74 61 62 61  SY       {databa
47f0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a  se is locked} \.
4800: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20  SQLITE_LOCKED   
4810: 20 20 7b 64 61 74 61 62 61 73 65 20 74 61 62 6c    {database tabl
4820: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53  e is locked} \.S
4830: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20 20 20  QLITE_NOMEM     
4840: 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d   {out of memory}
4850: 20 5c 0a 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e   \.SQLITE_READON
4860: 4c 59 20 20 20 7b 61 74 74 65 6d 70 74 20 74 6f  LY   {attempt to
4870: 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c   write a readonl
4880: 79 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 53 51  y database} \.SQ
4890: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20 20  LITE_INTERRUPT  
48a0: 7b 69 6e 74 65 72 72 75 70 74 65 64 7d 20 5c 0a  {interrupted} \.
48b0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20 20 20  SQLITE_IOERR    
48c0: 20 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f    {disk I/O erro
48d0: 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 52 52  r} \.SQLITE_CORR
48e0: 55 50 54 20 20 20 20 7b 64 61 74 61 62 61 73 65  UPT    {database
48f0: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
4900: 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a 53 51 4c 49  alformed} \.SQLI
4910: 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20 7b 64  TE_FULL       {d
4920: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
4930: 69 73 20 66 75 6c 6c 7d 20 5c 0a 53 51 4c 49 54  is full} \.SQLIT
4940: 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20 7b 75 6e  E_CANTOPEN   {un
4950: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
4960: 61 62 61 73 65 20 66 69 6c 65 7d 20 5c 0a 53 51  abase file} \.SQ
4970: 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 20 20 20  LITE_PROTOCOL   
4980: 7b 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e  {database lockin
4990: 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75  g protocol failu
49a0: 72 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50  re} \.SQLITE_EMP
49b0: 54 59 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63  TY      {table c
49c0: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d  ontains no data}
49d0: 20 5c 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   \.SQLITE_SCHEMA
49e0: 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 73       {database s
49f0: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
4a00: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53  d} \.SQLITE_CONS
4a10: 54 52 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69  TRAINT {constrai
4a20: 6e 74 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c  nt failed} \.SQL
4a30: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b  ITE_MISMATCH   {
4a40: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
4a50: 68 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55  h} \.SQLITE_MISU
4a60: 53 45 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20  SE     {library 
4a70: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
4a80: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20  ut of sequence} 
4a90: 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20  \.SQLITE_NOLFS  
4aa0: 20 20 20 20 7b 6b 65 72 6e 65 6c 20 6c 61 63 6b      {kernel lack
4ab0: 73 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  s large file sup
4ac0: 70 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 41  port} \.SQLITE_A
4ad0: 55 54 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f  UTH       {autho
4ae0: 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d  rization denied}
4af0: 20 5c 0a 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54   \.SQLITE_FORMAT
4b00: 20 20 20 20 20 7b 61 75 78 69 6c 69 61 72 79 20       {auxiliary 
4b10: 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20  database format 
4b20: 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f  error} \.SQLITE_
4b30: 52 41 4e 47 45 20 20 20 20 20 20 7b 62 69 6e 64  RANGE      {bind
4b40: 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   or column index
4b50: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c   out of range} \
4b60: 0a 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20  .SQLITE_NOTADB  
4b70: 20 20 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72     {file is encr
4b80: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
4b90: 61 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e  a database} \.un
4ba0: 6b 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20 20 20  knownerror      
4bb0: 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20  {unknown error} 
4bc0: 5c 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75  \.]..set test_nu
4bd0: 6d 62 65 72 20 31 0a 66 6f 72 65 61 63 68 20 7b  mber 1.foreach {
4be0: 63 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20 24 63  code english} $c
4bf0: 6f 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20  ode2english {.  
4c00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 39 2e  do_test capi3-9.
4c10: 24 74 65 73 74 5f 6e 75 6d 62 65 72 20 22 73 71  $test_number "sq
4c20: 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74  lite3_test_errst
4c30: 72 20 24 63 6f 64 65 22 20 24 65 6e 67 6c 69 73  r $code" $englis
4c40: 68 0a 20 20 69 6e 63 72 20 74 65 73 74 5f 6e 75  h.  incr test_nu
4c50: 6d 62 65 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74  mber.}..# Test t
4c60: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
4c70: 20 77 68 65 6e 20 61 20 22 72 65 61 6c 22 20 6f   when a "real" o
4c80: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63  ut of memory occ
4c90: 75 72 73 2e 0a 69 66 20 7b 5b 69 6e 66 6f 20 63  urs..if {[info c
4ca0: 6f 6d 6d 61 6e 64 20 73 71 6c 69 74 65 5f 6d 61  ommand sqlite_ma
4cb0: 6c 6c 6f 63 5f 73 74 61 74 5d 21 3d 22 22 7d 20  lloc_stat]!=""} 
4cc0: 7b 0a 73 65 74 20 73 71 6c 69 74 65 5f 6d 61 6c  {.set sqlite_mal
4cd0: 6c 6f 63 5f 66 61 69 6c 20 31 0a 64 6f 5f 74 65  loc_fail 1.do_te
4ce0: 73 74 20 63 61 70 69 33 2d 31 30 2d 31 20 7b 0a  st capi3-10-1 {.
4cf0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4d00: 74 2e 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73  t.db.  set DB [s
4d10: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4d20: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20  n_pointer db].  
4d30: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61  sqlite_malloc_fa
4d40: 69 6c 20 31 0a 20 20 63 61 74 63 68 73 71 6c 20  il 1.  catchsql 
4d50: 7b 0a 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66  {.    select * f
4d60: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
4d70: 72 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 75 74  r;.  }.} {1 {out
4d80: 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f   of memory}}.do_
4d90: 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 32 20  test capi3-10-2 
4da0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
4db0: 73 67 20 24 3a 3a 44 42 0a 7d 20 7b 6f 75 74 20  sg $::DB.} {out 
4dc0: 6f 66 20 6d 65 6d 6f 72 79 7d 0a 69 66 63 61 70  of memory}.ifcap
4dd0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
4de0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
4df0: 30 2d 33 20 7b 0a 20 20 20 20 75 74 66 38 20 5b  0-3 {.    utf8 [
4e00: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
4e10: 20 24 3a 3a 44 42 5d 0a 20 20 7d 20 7b 6f 75 74   $::DB].  } {out
4e20: 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 7d 0a 64 62   of memory}.}.db
4e30: 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 5f 6d 61   close.sqlite_ma
4e40: 6c 6c 6f 63 5f 66 61 69 6c 20 30 0a 7d 0a 0a 23  lloc_fail 0.}..#
4e50: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
4e60: 65 73 74 73 20 2d 20 63 61 70 69 33 2d 31 31 2e  ests - capi3-11.
4e70: 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20 61 20  * - test that a 
4e80: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
4e90: 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 69  CK.# statement i
4ea0: 73 73 75 65 64 20 77 68 69 6c 65 20 74 68 65 72  ssued while ther
4eb0: 65 20 61 72 65 20 73 74 69 6c 6c 20 6f 75 74 73  e are still outs
4ec0: 74 61 6e 64 69 6e 67 20 56 4d 73 20 74 68 61 74  tanding VMs that
4ed0: 20 61 72 65 20 70 61 72 74 20 6f 66 0a 23 20 74   are part of.# t
4ee0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66  he transaction f
4ef0: 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33 20 64 62  ails..sqlite3 db
4f00: 20 74 65 73 74 2e 64 62 0a 73 65 74 20 44 42 20   test.db.set DB 
4f10: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
4f20: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
4f30: 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f  sqlite_register_
4f40: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24 44  test_function $D
4f50: 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73 74 20 63  B func.do_test c
4f60: 61 70 69 33 2d 31 31 2e 31 20 7b 0a 20 20 65 78  api3-11.1 {.  ex
4f70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
4f80: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
4f90: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20  BLE t1(a, b);.  
4fa0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
4fb0: 20 56 41 4c 55 45 53 28 31 2c 20 27 69 6e 74 27   VALUES(1, 'int'
4fc0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4fd0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20  TO t1 VALUES(2, 
4fe0: 27 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20 20 7d  'notatype');.  }
4ff0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
5000: 70 69 33 2d 31 31 2e 31 2e 31 20 7b 0a 20 20 73  pi3-11.1.1 {.  s
5010: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5020: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5030: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32  _test capi3-11.2
5040: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
5050: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
5060: 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63 28  DB "SELECT func(
5070: 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20 2d  b, a) FROM t1" -
5080: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
5090: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
50a0: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
50b0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 20 7b  est capi3-11.3 {
50c0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
50d0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
50e0: 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  {1 {cannot commi
50f0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
5100: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
5110: 6e 20 70 72 6f 67 72 65 73 73 7d 7d 0a 64 6f 5f  n progress}}.do_
5120: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e  test capi3-11.3.
5130: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5140: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5150: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5160: 69 33 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69  i3-11.4 {.  sqli
5170: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5180: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
5190: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
51a0: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .5 {.  sqlite3_f
51b0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
51c0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
51d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
51e0: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
51f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5200: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OM t1;.  }.} {0 
5210: 7b 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70  {1 int 2 notatyp
5220: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
5230: 33 2d 31 31 2e 36 2e 31 20 7b 0a 20 20 73 71 6c  3-11.6.1 {.  sql
5240: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5250: 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74  mit $DB.} 0.do_t
5260: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 37 20 7b  est capi3-11.7 {
5270: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5280: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
5290: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
52a0: 61 70 69 33 2d 31 31 2e 37 2e 31 20 7b 0a 20 20  api3-11.7.1 {.  
52b0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
52c0: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64  commit $DB.} 1.d
52d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
52e0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
52f0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
5300: 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45   t2(a);.    INSE
5310: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
5320: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
5330: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5340: 32 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  2);.    BEGIN;. 
5350: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5360: 32 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d  2 VALUES(3);.  }
5370: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
5380: 70 69 33 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73  pi3-11.8.1 {.  s
5390: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
53a0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
53b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39  _test capi3-11.9
53c0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
53d0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
53e0: 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f  DB "SELECT a FRO
53f0: 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2" -1 TAIL]. 
5400: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5410: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
5420: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
5430: 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.9.1 {.  sqli
5440: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5450: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5460: 73 74 20 63 61 70 69 33 2d 31 31 2e 39 2e 32 20  st capi3-11.9.2 
5470: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5480: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5490: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f  .} {1 {cannot ro
54a0: 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
54b0: 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  on - SQL stateme
54c0: 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 7d  nts in progress}
54d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
54e0: 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74  11.9.3 {.  sqlit
54f0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5500: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
5510: 74 20 63 61 70 69 33 2d 31 31 2e 31 30 20 7b 0a  t capi3-11.10 {.
5520: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
5530: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
5540: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
5550: 33 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71 6c 69  3-11.11 {.  sqli
5560: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5570: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5580: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5590: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
55a0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
55b0: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
55c0: 20 63 61 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20   capi3-11.13 {. 
55d0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
55e0: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
55f0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5600: 70 69 33 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78  pi3-11.14 {.  ex
5610: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
5620: 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT a FROM t2;.  
5630: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
5640: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 34 2e  est capi3-11.14.
5650: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5660: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5670: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5680: 69 33 2d 31 31 2e 31 35 20 7b 0a 20 20 63 61 74  i3-11.15 {.  cat
5690: 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c  chsql {.    ROLL
56a0: 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  BACK;.  }.} {0 {
56b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
56c0: 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c  -11.15.1 {.  sql
56d0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
56e0: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
56f0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 36 20  est capi3-11.16 
5700: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5710: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5720: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a  t2;.  }.} {1 2}.
5730: 0a 23 20 53 61 6e 69 74 79 20 63 68 65 63 6b 20  .# Sanity check 
5740: 6f 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  on the definitio
5750: 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e 64 69 6e  n of 'outstandin
5760: 67 20 56 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e  g VM'. This mean
5770: 73 20 61 6e 79 20 56 4d 0a 23 20 74 68 61 74 20  s any VM.# that 
5780: 68 61 73 20 68 61 64 20 73 71 6c 69 74 65 33 5f  has had sqlite3_
5790: 73 74 65 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f  step() called mo
57a0: 72 65 20 72 65 63 65 6e 74 6c 79 20 74 68 61 6e  re recently than
57b0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
57c0: 65 28 29 20 6f 72 0a 23 20 73 71 6c 69 74 65 33  e() or.# sqlite3
57d0: 5f 72 65 73 65 74 28 29 2e 20 53 6f 20 61 20 56  _reset(). So a V
57e0: 4d 20 74 68 61 74 20 68 61 73 20 6a 75 73 74 20  M that has just 
57f0: 62 65 65 6e 20 70 72 65 70 61 72 65 64 20 6f 72  been prepared or
5800: 20 72 65 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a   reset does not.
5810: 23 20 63 6f 75 6e 74 20 61 73 20 61 6e 20 61 63  # count as an ac
5820: 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74  tive VM..do_test
5830: 20 63 61 70 69 33 2d 31 31 2e 31 37 20 7b 0a 20   capi3-11.17 {. 
5840: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
5850: 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  EGIN;.  }.} {}.d
5860: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5870: 31 38 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  18 {.  set STMT 
5880: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5890: 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46   $DB "SELECT a F
58a0: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
58b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
58c0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
58d0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
58e0: 61 70 69 33 2d 31 31 2e 31 39 20 7b 0a 20 20 73  api3-11.19 {.  s
58f0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5900: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5910: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5920: 31 2e 32 30 20 7b 0a 20 20 63 61 74 63 68 73 71  1.20 {.  catchsq
5930: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
5940: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d     COMMIT;.  }.}
5950: 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d   {1 {cannot comm
5960: 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
5970: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
5980: 69 6e 20 70 72 6f 67 72 65 73 73 7d 7d 0a 64 6f  in progress}}.do
5990: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32  _test capi3-11.2
59a0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  0 {.  sqlite3_re
59b0: 73 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74 63  set $STMT.  catc
59c0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49  hsql {.    COMMI
59d0: 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  T;.  }.} {0 {}}.
59e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
59f0: 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .21 {.  sqlite3_
5a00: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
5a10: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20   {SQLITE_OK}..# 
5a20: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65  The following te
5a30: 73 74 73 20 2d 20 63 61 70 69 33 2d 31 32 2e 2a  sts - capi3-12.*
5a40: 20 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74   - check that it
5a50: 27 73 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61  's Ok to start a
5a60: 0a 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  .# transaction w
5a70: 68 69 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61  hile other VMs a
5a80: 72 65 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74  re active, and t
5a90: 68 61 74 20 69 74 27 73 20 4f 6b 20 74 6f 20 65  hat it's Ok to e
5aa0: 78 65 63 75 74 65 0a 23 20 61 74 6f 6d 69 63 20  xecute.# atomic 
5ab0: 75 70 64 61 74 65 73 20 69 6e 20 74 68 65 20 73  updates in the s
5ac0: 61 6d 65 20 73 69 74 75 61 74 69 6f 6e 20 0a 23  ame situation .#
5ad0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5ae0: 32 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  2.1 {.  set STMT
5af0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
5b00: 65 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20  e $DB "SELECT a 
5b10: 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49 4c  FROM t2" -1 TAIL
5b20: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
5b30: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5b40: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
5b50: 70 69 33 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74  pi3-12.2 {.  cat
5b60: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
5b70: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
5b80: 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a  S(3, NULL);.  }.
5b90: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5ba0: 20 63 61 70 69 33 2d 31 32 2e 33 20 7b 0a 20 20   capi3-12.3 {.  
5bb0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49  catchsql {.    I
5bc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
5bd0: 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b  LUES(4);.  }.} {
5be0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
5bf0: 70 69 33 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74  pi3-12.4 {.  cat
5c00: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
5c10: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
5c20: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20  TO t1 VALUES(4, 
5c30: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  NULL);.  }.} {0 
5c40: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5c50: 33 2d 31 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74  3-12.5 {.  sqlit
5c60: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5c70: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5c80: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 35 2e  test capi3-12.5.
5c90: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  1 {.  sqlite3_st
5ca0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5cb0: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5cc0: 63 61 70 69 33 2d 31 32 2e 36 20 7b 0a 20 20 73  capi3-12.6 {.  s
5cd0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5ce0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45  T.} {SQLITE_DONE
5cf0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5d00: 31 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.7 {.  sqlite3
5d10: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5d20: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
5d30: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 38  _test capi3-12.8
5d40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5d50: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53     COMMIT;.    S
5d60: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 3b  ELECT a FROM t1;
5d70: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d  .  }.} {1 2 3 4}
5d80: 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 63  ..# Test cases c
5d90: 61 70 69 33 2d 31 33 2e 2a 20 74 65 73 74 20 74  api3-13.* test t
5da0: 68 65 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  he sqlite3_clear
5db0: 5f 62 69 6e 64 69 6e 67 73 28 29 20 61 6e 64 20  _bindings() and 
5dc0: 0a 23 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  .# sqlite3_sleep
5dd0: 20 41 50 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c   APIs..#.if {[ll
5de0: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d  ength [info comm
5df0: 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 63 6c 65  ands sqlite3_cle
5e00: 61 72 5f 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d  ar_bindings]]>0}
5e10: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
5e20: 69 33 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78  i3-13.1 {.    ex
5e30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45  ecsql {.      DE
5e40: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
5e50: 20 20 7d 0a 20 20 20 20 73 65 74 20 53 54 4d 54    }.    set STMT
5e60: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
5e70: 65 20 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e  e $DB "INSERT IN
5e80: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20  TO t1 VALUES(?, 
5e90: 3f 29 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20  ?)" -1 TAIL].   
5ea0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5eb0: 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  TMT.  } {SQLITE_
5ec0: 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  DONE}.  do_test 
5ed0: 63 61 70 69 33 2d 31 33 2e 32 20 7b 0a 20 20 20  capi3-13.2 {.   
5ee0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
5ef0: 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33  STMT.    sqlite3
5f00: 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54  _bind_text $STMT
5f10: 20 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73   1 hello 5.    s
5f20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
5f30: 20 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35   $STMT 2 world 5
5f40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
5f50: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
5f60: 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ITE_DONE}.  do_t
5f70: 65 73 74 20 63 61 70 69 33 2d 31 33 2e 33 20 7b  est capi3-13.3 {
5f80: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
5f90: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
5fa0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
5fb0: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
5fc0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5fd0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
5fe0: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
5ff0: 69 33 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73 71  i3-13-4 {.    sq
6000: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
6010: 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71 6c  STMT.    execsql
6020: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
6030: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d  * FROM t1;.    }
6040: 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c 6c  .  } {{} {} hell
6050: 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d  o world {} {}}.}
6060: 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69  .if {[llength [i
6070: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c  nfo commands sql
6080: 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d 20  ite3_sleep]]>0} 
6090: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
60a0: 33 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73 65 74  3-13-5 {.    set
60b0: 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65   ms [sqlite3_sle
60c0: 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70 72 20  ep 80].    expr 
60d0: 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d  {$ms==80 || $ms=
60e0: 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d  =1000}.  } {1}.}
60f0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32 31 39  ..# Ticket #1219
6100: 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62 69 6e  :  Make sure bin
6110: 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20 68 61  ding APIs can ha
6120: 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  ndle a NULL poin
6130: 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ter..#.do_test c
6140: 61 70 69 33 2d 31 34 2e 31 2d 6d 69 73 75 73 65  api3-14.1-misuse
6150: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
6160: 63 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64  ch {sqlite3_bind
6170: 5f 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20  _text 0 1 hello 
6180: 35 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  5} msg].  lappen
6190: 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 53  d rc $msg.} {1 S
61a0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 0a 23  QLITE_MISUSE}..#
61b0: 20 54 69 63 6b 65 74 20 23 31 36 35 30 3a 20 20   Ticket #1650:  
61c0: 48 6f 6e 6f 72 20 74 68 65 20 6e 42 79 74 65 73  Honor the nBytes
61d0: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
61e0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 2e 0a 23  lite3_prepare..#
61f0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6200: 35 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  5.1 {.  set sql 
6210: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
6220: 32 7d 0a 20 20 73 65 74 20 6e 62 79 74 65 73 20  2}.  set nbytes 
6230: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
6240: 73 71 6c 5d 0a 20 20 61 70 70 65 6e 64 20 73 71  sql].  append sq
6250: 6c 20 7b 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a  l { WHERE a==1}.
6260: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6270: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
6280: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
6290: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
62a0: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
62b0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
62c0: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
62d0: 73 74 20 63 61 70 69 33 2d 31 35 2e 32 20 7b 0a  st capi3-15.2 {.
62e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
62f0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
6300: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6310: 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  0.} {2}.do_test 
6320: 63 61 70 69 33 2d 31 35 2e 33 20 7b 0a 20 20 73  capi3-15.3 {.  s
6330: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6340: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
6350: 4f 4b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  OK}..# Make sure
6360: 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79 73 20   code is always 
6370: 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e 20 69  generated even i
6380: 66 20 61 6e 20 49 46 20 45 58 49 53 54 53 20 6f  f an IF EXISTS o
6390: 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58 49 53  r .# IF NOT EXIS
63a0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
63b0: 73 65 6e 74 20 74 68 61 74 20 74 68 65 20 74 61  sent that the ta
63c0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72 0a  ble does not or.
63d0: 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e 20 20  # does exists.  
63e0: 54 68 61 74 20 77 61 79 20 77 65 20 77 69 6c 6c  That way we will
63f0: 20 61 6c 77 61 79 73 20 68 61 76 65 20 61 20 70   always have a p
6400: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6410: 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20 77 68  t.# to expire wh
6420: 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  en the schema ch
6430: 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  anges..#.do_test
6440: 20 63 61 70 69 33 2d 31 36 2e 31 20 7b 0a 20 20   capi3-16.1 {.  
6450: 73 65 74 20 73 71 6c 20 7b 44 52 4f 50 20 54 41  set sql {DROP TA
6460: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33  BLE IF EXISTS t3
6470: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
6480: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6490: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
64a0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
64b0: 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20  ze $STMT.  expr 
64c0: 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31  {$STMT!=""}.} {1
64d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
64e0: 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c  16.2 {.  set sql
64f0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   {CREATE TABLE I
6500: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28  F NOT EXISTS t1(
6510: 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54  x,y)}.  set STMT
6520: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6530: 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  e $DB $sql -1 TA
6540: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  IL].  sqlite3_fi
6550: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65  nalize $STMT.  e
6560: 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a  xpr {$STMT!=""}.
6570: 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73 74 69  } {1}..# But sti
6580: 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e  ll we do not gen
6590: 65 72 61 74 65 20 63 6f 64 65 20 69 66 20 74 68  erate code if th
65a0: 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a  ere is no SQL.#.
65b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36  do_test capi3-16
65c0: 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .3 {.  set STMT 
65d0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
65e0: 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d   $DB {} -1 TAIL]
65f0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6600: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
6610: 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b   {$STMT==""}.} {
6620: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
6630: 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54  -16.4 {.  set ST
6640: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6650: 61 72 65 20 24 44 42 20 7b 3b 7d 20 2d 31 20 54  are $DB {;} -1 T
6660: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
6670: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
6680: 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d  expr {$STMT==""}
6690: 0a 7d 20 7b 31 7d 0a 0a 0a 0a 66 69 6e 69 73 68  .} {1}....finish
66a0: 5f 74 65 73 74 0a                                _test.