/ Hex Artifact Content
Login

Artifact a21869e4d50d5dbb7e566e328fc0bc7c2efa6a32:


0000: 23 20 32 30 30 36 20 4e 6f 76 65 6d 62 65 72 20  # 2006 November 
0010: 30 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  08.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 0a 23 0a 23 20 54 68 69 73 20  ary.  .#.# This 
01b0: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
01c0: 20 63 61 70 69 33 2e 74 65 73 74 20 66 69 6c 65   capi3.test file
01d0: 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
01e0: 64 61 70 74 65 64 20 74 6f 0a 23 20 74 65 73 74  dapted to.# test
01f0: 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 33   the new sqlite3
0200: 5f 70 72 65 70 61 72 65 5f 76 32 20 69 6e 74 65  _prepare_v2 inte
0210: 72 66 61 63 65 2e 0a 23 0a 23 20 24 49 64 3a 20  rface..#.# $Id: 
0220: 63 61 70 69 33 63 2e 74 65 73 74 2c 76 20 31 2e  capi3c.test,v 1.
0230: 32 33 20 32 30 30 39 2f 30 37 2f 32 32 20 30 37  23 2009/07/22 07
0240: 3a 32 37 3a 35 37 20 64 61 6e 69 65 6c 6b 31 39  :27:57 danielk19
0250: 37 37 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20  77 Exp $.#..set 
0260: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0270: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0280: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0290: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 44 6f 20 6e  ster.tcl..# Do n
02a0: 6f 74 20 75 73 65 20 61 20 63 6f 64 65 63 20 66  ot use a codec f
02b0: 6f 72 20 74 65 73 74 73 20 69 6e 20 74 68 69 73  or tests in this
02c0: 20 66 69 6c 65 2c 20 61 73 20 74 68 65 20 64 61   file, as the da
02d0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 23  tabase file is.#
02e0: 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 64 69 72   manipulated dir
02f0: 65 63 74 6c 79 20 75 73 69 6e 67 20 74 63 6c 20  ectly using tcl 
0300: 73 63 72 69 70 74 73 20 28 75 73 69 6e 67 20 74  scripts (using t
0310: 68 65 20 5b 68 65 78 69 6f 5f 77 72 69 74 65 5d  he [hexio_write]
0320: 20 63 6f 6d 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f   command)..#.do_
0330: 6e 6f 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 23  not_use_codec..#
0340: 20 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d   Return the UTF-
0350: 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
0360: 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  n of the supplie
0370: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 24  d UTF-8 string $
0380: 73 74 72 2e 0a 23 20 49 66 20 24 6e 74 20 69 73  str..# If $nt is
0390: 20 74 72 75 65 2c 20 61 70 70 65 6e 64 20 74 77   true, append tw
03a0: 6f 20 30 78 30 30 20 62 79 74 65 73 20 61 73 20  o 0x00 bytes as 
03b0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72  a nul terminator
03c0: 2e 0a 70 72 6f 63 20 75 74 66 31 36 20 7b 73 74  ..proc utf16 {st
03d0: 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20 73 65  r {nt 1}} {.  se
03e0: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
03f0: 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64 65 20  nvertto unicode 
0400: 24 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e 74 7d  $str].  if {$nt}
0410: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 72 20   {.    append r 
0420: 22 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d 0a 20  "\x00\x00".  }. 
0430: 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20   return $r.}..# 
0440: 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d 38  Return the UTF-8
0450: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
0460: 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
0470: 55 54 46 2d 31 36 20 73 74 72 69 6e 67 20 24 73  UTF-16 string $s
0480: 74 72 2e 20 0a 70 72 6f 63 20 75 74 66 38 20 7b  tr. .proc utf8 {
0490: 73 74 72 7d 20 7b 0a 20 20 23 20 49 66 20 24 73  str} {.  # If $s
04a0: 74 72 20 65 6e 64 73 20 69 6e 20 74 77 6f 20 30  tr ends in two 0
04b0: 78 30 30 20 30 78 30 30 20 62 79 74 65 73 2c 20  x00 0x00 bytes, 
04c0: 6b 6e 6f 63 6b 20 74 68 65 73 65 20 6f 66 66 20  knock these off 
04d0: 62 65 66 6f 72 65 0a 20 20 23 20 63 6f 6e 76 65  before.  # conve
04e0: 72 74 69 6e 67 20 74 6f 20 55 54 46 2d 38 20 75  rting to UTF-8 u
04f0: 73 69 6e 67 20 54 43 4c 2e 0a 20 20 62 69 6e 61  sing TCL..  bina
0500: 72 79 20 73 63 61 6e 20 24 73 74 72 20 5c 63 2a  ry scan $str \c*
0510: 20 76 61 6c 73 0a 20 20 69 66 20 7b 5b 6c 69 6e   vals.  if {[lin
0520: 64 65 78 20 24 76 61 6c 73 20 65 6e 64 5d 3d 3d  dex $vals end]==
0530: 30 20 26 26 20 5b 6c 69 6e 64 65 78 20 24 76 61  0 && [lindex $va
0540: 6c 73 20 65 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a  ls end-1]==0} {.
0550: 20 20 20 20 73 65 74 20 73 74 72 20 5b 62 69 6e      set str [bin
0560: 61 72 79 20 66 6f 72 6d 61 74 20 5c 63 2a 20 5b  ary format \c* [
0570: 6c 72 61 6e 67 65 20 24 76 61 6c 73 20 30 20 65  lrange $vals 0 e
0580: 6e 64 2d 32 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65  nd-2]].  }..  se
0590: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
05a0: 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64  nvertfrom unicod
05b0: 65 20 24 73 74 72 5d 0a 20 20 72 65 74 75 72 6e  e $str].  return
05c0: 20 24 72 0a 7d 0a 0a 23 20 54 68 65 73 65 20 74   $r.}..# These t
05d0: 65 73 74 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  ests complement 
05e0: 74 68 6f 73 65 20 69 6e 20 63 61 70 69 32 2e 74  those in capi2.t
05f0: 65 73 74 2e 20 54 68 65 79 20 61 72 65 20 6f 72  est. They are or
0600: 67 61 6e 69 7a 65 64 0a 23 20 61 73 20 66 6f 6c  ganized.# as fol
0610: 6c 6f 77 73 3a 0a 23 0a 23 20 63 61 70 69 33 63  lows:.#.# capi3c
0620: 2d 31 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -1.*: Test sqlit
0630: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 0a 23  e3_prepare_v2 .#
0640: 20 63 61 70 69 33 63 2d 32 2e 2a 3a 20 54 65 73   capi3c-2.*: Tes
0650: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
0660: 65 31 36 5f 76 32 20 0a 23 20 63 61 70 69 33 63  e16_v2 .# capi3c
0670: 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -3.*: Test sqlit
0680: 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69 33 63  e3_open.# capi3c
0690: 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -4.*: Test sqlit
06a0: 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61 70 69  e3_open16.# capi
06b0: 33 63 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68 65  3c-5.*: Test the
06c0: 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74 65 33   various sqlite3
06d0: 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73 0a 23  _result_* APIs.#
06e0: 20 63 61 70 69 33 63 2d 36 2e 2a 3a 20 54 65 73   capi3c-6.*: Tes
06f0: 74 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 63  t that sqlite3_c
0700: 6c 6f 73 65 20 66 61 69 6c 73 20 69 66 20 74 68  lose fails if th
0710: 65 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64  ere are outstand
0720: 69 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65 74 20  ing VMs..#..set 
0730: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
0740: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
0750: 62 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  b]..do_test capi
0760: 33 63 2d 31 2e 30 20 7b 0a 20 20 73 71 6c 69 74  3c-1.0 {.  sqlit
0770: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
0780: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
0790: 74 20 63 61 70 69 33 63 2d 31 2e 31 20 7b 0a 20  t capi3c-1.1 {. 
07a0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
07b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
07c0: 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  B {SELECT name F
07d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
07e0: 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  r} -1 TAIL].  sq
07f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0800: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0810: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
0820: 69 33 63 2d 31 2e 32 2e 31 20 7b 0a 20 20 73 71  i3c-1.2.1 {.  sq
0830: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44  lite3_errcode $D
0840: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
0850: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
0860: 2e 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  .2.2 {.  sqlite3
0870: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
0880: 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f  e $DB.} {SQLITE_
0890: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
08a0: 33 63 2d 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74  3c-1.3 {.  sqlit
08b0: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
08c0: 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64  {not an error}.d
08d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 2e  o_test capi3c-1.
08e0: 34 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53  4 {.  set sql {S
08f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0900: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45  sqlite_master;SE
0910: 4c 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53  LECT 10}.  set S
0920: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
0930: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
0940: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
0950: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
0960: 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20  MT.  set TAIL.} 
0970: 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74  {SELECT 10}.do_t
0980: 65 73 74 20 63 61 70 69 33 63 2d 31 2e 35 20 7b  est capi3c-1.5 {
0990: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
09a0: 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20 73 71  CT namex FROM sq
09b0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 63  lite_master}.  c
09c0: 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20 53  atch {.    set S
09d0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
09e0: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
09f0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20   -1 TAIL].  }.} 
0a00: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
0a10: 33 63 2d 31 2e 36 2e 31 20 7b 0a 20 20 73 71 6c  3c-1.6.1 {.  sql
0a20: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
0a30: 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52  .} {SQLITE_ERROR
0a40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
0a50: 2d 31 2e 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74  -1.6.2 {.  sqlit
0a60: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
0a70: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
0a80: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
0a90: 20 63 61 70 69 33 63 2d 31 2e 37 20 7b 0a 20 20   capi3c-1.7 {.  
0aa0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
0ab0: 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 63 6f  DB.} {no such co
0ac0: 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 0a 69  lumn: namex}...i
0ad0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
0ae0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
0af0: 69 33 63 2d 32 2e 31 20 7b 0a 20 20 20 20 73 65  i3c-2.1 {.    se
0b00: 74 20 73 71 6c 31 36 20 5b 75 74 66 31 36 20 7b  t sql16 [utf16 {
0b10: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0b20: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0b30: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
0b40: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0b50: 5f 76 32 20 20 24 44 42 20 24 73 71 6c 31 36 20  _v2  $DB $sql16 
0b60: 2d 31 20 3a 3a 54 41 49 4c 5d 0a 20 20 20 20 73  -1 ::TAIL].    s
0b70: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0b80: 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24  $STMT.    utf8 $
0b90: 3a 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d 0a 20 20  ::TAIL.  } {}.  
0ba0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0bb0: 2e 32 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c  .2 {.    set sql
0bc0: 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20   [utf16 {SELECT 
0bd0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0be0: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0bf0: 30 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54  0}].    set STMT
0c00: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0c10: 65 31 36 5f 76 32 20 20 24 44 42 20 24 73 71 6c  e16_v2  $DB $sql
0c20: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
0c30: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0c40: 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24 54  STMT.    utf8 $T
0c50: 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43 54 20  AIL.  } {SELECT 
0c60: 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  10}.  do_test ca
0c70: 70 69 33 63 2d 32 2e 33 20 7b 0a 20 20 20 20 73  pi3c-2.3 {.    s
0c80: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0c90: 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d  ELECT namex FROM
0ca0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0cb0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
0cc0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0cd0: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
0ce0: 32 20 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  2  $DB $sql -1 T
0cf0: 41 49 4c 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  AIL].    }.  } {
0d00: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  1}.  do_test cap
0d10: 69 33 63 2d 32 2e 34 2e 31 20 7b 0a 20 20 20 20  i3c-2.4.1 {.    
0d20: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
0d30: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
0d40: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
0d50: 20 63 61 70 69 33 63 2d 32 2e 34 2e 32 20 7b 0a   capi3c-2.4.2 {.
0d60: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
0d70: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
0d80: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
0d90: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
0da0: 70 69 33 63 2d 32 2e 35 20 7b 0a 20 20 20 20 73  pi3c-2.5 {.    s
0db0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44  qlite3_errmsg $D
0dc0: 42 0a 20 20 7d 20 7b 6e 6f 20 73 75 63 68 20 63  B.  } {no such c
0dd0: 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 20  olumn: namex}.. 
0de0: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
0df0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 20 20  a_pragmas {.    
0e00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0e10: 2e 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .6 {.      execs
0e20: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0e30: 20 74 61 62 6c 65 6e 61 6d 65 28 78 29 7d 0a 20   tablename(x)}. 
0e40: 20 20 20 20 20 73 65 74 20 73 71 6c 31 36 20 5b       set sql16 [
0e50: 75 74 66 31 36 20 7b 50 52 41 47 4d 41 20 74 61  utf16 {PRAGMA ta
0e60: 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62 6c 65 4e  ble_info("TableN
0e70: 61 6d 65 22 29 7d 5d 0a 20 20 20 20 20 20 73 65  ame")}].      se
0e80: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0e90: 70 72 65 70 61 72 65 31 36 5f 76 32 20 20 24 44  prepare16_v2  $D
0ea0: 42 20 24 73 71 6c 31 36 20 2d 31 20 54 41 49 4c  B $sql16 -1 TAIL
0eb0: 5d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ].      sqlite3_
0ec0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20 7d  step $STMT.    }
0ed0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 20 20   SQLITE_ROW.    
0ee0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0ef0: 2e 37 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  .7 {.      sqlit
0f00: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
0f10: 20 20 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a    } SQLITE_DONE.
0f20: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0f30: 33 63 2d 32 2e 38 20 7b 0a 20 20 20 20 20 20 73  3c-2.8 {.      s
0f40: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0f50: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
0f60: 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d 20 3b 23 20  TE_OK.  }..} ;# 
0f70: 65 6e 64 69 66 20 75 74 66 31 36 0a 0a 23 20 72  endif utf16..# r
0f80: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
0f90: 65 6e 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  en sqlite3_open_
0fa0: 6f 6c 64 0a 23 20 70 72 6f 63 20 73 71 6c 69 74  old.# proc sqlit
0fb0: 65 33 5f 6f 70 65 6e 20 7b 66 6e 61 6d 65 20 6f  e3_open {fname o
0fc0: 70 74 69 6f 6e 73 7d 20 7b 73 71 6c 69 74 65 33  ptions} {sqlite3
0fd0: 5f 6f 70 65 6e 5f 6e 65 77 20 24 66 6e 61 6d 65  _open_new $fname
0fe0: 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a 64 6f 5f 74   $options}..do_t
0ff0: 65 73 74 20 63 61 70 69 33 63 2d 33 2e 31 20 7b  est capi3c-3.1 {
1000: 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69  .  set db2 [sqli
1010: 74 65 33 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62  te3_open test.db
1020: 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65   {}].  sqlite3_e
1030: 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53  rrcode $db2.} {S
1040: 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20  QLITE_OK}.# FIX 
1050: 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20  ME: Should test 
1060: 74 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f  the db handle wo
1070: 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70  rks..do_test cap
1080: 69 33 63 2d 33 2e 32 20 7b 0a 20 20 73 71 6c 69  i3c-3.2 {.  sqli
1090: 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d  te3_close $db2.}
10a0: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
10b0: 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 33 20  test capi3c-3.3 
10c0: 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20  {.  catch {.    
10d0: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
10e0: 5f 6f 70 65 6e 20 2f 62 6f 67 75 73 2f 70 61 74  _open /bogus/pat
10f0: 68 2f 74 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20  h/test.db {}].  
1100: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  }.  sqlite3_errc
1110: 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ode $db2.} {SQLI
1120: 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f  TE_CANTOPEN}.do_
1130: 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 34 20  test capi3c-3.4 
1140: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
1150: 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e 61 62 6c  sg $db2.} {unabl
1160: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
1170: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
1180: 20 63 61 70 69 33 63 2d 33 2e 35 20 7b 0a 20 20   capi3c-3.5 {.  
1190: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
11a0: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
11b0: 0a 69 66 20 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69  .if {[clang_sani
11c0: 74 69 7a 65 5f 61 64 64 72 65 73 73 5d 3d 3d 30  tize_address]==0
11d0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  } {.  do_test ca
11e0: 70 69 33 63 2d 33 2e 36 2e 31 2d 6d 69 73 75 73  pi3c-3.6.1-misus
11f0: 65 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e {.    sqlite3_
1200: 63 6c 6f 73 65 20 24 64 62 32 0a 20 20 7d 20 7b  close $db2.  } {
1210: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 20  SQLITE_MISUSE}. 
1220: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
1230: 33 2e 36 2e 32 2d 6d 69 73 75 73 65 20 7b 0a 20  3.6.2-misuse {. 
1240: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
1250: 67 20 24 64 62 32 0a 20 20 7d 20 7b 6c 69 62 72  g $db2.  } {libr
1260: 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c  ary routine call
1270: 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e  ed out of sequen
1280: 63 65 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20  ce}.  ifcapable 
1290: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f  {utf16} {.    do
12a0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 36  _test capi3c-3.6
12b0: 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20  .3-misuse {.    
12c0: 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f    utf8 [sqlite3_
12d0: 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 20  errmsg16 $db2]. 
12e0: 20 20 20 7d 20 7b 6c 69 62 72 61 72 79 20 72 6f     } {library ro
12f0: 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74  utine called out
1300: 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 0a 20 20   of sequence}.  
1310: 7d 0a 7d 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71  }.}..# rename sq
1320: 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22 0a 23 20  lite3_open "".# 
1330: 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f  rename sqlite3_o
1340: 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74 65 33 5f  pen_old sqlite3_
1350: 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62 6c 65 20  open..ifcapable 
1360: 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f 74 65 73  {utf16} {.do_tes
1370: 74 20 63 61 70 69 33 63 2d 34 2e 31 20 7b 0a 20  t capi3c-4.1 {. 
1380: 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65   set db2 [sqlite
1390: 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20  3_open16 [utf16 
13a0: 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 73  test.db] {}].  s
13b0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
13c0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
13d0: 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75  }.# FIX ME: Shou
13e0: 6c 64 20 74 65 73 74 20 74 68 65 20 64 62 20 68  ld test the db h
13f0: 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f  andle works..do_
1400: 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e 32 20  test capi3c-4.2 
1410: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
1420: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1430: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
1440: 69 33 63 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63  i3c-4.3 {.  catc
1450: 68 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20  h {.    set db2 
1460: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20  [sqlite3_open16 
1470: 5b 75 74 66 31 36 20 2f 62 6f 67 75 73 2f 70 61  [utf16 /bogus/pa
1480: 74 68 2f 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a  th/test.db] {}].
1490: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72    }.  sqlite3_er
14a0: 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51  rcode $db2.} {SQ
14b0: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64  LITE_CANTOPEN}.d
14c0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e  o_test capi3c-4.
14d0: 34 20 7b 0a 20 20 75 74 66 38 20 5b 73 71 6c 69  4 {.  utf8 [sqli
14e0: 74 65 33 5f 65 72 72 6d 73 67 31 36 20 24 64 62  te3_errmsg16 $db
14f0: 32 5d 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f 20  2].} {unable to 
1500: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69  open database fi
1510: 6c 65 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  le}.do_test capi
1520: 33 63 2d 34 2e 35 20 7b 0a 20 20 73 71 6c 69 74  3c-4.5 {.  sqlit
1530: 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20  e3_close $db2.} 
1540: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 7d 20 3b 23  {SQLITE_OK}.} ;#
1550: 20 75 74 66 31 36 0a 0a 23 20 54 68 69 73 20 70   utf16..# This p
1560: 72 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20 74  roc is used to t
1570: 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  est the followin
1580: 67 20 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23  g API calls:.#.#
1590: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
15a0: 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f  count.# sqlite3_
15b0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 0a 23 20 73 71  column_name.# sq
15c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
15d0: 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  e16.# sqlite3_co
15e0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 0a 23 20  lumn_decltype.# 
15f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1600: 65 63 6c 74 79 70 65 31 36 0a 23 0a 23 20 24 53  ecltype16.#.# $S
1610: 54 4d 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  TMT is a compile
1620: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
1630: 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66   $test is a pref
1640: 69 78 0a 23 20 74 6f 20 75 73 65 20 66 6f 72 20  ix.# to use for 
1650: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
1660: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 6e 61  n this proc. $na
1670: 6d 65 73 20 69 73 20 61 20 6c 69 73 74 0a 23 20  mes is a list.# 
1680: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
1690: 6d 65 73 20 74 68 61 74 20 73 68 6f 75 6c 64 20  mes that should 
16a0: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 24  be returned by $
16b0: 53 54 4d 54 2e 0a 23 20 24 64 65 63 6c 74 79 70  STMT..# $decltyp
16c0: 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  es is a list of 
16d0: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
16e0: 6f 6e 20 74 79 70 65 73 20 66 6f 72 20 24 53 54  on types for $ST
16f0: 4d 54 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a  MT..#.# Example:
1700: 0a 23 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73  .#.# set STMT [s
1710: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1720: 32 20 22 53 45 4c 45 43 54 20 31 2c 20 32 2c 20  2 "SELECT 1, 2, 
1730: 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20  2;" -1 DUMMY].# 
1740: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 74 65 73  check_header tes
1750: 74 31 2e 31 20 7b 31 20 32 20 33 7d 20 7b 22 22  t1.1 {1 2 3} {""
1760: 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f 63 20 63   "" ""}.#.proc c
1770: 68 65 63 6b 5f 68 65 61 64 65 72 20 7b 53 54 4d  heck_header {STM
1780: 54 20 74 65 73 74 20 6e 61 6d 65 73 20 64 65 63  T test names dec
1790: 6c 74 79 70 65 73 7d 20 7b 0a 0a 20 20 23 20 55  ltypes} {..  # U
17a0: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
17b0: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63  lue of sqlite3_c
17c0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f  olumn_count() to
17d0: 20 62 75 69 6c 64 0a 20 20 23 20 61 20 6c 69 73   build.  # a lis
17e0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  t of column inde
17f0: 78 65 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c  xes. i.e. If sql
1800: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
1810: 74 0a 20 20 23 20 69 73 20 33 2c 20 62 75 69 6c  t.  # is 3, buil
1820: 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20 31 20  d the list {0 1 
1830: 32 7d 2e 0a 20 20 73 65 74 20 3a 3a 69 64 78 6c  2}..  set ::idxl
1840: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  ist [list].  set
1850: 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69   ::numcols [sqli
1860: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1870: 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72 20 7b 73   $STMT].  for {s
1880: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a  et i 0} {$i < $:
1890: 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20  :numcols} {incr 
18a0: 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64  i} {lappend ::id
18b0: 78 6c 69 73 74 20 24 69 7d 0a 0a 20 20 23 20 43  xlist $i}..  # C
18c0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
18d0: 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24  TF-8.  do_test $
18e0: 74 65 73 74 2e 31 20 7b 0a 20 20 20 20 73 65 74  test.1 {.    set
18f0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1900: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ].    foreach i 
1910: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
1920: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
1930: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1940: 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20   $STMT $i]} .   
1950: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
1960: 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23 20 43   } $names..  # C
1970: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1980: 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61 62 6c  TF-16.  ifcapabl
1990: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
19a0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20  do_test $test.2 
19b0: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
19c0: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
19d0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
19e0: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
19f0: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
1a00: 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33  t [utf8 [sqlite3
1a10: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
1a20: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
1a30: 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  }.      set cnam
1a40: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e 61 6d  elist.    } $nam
1a50: 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f 6c 75  es.  }..  # Colu
1a60: 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  mn names in UTF-
1a70: 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73  8.  do_test $tes
1a80: 74 2e 33 20 7b 0a 20 20 20 20 73 65 74 20 63 6e  t.3 {.    set cn
1a90: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1aa0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
1ab0: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 63  xlist {lappend c
1ac0: 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65  namelist [sqlite
1ad0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53  3_column_name $S
1ae0: 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20 20 73 65  TMT $i]} .    se
1af0: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20  t cnamelist.  } 
1b00: 24 6e 61 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75  $names..  # Colu
1b10: 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  mn names in UTF-
1b20: 31 36 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  16.  ifcapable {
1b30: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f  utf16} {.    do_
1b40: 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b 0a 20  test $test.4 {. 
1b50: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
1b60: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
1b70: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1b80: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  st {.        lap
1b90: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
1ba0: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
1bb0: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d  lumn_name16 $STM
1bc0: 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20  T $i]].      }. 
1bd0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
1be0: 73 74 0a 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a  st.    } $names.
1bf0: 20 20 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20    }..  # Column 
1c00: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20  names in UTF-8. 
1c10: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35   do_test $test.5
1c20: 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65   {.    set cname
1c30: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
1c40: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1c50: 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d  st {lappend cnam
1c60: 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63  elist [sqlite3_c
1c70: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24  olumn_decltype $
1c80: 53 54 4d 54 20 24 69 5d 7d 20 0a 20 20 20 20 73  STMT $i]} .    s
1c90: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d  et cnamelist.  }
1ca0: 20 24 64 65 63 6c 74 79 70 65 73 0a 0a 20 20 23   $decltypes..  #
1cb0: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
1cc0: 69 6f 6e 20 74 79 70 65 73 20 69 6e 20 55 54 46  ion types in UTF
1cd0: 2d 31 36 0a 20 20 69 66 63 61 70 61 62 6c 65 20  -16.  ifcapable 
1ce0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f  {utf16} {.    do
1cf0: 5f 74 65 73 74 20 24 74 65 73 74 2e 36 20 7b 0a  _test $test.6 {.
1d00: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
1d10: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
1d20: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
1d30: 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61  ist {.        la
1d40: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
1d50: 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63  [utf8 [sqlite3_c
1d60: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
1d70: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
1d80: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e    }.      set cn
1d90: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64  amelist.    } $d
1da0: 65 63 6c 74 79 70 65 73 0a 20 20 7d 0a 0a 0a 20  ecltypes.  }... 
1db0: 20 23 20 54 65 73 74 20 73 6f 6d 65 20 6f 75 74   # Test some out
1dc0: 20 6f 66 20 72 61 6e 67 65 20 63 6f 6e 64 69 74   of range condit
1dd0: 69 6f 6e 73 3a 0a 20 20 69 66 63 61 70 61 62 6c  ions:.  ifcapabl
1de0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
1df0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 37 20  do_test $test.7 
1e00: 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5c 0a 20  {.      list \. 
1e10: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1e20: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d  column_name $STM
1e30: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1e40: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1e50: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 2d 31 5d  name16 $STMT -1]
1e60: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
1e70: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1e80: 79 70 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a  ype $STMT -1] \.
1e90: 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33          [sqlite3
1ea0: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1eb0: 31 36 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20  16 $STMT -1] \. 
1ec0: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1ed0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d  column_name $STM
1ee0: 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20  T $numcols] \.  
1ef0: 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63        [sqlite3_c
1f00: 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54  olumn_name16 $ST
1f10: 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20  MT $numcols] \. 
1f20: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1f30: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20  column_decltype 
1f40: 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 20  $STMT $numcols] 
1f50: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1f60: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1f70: 70 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63  pe16 $STMT $numc
1f80: 6f 6c 73 5d 0a 20 20 20 20 7d 20 7b 7b 7d 20 7b  ols].    } {{} {
1f90: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d  } {} {} {} {} {}
1fa0: 20 7b 7d 7d 0a 20 20 7d 0a 7d 20 0a 0a 23 20 54   {}}.  }.} ..# T
1fb0: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
1fc0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
1fd0: 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c 73  lowing API calls
1fe0: 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  :.#.# sqlite3_co
1ff0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
2000: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2010: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 0a  n_origin_name16.
2020: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2030: 5f 74 61 62 6c 65 5f 6e 61 6d 65 0a 23 20 73 71  _table_name.# sq
2040: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
2050: 6c 65 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  le_name16.# sqli
2060: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
2070: 61 73 65 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  ase_name.# sqlit
2080: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
2090: 73 65 5f 6e 61 6d 65 31 36 0a 23 0a 23 20 24 53  se_name16.#.# $S
20a0: 54 4d 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  TMT is a compile
20b0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
20c0: 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66   $test is a pref
20d0: 69 78 0a 23 20 74 6f 20 75 73 65 20 66 6f 72 20  ix.# to use for 
20e0: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
20f0: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 6e 61  n this proc. $na
2100: 6d 65 73 20 69 73 20 61 20 6c 69 73 74 0a 23 20  mes is a list.# 
2110: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
2120: 6d 65 73 20 74 68 61 74 20 73 68 6f 75 6c 64 20  mes that should 
2130: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 24  be returned by $
2140: 53 54 4d 54 2e 0a 23 20 24 64 65 63 6c 74 79 70  STMT..# $decltyp
2150: 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  es is a list of 
2160: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
2170: 6f 6e 20 74 79 70 65 73 20 66 6f 72 20 24 53 54  on types for $ST
2180: 4d 54 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a  MT..#.# Example:
2190: 0a 23 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73  .#.# set STMT [s
21a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
21b0: 32 20 22 53 45 4c 45 43 54 20 31 2c 20 32 2c 20  2 "SELECT 1, 2, 
21c0: 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20  2;" -1 DUMMY].# 
21d0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 74 65 73  check_header tes
21e0: 74 31 2e 31 20 7b 31 20 32 20 33 7d 20 7b 22 22  t1.1 {1 2 3} {""
21f0: 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f 63 20 63   "" ""}.#.proc c
2200: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
2210: 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20 64 62  er {STMT test db
2220: 73 20 74 61 62 6c 65 73 20 63 6f 6c 73 7d 20 7b  s tables cols} {
2230: 0a 20 20 23 20 49 66 20 73 71 6c 69 74 65 33 5f  .  # If sqlite3_
2240: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
2250: 6d 65 28 29 20 61 6e 64 20 66 72 69 65 6e 64 73  me() and friends
2260: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 69 6c 65   are not compile
2270: 64 20 69 6e 74 6f 0a 20 20 23 20 74 68 69 73 20  d into.  # this 
2280: 62 75 69 6c 64 2c 20 74 68 69 73 20 70 72 6f 63  build, this proc
2290: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 69 66 63   is a no-op..ifc
22a0: 61 70 61 62 6c 65 20 63 6f 6c 75 6d 6e 6d 65 74  apable columnmet
22b0: 61 64 61 74 61 20 7b 0a 0a 20 20 20 20 23 20 55  adata {..    # U
22c0: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
22d0: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63  lue of sqlite3_c
22e0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f  olumn_count() to
22f0: 20 62 75 69 6c 64 0a 20 20 20 20 23 20 61 20 6c   build.    # a l
2300: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ist of column in
2310: 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66 20 73  dexes. i.e. If s
2320: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
2330: 75 6e 74 0a 20 20 20 20 23 20 69 73 20 33 2c 20  unt.    # is 3, 
2340: 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 7b  build the list {
2350: 30 20 31 20 32 7d 2e 0a 20 20 20 20 73 65 74 20  0 1 2}..    set 
2360: 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d  ::idxlist [list]
2370: 0a 20 20 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f  .    set ::numco
2380: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ls [sqlite3_colu
2390: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a  mn_count $STMT].
23a0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
23b0: 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f  } {$i < $::numco
23c0: 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61  ls} {incr i} {la
23d0: 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20  ppend ::idxlist 
23e0: 24 69 7d 0a 20 20 0a 20 20 20 20 23 20 44 61 74  $i}.  .    # Dat
23f0: 61 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55  abase names in U
2400: 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73 74  TF-8.    do_test
2410: 20 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20 20   $test.8 {.     
2420: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
2430: 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65  list].      fore
2440: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
2450: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
2460: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69   cnamelist [sqli
2470: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
2480: 61 73 65 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  ase_name $STMT $
2490: 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  i].      } .    
24a0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
24b0: 20 20 20 20 7d 20 24 64 62 73 0a 20 20 0a 20 20      } $dbs.  .  
24c0: 20 20 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d    # Database nam
24d0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20  es in UTF-16.   
24e0: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
24f0: 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65  6} {.      do_te
2500: 73 74 20 24 74 65 73 74 2e 39 20 7b 0a 20 20 20  st $test.9 {.   
2510: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2520: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
2530: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
2540: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20  list {.         
2550: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
2560: 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  st [utf8 [sqlite
2570: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
2580: 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24  e_name16 $STMT $
2590: 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  i]].        }.  
25a0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
25b0: 69 73 74 0a 20 20 20 20 20 20 7d 20 24 64 62 73  ist.      } $dbs
25c0: 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 23 20  .    }.  .    # 
25d0: 54 61 62 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55  Table names in U
25e0: 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73 74  TF-8.    do_test
25f0: 20 24 74 65 73 74 2e 31 30 20 7b 0a 20 20 20 20   $test.10 {.    
2600: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
2610: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
2620: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2630: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
2640: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
2650: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
2660: 65 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d  e_name $STMT $i]
2670: 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20  .      } .      
2680: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
2690: 20 20 7d 20 24 74 61 62 6c 65 73 0a 20 20 0a 20    } $tables.  . 
26a0: 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65 73     # Table names
26b0: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20 69   in UTF-16.    i
26c0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
26d0: 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74   {.      do_test
26e0: 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20 20 20   $test.11 {.    
26f0: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
2700: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 20  t [list].       
2710: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2720: 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ist {.          
2730: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
2740: 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33  t [utf8 [sqlite3
2750: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
2760: 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a  me16 $STMT $i]].
2770: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2780: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
2790: 20 20 20 20 20 20 7d 20 24 74 61 62 6c 65 73 0a        } $tables.
27a0: 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 23 20 4f      }.  .    # O
27b0: 72 69 67 69 6e 20 6e 61 6d 65 73 20 69 6e 20 55  rigin names in U
27c0: 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74 65 73 74  TF-8.    do_test
27d0: 20 24 74 65 73 74 2e 31 32 20 7b 0a 20 20 20 20   $test.12 {.    
27e0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
27f0: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
2800: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2810: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
2820: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
2830: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2840: 69 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69  in_name $STMT $i
2850: 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  ].      } .     
2860: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
2870: 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20 0a 20 20     } $cols.  .  
2880: 20 20 23 20 4f 72 69 67 69 6e 20 64 65 63 6c 61    # Origin decla
2890: 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69 6e 20  ration types in 
28a0: 55 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70  UTF-16.    ifcap
28b0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
28c0: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65       do_test $te
28d0: 73 74 2e 31 33 20 7b 0a 20 20 20 20 20 20 20 20  st.13 {.        
28e0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
28f0: 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f 72  ist].        for
2900: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2910: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  {.          lapp
2920: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75  end cnamelist [u
2930: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
2940: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
2950: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
2960: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
2970: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
2980: 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20 20 20 7d     } $cols.    }
2990: 0a 20 20 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70  .  }.}..# This p
29a0: 72 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20 74  roc is used to t
29b0: 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  est the followin
29c0: 67 20 41 50 49 73 3a 0a 23 0a 23 20 73 71 6c 69  g APIs:.#.# sqli
29d0: 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 0a 23  te3_data_count.#
29e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
29f0: 74 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f 63  type.# sqlite3_c
2a00: 6f 6c 75 6d 6e 5f 69 6e 74 0a 23 20 73 71 6c 69  olumn_int.# sqli
2a10: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 0a  te3_column_text.
2a20: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2a30: 5f 74 65 78 74 31 36 0a 23 20 73 71 6c 69 74 65  _text16.# sqlite
2a40: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 0a  3_column_double.
2a50: 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63  #.# $STMT is a c
2a60: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
2a70: 65 6d 65 6e 74 20 66 6f 72 20 77 68 69 63 68 20  ement for which 
2a80: 74 68 65 20 70 72 65 76 69 6f 75 73 20 63 61 6c  the previous cal
2a90: 6c 20 0a 23 20 74 6f 20 73 71 6c 69 74 65 33 5f  l .# to sqlite3_
2aa0: 73 74 65 70 20 72 65 74 75 72 6e 65 64 20 53 51  step returned SQ
2ab0: 4c 49 54 45 5f 52 4f 57 2e 20 24 74 65 73 74 20  LITE_ROW. $test 
2ac0: 69 73 20 61 20 70 72 65 66 69 78 20 74 6f 20 75  is a prefix to u
2ad0: 73 65 20 0a 23 20 66 6f 72 20 74 65 73 74 20 6e  se .# for test n
2ae0: 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69 73  ames within this
2af0: 20 70 72 6f 63 2e 20 24 74 79 70 65 73 20 69 73   proc. $types is
2b00: 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 20 0a   a list of the .
2b10: 23 20 6d 61 6e 69 66 65 73 74 20 74 79 70 65 73  # manifest types
2b20: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
2b30: 20 72 6f 77 2e 20 24 69 6e 74 73 2c 20 24 64 6f   row. $ints, $do
2b40: 75 62 6c 65 73 20 61 6e 64 20 24 73 74 72 69 6e  ubles and $strin
2b50: 67 73 0a 23 20 61 72 65 20 6c 69 73 74 73 20 6f  gs.# are lists o
2b60: 66 20 74 68 65 20 69 6e 74 65 67 65 72 2c 20 72  f the integer, r
2b70: 65 61 6c 20 61 6e 64 20 73 74 72 69 6e 67 20 72  eal and string r
2b80: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20 6f  epresentations o
2b90: 66 0a 23 20 74 68 65 20 76 61 6c 75 65 73 20 69  f.# the values i
2ba0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  n the current ro
2bb0: 77 2e 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a  w..#.# Example:.
2bc0: 23 0a 23 20 73 65 74 20 53 54 4d 54 20 5b 73 71  #.# set STMT [sq
2bd0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
2be0: 20 22 53 45 4c 45 43 54 20 27 68 65 6c 6c 6f 27   "SELECT 'hello'
2bf0: 2c 20 31 2e 31 2c 20 4e 55 4c 4c 22 20 2d 31 20  , 1.1, NULL" -1 
2c00: 44 55 4d 4d 59 5d 0a 23 20 73 71 6c 69 74 65 33  DUMMY].# sqlite3
2c10: 5f 73 74 65 70 20 24 53 54 4d 54 0a 23 20 63 68  _step $STMT.# ch
2c20: 65 63 6b 5f 64 61 74 61 20 74 65 73 74 31 2e 32  eck_data test1.2
2c30: 20 7b 54 45 58 54 20 52 45 41 4c 20 4e 55 4c 4c   {TEXT REAL NULL
2c40: 7d 20 7b 30 20 31 20 30 7d 20 7b 30 20 31 2e 31  } {0 1 0} {0 1.1
2c50: 20 30 7d 20 7b 68 65 6c 6c 6f 20 31 2e 31 20 7b   0} {hello 1.1 {
2c60: 7d 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f  }}.#.proc check_
2c70: 64 61 74 61 20 7b 53 54 4d 54 20 74 65 73 74 20  data {STMT test 
2c80: 74 79 70 65 73 20 69 6e 74 73 20 64 6f 75 62 6c  types ints doubl
2c90: 65 73 20 73 74 72 69 6e 67 73 7d 20 7b 0a 0a 20  es strings} {.. 
2ca0: 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75 72   # Use the retur
2cb0: 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74  n value of sqlit
2cc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
2cd0: 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20 61  ) to build.  # a
2ce0: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   list of column 
2cf0: 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66  indexes. i.e. If
2d00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2d10: 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c 20  count.  # is 3, 
2d20: 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 7b  build the list {
2d30: 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a 3a  0 1 2}..  set ::
2d40: 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  idxlist [list]. 
2d50: 20 73 65 74 20 6e 75 6d 63 6f 6c 73 20 5b 73 71   set numcols [sq
2d60: 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
2d70: 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72 20 7b 73   $STMT].  for {s
2d80: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e  et i 0} {$i < $n
2d90: 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d  umcols} {incr i}
2da0: 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c   {lappend ::idxl
2db0: 69 73 74 20 24 69 7d 0a 0a 23 20 74 79 70 65 73  ist $i}..# types
2dc0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
2dd0: 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73 20 5b   {.  set types [
2de0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
2df0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
2e00: 65 6e 64 20 74 79 70 65 73 20 5b 73 71 6c 69 74  end types [sqlit
2e10: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24  e3_column_type $
2e20: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
2e30: 74 79 70 65 73 0a 7d 20 24 74 79 70 65 73 0a 0a  types.} $types..
2e40: 23 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65  # Integers.do_te
2e50: 73 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 73  st $test.2 {.  s
2e60: 65 74 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20  et ints [list]. 
2e70: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2e80: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74  ist {lappend int
2e90: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
2ea0: 6e 5f 69 6e 74 36 34 20 24 53 54 4d 54 20 24 69  n_int64 $STMT $i
2eb0: 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20  ]}.  set ints.} 
2ec0: 24 69 6e 74 73 0a 0a 23 20 62 79 74 65 73 0a 73  $ints..# bytes.s
2ed0: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 66  et lens [list].f
2ee0: 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c  oreach i $::idxl
2ef0: 69 73 74 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20  ist {.  lappend 
2f00: 6c 65 6e 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e  lens [string len
2f10: 67 74 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72  gth [lindex $str
2f20: 69 6e 67 73 20 24 69 5d 5d 0a 7d 0a 64 6f 5f 74  ings $i]].}.do_t
2f30: 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20  est $test.3 {.  
2f40: 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d  set bytes [list]
2f50: 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73  .  set lens [lis
2f60: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
2f70: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61  idxlist {.    la
2f80: 70 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c  ppend bytes [sql
2f90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
2fa0: 73 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 7d 0a  s $STMT $i].  }.
2fb0: 20 20 73 65 74 20 62 79 74 65 73 0a 7d 20 24 6c    set bytes.} $l
2fc0: 65 6e 73 0a 0a 23 20 62 79 74 65 73 31 36 0a 69  ens..# bytes16.i
2fd0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
2fe0: 20 7b 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c   {.  set lens [l
2ff0: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
3000: 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20   $::idxlist {.  
3010: 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b    lappend lens [
3020: 65 78 70 72 20 32 20 2a 20 5b 73 74 72 69 6e 67  expr 2 * [string
3030: 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20   length [lindex 
3040: 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 5d 0a 20  $strings $i]]]. 
3050: 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65   }.  do_test $te
3060: 73 74 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 62  st.4 {.    set b
3070: 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20  ytes [list].    
3080: 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a  set lens [list].
3090: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
30a0: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 6c  dxlist {.      l
30b0: 61 70 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71  append bytes [sq
30c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
30d0: 65 73 31 36 20 24 53 54 4d 54 20 24 69 5d 0a 20  es16 $STMT $i]. 
30e0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 62 79 74     }.    set byt
30f0: 65 73 0a 20 20 7d 20 24 6c 65 6e 73 0a 7d 0a 0a  es.  } $lens.}..
3100: 23 20 42 6c 6f 62 0a 64 6f 5f 74 65 73 74 20 24  # Blob.do_test $
3110: 74 65 73 74 2e 35 20 7b 0a 20 20 73 65 74 20 75  test.5 {.  set u
3120: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
3130: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
3140: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
3150: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
3160: 6f 62 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20  ob $STMT $i]}.  
3170: 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69  set utf8.} $stri
3180: 6e 67 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f  ngs..# UTF-8.do_
3190: 74 65 73 74 20 24 74 65 73 74 2e 36 20 7b 0a 20  test $test.6 {. 
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 74 65 78 74 20 24 53 54 4d 54 20 24  umn_text $STMT $
31f0: 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d  i]}.  set utf8.}
3200: 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 46 6c 6f   $strings..# Flo
3210: 61 74 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ats.do_test $tes
3220: 74 2e 37 20 7b 0a 20 20 73 65 74 20 75 74 66 38  t.7 {.  set utf8
3230: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3240: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3250: 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69  ppend utf8 [sqli
3260: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
3270: 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  e $STMT $i]}.  s
3280: 65 74 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c  et utf8.} $doubl
3290: 65 73 0a 0a 23 20 55 54 46 2d 31 36 0a 69 66 63  es..# UTF-16.ifc
32a0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
32b0: 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74  .  do_test $test
32c0: 2e 38 20 7b 0a 20 20 20 20 73 65 74 20 75 74 66  .8 {.    set utf
32d0: 38 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  8 [list].    for
32e0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
32f0: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 75  {lappend utf8 [u
3300: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
3310: 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54  umn_text16 $STMT
3320: 20 24 69 5d 5d 7d 0a 20 20 20 20 73 65 74 20 75   $i]]}.    set u
3330: 74 66 38 0a 20 20 7d 20 24 73 74 72 69 6e 67 73  tf8.  } $strings
3340: 0a 7d 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64  .}..# Integers.d
3350: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20 7b  o_test $test.9 {
3360: 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73  .  set ints [lis
3370: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
3380: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
3390: 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63   ints [sqlite3_c
33a0: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
33b0: 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a  $i]}.  set ints.
33c0: 7d 20 24 69 6e 74 73 0a 0a 23 20 46 6c 6f 61 74  } $ints..# Float
33d0: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
33e0: 31 30 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20  10 {.  set utf8 
33f0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
3400: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3410: 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74  pend utf8 [sqlit
3420: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
3430: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3440: 74 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65  t utf8.} $double
3450: 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65  s..# UTF-8.do_te
3460: 73 74 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20  st $test.11 {.  
3470: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
3480: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3490: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
34a0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
34b0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69  mn_text $STMT $i
34c0: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
34d0: 24 73 74 72 69 6e 67 73 0a 0a 23 20 54 79 70 65  $strings..# Type
34e0: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
34f0: 31 32 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73  12 {.  set types
3500: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3510: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3520: 70 70 65 6e 64 20 74 79 70 65 73 20 5b 73 71 6c  ppend types [sql
3530: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
3540: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3550: 74 20 74 79 70 65 73 0a 7d 20 24 74 79 70 65 73  t types.} $types
3560: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 61 6e  ..# Test that an
3570: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 72 65   out of range re
3580: 71 75 65 73 74 20 72 65 74 75 72 6e 73 20 74 68  quest returns th
3590: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
35a0: 4e 55 4c 4c 0a 64 6f 5f 74 65 73 74 20 24 74 65  NULL.do_test $te
35b0: 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  st.13 {.  sqlite
35c0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
35d0: 4d 54 20 2d 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  MT -1.} {0}.do_t
35e0: 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20  est $test.13 {. 
35f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3600: 74 65 78 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20  text $STMT -1.} 
3610: 7b 7d 0a 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  {}..}..ifcapable
3620: 20 21 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 20   !floatingpoint 
3630: 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a  {.  finish_test.
3640: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74    return.}..do_t
3650: 65 73 74 20 63 61 70 69 33 63 2d 35 2e 30 20 7b  est capi3c-5.0 {
3660: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3670: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
3680: 28 61 20 56 41 52 49 4e 54 2c 20 62 20 42 4c 4f  (a VARINT, b BLO
3690: 42 2c 20 63 20 56 41 52 43 48 41 52 28 31 36 29  B, c VARCHAR(16)
36a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
36b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
36c0: 32 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  2, 3);.    INSER
36d0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
36e0: 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 2c 20 4e  ('one', 'two', N
36f0: 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ULL);.    INSERT
3700: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3710: 31 2e 32 2c 20 31 2e 33 2c 20 31 2e 34 29 3b 0a  1.2, 1.3, 1.4);.
3720: 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20 22 53    }.  set sql "S
3730: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 22  ELECT * FROM t1"
3740: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3750: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
3760: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
3770: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ].  sqlite3_colu
3780: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d  mn_count $STMT.}
3790: 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72   3..check_header
37a0: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
37b0: 31 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e  1 {a b c} {VARIN
37c0: 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31  T BLOB VARCHAR(1
37d0: 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  6)}.check_origin
37e0: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
37f0: 70 69 33 63 2d 35 2e 31 20 7b 6d 61 69 6e 20 6d  pi3c-5.1 {main m
3800: 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31  ain main} {t1 t1
3810: 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 64 6f 5f   t1} {a b c}.do_
3820: 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 32 20  test capi3c-5.2 
3830: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
3840: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3850: 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  ROW..check_heade
3860: 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  r $STMT capi3c-5
3870: 2e 33 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49  .3 {a b c} {VARI
3880: 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28  NT BLOB VARCHAR(
3890: 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69  16)}.check_origi
38a0: 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  n_header $STMT c
38b0: 61 70 69 33 63 2d 35 2e 33 20 7b 6d 61 69 6e 20  api3c-5.3 {main 
38c0: 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74  main main} {t1 t
38d0: 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68  1 t1} {a b c}.ch
38e0: 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63  eck_data $STMT c
38f0: 61 70 69 33 63 2d 35 2e 34 20 7b 49 4e 54 45 47  api3c-5.4 {INTEG
3900: 45 52 20 49 4e 54 45 47 45 52 20 54 45 58 54 7d  ER INTEGER TEXT}
3910: 20 7b 31 20 32 20 33 7d 20 7b 31 2e 30 20 32 2e   {1 2 3} {1.0 2.
3920: 30 20 33 2e 30 7d 20 7b 31 20 32 20 33 7d 0a 0a  0 3.0} {1 2 3}..
3930: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35  do_test capi3c-5
3940: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .5 {.  sqlite3_s
3950: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
3960: 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65  TE_ROW..check_he
3970: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3980: 63 2d 35 2e 36 20 7b 61 20 62 20 63 7d 20 7b 56  c-5.6 {a b c} {V
3990: 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48  ARINT BLOB VARCH
39a0: 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72  AR(16)}.check_or
39b0: 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d  igin_header $STM
39c0: 54 20 63 61 70 69 33 63 2d 35 2e 36 20 7b 6d 61  T capi3c-5.6 {ma
39d0: 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74  in main main} {t
39e0: 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d  1 t1 t1} {a b c}
39f0: 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d  .check_data $STM
3a00: 54 20 63 61 70 69 33 63 2d 35 2e 37 20 7b 54 45  T capi3c-5.7 {TE
3a10: 58 54 20 54 45 58 54 20 4e 55 4c 4c 7d 20 7b 30  XT TEXT NULL} {0
3a20: 20 30 20 30 7d 20 7b 30 2e 30 20 30 2e 30 20 30   0 0} {0.0 0.0 0
3a30: 2e 30 7d 20 7b 6f 6e 65 20 74 77 6f 20 7b 7d 7d  .0} {one two {}}
3a40: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
3a50: 2d 35 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33  -5.8 {.  sqlite3
3a60: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
3a70: 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f  LITE_ROW..check_
3a80: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3a90: 69 33 63 2d 35 2e 39 20 7b 61 20 62 20 63 7d 20  i3c-5.9 {a b c} 
3aa0: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
3ab0: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
3ac0: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3ad0: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 39 20 7b  TMT capi3c-5.9 {
3ae0: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3af0: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
3b00: 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  c}.check_data $S
3b10: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 31 30 20  TMT capi3c-5.10 
3b20: 7b 46 4c 4f 41 54 20 46 4c 4f 41 54 20 54 45 58  {FLOAT FLOAT TEX
3b30: 54 7d 20 7b 31 20 31 20 31 7d 20 7b 31 2e 32 20  T} {1 1 1} {1.2 
3b40: 31 2e 33 20 31 2e 34 7d 20 7b 31 2e 32 20 31 2e  1.3 1.4} {1.2 1.
3b50: 33 20 31 2e 34 7d 0a 0a 64 6f 5f 74 65 73 74 20  3 1.4}..do_test 
3b60: 63 61 70 69 33 63 2d 35 2e 31 31 20 7b 0a 20 20  capi3c-5.11 {.  
3b70: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3b80: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
3b90: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
3ba0: 2d 35 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65  -5.12 {.  sqlite
3bb0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
3bc0: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f  .} SQLITE_OK..do
3bd0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 32  _test capi3c-5.2
3be0: 30 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 53  0 {.  set sql "S
3bf0: 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 62 29 2c  ELECT a, sum(b),
3c00: 20 6d 61 78 28 63 29 20 46 52 4f 4d 20 74 31 20   max(c) FROM t1 
3c10: 47 52 4f 55 50 20 42 59 20 61 22 0a 20 20 73 65  GROUP BY a".  se
3c20: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
3c30: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 24  prepare_v2 $DB $
3c40: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
3c50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
3c60: 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63  unt $STMT.} 3..c
3c70: 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d  heck_header $STM
3c80: 54 20 63 61 70 69 33 63 2d 35 2e 32 31 20 7b 61  T capi3c-5.21 {a
3c90: 20 73 75 6d 28 62 29 20 6d 61 78 28 63 29 7d 20   sum(b) max(c)} 
3ca0: 7b 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63  {VARINT {} {}}.c
3cb0: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3cc0: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  er $STMT capi3c-
3cd0: 35 2e 32 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d  5.22 {main {} {}
3ce0: 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20  } {t1 {} {}} {a 
3cf0: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {} {}}.do_test c
3d00: 61 70 69 33 63 2d 35 2e 32 33 20 7b 0a 20 20 73  api3c-5.23 {.  s
3d10: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3d20: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
3d30: 4b 0a 0a 0a 73 65 74 20 3a 3a 45 4e 43 20 5b 65  K...set ::ENC [e
3d40: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65  xecsql {pragma e
3d50: 6e 63 6f 64 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f  ncoding}].db clo
3d60: 73 65 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  se..do_test capi
3d70: 33 63 2d 36 2e 30 20 7b 0a 20 20 73 71 6c 69 74  3c-6.0 {.  sqlit
3d80: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
3d90: 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f  set DB [sqlite3_
3da0: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
3db0: 65 72 20 64 62 5d 0a 20 20 69 66 20 7b 5b 73 71  er db].  if {[sq
3dc0: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
3dd0: 5d 3d 3d 30 7d 20 7b 20 73 71 6c 69 74 65 33 5f  ]==0} { sqlite3_
3de0: 6b 65 79 20 24 44 42 20 78 79 7a 7a 79 20 7d 0a  key $DB xyzzy }.
3df0: 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43    set sql {SELEC
3e00: 54 20 61 20 46 52 4f 4d 20 74 31 20 6f 72 64 65  T a FROM t1 orde
3e10: 72 20 62 79 20 72 6f 77 69 64 7d 0a 20 20 73 65  r by rowid}.  se
3e20: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
3e30: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 24  prepare_v2 $DB $
3e40: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 65  sql -1 TAIL].  e
3e50: 78 70 72 20 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  xpr 0.} {0}.do_t
3e60: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 31 20 7b  est capi3c-6.1 {
3e70: 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75 73  .  db cache flus
3e80: 68 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  h.  sqlite3_clos
3e90: 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f  e $DB.} {SQLITE_
3ea0: 42 55 53 59 7d 0a 64 6f 5f 74 65 73 74 20 63 61  BUSY}.do_test ca
3eb0: 70 69 33 63 2d 36 2e 32 20 7b 0a 20 20 73 71 6c  pi3c-6.2 {.  sql
3ec0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3ed0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 63  } {SQLITE_ROW}.c
3ee0: 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20  heck_data $STMT 
3ef0: 63 61 70 69 33 63 2d 36 2e 33 20 7b 49 4e 54 45  capi3c-6.3 {INTE
3f00: 47 45 52 7d 20 7b 31 7d 20 7b 31 2e 30 7d 20 7b  GER} {1} {1.0} {
3f10: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
3f20: 63 2d 36 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  c-6.3 {.  sqlite
3f30: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
3f40: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 69  .} {SQLITE_OK}.i
3f50: 66 20 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69  f {[clang_saniti
3f60: 7a 65 5f 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20  ze_address]==0} 
3f70: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
3f80: 33 63 2d 36 2e 34 20 7b 0a 20 20 20 20 64 62 20  3c-6.4 {.    db 
3f90: 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 20 20  cache flush.    
3fa0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
3fb0: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
3fc0: 4f 4b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OK}.  do_test ca
3fd0: 70 69 33 63 2d 36 2e 39 39 2d 6d 69 73 75 73 65  pi3c-6.99-misuse
3fe0: 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a   {.    db close.
3ff0: 20 20 7d 20 7b 7d 0a 7d 20 65 6c 73 65 20 7b 0a    } {}.} else {.
4000: 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 23 20    db close.}..# 
4010: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73  This procedure s
4020: 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ets the value of
4030: 20 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74   the file-format
4040: 20 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64   in file 'test.d
4050: 62 27 0a 23 20 74 6f 20 24 6e 65 77 76 61 6c 2e  b'.# to $newval.
4060: 20 41 6c 73 6f 2c 20 74 68 65 20 73 63 68 65 6d   Also, the schem
4070: 61 20 63 6f 6f 6b 69 65 20 69 73 20 69 6e 63 72  a cookie is incr
4080: 65 6d 65 6e 74 65 64 2e 0a 23 20 0a 70 72 6f 63  emented..# .proc
4090: 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74   set_file_format
40a0: 20 7b 6e 65 77 76 61 6c 7d 20 7b 0a 20 20 68 65   {newval} {.  he
40b0: 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64  xio_write test.d
40c0: 62 20 34 34 20 5b 68 65 78 69 6f 5f 72 65 6e 64  b 44 [hexio_rend
40d0: 65 72 5f 69 6e 74 33 32 20 24 6e 65 77 76 61 6c  er_int32 $newval
40e0: 5d 0a 20 20 73 65 74 20 73 63 68 65 6d 61 63 6f  ].  set schemaco
40f0: 6f 6b 69 65 20 5b 68 65 78 69 6f 5f 67 65 74 5f  okie [hexio_get_
4100: 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64 20  int [hexio_read 
4110: 74 65 73 74 2e 64 62 20 34 30 20 34 5d 5d 0a 20  test.db 40 4]]. 
4120: 20 69 6e 63 72 20 73 63 68 65 6d 61 63 6f 6f 6b   incr schemacook
4130: 69 65 0a 20 20 68 65 78 69 6f 5f 77 72 69 74 65  ie.  hexio_write
4140: 20 74 65 73 74 2e 64 62 20 34 30 20 5b 68 65 78   test.db 40 [hex
4150: 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32 20  io_render_int32 
4160: 24 73 63 68 65 6d 61 63 6f 6f 6b 69 65 5d 0a 20  $schemacookie]. 
4170: 20 72 65 74 75 72 6e 20 7b 7d 0a 7d 0a 0a 23 20   return {}.}..# 
4180: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
4190: 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65  eturns the value
41a0: 20 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f 72   of the file-for
41b0: 6d 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65 73  mat in file 'tes
41c0: 74 2e 64 62 27 2e 0a 23 20 0a 70 72 6f 63 20 67  t.db'..# .proc g
41d0: 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b  et_file_format {
41e0: 7b 66 6e 61 6d 65 20 74 65 73 74 2e 64 62 7d 7d  {fname test.db}}
41f0: 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b 68 65 78   {.  return [hex
4200: 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78 69  io_get_int [hexi
4210: 6f 5f 72 65 61 64 20 24 66 6e 61 6d 65 20 34 34  o_read $fname 44
4220: 20 34 5d 5d 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71   4]].}..if {![sq
4230: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
4240: 5d 7d 20 7b 0a 20 20 23 20 54 65 73 74 20 77 68  ]} {.  # Test wh
4250: 61 74 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  at happens when 
4260: 74 68 65 20 6c 69 62 72 61 72 79 20 65 6e 63 6f  the library enco
4270: 75 6e 74 65 72 73 20 61 20 6e 65 77 65 72 20 66  unters a newer f
4280: 69 6c 65 20 66 6f 72 6d 61 74 2e 0a 20 20 64 6f  ile format..  do
4290: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 37 2e 31  _test capi3c-7.1
42a0: 20 7b 0a 20 20 20 20 73 65 74 5f 66 69 6c 65 5f   {.    set_file_
42b0: 66 6f 72 6d 61 74 20 35 0a 20 20 7d 20 7b 7d 0a  format 5.  } {}.
42c0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
42d0: 2d 37 2e 32 20 7b 0a 20 20 20 20 63 61 74 63 68  -7.2 {.    catch
42e0: 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65   { sqlite3 db te
42f0: 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63  st.db }.    catc
4300: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  hsql {.      SEL
4310: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
4320: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
4330: 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72    } {1 {unsuppor
4340: 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d  ted file format}
4350: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a  }.  db close.}..
4360: 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68  if {![sqlite3 -h
4370: 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23  as-codec]} {.  #
4380: 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74   Now test that t
4390: 68 65 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65  he library corre
43a0: 63 74 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67  ctly handles bog
43b0: 75 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  us entries in th
43c0: 65 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73  e.  # sqlite_mas
43d0: 74 65 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d  ter table (schem
43e0: 61 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20  a corruption).. 
43f0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
4400: 38 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63 65 64  8.1 {.    forced
4410: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65  elete test.db te
4420: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
4430: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4440: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
4450: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
4460: 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 20  TABLE t1(a);.   
4470: 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a   }.    db close.
4480: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4490: 20 63 61 70 69 33 63 2d 38 2e 32 20 7b 0a 20 20   capi3c-8.2 {.  
44a0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
44b0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
44c0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
44d0: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
44e0: 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  ON;.      INSERT
44f0: 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73   INTO sqlite_mas
4500: 74 65 72 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c  ter VALUES(NULL,
4510: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
4520: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ULL);.    }.    
4530: 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a  db close.  } {}.
4540: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4550: 2d 38 2e 33 20 7b 0a 20 20 20 20 63 61 74 63 68  -8.3 {.    catch
4560: 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65   { sqlite3 db te
4570: 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63  st.db }.    catc
4580: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  hsql {.      SEL
4590: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
45a0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
45b0: 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65    } {1 {malforme
45c0: 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  d database schem
45d0: 61 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f 74 65 73  a (?)}}.  do_tes
45e0: 74 20 63 61 70 69 33 63 2d 38 2e 34 20 7b 0a 20  t capi3c-8.4 {. 
45f0: 20 20 20 23 20 42 75 69 6c 64 20 61 20 35 2d 66     # Build a 5-f
4600: 69 65 6c 64 20 72 6f 77 20 72 65 63 6f 72 64 2e  ield row record.
4610: 20 54 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   The first field
4620: 20 69 73 20 61 20 73 74 72 69 6e 67 20 27 74 61   is a string 'ta
4630: 62 6c 65 27 2c 20 61 6e 64 0a 20 20 20 20 23 20  ble', and.    # 
4640: 73 75 62 73 65 71 75 65 6e 74 20 66 69 65 6c 64  subsequent field
4650: 73 20 61 72 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a  s are all NULL..
4660: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
4670: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
4680: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
4690: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
46a0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
46b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
46c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
46d0: 61 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  a);.      PRAGMA
46e0: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
46f0: 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  =ON;.      INSER
4700: 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61  T INTO sqlite_ma
4710: 73 74 65 72 20 56 41 4c 55 45 53 28 27 74 61 62  ster VALUES('tab
4720: 6c 65 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  le',NULL,NULL,NU
4730: 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a  LL,NULL);.    }.
4740: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d      db close.  }
4750: 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65 73 74 20 63   {};.  do_test c
4760: 61 70 69 33 63 2d 38 2e 35 20 7b 0a 20 20 20 20  api3c-8.5 {.    
4770: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20  catch { sqlite3 
4780: 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20 20  db test.db }.   
4790: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
47a0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
47b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
47c0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c     }.  } {1 {mal
47d0: 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20  formed database 
47e0: 73 63 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64  schema (?)}}.  d
47f0: 62 20 63 6c 6f 73 65 0a 7d 0a 66 6f 72 63 65 64  b close.}.forced
4800: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 66 6f  elete test.db.fo
4810: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
4820: 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23 20 54 65  b-journal...# Te
4830: 73 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c  st the english l
4840: 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20 65  anguage string e
4850: 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20 73  quivalents for s
4860: 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  qlite error code
4870: 73 0a 73 65 74 20 63 6f 64 65 32 65 6e 67 6c 69  s.set code2engli
4880: 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51 4c 49 54  sh [list \.SQLIT
4890: 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 7b 6e 6f  E_OK         {no
48a0: 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c 0a 53 51  t an error} \.SQ
48b0: 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20 20 20  LITE_ERROR      
48c0: 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
48d0: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
48e0: 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 50  base} \.SQLITE_P
48f0: 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63 65 73  ERM       {acces
4900: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
4910: 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 42  ied} \.SQLITE_AB
4920: 4f 52 54 20 20 20 20 20 20 7b 63 61 6c 6c 62 61  ORT      {callba
4930: 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75 65  ck requested que
4940: 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53 51 4c 49  ry abort} \.SQLI
4950: 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 7b 64  TE_BUSY       {d
4960: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
4970: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b  d} \.SQLITE_LOCK
4980: 45 44 20 20 20 20 20 7b 64 61 74 61 62 61 73 65  ED     {database
4990: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
49a0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  } \.SQLITE_NOMEM
49b0: 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20 6d 65        {out of me
49c0: 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45 5f 52  mory} \.SQLITE_R
49d0: 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74 65 6d  EADONLY   {attem
49e0: 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
49f0: 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 7d  adonly database}
4a00: 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   \.SQLITE_INTERR
4a10: 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70 74 65  UPT  {interrupte
4a20: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f 45 52  d} \.SQLITE_IOER
4a30: 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49 2f 4f  R      {disk I/O
4a40: 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45   error} \.SQLITE
4a50: 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64 61 74  _CORRUPT    {dat
4a60: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
4a70: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c   is malformed} \
4a80: 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20  .SQLITE_FULL    
4a90: 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20     {database or 
4aa0: 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20 5c 0a  disk is full} \.
4ab0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20  SQLITE_CANTOPEN 
4ac0: 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65    {unable to ope
4ad0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d  n database file}
4ae0: 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50 54 59 20   \.SQLITE_EMPTY 
4af0: 20 20 20 20 20 7b 74 61 62 6c 65 20 63 6f 6e 74       {table cont
4b00: 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d 20 5c 0a  ains no data} \.
4b10: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 20 20  SQLITE_SCHEMA   
4b20: 20 20 7b 64 61 74 61 62 61 73 65 20 73 63 68 65    {database sche
4b30: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d 20  ma has changed} 
4b40: 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  \.SQLITE_CONSTRA
4b50: 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20  INT {constraint 
4b60: 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45  failed} \.SQLITE
4b70: 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64 61 74  _MISMATCH   {dat
4b80: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d 20  atype mismatch} 
4b90: 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  \.SQLITE_MISUSE 
4ba0: 20 20 20 20 7b 6c 69 62 72 61 72 79 20 72 6f 75      {library rou
4bb0: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
4bc0: 6f 66 20 73 65 71 75 65 6e 63 65 7d 20 5c 0a 53  of sequence} \.S
4bd0: 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20 20 20  QLITE_NOLFS     
4be0: 20 7b 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70   {large file sup
4bf0: 70 6f 72 74 20 69 73 20 64 69 73 61 62 6c 65 64  port is disabled
4c00: 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55 54 48 20  } \.SQLITE_AUTH 
4c10: 20 20 20 20 20 20 7b 61 75 74 68 6f 72 69 7a 61        {authoriza
4c20: 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53  tion denied} \.S
4c30: 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20 20 20 20  QLITE_FORMAT    
4c40: 20 7b 61 75 78 69 6c 69 61 72 79 20 64 61 74 61   {auxiliary data
4c50: 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f  base format erro
4c60: 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 41 4e 47  r} \.SQLITE_RANG
4c70: 45 20 20 20 20 20 20 7b 62 69 6e 64 20 6f 72 20  E      {bind or 
4c80: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74  column index out
4c90: 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53 51 4c   of range} \.SQL
4ca0: 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 7b  ITE_NOTADB     {
4cb0: 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65  file is encrypte
4cc0: 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61  d or is not a da
4cd0: 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77  tabase} \.unknow
4ce0: 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75 6e 6b  nerror      {unk
4cf0: 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a  nown error} \.].
4d00: 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62 65 72  .set test_number
4d10: 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f 64 65   1.foreach {code
4d20: 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64 65 32   english} $code2
4d30: 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f 5f 74  english {.  do_t
4d40: 65 73 74 20 63 61 70 69 33 63 2d 39 2e 24 74 65  est capi3c-9.$te
4d50: 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c 69 74  st_number "sqlit
4d60: 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20 24  e3_test_errstr $
4d70: 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68 0a 20  code" $english. 
4d80: 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d 62 65   incr test_numbe
4d90: 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20  r.}..# Test the 
4da0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 68  error message wh
4db0: 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75 74 20  en a "real" out 
4dc0: 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75 72 73  of memory occurs
4dd0: 2e 0a 69 66 20 7b 20 5b 70 65 72 6d 75 74 61 74  ..if { [permutat
4de0: 69 6f 6e 5d 20 21 3d 20 22 6e 6f 66 61 75 6c 74  ion] != "nofault
4df0: 73 69 6d 22 20 7d 20 7b 0a 69 66 63 61 70 61 62  sim" } {.ifcapab
4e00: 6c 65 20 6d 65 6d 64 65 62 75 67 20 7b 0a 20 20  le memdebug {.  
4e10: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
4e20: 30 2d 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0-1 {.    sqlite
4e30: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
4e40: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
4e50: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
4e60: 74 65 72 20 64 62 5d 0a 20 20 20 20 73 71 6c 69  ter db].    sqli
4e70: 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69  te3_memdebug_fai
4e80: 6c 20 30 0a 20 20 20 20 63 61 74 63 68 73 71 6c  l 0.    catchsql
4e90: 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20   {.      select 
4ea0: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
4eb0: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4ec0: 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  {1 {out of memor
4ed0: 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  y}}.  do_test ca
4ee0: 70 69 33 63 2d 31 30 2d 32 20 7b 0a 20 20 20 20  pi3c-10-2 {.    
4ef0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
4f00: 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20 6f 66  ::DB.  } {out of
4f10: 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63 61 70   memory}.  ifcap
4f20: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
4f30: 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33     do_test capi3
4f40: 63 2d 31 30 2d 33 20 7b 0a 20 20 20 20 20 20 75  c-10-3 {.      u
4f50: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72  tf8 [sqlite3_err
4f60: 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20 20  msg16 $::DB].   
4f70: 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   } {out of memor
4f80: 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73  y}.  }.  db clos
4f90: 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64  e.  sqlite3_memd
4fa0: 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 7d 0a 7d  ebug_fail -1.}.}
4fb0: 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ..# The followin
4fc0: 67 20 74 65 73 74 73 20 2d 20 63 61 70 69 33 63  g tests - capi3c
4fd0: 2d 31 31 2e 2a 20 2d 20 74 65 73 74 20 74 68 61  -11.* - test tha
4fe0: 74 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  t a COMMIT or RO
4ff0: 4c 4c 42 41 43 4b 0a 23 20 73 74 61 74 65 6d 65  LLBACK.# stateme
5000: 6e 74 20 69 73 73 75 65 64 20 77 68 69 6c 65 20  nt issued while 
5010: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
5020: 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 20  outstanding VMs 
5030: 74 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66  that are part of
5040: 0a 23 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  .# the transacti
5050: 6f 6e 20 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65  on fails..sqlite
5060: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73 65 74  3 db test.db.set
5070: 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e   DB [sqlite3_con
5080: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
5090: 64 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67 69 73  db].sqlite_regis
50a0: 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
50b0: 6e 20 24 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65  n $DB func.do_te
50c0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 20 7b  st capi3c-11.1 {
50d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
50e0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
50f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
5100: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
5110: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
5120: 27 69 6e 74 27 29 3b 0a 20 20 20 20 49 4e 53 45  'int');.    INSE
5130: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
5140: 53 28 32 2c 20 27 6e 6f 74 61 74 79 70 65 27 29  S(2, 'notatype')
5150: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
5160: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 2e 31  st capi3c-11.1.1
5170: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
5180: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
5190: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
51a0: 33 63 2d 31 31 2e 32 20 7b 0a 20 20 73 65 74 20  3c-11.2 {.  set 
51b0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
51c0: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45  epare_v2 $DB "SE
51d0: 4c 45 43 54 20 66 75 6e 63 28 62 2c 20 61 29 20  LECT func(b, a) 
51e0: 46 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c  FROM t1" -1 TAIL
51f0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
5200: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5210: 5f 52 4f 57 7d 0a 0a 23 20 41 73 20 6f 66 20 33  _ROW}..# As of 3
5220: 2e 36 2e 35 20 61 20 43 4f 4d 4d 49 54 20 69 73  .6.5 a COMMIT is
5230: 20 4f 4b 20 64 75 72 69 6e 67 20 77 68 69 6c 65   OK during while
5240: 20 61 20 71 75 65 72 79 20 69 73 20 73 74 69 6c   a query is stil
5250: 6c 20 72 75 6e 6e 69 6e 67 20 2d 0a 23 20 61 73  l running -.# as
5260: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 61   long as it is a
5270: 20 72 65 61 64 2d 6f 6e 6c 79 20 71 75 65 72 79   read-only query
5280: 20 61 6e 64 20 6e 6f 74 20 61 6e 20 69 6e 63 72   and not an incr
5290: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 77 72 69  emental BLOB wri
52a0: 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  te..#.do_test ca
52b0: 70 69 33 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 63  pi3-11.3.1 {.  c
52c0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f  atchsql {.    CO
52d0: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  MMIT;.  }.} {0 {
52e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
52f0: 2d 31 31 2e 33 2e 32 20 7b 0a 20 20 73 71 6c 69  -11.3.2 {.  sqli
5300: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
5310: 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49  code $DB.} {SQLI
5320: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63  TE_OK}.do_test c
5330: 61 70 69 33 2d 31 31 2e 33 2e 33 20 7b 0a 20 20  api3-11.3.3 {.  
5340: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
5350: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64  commit $DB.} 1.d
5360: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5370: 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.4 {.  db eval 
5380: 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61  {PRAGMA lock_sta
5390: 74 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20 73 68 61  tus}.} {main sha
53a0: 72 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  red temp closed}
53b0: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
53c0: 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -11.4 {.  sqlite
53d0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
53e0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
53f0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5400: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  5 {.  sqlite3_fi
5410: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5420: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
5430: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5440: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
5450: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5460: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OM t1;.  }.} {0 
5470: 7b 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70  {1 int 2 notatyp
5480: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
5490: 33 63 2d 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69  3c-11.7 {.  sqli
54a0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
54b0: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
54c0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 38 20 7b  st capi3c-11.8 {
54d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
54e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
54f0: 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (a);.    INSERT 
5500: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
5510: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
5520: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 29 3b  TO t2 VALUES(2);
5530: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
5540: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
5550: 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20  ALUES(3);.  }.} 
5560: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5570: 63 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c  c-11.8.1 {.  sql
5580: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5590: 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74  mit $DB.} 0.do_t
55a0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 20  est capi3c-11.9 
55b0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
55c0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
55d0: 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46   $DB "SELECT a F
55e0: 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d  ROM t2" -1 TAIL]
55f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5600: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5610: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5620: 69 33 63 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73  i3c-11.9.1 {.  s
5630: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5640: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5650: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5660: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
5670: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5680: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5690: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
56a0: 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.3 {.  sqlite3_
56b0: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
56c0: 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63  DB.} 1.do_test c
56d0: 61 70 69 33 63 2d 31 31 2e 31 30 20 7b 0a 20 20  api3c-11.10 {.  
56e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
56f0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 41 42 4f  MT.} {SQLITE_ABO
5700: 52 54 7d 0a 69 66 63 61 70 61 62 6c 65 20 21 61  RT}.ifcapable !a
5710: 75 74 6f 72 65 73 65 74 20 7b 0a 20 20 23 20 49  utoreset {.  # I
5720: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
5730: 54 4f 52 45 53 45 54 20 69 73 20 64 65 66 69 6e  TORESET is defin
5740: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61  ed, then the sta
5750: 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 0a 20  tement must be. 
5760: 20 23 20 72 65 73 65 74 28 29 20 62 65 66 6f 72   # reset() befor
5770: 65 20 69 74 20 63 61 6e 20 62 65 20 70 61 73 73  e it can be pass
5780: 65 64 20 74 6f 20 73 74 65 70 28 29 20 61 67 61  ed to step() aga
5790: 69 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  in..  do_test ca
57a0: 70 69 33 2d 31 31 2e 31 31 61 20 7b 20 73 71 6c  pi3-11.11a { sql
57b0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 20  ite3_step $STMT 
57c0: 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  } {SQLITE_MISUSE
57d0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
57e0: 33 2d 31 31 2e 31 31 62 20 7b 20 73 71 6c 69 74  3-11.11b { sqlit
57f0: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 20 7d  e3_reset $STMT }
5800: 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52 54 7d 0a   {SQLITE_ABORT}.
5810: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5820: 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -11.11 {.  sqlit
5830: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5840: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5850: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
5860: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
5870: 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  ep $STMT.  sqlit
5880: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5890: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f  {SQLITE_DONE}.do
58a0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
58b0: 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  13 {.  sqlite3_f
58c0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
58d0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
58e0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 34  est capi3c-11.14
58f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5900: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
5910: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d   t2;.  }.} {1 2}
5920: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5930: 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69  11.14.1 {.  sqli
5940: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5950: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
5960: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 35 20  st capi3c-11.15 
5970: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5980: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5990: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f  .} {1 {cannot ro
59a0: 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
59b0: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
59c0: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
59d0: 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73  3c-11.15.1 {.  s
59e0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
59f0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5a00: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5a10: 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  16 {.  execsql {
5a20: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
5a30: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
5a40: 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63 68 65  2}..# Sanity che
5a50: 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69 6e 69  ck on the defini
5a60: 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e  tion of 'outstan
5a70: 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73 20 6d  ding VM'. This m
5a80: 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20 74 68  eans any VM.# th
5a90: 61 74 20 68 61 73 20 68 61 64 20 73 71 6c 69 74  at has had sqlit
5aa0: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 65 64  e3_step() called
5ab0: 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79 20 74   more recently t
5ac0: 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  han sqlite3_fina
5ad0: 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71 6c 69  lize() or.# sqli
5ae0: 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53 6f 20  te3_reset(). So 
5af0: 61 20 56 4d 20 74 68 61 74 20 68 61 73 20 6a 75  a VM that has ju
5b00: 73 74 20 62 65 65 6e 20 70 72 65 70 61 72 65 64  st been prepared
5b10: 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73 20 6e   or reset does n
5b20: 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20 61 6e  ot.# count as an
5b30: 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74   active VM..do_t
5b40: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 37  est capi3c-11.17
5b50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5b60: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20     BEGIN;.  }.} 
5b70: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5b80: 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20  c-11.18 {.  set 
5b90: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5ba0: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45  epare_v2 $DB "SE
5bb0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5bc0: 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68  -1 TAIL].  catch
5bd0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5be0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5bf0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5c00: 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .19 {.  sqlite3_
5c10: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5c20: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5c30: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 30 20 7b  t capi3c-11.20 {
5c40: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5c50: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d    BEGIN;.    COM
5c60: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5c70: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5c80: 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74  -11.20 {.  sqlit
5c90: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
5ca0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5cb0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31  COMMIT;.  }.} {1
5cc0: 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   {cannot commit 
5cd0: 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
5ce0: 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f   is active}}.do_
5cf0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5d00: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  1 {.  sqlite3_fi
5d10: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5d20: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68  SQLITE_OK}..# Th
5d30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
5d40: 73 20 2d 20 63 61 70 69 33 63 2d 31 32 2e 2a 20  s - capi3c-12.* 
5d50: 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 73  - check that its
5d60: 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23   Ok to start a.#
5d70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
5d80: 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  le other VMs are
5d90: 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61   active, and tha
5da0: 74 20 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63  t its Ok to exec
5db0: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
5dc0: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
5dd0: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
5de0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5df0: 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  1 {.  set STMT [
5e00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5e10: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  v2 $DB "SELECT a
5e20: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
5e30: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
5e40: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5e50: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5e60: 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a 20 20 63  api3c-12.2 {.  c
5e70: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
5e80: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5e90: 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(3, NULL);.  
5ea0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5eb0: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 33 20 7b  st capi3c-12.3 {
5ec0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5ed0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5ee0: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a   VALUES(4);.  }.
5ef0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5f00: 20 63 61 70 69 33 63 2d 31 32 2e 34 20 7b 0a 20   capi3c-12.4 {. 
5f10: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5f20: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
5f30: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5f40: 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  (4, NULL);.  }.}
5f50: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5f60: 63 61 70 69 33 63 2d 31 32 2e 35 20 7b 0a 20 20  capi3c-12.5 {.  
5f70: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5f80: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5f90: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5fa0: 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69  -12.5.1 {.  sqli
5fb0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5fc0: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5fd0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5fe0: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
5ff0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
6000: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
6010: 20 63 61 70 69 33 63 2d 31 32 2e 37 20 7b 0a 20   capi3c-12.7 {. 
6020: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6030: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6040: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
6050: 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20 20 65 78  pi3c-12.8 {.  ex
6060: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  ecsql {.    COMM
6070: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  IT;.    SELECT a
6080: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
6090: 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73  {1 2 3 4}..# Tes
60a0: 74 20 63 61 73 65 73 20 63 61 70 69 33 63 2d 31  t cases capi3c-1
60b0: 33 2e 2a 20 74 65 73 74 20 74 68 65 20 73 71 6c  3.* test the sql
60c0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
60d0: 6e 67 73 28 29 20 61 6e 64 20 0a 23 20 73 71 6c  ngs() and .# sql
60e0: 69 74 65 33 5f 73 6c 65 65 70 20 41 50 49 73 2e  ite3_sleep APIs.
60f0: 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .#.if {[llength 
6100: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73  [info commands s
6110: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
6120: 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64  dings]]>0} {.  d
6130: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
6140: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
6150: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
6160: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
6170: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
6180: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
6190: 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $DB "INSERT INTO
61a0: 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29   t1 VALUES(?, ?)
61b0: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  " -1 TAIL].    s
61c0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
61d0: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  T.  } {SQLITE_DO
61e0: 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  NE}.  do_test ca
61f0: 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20 20 20 20  pi3c-13.2 {.    
6200: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6210: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
6220: 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20  bind_text $STMT 
6230: 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71  1 hello 5.    sq
6240: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
6250: 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a  $STMT 2 world 5.
6260: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6270: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
6280: 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  TE_DONE}.  do_te
6290: 73 74 20 63 61 70 69 33 63 2d 31 33 2e 33 20 7b  st capi3c-13.3 {
62a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
62b0: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
62c0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
62d0: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
62e0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
62f0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
6300: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
6310: 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73  i3c-13-4 {.    s
6320: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6330: 24 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71  $STMT.    execsq
6340: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
6350: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
6360: 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c  }.  } {{} {} hel
6370: 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a  lo world {} {}}.
6380: 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b  }.if {[llength [
6390: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71  info commands sq
63a0: 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d  lite3_sleep]]>0}
63b0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
63c0: 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73  i3c-13-5 {.    s
63d0: 65 74 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73  et ms [sqlite3_s
63e0: 6c 65 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70  leep 80].    exp
63f0: 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d  r {$ms==80 || $m
6400: 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d  s==1000}.  } {1}
6410: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32  .}..# Ticket #12
6420: 31 39 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62  19:  Make sure b
6430: 69 6e 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20  inding APIs can 
6440: 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f  handle a NULL po
6450: 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  inter..#.do_test
6460: 20 63 61 70 69 33 63 2d 31 34 2e 31 20 7b 0a 20   capi3c-14.1 {. 
6470: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
6480: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6490: 74 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20 6d  t 0 1 hello 5} m
64a0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
64b0: 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54   $msg.} {1 SQLIT
64c0: 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20 54 69 63  E_MISUSE}..# Tic
64d0: 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e 6f  ket #1650:  Hono
64e0: 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61 72  r the nBytes par
64f0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
6500: 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f 5f  3_prepare..#.do_
6510: 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 31  test capi3c-15.1
6520: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
6530: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
6540: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
6550: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
6560: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6570: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6580: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6590: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
65a0: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
65b0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
65c0: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
65d0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
65e0: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
65f0: 73 74 20 63 61 70 69 33 63 2d 31 35 2e 32 20 7b  st capi3c-15.2 {
6600: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6610: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
6620: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6630: 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   0.} {2}.do_test
6640: 20 63 61 70 69 33 63 2d 31 35 2e 33 20 7b 0a 20   capi3c-15.3 {. 
6650: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6660: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6670: 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  E_OK}..# Make su
6680: 72 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79  re code is alway
6690: 73 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e  s generated even
66a0: 20 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53   if an IF EXISTS
66b0: 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58   or .# IF NOT EX
66c0: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
66d0: 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20  resent that the 
66e0: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f  table does not o
66f0: 72 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e  r.# does exists.
6700: 20 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69    That way we wi
6710: 6c 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61  ll always have a
6720: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
6730: 65 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20  ent.# to expire 
6740: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
6750: 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65  changes..#.do_te
6760: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 31 20 7b  st capi3c-16.1 {
6770: 0a 20 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50  .  set sql {DROP
6780: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
6790: 20 74 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20   t3}.  set STMT 
67a0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
67b0: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
67c0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
67d0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
67e0: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
67f0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6800: 63 61 70 69 33 63 2d 31 36 2e 32 20 7b 0a 20 20  capi3c-16.2 {.  
6810: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
6820: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
6830: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
6840: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6850: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6860: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6870: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6880: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6890: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
68a0: 0a 23 20 42 75 74 20 73 74 69 6c 6c 20 77 65 20  .# But still we 
68b0: 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 20  do not generate 
68c0: 63 6f 64 65 20 69 66 20 74 68 65 72 65 20 69 73  code if there is
68d0: 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73   no SQL.#.do_tes
68e0: 74 20 63 61 70 69 33 63 2d 31 36 2e 33 20 7b 0a  t capi3c-16.3 {.
68f0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6900: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
6910: 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  DB {} -1 TAIL]. 
6920: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6930: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
6940: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
6950: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6960: 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.4 {.  set STM
6970: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6980: 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d 20 2d 31  re_v2 $DB {;} -1
6990: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
69a0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
69b0: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
69c0: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b  "}.} {1}..# Tick
69d0: 65 74 20 23 32 31 35 34 2e 0a 23 0a 64 6f 5f 74  et #2154..#.do_t
69e0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 20  est capi3c-17.1 
69f0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
6a00: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
6a10: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78   $DB {SELECT max
6a20: 28 61 29 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  (a) FROM t2} -1 
6a30: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6a40: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
6a50: 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20  ITE_ROW.do_test 
6a60: 63 61 70 69 33 63 2d 31 37 2e 32 20 7b 0a 20 20  capi3c-17.2 {.  
6a70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6a80: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64  nt $STMT 0.} 4.d
6a90: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6aa0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .3 {.  sqlite3_s
6ab0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6ac0: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
6ad0: 63 61 70 69 33 63 2d 31 37 2e 34 20 7b 0a 20 20  capi3c-17.4 {.  
6ae0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6af0: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6b00: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f  REATE INDEX i2 O
6b10: 4e 20 74 32 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t2(a)}.  sqlit
6b20: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6b30: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6b40: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 35 20 7b  st capi3c-17.5 {
6b50: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6b60: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6b70: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
6b80: 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -17.6 {.  sqlite
6b90: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6ba0: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6bb0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 37 20 7b  st capi3c-17.7 {
6bc0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6bd0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6be0: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
6bf0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6c00: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6c10: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6c20: 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71 6c 69 74  c-17.8 {.  sqlit
6c30: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6c40: 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73  TMT 0.} 4.do_tes
6c50: 74 20 63 61 70 69 33 63 2d 31 37 2e 39 20 7b 0a  t capi3c-17.9 {.
6c60: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6c70: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6c80: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6c90: 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73 71 6c 69  c-17.10 {.  sqli
6ca0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6cb0: 4d 54 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  MT.  set STMT [s
6cc0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6cd0: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 62 20  2 $DB {SELECT b 
6ce0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
6cf0: 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ?} -1 TAIL].  sq
6d00: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24  lite3_bind_int $
6d10: 53 54 4d 54 20 31 20 32 0a 20 20 64 62 20 65 76  STMT 1 2.  db ev
6d20: 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  al {.    DELETE 
6d30: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53  FROM t1;.    INS
6d40: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6d50: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
6d60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6d70: 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29 3b  VALUES(2,'two');
6d80: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6d90: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 27 74 68   t1 VALUES(3,'th
6da0: 72 65 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ree');.    INSER
6db0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6dc0: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
6dd0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6de0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
6df0: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
6e00: 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -17.11 {.  sqlit
6e10: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
6e20: 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f  STMT 0.} two.do_
6e30: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6e40: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6e50: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6e60: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6e70: 61 70 69 33 63 2d 31 37 2e 31 33 20 7b 0a 20 20  api3c-17.13 {.  
6e80: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6e90: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6ea0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
6eb0: 4e 20 74 31 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t1(a)}.  sqlit
6ec0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6ed0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6ee0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 34 20  st capi3c-17.14 
6ef0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
6f00: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a  mn_text $STMT 0.
6f10: 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61  } two.do_test ca
6f20: 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a 20 20 73  pi3c-17.15 {.  s
6f30: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6f40: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
6f50: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6f60: 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.16 {.  sqlite3
6f70: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
6f80: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44  b eval {DROP IND
6f90: 45 58 20 69 31 7d 0a 20 20 73 71 6c 69 74 65 33  EX i1}.  sqlite3
6fa0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6fb0: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
6fc0: 20 63 61 70 69 33 63 2d 31 37 2e 31 37 20 7b 0a   capi3c-17.17 {.
6fd0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6fe0: 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a 7d 20  _text $STMT 0.} 
6ff0: 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  two.do_test capi
7000: 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20 73 71 6c  3c-17.18 {.  sql
7010: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7020: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
7030: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
7040: 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  99 {.  sqlite3_f
7050: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
7060: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 4f 6e 20  SQLITE_OK..# On 
7070: 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  the mailing list
7080: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 70   it has been rep
7090: 6f 72 74 65 64 20 74 68 61 74 20 66 69 6e 61 6c  orted that final
70a0: 69 7a 69 6e 67 20 61 66 74 65 72 0a 23 20 61 6e  izing after.# an
70b0: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 74   SQLITE_BUSY ret
70c0: 75 72 6e 20 6c 65 61 64 73 20 74 6f 20 61 20 73  urn leads to a s
70d0: 65 67 66 61 75 6c 74 2e 20 20 48 65 72 65 20 77  egfault.  Here w
70e0: 65 20 74 65 73 74 20 74 68 61 74 20 63 61 73 65  e test that case
70f0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
7100: 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73 71 6c 69  3c-18.1 {.  sqli
7110: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
7120: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7130: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7140: 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61  DB {SELECT max(a
7150: 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41  ) FROM t1} -1 TA
7160: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7170: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
7180: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
7190: 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20 20 73 71  pi3c-18.2 {.  sq
71a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
71b0: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
71c0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 33  test capi3c-18.3
71d0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
71e0: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 32 20 65  et $STMT.  db2 e
71f0: 76 61 6c 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  val {BEGIN EXCLU
7200: 53 49 56 45 7d 0a 20 20 73 71 6c 69 74 65 33 5f  SIVE}.  sqlite3_
7210: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
7220: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
7230: 20 63 61 70 69 33 63 2d 31 38 2e 34 20 7b 0a 20   capi3c-18.4 {. 
7240: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7250: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
7260: 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74 20 63 61  _BUSY.do_test ca
7270: 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20 20 64 62  pi3c-18.5 {.  db
7280: 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a  2 eval {COMMIT}.
7290: 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d    db2 close.} {}
72a0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 38  ..# Ticket #2158
72b0: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
72c0: 74 65 70 28 29 20 77 69 6c 6c 20 73 74 69 6c 6c  tep() will still
72d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 53   return SQLITE_S
72e0: 43 48 45 4d 41 0a 23 20 69 66 20 74 68 65 20 64  CHEMA.# if the d
72f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
7300: 68 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20  hanges in a way 
7310: 74 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 73  that makes the s
7320: 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f 20 6c 6f  tatement.# no lo
7330: 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23 0a 64 6f  nger valid..#.do
7340: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
7350: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
7360: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7370: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20  E t3(x,y);.     
7380: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
7390: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a  ALUES(1,2);.  }.
73a0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
73b0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
73c0: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
73d0: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
73e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
73f0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
7400: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7410: 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.2 {.  sqlite3
7420: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
7430: 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  T 0.} 1.do_test 
7440: 63 61 70 69 33 63 2d 31 39 2e 33 20 7b 0a 20 20  capi3c-19.3 {.  
7450: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7460: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
7470: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7480: 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.4 {.  sqlite3
7490: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
74a0: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42  b eval {DROP TAB
74b0: 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69 74 65 33  LE t3}.  sqlite3
74c0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
74d0: 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65  LITE_ERROR.do_te
74e0: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 31  st capi3c-19.4.1
74f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
7500: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
7510: 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a 69 66  ch table: t3}.if
7520: 63 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74  capable deprecat
7530: 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ed {.  do_test c
7540: 61 70 69 33 63 2d 31 39 2e 34 2e 32 20 7b 0a 20  api3c-19.4.2 {. 
7550: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72     sqlite3_expir
7560: 65 64 20 24 53 54 4d 54 0a 20 20 7d 20 31 0a 7d  ed $STMT.  } 1.}
7570: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7580: 31 39 2e 34 2e 33 20 7b 0a 20 20 73 71 6c 69 74  19.4.3 {.  sqlit
7590: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
75a0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
75b0: 74 33 7d 0a 69 66 63 61 70 61 62 6c 65 20 64 65  t3}.ifcapable de
75c0: 70 72 65 63 61 74 65 64 20 7b 0a 20 20 64 6f 5f  precated {.  do_
75d0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34  test capi3c-19.4
75e0: 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .4 {.    sqlite3
75f0: 5f 65 78 70 69 72 65 64 20 30 0a 20 20 7d 20 31  _expired 0.  } 1
7600: 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .}.do_test capi3
7610: 63 2d 31 39 2e 35 20 7b 0a 20 20 73 71 6c 69 74  c-19.5 {.  sqlit
7620: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
7630: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
7640: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
7650: 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e 53 45 52  x,y);.     INSER
7660: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
7670: 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  (1,2);.  }.  sql
7680: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7690: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 69 66 63  } SQLITE_ROW.ifc
76a0: 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74 65  apable deprecate
76b0: 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  d {.  do_test ca
76c0: 70 69 33 63 2d 31 39 2e 35 2e 32 20 7b 0a 20 20  pi3c-19.5.2 {.  
76d0: 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65    sqlite3_expire
76e0: 64 20 24 53 54 4d 54 0a 20 20 7d 20 30 0a 7d 0a  d $STMT.  } 0.}.
76f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7700: 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.6 {.  sqlite3_
7710: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
7720: 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63   1.} 2.do_test c
7730: 61 70 69 33 63 2d 31 39 2e 39 39 20 7b 0a 20 20  api3c-19.99 {.  
7740: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7750: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7760: 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  OK..# Make sure 
7770: 61 20 63 68 61 6e 67 65 20 69 6e 20 61 20 73 65  a change in a se
7780: 70 61 72 61 74 65 20 64 61 74 61 62 61 73 65 20  parate database 
7790: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 65 73 20  connection does 
77a0: 6e 6f 74 0a 23 20 63 61 75 73 65 20 61 6e 20 53  not.# cause an S
77b0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 72 65 74  QLITE_SCHEMA ret
77c0: 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  urn..#.do_test c
77d0: 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a 20 20 73  api3c-20.1 {.  s
77e0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
77f0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
7800: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
7810: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  3} -1 TAIL].  sq
7820: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
7830: 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43 52  b.  db2 eval {CR
7840: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 78 29  EATE TABLE t4(x)
7850: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
7860: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7870: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
7880: 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-20.2 {.  sqli
7890: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
78a0: 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65  STMT 1.} 2.do_te
78b0: 73 74 20 63 61 70 69 33 63 2d 32 30 2e 33 20 7b  st capi3c-20.3 {
78c0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
78d0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
78e0: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
78f0: 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64 62 32 20  3c-20.4 {.  db2 
7900: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
7910: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
7920: 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 54 65   SQLITE_OK..# Te
7930: 73 74 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f  st that sqlite3_
7940: 73 74 65 70 28 29 20 73 65 74 73 20 74 68 65 20  step() sets the 
7950: 64 61 74 61 62 61 73 65 20 65 72 72 6f 72 20 63  database error c
7960: 6f 64 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23  ode correctly..#
7970: 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 34 39   See ticket #249
7980: 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70  7..#.ifcapable p
7990: 72 6f 67 72 65 73 73 20 7b 0a 20 20 64 6f 5f 74  rogress {.  do_t
79a0: 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 31 20  est capi3c-21.1 
79b0: 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  {.    set STMT [
79c0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
79d0: 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a  v2 $DB {SELECT *
79e0: 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54 41 49   FROM t3} -1 TAI
79f0: 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f 67 72 65  L].    db progre
7a00: 73 73 20 35 20 22 65 78 70 72 20 31 22 0a 20 20  ss 5 "expr 1".  
7a10: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7a20: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
7a30: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
7a40: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7a50: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
7a60: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
7a70: 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45   $DB.  } {SQLITE
7a80: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
7a90: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7aa0: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  3 {.    sqlite3_
7ab0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7ac0: 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52   } {SQLITE_INTER
7ad0: 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RUPT}.  do_test 
7ae0: 63 61 70 69 33 63 2d 32 31 2e 34 20 7b 0a 20 20  capi3c-21.4 {.  
7af0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7b00: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
7b10: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
7b20: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20  3} -1 TAIL].    
7b30: 64 62 20 70 72 6f 67 72 65 73 73 20 35 20 22 65  db progress 5 "e
7b40: 78 70 72 20 31 22 0a 20 20 20 20 73 71 6c 69 74  xpr 1".    sqlit
7b50: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
7b60: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
7b70: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7b80: 63 2d 32 31 2e 35 20 7b 0a 20 20 20 20 73 71 6c  c-21.5 {.    sql
7b90: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
7ba0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
7bb0: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
7bc0: 70 69 33 63 2d 32 31 2e 36 20 7b 0a 20 20 20 20  pi3c-21.6 {.    
7bd0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7be0: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
7bf0: 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20  TE_INTERRUPT}.  
7c00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7c10: 31 2e 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.7 {.    sqlite
7c20: 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  3_errcode $DB.  
7c30: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7c40: 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  UPT}.  do_test c
7c50: 61 70 69 33 63 2d 32 31 2e 38 20 7b 0a 20 20 20  api3c-21.8 {.   
7c60: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
7c70: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  d_errcode $DB.  
7c80: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7c90: 55 50 54 7d 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73  UPT}.}..# Make s
7ca0: 75 72 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ure sqlite3_resu
7cb0: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 29 20  lt_error_code() 
7cc0: 72 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72  returns the corr
7cd0: 65 63 74 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  ect error code..
7ce0: 23 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 39  # See ticket #29
7cf0: 34 30 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  40.#.do_test cap
7d00: 69 33 63 2d 32 32 2e 31 20 7b 0a 20 20 64 62 20  i3c-22.1 {.  db 
7d10: 70 72 6f 67 72 65 73 73 20 30 20 7b 7d 0a 20 20  progress 0 {}.  
7d20: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
7d30: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
7d40: 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65 72 72  {SELECT test_err
7d50: 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67 65 27  or('the message'
7d60: 2c 33 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20  ,3)} -1 TAIL].  
7d70: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7d80: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 50 45 52  MT.} {SQLITE_PER
7d90: 4d 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  M}.sqlite3_final
7da0: 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f 74 65 73  ize $STMT.do_tes
7db0: 74 20 63 61 70 69 33 63 2d 32 32 2e 32 20 7b 0a  t capi3c-22.2 {.
7dc0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7dd0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64  te3_prepare_v2 d
7de0: 62 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65  b {SELECT test_e
7df0: 72 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67  rror('the messag
7e00: 65 27 2c 34 29 7d 20 2d 31 20 54 41 49 4c 5d 0a  e',4)} -1 TAIL].
7e10: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7e20: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 41  STMT.} {SQLITE_A
7e30: 42 4f 52 54 7d 0a 73 71 6c 69 74 65 33 5f 66 69  BORT}.sqlite3_fi
7e40: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f  nalize $STMT.do_
7e50: 74 65 73 74 20 63 61 70 69 33 63 2d 32 32 2e 33  test capi3c-22.3
7e60: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7e70: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7e80: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73  2 db {SELECT tes
7e90: 74 5f 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73  t_error('the mes
7ea0: 73 61 67 65 27 2c 31 36 29 7d 20 2d 31 20 54 41  sage',16)} -1 TA
7eb0: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7ec0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
7ed0: 54 45 5f 45 4d 50 54 59 7d 0a 73 71 6c 69 74 65  TE_EMPTY}.sqlite
7ee0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7ef0: 0a 0a 23 20 46 6f 72 20 61 20 6d 75 6c 74 69 2d  ..# For a multi-
7f00: 63 6f 6c 75 6d 6e 20 72 65 73 75 6c 74 20 73 65  column result se
7f10: 74 20 77 68 65 72 65 20 74 68 65 20 73 61 6d 65  t where the same
7f20: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 69 73   table column is
7f30: 20 72 65 70 65 61 74 65 64 0a 23 20 69 6e 20 6d   repeated.# in m
7f40: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 20  ultiple columns 
7f50: 6f 66 20 74 68 65 20 6f 75 74 70 75 74 2c 20 76  of the output, v
7f60: 65 72 69 66 79 20 74 68 61 74 20 64 6f 69 6e 67  erify that doing
7f70: 20 61 20 55 54 46 2d 38 20 74 6f 20 55 54 46 2d   a UTF-8 to UTF-
7f80: 31 36 0a 23 20 63 6f 6e 76 65 72 73 69 6f 6e 20  16.# conversion 
7f90: 28 6f 72 20 76 69 63 65 20 76 65 72 73 61 29 20  (or vice versa) 
7fa0: 6f 6e 20 6f 6e 65 20 63 6f 6c 75 6d 6e 20 64 6f  on one column do
7fb0: 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  es not change th
7fc0: 65 20 76 61 6c 75 65 20 6f 66 0a 23 20 74 68 65  e value of.# the
7fd0: 20 73 65 63 6f 6e 64 2e 0a 23 0a 69 66 63 61 70   second..#.ifcap
7fe0: 61 62 6c 65 20 75 74 66 31 36 20 7b 0a 20 20 64  able utf16 {.  d
7ff0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 33  o_test capi3c-23
8000: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d  .1 {.    set STM
8010: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
8020: 72 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43 54  re_v2 db {SELECT
8030: 20 62 2c 62 2c 62 2c 62 20 46 52 4f 4d 20 74 31   b,b,b,b FROM t1
8040: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  } -1 TAIL].    s
8050: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
8060: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  T.  } {SQLITE_RO
8070: 57 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  W}.  do_test cap
8080: 69 33 63 2d 32 33 2e 32 20 7b 0a 20 20 20 20 73  i3c-23.2 {.    s
8090: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
80a0: 78 74 31 36 20 24 53 54 4d 54 20 30 0a 20 20 20  xt16 $STMT 0.   
80b0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
80c0: 74 65 78 74 20 24 53 54 4d 54 20 31 0a 20 20 7d  text $STMT 1.  }
80d0: 20 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74 65 73 74   {one}.  do_test
80e0: 20 63 61 70 69 33 63 2d 32 33 2e 33 20 7b 0a 20   capi3c-23.3 {. 
80f0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
8100: 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 32  n_text16 $STMT 2
8110: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .    sqlite3_col
8120: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 33  umn_text $STMT 3
8130: 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c  .  } {one}.  sql
8140: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
8150: 54 4d 54 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  TMT.  do_test ca
8160: 70 69 33 63 2d 32 33 2e 34 20 7b 0a 20 20 20 20  pi3c-23.4 {.    
8170: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
8180: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
8190: 7b 53 45 4c 45 43 54 20 62 7c 7c 27 78 27 2c 62  {SELECT b||'x',b
81a0: 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d 20 2d 31  ,b,b FROM t1} -1
81b0: 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74   TAIL].    sqlit
81c0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
81d0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 20  } {SQLITE_ROW}. 
81e0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
81f0: 32 33 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  23.5 {.    sqlit
8200: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
8210: 20 24 53 54 4d 54 20 30 0a 20 20 20 20 73 71 6c   $STMT 0.    sql
8220: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8230: 20 24 53 54 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e   $STMT 1.  } {on
8240: 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  e}.  do_test cap
8250: 69 33 63 2d 32 33 2e 36 20 7b 0a 20 20 20 20 73  i3c-23.6 {.    s
8260: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8270: 78 74 31 36 20 24 53 54 4d 54 20 32 0a 20 20 20  xt16 $STMT 2.   
8280: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8290: 74 65 78 74 20 24 53 54 4d 54 20 33 0a 20 20 7d  text $STMT 3.  }
82a0: 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69 74 65 33   {one}.  sqlite3
82b0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
82c0: 7d 0a 0a 23 20 54 65 73 74 20 64 65 63 6c 74 79  }..# Test declty
82d0: 70 65 20 6f 6e 20 73 6f 6d 65 20 53 45 4c 45 43  pe on some SELEC
82e0: 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
82f0: 74 20 63 6f 6e 74 61 69 6e 20 73 75 62 2d 73 65  t contain sub-se
8300: 6c 65 63 74 73 2e 0a 23 0a 70 72 6f 63 20 64 65  lects..#.proc de
8310: 63 6c 74 79 70 65 20 7b 7a 53 71 6c 7d 20 7b 0a  cltype {zSql} {.
8320: 20 20 73 65 74 20 72 65 74 20 5b 6c 69 73 74 5d    set ret [list]
8330: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
8340: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
8350: 64 62 20 24 7a 53 71 6c 20 2d 31 20 54 41 49 4c  db $zSql -1 TAIL
8360: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
8370: 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65 33  } {$i < [sqlite3
8380: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
8390: 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  TMT]} {incr i} {
83a0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 74  .    lappend ret
83b0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
83c0: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
83d0: 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  $i].  }.  sqlite
83e0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
83f0: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 74 0a 7d  .  return $ret.}
8400: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
8410: 32 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  24.1 {.  execsql
8420: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
8430: 74 35 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20  t5(a INTEGER, b 
8440: 53 54 52 49 4e 47 2c 20 63 20 44 41 54 45 54 49  STRING, c DATETI
8450: 4d 45 29 20 7d 0a 20 20 64 65 63 6c 74 79 70 65  ME) }.  decltype
8460: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
8470: 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 20 53  t5}.} {INTEGER S
8480: 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45 7d 0a  TRING DATETIME}.
8490: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
84a0: 34 2e 32 20 7b 0a 20 20 64 65 63 6c 74 79 70 65  4.2 {.  decltype
84b0: 20 7b 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54   {SELECT (SELECT
84c0: 20 63 29 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b   c) FROM t5}.} {
84d0: 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73  DATETIME}.do_tes
84e0: 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20 7b 0a  t capi3c-24.3 {.
84f0: 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45    decltype {SELE
8500: 43 54 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  CT (SELECT * FRO
8510: 4d 20 28 53 45 4c 45 43 54 20 63 29 29 20 46 52  M (SELECT c)) FR
8520: 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54 45 54 49  OM t5}.} {DATETI
8530: 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ME}.do_test capi
8540: 33 63 2d 32 34 2e 34 20 7b 0a 20 20 64 65 63 6c  3c-24.4 {.  decl
8550: 74 79 70 65 20 7b 53 45 4c 45 43 54 20 2a 20 46  type {SELECT * F
8560: 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52  ROM (SELECT * FR
8570: 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59 20 63  OM t5 ORDER BY c
8580: 20 4c 49 4d 49 54 20 31 29 20 4f 52 44 45 52 20   LIMIT 1) ORDER 
8590: 42 59 20 62 7d 0a 7d 20 7b 49 4e 54 45 47 45 52  BY b}.} {INTEGER
85a0: 20 53 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45   STRING DATETIME
85b0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
85c0: 2d 32 34 2e 35 20 7b 0a 20 20 64 65 63 6c 74 79  -24.5 {.  declty
85d0: 70 65 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  pe {.    SELECT 
85e0: 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28  (SELECT x FROM (
85f0: 53 45 4c 45 43 54 20 63 20 41 53 20 78 29 29 20  SELECT c AS x)) 
8600: 0a 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43  .    FROM (SELEC
8610: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
8620: 52 20 42 59 20 63 20 4c 49 4d 49 54 20 31 29 20  R BY c LIMIT 1) 
8630: 4f 52 44 45 52 20 42 59 20 62 0a 20 20 7d 0a 7d  ORDER BY b.  }.}
8640: 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74   {DATETIME}.do_t
8650: 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20  est capi3c-24.3 
8660: 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45  {.  decltype {SE
8670: 4c 45 43 54 20 28 53 45 4c 45 43 54 20 78 20 46  LECT (SELECT x F
8680: 52 4f 4d 20 28 53 45 4c 45 43 54 20 74 35 2e 61  ROM (SELECT t5.a
8690: 20 41 53 20 78 29 29 20 46 52 4f 4d 20 74 35 7d   AS x)) FROM t5}
86a0: 0a 7d 20 7b 49 4e 54 45 47 45 52 7d 0a 0a 66 69  .} {INTEGER}..fi
86b0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.