/ Hex Artifact Content
Login

Artifact bea67403a5e37a4b33230ee4723e315a2ffb31e7:


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 69 6c 65 20 64 65 6c 65 74  {.    file delet
4390: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62  e -force test.db
43a0: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
43b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
43c0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
43d0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
43e0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
43f0: 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f      }.    db clo
4400: 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  se.  } {}.  do_t
4410: 65 73 74 20 63 61 70 69 33 63 2d 38 2e 32 20 7b  est capi3c-8.2 {
4420: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4430: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
4440: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
4450: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
4460: 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53  ma=ON;.      INS
4470: 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
4480: 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28 4e 55  master VALUES(NU
4490: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c  LL,NULL,NULL,NUL
44a0: 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20  L,NULL);.    }. 
44b0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
44c0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
44d0: 69 33 63 2d 38 2e 33 20 7b 0a 20 20 20 20 63 61  i3c-8.3 {.    ca
44e0: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62  tch { sqlite3 db
44f0: 20 74 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63   test.db }.    c
4500: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
4510: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
4520: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
4530: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f   }.  } {1 {malfo
4540: 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63  rmed database sc
4550: 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f  hema (?)}}.  do_
4560: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 34 20  test capi3c-8.4 
4570: 7b 0a 20 20 20 20 23 20 42 75 69 6c 64 20 61 20  {.    # Build a 
4580: 35 2d 66 69 65 6c 64 20 72 6f 77 20 72 65 63 6f  5-field row reco
4590: 72 64 2e 20 54 68 65 20 66 69 72 73 74 20 66 69  rd. The first fi
45a0: 65 6c 64 20 69 73 20 61 20 73 74 72 69 6e 67 20  eld is a string 
45b0: 27 74 61 62 6c 65 27 2c 20 61 6e 64 0a 20 20 20  'table', and.   
45c0: 20 23 20 73 75 62 73 65 71 75 65 6e 74 20 66 69   # subsequent fi
45d0: 65 6c 64 73 20 61 72 65 20 61 6c 6c 20 4e 55 4c  elds are all NUL
45e0: 4c 2e 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a  L..    db close.
45f0: 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20      file delete 
4600: 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 20 74  -force test.db t
4610: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  est.db-journal. 
4620: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
4630: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
4640: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
4650: 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20   TABLE t1(a);.  
4660: 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61      PRAGMA writa
4670: 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20  ble_schema=ON;. 
4680: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4690: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 56   sqlite_master V
46a0: 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c 4e 55  ALUES('table',NU
46b0: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c  LL,NULL,NULL,NUL
46c0: 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  L);.    }.    db
46d0: 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b 0a 20   close.  } {};. 
46e0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
46f0: 38 2e 35 20 7b 0a 20 20 20 20 63 61 74 63 68 20  8.5 {.    catch 
4700: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
4710: 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68  t.db }.    catch
4720: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4730: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4740: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4750: 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64   } {1 {malformed
4760: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
4770: 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63 6c 6f 73   (?)}}.  db clos
4780: 65 0a 7d 0a 66 69 6c 65 20 64 65 6c 65 74 65 20  e.}.file delete 
4790: 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 66  -force test.db.f
47a0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
47b0: 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  e test.db-journa
47c0: 6c 0a 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65  l...# Test the e
47d0: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
47e0: 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e  string equivalen
47f0: 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72  ts for sqlite er
4800: 72 6f 72 20 63 6f 64 65 73 0a 73 65 74 20 63 6f  ror codes.set co
4810: 64 65 32 65 6e 67 6c 69 73 68 20 5b 6c 69 73 74  de2english [list
4820: 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20   \.SQLITE_OK    
4830: 20 20 20 20 20 7b 6e 6f 74 20 61 6e 20 65 72 72       {not an err
4840: 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 52 52  or} \.SQLITE_ERR
4850: 4f 52 20 20 20 20 20 20 7b 53 51 4c 20 6c 6f 67  OR      {SQL log
4860: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
4870: 69 6e 67 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  ing database} \.
4880: 53 51 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20  SQLITE_PERM     
4890: 20 20 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73    {access permis
48a0: 73 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53  sion denied} \.S
48b0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20  QLITE_ABORT     
48c0: 20 7b 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65   {callback reque
48d0: 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74  sted query abort
48e0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 42 55 53 59 20  } \.SQLITE_BUSY 
48f0: 20 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20        {database 
4900: 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c  is locked} \.SQL
4910: 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b  ITE_LOCKED     {
4920: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
4930: 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49  s locked} \.SQLI
4940: 54 45 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f  TE_NOMEM      {o
4950: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a  ut of memory} \.
4960: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20  SQLITE_READONLY 
4970: 20 20 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72    {attempt to wr
4980: 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64  ite a readonly d
4990: 61 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54  atabase} \.SQLIT
49a0: 45 5f 49 4e 54 45 52 52 55 50 54 20 20 7b 69 6e  E_INTERRUPT  {in
49b0: 74 65 72 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c  terrupted} \.SQL
49c0: 49 54 45 5f 49 4f 45 52 52 20 20 20 20 20 20 7b  ITE_IOERR      {
49d0: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20  disk I/O error} 
49e0: 5c 0a 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  \.SQLITE_CORRUPT
49f0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 64 69      {database di
4a00: 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66  sk image is malf
4a10: 6f 72 6d 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  ormed} \.SQLITE_
4a20: 46 55 4c 4c 20 20 20 20 20 20 20 7b 64 61 74 61  FULL       {data
4a30: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20  base or disk is 
4a40: 66 75 6c 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43  full} \.SQLITE_C
4a50: 41 4e 54 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c  ANTOPEN   {unabl
4a60: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
4a70: 73 65 20 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54  se file} \.SQLIT
4a80: 45 5f 45 4d 50 54 59 20 20 20 20 20 20 7b 74 61  E_EMPTY      {ta
4a90: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
4aa0: 64 61 74 61 7d 20 5c 0a 53 51 4c 49 54 45 5f 53  data} \.SQLITE_S
4ab0: 43 48 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62  CHEMA     {datab
4ac0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
4ad0: 68 61 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45  hanged} \.SQLITE
4ae0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e  _CONSTRAINT {con
4af0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20  straint failed} 
4b00: 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  \.SQLITE_MISMATC
4b10: 48 20 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69  H   {datatype mi
4b20: 73 6d 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45  smatch} \.SQLITE
4b30: 5f 4d 49 53 55 53 45 20 20 20 20 20 7b 6c 69 62  _MISUSE     {lib
4b40: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
4b50: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
4b60: 6e 63 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f  nce} \.SQLITE_NO
4b70: 4c 46 53 20 20 20 20 20 20 7b 6c 61 72 67 65 20  LFS      {large 
4b80: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  file support is 
4b90: 64 69 73 61 62 6c 65 64 7d 20 5c 0a 53 51 4c 49  disabled} \.SQLI
4ba0: 54 45 5f 41 55 54 48 20 20 20 20 20 20 20 7b 61  TE_AUTH       {a
4bb0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e  uthorization den
4bc0: 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 4f  ied} \.SQLITE_FO
4bd0: 52 4d 41 54 20 20 20 20 20 7b 61 75 78 69 6c 69  RMAT     {auxili
4be0: 61 72 79 20 64 61 74 61 62 61 73 65 20 66 6f 72  ary database for
4bf0: 6d 61 74 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c  mat error} \.SQL
4c00: 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b  ITE_RANGE      {
4c10: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
4c20: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
4c30: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 54 41  e} \.SQLITE_NOTA
4c40: 44 42 20 20 20 20 20 7b 66 69 6c 65 20 69 73 20  DB     {file is 
4c50: 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20  encrypted or is 
4c60: 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20  not a database} 
4c70: 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72 20 20  \.unknownerror  
4c80: 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72      {unknown err
4c90: 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74 65 73  or} \.]..set tes
4ca0: 74 5f 6e 75 6d 62 65 72 20 31 0a 66 6f 72 65 61  t_number 1.forea
4cb0: 63 68 20 7b 63 6f 64 65 20 65 6e 67 6c 69 73 68  ch {code english
4cc0: 7d 20 24 63 6f 64 65 32 65 6e 67 6c 69 73 68 20  } $code2english 
4cd0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
4ce0: 33 63 2d 39 2e 24 74 65 73 74 5f 6e 75 6d 62 65  3c-9.$test_numbe
4cf0: 72 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  r "sqlite3_test_
4d00: 65 72 72 73 74 72 20 24 63 6f 64 65 22 20 24 65  errstr $code" $e
4d10: 6e 67 6c 69 73 68 0a 20 20 69 6e 63 72 20 74 65  nglish.  incr te
4d20: 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20 54  st_number.}..# T
4d30: 65 73 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65  est the error me
4d40: 73 73 61 67 65 20 77 68 65 6e 20 61 20 22 72 65  ssage when a "re
4d50: 61 6c 22 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  al" out of memor
4d60: 79 20 6f 63 63 75 72 73 2e 0a 69 66 63 61 70 61  y occurs..ifcapa
4d70: 62 6c 65 20 6d 65 6d 64 65 62 75 67 20 7b 0a 20  ble memdebug {. 
4d80: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
4d90: 31 30 2d 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  10-1 {.    sqlit
4da0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4db0: 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65    set DB [sqlite
4dc0: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
4dd0: 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 73 71 6c  nter db].    sql
4de0: 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61  ite3_memdebug_fa
4df0: 69 6c 20 30 0a 20 20 20 20 63 61 74 63 68 73 71  il 0.    catchsq
4e00: 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74  l {.      select
4e10: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
4e20: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
4e30: 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f   {1 {out of memo
4e40: 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  ry}}.  do_test c
4e50: 61 70 69 33 63 2d 31 30 2d 32 20 7b 0a 20 20 20  api3c-10-2 {.   
4e60: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
4e70: 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20 6f  $::DB.  } {out o
4e80: 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63 61  f memory}.  ifca
4e90: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
4ea0: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
4eb0: 33 63 2d 31 30 2d 33 20 7b 0a 20 20 20 20 20 20  3c-10-3 {.      
4ec0: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
4ed0: 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20  rmsg16 $::DB].  
4ee0: 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f    } {out of memo
4ef0: 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f  ry}.  }.  db clo
4f00: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  se.  sqlite3_mem
4f10: 64 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 7d 0a  debug_fail -1.}.
4f20: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
4f30: 20 74 65 73 74 73 20 2d 20 63 61 70 69 33 63 2d   tests - capi3c-
4f40: 31 31 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74  11.* - test that
4f50: 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c   a COMMIT or ROL
4f60: 4c 42 41 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e  LBACK.# statemen
4f70: 74 20 69 73 73 75 65 64 20 77 68 69 6c 65 20 74  t issued while t
4f80: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6f  here are still o
4f90: 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 20 74  utstanding VMs t
4fa0: 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 0a  hat are part of.
4fb0: 23 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  # the transactio
4fc0: 6e 20 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33  n fails..sqlite3
4fd0: 20 64 62 20 74 65 73 74 2e 64 62 0a 73 65 74 20   db test.db.set 
4fe0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
4ff0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
5000: 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67 69 73 74  b].sqlite_regist
5010: 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  er_test_function
5020: 20 24 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73   $DB func.do_tes
5030: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 20 7b 0a  t capi3c-11.1 {.
5040: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5050: 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54  BEGIN;.    CREAT
5060: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
5070: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5080: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 27  O t1 VALUES(1, '
5090: 69 6e 74 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  int');.    INSER
50a0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
50b0: 28 32 2c 20 27 6e 6f 74 61 74 79 70 65 27 29 3b  (2, 'notatype');
50c0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
50d0: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 2e 31 20  t capi3c-11.1.1 
50e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
50f0: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5100: 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   0.do_test capi3
5110: 63 2d 31 31 2e 32 20 7b 0a 20 20 73 65 74 20 53  c-11.2 {.  set S
5120: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
5130: 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c  pare_v2 $DB "SEL
5140: 45 43 54 20 66 75 6e 63 28 62 2c 20 61 29 20 46  ECT func(b, a) F
5150: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
5160: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5170: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5180: 52 4f 57 7d 0a 0a 23 20 41 73 20 6f 66 20 33 2e  ROW}..# As of 3.
5190: 36 2e 35 20 61 20 43 4f 4d 4d 49 54 20 69 73 20  6.5 a COMMIT is 
51a0: 4f 4b 20 64 75 72 69 6e 67 20 77 68 69 6c 65 20  OK during while 
51b0: 61 20 71 75 65 72 79 20 69 73 20 73 74 69 6c 6c  a query is still
51c0: 20 72 75 6e 6e 69 6e 67 20 2d 0a 23 20 61 73 20   running -.# as 
51d0: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 61 20  long as it is a 
51e0: 72 65 61 64 2d 6f 6e 6c 79 20 71 75 65 72 79 20  read-only query 
51f0: 61 6e 64 20 6e 6f 74 20 61 6e 20 69 6e 63 72 65  and not an incre
5200: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 77 72 69 74  mental BLOB writ
5210: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  e..#.do_test cap
5220: 69 33 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 63 61  i3-11.3.1 {.  ca
5230: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5240: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5250: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5260: 31 31 2e 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74  11.3.2 {.  sqlit
5270: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
5280: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
5290: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
52a0: 70 69 33 2d 31 31 2e 33 2e 33 20 7b 0a 20 20 73  pi3-11.3.3 {.  s
52b0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
52c0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
52d0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33  _test capi3-11.3
52e0: 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .4 {.  db eval {
52f0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74  PRAGMA lock_stat
5300: 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20 73 68 61 72  us}.} {main shar
5310: 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a  ed temp closed}.
5320: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5330: 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  11.4 {.  sqlite3
5340: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5350: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
5360: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 35  test capi3c-11.5
5370: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
5380: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
5390: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
53a0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 36  test capi3c-11.6
53b0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
53c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
53d0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t1;.  }.} {0 {
53e0: 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70 65  1 int 2 notatype
53f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5400: 63 2d 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74  c-11.7 {.  sqlit
5410: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5420: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
5430: 74 20 63 61 70 69 33 63 2d 31 31 2e 38 20 7b 0a  t capi3c-11.8 {.
5440: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5450: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
5460: 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  a);.    INSERT I
5470: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29  NTO t2 VALUES(1)
5480: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5490: 4f 20 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a  O t2 VALUES(2);.
54a0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49      BEGIN;.    I
54b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
54c0: 4c 55 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b  LUES(3);.  }.} {
54d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
54e0: 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.8.1 {.  sqli
54f0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5500: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5510: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 20 7b  st capi3c-11.9 {
5520: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
5530: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
5540: 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52  $DB "SELECT a FR
5550: 4f 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a  OM t2" -1 TAIL].
5560: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
5570: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
5580: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
5590: 33 63 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71  3c-11.9.1 {.  sq
55a0: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
55b0: 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f  mmit $DB.} 0.do_
55c0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39  test capi3c-11.9
55d0: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
55e0: 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  {.    ROLLBACK;.
55f0: 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74    }.} {1 {cannot
5600: 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
5610: 63 74 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74  ction - SQL stat
5620: 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
5630: 73 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ss}}.do_test cap
5640: 69 33 63 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73  i3c-11.9.3 {.  s
5650: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5660: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5670: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5680: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  10 {.  sqlite3_s
5690: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
56a0: 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74  ITE_ROW}.do_test
56b0: 20 63 61 70 69 33 63 2d 31 31 2e 31 31 20 7b 0a   capi3c-11.11 {.
56c0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
56d0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
56e0: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
56f0: 33 63 2d 31 31 2e 31 32 20 7b 0a 20 20 73 71 6c  3c-11.12 {.  sql
5700: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5710: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
5720: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5730: 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.13 {.  sqlite3
5740: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5750: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
5760: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5770: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  14 {.  execsql {
5780: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
5790: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
57a0: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  2 3}.do_test cap
57b0: 69 33 63 2d 31 31 2e 31 34 2e 31 20 7b 0a 20 20  i3c-11.14.1 {.  
57c0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
57d0: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
57e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
57f0: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
5800: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5810: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5820: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5830: 31 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  15.1 {.  sqlite3
5840: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5850: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
5860: 63 61 70 69 33 63 2d 31 31 2e 31 36 20 7b 0a 20  capi3c-11.16 {. 
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 0a 23 20  .  }.} {1 2}..# 
58a0: 53 61 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  Sanity check on 
58b0: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
58c0: 66 20 27 6f 75 74 73 74 61 6e 64 69 6e 67 20 56  f 'outstanding V
58d0: 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 61  M'. This means a
58e0: 6e 79 20 56 4d 0a 23 20 74 68 61 74 20 68 61 73  ny VM.# that has
58f0: 20 68 61 64 20 73 71 6c 69 74 65 33 5f 73 74 65   had sqlite3_ste
5900: 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20  p() called more 
5910: 72 65 63 65 6e 74 6c 79 20 74 68 61 6e 20 73 71  recently than sq
5920: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
5930: 20 6f 72 0a 23 20 73 71 6c 69 74 65 33 5f 72 65   or.# sqlite3_re
5940: 73 65 74 28 29 2e 20 53 6f 20 61 20 56 4d 20 74  set(). So a VM t
5950: 68 61 74 20 68 61 73 20 6a 75 73 74 20 62 65 65  hat has just bee
5960: 6e 20 70 72 65 70 61 72 65 64 20 6f 72 20 72 65  n prepared or re
5970: 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63  set does not.# c
5980: 6f 75 6e 74 20 61 73 20 61 6e 20 61 63 74 69 76  ount as an activ
5990: 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63 61  e VM..do_test ca
59a0: 70 69 33 63 2d 31 31 2e 31 37 20 7b 0a 20 20 65  pi3c-11.17 {.  e
59b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
59c0: 49 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  IN;.  }.} {}.do_
59d0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
59e0: 38 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  8 {.  set STMT [
59f0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5a00: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  v2 $DB "SELECT a
5a10: 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49   FROM t1" -1 TAI
5a20: 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  L].  catchsql {.
5a30: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
5a40: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5a50: 20 63 61 70 69 33 63 2d 31 31 2e 31 39 20 7b 0a   capi3c-11.19 {.
5a60: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
5a70: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
5a80: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
5a90: 33 63 2d 31 31 2e 32 30 20 7b 0a 20 20 63 61 74  3c-11.20 {.  cat
5aa0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
5ab0: 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  N;.    COMMIT;. 
5ac0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5ad0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32 30  est capi3c-11.20
5ae0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
5af0: 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74 63 68  et $STMT.  catch
5b00: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5b10: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e  ;.  }.} {1 {cann
5b20: 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
5b30: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
5b40: 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  tive}}.do_test c
5b50: 61 70 69 33 63 2d 31 31 2e 32 31 20 7b 0a 20 20  api3c-11.21 {.  
5b60: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5b70: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5b80: 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c  _OK}..# The foll
5b90: 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61  owing tests - ca
5ba0: 70 69 33 63 2d 31 32 2e 2a 20 2d 20 63 68 65 63  pi3c-12.* - chec
5bb0: 6b 20 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f  k that its Ok to
5bc0: 20 73 74 61 72 74 20 61 0a 23 20 74 72 61 6e 73   start a.# trans
5bd0: 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68  action while oth
5be0: 65 72 20 56 4d 73 20 61 72 65 20 61 63 74 69 76  er VMs are activ
5bf0: 65 2c 20 61 6e 64 20 74 68 61 74 20 69 74 73 20  e, and that its 
5c00: 4f 6b 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20  Ok to execute.# 
5c10: 61 74 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69  atomic updates i
5c20: 6e 20 74 68 65 20 73 61 6d 65 20 73 69 74 75 61  n the same situa
5c30: 74 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20  tion .#.do_test 
5c40: 63 61 70 69 33 63 2d 31 32 2e 31 20 7b 0a 20 20  capi3c-12.1 {.  
5c50: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
5c60: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42  3_prepare_v2 $DB
5c70: 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   "SELECT a FROM 
5c80: 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t2" -1 TAIL].  s
5c90: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5ca0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5cb0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5cc0: 31 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71  12.2 {.  catchsq
5cd0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
5ce0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
5cf0: 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30   NULL);.  }.} {0
5d00: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5d10: 69 33 63 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74  i3c-12.3 {.  cat
5d20: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
5d30: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
5d40: 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  S(4);.  }.} {0 {
5d50: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5d60: 63 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68  c-12.4 {.  catch
5d70: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
5d80: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5d90: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20 4e 55   t1 VALUES(4, NU
5da0: 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  LL);.  }.} {0 {}
5db0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5dc0: 2d 31 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65  -12.5 {.  sqlite
5dd0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
5de0: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
5df0: 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e 35 2e  est capi3c-12.5.
5e00: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  1 {.  sqlite3_st
5e10: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5e20: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5e30: 63 61 70 69 33 63 2d 31 32 2e 36 20 7b 0a 20 20  capi3c-12.6 {.  
5e40: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5e50: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  MT.} {SQLITE_DON
5e60: 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  E}.do_test capi3
5e70: 63 2d 31 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74  c-12.7 {.  sqlit
5e80: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
5e90: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  T.} {SQLITE_OK}.
5ea0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5eb0: 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.8 {.  execsql 
5ec0: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
5ed0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5ee0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  t1;.  }.} {1 2 3
5ef0: 20 34 7d 0a 0a 23 20 54 65 73 74 20 63 61 73 65   4}..# Test case
5f00: 73 20 63 61 70 69 33 63 2d 31 33 2e 2a 20 74 65  s capi3c-13.* te
5f10: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  st the sqlite3_c
5f20: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 29 20  lear_bindings() 
5f30: 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 33 5f 73  and .# sqlite3_s
5f40: 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a 69 66 20  leep APIs..#.if 
5f50: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info 
5f60: 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33  commands sqlite3
5f70: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 5d  _clear_bindings]
5f80: 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ]>0} {.  do_test
5f90: 20 63 61 70 69 33 63 2d 31 33 2e 31 20 7b 0a 20   capi3c-13.1 {. 
5fa0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5fb0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
5fc0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  1;.    }.    set
5fd0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
5fe0: 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 49  repare_v2 $DB "I
5ff0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6000: 4c 55 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54  LUES(?, ?)" -1 T
6010: 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33  AIL].    sqlite3
6020: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20  _step $STMT.  } 
6030: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20  {SQLITE_DONE}.  
6040: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6050: 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  3.2 {.    sqlite
6060: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
6070: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
6080: 65 78 74 20 24 53 54 4d 54 20 31 20 68 65 6c 6c  ext $STMT 1 hell
6090: 6f 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  o 5.    sqlite3_
60a0: 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20  bind_text $STMT 
60b0: 32 20 77 6f 72 6c 64 20 35 0a 20 20 20 20 73 71  2 world 5.    sq
60c0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
60d0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
60e0: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
60f0: 69 33 63 2d 31 33 2e 33 20 7b 0a 20 20 20 20 73  i3c-13.3 {.    s
6100: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
6110: 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  MT.    sqlite3_c
6120: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 24 53  lear_bindings $S
6130: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
6140: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
6150: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64  SQLITE_DONE}.  d
6160: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
6170: 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  -4 {.    sqlite3
6180: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6190: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
61a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
61b0: 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M t1;.    }.  } 
61c0: 7b 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72  {{} {} hello wor
61d0: 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b  ld {} {}}.}.if {
61e0: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
61f0: 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f  ommands sqlite3_
6200: 73 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64  sleep]]>0} {.  d
6210: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
6220: 2d 35 20 7b 0a 20 20 20 20 73 65 74 20 6d 73 20  -5 {.    set ms 
6230: 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 38  [sqlite3_sleep 8
6240: 30 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 6d 73  0].    expr {$ms
6250: 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30 30  ==80 || $ms==100
6260: 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20  0}.  } {1}.}..# 
6270: 54 69 63 6b 65 74 20 23 31 32 31 39 3a 20 20 4d  Ticket #1219:  M
6280: 61 6b 65 20 73 75 72 65 20 62 69 6e 64 69 6e 67  ake sure binding
6290: 20 41 50 49 73 20 63 61 6e 20 68 61 6e 64 6c 65   APIs can handle
62a0: 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e   a NULL pointer.
62b0: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .#.do_test capi3
62c0: 63 2d 31 34 2e 31 20 7b 0a 20 20 73 65 74 20 72  c-14.1 {.  set r
62d0: 63 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65  c [catch {sqlite
62e0: 33 5f 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20  3_bind_text 0 1 
62f0: 68 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20  hello 5} msg].  
6300: 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a  lappend rc $msg.
6310: 7d 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55  } {1 SQLITE_MISU
6320: 53 45 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31  SE}..# Ticket #1
6330: 36 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20  650:  Honor the 
6340: 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74 65 72  nBytes parameter
6350: 20 74 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70   to sqlite3_prep
6360: 61 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  are..#.do_test c
6370: 61 70 69 33 63 2d 31 35 2e 31 20 7b 0a 20 20 73  api3c-15.1 {.  s
6380: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  et sql {SELECT *
6390: 20 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20   FROM t2}.  set 
63a0: 6e 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c  nbytes [string l
63b0: 65 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70  ength $sql].  ap
63c0: 70 65 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45  pend sql { WHERE
63d0: 20 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d   a==1}.  set STM
63e0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
63f0: 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 24  re_v2 $DB $sql $
6400: 6e 62 79 74 65 73 20 54 41 49 4c 5d 0a 20 20 73  nbytes TAIL].  s
6410: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6420: 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  T.  sqlite3_colu
6430: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
6440: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {1}.do_test cap
6450: 69 33 63 2d 31 35 2e 32 20 7b 0a 20 20 73 71 6c  i3c-15.2 {.  sql
6460: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6470: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6480: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b  _int $STMT 0.} {
6490: 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  2}.do_test capi3
64a0: 63 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69 74  c-15.3 {.  sqlit
64b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
64c0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  T.} {SQLITE_OK}.
64d0: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 63 6f 64  .# Make sure cod
64e0: 65 20 69 73 20 61 6c 77 61 79 73 20 67 65 6e 65  e is always gene
64f0: 72 61 74 65 64 20 65 76 65 6e 20 69 66 20 61 6e  rated even if an
6500: 20 49 46 20 45 58 49 53 54 53 20 6f 72 20 0a 23   IF EXISTS or .#
6510: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6520: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6530: 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20   that the table 
6540: 64 6f 65 73 20 6e 6f 74 20 6f 72 0a 23 20 64 6f  does not or.# do
6550: 65 73 20 65 78 69 73 74 73 2e 20 20 54 68 61 74  es exists.  That
6560: 20 77 61 79 20 77 65 20 77 69 6c 6c 20 61 6c 77   way we will alw
6570: 61 79 73 20 68 61 76 65 20 61 20 70 72 65 70 61  ays have a prepa
6580: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 23 20  red statement.# 
6590: 74 6f 20 65 78 70 69 72 65 20 77 68 65 6e 20 74  to expire when t
65a0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
65b0: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  s..#.do_test cap
65c0: 69 33 63 2d 31 36 2e 31 20 7b 0a 20 20 73 65 74  i3c-16.1 {.  set
65d0: 20 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45   sql {DROP TABLE
65e0: 20 49 46 20 45 58 49 53 54 53 20 74 33 7d 0a 20   IF EXISTS t3}. 
65f0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6600: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
6610: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
6620: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6630: 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20  ze $STMT.  expr 
6640: 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31  {$STMT!=""}.} {1
6650: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
6660: 2d 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71  -16.2 {.  set sq
6670: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
6680: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31  IF NOT EXISTS t1
6690: 28 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d  (x,y)}.  set STM
66a0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
66b0: 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d  re_v2 $DB $sql -
66c0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
66d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
66e0: 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d  .  expr {$STMT!=
66f0: 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75 74  ""}.} {1}..# But
6700: 20 73 74 69 6c 6c 20 77 65 20 64 6f 20 6e 6f 74   still we do not
6710: 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 69   generate code i
6720: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51  f there is no SQ
6730: 4c 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  L.#.do_test capi
6740: 33 63 2d 31 36 2e 33 20 7b 0a 20 20 73 65 74 20  3c-16.3 {.  set 
6750: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6760: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 7d 20  epare_v2 $DB {} 
6770: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6780: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6790: 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d  T.  expr {$STMT=
67a0: 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  =""}.} {1}.do_te
67b0: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 34 20 7b  st capi3c-16.4 {
67c0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
67d0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
67e0: 24 44 42 20 7b 3b 7d 20 2d 31 20 54 41 49 4c 5d  $DB {;} -1 TAIL]
67f0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6800: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
6810: 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b   {$STMT==""}.} {
6820: 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31  1}..# Ticket #21
6830: 35 34 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  54..#.do_test ca
6840: 70 69 33 63 2d 31 37 2e 31 20 7b 0a 20 20 73 65  pi3c-17.1 {.  se
6850: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6860: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b  prepare_v2 $DB {
6870: 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52  SELECT max(a) FR
6880: 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a  OM t2} -1 TAIL].
6890: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
68a0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
68b0: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
68c0: 2d 31 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -17.2 {.  sqlite
68d0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
68e0: 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74  MT 0.} 4.do_test
68f0: 20 63 61 70 69 33 63 2d 31 37 2e 33 20 7b 0a 20   capi3c-17.3 {. 
6900: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6910: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e  TMT.} SQLITE_DON
6920: 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  E.do_test capi3c
6930: 2d 31 37 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -17.4 {.  sqlite
6940: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
6950: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
6960: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61  INDEX i2 ON t2(a
6970: 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  )}.  sqlite3_ste
6980: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6990: 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70  _ROW.do_test cap
69a0: 69 33 63 2d 31 37 2e 35 20 7b 0a 20 20 73 71 6c  i3c-17.5 {.  sql
69b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
69c0: 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74  $STMT 0.} 4.do_t
69d0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 36 20  est capi3c-17.6 
69e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
69f0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
6a00: 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70  DONE.do_test cap
6a10: 69 33 63 2d 31 37 2e 37 20 7b 0a 20 20 73 71 6c  i3c-17.7 {.  sql
6a20: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
6a30: 0a 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50  .  db eval {DROP
6a40: 20 49 4e 44 45 58 20 69 32 7d 0a 20 20 73 71 6c   INDEX i2}.  sql
6a50: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6a60: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f  } SQLITE_ROW.do_
6a70: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 38  test capi3c-17.8
6a80: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
6a90: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a  umn_int $STMT 0.
6aa0: 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 4.do_test capi
6ab0: 33 63 2d 31 37 2e 39 20 7b 0a 20 20 73 71 6c 69  3c-17.9 {.  sqli
6ac0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6ad0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f   SQLITE_DONE.do_
6ae0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6af0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  0 {.  sqlite3_fi
6b00: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6b10: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6b20: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6b30: 7b 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74  {SELECT b FROM t
6b40: 31 20 57 48 45 52 45 20 61 3d 3f 7d 20 2d 31 20  1 WHERE a=?} -1 
6b50: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6b60: 62 69 6e 64 5f 69 6e 74 20 24 53 54 4d 54 20 31  bind_int $STMT 1
6b70: 20 32 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   2.  db eval {. 
6b80: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
6b90: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
6ba0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 27  TO t1 VALUES(1,'
6bb0: 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  one');.    INSER
6bc0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6bd0: 28 32 2c 27 74 77 6f 27 29 3b 0a 20 20 20 20 49  (2,'two');.    I
6be0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6bf0: 4c 55 45 53 28 33 2c 27 74 68 72 65 65 27 29 3b  LUES(3,'three');
6c00: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6c10: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 27 66 6f   t1 VALUES(4,'fo
6c20: 75 72 27 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  ur');.  }.  sqli
6c30: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6c40: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74   SQLITE_ROW.do_t
6c50: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 31  est capi3c-17.11
6c60: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
6c70: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30  umn_text $STMT 0
6c80: 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63  .} two.do_test c
6c90: 61 70 69 33 63 2d 31 37 2e 31 32 20 7b 0a 20 20  api3c-17.12 {.  
6ca0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6cb0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
6cc0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6cd0: 31 37 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  17.13 {.  sqlite
6ce0: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
6cf0: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
6d00: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61  INDEX i1 ON t1(a
6d10: 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  )}.  sqlite3_ste
6d20: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6d30: 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70  _ROW.do_test cap
6d40: 69 33 63 2d 31 37 2e 31 34 20 7b 0a 20 20 73 71  i3c-17.14 {.  sq
6d50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6d60: 74 20 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a  t $STMT 0.} two.
6d70: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6d80: 37 2e 31 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.15 {.  sqlite3
6d90: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6da0: 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73  LITE_DONE.do_tes
6db0: 74 20 63 61 70 69 33 63 2d 31 37 2e 31 36 20 7b  t capi3c-17.16 {
6dc0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6dd0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6de0: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d   {DROP INDEX i1}
6df0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6e00: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6e10: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6e20: 63 2d 31 37 2e 31 37 20 7b 0a 20 20 73 71 6c 69  c-17.17 {.  sqli
6e30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
6e40: 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f  $STMT 0.} two.do
6e50: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6e60: 31 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  18 {.  sqlite3_s
6e70: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6e80: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
6e90: 63 61 70 69 33 63 2d 31 37 2e 39 39 20 7b 0a 20  capi3c-17.99 {. 
6ea0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6eb0: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
6ec0: 5f 4f 4b 0a 0a 23 20 4f 6e 20 74 68 65 20 6d 61  _OK..# On the ma
6ed0: 69 6c 69 6e 67 20 6c 69 73 74 20 69 74 20 68 61  iling list it ha
6ee0: 73 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20  s been reported 
6ef0: 74 68 61 74 20 66 69 6e 61 6c 69 7a 69 6e 67 20  that finalizing 
6f00: 61 66 74 65 72 0a 23 20 61 6e 20 53 51 4c 49 54  after.# an SQLIT
6f10: 45 5f 42 55 53 59 20 72 65 74 75 72 6e 20 6c 65  E_BUSY return le
6f20: 61 64 73 20 74 6f 20 61 20 73 65 67 66 61 75 6c  ads to a segfaul
6f30: 74 2e 20 20 48 65 72 65 20 77 65 20 74 65 73 74  t.  Here we test
6f40: 20 74 68 61 74 20 63 61 73 65 2e 0a 23 0a 64 6f   that case..#.do
6f50: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e  _test capi3c-18.
6f60: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  1 {.  sqlite3 db
6f70: 32 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20  2 test.db.  set 
6f80: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6f90: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45  epare_v2 $DB {SE
6fa0: 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d  LECT max(a) FROM
6fb0: 20 74 31 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1} -1 TAIL].  
6fc0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6fd0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
6fe0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6ff0: 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.2 {.  sqlite3_
7000: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
7010: 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63   0.} 4.do_test c
7020: 61 70 69 33 63 2d 31 38 2e 33 20 7b 0a 20 20 73  api3c-18.3 {.  s
7030: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
7040: 4d 54 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 42  MT.  db2 eval {B
7050: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 0a  EGIN EXCLUSIVE}.
7060: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7070: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 42 55  STMT.} SQLITE_BU
7080: 53 59 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  SY.do_test capi3
7090: 63 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74  c-18.4 {.  sqlit
70a0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
70b0: 54 0a 7d 20 53 51 4c 49 54 45 5f 42 55 53 59 0a  T.} SQLITE_BUSY.
70c0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
70d0: 38 2e 35 20 7b 0a 20 20 64 62 32 20 65 76 61 6c  8.5 {.  db2 eval
70e0: 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 64 62 32 20   {COMMIT}.  db2 
70f0: 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 54 69  close.} {}..# Ti
7100: 63 6b 65 74 20 23 32 31 35 38 2e 20 20 54 68 65  cket #2158.  The
7110: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
7120: 77 69 6c 6c 20 73 74 69 6c 6c 20 72 65 74 75 72  will still retur
7130: 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a  n SQLITE_SCHEMA.
7140: 23 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  # if the databas
7150: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
7160: 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 6d   in a way that m
7170: 61 6b 65 73 20 74 68 65 20 73 74 61 74 65 6d 65  akes the stateme
7180: 6e 74 0a 23 20 6e 6f 20 6c 6f 6e 67 65 72 20 76  nt.# no longer v
7190: 61 6c 69 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  alid..#.do_test 
71a0: 63 61 70 69 33 63 2d 31 39 2e 31 20 7b 0a 20 20  capi3c-19.1 {.  
71b0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43  db eval {.     C
71c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78  REATE TABLE t3(x
71d0: 2c 79 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54  ,y);.     INSERT
71e0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
71f0: 31 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20  1,2);.  }.  set 
7200: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7210: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45  epare_v2 $DB {SE
7220: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20  LECT * FROM t3} 
7230: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
7240: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
7250: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
7260: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 32 20 7b  st capi3c-19.2 {
7270: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
7280: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
7290: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  1.do_test capi3c
72a0: 2d 31 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -19.3 {.  sqlite
72b0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
72c0: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
72d0: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 20 7b  st capi3c-19.4 {
72e0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
72f0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
7300: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 33 7d   {DROP TABLE t3}
7310: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7320: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45  $STMT.} SQLITE_E
7330: 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 63 61 70  RROR.do_test cap
7340: 69 33 63 2d 31 39 2e 34 2e 31 20 7b 0a 20 20 73  i3c-19.4.1 {.  s
7350: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44  qlite3_errmsg $D
7360: 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74 61 62  B.} {no such tab
7370: 6c 65 3a 20 74 33 7d 0a 69 66 63 61 70 61 62 6c  le: t3}.ifcapabl
7380: 65 20 64 65 70 72 65 63 61 74 65 64 20 7b 0a 20  e deprecated {. 
7390: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
73a0: 31 39 2e 34 2e 32 20 7b 0a 20 20 20 20 73 71 6c  19.4.2 {.    sql
73b0: 69 74 65 33 5f 65 78 70 69 72 65 64 20 24 53 54  ite3_expired $ST
73c0: 4d 54 0a 20 20 7d 20 31 0a 7d 0a 64 6f 5f 74 65  MT.  } 1.}.do_te
73d0: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 33  st capi3c-19.4.3
73e0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
73f0: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
7400: 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a 69 66  ch table: t3}.if
7410: 63 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74  capable deprecat
7420: 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ed {.  do_test c
7430: 61 70 69 33 63 2d 31 39 2e 34 2e 34 20 7b 0a 20  api3c-19.4.4 {. 
7440: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72     sqlite3_expir
7450: 65 64 20 30 0a 20 20 7d 20 31 0a 7d 0a 64 6f 5f  ed 0.  } 1.}.do_
7460: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 35  test capi3c-19.5
7470: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
7480: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76  et $STMT.  db ev
7490: 61 6c 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45  al {.     CREATE
74a0: 20 54 41 42 4c 45 20 74 33 28 78 2c 79 29 3b 0a   TABLE t3(x,y);.
74b0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
74c0: 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32 29 3b   t3 VALUES(1,2);
74d0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  .  }.  sqlite3_s
74e0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
74f0: 54 45 5f 52 4f 57 0a 69 66 63 61 70 61 62 6c 65  TE_ROW.ifcapable
7500: 20 64 65 70 72 65 63 61 74 65 64 20 7b 0a 20 20   deprecated {.  
7510: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7520: 39 2e 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  9.5.2 {.    sqli
7530: 74 65 33 5f 65 78 70 69 72 65 64 20 24 53 54 4d  te3_expired $STM
7540: 54 0a 20 20 7d 20 30 0a 7d 0a 64 6f 5f 74 65 73  T.  } 0.}.do_tes
7550: 74 20 63 61 70 69 33 63 2d 31 39 2e 36 20 7b 0a  t capi3c-19.6 {.
7560: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
7570: 5f 69 6e 74 20 24 53 54 4d 54 20 31 0a 7d 20 32  _int $STMT 1.} 2
7580: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7590: 31 39 2e 39 39 20 7b 0a 20 20 73 71 6c 69 74 65  19.99 {.  sqlite
75a0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
75b0: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20  .} SQLITE_OK..# 
75c0: 4d 61 6b 65 20 73 75 72 65 20 61 20 63 68 61 6e  Make sure a chan
75d0: 67 65 20 69 6e 20 61 20 73 65 70 61 72 61 74 65  ge in a separate
75e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
75f0: 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 23 20  tion does not.# 
7600: 63 61 75 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  cause an SQLITE_
7610: 53 43 48 45 4d 41 20 72 65 74 75 72 6e 2e 0a 23  SCHEMA return..#
7620: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7630: 32 30 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d  20.1 {.  set STM
7640: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7650: 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43  re_v2 $DB {SELEC
7660: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20  T * FROM t3} -1 
7670: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 20  TAIL].  sqlite3 
7680: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64 62  db2 test.db.  db
7690: 32 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54  2 eval {CREATE T
76a0: 41 42 4c 45 20 74 34 28 78 29 7d 0a 20 20 73 71  ABLE t4(x)}.  sq
76b0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
76c0: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
76d0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e  _test capi3c-20.
76e0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  2 {.  sqlite3_co
76f0: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 31  lumn_int $STMT 1
7700: 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 2.do_test cap
7710: 69 33 63 2d 32 30 2e 33 20 7b 0a 20 20 73 71 6c  i3c-20.3 {.  sql
7720: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7730: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
7740: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e  _test capi3c-20.
7750: 34 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  4 {.  db2 close.
7760: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
7770: 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ze $STMT.} SQLIT
7780: 45 5f 4f 4b 0a 0a 23 20 54 65 73 74 20 74 68 61  E_OK..# Test tha
7790: 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  t sqlite3_step()
77a0: 20 73 65 74 73 20 74 68 65 20 64 61 74 61 62 61   sets the databa
77b0: 73 65 20 65 72 72 6f 72 20 63 6f 64 65 20 63 6f  se error code co
77c0: 72 72 65 63 74 6c 79 2e 0a 23 20 53 65 65 20 74  rrectly..# See t
77d0: 69 63 6b 65 74 20 23 32 34 39 37 2e 0a 23 0a 69  icket #2497..#.i
77e0: 66 63 61 70 61 62 6c 65 20 70 72 6f 67 72 65 73  fcapable progres
77f0: 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  s {.  do_test ca
7800: 70 69 33 63 2d 32 31 2e 31 20 7b 0a 20 20 20 20  pi3c-21.1 {.    
7810: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
7820: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42  3_prepare_v2 $DB
7830: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
7840: 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20  t3} -1 TAIL].   
7850: 20 64 62 20 70 72 6f 67 72 65 73 73 20 35 20 22   db progress 5 "
7860: 65 78 70 72 20 31 22 0a 20 20 20 20 73 71 6c 69  expr 1".    sqli
7870: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
7880: 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52   } {SQLITE_INTER
7890: 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RUPT}.  do_test 
78a0: 63 61 70 69 33 63 2d 32 31 2e 32 20 7b 0a 20 20  capi3c-21.2 {.  
78b0: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
78c0: 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20  ed_errcode $DB. 
78d0: 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52   } {SQLITE_INTER
78e0: 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RUPT}.  do_test 
78f0: 63 61 70 69 33 63 2d 32 31 2e 33 20 7b 0a 20 20  capi3c-21.3 {.  
7900: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
7910: 7a 65 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51  ze $STMT.  } {SQ
7920: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a  LITE_INTERRUPT}.
7930: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
7940: 2d 32 31 2e 34 20 7b 0a 20 20 20 20 73 65 74 20  -21.4 {.    set 
7950: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7960: 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c 45 43  epare $DB {SELEC
7970: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20  T * FROM t3} -1 
7980: 54 41 49 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f  TAIL].    db pro
7990: 67 72 65 73 73 20 35 20 22 65 78 70 72 20 31 22  gress 5 "expr 1"
79a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
79b0: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
79c0: 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f  ITE_ERROR}.  do_
79d0: 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 35  test capi3c-21.5
79e0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
79f0: 72 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b  rrcode $DB.  } {
7a00: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20  SQLITE_ERROR}.  
7a10: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7a20: 31 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.6 {.    sqlite
7a30: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7a40: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7a50: 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73  ERRUPT}.  do_tes
7a60: 74 20 63 61 70 69 33 63 2d 32 31 2e 37 20 7b 0a  t capi3c-21.7 {.
7a70: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63      sqlite3_errc
7a80: 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c  ode $DB.  } {SQL
7a90: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
7aa0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
7ab0: 32 31 2e 38 20 7b 0a 20 20 20 20 73 71 6c 69 74  21.8 {.    sqlit
7ac0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
7ad0: 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c  ode $DB.  } {SQL
7ae0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 7d  ITE_INTERRUPT}.}
7af0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 73 71  ..# Make sure sq
7b00: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
7b10: 6f 72 5f 63 6f 64 65 28 29 20 72 65 74 75 72 6e  or_code() return
7b20: 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 65 72  s the correct er
7b30: 72 6f 72 20 63 6f 64 65 2e 0a 23 20 53 65 65 20  ror code..# See 
7b40: 74 69 63 6b 65 74 20 23 32 39 34 30 0a 23 0a 64  ticket #2940.#.d
7b50: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 32  o_test capi3c-22
7b60: 2e 31 20 7b 0a 20 20 64 62 20 70 72 6f 67 72 65  .1 {.  db progre
7b70: 73 73 20 30 20 7b 7d 0a 20 20 73 65 74 20 53 54  ss 0 {}.  set ST
7b80: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
7b90: 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43  are_v2 db {SELEC
7ba0: 54 20 74 65 73 74 5f 65 72 72 6f 72 28 27 74 68  T test_error('th
7bb0: 65 20 6d 65 73 73 61 67 65 27 2c 33 29 7d 20 2d  e message',3)} -
7bc0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
7bd0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
7be0: 53 51 4c 49 54 45 5f 50 45 52 4d 7d 0a 73 71 6c  SQLITE_PERM}.sql
7bf0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
7c00: 54 4d 54 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  TMT.do_test capi
7c10: 33 63 2d 32 32 2e 32 20 7b 0a 20 20 73 65 74 20  3c-22.2 {.  set 
7c20: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7c30: 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c  epare_v2 db {SEL
7c40: 45 43 54 20 74 65 73 74 5f 65 72 72 6f 72 28 27  ECT test_error('
7c50: 74 68 65 20 6d 65 73 73 61 67 65 27 2c 34 29 7d  the message',4)}
7c60: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
7c70: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
7c80: 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52 54 7d 0a   {SQLITE_ABORT}.
7c90: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7ca0: 20 24 53 54 4d 54 0a 64 6f 5f 74 65 73 74 20 63   $STMT.do_test c
7cb0: 61 70 69 33 63 2d 32 32 2e 33 20 7b 0a 20 20 73  api3c-22.3 {.  s
7cc0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
7cd0: 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 7b  _prepare_v2 db {
7ce0: 53 45 4c 45 43 54 20 74 65 73 74 5f 65 72 72 6f  SELECT test_erro
7cf0: 72 28 27 74 68 65 20 6d 65 73 73 61 67 65 27 2c  r('the message',
7d00: 31 36 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20  16)} -1 TAIL].  
7d10: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7d20: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 4d 50  MT.} {SQLITE_EMP
7d30: 54 59 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61  TY}.sqlite3_fina
7d40: 6c 69 7a 65 20 24 53 54 4d 54 0a 0a 23 20 46 6f  lize $STMT..# Fo
7d50: 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e  r a multi-column
7d60: 20 72 65 73 75 6c 74 20 73 65 74 20 77 68 65 72   result set wher
7d70: 65 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  e the same table
7d80: 20 63 6f 6c 75 6d 6e 20 69 73 20 72 65 70 65 61   column is repea
7d90: 74 65 64 0a 23 20 69 6e 20 6d 75 6c 74 69 70 6c  ted.# in multipl
7da0: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
7db0: 20 6f 75 74 70 75 74 2c 20 76 65 72 69 66 79 20   output, verify 
7dc0: 74 68 61 74 20 64 6f 69 6e 67 20 61 20 55 54 46  that doing a UTF
7dd0: 2d 38 20 74 6f 20 55 54 46 2d 31 36 0a 23 20 63  -8 to UTF-16.# c
7de0: 6f 6e 76 65 72 73 69 6f 6e 20 28 6f 72 20 76 69  onversion (or vi
7df0: 63 65 20 76 65 72 73 61 29 20 6f 6e 20 6f 6e 65  ce versa) on one
7e00: 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f 74   column does not
7e10: 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
7e20: 65 20 6f 66 0a 23 20 74 68 65 20 73 65 63 6f 6e  e of.# the secon
7e30: 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 75  d..#.ifcapable u
7e40: 74 66 31 36 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tf16 {.  do_test
7e50: 20 63 61 70 69 33 63 2d 32 33 2e 31 20 7b 0a 20   capi3c-23.1 {. 
7e60: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
7e70: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
7e80: 64 62 20 7b 53 45 4c 45 43 54 20 62 2c 62 2c 62  db {SELECT b,b,b
7e90: 2c 62 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54  ,b FROM t1} -1 T
7ea0: 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33  AIL].    sqlite3
7eb0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20  _step $STMT.  } 
7ec0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 20 20 64  {SQLITE_ROW}.  d
7ed0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 33  o_test capi3c-23
7ee0: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
7ef0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24  _column_text16 $
7f00: 53 54 4d 54 20 30 0a 20 20 20 20 73 71 6c 69 74  STMT 0.    sqlit
7f10: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
7f20: 53 54 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e 65 7d  STMT 1.  } {one}
7f30: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7f40: 63 2d 32 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c  c-23.3 {.    sql
7f50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
7f60: 31 36 20 24 53 54 4d 54 20 32 0a 20 20 20 20 73  16 $STMT 2.    s
7f70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
7f80: 78 74 20 24 53 54 4d 54 20 33 0a 20 20 7d 20 7b  xt $STMT 3.  } {
7f90: 6f 6e 65 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  one}.  sqlite3_f
7fa0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
7fb0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7fc0: 33 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 53 54  3.4 {.    set ST
7fd0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
7fe0: 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43  are_v2 db {SELEC
7ff0: 54 20 62 7c 7c 27 78 27 2c 62 2c 62 2c 62 20 46  T b||'x',b,b,b F
8000: 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41 49 4c 5d  ROM t1} -1 TAIL]
8010: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
8020: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
8030: 49 54 45 5f 52 4f 57 7d 0a 20 20 64 6f 5f 74 65  ITE_ROW}.  do_te
8040: 73 74 20 63 61 70 69 33 63 2d 32 33 2e 35 20 7b  st capi3c-23.5 {
8050: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .    sqlite3_col
8060: 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54  umn_text16 $STMT
8070: 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   0.    sqlite3_c
8080: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
8090: 20 31 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 64   1.  } {one}.  d
80a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 33  o_test capi3c-23
80b0: 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .6 {.    sqlite3
80c0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24  _column_text16 $
80d0: 53 54 4d 54 20 32 0a 20 20 20 20 73 71 6c 69 74  STMT 2.    sqlit
80e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
80f0: 53 54 4d 54 20 33 0a 20 20 7d 20 7b 6f 6e 65 7d  STMT 3.  } {one}
8100: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
8110: 69 7a 65 20 24 53 54 4d 54 0a 7d 0a 0a 23 20 54  ize $STMT.}..# T
8120: 65 73 74 20 64 65 63 6c 74 79 70 65 20 6f 6e 20  est decltype on 
8130: 73 6f 6d 65 20 53 45 4c 45 43 54 20 73 74 61 74  some SELECT stat
8140: 65 6d 65 6e 74 73 20 74 68 61 74 20 63 6f 6e 74  ements that cont
8150: 61 69 6e 20 73 75 62 2d 73 65 6c 65 63 74 73 2e  ain sub-selects.
8160: 0a 23 0a 70 72 6f 63 20 64 65 63 6c 74 79 70 65  .#.proc decltype
8170: 20 7b 7a 53 71 6c 7d 20 7b 0a 20 20 73 65 74 20   {zSql} {.  set 
8180: 72 65 74 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  ret [list].  set
8190: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
81a0: 72 65 70 61 72 65 5f 76 32 20 64 62 20 24 7a 53  repare_v2 db $zS
81b0: 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 66 6f  ql -1 TAIL].  fo
81c0: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
81d0: 3c 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  < [sqlite3_colum
81e0: 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 7d 20  n_count $STMT]} 
81f0: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c  {incr i} {.    l
8200: 61 70 70 65 6e 64 20 72 65 74 20 5b 73 71 6c 69  append ret [sqli
8210: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
8220: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20  ype $STMT $i].  
8230: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  }.  sqlite3_fina
8240: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 72 65 74  lize $STMT.  ret
8250: 75 72 6e 20 24 72 65 74 0a 7d 0a 64 6f 5f 74 65  urn $ret.}.do_te
8260: 73 74 20 63 61 70 69 33 63 2d 32 34 2e 31 20 7b  st capi3c-24.1 {
8270: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45  .  execsql { CRE
8280: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 49  ATE TABLE t5(a I
8290: 4e 54 45 47 45 52 2c 20 62 20 53 54 52 49 4e 47  NTEGER, b STRING
82a0: 2c 20 63 20 44 41 54 45 54 49 4d 45 29 20 7d 0a  , c DATETIME) }.
82b0: 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45    decltype {SELE
82c0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 7d 0a 7d 20  CT * FROM t5}.} 
82d0: 7b 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 20  {INTEGER STRING 
82e0: 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73  DATETIME}.do_tes
82f0: 74 20 63 61 70 69 33 63 2d 32 34 2e 32 20 7b 0a  t capi3c-24.2 {.
8300: 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45    decltype {SELE
8310: 43 54 20 28 53 45 4c 45 43 54 20 63 29 20 46 52  CT (SELECT c) FR
8320: 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54 45 54 49  OM t5}.} {DATETI
8330: 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ME}.do_test capi
8340: 33 63 2d 32 34 2e 33 20 7b 0a 20 20 64 65 63 6c  3c-24.3 {.  decl
8350: 74 79 70 65 20 7b 53 45 4c 45 43 54 20 28 53 45  type {SELECT (SE
8360: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c  LECT * FROM (SEL
8370: 45 43 54 20 63 29 29 20 46 52 4f 4d 20 74 35 7d  ECT c)) FROM t5}
8380: 0a 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f  .} {DATETIME}.do
8390: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e  _test capi3c-24.
83a0: 34 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b  4 {.  decltype {
83b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53  SELECT * FROM (S
83c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20  ELECT * FROM t5 
83d0: 4f 52 44 45 52 20 42 59 20 63 20 4c 49 4d 49 54  ORDER BY c LIMIT
83e0: 20 31 29 20 4f 52 44 45 52 20 42 59 20 62 7d 0a   1) ORDER BY b}.
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 35 20  est capi3c-24.5 
8420: 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 0a 20  {.  decltype {. 
8430: 20 20 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43     SELECT (SELEC
8440: 54 20 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T x FROM (SELECT
8450: 20 63 20 41 53 20 78 29 29 20 0a 20 20 20 20 46   c AS x)) .    F
8460: 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52  ROM (SELECT * FR
8470: 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59 20 63  OM t5 ORDER BY c
8480: 20 4c 49 4d 49 54 20 31 29 20 4f 52 44 45 52 20   LIMIT 1) ORDER 
8490: 42 59 20 62 0a 20 20 7d 0a 7d 20 7b 44 41 54 45  BY b.  }.} {DATE
84a0: 54 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  TIME}.do_test ca
84b0: 70 69 33 63 2d 32 34 2e 33 20 7b 0a 20 20 64 65  pi3c-24.3 {.  de
84c0: 63 6c 74 79 70 65 20 7b 53 45 4c 45 43 54 20 28  cltype {SELECT (
84d0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53  SELECT x FROM (S
84e0: 45 4c 45 43 54 20 74 35 2e 61 20 41 53 20 78 29  ELECT t5.a AS x)
84f0: 29 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b 49 4e  ) FROM t5}.} {IN
8500: 54 45 47 45 52 7d 0a 0a 66 69 6e 69 73 68 5f 74  TEGER}..finish_t
8510: 65 73 74 0a                                      est.