/ Hex Artifact Content
Login

Artifact 01f197d73f4d4d66316483662f475cab7ab5bd60:


0000: 23 20 32 30 30 36 20 4e 6f 76 65 6d 62 65 72 20  # 2006 November 
0010: 30 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  08.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 0a 23 0a 23 20 54 68 69 73 20  ary.  .#.# This 
01b0: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
01c0: 20 63 61 70 69 33 2e 74 65 73 74 20 66 69 6c 65   capi3.test file
01d0: 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
01e0: 64 61 70 74 65 64 20 74 6f 0a 23 20 74 65 73 74  dapted to.# test
01f0: 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 33   the new sqlite3
0200: 5f 70 72 65 70 61 72 65 5f 76 32 20 69 6e 74 65  _prepare_v2 inte
0210: 72 66 61 63 65 2e 0a 23 0a 23 20 24 49 64 3a 20  rface..#.# $Id: 
0220: 63 61 70 69 33 63 2e 74 65 73 74 2c 76 20 31 2e  capi3c.test,v 1.
0230: 32 33 20 32 30 30 39 2f 30 37 2f 32 32 20 30 37  23 2009/07/22 07
0240: 3a 32 37 3a 35 37 20 64 61 6e 69 65 6c 6b 31 39  :27:57 danielk19
0250: 37 37 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20  77 Exp $.#..set 
0260: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0270: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0280: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0290: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 44 6f 20 6e  ster.tcl..# Do n
02a0: 6f 74 20 75 73 65 20 61 20 63 6f 64 65 63 20 66  ot use a codec f
02b0: 6f 72 20 74 65 73 74 73 20 69 6e 20 74 68 69 73  or tests in this
02c0: 20 66 69 6c 65 2c 20 61 73 20 74 68 65 20 64 61   file, as the da
02d0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 23  tabase file is.#
02e0: 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 64 69 72   manipulated dir
02f0: 65 63 74 6c 79 20 75 73 69 6e 67 20 74 63 6c 20  ectly using tcl 
0300: 73 63 72 69 70 74 73 20 28 75 73 69 6e 67 20 74  scripts (using t
0310: 68 65 20 5b 68 65 78 69 6f 5f 77 72 69 74 65 5d  he [hexio_write]
0320: 20 63 6f 6d 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f   command)..#.do_
0330: 6e 6f 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 23  not_use_codec..#
0340: 20 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d   Return the UTF-
0350: 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
0360: 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  n of the supplie
0370: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 24  d UTF-8 string $
0380: 73 74 72 2e 0a 23 20 49 66 20 24 6e 74 20 69 73  str..# If $nt is
0390: 20 74 72 75 65 2c 20 61 70 70 65 6e 64 20 74 77   true, append tw
03a0: 6f 20 30 78 30 30 20 62 79 74 65 73 20 61 73 20  o 0x00 bytes as 
03b0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72  a nul terminator
03c0: 2e 0a 70 72 6f 63 20 75 74 66 31 36 20 7b 73 74  ..proc utf16 {st
03d0: 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20 73 65  r {nt 1}} {.  se
03e0: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
03f0: 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64 65 20  nvertto unicode 
0400: 24 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e 74 7d  $str].  if {$nt}
0410: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 72 20   {.    append r 
0420: 22 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d 0a 20  "\x00\x00".  }. 
0430: 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20   return $r.}..# 
0440: 52 65 74 75 72 6e 20 74 68 65 20 55 54 46 2d 38  Return the UTF-8
0450: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
0460: 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
0470: 55 54 46 2d 31 36 20 73 74 72 69 6e 67 20 24 73  UTF-16 string $s
0480: 74 72 2e 20 0a 70 72 6f 63 20 75 74 66 38 20 7b  tr. .proc utf8 {
0490: 73 74 72 7d 20 7b 0a 20 20 23 20 49 66 20 24 73  str} {.  # If $s
04a0: 74 72 20 65 6e 64 73 20 69 6e 20 74 77 6f 20 30  tr ends in two 0
04b0: 78 30 30 20 30 78 30 30 20 62 79 74 65 73 2c 20  x00 0x00 bytes, 
04c0: 6b 6e 6f 63 6b 20 74 68 65 73 65 20 6f 66 66 20  knock these off 
04d0: 62 65 66 6f 72 65 0a 20 20 23 20 63 6f 6e 76 65  before.  # conve
04e0: 72 74 69 6e 67 20 74 6f 20 55 54 46 2d 38 20 75  rting to UTF-8 u
04f0: 73 69 6e 67 20 54 43 4c 2e 0a 20 20 62 69 6e 61  sing TCL..  bina
0500: 72 79 20 73 63 61 6e 20 24 73 74 72 20 5c 63 2a  ry scan $str \c*
0510: 20 76 61 6c 73 0a 20 20 69 66 20 7b 5b 6c 69 6e   vals.  if {[lin
0520: 64 65 78 20 24 76 61 6c 73 20 65 6e 64 5d 3d 3d  dex $vals end]==
0530: 30 20 26 26 20 5b 6c 69 6e 64 65 78 20 24 76 61  0 && [lindex $va
0540: 6c 73 20 65 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a  ls end-1]==0} {.
0550: 20 20 20 20 73 65 74 20 73 74 72 20 5b 62 69 6e      set str [bin
0560: 61 72 79 20 66 6f 72 6d 61 74 20 5c 63 2a 20 5b  ary format \c* [
0570: 6c 72 61 6e 67 65 20 24 76 61 6c 73 20 30 20 65  lrange $vals 0 e
0580: 6e 64 2d 32 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65  nd-2]].  }..  se
0590: 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f  t r [encoding co
05a0: 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64  nvertfrom unicod
05b0: 65 20 24 73 74 72 5d 0a 20 20 72 65 74 75 72 6e  e $str].  return
05c0: 20 24 72 0a 7d 0a 0a 23 20 54 68 65 73 65 20 74   $r.}..# These t
05d0: 65 73 74 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  ests complement 
05e0: 74 68 6f 73 65 20 69 6e 20 63 61 70 69 32 2e 74  those in capi2.t
05f0: 65 73 74 2e 20 54 68 65 79 20 61 72 65 20 6f 72  est. They are or
0600: 67 61 6e 69 7a 65 64 0a 23 20 61 73 20 66 6f 6c  ganized.# as fol
0610: 6c 6f 77 73 3a 0a 23 0a 23 20 63 61 70 69 33 63  lows:.#.# capi3c
0620: 2d 31 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -1.*: Test sqlit
0630: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 0a 23  e3_prepare_v2 .#
0640: 20 63 61 70 69 33 63 2d 32 2e 2a 3a 20 54 65 73   capi3c-2.*: Tes
0650: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
0660: 65 31 36 5f 76 32 20 0a 23 20 63 61 70 69 33 63  e16_v2 .# capi3c
0670: 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -3.*: Test sqlit
0680: 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69 33 63  e3_open.# capi3c
0690: 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74  -4.*: Test sqlit
06a0: 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61 70 69  e3_open16.# capi
06b0: 33 63 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68 65  3c-5.*: Test the
06c0: 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74 65 33   various sqlite3
06d0: 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73 0a 23  _result_* APIs.#
06e0: 20 63 61 70 69 33 63 2d 36 2e 2a 3a 20 54 65 73   capi3c-6.*: Tes
06f0: 74 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 63  t that sqlite3_c
0700: 6c 6f 73 65 20 66 61 69 6c 73 20 69 66 20 74 68  lose fails if th
0710: 65 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64  ere are outstand
0720: 69 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65 74 20  ing VMs..#..set 
0730: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
0740: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
0750: 62 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  b]..do_test capi
0760: 33 63 2d 31 2e 30 20 7b 0a 20 20 73 71 6c 69 74  3c-1.0 {.  sqlit
0770: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
0780: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
0790: 74 20 63 61 70 69 33 63 2d 31 2e 31 20 7b 0a 20  t capi3c-1.1 {. 
07a0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
07b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
07c0: 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  B {SELECT name F
07d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
07e0: 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  r} -1 TAIL].  sq
07f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0800: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0810: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
0820: 69 33 63 2d 31 2e 32 2e 31 20 7b 0a 20 20 73 71  i3c-1.2.1 {.  sq
0830: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44  lite3_errcode $D
0840: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
0850: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
0860: 2e 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  .2.2 {.  sqlite3
0870: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
0880: 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f  e $DB.} {SQLITE_
0890: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
08a0: 33 63 2d 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74  3c-1.3 {.  sqlit
08b0: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
08c0: 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64  {not an error}.d
08d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 2e  o_test capi3c-1.
08e0: 34 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53  4 {.  set sql {S
08f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0900: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45  sqlite_master;SE
0910: 4c 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53  LECT 10}.  set S
0920: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
0930: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
0940: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
0950: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
0960: 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20  MT.  set TAIL.} 
0970: 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74  {SELECT 10}.do_t
0980: 65 73 74 20 63 61 70 69 33 63 2d 31 2e 35 20 7b  est capi3c-1.5 {
0990: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
09a0: 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20 73 71  CT namex FROM sq
09b0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 63  lite_master}.  c
09c0: 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20 53  atch {.    set S
09d0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
09e0: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
09f0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20   -1 TAIL].  }.} 
0a00: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
0a10: 33 63 2d 31 2e 36 2e 31 20 7b 0a 20 20 73 71 6c  3c-1.6.1 {.  sql
0a20: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
0a30: 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52  .} {SQLITE_ERROR
0a40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
0a50: 2d 31 2e 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74  -1.6.2 {.  sqlit
0a60: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
0a70: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
0a80: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
0a90: 20 63 61 70 69 33 63 2d 31 2e 37 20 7b 0a 20 20   capi3c-1.7 {.  
0aa0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
0ab0: 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 63 6f  DB.} {no such co
0ac0: 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 0a 69  lumn: namex}...i
0ad0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
0ae0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
0af0: 69 33 63 2d 32 2e 31 20 7b 0a 20 20 20 20 73 65  i3c-2.1 {.    se
0b00: 74 20 73 71 6c 31 36 20 5b 75 74 66 31 36 20 7b  t sql16 [utf16 {
0b10: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0b20: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0b30: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
0b40: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0b50: 5f 76 32 20 20 24 44 42 20 24 73 71 6c 31 36 20  _v2  $DB $sql16 
0b60: 2d 31 20 3a 3a 54 41 49 4c 5d 0a 20 20 20 20 73  -1 ::TAIL].    s
0b70: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0b80: 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24  $STMT.    utf8 $
0b90: 3a 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d 0a 20 20  ::TAIL.  } {}.  
0ba0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0bb0: 2e 32 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c  .2 {.    set sql
0bc0: 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20   [utf16 {SELECT 
0bd0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0be0: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0bf0: 30 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54  0}].    set STMT
0c00: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0c10: 65 31 36 5f 76 32 20 20 24 44 42 20 24 73 71 6c  e16_v2  $DB $sql
0c20: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
0c30: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0c40: 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24 54  STMT.    utf8 $T
0c50: 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43 54 20  AIL.  } {SELECT 
0c60: 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  10}.  do_test ca
0c70: 70 69 33 63 2d 32 2e 33 20 7b 0a 20 20 20 20 73  pi3c-2.3 {.    s
0c80: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0c90: 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d  ELECT namex FROM
0ca0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0cb0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
0cc0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0cd0: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
0ce0: 32 20 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  2  $DB $sql -1 T
0cf0: 41 49 4c 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  AIL].    }.  } {
0d00: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  1}.  do_test cap
0d10: 69 33 63 2d 32 2e 34 2e 31 20 7b 0a 20 20 20 20  i3c-2.4.1 {.    
0d20: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
0d30: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
0d40: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
0d50: 20 63 61 70 69 33 63 2d 32 2e 34 2e 32 20 7b 0a   capi3c-2.4.2 {.
0d60: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
0d70: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
0d80: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
0d90: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
0da0: 70 69 33 63 2d 32 2e 35 20 7b 0a 20 20 20 20 73  pi3c-2.5 {.    s
0db0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44  qlite3_errmsg $D
0dc0: 42 0a 20 20 7d 20 7b 6e 6f 20 73 75 63 68 20 63  B.  } {no such c
0dd0: 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 20  olumn: namex}.. 
0de0: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
0df0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 20 20  a_pragmas {.    
0e00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0e10: 2e 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .6 {.      execs
0e20: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0e30: 20 74 61 62 6c 65 6e 61 6d 65 28 78 29 7d 0a 20   tablename(x)}. 
0e40: 20 20 20 20 20 73 65 74 20 73 71 6c 31 36 20 5b       set sql16 [
0e50: 75 74 66 31 36 20 7b 50 52 41 47 4d 41 20 74 61  utf16 {PRAGMA ta
0e60: 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62 6c 65 4e  ble_info("TableN
0e70: 61 6d 65 22 29 7d 5d 0a 20 20 20 20 20 20 73 65  ame")}].      se
0e80: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0e90: 70 72 65 70 61 72 65 31 36 5f 76 32 20 20 24 44  prepare16_v2  $D
0ea0: 42 20 24 73 71 6c 31 36 20 2d 31 20 54 41 49 4c  B $sql16 -1 TAIL
0eb0: 5d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ].      sqlite3_
0ec0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20 20 7d  step $STMT.    }
0ed0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 20 20   SQLITE_ROW.    
0ee0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
0ef0: 2e 37 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  .7 {.      sqlit
0f00: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
0f10: 20 20 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a    } SQLITE_DONE.
0f20: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0f30: 33 63 2d 32 2e 38 20 7b 0a 20 20 20 20 20 20 73  3c-2.8 {.      s
0f40: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0f50: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
0f60: 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d 20 3b 23 20  TE_OK.  }..} ;# 
0f70: 65 6e 64 69 66 20 75 74 66 31 36 0a 0a 23 20 72  endif utf16..# r
0f80: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
0f90: 65 6e 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  en sqlite3_open_
0fa0: 6f 6c 64 0a 23 20 70 72 6f 63 20 73 71 6c 69 74  old.# proc sqlit
0fb0: 65 33 5f 6f 70 65 6e 20 7b 66 6e 61 6d 65 20 6f  e3_open {fname o
0fc0: 70 74 69 6f 6e 73 7d 20 7b 73 71 6c 69 74 65 33  ptions} {sqlite3
0fd0: 5f 6f 70 65 6e 5f 6e 65 77 20 24 66 6e 61 6d 65  _open_new $fname
0fe0: 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a 64 6f 5f 74   $options}..do_t
0ff0: 65 73 74 20 63 61 70 69 33 63 2d 33 2e 31 20 7b  est capi3c-3.1 {
1000: 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69  .  set db2 [sqli
1010: 74 65 33 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62  te3_open test.db
1020: 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65   {}].  sqlite3_e
1030: 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53  rrcode $db2.} {S
1040: 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20  QLITE_OK}.# FIX 
1050: 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20  ME: Should test 
1060: 74 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f  the db handle wo
1070: 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70  rks..do_test cap
1080: 69 33 63 2d 33 2e 32 20 7b 0a 20 20 73 71 6c 69  i3c-3.2 {.  sqli
1090: 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d  te3_close $db2.}
10a0: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
10b0: 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 33 20  test capi3c-3.3 
10c0: 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20  {.  catch {.    
10d0: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
10e0: 5f 6f 70 65 6e 20 2f 62 6f 67 75 73 2f 70 61 74  _open /bogus/pat
10f0: 68 2f 74 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20  h/test.db {}].  
1100: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  }.  sqlite3_errc
1110: 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ode $db2.} {SQLI
1120: 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f  TE_CANTOPEN}.do_
1130: 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 34 20  test capi3c-3.4 
1140: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
1150: 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e 61 62 6c  sg $db2.} {unabl
1160: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
1170: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
1180: 20 63 61 70 69 33 63 2d 33 2e 35 20 7b 0a 20 20   capi3c-3.5 {.  
1190: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
11a0: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
11b0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
11c0: 33 2e 36 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20  3.6.1-misuse {. 
11d0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
11e0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4d 49  db2.} {SQLITE_MI
11f0: 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  SUSE}.do_test ca
1200: 70 69 33 63 2d 33 2e 36 2e 32 2d 6d 69 73 75 73  pi3c-3.6.2-misus
1210: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  e {.  sqlite3_er
1220: 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 6c 69 62  rmsg $db2.} {lib
1230: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
1240: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
1250: 6e 63 65 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b  nce}.ifcapable {
1260: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
1270: 73 74 20 63 61 70 69 33 63 2d 33 2e 36 2e 33 2d  st capi3c-3.6.3-
1280: 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 75 74 66  misuse {.    utf
1290: 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  8 [sqlite3_errms
12a0: 67 31 36 20 24 64 62 32 5d 0a 20 20 7d 20 7b 6c  g16 $db2].  } {l
12b0: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63  ibrary routine c
12c0: 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71  alled out of seq
12d0: 75 65 6e 63 65 7d 0a 7d 0a 0a 23 20 72 65 6e 61  uence}.}..# rena
12e0: 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20  me sqlite3_open 
12f0: 22 22 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69  "".# rename sqli
1300: 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71 6c  te3_open_old sql
1310: 69 74 65 33 5f 6f 70 65 6e 0a 0a 69 66 63 61 70  ite3_open..ifcap
1320: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 64  able {utf16} {.d
1330: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e  o_test capi3c-4.
1340: 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20 5b 73  1 {.  set db2 [s
1350: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75  qlite3_open16 [u
1360: 74 66 31 36 20 74 65 73 74 2e 64 62 5d 20 7b 7d  tf16 test.db] {}
1370: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  ].  sqlite3_errc
1380: 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ode $db2.} {SQLI
1390: 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d 45 3a  TE_OK}.# FIX ME:
13a0: 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74 68 65   Should test the
13b0: 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72 6b 73   db handle works
13c0: 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
13d0: 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -4.2 {.  sqlite3
13e0: 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53  _close $db2.} {S
13f0: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
1400: 74 20 63 61 70 69 33 63 2d 34 2e 33 20 7b 0a 20  t capi3c-4.3 {. 
1410: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
1420: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
1430: 65 6e 31 36 20 5b 75 74 66 31 36 20 2f 62 6f 67  en16 [utf16 /bog
1440: 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 5d  us/path/test.db]
1450: 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74   {}].  }.  sqlit
1460: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
1470: 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  } {SQLITE_CANTOP
1480: 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  EN}.do_test capi
1490: 33 63 2d 34 2e 34 20 7b 0a 20 20 75 74 66 38 20  3c-4.4 {.  utf8 
14a0: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
14b0: 36 20 24 64 62 32 5d 0a 7d 20 7b 75 6e 61 62 6c  6 $db2].} {unabl
14c0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
14d0: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
14e0: 20 63 61 70 69 33 63 2d 34 2e 35 20 7b 0a 20 20   capi3c-4.5 {.  
14f0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
1500: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1510: 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a 23 20 54  .} ;# utf16..# T
1520: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
1530: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
1540: 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c 73  lowing API calls
1550: 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  :.#.# sqlite3_co
1560: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20 73 71 6c  lumn_count.# sql
1570: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1580: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1590: 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74  n_name16.# sqlit
15a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
15b0: 70 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  pe.# sqlite3_col
15c0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 0a 23  umn_decltype16.#
15d0: 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f  .# $STMT is a co
15e0: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
15f0: 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61  ment. $test is a
1600: 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65   prefix.# to use
1610: 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20   for test names 
1620: 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63  within this proc
1630: 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69  . $names is a li
1640: 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75  st.# of the colu
1650: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68  mn names that sh
1660: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
1670: 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65   by $STMT..# $de
1680: 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69 73  cltypes is a lis
1690: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
16a0: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f  aration types fo
16b0: 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61  r $STMT..#.# Exa
16c0: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
16d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
16e0: 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 31  are_v2 "SELECT 1
16f0: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
1700: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
1710: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
1720: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
1730: 72 6f 63 20 63 68 65 63 6b 5f 68 65 61 64 65 72  roc check_header
1740: 20 7b 53 54 4d 54 20 74 65 73 74 20 6e 61 6d 65   {STMT test name
1750: 73 20 64 65 63 6c 74 79 70 65 73 7d 20 7b 0a 0a  s decltypes} {..
1760: 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75    # Use the retu
1770: 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  rn value of sqli
1780: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1790: 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20  () to build.  # 
17a0: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
17b0: 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49   indexes. i.e. I
17c0: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
17d0: 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c  _count.  # is 3,
17e0: 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   build the list 
17f0: 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a  {0 1 2}..  set :
1800: 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  :idxlist [list].
1810: 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20    set ::numcols 
1820: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1830: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
1840: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
1850: 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b   < $::numcols} {
1860: 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64  incr i} {lappend
1870: 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a   ::idxlist $i}..
1880: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1890: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
18a0: 65 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20  est $test.1 {.  
18b0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
18c0: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
18d0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
18e0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
18f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1900: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1910: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1920: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1930: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1940: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1950: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1960: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1970: 73 74 2e 32 20 7b 0a 20 20 20 20 20 20 73 65 74  st.2 {.      set
1980: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1990: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
19a0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
19b0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
19c0: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
19d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
19e0: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
19f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1a00: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1a10: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1a20: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1a30: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1a40: 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 20 20 73   $test.3 {.    s
1a50: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1a60: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1a70: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1a80: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1a90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1aa0: 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20  me $STMT $i]} . 
1ab0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1ac0: 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23  .  } $names..  #
1ad0: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1ae0: 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61   UTF-16.  ifcapa
1af0: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
1b00: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
1b10: 34 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  4 {.      set cn
1b20: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1b30: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
1b40: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
1b50: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
1b60: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
1b70: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
1b80: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
1b90: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e    }.      set cn
1ba0: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e  amelist.    } $n
1bb0: 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f  ames.  }..  # Co
1bc0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54  lumn names in UT
1bd0: 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74  F-8.  do_test $t
1be0: 65 73 74 2e 35 20 7b 0a 20 20 20 20 73 65 74 20  est.5 {.    set 
1bf0: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
1c00: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24  .    foreach i $
1c10: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
1c20: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69   cnamelist [sqli
1c30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1c40: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a  ype $STMT $i]} .
1c50: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1c60: 74 0a 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73  t.  } $decltypes
1c70: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 64 65 63  ..  # Column dec
1c80: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69  laration types i
1c90: 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70  n UTF-16.  ifcap
1ca0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1cb0: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1cc0: 2e 36 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  .6 {.      set c
1cd0: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
1ce0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
1cf0: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
1d00: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
1d10: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
1d20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1d30: 79 70 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ype16 $STMT $i]]
1d40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1d50: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
1d60: 20 7d 20 24 64 65 63 6c 74 79 70 65 73 0a 20 20   } $decltypes.  
1d70: 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20 73 6f 6d  }...  # Test som
1d80: 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 63  e out of range c
1d90: 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20 69 66 63  onditions:.  ifc
1da0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1db0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1dc0: 73 74 2e 37 20 7b 0a 20 20 20 20 20 20 6c 69 73  st.7 {.      lis
1dd0: 74 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  t \.        [sql
1de0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1df0: 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20   $STMT -1] \.   
1e00: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
1e10: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d  lumn_name16 $STM
1e20: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1e30: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1e40: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 2d  decltype $STMT -
1e50: 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  1] \.        [sq
1e60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1e70: 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 2d 31  ltype16 $STMT -1
1e80: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1e90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1ea0: 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d   $STMT $numcols]
1eb0: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
1ec0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
1ed0: 36 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73  6 $STMT $numcols
1ee0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1ef0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1f00: 74 79 70 65 20 24 53 54 4d 54 20 24 6e 75 6d 63  type $STMT $numc
1f10: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
1f20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1f30: 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20  ecltype16 $STMT 
1f40: 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20 20 7d 20  $numcols].    } 
1f50: 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20  {{} {} {} {} {} 
1f60: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 0a 7d 20  {} {} {}}.  }.} 
1f70: 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73  ..# This proc is
1f80: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
1f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20  e following API 
1fa0: 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74  calls:.#.# sqlit
1fb0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
1fc0: 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f  _name.# sqlite3_
1fd0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
1fe0: 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63  me16.# sqlite3_c
1ff0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
2000: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2010: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 0a 23  n_table_name16.#
2020: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2030: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 0a 23 20  database_name.# 
2040: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2050: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 0a 23  atabase_name16.#
2060: 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f  .# $STMT is a co
2070: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
2080: 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61  ment. $test is a
2090: 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65   prefix.# to use
20a0: 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20   for test names 
20b0: 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63  within this proc
20c0: 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69  . $names is a li
20d0: 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75  st.# of the colu
20e0: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68  mn names that sh
20f0: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
2100: 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65   by $STMT..# $de
2110: 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69 73  cltypes is a lis
2120: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
2130: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f  aration types fo
2140: 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61  r $STMT..#.# Exa
2150: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
2160: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
2170: 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 31  are_v2 "SELECT 1
2180: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
2190: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
21a0: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
21b0: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
21c0: 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67 69 6e  roc check_origin
21d0: 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65  _header {STMT te
21e0: 73 74 20 64 62 73 20 74 61 62 6c 65 73 20 63 6f  st dbs tables co
21f0: 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73 71 6c  ls} {.  # If sql
2200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2210: 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20 66 72  in_name() and fr
2220: 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20 63 6f  iends are not co
2230: 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20 23 20  mpiled into.  # 
2240: 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68 69 73  this build, this
2250: 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d 6f 70   proc is a no-op
2260: 2e 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6c 75  ..ifcapable colu
2270: 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a 0a 20 20  mnmetadata {..  
2280: 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75    # Use the retu
2290: 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  rn value of sqli
22a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
22b0: 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 20 20  () to build.    
22c0: 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  # a list of colu
22d0: 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e  mn indexes. i.e.
22e0: 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   If sqlite3_colu
22f0: 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20 69  mn_count.    # i
2300: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2310: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 20  ist {0 1 2}..   
2320: 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b   set ::idxlist [
2330: 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 3a 3a  list].    set ::
2340: 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33  numcols [sqlite3
2350: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
2360: 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73 65  TMT].    for {se
2370: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a 3a  t i 0} {$i < $::
2380: 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69  numcols} {incr i
2390: 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78  } {lappend ::idx
23a0: 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20 20 20 20  list $i}.  .    
23b0: 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65 73  # Database names
23c0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
23d0: 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a  _test $test.8 {.
23e0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
23f0: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
2400: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2410: 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61  ist {.        la
2420: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
2430: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2440: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 20 24 53  database_name $S
2450: 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20  TMT $i].      } 
2460: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2470: 6c 69 73 74 0a 20 20 20 20 7d 20 24 64 62 73 0a  list.    } $dbs.
2480: 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61 73    .    # Databas
2490: 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31  e names in UTF-1
24a0: 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20  6.    ifcapable 
24b0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20  {utf16} {.      
24c0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20  do_test $test.9 
24d0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  {.        set cn
24e0: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
24f0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69         foreach i
2500: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
2510: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2520: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
2530: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
2540: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 20 24 53  tabase_name16 $S
2550: 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20  TMT $i]].       
2560: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   }.        set c
2570: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d  namelist.      }
2580: 20 24 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a 20   $dbs.    }.  . 
2590: 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65 73     # Table names
25a0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
25b0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b  _test $test.10 {
25c0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
25d0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
25e0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
25f0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
2600: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
2610: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2620: 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54 4d  _table_name $STM
2630: 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20  T $i].      } . 
2640: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2650: 73 74 0a 20 20 20 20 7d 20 24 74 61 62 6c 65 73  st.    } $tables
2660: 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20  .  .    # Table 
2670: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  names in UTF-16.
2680: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75      ifcapable {u
2690: 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f  tf16} {.      do
26a0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20 7b  _test $test.11 {
26b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61  .        set cna
26c0: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
26d0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
26e0: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
26f0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
2700: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
2710: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
2720: 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  le_name16 $STMT 
2730: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
2740: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2750: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 74 61  list.      } $ta
2760: 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20 20  bles.    }.  .  
2770: 20 20 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65 73    # Origin names
2780: 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f   in UTF-8.    do
2790: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b  _test $test.12 {
27a0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
27b0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
27c0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
27d0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
27e0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
27f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2800: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53 54  _origin_name $ST
2810: 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a  MT $i].      } .
2820: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
2830: 69 73 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73 0a  ist.    } $cols.
2840: 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20    .    # Origin 
2850: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
2860: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20  s in UTF-16.    
2870: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
2880: 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  } {.      do_tes
2890: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 20  t $test.13 {.   
28a0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
28b0: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
28c0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
28d0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20  list {.         
28e0: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
28f0: 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  st [utf8 [sqlite
2900: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
2910: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
2920: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ].        }.    
2930: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
2940: 74 0a 20 20 20 20 20 20 7d 20 24 63 6f 6c 73 0a  t.      } $cols.
2950: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 54      }.  }.}..# T
2960: 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65 64  his proc is used
2970: 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c   to test the fol
2980: 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a 23  lowing APIs:.#.#
2990: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f   sqlite3_data_co
29a0: 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  unt.# sqlite3_co
29b0: 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c 69  lumn_type.# sqli
29c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a 23  te3_column_int.#
29d0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
29e0: 74 65 78 74 0a 23 20 73 71 6c 69 74 65 33 5f 63  text.# sqlite3_c
29f0: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20 73  olumn_text16.# s
2a00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
2a10: 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20 69  uble.#.# $STMT i
2a20: 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  s a compiled SQL
2a30: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 77   statement for w
2a40: 68 69 63 68 20 74 68 65 20 70 72 65 76 69 6f 75  hich the previou
2a50: 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71 6c  s call .# to sql
2a60: 69 74 65 33 5f 73 74 65 70 20 72 65 74 75 72 6e  ite3_step return
2a70: 65 64 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20 24  ed SQLITE_ROW. $
2a80: 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69 78  test is a prefix
2a90: 20 74 6f 20 75 73 65 20 0a 23 20 66 6f 72 20 74   to use .# for t
2aa0: 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e  est names within
2ab0: 20 74 68 69 73 20 70 72 6f 63 2e 20 24 74 79 70   this proc. $typ
2ac0: 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  es is a list of 
2ad0: 74 68 65 20 0a 23 20 6d 61 6e 69 66 65 73 74 20  the .# manifest 
2ae0: 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 63 75  types for the cu
2af0: 72 72 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74 73  rrent row. $ints
2b00: 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e 64 20 24  , $doubles and $
2b10: 73 74 72 69 6e 67 73 0a 23 20 61 72 65 20 6c 69  strings.# are li
2b20: 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65 67  sts of the integ
2b30: 65 72 2c 20 72 65 61 6c 20 61 6e 64 20 73 74 72  er, real and str
2b40: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2b50: 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20 76 61 6c  ons of.# the val
2b60: 75 65 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  ues in the curre
2b70: 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61 6d  nt row..#.# Exam
2b80: 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54 4d  ple:.#.# set STM
2b90: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
2ba0: 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 27 68  re_v2 "SELECT 'h
2bb0: 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c  ello', 1.1, NULL
2bc0: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71  " -1 DUMMY].# sq
2bd0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
2be0: 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65  .# check_data te
2bf0: 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c  st1.2 {TEXT REAL
2c00: 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b   NULL} {0 1 0} {
2c10: 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20  0 1.1 0} {hello 
2c20: 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63  1.1 {}}.#.proc c
2c30: 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20  heck_data {STMT 
2c40: 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73 20  test types ints 
2c50: 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d  doubles strings}
2c60: 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20   {..  # Use the 
2c70: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2c80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2c90: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2ca0: 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f    # a list of co
2cb0: 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e  lumn indexes. i.
2cc0: 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f  e. If sqlite3_co
2cd0: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69  lumn_count.  # i
2ce0: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2cf0: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73  ist {0 1 2}..  s
2d00: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
2d10: 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c  st].  set numcol
2d20: 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  s [sqlite3_data_
2d30: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
2d40: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
2d50: 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   < $numcols} {in
2d60: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2d70: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20  :idxlist $i}..# 
2d80: 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74  types.do_test $t
2d90: 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79  est.1 {.  set ty
2da0: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
2db0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2dc0: 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b  {lappend types [
2dd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2de0: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ype $STMT $i]}. 
2df0: 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79   set types.} $ty
2e00: 70 65 73 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a  pes..# Integers.
2e10: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20  do_test $test.2 
2e20: 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69  {.  set ints [li
2e30: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
2e40: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
2e50: 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f  d ints [sqlite3_
2e60: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53 54  column_int64 $ST
2e70: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e  MT $i]}.  set in
2e80: 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62 79  ts.} $ints..# by
2e90: 74 65 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c 69  tes.set lens [li
2ea0: 73 74 5d 0a 66 6f 72 65 61 63 68 20 69 20 24 3a  st].foreach i $:
2eb0: 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61 70  :idxlist {.  lap
2ec0: 70 65 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69 6e  pend lens [strin
2ed0: 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78  g length [lindex
2ee0: 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a 7d   $strings $i]].}
2ef0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33  .do_test $test.3
2f00: 20 7b 0a 20 20 73 65 74 20 62 79 74 65 73 20 5b   {.  set bytes [
2f10: 6c 69 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e 73  list].  set lens
2f20: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
2f30: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
2f40: 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73     lappend bytes
2f50: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2f60: 5f 62 79 74 65 73 20 24 53 54 4d 54 20 24 69 5d  _bytes $STMT $i]
2f70: 0a 20 20 7d 0a 20 20 73 65 74 20 62 79 74 65 73  .  }.  set bytes
2f80: 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74 65  .} $lens..# byte
2f90: 73 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  s16.ifcapable {u
2fa0: 74 66 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c 65  tf16} {.  set le
2fb0: 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  ns [list].  fore
2fc0: 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74  ach i $::idxlist
2fd0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c   {.    lappend l
2fe0: 65 6e 73 20 5b 65 78 70 72 20 32 20 2a 20 5b 73  ens [expr 2 * [s
2ff0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69  tring length [li
3000: 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24 69  ndex $strings $i
3010: 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  ]]].  }.  do_tes
3020: 74 20 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20  t $test.4 {.    
3030: 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d  set bytes [list]
3040: 0a 20 20 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c  .    set lens [l
3050: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
3060: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
3070: 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65      lappend byte
3080: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
3090: 6e 5f 62 79 74 65 73 31 36 20 24 53 54 4d 54 20  n_bytes16 $STMT 
30a0: 24 69 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  $i].    }.    se
30b0: 74 20 62 79 74 65 73 0a 20 20 7d 20 24 6c 65 6e  t bytes.  } $len
30c0: 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f 74  s.}..# Blob.do_t
30d0: 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20  est $test.5 {.  
30e0: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
30f0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3100: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
3110: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
3120: 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24 69  mn_blob $STMT $i
3130: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
3140: 24 73 74 72 69 6e 67 73 0a 0a 23 20 55 54 46 2d  $strings..# UTF-
3150: 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  8.do_test $test.
3160: 36 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  6 {.  set utf8 [
3170: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
3180: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
3190: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
31a0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
31b0: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75  TMT $i]}.  set u
31c0: 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a  tf8.} $strings..
31d0: 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74  # Floats.do_test
31e0: 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 73 65 74   $test.7 {.  set
31f0: 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66   utf8 [list].  f
3200: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
3210: 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20  t {lappend utf8 
3220: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3230: 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d  double $STMT $i]
3240: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
3250: 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 31  doubles..# UTF-1
3260: 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  6.ifcapable {utf
3270: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
3280: 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20 73 65  $test.8 {.    se
3290: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
32a0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
32b0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
32c0: 66 38 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  f8 [utf8 [sqlite
32d0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20  3_column_text16 
32e0: 24 53 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20 20  $STMT $i]]}.    
32f0: 73 65 74 20 75 74 66 38 0a 20 20 7d 20 24 73 74  set utf8.  } $st
3300: 72 69 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65 67  rings.}..# Integ
3310: 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ers.do_test $tes
3320: 74 2e 39 20 7b 0a 20 20 73 65 74 20 69 6e 74 73  t.9 {.  set ints
3330: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3340: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3350: 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69  ppend ints [sqli
3360: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
3370: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3380: 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20  ints.} $ints..# 
3390: 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24  Floats.do_test $
33a0: 74 65 73 74 2e 31 30 20 7b 0a 20 20 73 65 74 20  test.10 {.  set 
33b0: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  utf8 [list].  fo
33c0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
33d0: 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b   {lappend utf8 [
33e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
33f0: 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d  ouble $STMT $i]}
3400: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64  .  set utf8.} $d
3410: 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38 0a  oubles..# UTF-8.
3420: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31  do_test $test.11
3430: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
3440: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
3450: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
3460: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
3470: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54  _column_text $ST
3480: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
3490: 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23  f8.} $strings..#
34a0: 20 54 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24   Types.do_test $
34b0: 74 65 73 74 2e 31 32 20 7b 0a 20 20 73 65 74 20  test.12 {.  set 
34c0: 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66  types [list].  f
34d0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
34e0: 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73  t {lappend types
34f0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3500: 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d  _type $STMT $i]}
3510: 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24  .  set types.} $
3520: 74 79 70 65 73 0a 0a 23 20 54 65 73 74 20 74 68  types..# Test th
3530: 61 74 20 61 6e 20 6f 75 74 20 6f 66 20 72 61 6e  at an out of ran
3540: 67 65 20 72 65 71 75 65 73 74 20 72 65 74 75 72  ge request retur
3550: 6e 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ns the equivalen
3560: 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73  t of NULL.do_tes
3570: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73  t $test.13 {.  s
3580: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
3590: 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30 7d  t $STMT -1.} {0}
35a0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
35b0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  3 {.  sqlite3_co
35c0: 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20  lumn_text $STMT 
35d0: 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63 61  -1.} {}..}..ifca
35e0: 70 61 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70  pable !floatingp
35f0: 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f  oint {.  finish_
3600: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
3610: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
3620: 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.0 {.  execsql 
3630: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3640: 4c 45 20 74 31 28 61 20 56 41 52 49 4e 54 2c 20  LE t1(a VARINT, 
3650: 62 20 42 4c 4f 42 2c 20 63 20 56 41 52 43 48 41  b BLOB, c VARCHA
3660: 52 28 31 36 29 29 3b 0a 20 20 20 20 49 4e 53 45  R(16));.    INSE
3670: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
3680: 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20  S(1, 2, 3);.    
3690: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
36a0: 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74 77  ALUES('one', 'tw
36b0: 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49  o', NULL);.    I
36c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
36d0: 4c 55 45 53 28 31 2e 32 2c 20 31 2e 33 2c 20 31  LUES(1.2, 1.3, 1
36e0: 2e 34 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73  .4);.  }.  set s
36f0: 71 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql "SELECT * FRO
3700: 4d 20 74 31 22 0a 20 20 73 65 74 20 53 54 4d 54  M t1".  set STMT
3710: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
3720: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
3730: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
3740: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
3750: 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68  TMT.} 3..check_h
3760: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3770: 33 63 2d 35 2e 31 20 7b 61 20 62 20 63 7d 20 7b  3c-5.1 {a b c} {
3780: 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43  VARINT BLOB VARC
3790: 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f  HAR(16)}.check_o
37a0: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
37b0: 4d 54 20 63 61 70 69 33 63 2d 35 2e 31 20 7b 6d  MT capi3c-5.1 {m
37c0: 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b  ain main main} {
37d0: 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63  t1 t1 t1} {a b c
37e0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
37f0: 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -5.2 {.  sqlite3
3800: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
3810: 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f  LITE_ROW..check_
3820: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3830: 69 33 63 2d 35 2e 33 20 7b 61 20 62 20 63 7d 20  i3c-5.3 {a b c} 
3840: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
3850: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
3860: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3870: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 33 20 7b  TMT capi3c-5.3 {
3880: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3890: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
38a0: 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  c}.check_data $S
38b0: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 34 20 7b  TMT capi3c-5.4 {
38c0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
38d0: 54 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b 31  TEXT} {1 2 3} {1
38e0: 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20 32  .0 2.0 3.0} {1 2
38f0: 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70   3}..do_test cap
3900: 69 33 63 2d 35 2e 35 20 7b 0a 20 20 73 71 6c 69  i3c-5.5 {.  sqli
3910: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3920: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65   SQLITE_ROW..che
3930: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
3940: 63 61 70 69 33 63 2d 35 2e 36 20 7b 61 20 62 20  capi3c-5.6 {a b 
3950: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3960: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3970: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3980: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3990: 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69  6 {main main mai
39a0: 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61  n} {t1 t1 t1} {a
39b0: 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61   b c}.check_data
39c0: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
39d0: 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e 55 4c  7 {TEXT TEXT NUL
39e0: 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e 30 20  L} {0 0 0} {0.0 
39f0: 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20 74 77  0.0 0.0} {one tw
3a00: 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  o {}}..do_test c
3a10: 61 70 69 33 63 2d 35 2e 38 20 7b 0a 20 20 73 71  api3c-5.8 {.  sq
3a20: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
3a30: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63  .} SQLITE_ROW..c
3a40: 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d  heck_header $STM
3a50: 54 20 63 61 70 69 33 63 2d 35 2e 39 20 7b 61 20  T capi3c-5.9 {a 
3a60: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3a70: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3a80: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3a90: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  er $STMT capi3c-
3aa0: 35 2e 39 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  5.9 {main main m
3ab0: 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20  ain} {t1 t1 t1} 
3ac0: 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61  {a b c}.check_da
3ad0: 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  ta $STMT capi3c-
3ae0: 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46 4c 4f 41  5.10 {FLOAT FLOA
3af0: 54 20 54 45 58 54 7d 20 7b 31 20 31 20 31 7d 20  T TEXT} {1 1 1} 
3b00: 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 20 7b 31  {1.2 1.3 1.4} {1
3b10: 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a 64 6f 5f  .2 1.3 1.4}..do_
3b20: 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 31 31  test capi3c-5.11
3b30: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
3b40: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
3b50: 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73 74 20 63  _DONE..do_test c
3b60: 61 70 69 33 63 2d 35 2e 31 32 20 7b 0a 20 20 73  api3c-5.12 {.  s
3b70: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3b80: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
3b90: 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K..do_test capi3
3ba0: 63 2d 35 2e 32 30 20 7b 0a 20 20 73 65 74 20 73  c-5.20 {.  set s
3bb0: 71 6c 20 22 53 45 4c 45 43 54 20 61 2c 20 73 75  ql "SELECT a, su
3bc0: 6d 28 62 29 2c 20 6d 61 78 28 63 29 20 46 52 4f  m(b), max(c) FRO
3bd0: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 61 22  M t1 GROUP BY a"
3be0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3bf0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
3c00: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
3c10: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ].  sqlite3_colu
3c20: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d  mn_count $STMT.}
3c30: 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72   3..check_header
3c40: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3c50: 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d 61 78  21 {a sum(b) max
3c60: 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20  (c)} {VARINT {} 
3c70: 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  {}}.check_origin
3c80: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3c90: 70 69 33 63 2d 35 2e 32 32 20 7b 6d 61 69 6e 20  pi3c-5.22 {main 
3ca0: 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d  {} {}} {t1 {} {}
3cb0: 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  } {a {} {}}.do_t
3cc0: 65 73 74 20 63 61 70 69 33 63 2d 35 2e 32 33 20  est capi3c-5.23 
3cd0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
3ce0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
3cf0: 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74 20 3a 3a 45  ITE_OK...set ::E
3d00: 4e 43 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61  NC [execsql {pra
3d10: 67 6d 61 20 65 6e 63 6f 64 69 6e 67 7d 5d 0a 64  gma encoding}].d
3d20: 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74 65 73 74  b close..do_test
3d30: 20 63 61 70 69 33 63 2d 36 2e 30 20 7b 0a 20 20   capi3c-6.0 {.  
3d40: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
3d50: 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73 71 6c  db.  set DB [sql
3d60: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
3d70: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 69 66  pointer db].  if
3d80: 20 7b 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d   {[sqlite3 -has-
3d90: 63 6f 64 65 63 5d 3d 3d 30 7d 20 7b 20 73 71 6c  codec]==0} { sql
3da0: 69 74 65 33 5f 6b 65 79 20 24 44 42 20 78 79 7a  ite3_key $DB xyz
3db0: 7a 79 20 7d 0a 20 20 73 65 74 20 73 71 6c 20 7b  zy }.  set sql {
3dc0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
3dd0: 20 6f 72 64 65 72 20 62 79 20 72 6f 77 69 64 7d   order by rowid}
3de0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3df0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
3e00: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
3e10: 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20 7b 30 7d  ].  expr 0.} {0}
3e20: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
3e30: 36 2e 31 20 7b 0a 20 20 64 62 20 63 61 63 68 65  6.1 {.  db cache
3e40: 20 66 6c 75 73 68 0a 20 20 73 71 6c 69 74 65 33   flush.  sqlite3
3e50: 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b 53 51  _close $DB.} {SQ
3e60: 4c 49 54 45 5f 42 55 53 59 7d 0a 64 6f 5f 74 65  LITE_BUSY}.do_te
3e70: 73 74 20 63 61 70 69 33 63 2d 36 2e 32 20 7b 0a  st capi3c-6.2 {.
3e80: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
3e90: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
3ea0: 4f 57 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24  OW}.check_data $
3eb0: 53 54 4d 54 20 63 61 70 69 33 63 2d 36 2e 33 20  STMT capi3c-6.3 
3ec0: 7b 49 4e 54 45 47 45 52 7d 20 7b 31 7d 20 7b 31  {INTEGER} {1} {1
3ed0: 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  .0} {1}.do_test 
3ee0: 63 61 70 69 33 63 2d 36 2e 33 20 7b 0a 20 20 73  capi3c-6.3 {.  s
3ef0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3f00: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
3f10: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
3f20: 33 63 2d 36 2e 34 20 7b 0a 20 20 64 62 20 63 61  3c-6.4 {.  db ca
3f30: 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69  che flush.  sqli
3f40: 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20  te3_close $DB.} 
3f50: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
3f60: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 39 39 2d  est capi3c-6.99-
3f70: 6d 69 73 75 73 65 20 7b 0a 20 20 64 62 20 63 6c  misuse {.  db cl
3f80: 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 54 68 69 73  ose.} {}..# This
3f90: 20 70 72 6f 63 65 64 75 72 65 20 73 65 74 73 20   procedure sets 
3fa0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
3fb0: 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20   file-format in 
3fc0: 66 69 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23  file 'test.db'.#
3fd0: 20 74 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73   to $newval. Als
3fe0: 6f 2c 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  o, the schema co
3ff0: 6f 6b 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e  okie is incremen
4000: 74 65 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74  ted..# .proc set
4010: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65  _file_format {ne
4020: 77 76 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f  wval} {.  hexio_
4030: 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 34  write test.db 44
4040: 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69   [hexio_render_i
4050: 6e 74 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20  nt32 $newval].  
4060: 73 65 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65  set schemacookie
4070: 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20   [hexio_get_int 
4080: 5b 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74  [hexio_read test
4090: 2e 64 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63  .db 40 4]].  inc
40a0: 72 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20  r schemacookie. 
40b0: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
40c0: 74 2e 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72  t.db 40 [hexio_r
40d0: 65 6e 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68  ender_int32 $sch
40e0: 65 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74  emacookie].  ret
40f0: 75 72 6e 20 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73  urn {}.}..# This
4100: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
4110: 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ns the value of 
4120: 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20  the file-format 
4130: 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62  in file 'test.db
4140: 27 2e 0a 23 20 0a 70 72 6f 63 20 67 65 74 5f 66  '..# .proc get_f
4150: 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 7b 66 6e 61  ile_format {{fna
4160: 6d 65 20 74 65 73 74 2e 64 62 7d 7d 20 7b 0a 20  me test.db}} {. 
4170: 20 72 65 74 75 72 6e 20 5b 68 65 78 69 6f 5f 67   return [hexio_g
4180: 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65  et_int [hexio_re
4190: 61 64 20 24 66 6e 61 6d 65 20 34 34 20 34 5d 5d  ad $fname 44 4]]
41a0: 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65  .}..if {![sqlite
41b0: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b  3 -has-codec]} {
41c0: 0a 20 20 23 20 54 65 73 74 20 77 68 61 74 20 68  .  # Test what h
41d0: 61 70 70 65 6e 73 20 77 68 65 6e 20 74 68 65 20  appens when the 
41e0: 6c 69 62 72 61 72 79 20 65 6e 63 6f 75 6e 74 65  library encounte
41f0: 72 73 20 61 20 6e 65 77 65 72 20 66 69 6c 65 20  rs a newer file 
4200: 66 6f 72 6d 61 74 2e 0a 20 20 64 6f 5f 74 65 73  format..  do_tes
4210: 74 20 63 61 70 69 33 63 2d 37 2e 31 20 7b 0a 20  t capi3c-7.1 {. 
4220: 20 20 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d     set_file_form
4230: 61 74 20 35 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  at 5.  } {}.  do
4240: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 37 2e 32  _test capi3c-7.2
4250: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
4260: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4270: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4280: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4290: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
42a0: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
42b0: 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20  {1 {unsupported 
42c0: 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a 20 20  file format}}.  
42d0: 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 20 7b  db close.}..if {
42e0: 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63  ![sqlite3 -has-c
42f0: 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e 6f 77  odec]} {.  # Now
4300: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20 6c   test that the l
4310: 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c 79  ibrary correctly
4320: 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73 20 65   handles bogus e
4330: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20  ntries in the.  
4340: 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  # sqlite_master 
4350: 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20 63 6f  table (schema co
4360: 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64 6f 5f  rruption)..  do_
4370: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 31 20  test capi3c-8.1 
4380: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
4390: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
43a0: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
43b0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
43c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
43d0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
43e0: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
43f0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
4400: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
4410: 69 33 63 2d 38 2e 32 20 7b 0a 20 20 20 20 73 71  i3c-8.2 {.    sq
4420: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4430: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4440: 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74       PRAGMA writ
4450: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a  able_schema=ON;.
4460: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
4470: 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  O sqlite_master 
4480: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c 4c  VALUES(NULL,NULL
4490: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29  ,NULL,NULL,NULL)
44a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63  ;.    }.    db c
44b0: 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  lose.  } {}.  do
44c0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 33  _test capi3c-8.3
44d0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
44e0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
44f0: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4500: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4510: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4520: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4530: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
4540: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f  tabase schema (?
4550: 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  )}}.  do_test ca
4560: 70 69 33 63 2d 38 2e 34 20 7b 0a 20 20 20 20 23  pi3c-8.4 {.    #
4570: 20 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64   Build a 5-field
4580: 20 72 6f 77 20 72 65 63 6f 72 64 2e 20 54 68 65   row record. The
4590: 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 73 20   first field is 
45a0: 61 20 73 74 72 69 6e 67 20 27 74 61 62 6c 65 27  a string 'table'
45b0: 2c 20 61 6e 64 0a 20 20 20 20 23 20 73 75 62 73  , and.    # subs
45c0: 65 71 75 65 6e 74 20 66 69 65 6c 64 73 20 61 72  equent fields ar
45d0: 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20  e all NULL..    
45e0: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72  db close.    for
45f0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
4600: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
4610: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4620: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
4630: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
4640: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
4650: 20 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69        PRAGMA wri
4660: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
4670: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4680: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
4690: 20 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c   VALUES('table',
46a0: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
46b0: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ULL);.    }.    
46c0: 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b  db close.  } {};
46d0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
46e0: 63 2d 38 2e 35 20 7b 0a 20 20 20 20 63 61 74 63  c-8.5 {.    catc
46f0: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
4700: 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74  est.db }.    cat
4710: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  chsql {.      SE
4720: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
4730: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
4740: 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d  .  } {1 {malform
4750: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
4760: 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63 6c  ma (?)}}.  db cl
4770: 6f 73 65 0a 7d 0a 66 6f 72 63 65 64 65 6c 65 74  ose.}.forcedelet
4780: 65 20 74 65 73 74 2e 64 62 0a 66 6f 72 63 65 64  e test.db.forced
4790: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 2d 6a 6f  elete test.db-jo
47a0: 75 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20 74  urnal...# Test t
47b0: 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he english langu
47c0: 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76  age string equiv
47d0: 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74  alents for sqlit
47e0: 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73 65  e error codes.se
47f0: 74 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 5b  t code2english [
4800: 6c 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b  list \.SQLITE_OK
4810: 20 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61 6e           {not an
4820: 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45   error} \.SQLITE
4830: 5f 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51 4c  _ERROR      {SQL
4840: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
4850: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
4860: 7d 20 5c 0a 53 51 4c 49 54 45 5f 50 45 52 4d 20  } \.SQLITE_PERM 
4870: 20 20 20 20 20 20 7b 61 63 63 65 73 73 20 70 65        {access pe
4880: 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 7d  rmission denied}
4890: 20 5c 0a 53 51 4c 49 54 45 5f 41 42 4f 52 54 20   \.SQLITE_ABORT 
48a0: 20 20 20 20 20 7b 63 61 6c 6c 62 61 63 6b 20 72       {callback r
48b0: 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61  equested query a
48c0: 62 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 42  bort} \.SQLITE_B
48d0: 55 53 59 20 20 20 20 20 20 20 7b 64 61 74 61 62  USY       {datab
48e0: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c  ase is locked} \
48f0: 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20  .SQLITE_LOCKED  
4900: 20 20 20 7b 64 61 74 61 62 61 73 65 20 74 61 62     {database tab
4910: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a  le is locked} \.
4920: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20 20  SQLITE_NOMEM    
4930: 20 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79    {out of memory
4940: 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 45 41 44 4f  } \.SQLITE_READO
4950: 4e 4c 59 20 20 20 7b 61 74 74 65 6d 70 74 20 74  NLY   {attempt t
4960: 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e  o write a readon
4970: 6c 79 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 53  ly database} \.S
4980: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20  QLITE_INTERRUPT 
4990: 20 7b 69 6e 74 65 72 72 75 70 74 65 64 7d 20 5c   {interrupted} \
49a0: 0a 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20 20  .SQLITE_IOERR   
49b0: 20 20 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72 72     {disk I/O err
49c0: 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 52  or} \.SQLITE_COR
49d0: 52 55 50 54 20 20 20 20 7b 64 61 74 61 62 61 73  RUPT    {databas
49e0: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
49f0: 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a 53 51 4c  malformed} \.SQL
4a00: 49 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20 7b  ITE_FULL       {
4a10: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
4a20: 20 69 73 20 66 75 6c 6c 7d 20 5c 0a 53 51 4c 49   is full} \.SQLI
4a30: 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20 7b 75  TE_CANTOPEN   {u
4a40: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
4a50: 74 61 62 61 73 65 20 66 69 6c 65 7d 20 5c 0a 53  tabase file} \.S
4a60: 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20 20  QLITE_EMPTY     
4a70: 20 7b 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73   {table contains
4a80: 20 6e 6f 20 64 61 74 61 7d 20 5c 0a 53 51 4c 49   no data} \.SQLI
4a90: 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20 7b 64  TE_SCHEMA     {d
4aa0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
4ab0: 61 73 20 63 68 61 6e 67 65 64 7d 20 5c 0a 53 51  as changed} \.SQ
4ac0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
4ad0: 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  {constraint fail
4ae0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53  ed} \.SQLITE_MIS
4af0: 4d 41 54 43 48 20 20 20 7b 64 61 74 61 74 79 70  MATCH   {datatyp
4b00: 65 20 6d 69 73 6d 61 74 63 68 7d 20 5c 0a 53 51  e mismatch} \.SQ
4b10: 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20  LITE_MISUSE     
4b20: 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65  {library routine
4b30: 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73   called out of s
4b40: 65 71 75 65 6e 63 65 7d 20 5c 0a 53 51 4c 49 54  equence} \.SQLIT
4b50: 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 7b 6c 61  E_NOLFS      {la
4b60: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
4b70: 20 69 73 20 64 69 73 61 62 6c 65 64 7d 20 5c 0a   is disabled} \.
4b80: 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20 20 20  SQLITE_AUTH     
4b90: 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e    {authorization
4ba0: 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54   denied} \.SQLIT
4bb0: 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 7b 61 75  E_FORMAT     {au
4bc0: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
4bd0: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 7d 20 5c   format error} \
4be0: 0a 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20 20  .SQLITE_RANGE   
4bf0: 20 20 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75     {bind or colu
4c00: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
4c10: 72 61 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  range} \.SQLITE_
4c20: 4e 4f 54 41 44 42 20 20 20 20 20 7b 66 69 6c 65  NOTADB     {file
4c30: 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72   is encrypted or
4c40: 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61   is not a databa
4c50: 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72  se} \.unknownerr
4c60: 6f 72 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e  or      {unknown
4c70: 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74   error} \.]..set
4c80: 20 74 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a 66   test_number 1.f
4c90: 6f 72 65 61 63 68 20 7b 63 6f 64 65 20 65 6e 67  oreach {code eng
4ca0: 6c 69 73 68 7d 20 24 63 6f 64 65 32 65 6e 67 6c  lish} $code2engl
4cb0: 69 73 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ish {.  do_test 
4cc0: 63 61 70 69 33 63 2d 39 2e 24 74 65 73 74 5f 6e  capi3c-9.$test_n
4cd0: 75 6d 62 65 72 20 22 73 71 6c 69 74 65 33 5f 74  umber "sqlite3_t
4ce0: 65 73 74 5f 65 72 72 73 74 72 20 24 63 6f 64 65  est_errstr $code
4cf0: 22 20 24 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63  " $english.  inc
4d00: 72 20 74 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a  r test_number.}.
4d10: 0a 23 20 54 65 73 74 20 74 68 65 20 65 72 72 6f  .# Test the erro
4d20: 72 20 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61  r message when a
4d30: 20 22 72 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d   "real" out of m
4d40: 65 6d 6f 72 79 20 6f 63 63 75 72 73 2e 0a 69 66  emory occurs..if
4d50: 63 61 70 61 62 6c 65 20 6d 65 6d 64 65 62 75 67  capable memdebug
4d60: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
4d70: 69 33 63 2d 31 30 2d 31 20 7b 0a 20 20 20 20 73  i3c-10-1 {.    s
4d80: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4d90: 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73 71  b.    set DB [sq
4da0: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
4db0: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 20  _pointer db].   
4dc0: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75   sqlite3_memdebu
4dd0: 67 5f 66 61 69 6c 20 30 0a 20 20 20 20 63 61 74  g_fail 0.    cat
4de0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  chsql {.      se
4df0: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
4e00: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
4e10: 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20  .  } {1 {out of 
4e20: 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65  memory}}.  do_te
4e30: 73 74 20 63 61 70 69 33 63 2d 31 30 2d 32 20 7b  st capi3c-10-2 {
4e40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72  .    sqlite3_err
4e50: 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f  msg $::DB.  } {o
4e60: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20  ut of memory}.  
4e70: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
4e80: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
4e90: 63 61 70 69 33 63 2d 31 30 2d 33 20 7b 0a 20 20  capi3c-10-3 {.  
4ea0: 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65      utf8 [sqlite
4eb0: 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44 42  3_errmsg16 $::DB
4ec0: 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66 20  ].    } {out of 
4ed0: 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64 62  memory}.  }.  db
4ee0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
4ef0: 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 2d  _memdebug_fail -
4f00: 31 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  1.}..# The follo
4f10: 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70  wing tests - cap
4f20: 69 33 63 2d 31 31 2e 2a 20 2d 20 74 65 73 74 20  i3c-11.* - test 
4f30: 74 68 61 74 20 61 20 43 4f 4d 4d 49 54 20 6f 72  that a COMMIT or
4f40: 20 52 4f 4c 4c 42 41 43 4b 0a 23 20 73 74 61 74   ROLLBACK.# stat
4f50: 65 6d 65 6e 74 20 69 73 73 75 65 64 20 77 68 69  ement issued whi
4f60: 6c 65 20 74 68 65 72 65 20 61 72 65 20 73 74 69  le there are sti
4f70: 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56  ll outstanding V
4f80: 4d 73 20 74 68 61 74 20 61 72 65 20 70 61 72 74  Ms that are part
4f90: 20 6f 66 0a 23 20 74 68 65 20 74 72 61 6e 73 61   of.# the transa
4fa0: 63 74 69 6f 6e 20 66 61 69 6c 73 2e 0a 73 71 6c  ction fails..sql
4fb0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4fc0: 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f  set DB [sqlite3_
4fd0: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
4fe0: 65 72 20 64 62 5d 0a 73 71 6c 69 74 65 5f 72 65  er db].sqlite_re
4ff0: 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63  gister_test_func
5000: 74 69 6f 6e 20 24 44 42 20 66 75 6e 63 0a 64 6f  tion $DB func.do
5010: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5020: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
5030: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43      BEGIN;.    C
5040: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
5050: 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , b);.    INSERT
5060: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
5070: 31 2c 20 27 69 6e 74 27 29 3b 0a 20 20 20 20 49  1, 'int');.    I
5080: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
5090: 4c 55 45 53 28 32 2c 20 27 6e 6f 74 61 74 79 70  LUES(2, 'notatyp
50a0: 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  e');.  }.} {}.do
50b0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
50c0: 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.1 {.  sqlite3_
50d0: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
50e0: 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63  DB.} 0.do_test c
50f0: 61 70 69 33 63 2d 31 31 2e 32 20 7b 0a 20 20 73  api3c-11.2 {.  s
5100: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5110: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
5120: 22 53 45 4c 45 43 54 20 66 75 6e 63 28 62 2c 20  "SELECT func(b, 
5130: 61 29 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54  a) FROM t1" -1 T
5140: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  AIL].  sqlite3_s
5150: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
5160: 49 54 45 5f 52 4f 57 7d 0a 0a 23 20 41 73 20 6f  ITE_ROW}..# As o
5170: 66 20 33 2e 36 2e 35 20 61 20 43 4f 4d 4d 49 54  f 3.6.5 a COMMIT
5180: 20 69 73 20 4f 4b 20 64 75 72 69 6e 67 20 77 68   is OK during wh
5190: 69 6c 65 20 61 20 71 75 65 72 79 20 69 73 20 73  ile a query is s
51a0: 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 20 2d 0a 23  till running -.#
51b0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69   as long as it i
51c0: 73 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 71 75  s a read-only qu
51d0: 65 72 79 20 61 6e 64 20 6e 6f 74 20 61 6e 20 69  ery and not an i
51e0: 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
51f0: 77 72 69 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  write..#.do_test
5200: 20 63 61 70 69 33 2d 31 31 2e 33 2e 31 20 7b 0a   capi3-11.3.1 {.
5210: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5220: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
5230: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
5240: 70 69 33 2d 31 31 2e 33 2e 32 20 7b 0a 20 20 73  pi3-11.3.2 {.  s
5250: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
5260: 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53  errcode $DB.} {S
5270: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
5280: 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 33 20 7b  t capi3-11.3.3 {
5290: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
52a0: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
52b0: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  1.do_test capi3-
52c0: 31 31 2e 33 2e 34 20 7b 0a 20 20 64 62 20 65 76  11.3.4 {.  db ev
52d0: 61 6c 20 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  al {PRAGMA lock_
52e0: 73 74 61 74 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20  status}.} {main 
52f0: 73 68 61 72 65 64 20 74 65 6d 70 20 63 6c 6f 73  shared temp clos
5300: 65 64 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70  ed}..do_test cap
5310: 69 33 63 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c  i3c-11.4 {.  sql
5320: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5330: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
5340: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5350: 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  11.5 {.  sqlite3
5360: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5370: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
5380: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5390: 31 31 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71  11.6 {.  catchsq
53a0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
53b0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
53c0: 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e 6f 74 61  {0 {1 int 2 nota
53d0: 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  type}}.do_test c
53e0: 61 70 69 33 63 2d 31 31 2e 37 20 7b 0a 20 20 73  api3c-11.7 {.  s
53f0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5400: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5410: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5420: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
5430: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
5440: 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45   t2(a);.    INSE
5450: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
5460: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
5470: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5480: 32 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  2);.    BEGIN;. 
5490: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
54a0: 32 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d  2 VALUES(3);.  }
54b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
54c0: 70 69 33 63 2d 31 31 2e 38 2e 31 20 7b 0a 20 20  pi3c-11.8.1 {.  
54d0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
54e0: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
54f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5500: 2e 39 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .9 {.  set STMT 
5510: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5520: 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20  _v2 $DB "SELECT 
5530: 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41  a FROM t2" -1 TA
5540: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
5550: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5560: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5570: 63 61 70 69 33 63 2d 31 31 2e 39 2e 31 20 7b 0a  capi3c-11.9.1 {.
5580: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5590: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30  tocommit $DB.} 0
55a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
55b0: 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61 74 63 68  11.9.2 {.  catch
55c0: 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41  sql {.    ROLLBA
55d0: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  CK;.  }.} {0 {}}
55e0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
55f0: 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74  11.9.3 {.  sqlit
5600: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5610: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
5620: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 30 20 7b  t capi3c-11.10 {
5630: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5640: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5650: 41 42 4f 52 54 7d 0a 69 66 63 61 70 61 62 6c 65  ABORT}.ifcapable
5660: 20 21 61 75 74 6f 72 65 73 65 74 20 7b 0a 20 20   !autoreset {.  
5670: 23 20 49 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  # If SQLITE_OMIT
5680: 5f 41 55 54 4f 52 45 53 45 54 20 69 73 20 64 65  _AUTORESET is de
5690: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 20  fined, then the 
56a0: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
56b0: 65 0a 20 20 23 20 72 65 73 65 74 28 29 20 62 65  e.  # reset() be
56c0: 66 6f 72 65 20 69 74 20 63 61 6e 20 62 65 20 70  fore it can be p
56d0: 61 73 73 65 64 20 74 6f 20 73 74 65 70 28 29 20  assed to step() 
56e0: 61 67 61 69 6e 2e 0a 20 20 64 6f 5f 74 65 73 74  again..  do_test
56f0: 20 63 61 70 69 33 2d 31 31 2e 31 31 61 20 7b 20   capi3-11.11a { 
5700: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5710: 4d 54 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53  MT } {SQLITE_MIS
5720: 55 53 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  USE}.  do_test c
5730: 61 70 69 33 2d 31 31 2e 31 31 62 20 7b 20 73 71  api3-11.11b { sq
5740: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
5750: 54 20 7d 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52  T } {SQLITE_ABOR
5760: 54 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  T}.}.do_test cap
5770: 69 33 63 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71  i3c-11.11 {.  sq
5780: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5790: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
57a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
57b0: 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.12 {.  sqlite3
57c0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71  _step $STMT.  sq
57d0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
57e0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d  .} {SQLITE_DONE}
57f0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5800: 31 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  11.13 {.  sqlite
5810: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5820: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
5830: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5840: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
5850: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
5860: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t2;.  }.} {1
5870: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69   2}.do_test capi
5880: 33 63 2d 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73  3c-11.14.1 {.  s
5890: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
58a0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
58b0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
58c0: 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  15 {.  catchsql 
58d0: 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  {.    ROLLBACK;.
58e0: 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74    }.} {1 {cannot
58f0: 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
5900: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
5910: 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  tive}}.do_test c
5920: 61 70 69 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a  api3c-11.15.1 {.
5930: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5940: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5950: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5960: 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  11.16 {.  execsq
5970: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
5980: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
5990: 7b 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20  {1 2}..# Sanity 
59a0: 63 68 65 63 6b 20 6f 6e 20 74 68 65 20 64 65 66  check on the def
59b0: 69 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73  inition of 'outs
59c0: 74 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68 69  tanding VM'. Thi
59d0: 73 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23  s means any VM.#
59e0: 20 74 68 61 74 20 68 61 73 20 68 61 64 20 73 71   that has had sq
59f0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
5a00: 6c 65 64 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c  led more recentl
5a10: 79 20 74 68 61 6e 20 73 71 6c 69 74 65 33 5f 66  y than sqlite3_f
5a20: 69 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73  inalize() or.# s
5a30: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2e 20  qlite3_reset(). 
5a40: 53 6f 20 61 20 56 4d 20 74 68 61 74 20 68 61 73  So a VM that has
5a50: 20 6a 75 73 74 20 62 65 65 6e 20 70 72 65 70 61   just been prepa
5a60: 72 65 64 20 6f 72 20 72 65 73 65 74 20 64 6f 65  red or reset doe
5a70: 73 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73  s not.# count as
5a80: 20 61 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a 64   an active VM..d
5a90: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5aa0: 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .17 {.  execsql 
5ab0: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d  {.    BEGIN;.  }
5ac0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
5ad0: 70 69 33 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73  pi3c-11.18 {.  s
5ae0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5af0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
5b00: 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  "SELECT a FROM t
5b10: 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61  1" -1 TAIL].  ca
5b20: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5b30: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5b40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5b50: 2d 31 31 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74  -11.19 {.  sqlit
5b60: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5b70: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5b80: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5b90: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
5ba0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
5bb0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
5bc0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5bd0: 69 33 63 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71  i3c-11.20 {.  sq
5be0: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
5bf0: 54 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  T.  catchsql {. 
5c00: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d     COMMIT;.  }.}
5c10: 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d   {1 {cannot comm
5c20: 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
5c30: 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a  ion is active}}.
5c40: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5c50: 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.21 {.  sqlite3
5c60: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5c70: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23  } {SQLITE_OK}..#
5c80: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
5c90: 65 73 74 73 20 2d 20 63 61 70 69 33 63 2d 31 32  ests - capi3c-12
5ca0: 2e 2a 20 2d 20 63 68 65 63 6b 20 74 68 61 74 20  .* - check that 
5cb0: 69 74 73 20 4f 6b 20 74 6f 20 73 74 61 72 74 20  its Ok to start 
5cc0: 61 0a 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  a.# transaction 
5cd0: 77 68 69 6c 65 20 6f 74 68 65 72 20 56 4d 73 20  while other VMs 
5ce0: 61 72 65 20 61 63 74 69 76 65 2c 20 61 6e 64 20  are active, and 
5cf0: 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20 65  that its Ok to e
5d00: 78 65 63 75 74 65 0a 23 20 61 74 6f 6d 69 63 20  xecute.# atomic 
5d10: 75 70 64 61 74 65 73 20 69 6e 20 74 68 65 20 73  updates in the s
5d20: 61 6d 65 20 73 69 74 75 61 74 69 6f 6e 20 0a 23  ame situation .#
5d30: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5d40: 31 32 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d  12.1 {.  set STM
5d50: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5d60: 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43  re_v2 $DB "SELEC
5d70: 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20  T a FROM t2" -1 
5d80: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
5d90: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5da0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5db0: 74 20 63 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a  t capi3c-12.2 {.
5dc0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5dd0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
5de0: 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b  VALUES(3, NULL);
5df0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5e00: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5e10: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
5e20: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5e30: 20 74 32 20 56 41 4c 55 45 53 28 34 29 3b 0a 20   t2 VALUES(4);. 
5e40: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5e50: 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e 34 20  est capi3c-12.4 
5e60: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5e70: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e     BEGIN;.    IN
5e80: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5e90: 55 45 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(4, NULL);.  
5ea0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5eb0: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 35 20 7b  st capi3c-12.5 {
5ec0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5ed0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5ee0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5ef0: 69 33 63 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73  i3c-12.5.1 {.  s
5f00: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5f10: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5f20: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5f30: 31 32 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.6 {.  sqlite3
5f40: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5f50: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74  QLITE_DONE}.do_t
5f60: 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e 37 20  est capi3c-12.7 
5f70: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
5f80: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
5f90: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
5fa0: 20 63 61 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20   capi3c-12.8 {. 
5fb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
5fc0: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
5fd0: 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T a FROM t1;.  }
5fe0: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20  .} {1 2 3 4}..# 
5ff0: 54 65 73 74 20 63 61 73 65 73 20 63 61 70 69 33  Test cases capi3
6000: 63 2d 31 33 2e 2a 20 74 65 73 74 20 74 68 65 20  c-13.* test the 
6010: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
6020: 6e 64 69 6e 67 73 28 29 20 61 6e 64 20 0a 23 20  ndings() and .# 
6030: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 41 50  sqlite3_sleep AP
6040: 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67  Is..#.if {[lleng
6050: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  th [info command
6060: 73 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  s sqlite3_clear_
6070: 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a  bindings]]>0} {.
6080: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
6090: 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -13.1 {.    exec
60a0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
60b0: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
60c0: 7d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  }.    set STMT [
60d0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
60e0: 76 32 20 24 44 42 20 22 49 4e 53 45 52 54 20 49  v2 $DB "INSERT I
60f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3f 2c  NTO t1 VALUES(?,
6100: 20 3f 29 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   ?)" -1 TAIL].  
6110: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6120: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
6130: 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74  _DONE}.  do_test
6140: 20 63 61 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20   capi3c-13.2 {. 
6150: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74     sqlite3_reset
6160: 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74   $STMT.    sqlit
6170: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54  e3_bind_text $ST
6180: 4d 54 20 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20  MT 1 hello 5.   
6190: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
61a0: 78 74 20 24 53 54 4d 54 20 32 20 77 6f 72 6c 64  xt $STMT 2 world
61b0: 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   5.    sqlite3_s
61c0: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
61d0: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f  QLITE_DONE}.  do
61e0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2e  _test capi3c-13.
61f0: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  3 {.    sqlite3_
6200: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20  reset $STMT.    
6210: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
6220: 6e 64 69 6e 67 73 20 24 53 54 4d 54 0a 20 20 20  ndings $STMT.   
6230: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6240: 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  TMT.  } {SQLITE_
6250: 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  DONE}.  do_test 
6260: 63 61 70 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20  capi3c-13-4 {.  
6270: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6280: 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 65 78 65  ze $STMT.    exe
6290: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
62a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
62b0: 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20     }.  } {{} {} 
62c0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b  hello world {} {
62d0: 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74  }}.}.if {[llengt
62e0: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73  h [info commands
62f0: 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d   sqlite3_sleep]]
6300: 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  >0} {.  do_test 
6310: 63 61 70 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20  capi3c-13-5 {.  
6320: 20 20 73 65 74 20 6d 73 20 5b 73 71 6c 69 74 65    set ms [sqlite
6330: 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20 20 20  3_sleep 80].    
6340: 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c  expr {$ms==80 ||
6350: 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20   $ms==1000}.  } 
6360: 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20  {1}.}..# Ticket 
6370: 23 31 32 31 39 3a 20 20 4d 61 6b 65 20 73 75 72  #1219:  Make sur
6380: 65 20 62 69 6e 64 69 6e 67 20 41 50 49 73 20 63  e binding APIs c
6390: 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c  an handle a NULL
63a0: 20 70 6f 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74   pointer..#.do_t
63b0: 65 73 74 20 63 61 70 69 33 63 2d 31 34 2e 31 20  est capi3c-14.1 
63c0: 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  {.  set rc [catc
63d0: 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  h {sqlite3_bind_
63e0: 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20 35  text 0 1 hello 5
63f0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
6400: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51   rc $msg.} {1 SQ
6410: 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20  LITE_MISUSE}..# 
6420: 54 69 63 6b 65 74 20 23 31 36 35 30 3a 20 20 48  Ticket #1650:  H
6430: 6f 6e 6f 72 20 74 68 65 20 6e 42 79 74 65 73 20  onor the nBytes 
6440: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
6450: 69 74 65 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a  ite3_prepare..#.
6460: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6470: 35 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  5.1 {.  set sql 
6480: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
6490: 32 7d 0a 20 20 73 65 74 20 6e 62 79 74 65 73 20  2}.  set nbytes 
64a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
64b0: 73 71 6c 5d 0a 20 20 61 70 70 65 6e 64 20 73 71  sql].  append sq
64c0: 6c 20 7b 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a  l { WHERE a==1}.
64d0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
64e0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
64f0: 44 42 20 24 73 71 6c 20 24 6e 62 79 74 65 73 20  DB $sql $nbytes 
6500: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6510: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c  step $STMT.  sql
6520: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6530: 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f  $STMT 0.} {1}.do
6540: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e  _test capi3c-15.
6550: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6560: 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  ep $STMT.  sqlit
6570: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6580: 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  TMT 0.} {2}.do_t
6590: 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 33 20  est capi3c-15.3 
65a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
65b0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
65c0: 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65  LITE_OK}..# Make
65d0: 20 73 75 72 65 20 63 6f 64 65 20 69 73 20 61 6c   sure code is al
65e0: 77 61 79 73 20 67 65 6e 65 72 61 74 65 64 20 65  ways generated e
65f0: 76 65 6e 20 69 66 20 61 6e 20 49 46 20 45 58 49  ven if an IF EXI
6600: 53 54 53 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54  STS or .# IF NOT
6610: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
6620: 73 20 70 72 65 73 65 6e 74 20 74 68 61 74 20 74  s present that t
6630: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
6640: 74 20 6f 72 0a 23 20 64 6f 65 73 20 65 78 69 73  t or.# does exis
6650: 74 73 2e 20 20 54 68 61 74 20 77 61 79 20 77 65  ts.  That way we
6660: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 68 61 76   will always hav
6670: 65 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  e a prepared sta
6680: 74 65 6d 65 6e 74 0a 23 20 74 6f 20 65 78 70 69  tement.# to expi
6690: 72 65 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  re when the sche
66a0: 6d 61 20 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f  ma changes..#.do
66b0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 36 2e  _test capi3c-16.
66c0: 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 44  1 {.  set sql {D
66d0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
66e0: 53 54 53 20 74 33 7d 0a 20 20 73 65 74 20 53 54  STS t3}.  set ST
66f0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6700: 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20  are_v2 $DB $sql 
6710: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6720: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6730: 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21  T.  expr {$STMT!
6740: 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  =""}.} {1}.do_te
6750: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 32 20 7b  st capi3c-16.2 {
6760: 0a 20 20 73 65 74 20 73 71 6c 20 7b 43 52 45 41  .  set sql {CREA
6770: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
6780: 45 58 49 53 54 53 20 74 31 28 78 2c 79 29 7d 0a  EXISTS t1(x,y)}.
6790: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
67a0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
67b0: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
67c0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
67d0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
67e0: 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b   {$STMT!=""}.} {
67f0: 31 7d 0a 0a 23 20 42 75 74 20 73 74 69 6c 6c 20  1}..# But still 
6800: 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61  we do not genera
6810: 74 65 20 63 6f 64 65 20 69 66 20 74 68 65 72 65  te code if there
6820: 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f   is no SQL.#.do_
6830: 74 65 73 74 20 63 61 70 69 33 63 2d 31 36 2e 33  test capi3c-16.3
6840: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
6850: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6860: 32 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c  2 $DB {} -1 TAIL
6870: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6880: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
6890: 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20  r {$STMT==""}.} 
68a0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
68b0: 33 63 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20  3c-16.4 {.  set 
68c0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
68d0: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d  epare_v2 $DB {;}
68e0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
68f0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6900: 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54  MT.  expr {$STMT
6910: 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54  ==""}.} {1}..# T
6920: 69 63 6b 65 74 20 23 32 31 35 34 2e 0a 23 0a 64  icket #2154..#.d
6930: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6940: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
6950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6960: 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20  _v2 $DB {SELECT 
6970: 6d 61 78 28 61 29 20 46 52 4f 4d 20 74 32 7d 20  max(a) FROM t2} 
6980: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6990: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
69a0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
69b0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 32 20 7b  st capi3c-17.2 {
69c0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
69d0: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
69e0: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
69f0: 2d 31 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -17.3 {.  sqlite
6a00: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6a10: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6a20: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 34 20 7b  st capi3c-17.4 {
6a30: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6a40: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6a50: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
6a60: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 20 20 73 71  2 ON t2(a)}.  sq
6a70: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6a80: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6a90: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6aa0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  5 {.  sqlite3_co
6ab0: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6ac0: 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 4.do_test cap
6ad0: 69 33 63 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c  i3c-17.6 {.  sql
6ae0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6af0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
6b00: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6b10: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  7 {.  sqlite3_re
6b20: 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20 65  set $STMT.  db e
6b30: 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  val {DROP INDEX 
6b40: 69 32 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  i2}.  sqlite3_st
6b50: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6b60: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
6b70: 70 69 33 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71  pi3c-17.8 {.  sq
6b80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6b90: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
6ba0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 39  test capi3c-17.9
6bb0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
6bc0: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6bd0: 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61  _DONE.do_test ca
6be0: 70 69 33 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73  pi3c-17.10 {.  s
6bf0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6c00: 24 53 54 4d 54 0a 20 20 73 65 74 20 53 54 4d 54  $STMT.  set STMT
6c10: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6c20: 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54  e_v2 $DB {SELECT
6c30: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
6c40: 20 61 3d 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20   a=?} -1 TAIL]. 
6c50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
6c60: 74 20 24 53 54 4d 54 20 31 20 32 0a 20 20 64 62  t $STMT 1 2.  db
6c70: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45   eval {.    DELE
6c80: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
6c90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
6ca0: 41 4c 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a  ALUES(1,'one');.
6cb0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6cc0: 74 31 20 56 41 4c 55 45 53 28 32 2c 27 74 77 6f  t1 VALUES(2,'two
6cd0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
6ce0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
6cf0: 27 74 68 72 65 65 27 29 3b 0a 20 20 20 20 49 4e  'three');.    IN
6d00: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
6d10: 55 45 53 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20  UES(4,'four');. 
6d20: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   }.  sqlite3_ste
6d30: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6d40: 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70  _ROW.do_test cap
6d50: 69 33 63 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71  i3c-17.11 {.  sq
6d60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6d70: 74 20 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a  t $STMT 0.} two.
6d80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6d90: 37 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.12 {.  sqlite3
6da0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6db0: 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73  LITE_DONE.do_tes
6dc0: 74 20 63 61 70 69 33 63 2d 31 37 2e 31 33 20 7b  t capi3c-17.13 {
6dd0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6de0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6df0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
6e00: 31 20 4f 4e 20 74 31 28 61 29 7d 0a 20 20 73 71  1 ON t1(a)}.  sq
6e10: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6e20: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6e30: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6e40: 31 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  14 {.  sqlite3_c
6e50: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
6e60: 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74   0.} two.do_test
6e70: 20 63 61 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a   capi3c-17.15 {.
6e80: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6e90: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6ea0: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6eb0: 63 2d 31 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69  c-17.16 {.  sqli
6ec0: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6ed0: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
6ee0: 49 4e 44 45 58 20 69 31 7d 0a 20 20 73 71 6c 69  INDEX i1}.  sqli
6ef0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6f00: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74   SQLITE_ROW.do_t
6f10: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 37  est capi3c-17.17
6f20: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
6f30: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30  umn_text $STMT 0
6f40: 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63  .} two.do_test c
6f50: 61 70 69 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20  api3c-17.18 {.  
6f60: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6f70: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
6f80: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6f90: 31 37 2e 39 39 20 7b 0a 20 20 73 71 6c 69 74 65  17.99 {.  sqlite
6fa0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
6fb0: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20  .} SQLITE_OK..# 
6fc0: 4f 6e 20 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c  On the mailing l
6fd0: 69 73 74 20 69 74 20 68 61 73 20 62 65 65 6e 20  ist it has been 
6fe0: 72 65 70 6f 72 74 65 64 20 74 68 61 74 20 66 69  reported that fi
6ff0: 6e 61 6c 69 7a 69 6e 67 20 61 66 74 65 72 0a 23  nalizing after.#
7000: 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20   an SQLITE_BUSY 
7010: 72 65 74 75 72 6e 20 6c 65 61 64 73 20 74 6f 20  return leads to 
7020: 61 20 73 65 67 66 61 75 6c 74 2e 20 20 48 65 72  a segfault.  Her
7030: 65 20 77 65 20 74 65 73 74 20 74 68 61 74 20 63  e we test that c
7040: 61 73 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ase..#.do_test c
7050: 61 70 69 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73  api3c-18.1 {.  s
7060: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7070: 64 62 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  db.  set STMT [s
7080: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7090: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61  2 $DB {SELECT ma
70a0: 78 28 61 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31  x(a) FROM t1} -1
70b0: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
70c0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
70d0: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
70e0: 20 63 61 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20   capi3c-18.2 {. 
70f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7100: 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a  int $STMT 0.} 4.
7110: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7120: 38 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.3 {.  sqlite3_
7130: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62  reset $STMT.  db
7140: 32 20 65 76 61 6c 20 7b 42 45 47 49 4e 20 45 58  2 eval {BEGIN EX
7150: 43 4c 55 53 49 56 45 7d 0a 20 20 73 71 6c 69 74  CLUSIVE}.  sqlit
7160: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
7170: 53 51 4c 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74  SQLITE_BUSY.do_t
7180: 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 34 20  est capi3c-18.4 
7190: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
71a0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
71b0: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
71c0: 20 63 61 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20   capi3c-18.5 {. 
71d0: 20 64 62 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49   db2 eval {COMMI
71e0: 54 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d  T}.  db2 close.}
71f0: 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32   {}..# Ticket #2
7200: 31 35 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65  158.  The sqlite
7210: 33 5f 73 74 65 70 28 29 20 77 69 6c 6c 20 73 74  3_step() will st
7220: 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ill return SQLIT
7230: 45 5f 53 43 48 45 4d 41 0a 23 20 69 66 20 74 68  E_SCHEMA.# if th
7240: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7250: 61 20 63 68 61 6e 67 65 73 20 69 6e 20 61 20 77  a changes in a w
7260: 61 79 20 74 68 61 74 20 6d 61 6b 65 73 20 74 68  ay that makes th
7270: 65 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f  e statement.# no
7280: 20 6c 6f 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23   longer valid..#
7290: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
72a0: 31 39 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  19.1 {.  db eval
72b0: 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45 20 54   {.     CREATE T
72c0: 41 42 4c 45 20 74 33 28 78 2c 79 29 3b 0a 20 20  ABLE t3(x,y);.  
72d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
72e0: 33 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20  3 VALUES(1,2);. 
72f0: 20 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   }.  set STMT [s
7300: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7310: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a 20  2 $DB {SELECT * 
7320: 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c  FROM t3} -1 TAIL
7330: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
7340: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7350: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
7360: 33 63 2d 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-19.2 {.  sqli
7370: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
7380: 53 54 4d 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65  STMT 0.} 1.do_te
7390: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 33 20 7b  st capi3c-19.3 {
73a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
73b0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
73c0: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
73d0: 33 63 2d 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69  3c-19.4 {.  sqli
73e0: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
73f0: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
7400: 54 41 42 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69  TABLE t3}.  sqli
7410: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
7420: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f   SQLITE_ERROR.do
7430: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
7440: 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.1 {.  sqlite3_
7450: 65 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f  errmsg $DB.} {no
7460: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 33 7d   such table: t3}
7470: 0a 69 66 63 61 70 61 62 6c 65 20 64 65 70 72 65  .ifcapable depre
7480: 63 61 74 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73  cated {.  do_tes
7490: 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 32 20  t capi3c-19.4.2 
74a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  {.    sqlite3_ex
74b0: 70 69 72 65 64 20 24 53 54 4d 54 0a 20 20 7d 20  pired $STMT.  } 
74c0: 31 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  1.}.do_test capi
74d0: 33 63 2d 31 39 2e 34 2e 33 20 7b 0a 20 20 73 71  3c-19.4.3 {.  sq
74e0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42  lite3_errmsg $DB
74f0: 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  .} {no such tabl
7500: 65 3a 20 74 33 7d 0a 69 66 63 61 70 61 62 6c 65  e: t3}.ifcapable
7510: 20 64 65 70 72 65 63 61 74 65 64 20 7b 0a 20 20   deprecated {.  
7520: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7530: 39 2e 34 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69  9.4.4 {.    sqli
7540: 74 65 33 5f 65 78 70 69 72 65 64 20 30 0a 20 20  te3_expired 0.  
7550: 7d 20 31 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } 1.}.do_test ca
7560: 70 69 33 63 2d 31 39 2e 35 20 7b 0a 20 20 73 71  pi3c-19.5 {.  sq
7570: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
7580: 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  T.  db eval {.  
7590: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
75a0: 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e  t3(x,y);.     IN
75b0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
75c0: 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20  UES(1,2);.  }.  
75d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
75e0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
75f0: 69 66 63 61 70 61 62 6c 65 20 64 65 70 72 65 63  ifcapable deprec
7600: 61 74 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ated {.  do_test
7610: 20 63 61 70 69 33 63 2d 31 39 2e 35 2e 32 20 7b   capi3c-19.5.2 {
7620: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70  .    sqlite3_exp
7630: 69 72 65 64 20 24 53 54 4d 54 0a 20 20 7d 20 30  ired $STMT.  } 0
7640: 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .}.do_test capi3
7650: 63 2d 31 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74  c-19.6 {.  sqlit
7660: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
7670: 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73  TMT 1.} 2.do_tes
7680: 74 20 63 61 70 69 33 63 2d 31 39 2e 39 39 20 7b  t capi3c-19.99 {
7690: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
76a0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  ize $STMT.} SQLI
76b0: 54 45 5f 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75  TE_OK..# Make su
76c0: 72 65 20 61 20 63 68 61 6e 67 65 20 69 6e 20 61  re a change in a
76d0: 20 73 65 70 61 72 61 74 65 20 64 61 74 61 62 61   separate databa
76e0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
76f0: 65 73 20 6e 6f 74 0a 23 20 63 61 75 73 65 20 61  es not.# cause a
7700: 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
7710: 72 65 74 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73  return..#.do_tes
7720: 74 20 63 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a  t capi3c-20.1 {.
7730: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7740: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7750: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7760: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7770: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
7780: 74 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20  t.db.  db2 eval 
7790: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34  {CREATE TABLE t4
77a0: 28 78 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  (x)}.  sqlite3_s
77b0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
77c0: 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63  TE_ROW.do_test c
77d0: 61 70 69 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73  api3c-20.2 {.  s
77e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
77f0: 74 20 24 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f  t $STMT 1.} 2.do
7800: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e  _test capi3c-20.
7810: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  3 {.  sqlite3_st
7820: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
7830: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
7840: 61 70 69 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64  api3c-20.4 {.  d
7850: 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  b2 close.  sqlit
7860: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
7870: 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23  T.} SQLITE_OK..#
7880: 20 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74   Test that sqlit
7890: 65 33 5f 73 74 65 70 28 29 20 73 65 74 73 20 74  e3_step() sets t
78a0: 68 65 20 64 61 74 61 62 61 73 65 20 65 72 72 6f  he database erro
78b0: 72 20 63 6f 64 65 20 63 6f 72 72 65 63 74 6c 79  r code correctly
78c0: 2e 0a 23 20 53 65 65 20 74 69 63 6b 65 74 20 23  ..# See ticket #
78d0: 32 34 39 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c  2497..#.ifcapabl
78e0: 65 20 70 72 6f 67 72 65 73 73 20 7b 0a 20 20 64  e progress {.  d
78f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31  o_test capi3c-21
7900: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d  .1 {.    set STM
7910: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7920: 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43  re_v2 $DB {SELEC
7930: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20  T * FROM t3} -1 
7940: 54 41 49 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f  TAIL].    db pro
7950: 67 72 65 73 73 20 35 20 22 65 78 70 72 20 31 22  gress 5 "expr 1"
7960: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
7970: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
7980: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
7990: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
79a0: 32 31 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  21.2 {.    sqlit
79b0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
79c0: 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c  ode $DB.  } {SQL
79d0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
79e0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
79f0: 32 31 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74  21.3 {.    sqlit
7a00: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
7a10: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e  T.  } {SQLITE_IN
7a20: 54 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65  TERRUPT}.  do_te
7a30: 73 74 20 63 61 70 69 33 63 2d 32 31 2e 34 20 7b  st capi3c-21.4 {
7a40: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
7a50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
7a60: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7a70: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7a80: 20 20 20 64 62 20 70 72 6f 67 72 65 73 73 20 35     db progress 5
7a90: 20 22 65 78 70 72 20 31 22 0a 20 20 20 20 73 71   "expr 1".    sq
7aa0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
7ab0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
7ac0: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
7ad0: 70 69 33 63 2d 32 31 2e 35 20 7b 0a 20 20 20 20  pi3c-21.5 {.    
7ae0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
7af0: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
7b00: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
7b10: 20 63 61 70 69 33 63 2d 32 31 2e 36 20 7b 0a 20   capi3c-21.6 {. 
7b20: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
7b30: 69 7a 65 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  ize $STMT.  } {S
7b40: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d  QLITE_INTERRUPT}
7b50: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7b60: 63 2d 32 31 2e 37 20 7b 0a 20 20 20 20 73 71 6c  c-21.7 {.    sql
7b70: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
7b80: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7b90: 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73  ERRUPT}.  do_tes
7ba0: 74 20 63 61 70 69 33 63 2d 32 31 2e 38 20 7b 0a  t capi3c-21.8 {.
7bb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
7bc0: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
7bd0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7be0: 45 52 52 55 50 54 7d 0a 7d 0a 0a 23 20 4d 61 6b  ERRUPT}.}..# Mak
7bf0: 65 20 73 75 72 65 20 73 71 6c 69 74 65 33 5f 72  e sure sqlite3_r
7c00: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65  esult_error_code
7c10: 28 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 63  () returns the c
7c20: 6f 72 72 65 63 74 20 65 72 72 6f 72 20 63 6f 64  orrect error cod
7c30: 65 2e 0a 23 20 53 65 65 20 74 69 63 6b 65 74 20  e..# See ticket 
7c40: 23 32 39 34 30 0a 23 0a 64 6f 5f 74 65 73 74 20  #2940.#.do_test 
7c50: 63 61 70 69 33 63 2d 32 32 2e 31 20 7b 0a 20 20  capi3c-22.1 {.  
7c60: 64 62 20 70 72 6f 67 72 65 73 73 20 30 20 7b 7d  db progress 0 {}
7c70: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
7c80: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
7c90: 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f  db {SELECT test_
7ca0: 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61  error('the messa
7cb0: 67 65 27 2c 33 29 7d 20 2d 31 20 54 41 49 4c 5d  ge',3)} -1 TAIL]
7cc0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7cd0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
7ce0: 50 45 52 4d 7d 0a 73 71 6c 69 74 65 33 5f 66 69  PERM}.sqlite3_fi
7cf0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f  nalize $STMT.do_
7d00: 74 65 73 74 20 63 61 70 69 33 63 2d 32 32 2e 32  test capi3c-22.2
7d10: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7d20: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7d30: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73  2 db {SELECT tes
7d40: 74 5f 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73  t_error('the mes
7d50: 73 61 67 65 27 2c 34 29 7d 20 2d 31 20 54 41 49  sage',4)} -1 TAI
7d60: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
7d70: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
7d80: 45 5f 41 42 4f 52 54 7d 0a 73 71 6c 69 74 65 33  E_ABORT}.sqlite3
7d90: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7da0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7db0: 32 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  2.3 {.  set STMT
7dc0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7dd0: 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43 54 20  e_v2 db {SELECT 
7de0: 74 65 73 74 5f 65 72 72 6f 72 28 27 74 68 65 20  test_error('the 
7df0: 6d 65 73 73 61 67 65 27 2c 31 36 29 7d 20 2d 31  message',16)} -1
7e00: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7e10: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
7e20: 51 4c 49 54 45 5f 45 4d 50 54 59 7d 0a 73 71 6c  QLITE_EMPTY}.sql
7e30: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
7e40: 54 4d 54 0a 0a 23 20 46 6f 72 20 61 20 6d 75 6c  TMT..# For a mul
7e50: 74 69 2d 63 6f 6c 75 6d 6e 20 72 65 73 75 6c 74  ti-column result
7e60: 20 73 65 74 20 77 68 65 72 65 20 74 68 65 20 73   set where the s
7e70: 61 6d 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  ame table column
7e80: 20 69 73 20 72 65 70 65 61 74 65 64 0a 23 20 69   is repeated.# i
7e90: 6e 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d  n multiple colum
7ea0: 6e 73 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  ns of the output
7eb0: 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 64 6f  , verify that do
7ec0: 69 6e 67 20 61 20 55 54 46 2d 38 20 74 6f 20 55  ing a UTF-8 to U
7ed0: 54 46 2d 31 36 0a 23 20 63 6f 6e 76 65 72 73 69  TF-16.# conversi
7ee0: 6f 6e 20 28 6f 72 20 76 69 63 65 20 76 65 72 73  on (or vice vers
7ef0: 61 29 20 6f 6e 20 6f 6e 65 20 63 6f 6c 75 6d 6e  a) on one column
7f00: 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65   does not change
7f10: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 23 20   the value of.# 
7f20: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 23 0a 69 66  the second..#.if
7f30: 63 61 70 61 62 6c 65 20 75 74 66 31 36 20 7b 0a  capable utf16 {.
7f40: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
7f50: 2d 32 33 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  -23.1 {.    set 
7f60: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7f70: 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c  epare_v2 db {SEL
7f80: 45 43 54 20 62 2c 62 2c 62 2c 62 20 46 52 4f 4d  ECT b,b,b,b FROM
7f90: 20 74 31 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1} -1 TAIL].  
7fa0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7fb0: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
7fc0: 5f 52 4f 57 7d 0a 20 20 64 6f 5f 74 65 73 74 20  _ROW}.  do_test 
7fd0: 63 61 70 69 33 63 2d 32 33 2e 32 20 7b 0a 20 20  capi3c-23.2 {.  
7fe0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
7ff0: 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 30 0a  _text16 $STMT 0.
8000: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
8010: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 31 0a  mn_text $STMT 1.
8020: 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74    } {one}.  do_t
8030: 65 73 74 20 63 61 70 69 33 63 2d 32 33 2e 33 20  est capi3c-23.3 
8040: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  {.    sqlite3_co
8050: 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d  lumn_text16 $STM
8060: 54 20 32 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  T 2.    sqlite3_
8070: 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d  column_text $STM
8080: 54 20 33 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20  T 3.  } {one}.  
8090: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
80a0: 20 24 53 54 4d 54 0a 20 20 64 6f 5f 74 65 73 74   $STMT.  do_test
80b0: 20 63 61 70 69 33 63 2d 32 33 2e 34 20 7b 0a 20   capi3c-23.4 {. 
80c0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
80d0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
80e0: 64 62 20 7b 53 45 4c 45 43 54 20 62 7c 7c 27 78  db {SELECT b||'x
80f0: 27 2c 62 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d  ',b,b,b FROM t1}
8100: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
8110: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
8120: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  .  } {SQLITE_ROW
8130: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
8140: 33 63 2d 32 33 2e 35 20 7b 0a 20 20 20 20 73 71  3c-23.5 {.    sq
8150: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
8160: 74 31 36 20 24 53 54 4d 54 20 30 0a 20 20 20 20  t16 $STMT 0.    
8170: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8180: 65 78 74 20 24 53 54 4d 54 20 31 0a 20 20 7d 20  ext $STMT 1.  } 
8190: 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {one}.  do_test 
81a0: 63 61 70 69 33 63 2d 32 33 2e 36 20 7b 0a 20 20  capi3c-23.6 {.  
81b0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
81c0: 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 32 0a  _text16 $STMT 2.
81d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
81e0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 33 0a  mn_text $STMT 3.
81f0: 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69    } {one}.  sqli
8200: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
8210: 4d 54 0a 7d 0a 0a 23 20 54 65 73 74 20 64 65 63  MT.}..# Test dec
8220: 6c 74 79 70 65 20 6f 6e 20 73 6f 6d 65 20 53 45  ltype on some SE
8230: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
8240: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 73 75 62  that contain sub
8250: 2d 73 65 6c 65 63 74 73 2e 0a 23 0a 70 72 6f 63  -selects..#.proc
8260: 20 64 65 63 6c 74 79 70 65 20 7b 7a 53 71 6c 7d   decltype {zSql}
8270: 20 7b 0a 20 20 73 65 74 20 72 65 74 20 5b 6c 69   {.  set ret [li
8280: 73 74 5d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  st].  set STMT [
8290: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
82a0: 76 32 20 64 62 20 24 7a 53 71 6c 20 2d 31 20 54  v2 db $zSql -1 T
82b0: 41 49 4c 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  AIL].  for {set 
82c0: 69 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69  i 0} {$i < [sqli
82d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
82e0: 20 24 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69   $STMT]} {incr i
82f0: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
8300: 72 65 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ret [sqlite3_col
8310: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54  umn_decltype $ST
8320: 4d 54 20 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c  MT $i].  }.  sql
8330: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
8340: 54 4d 54 0a 20 20 72 65 74 75 72 6e 20 24 72 65  TMT.  return $re
8350: 74 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  t.}.do_test capi
8360: 33 63 2d 32 34 2e 31 20 7b 0a 20 20 65 78 65 63  3c-24.1 {.  exec
8370: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42  sql { CREATE TAB
8380: 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52 2c  LE t5(a INTEGER,
8390: 20 62 20 53 54 52 49 4e 47 2c 20 63 20 44 41 54   b STRING, c DAT
83a0: 45 54 49 4d 45 29 20 7d 0a 20 20 64 65 63 6c 74  ETIME) }.  declt
83b0: 79 70 65 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  ype {SELECT * FR
83c0: 4f 4d 20 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45  OM t5}.} {INTEGE
83d0: 52 20 53 54 52 49 4e 47 20 44 41 54 45 54 49 4d  R STRING DATETIM
83e0: 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  E}.do_test capi3
83f0: 63 2d 32 34 2e 32 20 7b 0a 20 20 64 65 63 6c 74  c-24.2 {.  declt
8400: 79 70 65 20 7b 53 45 4c 45 43 54 20 28 53 45 4c  ype {SELECT (SEL
8410: 45 43 54 20 63 29 20 46 52 4f 4d 20 74 35 7d 0a  ECT c) FROM t5}.
8420: 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f  } {DATETIME}.do_
8430: 74 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 33  test capi3c-24.3
8440: 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53   {.  decltype {S
8450: 45 4c 45 43 54 20 28 53 45 4c 45 43 54 20 2a 20  ELECT (SELECT * 
8460: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 29 29  FROM (SELECT c))
8470: 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54   FROM t5}.} {DAT
8480: 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63  ETIME}.do_test c
8490: 61 70 69 33 63 2d 32 34 2e 34 20 7b 0a 20 20 64  api3c-24.4 {.  d
84a0: 65 63 6c 74 79 70 65 20 7b 53 45 4c 45 43 54 20  ecltype {SELECT 
84b0: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a  * FROM (SELECT *
84c0: 20 46 52 4f 4d 20 74 35 20 4f 52 44 45 52 20 42   FROM t5 ORDER B
84d0: 59 20 63 20 4c 49 4d 49 54 20 31 29 20 4f 52 44  Y c LIMIT 1) ORD
84e0: 45 52 20 42 59 20 62 7d 0a 7d 20 7b 49 4e 54 45  ER BY b}.} {INTE
84f0: 47 45 52 20 53 54 52 49 4e 47 20 44 41 54 45 54  GER STRING DATET
8500: 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  IME}.do_test cap
8510: 69 33 63 2d 32 34 2e 35 20 7b 0a 20 20 64 65 63  i3c-24.5 {.  dec
8520: 6c 74 79 70 65 20 7b 0a 20 20 20 20 53 45 4c 45  ltype {.    SELE
8530: 43 54 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f  CT (SELECT x FRO
8540: 4d 20 28 53 45 4c 45 43 54 20 63 20 41 53 20 78  M (SELECT c AS x
8550: 29 29 20 0a 20 20 20 20 46 52 4f 4d 20 28 53 45  )) .    FROM (SE
8560: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f  LECT * FROM t5 O
8570: 52 44 45 52 20 42 59 20 63 20 4c 49 4d 49 54 20  RDER BY c LIMIT 
8580: 31 29 20 4f 52 44 45 52 20 42 59 20 62 0a 20 20  1) ORDER BY b.  
8590: 7d 0a 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64  }.} {DATETIME}.d
85a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 34  o_test capi3c-24
85b0: 2e 33 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20  .3 {.  decltype 
85c0: 7b 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54 20  {SELECT (SELECT 
85d0: 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 74  x FROM (SELECT t
85e0: 35 2e 61 20 41 53 20 78 29 29 20 46 52 4f 4d 20  5.a AS x)) FROM 
85f0: 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 7d 0a  t5}.} {INTEGER}.
8600: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.