/ Hex Artifact Content
Login

Artifact 93d24621c9ff84da9da060f30431e0453db1cdb0:


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 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
11c0: 33 2e 36 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20  3.6.1-misuse {. 
11d0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
11e0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4d 49  db2.} {SQLITE_MI
11f0: 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  SUSE}.do_test ca
1200: 70 69 33 63 2d 33 2e 36 2e 32 2d 6d 69 73 75 73  pi3c-3.6.2-misus
1210: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  e {.  sqlite3_er
1220: 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 6c 69 62  rmsg $db2.} {lib
1230: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
1240: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
1250: 6e 63 65 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b  nce}.ifcapable {
1260: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
1270: 73 74 20 63 61 70 69 33 63 2d 33 2e 36 2e 33 2d  st capi3c-3.6.3-
1280: 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 75 74 66  misuse {.    utf
1290: 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  8 [sqlite3_errms
12a0: 67 31 36 20 24 64 62 32 5d 0a 20 20 7d 20 7b 6c  g16 $db2].  } {l
12b0: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63  ibrary routine c
12c0: 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71  alled out of seq
12d0: 75 65 6e 63 65 7d 0a 7d 0a 0a 23 20 72 65 6e 61  uence}.}..# rena
12e0: 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20  me sqlite3_open 
12f0: 22 22 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69  "".# rename sqli
1300: 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71 6c  te3_open_old sql
1310: 69 74 65 33 5f 6f 70 65 6e 0a 0a 69 66 63 61 70  ite3_open..ifcap
1320: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 64  able {utf16} {.d
1330: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e  o_test capi3c-4.
1340: 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20 5b 73  1 {.  set db2 [s
1350: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75  qlite3_open16 [u
1360: 74 66 31 36 20 74 65 73 74 2e 64 62 5d 20 7b 7d  tf16 test.db] {}
1370: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  ].  sqlite3_errc
1380: 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ode $db2.} {SQLI
1390: 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d 45 3a  TE_OK}.# FIX ME:
13a0: 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74 68 65   Should test the
13b0: 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72 6b 73   db handle works
13c0: 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
13d0: 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -4.2 {.  sqlite3
13e0: 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53  _close $db2.} {S
13f0: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
1400: 74 20 63 61 70 69 33 63 2d 34 2e 33 20 7b 0a 20  t capi3c-4.3 {. 
1410: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
1420: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
1430: 65 6e 31 36 20 5b 75 74 66 31 36 20 2f 62 6f 67  en16 [utf16 /bog
1440: 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 5d  us/path/test.db]
1450: 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74   {}].  }.  sqlit
1460: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
1470: 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  } {SQLITE_CANTOP
1480: 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  EN}.do_test capi
1490: 33 63 2d 34 2e 34 20 7b 0a 20 20 75 74 66 38 20  3c-4.4 {.  utf8 
14a0: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
14b0: 36 20 24 64 62 32 5d 0a 7d 20 7b 75 6e 61 62 6c  6 $db2].} {unabl
14c0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
14d0: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
14e0: 20 63 61 70 69 33 63 2d 34 2e 35 20 7b 0a 20 20   capi3c-4.5 {.  
14f0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
1500: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1510: 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a 23 20 54  .} ;# utf16..# T
1520: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
1530: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
1540: 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c 73  lowing API calls
1550: 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  :.#.# sqlite3_co
1560: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20 73 71 6c  lumn_count.# sql
1570: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1580: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1590: 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74  n_name16.# sqlit
15a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
15b0: 70 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  pe.# sqlite3_col
15c0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 0a 23  umn_decltype16.#
15d0: 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f  .# $STMT is a co
15e0: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
15f0: 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61  ment. $test is a
1600: 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65   prefix.# to use
1610: 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20   for test names 
1620: 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63  within this proc
1630: 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69  . $names is a li
1640: 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75  st.# of the colu
1650: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68  mn names that sh
1660: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
1670: 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65   by $STMT..# $de
1680: 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69 73  cltypes is a lis
1690: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
16a0: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f  aration types fo
16b0: 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61  r $STMT..#.# Exa
16c0: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
16d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
16e0: 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 31  are_v2 "SELECT 1
16f0: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
1700: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
1710: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
1720: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
1730: 72 6f 63 20 63 68 65 63 6b 5f 68 65 61 64 65 72  roc check_header
1740: 20 7b 53 54 4d 54 20 74 65 73 74 20 6e 61 6d 65   {STMT test name
1750: 73 20 64 65 63 6c 74 79 70 65 73 7d 20 7b 0a 0a  s decltypes} {..
1760: 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75    # Use the retu
1770: 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  rn value of sqli
1780: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1790: 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20  () to build.  # 
17a0: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
17b0: 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49   indexes. i.e. I
17c0: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
17d0: 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c  _count.  # is 3,
17e0: 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   build the list 
17f0: 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a  {0 1 2}..  set :
1800: 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  :idxlist [list].
1810: 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20    set ::numcols 
1820: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1830: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
1840: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
1850: 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b   < $::numcols} {
1860: 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64  incr i} {lappend
1870: 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a   ::idxlist $i}..
1880: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1890: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
18a0: 65 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20  est $test.1 {.  
18b0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
18c0: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
18d0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
18e0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
18f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1900: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1910: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1920: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1930: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1940: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1950: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1960: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1970: 73 74 2e 32 20 7b 0a 20 20 20 20 20 20 73 65 74  st.2 {.      set
1980: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1990: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
19a0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
19b0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
19c0: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
19d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
19e0: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
19f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1a00: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1a10: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1a20: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1a30: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1a40: 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 20 20 73   $test.3 {.    s
1a50: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1a60: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1a70: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1a80: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1a90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1aa0: 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20  me $STMT $i]} . 
1ab0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1ac0: 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23  .  } $names..  #
1ad0: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1ae0: 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61   UTF-16.  ifcapa
1af0: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
1b00: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
1b10: 34 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  4 {.      set cn
1b20: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1b30: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
1b40: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
1b50: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
1b60: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
1b70: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
1b80: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
1b90: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e    }.      set cn
1ba0: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e  amelist.    } $n
1bb0: 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f  ames.  }..  # Co
1bc0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54  lumn names in UT
1bd0: 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74  F-8.  do_test $t
1be0: 65 73 74 2e 35 20 7b 0a 20 20 20 20 73 65 74 20  est.5 {.    set 
1bf0: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
1c00: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24  .    foreach i $
1c10: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
1c20: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69   cnamelist [sqli
1c30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1c40: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a  ype $STMT $i]} .
1c50: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1c60: 74 0a 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73  t.  } $decltypes
1c70: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 64 65 63  ..  # Column dec
1c80: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69  laration types i
1c90: 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70  n UTF-16.  ifcap
1ca0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1cb0: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1cc0: 2e 36 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  .6 {.      set c
1cd0: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
1ce0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
1cf0: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
1d00: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
1d10: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
1d20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1d30: 79 70 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ype16 $STMT $i]]
1d40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1d50: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
1d60: 20 7d 20 24 64 65 63 6c 74 79 70 65 73 0a 20 20   } $decltypes.  
1d70: 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20 73 6f 6d  }...  # Test som
1d80: 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 63  e out of range c
1d90: 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20 69 66 63  onditions:.  ifc
1da0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1db0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1dc0: 73 74 2e 37 20 7b 0a 20 20 20 20 20 20 6c 69 73  st.7 {.      lis
1dd0: 74 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  t \.        [sql
1de0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1df0: 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20   $STMT -1] \.   
1e00: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
1e10: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d  lumn_name16 $STM
1e20: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1e30: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1e40: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 2d  decltype $STMT -
1e50: 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  1] \.        [sq
1e60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1e70: 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 2d 31  ltype16 $STMT -1
1e80: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1e90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1ea0: 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d   $STMT $numcols]
1eb0: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
1ec0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
1ed0: 36 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73  6 $STMT $numcols
1ee0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1ef0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1f00: 74 79 70 65 20 24 53 54 4d 54 20 24 6e 75 6d 63  type $STMT $numc
1f10: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
1f20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1f30: 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20  ecltype16 $STMT 
1f40: 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20 20 7d 20  $numcols].    } 
1f50: 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20  {{} {} {} {} {} 
1f60: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 0a 7d 20  {} {} {}}.  }.} 
1f70: 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73  ..# This proc is
1f80: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
1f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20  e following API 
1fa0: 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74  calls:.#.# sqlit
1fb0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
1fc0: 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f  _name.# sqlite3_
1fd0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
1fe0: 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63  me16.# sqlite3_c
1ff0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
2000: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2010: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 0a 23  n_table_name16.#
2020: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2030: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 0a 23 20  database_name.# 
2040: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2050: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 0a 23  atabase_name16.#
2060: 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f  .# $STMT is a co
2070: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
2080: 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61  ment. $test is a
2090: 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65   prefix.# to use
20a0: 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20   for test names 
20b0: 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63  within this proc
20c0: 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69  . $names is a li
20d0: 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75  st.# of the colu
20e0: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68  mn names that sh
20f0: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
2100: 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65   by $STMT..# $de
2110: 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69 73  cltypes is a lis
2120: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
2130: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f  aration types fo
2140: 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61  r $STMT..#.# Exa
2150: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
2160: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
2170: 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 31  are_v2 "SELECT 1
2180: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
2190: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
21a0: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
21b0: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
21c0: 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67 69 6e  roc check_origin
21d0: 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65  _header {STMT te
21e0: 73 74 20 64 62 73 20 74 61 62 6c 65 73 20 63 6f  st dbs tables co
21f0: 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73 71 6c  ls} {.  # If sql
2200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2210: 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20 66 72  in_name() and fr
2220: 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20 63 6f  iends are not co
2230: 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20 23 20  mpiled into.  # 
2240: 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68 69 73  this build, this
2250: 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d 6f 70   proc is a no-op
2260: 2e 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6c 75  ..ifcapable colu
2270: 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a 0a 20 20  mnmetadata {..  
2280: 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75    # Use the retu
2290: 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  rn value of sqli
22a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
22b0: 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 20 20  () to build.    
22c0: 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  # a list of colu
22d0: 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e  mn indexes. i.e.
22e0: 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   If sqlite3_colu
22f0: 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20 69  mn_count.    # i
2300: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2310: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 20  ist {0 1 2}..   
2320: 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b   set ::idxlist [
2330: 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 3a 3a  list].    set ::
2340: 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33  numcols [sqlite3
2350: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
2360: 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73 65  TMT].    for {se
2370: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a 3a  t i 0} {$i < $::
2380: 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69  numcols} {incr i
2390: 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78  } {lappend ::idx
23a0: 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20 20 20 20  list $i}.  .    
23b0: 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65 73  # Database names
23c0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
23d0: 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a  _test $test.8 {.
23e0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
23f0: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
2400: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2410: 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61  ist {.        la
2420: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
2430: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2440: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 20 24 53  database_name $S
2450: 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20  TMT $i].      } 
2460: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2470: 6c 69 73 74 0a 20 20 20 20 7d 20 24 64 62 73 0a  list.    } $dbs.
2480: 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61 73    .    # Databas
2490: 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31  e names in UTF-1
24a0: 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20  6.    ifcapable 
24b0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20  {utf16} {.      
24c0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20  do_test $test.9 
24d0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  {.        set cn
24e0: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
24f0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69         foreach i
2500: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
2510: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2520: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
2530: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
2540: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 20 24 53  tabase_name16 $S
2550: 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20  TMT $i]].       
2560: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   }.        set c
2570: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d  namelist.      }
2580: 20 24 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a 20   $dbs.    }.  . 
2590: 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65 73     # Table names
25a0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
25b0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b  _test $test.10 {
25c0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
25d0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
25e0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
25f0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
2600: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
2610: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2620: 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54 4d  _table_name $STM
2630: 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20  T $i].      } . 
2640: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2650: 73 74 0a 20 20 20 20 7d 20 24 74 61 62 6c 65 73  st.    } $tables
2660: 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20  .  .    # Table 
2670: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  names in UTF-16.
2680: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75      ifcapable {u
2690: 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f  tf16} {.      do
26a0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20 7b  _test $test.11 {
26b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61  .        set cna
26c0: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
26d0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
26e0: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
26f0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
2700: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
2710: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
2720: 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  le_name16 $STMT 
2730: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
2740: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2750: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 74 61  list.      } $ta
2760: 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20 20  bles.    }.  .  
2770: 20 20 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65 73    # Origin names
2780: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
2790: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b  _test $test.12 {
27a0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
27b0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
27c0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
27d0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
27e0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
27f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2800: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53 54  _origin_name $ST
2810: 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a  MT $i].      } .
2820: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
2830: 69 73 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73 0a  ist.    } $cols.
2840: 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20    .    # Origin 
2850: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
2860: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20  s in UTF-16.    
2870: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
2880: 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  } {.      do_tes
2890: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 20  t $test.13 {.   
28a0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
28b0: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
28c0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
28d0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20  list {.         
28e0: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
28f0: 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  st [utf8 [sqlite
2900: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
2910: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
2920: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ].        }.    
2930: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
2940: 74 0a 20 20 20 20 20 20 7d 20 24 63 6f 6c 73 0a  t.      } $cols.
2950: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 54      }.  }.}..# T
2960: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
2970: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
2980: 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a 23  lowing APIs:.#.#
2990: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f   sqlite3_data_co
29a0: 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  unt.# sqlite3_co
29b0: 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c 69  lumn_type.# sqli
29c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a 23  te3_column_int.#
29d0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
29e0: 74 65 78 74 0a 23 20 73 71 6c 69 74 65 33 5f 63  text.# sqlite3_c
29f0: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20 73  olumn_text16.# s
2a00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
2a10: 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20 69  uble.#.# $STMT i
2a20: 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  s a compiled SQL
2a30: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 77   statement for w
2a40: 68 69 63 68 20 74 68 65 20 70 72 65 76 69 6f 75  hich the previou
2a50: 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71 6c  s call .# to sql
2a60: 69 74 65 33 5f 73 74 65 70 20 72 65 74 75 72 6e  ite3_step return
2a70: 65 64 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20 24  ed SQLITE_ROW. $
2a80: 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69 78  test is a prefix
2a90: 20 74 6f 20 75 73 65 20 0a 23 20 66 6f 72 20 74   to use .# for t
2aa0: 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e  est names within
2ab0: 20 74 68 69 73 20 70 72 6f 63 2e 20 24 74 79 70   this proc. $typ
2ac0: 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  es is a list of 
2ad0: 74 68 65 20 0a 23 20 6d 61 6e 69 66 65 73 74 20  the .# manifest 
2ae0: 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 63 75  types for the cu
2af0: 72 72 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74 73  rrent row. $ints
2b00: 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e 64 20 24  , $doubles and $
2b10: 73 74 72 69 6e 67 73 0a 23 20 61 72 65 20 6c 69  strings.# are li
2b20: 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65 67  sts of the integ
2b30: 65 72 2c 20 72 65 61 6c 20 61 6e 64 20 73 74 72  er, real and str
2b40: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2b50: 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20 76 61 6c  ons of.# the val
2b60: 75 65 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  ues in the curre
2b70: 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61 6d  nt row..#.# Exam
2b80: 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54 4d  ple:.#.# set STM
2b90: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
2ba0: 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 27 68  re_v2 "SELECT 'h
2bb0: 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c  ello', 1.1, NULL
2bc0: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71  " -1 DUMMY].# sq
2bd0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
2be0: 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65  .# check_data te
2bf0: 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c  st1.2 {TEXT REAL
2c00: 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b   NULL} {0 1 0} {
2c10: 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20  0 1.1 0} {hello 
2c20: 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63  1.1 {}}.#.proc c
2c30: 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20  heck_data {STMT 
2c40: 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73 20  test types ints 
2c50: 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d  doubles strings}
2c60: 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20   {..  # Use the 
2c70: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2c80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2c90: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2ca0: 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f    # a list of co
2cb0: 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e  lumn indexes. i.
2cc0: 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f  e. If sqlite3_co
2cd0: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69  lumn_count.  # i
2ce0: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2cf0: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73  ist {0 1 2}..  s
2d00: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
2d10: 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c  st].  set numcol
2d20: 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  s [sqlite3_data_
2d30: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
2d40: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
2d50: 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   < $numcols} {in
2d60: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2d70: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20  :idxlist $i}..# 
2d80: 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74  types.do_test $t
2d90: 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79  est.1 {.  set ty
2da0: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
2db0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2dc0: 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b  {lappend types [
2dd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2de0: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ype $STMT $i]}. 
2df0: 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79   set types.} $ty
2e00: 70 65 73 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a  pes..# Integers.
2e10: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20  do_test $test.2 
2e20: 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69  {.  set ints [li
2e30: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
2e40: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
2e50: 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f  d ints [sqlite3_
2e60: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53 54  column_int64 $ST
2e70: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e  MT $i]}.  set in
2e80: 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62 79  ts.} $ints..# by
2e90: 74 65 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c 69  tes.set lens [li
2ea0: 73 74 5d 0a 66 6f 72 65 61 63 68 20 69 20 24 3a  st].foreach i $:
2eb0: 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61 70  :idxlist {.  lap
2ec0: 70 65 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69 6e  pend lens [strin
2ed0: 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78  g length [lindex
2ee0: 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a 7d   $strings $i]].}
2ef0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33  .do_test $test.3
2f00: 20 7b 0a 20 20 73 65 74 20 62 79 74 65 73 20 5b   {.  set bytes [
2f10: 6c 69 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e 73  list].  set lens
2f20: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
2f30: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
2f40: 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73     lappend bytes
2f50: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2f60: 5f 62 79 74 65 73 20 24 53 54 4d 54 20 24 69 5d  _bytes $STMT $i]
2f70: 0a 20 20 7d 0a 20 20 73 65 74 20 62 79 74 65 73  .  }.  set bytes
2f80: 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74 65  .} $lens..# byte
2f90: 73 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  s16.ifcapable {u
2fa0: 74 66 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c 65  tf16} {.  set le
2fb0: 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  ns [list].  fore
2fc0: 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74  ach i $::idxlist
2fd0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c   {.    lappend l
2fe0: 65 6e 73 20 5b 65 78 70 72 20 32 20 2a 20 5b 73  ens [expr 2 * [s
2ff0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69  tring length [li
3000: 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24 69  ndex $strings $i
3010: 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  ]]].  }.  do_tes
3020: 74 20 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20  t $test.4 {.    
3030: 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d  set bytes [list]
3040: 0a 20 20 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c  .    set lens [l
3050: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
3060: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
3070: 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65      lappend byte
3080: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
3090: 6e 5f 62 79 74 65 73 31 36 20 24 53 54 4d 54 20  n_bytes16 $STMT 
30a0: 24 69 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  $i].    }.    se
30b0: 74 20 62 79 74 65 73 0a 20 20 7d 20 24 6c 65 6e  t bytes.  } $len
30c0: 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f 74  s.}..# Blob.do_t
30d0: 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20  est $test.5 {.  
30e0: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
30f0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3100: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
3110: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
3120: 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24 69  mn_blob $STMT $i
3130: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
3140: 24 73 74 72 69 6e 67 73 0a 0a 23 20 55 54 46 2d  $strings..# UTF-
3150: 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  8.do_test $test.
3160: 36 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  6 {.  set utf8 [
3170: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
3180: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
3190: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
31a0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
31b0: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75  TMT $i]}.  set u
31c0: 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a  tf8.} $strings..
31d0: 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74  # Floats.do_test
31e0: 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 73 65 74   $test.7 {.  set
31f0: 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66   utf8 [list].  f
3200: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
3210: 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20  t {lappend utf8 
3220: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3230: 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d  double $STMT $i]
3240: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
3250: 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 31  doubles..# UTF-1
3260: 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  6.ifcapable {utf
3270: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
3280: 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20 73 65  $test.8 {.    se
3290: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
32a0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
32b0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
32c0: 66 38 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  f8 [utf8 [sqlite
32d0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20  3_column_text16 
32e0: 24 53 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20 20  $STMT $i]]}.    
32f0: 73 65 74 20 75 74 66 38 0a 20 20 7d 20 24 73 74  set utf8.  } $st
3300: 72 69 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65 67  rings.}..# Integ
3310: 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ers.do_test $tes
3320: 74 2e 39 20 7b 0a 20 20 73 65 74 20 69 6e 74 73  t.9 {.  set ints
3330: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3340: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3350: 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69  ppend ints [sqli
3360: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
3370: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3380: 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20  ints.} $ints..# 
3390: 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24  Floats.do_test $
33a0: 74 65 73 74 2e 31 30 20 7b 0a 20 20 73 65 74 20  test.10 {.  set 
33b0: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  utf8 [list].  fo
33c0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
33d0: 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b   {lappend utf8 [
33e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
33f0: 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d  ouble $STMT $i]}
3400: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64  .  set utf8.} $d
3410: 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38 0a  oubles..# UTF-8.
3420: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31  do_test $test.11
3430: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
3440: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
3450: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
3460: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
3470: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54  _column_text $ST
3480: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
3490: 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23  f8.} $strings..#
34a0: 20 54 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24   Types.do_test $
34b0: 74 65 73 74 2e 31 32 20 7b 0a 20 20 73 65 74 20  test.12 {.  set 
34c0: 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66  types [list].  f
34d0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
34e0: 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73  t {lappend types
34f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3500: 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d  _type $STMT $i]}
3510: 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24  .  set types.} $
3520: 74 79 70 65 73 0a 0a 23 20 54 65 73 74 20 74 68  types..# Test th
3530: 61 74 20 61 6e 20 6f 75 74 20 6f 66 20 72 61 6e  at an out of ran
3540: 67 65 20 72 65 71 75 65 73 74 20 72 65 74 75 72  ge request retur
3550: 6e 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ns the equivalen
3560: 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73  t of NULL.do_tes
3570: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73  t $test.13 {.  s
3580: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
3590: 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30 7d  t $STMT -1.} {0}
35a0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
35b0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  3 {.  sqlite3_co
35c0: 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20  lumn_text $STMT 
35d0: 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63 61  -1.} {}..}..ifca
35e0: 70 61 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70  pable !floatingp
35f0: 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f  oint {.  finish_
3600: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
3610: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
3620: 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.0 {.  execsql 
3630: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3640: 4c 45 20 74 31 28 61 20 56 41 52 49 4e 54 2c 20  LE t1(a VARINT, 
3650: 62 20 42 4c 4f 42 2c 20 63 20 56 41 52 43 48 41  b BLOB, c VARCHA
3660: 52 28 31 36 29 29 3b 0a 20 20 20 20 49 4e 53 45  R(16));.    INSE
3670: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
3680: 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20  S(1, 2, 3);.    
3690: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
36a0: 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74 77  ALUES('one', 'tw
36b0: 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49  o', NULL);.    I
36c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
36d0: 4c 55 45 53 28 31 2e 32 2c 20 31 2e 33 2c 20 31  LUES(1.2, 1.3, 1
36e0: 2e 34 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73  .4);.  }.  set s
36f0: 71 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql "SELECT * FRO
3700: 4d 20 74 31 22 0a 20 20 73 65 74 20 53 54 4d 54  M t1".  set STMT
3710: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
3720: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
3730: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
3740: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
3750: 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68  TMT.} 3..check_h
3760: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3770: 33 63 2d 35 2e 31 20 7b 61 20 62 20 63 7d 20 7b  3c-5.1 {a b c} {
3780: 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43  VARINT BLOB VARC
3790: 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f  HAR(16)}.check_o
37a0: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
37b0: 4d 54 20 63 61 70 69 33 63 2d 35 2e 31 20 7b 6d  MT capi3c-5.1 {m
37c0: 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b  ain main main} {
37d0: 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63  t1 t1 t1} {a b c
37e0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
37f0: 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -5.2 {.  sqlite3
3800: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
3810: 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f  LITE_ROW..check_
3820: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3830: 69 33 63 2d 35 2e 33 20 7b 61 20 62 20 63 7d 20  i3c-5.3 {a b c} 
3840: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
3850: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
3860: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3870: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 33 20 7b  TMT capi3c-5.3 {
3880: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3890: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
38a0: 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  c}.check_data $S
38b0: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 34 20 7b  TMT capi3c-5.4 {
38c0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
38d0: 54 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b 31  TEXT} {1 2 3} {1
38e0: 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20 32  .0 2.0 3.0} {1 2
38f0: 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70   3}..do_test cap
3900: 69 33 63 2d 35 2e 35 20 7b 0a 20 20 73 71 6c 69  i3c-5.5 {.  sqli
3910: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3920: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65   SQLITE_ROW..che
3930: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
3940: 63 61 70 69 33 63 2d 35 2e 36 20 7b 61 20 62 20  capi3c-5.6 {a b 
3950: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3960: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3970: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3980: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3990: 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69  6 {main main mai
39a0: 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61  n} {t1 t1 t1} {a
39b0: 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61   b c}.check_data
39c0: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
39d0: 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e 55 4c  7 {TEXT TEXT NUL
39e0: 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e 30 20  L} {0 0 0} {0.0 
39f0: 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20 74 77  0.0 0.0} {one tw
3a00: 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  o {}}..do_test c
3a10: 61 70 69 33 63 2d 35 2e 38 20 7b 0a 20 20 73 71  api3c-5.8 {.  sq
3a20: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
3a30: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63  .} SQLITE_ROW..c
3a40: 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d  heck_header $STM
3a50: 54 20 63 61 70 69 33 63 2d 35 2e 39 20 7b 61 20  T capi3c-5.9 {a 
3a60: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3a70: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3a80: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3a90: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  er $STMT capi3c-
3aa0: 35 2e 39 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  5.9 {main main m
3ab0: 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20  ain} {t1 t1 t1} 
3ac0: 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61  {a b c}.check_da
3ad0: 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  ta $STMT capi3c-
3ae0: 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46 4c 4f 41  5.10 {FLOAT FLOA
3af0: 54 20 54 45 58 54 7d 20 7b 31 20 31 20 31 7d 20  T TEXT} {1 1 1} 
3b00: 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 20 7b 31  {1.2 1.3 1.4} {1
3b10: 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a 64 6f 5f  .2 1.3 1.4}..do_
3b20: 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 31 31  test capi3c-5.11
3b30: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
3b40: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
3b50: 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73 74 20 63  _DONE..do_test c
3b60: 61 70 69 33 63 2d 35 2e 31 32 20 7b 0a 20 20 73  api3c-5.12 {.  s
3b70: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3b80: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
3b90: 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K..do_test capi3
3ba0: 63 2d 35 2e 32 30 20 7b 0a 20 20 73 65 74 20 73  c-5.20 {.  set s
3bb0: 71 6c 20 22 53 45 4c 45 43 54 20 61 2c 20 73 75  ql "SELECT a, su
3bc0: 6d 28 62 29 2c 20 6d 61 78 28 63 29 20 46 52 4f  m(b), max(c) FRO
3bd0: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 61 22  M t1 GROUP BY a"
3be0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3bf0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
3c00: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
3c10: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ].  sqlite3_colu
3c20: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d  mn_count $STMT.}
3c30: 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72   3..check_header
3c40: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3c50: 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d 61 78  21 {a sum(b) max
3c60: 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20  (c)} {VARINT {} 
3c70: 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  {}}.check_origin
3c80: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3c90: 70 69 33 63 2d 35 2e 32 32 20 7b 6d 61 69 6e 20  pi3c-5.22 {main 
3ca0: 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d  {} {}} {t1 {} {}
3cb0: 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  } {a {} {}}.do_t
3cc0: 65 73 74 20 63 61 70 69 33 63 2d 35 2e 32 33 20  est capi3c-5.23 
3cd0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
3ce0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
3cf0: 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74 20 3a 3a 45  ITE_OK...set ::E
3d00: 4e 43 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61  NC [execsql {pra
3d10: 67 6d 61 20 65 6e 63 6f 64 69 6e 67 7d 5d 0a 64  gma encoding}].d
3d20: 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74 65 73 74  b close..do_test
3d30: 20 63 61 70 69 33 63 2d 36 2e 30 20 7b 0a 20 20   capi3c-6.0 {.  
3d40: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
3d50: 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73 71 6c  db.  set DB [sql
3d60: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
3d70: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 69 66  pointer db].  if
3d80: 20 7b 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d   {[sqlite3 -has-
3d90: 63 6f 64 65 63 5d 3d 3d 30 7d 20 7b 20 73 71 6c  codec]==0} { sql
3da0: 69 74 65 33 5f 6b 65 79 20 24 44 42 20 78 79 7a  ite3_key $DB xyz
3db0: 7a 79 20 7d 0a 20 20 73 65 74 20 73 71 6c 20 7b  zy }.  set sql {
3dc0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
3dd0: 20 6f 72 64 65 72 20 62 79 20 72 6f 77 69 64 7d   order by rowid}
3de0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3df0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
3e00: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
3e10: 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20 7b 30 7d  ].  expr 0.} {0}
3e20: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
3e30: 36 2e 31 20 7b 0a 20 20 64 62 20 63 61 63 68 65  6.1 {.  db cache
3e40: 20 66 6c 75 73 68 0a 20 20 73 71 6c 69 74 65 33   flush.  sqlite3
3e50: 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b 53 51  _close $DB.} {SQ
3e60: 4c 49 54 45 5f 42 55 53 59 7d 0a 64 6f 5f 74 65  LITE_BUSY}.do_te
3e70: 73 74 20 63 61 70 69 33 63 2d 36 2e 32 20 7b 0a  st capi3c-6.2 {.
3e80: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
3e90: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
3ea0: 4f 57 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24  OW}.check_data $
3eb0: 53 54 4d 54 20 63 61 70 69 33 63 2d 36 2e 33 20  STMT capi3c-6.3 
3ec0: 7b 49 4e 54 45 47 45 52 7d 20 7b 31 7d 20 7b 31  {INTEGER} {1} {1
3ed0: 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  .0} {1}.do_test 
3ee0: 63 61 70 69 33 63 2d 36 2e 33 20 7b 0a 20 20 73  capi3c-6.3 {.  s
3ef0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3f00: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
3f10: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
3f20: 33 63 2d 36 2e 34 20 7b 0a 20 20 64 62 20 63 61  3c-6.4 {.  db ca
3f30: 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69  che flush.  sqli
3f40: 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20  te3_close $DB.} 
3f50: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
3f60: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 39 39 2d  est capi3c-6.99-
3f70: 6d 69 73 75 73 65 20 7b 0a 20 20 64 62 20 63 6c  misuse {.  db cl
3f80: 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 54 68 69 73  ose.} {}..# This
3f90: 20 70 72 6f 63 65 64 75 72 65 20 73 65 74 73 20   procedure sets 
3fa0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
3fb0: 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20   file-format in 
3fc0: 66 69 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23  file 'test.db'.#
3fd0: 20 74 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73   to $newval. Als
3fe0: 6f 2c 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  o, the schema co
3ff0: 6f 6b 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e  okie is incremen
4000: 74 65 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74  ted..# .proc set
4010: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65  _file_format {ne
4020: 77 76 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f  wval} {.  hexio_
4030: 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 34  write test.db 44
4040: 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69   [hexio_render_i
4050: 6e 74 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20  nt32 $newval].  
4060: 73 65 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65  set schemacookie
4070: 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20   [hexio_get_int 
4080: 5b 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74  [hexio_read test
4090: 2e 64 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63  .db 40 4]].  inc
40a0: 72 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20  r schemacookie. 
40b0: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
40c0: 74 2e 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72  t.db 40 [hexio_r
40d0: 65 6e 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68  ender_int32 $sch
40e0: 65 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74  emacookie].  ret
40f0: 75 72 6e 20 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73  urn {}.}..# This
4100: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
4110: 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ns the value of 
4120: 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20  the file-format 
4130: 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62  in file 'test.db
4140: 27 2e 0a 23 20 0a 70 72 6f 63 20 67 65 74 5f 66  '..# .proc get_f
4150: 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 7b 66 6e 61  ile_format {{fna
4160: 6d 65 20 74 65 73 74 2e 64 62 7d 7d 20 7b 0a 20  me test.db}} {. 
4170: 20 72 65 74 75 72 6e 20 5b 68 65 78 69 6f 5f 67   return [hexio_g
4180: 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65  et_int [hexio_re
4190: 61 64 20 24 66 6e 61 6d 65 20 34 34 20 34 5d 5d  ad $fname 44 4]]
41a0: 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65  .}..if {![sqlite
41b0: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b  3 -has-codec]} {
41c0: 0a 20 20 23 20 54 65 73 74 20 77 68 61 74 20 68  .  # Test what h
41d0: 61 70 70 65 6e 73 20 77 68 65 6e 20 74 68 65 20  appens when the 
41e0: 6c 69 62 72 61 72 79 20 65 6e 63 6f 75 6e 74 65  library encounte
41f0: 72 73 20 61 20 6e 65 77 65 72 20 66 69 6c 65 20  rs a newer file 
4200: 66 6f 72 6d 61 74 2e 0a 20 20 64 6f 5f 74 65 73  format..  do_tes
4210: 74 20 63 61 70 69 33 63 2d 37 2e 31 20 7b 0a 20  t capi3c-7.1 {. 
4220: 20 20 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d     set_file_form
4230: 61 74 20 35 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  at 5.  } {}.  do
4240: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 37 2e 32  _test capi3c-7.2
4250: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
4260: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4270: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4280: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4290: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
42a0: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
42b0: 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20  {1 {unsupported 
42c0: 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a 20 20  file format}}.  
42d0: 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 20 7b  db close.}..if {
42e0: 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63  ![sqlite3 -has-c
42f0: 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e 6f 77  odec]} {.  # Now
4300: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20 6c   test that the l
4310: 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c 79  ibrary correctly
4320: 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73 20 65   handles bogus e
4330: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20  ntries in the.  
4340: 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  # sqlite_master 
4350: 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20 63 6f  table (schema co
4360: 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64 6f 5f  rruption)..  do_
4370: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 31 20  test capi3c-8.1 
4380: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
4390: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
43a0: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
43b0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
43c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
43d0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
43e0: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
43f0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
4400: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
4410: 69 33 63 2d 38 2e 32 20 7b 0a 20 20 20 20 73 71  i3c-8.2 {.    sq
4420: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4430: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4440: 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74       PRAGMA writ
4450: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a  able_schema=ON;.
4460: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
4470: 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  O sqlite_master 
4480: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c 4c  VALUES(NULL,NULL
4490: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29  ,NULL,NULL,NULL)
44a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63  ;.    }.    db c
44b0: 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  lose.  } {}.  do
44c0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 33  _test capi3c-8.3
44d0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
44e0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
44f0: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4500: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4510: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4520: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4530: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
4540: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f  tabase schema (?
4550: 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  )}}.  do_test ca
4560: 70 69 33 63 2d 38 2e 34 20 7b 0a 20 20 20 20 23  pi3c-8.4 {.    #
4570: 20 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64   Build a 5-field
4580: 20 72 6f 77 20 72 65 63 6f 72 64 2e 20 54 68 65   row record. The
4590: 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 73 20   first field is 
45a0: 61 20 73 74 72 69 6e 67 20 27 74 61 62 6c 65 27  a string 'table'
45b0: 2c 20 61 6e 64 0a 20 20 20 20 23 20 73 75 62 73  , and.    # subs
45c0: 65 71 75 65 6e 74 20 66 69 65 6c 64 73 20 61 72  equent fields ar
45d0: 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20  e all NULL..    
45e0: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72  db close.    for
45f0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
4600: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
4610: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4620: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
4630: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
4640: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
4650: 20 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69        PRAGMA wri
4660: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
4670: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4680: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
4690: 20 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c   VALUES('table',
46a0: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
46b0: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ULL);.    }.    
46c0: 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b  db close.  } {};
46d0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
46e0: 63 2d 38 2e 35 20 7b 0a 20 20 20 20 63 61 74 63  c-8.5 {.    catc
46f0: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
4700: 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74  est.db }.    cat
4710: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  chsql {.      SE
4720: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
4730: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
4740: 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d  .  } {1 {malform
4750: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
4760: 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63 6c  ma (?)}}.  db cl
4770: 6f 73 65 0a 7d 0a 66 6f 72 63 65 64 65 6c 65 74  ose.}.forcedelet
4780: 65 20 74 65 73 74 2e 64 62 0a 66 6f 72 63 65 64  e test.db.forced
4790: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 2d 6a 6f  elete test.db-jo
47a0: 75 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20 74  urnal...# Test t
47b0: 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he english langu
47c0: 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76  age string equiv
47d0: 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74  alents for sqlit
47e0: 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73 65  e error codes.se
47f0: 74 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 5b  t code2english [
4800: 6c 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b  list \.SQLITE_OK
4810: 20 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61 6e           {not an
4820: 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45   error} \.SQLITE
4830: 5f 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51 4c  _ERROR      {SQL
4840: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
4850: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
4860: 7d 20 5c 0a 53 51 4c 49 54 45 5f 50 45 52 4d 20  } \.SQLITE_PERM 
4870: 20 20 20 20 20 20 7b 61 63 63 65 73 73 20 70 65        {access pe
4880: 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 7d  rmission denied}
4890: 20 5c 0a 53 51 4c 49 54 45 5f 41 42 4f 52 54 20   \.SQLITE_ABORT 
48a0: 20 20 20 20 20 7b 63 61 6c 6c 62 61 63 6b 20 72       {callback r
48b0: 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61  equested query a
48c0: 62 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 42  bort} \.SQLITE_B
48d0: 55 53 59 20 20 20 20 20 20 20 7b 64 61 74 61 62  USY       {datab
48e0: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c  ase is locked} \
48f0: 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20  .SQLITE_LOCKED  
4900: 20 20 20 7b 64 61 74 61 62 61 73 65 20 74 61 62     {database tab
4910: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a  le is locked} \.
4920: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20 20  SQLITE_NOMEM    
4930: 20 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79    {out of memory
4940: 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 45 41 44 4f  } \.SQLITE_READO
4950: 4e 4c 59 20 20 20 7b 61 74 74 65 6d 70 74 20 74  NLY   {attempt t
4960: 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e  o write a readon
4970: 6c 79 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 53  ly database} \.S
4980: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20  QLITE_INTERRUPT 
4990: 20 7b 69 6e 74 65 72 72 75 70 74 65 64 7d 20 5c   {interrupted} \
49a0: 0a 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20 20  .SQLITE_IOERR   
49b0: 20 20 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72 72     {disk I/O err
49c0: 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 52  or} \.SQLITE_COR
49d0: 52 55 50 54 20 20 20 20 7b 64 61 74 61 62 61 73  RUPT    {databas
49e0: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
49f0: 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a 53 51 4c  malformed} \.SQL
4a00: 49 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20 7b  ITE_FULL       {
4a10: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
4a20: 20 69 73 20 66 75 6c 6c 7d 20 5c 0a 53 51 4c 49   is full} \.SQLI
4a30: 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20 7b 75  TE_CANTOPEN   {u
4a40: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
4a50: 74 61 62 61 73 65 20 66 69 6c 65 7d 20 5c 0a 53  tabase file} \.S
4a60: 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20 20  QLITE_EMPTY     
4a70: 20 7b 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73   {table contains
4a80: 20 6e 6f 20 64 61 74 61 7d 20 5c 0a 53 51 4c 49   no data} \.SQLI
4a90: 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20 7b 64  TE_SCHEMA     {d
4aa0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
4ab0: 61 73 20 63 68 61 6e 67 65 64 7d 20 5c 0a 53 51  as changed} \.SQ
4ac0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
4ad0: 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  {constraint fail
4ae0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53  ed} \.SQLITE_MIS
4af0: 4d 41 54 43 48 20 20 20 7b 64 61 74 61 74 79 70  MATCH   {datatyp
4b00: 65 20 6d 69 73 6d 61 74 63 68 7d 20 5c 0a 53 51  e mismatch} \.SQ
4b10: 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20  LITE_MISUSE     
4b20: 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65  {library routine
4b30: 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73   called out of s
4b40: 65 71 75 65 6e 63 65 7d 20 5c 0a 53 51 4c 49 54  equence} \.SQLIT
4b50: 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 7b 6c 61  E_NOLFS      {la
4b60: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
4b70: 20 69 73 20 64 69 73 61 62 6c 65 64 7d 20 5c 0a   is disabled} \.
4b80: 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20 20 20  SQLITE_AUTH     
4b90: 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e    {authorization
4ba0: 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54   denied} \.SQLIT
4bb0: 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 7b 61 75  E_FORMAT     {au
4bc0: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
4bd0: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 7d 20 5c   format error} \
4be0: 0a 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20 20  .SQLITE_RANGE   
4bf0: 20 20 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75     {bind or colu
4c00: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
4c10: 72 61 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  range} \.SQLITE_
4c20: 4e 4f 54 41 44 42 20 20 20 20 20 7b 66 69 6c 65  NOTADB     {file
4c30: 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72   is encrypted or
4c40: 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61   is not a databa
4c50: 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72  se} \.unknownerr
4c60: 6f 72 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e  or      {unknown
4c70: 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74   error} \.]..set
4c80: 20 74 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a 66   test_number 1.f
4c90: 6f 72 65 61 63 68 20 7b 63 6f 64 65 20 65 6e 67  oreach {code eng
4ca0: 6c 69 73 68 7d 20 24 63 6f 64 65 32 65 6e 67 6c  lish} $code2engl
4cb0: 69 73 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ish {.  do_test 
4cc0: 63 61 70 69 33 63 2d 39 2e 24 74 65 73 74 5f 6e  capi3c-9.$test_n
4cd0: 75 6d 62 65 72 20 22 73 71 6c 69 74 65 33 5f 74  umber "sqlite3_t
4ce0: 65 73 74 5f 65 72 72 73 74 72 20 24 63 6f 64 65  est_errstr $code
4cf0: 22 20 24 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63  " $english.  inc
4d00: 72 20 74 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a  r test_number.}.
4d10: 0a 23 20 54 65 73 74 20 74 68 65 20 65 72 72 6f  .# Test the erro
4d20: 72 20 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61  r message when a
4d30: 20 22 72 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d   "real" out of m
4d40: 65 6d 6f 72 79 20 6f 63 63 75 72 73 2e 0a 69 66  emory occurs..if
4d50: 20 7b 20 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d   { [permutation]
4d60: 20 21 3d 20 22 6e 6f 66 61 75 6c 74 73 69 6d 22   != "nofaultsim"
4d70: 20 7d 20 7b 0a 69 66 63 61 70 61 62 6c 65 20 6d   } {.ifcapable m
4d80: 65 6d 64 65 62 75 67 20 7b 0a 20 20 64 6f 5f 74  emdebug {.  do_t
4d90: 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d 31 20  est capi3c-10-1 
4da0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
4db0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74   test.db.    set
4dc0: 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e   DB [sqlite3_con
4dd0: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
4de0: 64 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  db].    sqlite3_
4df0: 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 30 0a  memdebug_fail 0.
4e00: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
4e10: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
4e20: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
4e30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
4e40: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a  out of memory}}.
4e50: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4e60: 2d 31 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c 69  -10-2 {.    sqli
4e70: 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42  te3_errmsg $::DB
4e80: 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  .  } {out of mem
4e90: 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  ory}.  ifcapable
4ea0: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64   {utf16} {.    d
4eb0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 30  o_test capi3c-10
4ec0: 2d 33 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20  -3 {.      utf8 
4ed0: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
4ee0: 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b  6 $::DB].    } {
4ef0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
4f00: 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   }.  db close.  
4f10: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
4f20: 5f 66 61 69 6c 20 2d 31 0a 7d 0a 7d 0a 0a 23 20  _fail -1.}.}..# 
4f30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65  The following te
4f40: 73 74 73 20 2d 20 63 61 70 69 33 63 2d 31 31 2e  sts - capi3c-11.
4f50: 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20 61 20  * - test that a 
4f60: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
4f70: 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 69  CK.# statement i
4f80: 73 73 75 65 64 20 77 68 69 6c 65 20 74 68 65 72  ssued while ther
4f90: 65 20 61 72 65 20 73 74 69 6c 6c 20 6f 75 74 73  e are still outs
4fa0: 74 61 6e 64 69 6e 67 20 56 4d 73 20 74 68 61 74  tanding VMs that
4fb0: 20 61 72 65 20 70 61 72 74 20 6f 66 0a 23 20 74   are part of.# t
4fc0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66  he transaction f
4fd0: 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33 20 64 62  ails..sqlite3 db
4fe0: 20 74 65 73 74 2e 64 62 0a 73 65 74 20 44 42 20   test.db.set DB 
4ff0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
5000: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
5010: 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f  sqlite_register_
5020: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24 44  test_function $D
5030: 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73 74 20 63  B func.do_test c
5040: 61 70 69 33 63 2d 31 31 2e 31 20 7b 0a 20 20 65  api3c-11.1 {.  e
5050: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
5060: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
5070: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20  ABLE t1(a, b);. 
5080: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5090: 31 20 56 41 4c 55 45 53 28 31 2c 20 27 69 6e 74  1 VALUES(1, 'int
50a0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
50b0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c  NTO t1 VALUES(2,
50c0: 20 27 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20 20   'notatype');.  
50d0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
50e0: 61 70 69 33 63 2d 31 31 2e 31 2e 31 20 7b 0a 20  api3c-11.1.1 {. 
50f0: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5100: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a  ocommit $DB.} 0.
5110: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5120: 31 2e 32 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  1.2 {.  set STMT
5130: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
5140: 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43 54  e_v2 $DB "SELECT
5150: 20 66 75 6e 63 28 62 2c 20 61 29 20 46 52 4f 4d   func(b, a) FROM
5160: 20 74 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1" -1 TAIL].  
5170: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5180: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5190: 7d 0a 0a 23 20 41 73 20 6f 66 20 33 2e 36 2e 35  }..# As of 3.6.5
51a0: 20 61 20 43 4f 4d 4d 49 54 20 69 73 20 4f 4b 20   a COMMIT is OK 
51b0: 64 75 72 69 6e 67 20 77 68 69 6c 65 20 61 20 71  during while a q
51c0: 75 65 72 79 20 69 73 20 73 74 69 6c 6c 20 72 75  uery is still ru
51d0: 6e 6e 69 6e 67 20 2d 0a 23 20 61 73 20 6c 6f 6e  nning -.# as lon
51e0: 67 20 61 73 20 69 74 20 69 73 20 61 20 72 65 61  g as it is a rea
51f0: 64 2d 6f 6e 6c 79 20 71 75 65 72 79 20 61 6e 64  d-only query and
5200: 20 6e 6f 74 20 61 6e 20 69 6e 63 72 65 6d 65 6e   not an incremen
5210: 74 61 6c 20 42 4c 4f 42 20 77 72 69 74 65 2e 0a  tal BLOB write..
5220: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
5230: 31 31 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68  11.3.1 {.  catch
5240: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5250: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5260: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5270: 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.2 {.  sqlite3_
5280: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
5290: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f   $DB.} {SQLITE_O
52a0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
52b0: 2d 31 31 2e 33 2e 33 20 7b 0a 20 20 73 71 6c 69  -11.3.3 {.  sqli
52c0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
52d0: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
52e0: 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 34 20  st capi3-11.3.4 
52f0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41  {.  db eval {PRA
5300: 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 7d  GMA lock_status}
5310: 0a 7d 20 7b 6d 61 69 6e 20 73 68 61 72 65 64 20  .} {main shared 
5320: 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f  temp closed}..do
5330: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5340: 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  4 {.  sqlite3_st
5350: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5360: 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73  TE_ERROR}.do_tes
5370: 74 20 63 61 70 69 33 63 2d 31 31 2e 35 20 7b 0a  t capi3c-11.5 {.
5380: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
5390: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
53a0: 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73  TE_ERROR}.do_tes
53b0: 74 20 63 61 70 69 33 63 2d 31 31 2e 36 20 7b 0a  t capi3c-11.6 {.
53c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
53d0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
53e0: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69  1;.  }.} {0 {1 i
53f0: 6e 74 20 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a  nt 2 notatype}}.
5400: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5410: 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.7 {.  sqlite3_
5420: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
5430: 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63  DB.} 1.do_test c
5440: 61 70 69 33 63 2d 31 31 2e 38 20 7b 0a 20 20 65  api3c-11.8 {.  e
5450: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
5460: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 29 3b  ATE TABLE t2(a);
5470: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5480: 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a 20   t2 VALUES(1);. 
5490: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
54a0: 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20  2 VALUES(2);.   
54b0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45   BEGIN;.    INSE
54c0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
54d0: 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  S(3);.  }.} {}.d
54e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
54f0: 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .8.1 {.  sqlite3
5500: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5510: 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20  $DB.} 0.do_test 
5520: 63 61 70 69 33 63 2d 31 31 2e 39 20 7b 0a 20 20  capi3c-11.9 {.  
5530: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
5540: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42  3_prepare_v2 $DB
5550: 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   "SELECT a FROM 
5560: 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t2" -1 TAIL].  s
5570: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5580: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5590: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
55a0: 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.9.1 {.  sqlit
55b0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
55c0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
55d0: 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 32 20  t capi3c-11.9.2 
55e0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
55f0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5600: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5610: 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 33 20  t capi3c-11.9.3 
5620: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
5630: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5640: 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   1.do_test capi3
5650: 63 2d 31 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69  c-11.10 {.  sqli
5660: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5670: 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52 54 7d 0a   {SQLITE_ABORT}.
5680: 69 66 63 61 70 61 62 6c 65 20 21 61 75 74 6f 72  ifcapable !autor
5690: 65 73 65 74 20 7b 0a 20 20 23 20 49 66 20 53 51  eset {.  # If SQ
56a0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45  LITE_OMIT_AUTORE
56b0: 53 45 54 20 69 73 20 64 65 66 69 6e 65 64 2c 20  SET is defined, 
56c0: 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  then the stateme
56d0: 6e 74 20 6d 75 73 74 20 62 65 0a 20 20 23 20 72  nt must be.  # r
56e0: 65 73 65 74 28 29 20 62 65 66 6f 72 65 20 69 74  eset() before it
56f0: 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20 74   can be passed t
5700: 6f 20 73 74 65 70 28 29 20 61 67 61 69 6e 2e 0a  o step() again..
5710: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
5720: 31 31 2e 31 31 61 20 7b 20 73 71 6c 69 74 65 33  11.11a { sqlite3
5730: 5f 73 74 65 70 20 24 53 54 4d 54 20 7d 20 7b 53  _step $STMT } {S
5740: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 20 20  QLITE_MISUSE}.  
5750: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5760: 2e 31 31 62 20 7b 20 73 71 6c 69 74 65 33 5f 72  .11b { sqlite3_r
5770: 65 73 65 74 20 24 53 54 4d 54 20 7d 20 7b 53 51  eset $STMT } {SQ
5780: 4c 49 54 45 5f 41 42 4f 52 54 7d 0a 7d 0a 64 6f  LITE_ABORT}.}.do
5790: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
57a0: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  11 {.  sqlite3_s
57b0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
57c0: 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74  ITE_ROW}.do_test
57d0: 20 63 61 70 69 33 63 2d 31 31 2e 31 32 20 7b 0a   capi3c-11.12 {.
57e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
57f0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  STMT.  sqlite3_s
5800: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
5810: 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73  ITE_DONE}.do_tes
5820: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 33 20 7b  t capi3c-11.13 {
5830: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
5840: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  ize $STMT.} {SQL
5850: 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20  ITE_OK}.do_test 
5860: 63 61 70 69 33 63 2d 31 31 2e 31 34 20 7b 0a 20  capi3c-11.14 {. 
5870: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
5880: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 3b  ELECT a FROM t2;
5890: 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f  .  }.} {1 2}.do_
58a0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
58b0: 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.1 {.  sqlite3_
58c0: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
58d0: 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63  DB.} 1.do_test c
58e0: 61 70 69 33 63 2d 31 31 2e 31 35 20 7b 0a 20 20  api3c-11.15 {.  
58f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52  catchsql {.    R
5900: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
5910: 31 20 7b 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  1 {cannot rollba
5920: 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
5930: 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a  ion is active}}.
5940: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5950: 31 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74  1.15.1 {.  sqlit
5960: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5970: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
5980: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 36 20 7b  t capi3c-11.16 {
5990: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
59a0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
59b0: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a  2;.  }.} {1 2}..
59c0: 23 20 53 61 6e 69 74 79 20 63 68 65 63 6b 20 6f  # Sanity check o
59d0: 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  n the definition
59e0: 20 6f 66 20 27 6f 75 74 73 74 61 6e 64 69 6e 67   of 'outstanding
59f0: 20 56 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e 73   VM'. This means
5a00: 20 61 6e 79 20 56 4d 0a 23 20 74 68 61 74 20 68   any VM.# that h
5a10: 61 73 20 68 61 64 20 73 71 6c 69 74 65 33 5f 73  as had sqlite3_s
5a20: 74 65 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f 72  tep() called mor
5a30: 65 20 72 65 63 65 6e 74 6c 79 20 74 68 61 6e 20  e recently than 
5a40: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5a50: 28 29 20 6f 72 0a 23 20 73 71 6c 69 74 65 33 5f  () or.# sqlite3_
5a60: 72 65 73 65 74 28 29 2e 20 53 6f 20 61 20 56 4d  reset(). So a VM
5a70: 20 74 68 61 74 20 68 61 73 20 6a 75 73 74 20 62   that has just b
5a80: 65 65 6e 20 70 72 65 70 61 72 65 64 20 6f 72 20  een prepared or 
5a90: 72 65 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a 23  reset does not.#
5aa0: 20 63 6f 75 6e 74 20 61 73 20 61 6e 20 61 63 74   count as an act
5ab0: 69 76 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74 20  ive VM..do_test 
5ac0: 63 61 70 69 33 63 2d 31 31 2e 31 37 20 7b 0a 20  capi3c-11.17 {. 
5ad0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
5ae0: 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  EGIN;.  }.} {}.d
5af0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5b00: 2e 31 38 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  .18 {.  set STMT
5b10: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
5b20: 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43 54  e_v2 $DB "SELECT
5b30: 20 61 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54   a FROM t1" -1 T
5b40: 41 49 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  AIL].  catchsql 
5b50: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
5b60: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5b70: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 39 20  st capi3c-11.19 
5b80: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
5b90: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5ba0: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
5bb0: 70 69 33 63 2d 31 31 2e 32 30 20 7b 0a 20 20 63  pi3c-11.20 {.  c
5bc0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45  atchsql {.    BE
5bd0: 47 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  GIN;.    COMMIT;
5be0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5bf0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5c00: 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  20 {.  sqlite3_r
5c10: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74  eset $STMT.  cat
5c20: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  chsql {.    COMM
5c30: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61  IT;.  }.} {1 {ca
5c40: 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
5c50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
5c60: 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74  active}}.do_test
5c70: 20 63 61 70 69 33 63 2d 31 31 2e 32 31 20 7b 0a   capi3c-11.21 {.
5c80: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
5c90: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
5ca0: 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f  TE_OK}..# The fo
5cb0: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20  llowing tests - 
5cc0: 63 61 70 69 33 63 2d 31 32 2e 2a 20 2d 20 63 68  capi3c-12.* - ch
5cd0: 65 63 6b 20 74 68 61 74 20 69 74 73 20 4f 6b 20  eck that its Ok 
5ce0: 74 6f 20 73 74 61 72 74 20 61 0a 23 20 74 72 61  to start a.# tra
5cf0: 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f  nsaction while o
5d00: 74 68 65 72 20 56 4d 73 20 61 72 65 20 61 63 74  ther VMs are act
5d10: 69 76 65 2c 20 61 6e 64 20 74 68 61 74 20 69 74  ive, and that it
5d20: 73 20 4f 6b 20 74 6f 20 65 78 65 63 75 74 65 0a  s Ok to execute.
5d30: 23 20 61 74 6f 6d 69 63 20 75 70 64 61 74 65 73  # atomic updates
5d40: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 73 69 74   in the same sit
5d50: 75 61 74 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73  uation .#.do_tes
5d60: 74 20 63 61 70 69 33 63 2d 31 32 2e 31 20 7b 0a  t capi3c-12.1 {.
5d70: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
5d80: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
5d90: 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f  DB "SELECT a FRO
5da0: 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2" -1 TAIL]. 
5db0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5dc0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
5dd0: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
5de0: 63 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74 63 68  c-12.2 {.  catch
5df0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
5e00: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
5e10: 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20  3, NULL);.  }.} 
5e20: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
5e30: 61 70 69 33 63 2d 31 32 2e 33 20 7b 0a 20 20 63  api3c-12.3 {.  c
5e40: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
5e50: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
5e60: 55 45 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30  UES(4);.  }.} {0
5e70: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5e80: 69 33 63 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74  i3c-12.4 {.  cat
5e90: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
5ea0: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
5eb0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20  TO t1 VALUES(4, 
5ec0: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  NULL);.  }.} {0 
5ed0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5ee0: 33 63 2d 31 32 2e 35 20 7b 0a 20 20 73 71 6c 69  3c-12.5 {.  sqli
5ef0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5f00: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5f10: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5f20: 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  5.1 {.  sqlite3_
5f30: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5f40: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5f50: 74 20 63 61 70 69 33 63 2d 31 32 2e 36 20 7b 0a  t capi3c-12.6 {.
5f60: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
5f70: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44  STMT.} {SQLITE_D
5f80: 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ONE}.do_test cap
5f90: 69 33 63 2d 31 32 2e 37 20 7b 0a 20 20 73 71 6c  i3c-12.7 {.  sql
5fa0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
5fb0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
5fc0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5fd0: 2d 31 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  -12.8 {.  execsq
5fe0: 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  l {.    COMMIT;.
5ff0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
6000: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M t1;.  }.} {1 2
6010: 20 33 20 34 7d 0a 0a 23 20 54 65 73 74 20 63 61   3 4}..# Test ca
6020: 73 65 73 20 63 61 70 69 33 63 2d 31 33 2e 2a 20  ses capi3c-13.* 
6030: 74 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  test the sqlite3
6040: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28  _clear_bindings(
6050: 29 20 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 33  ) and .# sqlite3
6060: 5f 73 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a 69  _sleep APIs..#.i
6070: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
6080: 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74  o commands sqlit
6090: 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
60a0: 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65  s]]>0} {.  do_te
60b0: 73 74 20 63 61 70 69 33 63 2d 31 33 2e 31 20 7b  st capi3c-13.1 {
60c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
60d0: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
60e0: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   t1;.    }.    s
60f0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6100: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6110: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
6120: 56 41 4c 55 45 53 28 3f 2c 20 3f 29 22 20 2d 31  VALUES(?, ?)" -1
6130: 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74   TAIL].    sqlit
6140: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6150: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
6160: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
6170: 2d 31 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -13.2 {.    sqli
6180: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6190: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
61a0: 5f 74 65 78 74 20 24 53 54 4d 54 20 31 20 68 65  _text $STMT 1 he
61b0: 6c 6c 6f 20 35 0a 20 20 20 20 73 71 6c 69 74 65  llo 5.    sqlite
61c0: 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d  3_bind_text $STM
61d0: 54 20 32 20 77 6f 72 6c 64 20 35 0a 20 20 20 20  T 2 world 5.    
61e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
61f0: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44  MT.  } {SQLITE_D
6200: 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  ONE}.  do_test c
6210: 61 70 69 33 63 2d 31 33 2e 33 20 7b 0a 20 20 20  api3c-13.3 {.   
6220: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
6230: 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33  STMT.    sqlite3
6240: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20  _clear_bindings 
6250: 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65  $STMT.    sqlite
6260: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d  3_step $STMT.  }
6270: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20   {SQLITE_DONE}. 
6280: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
6290: 31 33 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74  13-4 {.    sqlit
62a0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
62b0: 54 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  T.    execsql {.
62c0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
62d0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ROM t1;.    }.  
62e0: 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77  } {{} {} hello w
62f0: 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66  orld {} {}}.}.if
6300: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
6310: 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65   commands sqlite
6320: 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20  3_sleep]]>0} {. 
6330: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
6340: 31 33 2d 35 20 7b 0a 20 20 20 20 73 65 74 20 6d  13-5 {.    set m
6350: 73 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  s [sqlite3_sleep
6360: 20 38 30 5d 0a 20 20 20 20 65 78 70 72 20 7b 24   80].    expr {$
6370: 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31  ms==80 || $ms==1
6380: 30 30 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a  000}.  } {1}.}..
6390: 23 20 54 69 63 6b 65 74 20 23 31 32 31 39 3a 20  # Ticket #1219: 
63a0: 20 4d 61 6b 65 20 73 75 72 65 20 62 69 6e 64 69   Make sure bindi
63b0: 6e 67 20 41 50 49 73 20 63 61 6e 20 68 61 6e 64  ng APIs can hand
63c0: 6c 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  le a NULL pointe
63d0: 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  r..#.do_test cap
63e0: 69 33 63 2d 31 34 2e 31 20 7b 0a 20 20 73 65 74  i3c-14.1 {.  set
63f0: 20 72 63 20 5b 63 61 74 63 68 20 7b 73 71 6c 69   rc [catch {sqli
6400: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 30 20  te3_bind_text 0 
6410: 31 20 68 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a  1 hello 5} msg].
6420: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
6430: 67 0a 7d 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49  g.} {1 SQLITE_MI
6440: 53 55 53 45 7d 0a 0a 23 20 54 69 63 6b 65 74 20  SUSE}..# Ticket 
6450: 23 31 36 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68  #1650:  Honor th
6460: 65 20 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74  e nBytes paramet
6470: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 70 72  er to sqlite3_pr
6480: 65 70 61 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  epare..#.do_test
6490: 20 63 61 70 69 33 63 2d 31 35 2e 31 20 7b 0a 20   capi3c-15.1 {. 
64a0: 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54   set sql {SELECT
64b0: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65   * FROM t2}.  se
64c0: 74 20 6e 62 79 74 65 73 20 5b 73 74 72 69 6e 67  t nbytes [string
64d0: 20 6c 65 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20   length $sql].  
64e0: 61 70 70 65 6e 64 20 73 71 6c 20 7b 20 57 48 45  append sql { WHE
64f0: 52 45 20 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53  RE a==1}.  set S
6500: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
6510: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
6520: 20 24 6e 62 79 74 65 73 20 54 41 49 4c 5d 0a 20   $nbytes TAIL]. 
6530: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6540: 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  TMT.  sqlite3_co
6550: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6560: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {1}.do_test c
6570: 61 70 69 33 63 2d 31 35 2e 32 20 7b 0a 20 20 73  api3c-15.2 {.  s
6580: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6590: 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  T.  sqlite3_colu
65a0: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
65b0: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {2}.do_test cap
65c0: 69 33 63 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c  i3c-15.3 {.  sql
65d0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
65e0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
65f0: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 63  }..# Make sure c
6600: 6f 64 65 20 69 73 20 61 6c 77 61 79 73 20 67 65  ode is always ge
6610: 6e 65 72 61 74 65 64 20 65 76 65 6e 20 69 66 20  nerated even if 
6620: 61 6e 20 49 46 20 45 58 49 53 54 53 20 6f 72 20  an IF EXISTS or 
6630: 0a 23 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  .# IF NOT EXISTS
6640: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
6650: 6e 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  nt that the tabl
6660: 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72 0a 23 20  e does not or.# 
6670: 64 6f 65 73 20 65 78 69 73 74 73 2e 20 20 54 68  does exists.  Th
6680: 61 74 20 77 61 79 20 77 65 20 77 69 6c 6c 20 61  at way we will a
6690: 6c 77 61 79 73 20 68 61 76 65 20 61 20 70 72 65  lways have a pre
66a0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
66b0: 23 20 74 6f 20 65 78 70 69 72 65 20 77 68 65 6e  # to expire when
66c0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
66d0: 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ges..#.do_test c
66e0: 61 70 69 33 63 2d 31 36 2e 31 20 7b 0a 20 20 73  api3c-16.1 {.  s
66f0: 65 74 20 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  et sql {DROP TAB
6700: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33 7d  LE IF EXISTS t3}
6710: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6720: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
6730: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
6740: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6750: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
6760: 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20  r {$STMT!=""}.} 
6770: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
6780: 33 63 2d 31 36 2e 32 20 7b 0a 20 20 73 65 74 20  3c-16.2 {.  set 
6790: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
67a0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
67b0: 74 31 28 78 2c 79 29 7d 0a 20 20 73 65 74 20 53  t1(x,y)}.  set S
67c0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
67d0: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
67e0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
67f0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6800: 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54  MT.  expr {$STMT
6810: 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42  !=""}.} {1}..# B
6820: 75 74 20 73 74 69 6c 6c 20 77 65 20 64 6f 20 6e  ut still we do n
6830: 6f 74 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  ot generate code
6840: 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
6850: 53 51 4c 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  SQL.#.do_test ca
6860: 70 69 33 63 2d 31 36 2e 33 20 7b 0a 20 20 73 65  pi3c-16.3 {.  se
6870: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6880: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b  prepare_v2 $DB {
6890: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  } -1 TAIL].  sql
68a0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
68b0: 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d  TMT.  expr {$STM
68c0: 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  T==""}.} {1}.do_
68d0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 36 2e 34  test capi3c-16.4
68e0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
68f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6900: 32 20 24 44 42 20 7b 3b 7d 20 2d 31 20 54 41 49  2 $DB {;} -1 TAI
6910: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  L].  sqlite3_fin
6920: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78  alize $STMT.  ex
6930: 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d  pr {$STMT==""}.}
6940: 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23   {1}..# Ticket #
6950: 32 31 35 34 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  2154..#.do_test 
6960: 63 61 70 69 33 63 2d 31 37 2e 31 20 7b 0a 20 20  capi3c-17.1 {.  
6970: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
6980: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42  3_prepare_v2 $DB
6990: 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20   {SELECT max(a) 
69a0: 46 52 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c  FROM t2} -1 TAIL
69b0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
69c0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
69d0: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
69e0: 33 63 2d 31 37 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-17.2 {.  sqli
69f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
6a00: 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65  STMT 0.} 4.do_te
6a10: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 33 20 7b  st capi3c-17.3 {
6a20: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6a30: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
6a40: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
6a50: 33 63 2d 31 37 2e 34 20 7b 0a 20 20 73 71 6c 69  3c-17.4 {.  sqli
6a60: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6a70: 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54    db eval {CREAT
6a80: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
6a90: 28 61 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  (a)}.  sqlite3_s
6aa0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6ab0: 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63  TE_ROW.do_test c
6ac0: 61 70 69 33 63 2d 31 37 2e 35 20 7b 0a 20 20 73  api3c-17.5 {.  s
6ad0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
6ae0: 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f  t $STMT 0.} 4.do
6af0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6b00: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
6b10: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6b20: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6b30: 61 70 69 33 63 2d 31 37 2e 37 20 7b 0a 20 20 73  api3c-17.7 {.  s
6b40: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
6b50: 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 44 52  MT.  db eval {DR
6b60: 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 20 20 73  OP INDEX i2}.  s
6b70: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6b80: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64  T.} SQLITE_ROW.d
6b90: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6ba0: 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  .8 {.  sqlite3_c
6bb0: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6bc0: 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61  0.} 4.do_test ca
6bd0: 70 69 33 63 2d 31 37 2e 39 20 7b 0a 20 20 73 71  pi3c-17.9 {.  sq
6be0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6bf0: 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64  .} SQLITE_DONE.d
6c00: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6c10: 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .10 {.  sqlite3_
6c20: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
6c30: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6c40: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
6c50: 42 20 7b 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  B {SELECT b FROM
6c60: 20 74 31 20 57 48 45 52 45 20 61 3d 3f 7d 20 2d   t1 WHERE a=?} -
6c70: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
6c80: 33 5f 62 69 6e 64 5f 69 6e 74 20 24 53 54 4d 54  3_bind_int $STMT
6c90: 20 31 20 32 0a 20 20 64 62 20 65 76 61 6c 20 7b   1 2.  db eval {
6ca0: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
6cb0: 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t1;.    INSERT 
6cc0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
6cd0: 2c 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53  ,'one');.    INS
6ce0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6cf0: 45 53 28 32 2c 27 74 77 6f 27 29 3b 0a 20 20 20  ES(2,'two');.   
6d00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6d10: 56 41 4c 55 45 53 28 33 2c 27 74 68 72 65 65 27  VALUES(3,'three'
6d20: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
6d30: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 27  TO t1 VALUES(4,'
6d40: 66 6f 75 72 27 29 3b 0a 20 20 7d 0a 20 20 73 71  four');.  }.  sq
6d50: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6d60: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6d70: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6d80: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  11 {.  sqlite3_c
6d90: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
6da0: 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74   0.} two.do_test
6db0: 20 63 61 70 69 33 63 2d 31 37 2e 31 32 20 7b 0a   capi3c-17.12 {.
6dc0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6dd0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6de0: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6df0: 63 2d 31 37 2e 31 33 20 7b 0a 20 20 73 71 6c 69  c-17.13 {.  sqli
6e00: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6e10: 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54    db eval {CREAT
6e20: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
6e30: 28 61 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  (a)}.  sqlite3_s
6e40: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6e50: 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63  TE_ROW.do_test c
6e60: 61 70 69 33 63 2d 31 37 2e 31 34 20 7b 0a 20 20  api3c-17.14 {.  
6e70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
6e80: 65 78 74 20 24 53 54 4d 54 20 30 0a 7d 20 74 77  ext $STMT 0.} tw
6e90: 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  o.do_test capi3c
6ea0: 2d 31 37 2e 31 35 20 7b 0a 20 20 73 71 6c 69 74  -17.15 {.  sqlit
6eb0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6ec0: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74  SQLITE_DONE.do_t
6ed0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 36  est capi3c-17.16
6ee0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
6ef0: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76  et $STMT.  db ev
6f00: 61 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  al {DROP INDEX i
6f10: 31 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  1}.  sqlite3_ste
6f20: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6f30: 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70  _ROW.do_test cap
6f40: 69 33 63 2d 31 37 2e 31 37 20 7b 0a 20 20 73 71  i3c-17.17 {.  sq
6f50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6f60: 74 20 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a  t $STMT 0.} two.
6f70: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6f80: 37 2e 31 38 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.18 {.  sqlite3
6f90: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6fa0: 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73  LITE_DONE.do_tes
6fb0: 74 20 63 61 70 69 33 63 2d 31 37 2e 39 39 20 7b  t capi3c-17.99 {
6fc0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6fd0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  ize $STMT.} SQLI
6fe0: 54 45 5f 4f 4b 0a 0a 23 20 4f 6e 20 74 68 65 20  TE_OK..# On the 
6ff0: 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20 69 74 20  mailing list it 
7000: 68 61 73 20 62 65 65 6e 20 72 65 70 6f 72 74 65  has been reporte
7010: 64 20 74 68 61 74 20 66 69 6e 61 6c 69 7a 69 6e  d that finalizin
7020: 67 20 61 66 74 65 72 0a 23 20 61 6e 20 53 51 4c  g after.# an SQL
7030: 49 54 45 5f 42 55 53 59 20 72 65 74 75 72 6e 20  ITE_BUSY return 
7040: 6c 65 61 64 73 20 74 6f 20 61 20 73 65 67 66 61  leads to a segfa
7050: 75 6c 74 2e 20 20 48 65 72 65 20 77 65 20 74 65  ult.  Here we te
7060: 73 74 20 74 68 61 74 20 63 61 73 65 2e 0a 23 0a  st that case..#.
7070: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7080: 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  8.1 {.  sqlite3 
7090: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 73 65  db2 test.db.  se
70a0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
70b0: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b  prepare_v2 $DB {
70c0: 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52  SELECT max(a) FR
70d0: 4f 4d 20 74 31 7d 20 2d 31 20 54 41 49 4c 5d 0a  OM t1} -1 TAIL].
70e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
70f0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
7100: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
7110: 2d 31 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -18.2 {.  sqlite
7120: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
7130: 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74  MT 0.} 4.do_test
7140: 20 63 61 70 69 33 63 2d 31 38 2e 33 20 7b 0a 20   capi3c-18.3 {. 
7150: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
7160: 53 54 4d 54 0a 20 20 64 62 32 20 65 76 61 6c 20  STMT.  db2 eval 
7170: 7b 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45  {BEGIN EXCLUSIVE
7180: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
7190: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
71a0: 42 55 53 59 0a 64 6f 5f 74 65 73 74 20 63 61 70  BUSY.do_test cap
71b0: 69 33 63 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c  i3c-18.4 {.  sql
71c0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
71d0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 42 55 53  TMT.} SQLITE_BUS
71e0: 59 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  Y.do_test capi3c
71f0: 2d 31 38 2e 35 20 7b 0a 20 20 64 62 32 20 65 76  -18.5 {.  db2 ev
7200: 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 64 62  al {COMMIT}.  db
7210: 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20  2 close.} {}..# 
7220: 54 69 63 6b 65 74 20 23 32 31 35 38 2e 20 20 54  Ticket #2158.  T
7230: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
7240: 29 20 77 69 6c 6c 20 73 74 69 6c 6c 20 72 65 74  ) will still ret
7250: 75 72 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  urn SQLITE_SCHEM
7260: 41 0a 23 20 69 66 20 74 68 65 20 64 61 74 61 62  A.# if the datab
7270: 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
7280: 65 73 20 69 6e 20 61 20 77 61 79 20 74 68 61 74  es in a way that
7290: 20 6d 61 6b 65 73 20 74 68 65 20 73 74 61 74 65   makes the state
72a0: 6d 65 6e 74 0a 23 20 6e 6f 20 6c 6f 6e 67 65 72  ment.# no longer
72b0: 20 76 61 6c 69 64 2e 0a 23 0a 64 6f 5f 74 65 73   valid..#.do_tes
72c0: 74 20 63 61 70 69 33 63 2d 31 39 2e 31 20 7b 0a  t capi3c-19.1 {.
72d0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
72e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
72f0: 28 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e 53 45  (x,y);.     INSE
7300: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
7310: 53 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 65  S(1,2);.  }.  se
7320: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
7330: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b  prepare_v2 $DB {
7340: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
7350: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  } -1 TAIL].  sql
7360: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7370: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f  } SQLITE_ROW.do_
7380: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 32  test capi3c-19.2
7390: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
73a0: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a  umn_int $STMT 0.
73b0: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 1.do_test capi
73c0: 33 63 2d 31 39 2e 33 20 7b 0a 20 20 73 71 6c 69  3c-19.3 {.  sqli
73d0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
73e0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f   SQLITE_DONE.do_
73f0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34  test capi3c-19.4
7400: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
7410: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76  et $STMT.  db ev
7420: 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  al {DROP TABLE t
7430: 33 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  3}.  sqlite3_ste
7440: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
7450: 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 63  _ERROR.do_test c
7460: 61 70 69 33 63 2d 31 39 2e 34 2e 31 20 7b 0a 20  api3c-19.4.1 {. 
7470: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
7480: 24 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74  $DB.} {no such t
7490: 61 62 6c 65 3a 20 74 33 7d 0a 69 66 63 61 70 61  able: t3}.ifcapa
74a0: 62 6c 65 20 64 65 70 72 65 63 61 74 65 64 20 7b  ble deprecated {
74b0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
74c0: 63 2d 31 39 2e 34 2e 32 20 7b 0a 20 20 20 20 73  c-19.4.2 {.    s
74d0: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 24  qlite3_expired $
74e0: 53 54 4d 54 0a 20 20 7d 20 31 0a 7d 0a 64 6f 5f  STMT.  } 1.}.do_
74f0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34  test capi3c-19.4
7500: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .3 {.  sqlite3_e
7510: 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20  rrmsg $DB.} {no 
7520: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a  such table: t3}.
7530: 69 66 63 61 70 61 62 6c 65 20 64 65 70 72 65 63  ifcapable deprec
7540: 61 74 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ated {.  do_test
7550: 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 34 20 7b   capi3c-19.4.4 {
7560: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70  .    sqlite3_exp
7570: 69 72 65 64 20 30 0a 20 20 7d 20 31 0a 7d 0a 64  ired 0.  } 1.}.d
7580: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39  o_test capi3c-19
7590: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  .5 {.  sqlite3_r
75a0: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20  eset $STMT.  db 
75b0: 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52 45 41  eval {.     CREA
75c0: 54 45 20 54 41 42 4c 45 20 74 33 28 78 2c 79 29  TE TABLE t3(x,y)
75d0: 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;.     INSERT IN
75e0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32  TO t3 VALUES(1,2
75f0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
7600: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7610: 4c 49 54 45 5f 52 4f 57 0a 69 66 63 61 70 61 62  LITE_ROW.ifcapab
7620: 6c 65 20 64 65 70 72 65 63 61 74 65 64 20 7b 0a  le deprecated {.
7630: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
7640: 2d 31 39 2e 35 2e 32 20 7b 0a 20 20 20 20 73 71  -19.5.2 {.    sq
7650: 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 24 53  lite3_expired $S
7660: 54 4d 54 0a 20 20 7d 20 30 0a 7d 0a 64 6f 5f 74  TMT.  } 0.}.do_t
7670: 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 36 20  est capi3c-19.6 
7680: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
7690: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 31 0a 7d  mn_int $STMT 1.}
76a0: 20 32 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   2.do_test capi3
76b0: 63 2d 31 39 2e 39 39 20 7b 0a 20 20 73 71 6c 69  c-19.99 {.  sqli
76c0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
76d0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a  MT.} SQLITE_OK..
76e0: 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 68  # Make sure a ch
76f0: 61 6e 67 65 20 69 6e 20 61 20 73 65 70 61 72 61  ange in a separa
7700: 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  te database conn
7710: 65 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  ection does not.
7720: 23 20 63 61 75 73 65 20 61 6e 20 53 51 4c 49 54  # cause an SQLIT
7730: 45 5f 53 43 48 45 4d 41 20 72 65 74 75 72 6e 2e  E_SCHEMA return.
7740: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .#.do_test capi3
7750: 63 2d 32 30 2e 31 20 7b 0a 20 20 73 65 74 20 53  c-20.1 {.  set S
7760: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7770: 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c  pare_v2 $DB {SEL
7780: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d  ECT * FROM t3} -
7790: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
77a0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
77b0: 64 62 32 20 65 76 61 6c 20 7b 43 52 45 41 54 45  db2 eval {CREATE
77c0: 20 54 41 42 4c 45 20 74 34 28 78 29 7d 0a 20 20   TABLE t4(x)}.  
77d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
77e0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
77f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7800: 30 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.2 {.  sqlite3_
7810: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
7820: 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63   1.} 2.do_test c
7830: 61 70 69 33 63 2d 32 30 2e 33 20 7b 0a 20 20 73  api3c-20.3 {.  s
7840: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
7850: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
7860: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7870: 30 2e 34 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73  0.4 {.  db2 clos
7880: 65 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  e.  sqlite3_fina
7890: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
78a0: 49 54 45 5f 4f 4b 0a 0a 23 20 54 65 73 74 20 74  ITE_OK..# Test t
78b0: 68 61 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70  hat sqlite3_step
78c0: 28 29 20 73 65 74 73 20 74 68 65 20 64 61 74 61  () sets the data
78d0: 62 61 73 65 20 65 72 72 6f 72 20 63 6f 64 65 20  base error code 
78e0: 63 6f 72 72 65 63 74 6c 79 2e 0a 23 20 53 65 65  correctly..# See
78f0: 20 74 69 63 6b 65 74 20 23 32 34 39 37 2e 0a 23   ticket #2497..#
7900: 0a 69 66 63 61 70 61 62 6c 65 20 70 72 6f 67 72  .ifcapable progr
7910: 65 73 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ess {.  do_test 
7920: 63 61 70 69 33 63 2d 32 31 2e 31 20 7b 0a 20 20  capi3c-21.1 {.  
7930: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7940: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7950: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7960: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7970: 20 20 20 64 62 20 70 72 6f 67 72 65 73 73 20 35     db progress 5
7980: 20 22 65 78 70 72 20 31 22 0a 20 20 20 20 73 71   "expr 1".    sq
7990: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
79a0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
79b0: 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73  ERRUPT}.  do_tes
79c0: 74 20 63 61 70 69 33 63 2d 32 31 2e 32 20 7b 0a  t capi3c-21.2 {.
79d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
79e0: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
79f0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7a00: 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73  ERRUPT}.  do_tes
7a10: 74 20 63 61 70 69 33 63 2d 32 31 2e 33 20 7b 0a  t capi3c-21.3 {.
7a20: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
7a30: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 7d 20 7b  lize $STMT.  } {
7a40: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
7a50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
7a60: 33 63 2d 32 31 2e 34 20 7b 0a 20 20 20 20 73 65  3c-21.4 {.    se
7a70: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
7a80: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
7a90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d  ECT * FROM t3} -
7aa0: 31 20 54 41 49 4c 5d 0a 20 20 20 20 64 62 20 70  1 TAIL].    db p
7ab0: 72 6f 67 72 65 73 73 20 35 20 22 65 78 70 72 20  rogress 5 "expr 
7ac0: 31 22 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  1".    sqlite3_s
7ad0: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
7ae0: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
7af0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31  o_test capi3c-21
7b00: 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .5 {.    sqlite3
7b10: 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20 7d  _errcode $DB.  }
7b20: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
7b30: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
7b40: 2d 32 31 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69  -21.6 {.    sqli
7b50: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
7b60: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49  MT.  } {SQLITE_I
7b70: 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74  NTERRUPT}.  do_t
7b80: 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 37 20  est capi3c-21.7 
7b90: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
7ba0: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
7bb0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d  QLITE_INTERRUPT}
7bc0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7bd0: 63 2d 32 31 2e 38 20 7b 0a 20 20 20 20 73 71 6c  c-21.8 {.    sql
7be0: 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
7bf0: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
7c00: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d  QLITE_INTERRUPT}
7c10: 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  .}..# Make sure 
7c20: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
7c30: 72 72 6f 72 5f 63 6f 64 65 28 29 20 72 65 74 75  rror_code() retu
7c40: 72 6e 73 20 74 68 65 20 63 6f 72 72 65 63 74 20  rns the correct 
7c50: 65 72 72 6f 72 20 63 6f 64 65 2e 0a 23 20 53 65  error code..# Se
7c60: 65 20 74 69 63 6b 65 74 20 23 32 39 34 30 0a 23  e ticket #2940.#
7c70: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7c80: 32 32 2e 31 20 7b 0a 20 20 64 62 20 70 72 6f 67  22.1 {.  db prog
7c90: 72 65 73 73 20 30 20 7b 7d 0a 20 20 73 65 74 20  ress 0 {}.  set 
7ca0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7cb0: 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c  epare_v2 db {SEL
7cc0: 45 43 54 20 74 65 73 74 5f 65 72 72 6f 72 28 27  ECT test_error('
7cd0: 74 68 65 20 6d 65 73 73 61 67 65 27 2c 33 29 7d  the message',3)}
7ce0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
7cf0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
7d00: 20 7b 53 51 4c 49 54 45 5f 50 45 52 4d 7d 0a 73   {SQLITE_PERM}.s
7d10: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
7d20: 24 53 54 4d 54 0a 64 6f 5f 74 65 73 74 20 63 61  $STMT.do_test ca
7d30: 70 69 33 63 2d 32 32 2e 32 20 7b 0a 20 20 73 65  pi3c-22.2 {.  se
7d40: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
7d50: 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53  prepare_v2 db {S
7d60: 45 4c 45 43 54 20 74 65 73 74 5f 65 72 72 6f 72  ELECT test_error
7d70: 28 27 74 68 65 20 6d 65 73 73 61 67 65 27 2c 34  ('the message',4
7d80: 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  )} -1 TAIL].  sq
7d90: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
7da0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52 54  .} {SQLITE_ABORT
7db0: 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  }.sqlite3_finali
7dc0: 7a 65 20 24 53 54 4d 54 0a 64 6f 5f 74 65 73 74  ze $STMT.do_test
7dd0: 20 63 61 70 69 33 63 2d 32 32 2e 33 20 7b 0a 20   capi3c-22.3 {. 
7de0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
7df0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62  e3_prepare_v2 db
7e00: 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65 72   {SELECT test_er
7e10: 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67 65  ror('the message
7e20: 27 2c 31 36 29 7d 20 2d 31 20 54 41 49 4c 5d 0a  ',16)} -1 TAIL].
7e30: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7e40: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45  STMT.} {SQLITE_E
7e50: 4d 50 54 59 7d 0a 73 71 6c 69 74 65 33 5f 66 69  MPTY}.sqlite3_fi
7e60: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 0a 23 20  nalize $STMT..# 
7e70: 46 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75  For a multi-colu
7e80: 6d 6e 20 72 65 73 75 6c 74 20 73 65 74 20 77 68  mn result set wh
7e90: 65 72 65 20 74 68 65 20 73 61 6d 65 20 74 61 62  ere the same tab
7ea0: 6c 65 20 63 6f 6c 75 6d 6e 20 69 73 20 72 65 70  le column is rep
7eb0: 65 61 74 65 64 0a 23 20 69 6e 20 6d 75 6c 74 69  eated.# in multi
7ec0: 70 6c 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ple columns of t
7ed0: 68 65 20 6f 75 74 70 75 74 2c 20 76 65 72 69 66  he output, verif
7ee0: 79 20 74 68 61 74 20 64 6f 69 6e 67 20 61 20 55  y that doing a U
7ef0: 54 46 2d 38 20 74 6f 20 55 54 46 2d 31 36 0a 23  TF-8 to UTF-16.#
7f00: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 28 6f 72 20   conversion (or 
7f10: 76 69 63 65 20 76 65 72 73 61 29 20 6f 6e 20 6f  vice versa) on o
7f20: 6e 65 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e  ne column does n
7f30: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ot change the va
7f40: 6c 75 65 20 6f 66 0a 23 20 74 68 65 20 73 65 63  lue of.# the sec
7f50: 6f 6e 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  ond..#.ifcapable
7f60: 20 75 74 66 31 36 20 7b 0a 20 20 64 6f 5f 74 65   utf16 {.  do_te
7f70: 73 74 20 63 61 70 69 33 63 2d 32 33 2e 31 20 7b  st capi3c-23.1 {
7f80: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
7f90: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7fa0: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 62 2c 62  2 db {SELECT b,b
7fb0: 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d 20 2d 31  ,b,b FROM t1} -1
7fc0: 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74   TAIL].    sqlit
7fd0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
7fe0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 20  } {SQLITE_ROW}. 
7ff0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
8000: 32 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  23.2 {.    sqlit
8010: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
8020: 20 24 53 54 4d 54 20 30 0a 20 20 20 20 73 71 6c   $STMT 0.    sql
8030: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8040: 20 24 53 54 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e   $STMT 1.  } {on
8050: 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  e}.  do_test cap
8060: 69 33 63 2d 32 33 2e 33 20 7b 0a 20 20 20 20 73  i3c-23.3 {.    s
8070: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8080: 78 74 31 36 20 24 53 54 4d 54 20 32 0a 20 20 20  xt16 $STMT 2.   
8090: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
80a0: 74 65 78 74 20 24 53 54 4d 54 20 33 0a 20 20 7d  text $STMT 3.  }
80b0: 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69 74 65 33   {one}.  sqlite3
80c0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
80d0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
80e0: 2d 32 33 2e 34 20 7b 0a 20 20 20 20 73 65 74 20  -23.4 {.    set 
80f0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
8100: 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c  epare_v2 db {SEL
8110: 45 43 54 20 62 7c 7c 27 78 27 2c 62 2c 62 2c 62  ECT b||'x',b,b,b
8120: 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41 49   FROM t1} -1 TAI
8130: 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  L].    sqlite3_s
8140: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
8150: 51 4c 49 54 45 5f 52 4f 57 7d 0a 20 20 64 6f 5f  QLITE_ROW}.  do_
8160: 74 65 73 74 20 63 61 70 69 33 63 2d 32 33 2e 35  test capi3c-23.5
8170: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   {.    sqlite3_c
8180: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54  olumn_text16 $ST
8190: 4d 54 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33  MT 0.    sqlite3
81a0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54  _column_text $ST
81b0: 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20  MT 1.  } {one}. 
81c0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
81d0: 32 33 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69 74  23.6 {.    sqlit
81e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
81f0: 20 24 53 54 4d 54 20 32 0a 20 20 20 20 73 71 6c   $STMT 2.    sql
8200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8210: 20 24 53 54 4d 54 20 33 0a 20 20 7d 20 7b 6f 6e   $STMT 3.  } {on
8220: 65 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  e}.  sqlite3_fin
8230: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 0a 0a 23  alize $STMT.}..#
8240: 20 54 65 73 74 20 64 65 63 6c 74 79 70 65 20 6f   Test decltype o
8250: 6e 20 73 6f 6d 65 20 53 45 4c 45 43 54 20 73 74  n some SELECT st
8260: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 63 6f  atements that co
8270: 6e 74 61 69 6e 20 73 75 62 2d 73 65 6c 65 63 74  ntain sub-select
8280: 73 2e 0a 23 0a 70 72 6f 63 20 64 65 63 6c 74 79  s..#.proc declty
8290: 70 65 20 7b 7a 53 71 6c 7d 20 7b 0a 20 20 73 65  pe {zSql} {.  se
82a0: 74 20 72 65 74 20 5b 6c 69 73 74 5d 0a 20 20 73  t ret [list].  s
82b0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
82c0: 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 24  _prepare_v2 db $
82d0: 7a 53 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  zSql -1 TAIL].  
82e0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
82f0: 69 20 3c 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  i < [sqlite3_col
8300: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d  umn_count $STMT]
8310: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
8320: 20 6c 61 70 70 65 6e 64 20 72 65 74 20 5b 73 71   lappend ret [sq
8330: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
8340: 6c 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 0a  ltype $STMT $i].
8350: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69    }.  sqlite3_fi
8360: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 72  nalize $STMT.  r
8370: 65 74 75 72 6e 20 24 72 65 74 0a 7d 0a 64 6f 5f  eturn $ret.}.do_
8380: 74 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 31  test capi3c-24.1
8390: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43   {.  execsql { C
83a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
83b0: 20 49 4e 54 45 47 45 52 2c 20 62 20 53 54 52 49   INTEGER, b STRI
83c0: 4e 47 2c 20 63 20 44 41 54 45 54 49 4d 45 29 20  NG, c DATETIME) 
83d0: 7d 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45  }.  decltype {SE
83e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 7d 0a  LECT * FROM t5}.
83f0: 7d 20 7b 49 4e 54 45 47 45 52 20 53 54 52 49 4e  } {INTEGER STRIN
8400: 47 20 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74  G DATETIME}.do_t
8410: 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 32 20  est capi3c-24.2 
8420: 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45  {.  decltype {SE
8430: 4c 45 43 54 20 28 53 45 4c 45 43 54 20 63 29 20  LECT (SELECT c) 
8440: 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54 45  FROM t5}.} {DATE
8450: 54 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  TIME}.do_test ca
8460: 70 69 33 63 2d 32 34 2e 33 20 7b 0a 20 20 64 65  pi3c-24.3 {.  de
8470: 63 6c 74 79 70 65 20 7b 53 45 4c 45 43 54 20 28  cltype {SELECT (
8480: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53  SELECT * FROM (S
8490: 45 4c 45 43 54 20 63 29 29 20 46 52 4f 4d 20 74  ELECT c)) FROM t
84a0: 35 7d 0a 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a  5}.} {DATETIME}.
84b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
84c0: 34 2e 34 20 7b 0a 20 20 64 65 63 6c 74 79 70 65  4.4 {.  decltype
84d0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
84e0: 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  (SELECT * FROM t
84f0: 35 20 4f 52 44 45 52 20 42 59 20 63 20 4c 49 4d  5 ORDER BY c LIM
8500: 49 54 20 31 29 20 4f 52 44 45 52 20 42 59 20 62  IT 1) ORDER BY b
8510: 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 20 53 54 52  }.} {INTEGER STR
8520: 49 4e 47 20 44 41 54 45 54 49 4d 45 7d 0a 64 6f  ING DATETIME}.do
8530: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e  _test capi3c-24.
8540: 35 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b  5 {.  decltype {
8550: 0a 20 20 20 20 53 45 4c 45 43 54 20 28 53 45 4c  .    SELECT (SEL
8560: 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45 4c 45  ECT x FROM (SELE
8570: 43 54 20 63 20 41 53 20 78 29 29 20 0a 20 20 20  CT c AS x)) .   
8580: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20   FROM (SELECT * 
8590: 46 52 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59  FROM t5 ORDER BY
85a0: 20 63 20 4c 49 4d 49 54 20 31 29 20 4f 52 44 45   c LIMIT 1) ORDE
85b0: 52 20 42 59 20 62 0a 20 20 7d 0a 7d 20 7b 44 41  R BY b.  }.} {DA
85c0: 54 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20  TETIME}.do_test 
85d0: 63 61 70 69 33 63 2d 32 34 2e 33 20 7b 0a 20 20  capi3c-24.3 {.  
85e0: 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45 43 54  decltype {SELECT
85f0: 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   (SELECT x FROM 
8600: 28 53 45 4c 45 43 54 20 74 35 2e 61 20 41 53 20  (SELECT t5.a AS 
8610: 78 29 29 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b  x)) FROM t5}.} {
8620: 49 4e 54 45 47 45 52 7d 0a 0a 66 69 6e 69 73 68  INTEGER}..finish
8630: 5f 74 65 73 74 0a                                _test.