/ Hex Artifact Content
Login

Artifact 0b089837ee65a17dd73ea171c4dee5d7ea79dabb:


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: 31 33 20 32 30 30 37 2f 31 32 2f 31 33 20 32 31  13 2007/12/13 21
0240: 3a 35 34 3a 31 31 20 64 72 68 20 45 78 70 20 24  :54:11 drh Exp $
0250: 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20  .#..set testdir 
0260: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0270: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0280: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0290: 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65 20 55  ..# Return the U
02a0: 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74 61  TF-16 representa
02b0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 70 70  tion of the supp
02c0: 6c 69 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  lied UTF-8 strin
02d0: 67 20 24 73 74 72 2e 0a 23 20 49 66 20 24 6e 74  g $str..# If $nt
02e0: 20 69 73 20 74 72 75 65 2c 20 61 70 70 65 6e 64   is true, append
02f0: 20 74 77 6f 20 30 78 30 30 20 62 79 74 65 73 20   two 0x00 bytes 
0300: 61 73 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  as a nul termina
0310: 74 6f 72 2e 0a 70 72 6f 63 20 75 74 66 31 36 20  tor..proc utf16 
0320: 7b 73 74 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20  {str {nt 1}} {. 
0330: 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67   set r [encoding
0340: 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f   convertto unico
0350: 64 65 20 24 73 74 72 5d 0a 20 20 69 66 20 7b 24  de $str].  if {$
0360: 6e 74 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e 64  nt} {.    append
0370: 20 72 20 22 5c 78 30 30 5c 78 30 30 22 0a 20 20   r "\x00\x00".  
0380: 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a  }.  return $r.}.
0390: 0a 23 20 52 65 74 75 72 6e 20 74 68 65 20 55 54  .# Return the UT
03a0: 46 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69  F-8 representati
03b0: 6f 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  on of the suppli
03c0: 65 64 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  ed UTF-16 string
03d0: 20 24 73 74 72 2e 20 0a 70 72 6f 63 20 75 74 66   $str. .proc utf
03e0: 38 20 7b 73 74 72 7d 20 7b 0a 20 20 23 20 49 66  8 {str} {.  # If
03f0: 20 24 73 74 72 20 65 6e 64 73 20 69 6e 20 74 77   $str ends in tw
0400: 6f 20 30 78 30 30 20 30 78 30 30 20 62 79 74 65  o 0x00 0x00 byte
0410: 73 2c 20 6b 6e 6f 63 6b 20 74 68 65 73 65 20 6f  s, knock these o
0420: 66 66 20 62 65 66 6f 72 65 0a 20 20 23 20 63 6f  ff before.  # co
0430: 6e 76 65 72 74 69 6e 67 20 74 6f 20 55 54 46 2d  nverting to UTF-
0440: 38 20 75 73 69 6e 67 20 54 43 4c 2e 0a 20 20 62  8 using TCL..  b
0450: 69 6e 61 72 79 20 73 63 61 6e 20 24 73 74 72 20  inary scan $str 
0460: 5c 63 2a 20 76 61 6c 73 0a 20 20 69 66 20 7b 5b  \c* vals.  if {[
0470: 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65 6e 64  lindex $vals end
0480: 5d 3d 3d 30 20 26 26 20 5b 6c 69 6e 64 65 78 20  ]==0 && [lindex 
0490: 24 76 61 6c 73 20 65 6e 64 2d 31 5d 3d 3d 30 7d  $vals end-1]==0}
04a0: 20 7b 0a 20 20 20 20 73 65 74 20 73 74 72 20 5b   {.    set str [
04b0: 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 5c 63  binary format \c
04c0: 2a 20 5b 6c 72 61 6e 67 65 20 24 76 61 6c 73 20  * [lrange $vals 
04d0: 30 20 65 6e 64 2d 32 5d 5d 0a 20 20 7d 0a 0a 20  0 end-2]].  }.. 
04e0: 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67   set r [encoding
04f0: 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69   convertfrom uni
0500: 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 72 65 74  code $str].  ret
0510: 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 68 65 73  urn $r.}..# Thes
0520: 65 20 74 65 73 74 73 20 63 6f 6d 70 6c 65 6d 65  e tests compleme
0530: 6e 74 20 74 68 6f 73 65 20 69 6e 20 63 61 70 69  nt those in capi
0540: 32 2e 74 65 73 74 2e 20 54 68 65 79 20 61 72 65  2.test. They are
0550: 20 6f 72 67 61 6e 69 7a 65 64 0a 23 20 61 73 20   organized.# as 
0560: 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63 61 70  follows:.#.# cap
0570: 69 33 63 2d 31 2e 2a 3a 20 54 65 73 74 20 73 71  i3c-1.*: Test sq
0580: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
0590: 20 0a 23 20 63 61 70 69 33 63 2d 32 2e 2a 3a 20   .# capi3c-2.*: 
05a0: 54 65 73 74 20 73 71 6c 69 74 65 33 5f 70 72 65  Test sqlite3_pre
05b0: 70 61 72 65 31 36 5f 76 32 20 0a 23 20 63 61 70  pare16_v2 .# cap
05c0: 69 33 63 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71  i3c-3.*: Test sq
05d0: 6c 69 74 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70  lite3_open.# cap
05e0: 69 33 63 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71  i3c-4.*: Test sq
05f0: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63  lite3_open16.# c
0600: 61 70 69 33 63 2d 35 2e 2a 3a 20 54 65 73 74 20  api3c-5.*: Test 
0610: 74 68 65 20 76 61 72 69 6f 75 73 20 73 71 6c 69  the various sqli
0620: 74 65 33 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49  te3_result_* API
0630: 73 0a 23 20 63 61 70 69 33 63 2d 36 2e 2a 3a 20  s.# capi3c-6.*: 
0640: 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74 65  Test that sqlite
0650: 33 5f 63 6c 6f 73 65 20 66 61 69 6c 73 20 69 66  3_close fails if
0660: 20 74 68 65 72 65 20 61 72 65 20 6f 75 74 73 74   there are outst
0670: 61 6e 64 69 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73  anding VMs..#..s
0680: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
0690: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
06a0: 72 20 64 62 5d 0a 0a 64 6f 5f 74 65 73 74 20 63  r db]..do_test c
06b0: 61 70 69 33 63 2d 31 2e 30 20 7b 0a 20 20 73 71  api3c-1.0 {.  sq
06c0: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
06d0: 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f  mmit $DB.} 1.do_
06e0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 2e 31 20  test capi3c-1.1 
06f0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
0700: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
0710: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d   $DB {SELECT nam
0720: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
0730: 73 74 65 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  ster} -1 TAIL]. 
0740: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0750: 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41  e $STMT.  set TA
0760: 49 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  IL.} {}.do_test 
0770: 63 61 70 69 33 63 2d 31 2e 32 20 7b 0a 20 20 73  capi3c-1.2 {.  s
0780: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
0790: 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  DB.} {SQLITE_OK}
07a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
07b0: 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.3 {.  sqlite3_
07c0: 65 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f  errmsg $DB.} {no
07d0: 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74  t an error}.do_t
07e0: 65 73 74 20 63 61 70 69 33 63 2d 31 2e 34 20 7b  est capi3c-1.4 {
07f0: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
0800: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0810: 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43  ite_master;SELEC
0820: 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54 4d 54  T 10}.  set STMT
0830: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0840: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
0850: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
0860: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
0870: 20 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45    set TAIL.} {SE
0880: 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73 74  LECT 10}.do_test
0890: 20 63 61 70 69 33 63 2d 31 2e 35 20 7b 0a 20 20   capi3c-1.5 {.  
08a0: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
08b0: 6e 61 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74  namex FROM sqlit
08c0: 65 5f 6d 61 73 74 65 72 7d 0a 20 20 63 61 74 63  e_master}.  catc
08d0: 68 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54  h {.    set STMT
08e0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
08f0: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
0900: 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b 31 7d   TAIL].  }.} {1}
0910: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
0920: 31 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.6 {.  sqlite3_
0930: 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53  errcode $DB.} {S
0940: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
0950: 74 65 73 74 20 63 61 70 69 33 63 2d 31 2e 37 20  test capi3c-1.7 
0960: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
0970: 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75 63  sg $DB.} {no suc
0980: 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d  h column: namex}
0990: 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  ..ifcapable {utf
09a0: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
09b0: 63 61 70 69 33 63 2d 32 2e 31 20 7b 0a 20 20 20  capi3c-2.1 {.   
09c0: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
09d0: 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  6 {SELECT name F
09e0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
09f0: 72 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54  r}].    set STMT
0a00: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0a10: 65 31 36 5f 76 32 20 20 24 44 42 20 24 73 71 6c  e16_v2  $DB $sql
0a20: 31 36 20 2d 31 20 3a 3a 54 41 49 4c 5d 0a 20 20  16 -1 ::TAIL].  
0a30: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
0a40: 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 75 74 66  ze $STMT.    utf
0a50: 38 20 24 3a 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d  8 $::TAIL.  } {}
0a60: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
0a70: 63 2d 32 2e 32 20 7b 0a 20 20 20 20 73 65 74 20  c-2.2 {.    set 
0a80: 73 71 6c 20 5b 75 74 66 31 36 20 7b 53 45 4c 45  sql [utf16 {SELE
0a90: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0aa0: 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43  ite_master;SELEC
0ab0: 54 20 31 30 7d 5d 0a 20 20 20 20 73 65 74 20 53  T 10}].    set S
0ac0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
0ad0: 70 61 72 65 31 36 5f 76 32 20 20 24 44 42 20 24  pare16_v2  $DB $
0ae0: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20  sql -1 TAIL].   
0af0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0b00: 65 20 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38  e $STMT.    utf8
0b10: 20 24 54 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45   $TAIL.  } {SELE
0b20: 43 54 20 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74  CT 10}.  do_test
0b30: 20 63 61 70 69 33 63 2d 32 2e 33 20 7b 0a 20 20   capi3c-2.3 {.  
0b40: 20 20 73 65 74 20 73 71 6c 20 5b 75 74 66 31 36    set sql [utf16
0b50: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 78 20 46   {SELECT namex F
0b60: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0b70: 72 7d 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 0a  r}].    catch {.
0b80: 20 20 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b        set STMT [
0b90: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
0ba0: 36 5f 76 32 20 20 24 44 42 20 24 73 71 6c 20 2d  6_v2  $DB $sql -
0bb0: 31 20 54 41 49 4c 5d 0a 20 20 20 20 7d 0a 20 20  1 TAIL].    }.  
0bc0: 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {1}.  do_test 
0bd0: 63 61 70 69 33 63 2d 32 2e 34 20 7b 0a 20 20 20  capi3c-2.4 {.   
0be0: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
0bf0: 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45   $DB.  } {SQLITE
0c00: 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73  _ERROR}.  do_tes
0c10: 74 20 63 61 70 69 33 63 2d 32 2e 35 20 7b 0a 20  t capi3c-2.5 {. 
0c20: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
0c30: 67 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75  g $DB.  } {no su
0c40: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0c50: 7d 0a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73  }..  ifcapable s
0c60: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
0c70: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0c80: 33 63 2d 32 2e 36 20 7b 0a 20 20 20 20 20 20 65  3c-2.6 {.      e
0c90: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
0ca0: 41 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65 28 78  ABLE tablename(x
0cb0: 29 7d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c  )}.      set sql
0cc0: 31 36 20 5b 75 74 66 31 36 20 7b 50 52 41 47 4d  16 [utf16 {PRAGM
0cd0: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61  A table_info("Ta
0ce0: 62 6c 65 4e 61 6d 65 22 29 7d 5d 0a 20 20 20 20  bleName")}].    
0cf0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
0d00: 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32  te3_prepare16_v2
0d10: 20 20 24 44 42 20 24 73 71 6c 31 36 20 2d 31 20    $DB $sql16 -1 
0d20: 54 41 49 4c 5d 0a 20 20 20 20 20 20 73 71 6c 69  TAIL].      sqli
0d30: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
0d40: 20 20 20 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a     } SQLITE_ROW.
0d50: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0d60: 33 63 2d 32 2e 37 20 7b 0a 20 20 20 20 20 20 73  3c-2.7 {.      s
0d70: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
0d80: 54 0a 20 20 20 20 7d 20 53 51 4c 49 54 45 5f 44  T.    } SQLITE_D
0d90: 4f 4e 45 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  ONE.    do_test 
0da0: 63 61 70 69 33 63 2d 32 2e 38 20 7b 0a 20 20 20  capi3c-2.8 {.   
0db0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
0dc0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 7d 20  ize $STMT.    } 
0dd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d  SQLITE_OK.  }..}
0de0: 20 3b 23 20 65 6e 64 69 66 20 75 74 66 31 36 0a   ;# endif utf16.
0df0: 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65  .# rename sqlite
0e00: 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 6f  3_open sqlite3_o
0e10: 70 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f 63 20 73  pen_old.# proc s
0e20: 71 6c 69 74 65 33 5f 6f 70 65 6e 20 7b 66 6e 61  qlite3_open {fna
0e30: 6d 65 20 6f 70 74 69 6f 6e 73 7d 20 7b 73 71 6c  me options} {sql
0e40: 69 74 65 33 5f 6f 70 65 6e 5f 6e 65 77 20 24 66  ite3_open_new $f
0e50: 6e 61 6d 65 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a  name $options}..
0e60: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33  do_test capi3c-3
0e70: 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20 5b  .1 {.  set db2 [
0e80: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74 65 73  sqlite3_open tes
0e90: 74 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c 69 74  t.db {}].  sqlit
0ea0: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
0eb0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20  } {SQLITE_OK}.# 
0ec0: 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74  FIX ME: Should t
0ed0: 65 73 74 20 74 68 65 20 64 62 20 68 61 6e 64 6c  est the db handl
0ee0: 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74  e works..do_test
0ef0: 20 63 61 70 69 33 63 2d 33 2e 32 20 7b 0a 20 20   capi3c-3.2 {.  
0f00: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
0f10: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
0f20: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
0f30: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a  3.3 {.  catch {.
0f40: 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c      set db2 [sql
0f50: 69 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67 75 73  ite3_open /bogus
0f60: 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 20 7b 7d  /path/test.db {}
0f70: 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ].  }.  sqlite3_
0f80: 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b  errcode $db2.} {
0f90: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d  SQLITE_CANTOPEN}
0fa0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
0fb0: 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.4 {.  sqlite3_
0fc0: 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 75  errmsg $db2.} {u
0fd0: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
0fe0: 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f  tabase file}.do_
0ff0: 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 35 20  test capi3c-3.5 
1000: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
1010: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1020: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
1030: 69 33 63 2d 33 2e 36 2e 31 2d 6d 69 73 75 73 65  i3c-3.6.1-misuse
1040: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
1050: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
1060: 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73  E_MISUSE}.do_tes
1070: 74 20 63 61 70 69 33 63 2d 33 2e 36 2e 32 2d 6d  t capi3c-3.6.2-m
1080: 69 73 75 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  isuse {.  sqlite
1090: 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20  3_errmsg $db2.} 
10a0: 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65  {library routine
10b0: 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73   called out of s
10c0: 65 71 75 65 6e 63 65 7d 0a 69 66 63 61 70 61 62  equence}.ifcapab
10d0: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64  le {utf16} {.  d
10e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e  o_test capi3c-3.
10f0: 36 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20  6.3-misuse {.   
1100: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65   utf8 [sqlite3_e
1110: 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 20 20  rrmsg16 $db2].  
1120: 7d 20 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69  } {library routi
1130: 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66  ne called out of
1140: 20 73 65 71 75 65 6e 63 65 7d 0a 7d 0a 0a 23 20   sequence}.}..# 
1150: 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f  rename sqlite3_o
1160: 70 65 6e 20 22 22 0a 23 20 72 65 6e 61 6d 65 20  pen "".# rename 
1170: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64  sqlite3_open_old
1180: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a 0a 69   sqlite3_open..i
1190: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
11a0: 20 7b 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   {.do_test capi3
11b0: 63 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20 64 62  c-4.1 {.  set db
11c0: 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  2 [sqlite3_open1
11d0: 36 20 5b 75 74 66 31 36 20 74 65 73 74 2e 64 62  6 [utf16 test.db
11e0: 5d 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f  ] {}].  sqlite3_
11f0: 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b  errcode $db2.} {
1200: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58  SQLITE_OK}.# FIX
1210: 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74   ME: Should test
1220: 20 74 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77   the db handle w
1230: 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61  orks..do_test ca
1240: 70 69 33 63 2d 34 2e 32 20 7b 0a 20 20 73 71 6c  pi3c-4.2 {.  sql
1250: 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a  ite3_close $db2.
1260: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
1270: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e 33  _test capi3c-4.3
1280: 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20   {.  catch {.   
1290: 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65   set db2 [sqlite
12a0: 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20  3_open16 [utf16 
12b0: 2f 62 6f 67 75 73 2f 70 61 74 68 2f 74 65 73 74  /bogus/path/test
12c0: 2e 64 62 5d 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73  .db] {}].  }.  s
12d0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
12e0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 41  db2.} {SQLITE_CA
12f0: 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73 74 20  NTOPEN}.do_test 
1300: 63 61 70 69 33 63 2d 34 2e 34 20 7b 0a 20 20 75  capi3c-4.4 {.  u
1310: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72  tf8 [sqlite3_err
1320: 6d 73 67 31 36 20 24 64 62 32 5d 0a 7d 20 7b 75  msg16 $db2].} {u
1330: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
1340: 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f  tabase file}.do_
1350: 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e 35 20  test capi3c-4.5 
1360: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
1370: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1380: 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66 31 36 0a  _OK}.} ;# utf16.
1390: 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20  .# This proc is 
13a0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
13b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63   following API c
13c0: 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65  alls:.#.# sqlite
13d0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23  3_column_count.#
13e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
13f0: 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63  name.# sqlite3_c
1400: 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a 23 20 73  olumn_name16.# s
1410: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1420: 63 6c 74 79 70 65 0a 23 20 73 71 6c 69 74 65 33  cltype.# sqlite3
1430: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1440: 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20  16.#.# $STMT is 
1450: 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73  a compiled SQL s
1460: 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20  tatement. $test 
1470: 69 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f  is a prefix.# to
1480: 20 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61   use for test na
1490: 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20  mes within this 
14a0: 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20  proc. $names is 
14b0: 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20  a list.# of the 
14c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
14d0: 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75  t should be retu
14e0: 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23  rned by $STMT..#
14f0: 20 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61   $decltypes is a
1500: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   list of column 
1510: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
1520: 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23  s for $STMT..#.#
1530: 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65   Example:.#.# se
1540: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
1550: 70 72 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45  prepare_v2 "SELE
1560: 43 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20  CT 1, 2, 2;" -1 
1570: 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68  DUMMY].# check_h
1580: 65 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31  eader test1.1 {1
1590: 20 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d   2 3} {"" "" ""}
15a0: 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68 65  .#.proc check_he
15b0: 61 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20  ader {STMT test 
15c0: 6e 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73 7d  names decltypes}
15d0: 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20   {..  # Use the 
15e0: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
15f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
1600: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
1610: 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f    # a list of co
1620: 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e  lumn indexes. i.
1630: 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f  e. If sqlite3_co
1640: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69  lumn_count.  # i
1650: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
1660: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73  ist {0 1 2}..  s
1670: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
1680: 73 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d 63  st].  set ::numc
1690: 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ols [sqlite3_col
16a0: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d  umn_count $STMT]
16b0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
16c0: 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c   {$i < $::numcol
16d0: 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70  s} {incr i} {lap
16e0: 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24  pend ::idxlist $
16f0: 69 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e  i}..  # Column n
1700: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
1710: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 20  do_test $test.1 
1720: 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c  {.    set cnamel
1730: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66  ist [list].    f
1740: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
1750: 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65  t {lappend cname
1760: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
1770: 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20  lumn_name $STMT 
1780: 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e  $i]} .    set cn
1790: 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d  amelist.  } $nam
17a0: 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e  es..  # Column n
17b0: 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ames in UTF-16. 
17c0: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
17d0: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
17e0: 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20 20   $test.2 {.     
17f0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
1800: 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65  list].      fore
1810: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
1820: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
1830: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
1840: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1850: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
1860: 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  ]].      }.     
1870: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
1880: 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a     } $names.  }.
1890: 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65  .  # Column name
18a0: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f  s in UTF-8.  do_
18b0: 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20  test $test.3 {. 
18c0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
18d0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
18e0: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
18f0: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
1900: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
1910: 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d  n_name $STMT $i]
1920: 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65  } .    set cname
1930: 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a  list.  } $names.
1940: 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65  .  # Column name
1950: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66  s in UTF-16.  if
1960: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1970: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
1980: 65 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73 65  est.4 {.      se
1990: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
19a0: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
19b0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
19c0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
19d0: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
19e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
19f0: 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a  me16 $STMT $i]].
1a00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65        }.      se
1a10: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
1a20: 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20  } $names.  }..  
1a30: 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  # Column names i
1a40: 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73  n UTF-8.  do_tes
1a50: 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20 20  t $test.5 {.    
1a60: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1a70: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
1a80: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
1a90: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
1aa0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1ab0: 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 69  ecltype $STMT $i
1ac0: 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d  ]} .    set cnam
1ad0: 65 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c 74  elist.  } $declt
1ae0: 79 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e  ypes..  # Column
1af0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
1b00: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69  es in UTF-16.  i
1b10: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
1b20: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24   {.    do_test $
1b30: 74 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20 73  test.6 {.      s
1b40: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1b50: 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  st].      foreac
1b60: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
1b70: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
1b80: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
1b90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1ba0: 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20  ecltype16 $STMT 
1bb0: 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20  $i]].      }.   
1bc0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1bd0: 0a 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70 65  .    } $decltype
1be0: 73 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73 74  s.  }...  # Test
1bf0: 20 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61 6e   some out of ran
1c00: 67 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20  ge conditions:. 
1c10: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
1c20: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
1c30: 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20 20   $test.7 {.     
1c40: 20 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20 20   list \.        
1c50: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1c60: 6e 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c  name $STMT -1] \
1c70: 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65  .        [sqlite
1c80: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20  3_column_name16 
1c90: 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20  $STMT -1] \.    
1ca0: 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c      [sqlite3_col
1cb0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54  umn_decltype $ST
1cc0: 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20  MT -1] \.       
1cd0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1ce0: 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d  _decltype16 $STM
1cf0: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1d00: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1d10: 6e 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d 63  name $STMT $numc
1d20: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
1d30: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1d40: 61 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d  ame16 $STMT $num
1d50: 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20  cols] \.        
1d60: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1d70: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24  decltype $STMT $
1d80: 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20  numcols] \.     
1d90: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1da0: 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53  mn_decltype16 $S
1db0: 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20  TMT $numcols].  
1dc0: 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d    } {{} {} {} {}
1dd0: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20   {} {} {} {}}.  
1de0: 7d 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72 6f  }.} ..# This pro
1df0: 63 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  c is used to tes
1e00: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
1e10: 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73  API calls:.#.# s
1e20: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
1e30: 69 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69  igin_name.# sqli
1e40: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
1e50: 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74  n_name16.# sqlit
1e60: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
1e70: 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63  name.# sqlite3_c
1e80: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
1e90: 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  16.# sqlite3_col
1ea0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
1eb0: 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e.# sqlite3_colu
1ec0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1ed0: 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20  16.#.# $STMT is 
1ee0: 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73  a compiled SQL s
1ef0: 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20  tatement. $test 
1f00: 69 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f  is a prefix.# to
1f10: 20 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61   use for test na
1f20: 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20  mes within this 
1f30: 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20  proc. $names is 
1f40: 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20  a list.# of the 
1f50: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
1f60: 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75  t should be retu
1f70: 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23  rned by $STMT..#
1f80: 20 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61   $decltypes is a
1f90: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   list of column 
1fa0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
1fb0: 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23  s for $STMT..#.#
1fc0: 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65   Example:.#.# se
1fd0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
1fe0: 70 72 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45  prepare_v2 "SELE
1ff0: 43 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20  CT 1, 2, 2;" -1 
2000: 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68  DUMMY].# check_h
2010: 65 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31  eader test1.1 {1
2020: 20 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d   2 3} {"" "" ""}
2030: 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72  .#.proc check_or
2040: 69 67 69 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d  igin_header {STM
2050: 54 20 74 65 73 74 20 64 62 73 20 74 61 62 6c 65  T test dbs table
2060: 73 20 63 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66  s cols} {.  # If
2070: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2080: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e  origin_name() an
2090: 64 20 66 72 69 65 6e 64 73 20 61 72 65 20 6e 6f  d friends are no
20a0: 74 20 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a  t compiled into.
20b0: 20 20 23 20 74 68 69 73 20 62 75 69 6c 64 2c 20    # this build, 
20c0: 74 68 69 73 20 70 72 6f 63 20 69 73 20 61 20 6e  this proc is a n
20d0: 6f 2d 6f 70 2e 0a 69 66 63 61 70 61 62 6c 65 20  o-op..ifcapable 
20e0: 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b  columnmetadata {
20f0: 0a 0a 20 20 20 20 23 20 55 73 65 20 74 68 65 20  ..    # Use the 
2100: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2110: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2120: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2130: 20 20 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20      # a list of 
2140: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20  column indexes. 
2150: 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f  i.e. If sqlite3_
2160: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20  column_count.   
2170: 20 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74   # is 3, build t
2180: 68 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e  he list {0 1 2}.
2190: 0a 20 20 20 20 73 65 74 20 3a 3a 69 64 78 6c 69  .    set ::idxli
21a0: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65  st [list].    se
21b0: 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c  t ::numcols [sql
21c0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
21d0: 74 20 24 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72  t $STMT].    for
21e0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
21f0: 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   $::numcols} {in
2200: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2210: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a  :idxlist $i}.  .
2220: 20 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e      # Database n
2230: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
2240: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2250: 38 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  8 {.      set cn
2260: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2270: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2280: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2290: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
22a0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
22b0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
22c0: 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20  e $STMT $i].    
22d0: 20 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63    } .      set c
22e0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24  namelist.    } $
22f0: 64 62 73 0a 20 20 0a 20 20 20 20 23 20 44 61 74  dbs.  .    # Dat
2300: 61 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55  abase names in U
2310: 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61  TF-16.    ifcapa
2320: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
2330: 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73      do_test $tes
2340: 74 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 73 65  t.9 {.        se
2350: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
2360: 74 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  t].        forea
2370: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
2380: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
2390: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66  d cnamelist [utf
23a0: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
23b0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
23c0: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
23d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
23e0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
23f0: 20 20 20 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a     } $dbs.    }.
2400: 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e    .    # Table n
2410: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
2420: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2430: 31 30 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  10 {.      set c
2440: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2450: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2460: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2470: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
2480: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
2490: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20  lumn_table_name 
24a0: 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20  $STMT $i].      
24b0: 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61  } .      set cna
24c0: 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 74 61  melist.    } $ta
24d0: 62 6c 65 73 0a 20 20 0a 20 20 20 20 23 20 54 61  bles.  .    # Ta
24e0: 62 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46  ble names in UTF
24f0: 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c  -16.    ifcapabl
2500: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
2510: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2520: 31 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  11 {.        set
2530: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
2540: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
2550: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
2560: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2570: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
2580: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2590: 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53  _table_name16 $S
25a0: 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20  TMT $i]].       
25b0: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   }.        set c
25c0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d  namelist.      }
25d0: 20 24 74 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20   $tables.    }. 
25e0: 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 6e   .    # Origin n
25f0: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
2600: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
2610: 31 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  12 {.      set c
2620: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2630: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2640: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2650: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
2660: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
2670: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
2680: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20   $STMT $i].     
2690: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e   } .      set cn
26a0: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 63  amelist.    } $c
26b0: 6f 6c 73 0a 20 20 0a 20 20 20 20 23 20 4f 72 69  ols.  .    # Ori
26c0: 67 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  gin declaration 
26d0: 74 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  types in UTF-16.
26e0: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75      ifcapable {u
26f0: 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f  tf16} {.      do
2700: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b  _test $test.13 {
2710: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61  .        set cna
2720: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
2730: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
2740: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
2750: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
2760: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
2770: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2780: 67 69 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  gin_name16 $STMT
2790: 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a   $i]].        }.
27a0: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
27b0: 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 63  elist.      } $c
27c0: 6f 6c 73 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  ols.    }.  }.}.
27d0: 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20  .# This proc is 
27e0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
27f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a   following APIs:
2800: 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 64 61 74  .#.# sqlite3_dat
2810: 61 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65  a_count.# sqlite
2820: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20  3_column_type.# 
2830: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
2840: 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt.# sqlite3_col
2850: 75 6d 6e 5f 74 65 78 74 0a 23 20 73 71 6c 69 74  umn_text.# sqlit
2860: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
2870: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2880: 6e 5f 64 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54  n_double.#.# $ST
2890: 4d 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64  MT is a compiled
28a0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66   SQL statement f
28b0: 6f 72 20 77 68 69 63 68 20 74 68 65 20 70 72 65  or which the pre
28c0: 76 69 6f 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f  vious call .# to
28d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 72 65   sqlite3_step re
28e0: 74 75 72 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f  turned SQLITE_RO
28f0: 57 2e 20 24 74 65 73 74 20 69 73 20 61 20 70 72  W. $test is a pr
2900: 65 66 69 78 20 74 6f 20 75 73 65 20 0a 23 20 66  efix to use .# f
2910: 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69  or test names wi
2920: 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20  thin this proc. 
2930: 24 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74  $types is a list
2940: 20 6f 66 20 74 68 65 20 0a 23 20 6d 61 6e 69 66   of the .# manif
2950: 65 73 74 20 74 79 70 65 73 20 66 6f 72 20 74 68  est types for th
2960: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 24  e current row. $
2970: 69 6e 74 73 2c 20 24 64 6f 75 62 6c 65 73 20 61  ints, $doubles a
2980: 6e 64 20 24 73 74 72 69 6e 67 73 0a 23 20 61 72  nd $strings.# ar
2990: 65 20 6c 69 73 74 73 20 6f 66 20 74 68 65 20 69  e lists of the i
29a0: 6e 74 65 67 65 72 2c 20 72 65 61 6c 20 61 6e 64  nteger, real and
29b0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
29c0: 74 61 74 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65  tations of.# the
29d0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
29e0: 75 72 72 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20  urrent row..#.# 
29f0: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
2a00: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
2a10: 72 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43  repare_v2 "SELEC
2a20: 54 20 27 68 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20  T 'hello', 1.1, 
2a30: 4e 55 4c 4c 22 20 2d 31 20 44 55 4d 4d 59 5d 0a  NULL" -1 DUMMY].
2a40: 23 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24  # sqlite3_step $
2a50: 53 54 4d 54 0a 23 20 63 68 65 63 6b 5f 64 61 74  STMT.# check_dat
2a60: 61 20 74 65 73 74 31 2e 32 20 7b 54 45 58 54 20  a test1.2 {TEXT 
2a70: 52 45 41 4c 20 4e 55 4c 4c 7d 20 7b 30 20 31 20  REAL NULL} {0 1 
2a80: 30 7d 20 7b 30 20 31 2e 31 20 30 7d 20 7b 68 65  0} {0 1.1 0} {he
2a90: 6c 6c 6f 20 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72  llo 1.1 {}}.#.pr
2aa0: 6f 63 20 63 68 65 63 6b 5f 64 61 74 61 20 7b 53  oc check_data {S
2ab0: 54 4d 54 20 74 65 73 74 20 74 79 70 65 73 20 69  TMT test types i
2ac0: 6e 74 73 20 64 6f 75 62 6c 65 73 20 73 74 72 69  nts doubles stri
2ad0: 6e 67 73 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20  ngs} {..  # Use 
2ae0: 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
2af0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   of sqlite3_colu
2b00: 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75  mn_count() to bu
2b10: 69 6c 64 0a 20 20 23 20 61 20 6c 69 73 74 20 6f  ild.  # a list o
2b20: 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
2b30: 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65  . i.e. If sqlite
2b40: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20  3_column_count. 
2b50: 20 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74   # is 3, build t
2b60: 68 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e  he list {0 1 2}.
2b70: 0a 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74  .  set ::idxlist
2b80: 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 6e 75   [list].  set nu
2b90: 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 64  mcols [sqlite3_d
2ba0: 61 74 61 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d  ata_count $STMT]
2bb0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
2bc0: 20 7b 24 69 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d   {$i < $numcols}
2bd0: 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65   {incr i} {lappe
2be0: 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d  nd ::idxlist $i}
2bf0: 0a 0a 23 20 74 79 70 65 73 0a 64 6f 5f 74 65 73  ..# types.do_tes
2c00: 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20 73 65  t $test.1 {.  se
2c10: 74 20 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20  t types [list]. 
2c20: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2c30: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70  ist {lappend typ
2c40: 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  es [sqlite3_colu
2c50: 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69  mn_type $STMT $i
2c60: 5d 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d  ]}.  set types.}
2c70: 20 24 74 79 70 65 73 0a 0a 23 20 49 6e 74 65 67   $types..# Integ
2c80: 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ers.do_test $tes
2c90: 74 2e 32 20 7b 0a 20 20 73 65 74 20 69 6e 74 73  t.2 {.  set ints
2ca0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
2cb0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
2cc0: 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69  ppend ints [sqli
2cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
2ce0: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
2cf0: 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a  t ints.} $ints..
2d00: 23 20 62 79 74 65 73 0a 73 65 74 20 6c 65 6e 73  # bytes.set lens
2d10: 20 5b 6c 69 73 74 5d 0a 66 6f 72 65 61 63 68 20   [list].foreach 
2d20: 69 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20  i $::idxlist {. 
2d30: 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b 73   lappend lens [s
2d40: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69  tring length [li
2d50: 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24 69  ndex $strings $i
2d60: 5d 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65  ]].}.do_test $te
2d70: 73 74 2e 33 20 7b 0a 20 20 73 65 74 20 62 79 74  st.3 {.  set byt
2d80: 65 73 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20  es [list].  set 
2d90: 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  lens [list].  fo
2da0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
2db0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 62   {.    lappend b
2dc0: 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ytes [sqlite3_co
2dd0: 6c 75 6d 6e 5f 62 79 74 65 73 20 24 53 54 4d 54  lumn_bytes $STMT
2de0: 20 24 69 5d 0a 20 20 7d 0a 20 20 73 65 74 20 62   $i].  }.  set b
2df0: 79 74 65 73 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20  ytes.} $lens..# 
2e00: 62 79 74 65 73 31 36 0a 69 66 63 61 70 61 62 6c  bytes16.ifcapabl
2e10: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 73 65  e {utf16} {.  se
2e20: 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20  t lens [list].  
2e30: 66 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64 78  foreach i $::idx
2e40: 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70 65  list {.    lappe
2e50: 6e 64 20 6c 65 6e 73 20 5b 65 78 70 72 20 32 20  nd lens [expr 2 
2e60: 2a 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  * [string length
2e70: 20 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e 67   [lindex $string
2e80: 73 20 24 69 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f  s $i]]].  }.  do
2e90: 5f 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b 0a  _test $test.4 {.
2ea0: 20 20 20 20 73 65 74 20 62 79 74 65 73 20 5b 6c      set bytes [l
2eb0: 69 73 74 5d 0a 20 20 20 20 73 65 74 20 6c 65 6e  ist].    set len
2ec0: 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  s [list].    for
2ed0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2ee0: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
2ef0: 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  bytes [sqlite3_c
2f00: 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 24 53  olumn_bytes16 $S
2f10: 54 4d 54 20 24 69 5d 0a 20 20 20 20 7d 0a 20 20  TMT $i].    }.  
2f20: 20 20 73 65 74 20 62 79 74 65 73 0a 20 20 7d 20    set bytes.  } 
2f30: 24 6c 65 6e 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a  $lens.}..# Blob.
2f40: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35 20  do_test $test.5 
2f50: 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69  {.  set utf8 [li
2f60: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
2f70: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
2f80: 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f  d utf8 [sqlite3_
2f90: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d  column_blob $STM
2fa0: 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66  T $i]}.  set utf
2fb0: 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20  8.} $strings..# 
2fc0: 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74  UTF-8.do_test $t
2fd0: 65 73 74 2e 36 20 7b 0a 20 20 73 65 74 20 75 74  est.6 {.  set ut
2fe0: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
2ff0: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3000: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3010: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
3020: 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  t $STMT $i]}.  s
3030: 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e  et utf8.} $strin
3040: 67 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f  gs..# Floats.do_
3050: 74 65 73 74 20 24 74 65 73 74 2e 37 20 7b 0a 20  test $test.7 {. 
3060: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
3070: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3080: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
3090: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
30a0: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
30b0: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
30c0: 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55  .} $doubles..# U
30d0: 54 46 2d 31 36 0a 69 66 63 61 70 61 62 6c 65 20  TF-16.ifcapable 
30e0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74  {utf16} {.  do_t
30f0: 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a 20 20  est $test.8 {.  
3100: 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74    set utf8 [list
3110: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ].    foreach i 
3120: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3130: 64 20 75 74 66 38 20 5b 75 74 66 38 20 5b 73 71  d utf8 [utf8 [sq
3140: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
3150: 74 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 7d 0a  t16 $STMT $i]]}.
3160: 20 20 20 20 73 65 74 20 75 74 66 38 0a 20 20 7d      set utf8.  }
3170: 20 24 73 74 72 69 6e 67 73 0a 7d 0a 0a 23 20 49   $strings.}..# I
3180: 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74 20  ntegers.do_test 
3190: 24 74 65 73 74 2e 39 20 7b 0a 20 20 73 65 74 20  $test.9 {.  set 
31a0: 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  ints [list].  fo
31b0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
31c0: 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20 5b   {lappend ints [
31d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
31e0: 6e 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20  nt $STMT $i]}.  
31f0: 73 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73  set ints.} $ints
3200: 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65  ..# Floats.do_te
3210: 73 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20 20  st $test.10 {.  
3220: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
3230: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3240: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
3250: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
3260: 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54 20  mn_double $STMT 
3270: 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a  $i]}.  set utf8.
3280: 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54  } $doubles..# UT
3290: 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  F-8.do_test $tes
32a0: 74 2e 31 31 20 7b 0a 20 20 73 65 74 20 75 74 66  t.11 {.  set utf
32b0: 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  8 [list].  forea
32c0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
32d0: 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c  append utf8 [sql
32e0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
32f0: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3300: 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67  t utf8.} $string
3310: 73 0a 0a 23 20 54 79 70 65 73 0a 64 6f 5f 74 65  s..# Types.do_te
3320: 73 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20 20  st $test.12 {.  
3330: 73 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74 5d  set types [list]
3340: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3350: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 74  xlist {lappend t
3360: 79 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ypes [sqlite3_co
3370: 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54 20  lumn_type $STMT 
3380: 24 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65 73  $i]}.  set types
3390: 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20 54 65 73  .} $types..# Tes
33a0: 74 20 74 68 61 74 20 61 6e 20 6f 75 74 20 6f 66  t that an out of
33b0: 20 72 61 6e 67 65 20 72 65 71 75 65 73 74 20 72   range request r
33c0: 65 74 75 72 6e 73 20 74 68 65 20 65 71 75 69 76  eturns the equiv
33d0: 61 6c 65 6e 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f  alent of NULL.do
33e0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b  _test $test.13 {
33f0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
3400: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 2d 31 0a 7d  n_int $STMT -1.}
3410: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65   {0}.do_test $te
3420: 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  st.13 {.  sqlite
3430: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
3440: 54 4d 54 20 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a  TMT -1.} {}..}..
3450: 69 66 63 61 70 61 62 6c 65 20 21 66 6c 6f 61 74  ifcapable !float
3460: 69 6e 67 70 6f 69 6e 74 20 7b 0a 20 20 66 69 6e  ingpoint {.  fin
3470: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
3480: 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70  n.}..do_test cap
3490: 69 33 63 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63  i3c-5.0 {.  exec
34a0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
34b0: 20 54 41 42 4c 45 20 74 31 28 61 20 56 41 52 49   TABLE t1(a VARI
34c0: 4e 54 2c 20 62 20 42 4c 4f 42 2c 20 63 20 56 41  NT, b BLOB, c VA
34d0: 52 43 48 41 52 28 31 36 29 29 3b 0a 20 20 20 20  RCHAR(16));.    
34e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
34f0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
3500: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3510: 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  t1 VALUES('one',
3520: 20 27 74 77 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20   'two', NULL);. 
3530: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3540: 31 20 56 41 4c 55 45 53 28 31 2e 32 2c 20 31 2e  1 VALUES(1.2, 1.
3550: 33 2c 20 31 2e 34 29 3b 0a 20 20 7d 0a 20 20 73  3, 1.4);.  }.  s
3560: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 2a  et sql "SELECT *
3570: 20 46 52 4f 4d 20 74 31 22 0a 20 20 73 65 74 20   FROM t1".  set 
3580: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
3590: 65 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71  epare_v2 $DB $sq
35a0: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  l -1 TAIL].  sql
35b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
35c0: 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65  t $STMT.} 3..che
35d0: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
35e0: 63 61 70 69 33 63 2d 35 2e 31 20 7b 61 20 62 20  capi3c-5.1 {a b 
35f0: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3600: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3610: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3620: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3630: 31 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69  1 {main main mai
3640: 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61  n} {t1 t1 t1} {a
3650: 20 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61   b c}.do_test ca
3660: 70 69 33 63 2d 35 2e 32 20 7b 0a 20 20 73 71 6c  pi3c-5.2 {.  sql
3670: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3680: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68  } SQLITE_ROW..ch
3690: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
36a0: 20 63 61 70 69 33 63 2d 35 2e 33 20 7b 61 20 62   capi3c-5.3 {a b
36b0: 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42   c} {VARINT BLOB
36c0: 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68   VARCHAR(16)}.ch
36d0: 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65  eck_origin_heade
36e0: 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  r $STMT capi3c-5
36f0: 2e 33 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .3 {main main ma
3700: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3710: 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74  a b c}.check_dat
3720: 61 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  a $STMT capi3c-5
3730: 2e 34 20 7b 49 4e 54 45 47 45 52 20 49 4e 54 45  .4 {INTEGER INTE
3740: 47 45 52 20 54 45 58 54 7d 20 7b 31 20 32 20 33  GER TEXT} {1 2 3
3750: 7d 20 7b 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20  } {1.0 2.0 3.0} 
3760: 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74  {1 2 3}..do_test
3770: 20 63 61 70 69 33 63 2d 35 2e 35 20 7b 0a 20 20   capi3c-5.5 {.  
3780: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3790: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
37a0: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
37b0: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 36 20 7b  TMT capi3c-5.6 {
37c0: 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42  a b c} {VARINT B
37d0: 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d  LOB VARCHAR(16)}
37e0: 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65  .check_origin_he
37f0: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3800: 63 2d 35 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e  c-5.6 {main main
3810: 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31   main} {t1 t1 t1
3820: 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f  } {a b c}.check_
3830: 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33  data $STMT capi3
3840: 63 2d 35 2e 37 20 7b 54 45 58 54 20 54 45 58 54  c-5.7 {TEXT TEXT
3850: 20 4e 55 4c 4c 7d 20 7b 30 20 30 20 30 7d 20 7b   NULL} {0 0 0} {
3860: 30 2e 30 20 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e  0.0 0.0 0.0} {on
3870: 65 20 74 77 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65  e two {}}..do_te
3880: 73 74 20 63 61 70 69 33 63 2d 35 2e 38 20 7b 0a  st capi3c-5.8 {.
3890: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
38a0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
38b0: 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20  W..check_header 
38c0: 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 39  $STMT capi3c-5.9
38d0: 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54   {a b c} {VARINT
38e0: 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36   BLOB VARCHAR(16
38f0: 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f  )}.check_origin_
3900: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3910: 69 33 63 2d 35 2e 39 20 7b 6d 61 69 6e 20 6d 61  i3c-5.9 {main ma
3920: 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20  in main} {t1 t1 
3930: 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63  t1} {a b c}.chec
3940: 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70  k_data $STMT cap
3950: 69 33 63 2d 35 2e 31 30 20 7b 46 4c 4f 41 54 20  i3c-5.10 {FLOAT 
3960: 46 4c 4f 41 54 20 54 45 58 54 7d 20 7b 31 20 31  FLOAT TEXT} {1 1
3970: 20 31 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34   1} {1.2 1.3 1.4
3980: 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 0a  } {1.2 1.3 1.4}.
3990: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
39a0: 35 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  5.11 {.  sqlite3
39b0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
39c0: 4c 49 54 45 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65  LITE_DONE..do_te
39d0: 73 74 20 63 61 70 69 33 63 2d 35 2e 31 32 20 7b  st capi3c-5.12 {
39e0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
39f0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  ize $STMT.} SQLI
3a00: 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63  TE_OK..do_test c
3a10: 61 70 69 33 63 2d 35 2e 32 30 20 7b 0a 20 20 73  api3c-5.20 {.  s
3a20: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61  et sql "SELECT a
3a30: 2c 20 73 75 6d 28 62 29 2c 20 6d 61 78 28 63 29  , sum(b), max(c)
3a40: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
3a50: 59 20 61 22 0a 20 20 73 65 74 20 53 54 4d 54 20  Y a".  set STMT 
3a60: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
3a70: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
3a80: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
3a90: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54  column_count $ST
3aa0: 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65  MT.} 3..check_he
3ab0: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3ac0: 63 2d 35 2e 32 31 20 7b 61 20 73 75 6d 28 62 29  c-5.21 {a sum(b)
3ad0: 20 6d 61 78 28 63 29 7d 20 7b 56 41 52 49 4e 54   max(c)} {VARINT
3ae0: 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72   {} {}}.check_or
3af0: 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d  igin_header $STM
3b00: 54 20 63 61 70 69 33 63 2d 35 2e 32 32 20 7b 6d  T capi3c-5.22 {m
3b10: 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b  ain {} {}} {t1 {
3b20: 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a  } {}} {a {} {}}.
3b30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35  do_test capi3c-5
3b40: 2e 32 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .23 {.  sqlite3_
3b50: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
3b60: 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74   SQLITE_OK...set
3b70: 20 3a 3a 45 4e 43 20 5b 65 78 65 63 73 71 6c 20   ::ENC [execsql 
3b80: 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67  {pragma encoding
3b90: 7d 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f  }].db close..do_
3ba0: 74 65 73 74 20 63 61 70 69 33 63 2d 36 2e 30 20  test capi3c-6.0 
3bb0: 7b 0a 62 74 72 65 65 5f 62 72 65 61 6b 70 6f 69  {.btree_breakpoi
3bc0: 6e 74 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  nt.  sqlite3 db 
3bd0: 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 44 42  test.db.  set DB
3be0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
3bf0: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
3c00: 0a 62 74 72 65 65 5f 62 72 65 61 6b 70 6f 69 6e  .btree_breakpoin
3c10: 74 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20  t.  sqlite3_key 
3c20: 24 44 42 20 78 79 7a 7a 79 0a 20 20 73 65 74 20  $DB xyzzy.  set 
3c30: 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52  sql {SELECT a FR
3c40: 4f 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20 72  OM t1 order by r
3c50: 6f 77 69 64 7d 0a 20 20 73 65 74 20 53 54 4d 54  owid}.  set STMT
3c60: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
3c70: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
3c80: 20 54 41 49 4c 5d 0a 20 20 65 78 70 72 20 30 0a   TAIL].  expr 0.
3c90: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } {0}.do_test ca
3ca0: 70 69 33 63 2d 36 2e 31 20 7b 0a 20 20 64 62 20  pi3c-6.1 {.  db 
3cb0: 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71  cache flush.  sq
3cc0: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a  lite3_close $DB.
3cd0: 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 7d 0a  } {SQLITE_BUSY}.
3ce0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36  do_test capi3c-6
3cf0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
3d00: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
3d10: 49 54 45 5f 52 4f 57 7d 0a 63 68 65 63 6b 5f 64  ITE_ROW}.check_d
3d20: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63  ata $STMT capi3c
3d30: 2d 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20 7b  -6.3 {INTEGER} {
3d40: 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f  1} {1.0} {1}.do_
3d50: 74 65 73 74 20 63 61 70 69 33 63 2d 36 2e 33 20  test capi3c-6.3 
3d60: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
3d70: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
3d80: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
3d90: 20 63 61 70 69 33 63 2d 36 2e 34 20 7b 0a 20 20   capi3c-6.4 {.  
3da0: 64 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20  db cache flush. 
3db0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
3dc0: 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  DB.} {SQLITE_OK}
3dd0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
3de0: 36 2e 39 39 2d 6d 69 73 75 73 65 20 7b 0a 20 20  6.99-misuse {.  
3df0: 64 62 20 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 69  db close.} {}..i
3e00: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
3e10: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
3e20: 54 65 73 74 20 77 68 61 74 20 68 61 70 70 65 6e  Test what happen
3e30: 73 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61  s when the libra
3e40: 72 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  ry encounters a 
3e50: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
3e60: 74 2e 0a 20 20 23 20 44 6f 20 74 68 69 73 20 62  t..  # Do this b
3e70: 79 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 66  y updating the f
3e80: 69 6c 65 20 66 6f 72 6d 61 74 20 76 69 61 20 74  ile format via t
3e90: 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 0a  he btree layer..
3ea0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
3eb0: 2d 37 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 3a  -7.1 {.    set :
3ec0: 3a 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20  :bt [btree_open 
3ed0: 74 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20  test.db 10 0].  
3ee0: 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72    btree_begin_tr
3ef0: 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a  ansaction $::bt.
3f00: 20 20 20 20 73 65 74 20 6d 65 74 61 20 5b 62 74      set meta [bt
3f10: 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a  ree_get_meta $::
3f20: 62 74 5d 0a 20 20 20 20 6c 73 65 74 20 6d 65 74  bt].    lset met
3f30: 61 20 32 20 35 0a 20 20 20 20 65 76 61 6c 20 5b  a 2 5.    eval [
3f40: 63 6f 6e 63 61 74 20 62 74 72 65 65 5f 75 70 64  concat btree_upd
3f50: 61 74 65 5f 6d 65 74 61 20 24 3a 3a 62 74 20 5b  ate_meta $::bt [
3f60: 6c 72 61 6e 67 65 20 24 6d 65 74 61 20 30 20 65  lrange $meta 0 e
3f70: 6e 64 5d 5d 0a 20 20 20 20 62 74 72 65 65 5f 63  nd]].    btree_c
3f80: 6f 6d 6d 69 74 20 24 3a 3a 62 74 0a 20 20 20 20  ommit $::bt.    
3f90: 62 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62  btree_close $::b
3fa0: 74 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  t.  } {}.  do_te
3fb0: 73 74 20 63 61 70 69 33 63 2d 37 2e 32 20 7b 0a  st capi3c-7.2 {.
3fc0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
3fd0: 65 73 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68  est.db.    catch
3fe0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
3ff0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4000: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4010: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
4020: 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d  ed file format}}
4030: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69  .  db close.}..i
4040: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
4050: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
4060: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
4070: 65 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63  e library correc
4080: 74 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75  tly handles bogu
4090: 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  s entries in the
40a0: 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74  .  # sqlite_mast
40b0: 65 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61  er table (schema
40c0: 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20   corruption)..  
40d0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38  do_test capi3c-8
40e0: 2e 31 20 7b 0a 20 20 20 20 66 69 6c 65 20 64 65  .1 {.    file de
40f0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4100: 2e 64 62 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  .db.    file del
4110: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force test.
4120: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73  db-journal.    s
4130: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4140: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
4150: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
4160: 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a  LE t1(a);.    }.
4170: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d      db close.  }
4180: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
4190: 70 69 33 63 2d 38 2e 32 20 7b 0a 20 20 20 20 73  pi3c-8.2 {.    s
41a0: 65 74 20 3a 3a 62 74 20 5b 62 74 72 65 65 5f 6f  et ::bt [btree_o
41b0: 70 65 6e 20 74 65 73 74 2e 64 62 20 31 30 20 30  pen test.db 10 0
41c0: 5d 0a 20 20 20 20 62 74 72 65 65 5f 62 65 67 69  ].    btree_begi
41d0: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a  n_transaction $:
41e0: 3a 62 74 0a 20 20 20 20 73 65 74 20 3a 3a 62 63  :bt.    set ::bc
41f0: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
4200: 3a 3a 62 74 20 31 20 31 5d 0a 0a 20 20 20 20 23  ::bt 1 1]..    #
4210: 20 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64   Build a 5-field
4220: 20 72 6f 77 20 72 65 63 6f 72 64 20 63 6f 6e 73   row record cons
4230: 69 73 74 69 6e 67 20 6f 66 20 35 20 6e 75 6c 6c  isting of 5 null
4240: 20 72 65 63 6f 72 64 73 2e 20 54 68 69 73 20 69   records. This i
4250: 73 0a 20 20 20 20 23 20 6f 66 66 69 63 69 61 6c  s.    # official
4260: 6c 79 20 62 6c 61 63 6b 20 6d 61 67 69 63 2e 0a  ly black magic..
4270: 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74      catch {unset
4280: 20 64 61 74 61 7d 0a 20 20 20 20 73 65 74 20 64   data}.    set d
4290: 61 74 61 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d  ata [binary form
42a0: 61 74 20 63 36 20 7b 36 20 30 20 30 20 30 20 30  at c6 {6 0 0 0 0
42b0: 20 30 7d 5d 0a 20 20 20 20 62 74 72 65 65 5f 69   0}].    btree_i
42c0: 6e 73 65 72 74 20 24 3a 3a 62 63 20 35 20 24 64  nsert $::bc 5 $d
42d0: 61 74 61 0a 0a 20 20 20 20 62 74 72 65 65 5f 63  ata..    btree_c
42e0: 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62  lose_cursor $::b
42f0: 63 0a 20 20 20 20 62 74 72 65 65 5f 63 6f 6d 6d  c.    btree_comm
4300: 69 74 20 24 3a 3a 62 74 0a 20 20 20 20 62 74 72  it $::bt.    btr
4310: 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74 0a 20  ee_close $::bt. 
4320: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
4330: 63 61 70 69 33 63 2d 38 2e 33 20 7b 0a 20 20 20  capi3c-8.3 {.   
4340: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
4350: 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c  .db.    catchsql
4360: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4370: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4380: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4390: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
43a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 7d 7d 0a  tabase schema}}.
43b0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
43c0: 2d 38 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 3a  -8.4 {.    set :
43d0: 3a 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20  :bt [btree_open 
43e0: 74 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20  test.db 10 0].  
43f0: 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72    btree_begin_tr
4400: 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a  ansaction $::bt.
4410: 20 20 20 20 73 65 74 20 3a 3a 62 63 20 5b 62 74      set ::bc [bt
4420: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 74  ree_cursor $::bt
4430: 20 31 20 31 5d 0a 20 20 0a 20 20 20 20 23 20 42   1 1].  .    # B
4440: 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72  uild a 5-field r
4450: 6f 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 66  ow record. The f
4460: 69 72 73 74 20 66 69 65 6c 64 20 69 73 20 61 20  irst field is a 
4470: 73 74 72 69 6e 67 20 27 74 61 62 6c 65 27 2c 20  string 'table', 
4480: 61 6e 64 0a 20 20 20 20 23 20 73 75 62 73 65 71  and.    # subseq
4490: 75 65 6e 74 20 66 69 65 6c 64 73 20 61 72 65 20  uent fields are 
44a0: 61 6c 6c 20 4e 55 4c 4c 2e 20 52 65 70 6c 61 63  all NULL. Replac
44b0: 65 20 74 68 65 20 6f 74 68 65 72 20 62 72 6f 6b  e the other brok
44c0: 65 6e 20 72 65 63 6f 72 64 20 77 69 74 68 0a 20  en record with. 
44d0: 20 20 20 23 20 74 68 69 73 20 6f 6e 65 20 61 6e     # this one an
44e0: 64 20 74 72 79 20 74 6f 20 72 65 61 64 20 74 68  d try to read th
44f0: 65 20 73 63 68 65 6d 61 20 61 67 61 69 6e 2e 20  e schema again. 
4500: 54 68 65 20 62 72 6f 6b 65 6e 20 72 65 63 6f 72  The broken recor
4510: 64 20 75 73 65 73 0a 20 20 20 20 23 20 65 69 74  d uses.    # eit
4520: 68 65 72 20 55 54 46 2d 38 20 6f 72 20 6e 61 74  her UTF-8 or nat
4530: 69 76 65 20 55 54 46 2d 31 36 20 28 69 66 20 74  ive UTF-16 (if t
4540: 68 69 73 20 66 69 6c 65 20 69 73 20 62 65 69 6e  his file is bein
4550: 67 20 72 75 6e 20 62 79 0a 20 20 20 20 23 20 75  g run by.    # u
4560: 74 66 31 36 2e 74 65 73 74 29 2e 0a 20 20 20 20  tf16.test)..    
4570: 69 66 20 7b 20 5b 73 74 72 69 6e 67 20 6d 61 74  if { [string mat
4580: 63 68 20 55 54 46 2d 31 36 2a 20 24 3a 3a 45 4e  ch UTF-16* $::EN
4590: 43 5d 20 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  C] } {.      set
45a0: 20 64 61 74 61 20 5b 62 69 6e 61 72 79 20 66 6f   data [binary fo
45b0: 72 6d 61 74 20 63 36 61 31 30 20 7b 36 20 33 33  rmat c6a10 {6 33
45c0: 20 30 20 30 20 30 20 30 7d 20 5b 75 74 66 31 36   0 0 0 0} [utf16
45d0: 20 74 61 62 6c 65 5d 5d 0a 20 20 20 20 7d 20 65   table]].    } e
45e0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20  lse {.      set 
45f0: 64 61 74 61 20 5b 62 69 6e 61 72 79 20 66 6f 72  data [binary for
4600: 6d 61 74 20 63 36 61 35 20 7b 36 20 32 33 20 30  mat c6a5 {6 23 0
4610: 20 30 20 30 20 30 7d 20 74 61 62 6c 65 5d 0a 20   0 0 0} table]. 
4620: 20 20 20 7d 0a 20 20 20 20 62 74 72 65 65 5f 69     }.    btree_i
4630: 6e 73 65 72 74 20 24 3a 3a 62 63 20 35 20 24 64  nsert $::bc 5 $d
4640: 61 74 61 0a 20 20 0a 20 20 20 20 62 74 72 65 65  ata.  .    btree
4650: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
4660: 3a 62 63 0a 20 20 20 20 62 74 72 65 65 5f 63 6f  :bc.    btree_co
4670: 6d 6d 69 74 20 24 3a 3a 62 74 0a 20 20 20 20 62  mmit $::bt.    b
4680: 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74  tree_close $::bt
4690: 0a 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65  .  } {};.  do_te
46a0: 73 74 20 63 61 70 69 33 63 2d 38 2e 35 20 7b 0a  st capi3c-8.5 {.
46b0: 20 20 20 20 64 62 20 63 6c 6f 73 65 20 0a 20 20      db close .  
46c0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
46d0: 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71  t.db.    catchsq
46e0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
46f0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
4700: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
4710: 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64   {1 {malformed d
4720: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 7d 7d  atabase schema}}
4730: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 69  .  db close.}.fi
4740: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
4750: 20 74 65 73 74 2e 64 62 0a 66 69 6c 65 20 64 65   test.db.file de
4760: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4770: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23 20  .db-journal...# 
4780: 54 65 73 74 20 74 68 65 20 65 6e 67 6c 69 73 68  Test the english
4790: 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67   language string
47a0: 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72   equivalents for
47b0: 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f   sqlite error co
47c0: 64 65 73 0a 73 65 74 20 63 6f 64 65 32 65 6e 67  des.set code2eng
47d0: 6c 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51 4c  lish [list \.SQL
47e0: 49 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 7b  ITE_OK         {
47f0: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c 0a  not an error} \.
4800: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20  SQLITE_ERROR    
4810: 20 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72    {SQL logic err
4820: 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  or or missing da
4830: 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45  tabase} \.SQLITE
4840: 5f 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63  _PERM       {acc
4850: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
4860: 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  enied} \.SQLITE_
4870: 41 42 4f 52 54 20 20 20 20 20 20 7b 63 61 6c 6c  ABORT      {call
4880: 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71  back requested q
4890: 75 65 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53 51  uery abort} \.SQ
48a0: 4c 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20  LITE_BUSY       
48b0: 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  {database is loc
48c0: 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f  ked} \.SQLITE_LO
48d0: 43 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62 61  CKED     {databa
48e0: 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
48f0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d  ed} \.SQLITE_NOM
4900: 45 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20  EM      {out of 
4910: 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45  memory} \.SQLITE
4920: 5f 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74  _READONLY   {att
4930: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
4940: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
4950: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45  e} \.SQLITE_INTE
4960: 52 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70  RRUPT  {interrup
4970: 74 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f  ted} \.SQLITE_IO
4980: 45 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49  ERR      {disk I
4990: 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49  /O error} \.SQLI
49a0: 54 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64  TE_CORRUPT    {d
49b0: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
49c0: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
49d0: 20 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20   \.SQLITE_FULL  
49e0: 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f       {database o
49f0: 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20  r disk is full} 
4a00: 5c 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  \.SQLITE_CANTOPE
4a10: 4e 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f  N   {unable to o
4a20: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
4a30: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50 54  e} \.SQLITE_EMPT
4a40: 59 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63 6f  Y      {table co
4a50: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d 20  ntains no data} 
4a60: 5c 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  \.SQLITE_SCHEMA 
4a70: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 73 63      {database sc
4a80: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
4a90: 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54  } \.SQLITE_CONST
4aa0: 52 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e  RAINT {constrain
4ab0: 74 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49  t failed} \.SQLI
4ac0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64  TE_MISMATCH   {d
4ad0: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
4ae0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53  } \.SQLITE_MISUS
4af0: 45 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20 72  E     {library r
4b00: 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75  outine called ou
4b10: 74 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20 5c  t of sequence} \
4b20: 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20  .SQLITE_NOLFS   
4b30: 20 20 20 7b 6b 65 72 6e 65 6c 20 6c 61 63 6b 73     {kernel lacks
4b40: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
4b50: 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55  ort} \.SQLITE_AU
4b60: 54 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f 72  TH       {author
4b70: 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20  ization denied} 
4b80: 5c 0a 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20  \.SQLITE_FORMAT 
4b90: 20 20 20 20 7b 61 75 78 69 6c 69 61 72 79 20 64      {auxiliary d
4ba0: 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65  atabase format e
4bb0: 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52  rror} \.SQLITE_R
4bc0: 41 4e 47 45 20 20 20 20 20 20 7b 62 69 6e 64 20  ANGE      {bind 
4bd0: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
4be0: 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a  out of range} \.
4bf0: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20  SQLITE_NOTADB   
4c00: 20 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79    {file is encry
4c10: 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61  pted or is not a
4c20: 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b   database} \.unk
4c30: 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20 20 20 7b  nownerror      {
4c40: 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c  unknown error} \
4c50: 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d  .]..set test_num
4c60: 62 65 72 20 31 0a 66 6f 72 65 61 63 68 20 7b 63  ber 1.foreach {c
4c70: 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f  ode english} $co
4c80: 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64  de2english {.  d
4c90: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 39 2e  o_test capi3c-9.
4ca0: 24 74 65 73 74 5f 6e 75 6d 62 65 72 20 22 73 71  $test_number "sq
4cb0: 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74  lite3_test_errst
4cc0: 72 20 24 63 6f 64 65 22 20 24 65 6e 67 6c 69 73  r $code" $englis
4cd0: 68 0a 20 20 69 6e 63 72 20 74 65 73 74 5f 6e 75  h.  incr test_nu
4ce0: 6d 62 65 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74  mber.}..# Test t
4cf0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
4d00: 20 77 68 65 6e 20 61 20 22 72 65 61 6c 22 20 6f   when a "real" o
4d10: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63  ut of memory occ
4d20: 75 72 73 2e 0a 69 66 63 61 70 61 62 6c 65 20 6d  urs..ifcapable m
4d30: 65 6d 64 65 62 75 67 20 7b 0a 20 20 64 6f 5f 74  emdebug {.  do_t
4d40: 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d 31 20  est capi3c-10-1 
4d50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
4d60: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74   test.db.    set
4d70: 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e   DB [sqlite3_con
4d80: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
4d90: 64 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  db].    sqlite3_
4da0: 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 30 0a  memdebug_fail 0.
4db0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
4dc0: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
4dd0: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
4de0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
4df0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a  out of memory}}.
4e00: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4e10: 2d 31 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c 69  -10-2 {.    sqli
4e20: 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42  te3_errmsg $::DB
4e30: 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  .  } {out of mem
4e40: 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  ory}.  ifcapable
4e50: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64   {utf16} {.    d
4e60: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 30  o_test capi3c-10
4e70: 2d 33 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20  -3 {.      utf8 
4e80: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
4e90: 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b  6 $::DB].    } {
4ea0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
4eb0: 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   }.  db close.  
4ec0: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
4ed0: 5f 66 61 69 6c 20 2d 31 0a 7d 0a 0a 23 20 54 68  _fail -1.}..# Th
4ee0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
4ef0: 73 20 2d 20 63 61 70 69 33 63 2d 31 31 2e 2a 20  s - capi3c-11.* 
4f00: 2d 20 74 65 73 74 20 74 68 61 74 20 61 20 43 4f  - test that a CO
4f10: 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  MMIT or ROLLBACK
4f20: 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 69 73 73  .# statement iss
4f30: 75 65 64 20 77 68 69 6c 65 20 74 68 65 72 65 20  ued while there 
4f40: 61 72 65 20 73 74 69 6c 6c 20 6f 75 74 73 74 61  are still outsta
4f50: 6e 64 69 6e 67 20 56 4d 73 20 74 68 61 74 20 61  nding VMs that a
4f60: 72 65 20 70 61 72 74 20 6f 66 0a 23 20 74 68 65  re part of.# the
4f70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 61 69   transaction fai
4f80: 6c 73 2e 0a 73 71 6c 69 74 65 33 20 64 62 20 74  ls..sqlite3 db t
4f90: 65 73 74 2e 64 62 0a 73 65 74 20 44 42 20 5b 73  est.db.set DB [s
4fa0: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4fb0: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71  n_pointer db].sq
4fc0: 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65  lite_register_te
4fd0: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24 44 42 20  st_function $DB 
4fe0: 66 75 6e 63 0a 64 6f 5f 74 65 73 74 20 63 61 70  func.do_test cap
4ff0: 69 33 63 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65  i3c-11.1 {.  exe
5000: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
5010: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
5020: 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20  LE t1(a, b);.   
5030: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
5040: 56 41 4c 55 45 53 28 31 2c 20 27 69 6e 74 27 29  VALUES(1, 'int')
5050: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5060: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20 27  O t1 VALUES(2, '
5070: 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a  notatype');.  }.
5080: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
5090: 69 33 63 2d 31 31 2e 31 2e 31 20 7b 0a 20 20 73  i3c-11.1.1 {.  s
50a0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
50b0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
50c0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
50d0: 32 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  2 {.  set STMT [
50e0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
50f0: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 66  v2 $DB "SELECT f
5100: 75 6e 63 28 62 2c 20 61 29 20 46 52 4f 4d 20 74  unc(b, a) FROM t
5110: 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  1" -1 TAIL].  sq
5120: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5130: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
5140: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5150: 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.3 {.  catchsql
5160: 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20   {.    COMMIT;. 
5170: 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20   }.} {1 {cannot 
5180: 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
5190: 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  on - SQL stateme
51a0: 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 7d  nts in progress}
51b0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
51c0: 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.3.1 {.  sqli
51d0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
51e0: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
51f0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 34 20 7b  st capi3c-11.4 {
5200: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5210: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5220: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63  ERROR}.do_test c
5230: 61 70 69 33 63 2d 31 31 2e 35 20 7b 0a 20 20 73  api3c-11.5 {.  s
5240: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5250: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5260: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63  ERROR}.do_test c
5270: 61 70 69 33 63 2d 31 31 2e 36 20 7b 0a 20 20 63  api3c-11.6 {.  c
5280: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
5290: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
52a0: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20    }.} {0 {1 int 
52b0: 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f  2 notatype}}.do_
52c0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 36  test capi3c-11.6
52d0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .1 {.  sqlite3_g
52e0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
52f0: 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 0.do_test ca
5300: 70 69 33 63 2d 31 31 2e 37 20 7b 0a 20 20 63 61  pi3c-11.7 {.  ca
5310: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5320: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5330: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5340: 2d 31 31 2e 37 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.7.1 {.  sqli
5350: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5360: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
5370: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 38 20 7b  st capi3c-11.8 {
5380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5390: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
53a0: 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (a);.    INSERT 
53b0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
53c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
53d0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 29 3b  TO t2 VALUES(2);
53e0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
53f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
5400: 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20  ALUES(3);.  }.} 
5410: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5420: 63 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c  c-11.8.1 {.  sql
5430: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5440: 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74  mit $DB.} 0.do_t
5450: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 20  est capi3c-11.9 
5460: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
5470: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
5480: 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46   $DB "SELECT a F
5490: 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d  ROM t2" -1 TAIL]
54a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
54b0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
54c0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
54d0: 69 33 63 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73  i3c-11.9.1 {.  s
54e0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
54f0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5500: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5510: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
5520: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5530: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f  .  }.} {1 {canno
5540: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
5550: 61 63 74 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61  action - SQL sta
5560: 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
5570: 65 73 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  ess}}.do_test ca
5580: 70 69 33 63 2d 31 31 2e 39 2e 33 20 7b 0a 20 20  pi3c-11.9.3 {.  
5590: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
55a0: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
55b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
55c0: 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .10 {.  sqlite3_
55d0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
55e0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
55f0: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 31 20 7b  t capi3c-11.11 {
5600: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5610: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5620: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5630: 69 33 63 2d 31 31 2e 31 32 20 7b 0a 20 20 73 71  i3c-11.12 {.  sq
5640: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5650: 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d  .} {SQLITE_DONE}
5660: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5670: 31 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  11.13 {.  sqlite
5680: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5690: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
56a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
56b0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
56c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
56d0: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t2;.  }.} {1
56e0: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63 61   2 3}.do_test ca
56f0: 70 69 33 63 2d 31 31 2e 31 34 2e 31 20 7b 0a 20  pi3c-11.14.1 {. 
5700: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5710: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a  ocommit $DB.} 0.
5720: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5730: 31 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71  1.15 {.  catchsq
5740: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
5750: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5760: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5770: 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  .15.1 {.  sqlite
5780: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5790: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
57a0: 20 63 61 70 69 33 63 2d 31 31 2e 31 36 20 7b 0a   capi3c-11.16 {.
57b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
57c0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
57d0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 23  ;.  }.} {1 2}..#
57e0: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e   Sanity check on
57f0: 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
5800: 6f 66 20 27 6f 75 74 73 74 61 6e 64 69 6e 67 20  of 'outstanding 
5810: 56 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  VM'. This means 
5820: 61 6e 79 20 56 4d 0a 23 20 74 68 61 74 20 68 61  any VM.# that ha
5830: 73 20 68 61 64 20 73 71 6c 69 74 65 33 5f 73 74  s had sqlite3_st
5840: 65 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65  ep() called more
5850: 20 72 65 63 65 6e 74 6c 79 20 74 68 61 6e 20 73   recently than s
5860: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
5870: 29 20 6f 72 0a 23 20 73 71 6c 69 74 65 33 5f 72  ) or.# sqlite3_r
5880: 65 73 65 74 28 29 2e 20 53 6f 20 61 20 56 4d 20  eset(). So a VM 
5890: 74 68 61 74 20 68 61 73 20 6a 75 73 74 20 62 65  that has just be
58a0: 65 6e 20 70 72 65 70 61 72 65 64 20 6f 72 20 72  en prepared or r
58b0: 65 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20  eset does not.# 
58c0: 63 6f 75 6e 74 20 61 73 20 61 6e 20 61 63 74 69  count as an acti
58d0: 76 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63  ve VM..do_test c
58e0: 61 70 69 33 63 2d 31 31 2e 31 37 20 7b 0a 20 20  api3c-11.17 {.  
58f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
5900: 47 49 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  GIN;.  }.} {}.do
5910: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5920: 31 38 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  18 {.  set STMT 
5930: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5940: 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20  _v2 $DB "SELECT 
5950: 61 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54 41  a FROM t1" -1 TA
5960: 49 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  IL].  catchsql {
5970: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
5980: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5990: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 39 20 7b  t capi3c-11.19 {
59a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
59b0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
59c0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
59d0: 69 33 63 2d 31 31 2e 32 30 20 7b 0a 20 20 63 61  i3c-11.20 {.  ca
59e0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
59f0: 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  IN;.    COMMIT;.
5a00: 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74    }.} {1 {cannot
5a10: 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
5a20: 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  ion - SQL statem
5a30: 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
5a40: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5a50: 63 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69  c-11.20 {.  sqli
5a60: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
5a70: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5a80: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
5a90: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
5aa0: 70 69 33 63 2d 31 31 2e 32 31 20 7b 0a 20 20 73  pi3c-11.21 {.  s
5ab0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5ac0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5ad0: 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  OK}..# The follo
5ae0: 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70  wing tests - cap
5af0: 69 33 63 2d 31 32 2e 2a 20 2d 20 63 68 65 63 6b  i3c-12.* - check
5b00: 20 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20   that its Ok to 
5b10: 73 74 61 72 74 20 61 0a 23 20 74 72 61 6e 73 61  start a.# transa
5b20: 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68 65  ction while othe
5b30: 72 20 56 4d 73 20 61 72 65 20 61 63 74 69 76 65  r VMs are active
5b40: 2c 20 61 6e 64 20 74 68 61 74 20 69 74 73 20 4f  , and that its O
5b50: 6b 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20 61  k to execute.# a
5b60: 74 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69 6e  tomic updates in
5b70: 20 74 68 65 20 73 61 6d 65 20 73 69 74 75 61 74   the same situat
5b80: 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ion .#.do_test c
5b90: 61 70 69 33 63 2d 31 32 2e 31 20 7b 0a 20 20 73  api3c-12.1 {.  s
5ba0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5bb0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
5bc0: 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  "SELECT a FROM t
5bd0: 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  2" -1 TAIL].  sq
5be0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5bf0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
5c00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5c10: 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.2 {.  catchsql
5c20: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
5c30: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20  TO t1 VALUES(3, 
5c40: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  NULL);.  }.} {0 
5c50: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5c60: 33 63 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74 63  3c-12.3 {.  catc
5c70: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
5c80: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
5c90: 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  (4);.  }.} {0 {}
5ca0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5cb0: 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  -12.4 {.  catchs
5cc0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
5cd0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5ce0: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c  t1 VALUES(4, NUL
5cf0: 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  L);.  }.} {0 {}}
5d00: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5d10: 31 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.5 {.  sqlite3
5d20: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5d30: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
5d40: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 35 2e 31  st capi3c-12.5.1
5d50: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5d60: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5d70: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5d80: 61 70 69 33 63 2d 31 32 2e 36 20 7b 0a 20 20 73  api3c-12.6 {.  s
5d90: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5da0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45  T.} {SQLITE_DONE
5db0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5dc0: 2d 31 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  -12.7 {.  sqlite
5dd0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5de0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
5df0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32  o_test capi3c-12
5e00: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
5e10: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
5e20: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
5e30: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20  1;.  }.} {1 2 3 
5e40: 34 7d 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73  4}..# Test cases
5e50: 20 63 61 70 69 33 63 2d 31 33 2e 2a 20 74 65 73   capi3c-13.* tes
5e60: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6c  t the sqlite3_cl
5e70: 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 29 20 61  ear_bindings() a
5e80: 6e 64 20 0a 23 20 73 71 6c 69 74 65 33 5f 73 6c  nd .# sqlite3_sl
5e90: 65 65 70 20 41 50 49 73 2e 0a 23 0a 69 66 20 7b  eep APIs..#.if {
5ea0: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
5eb0: 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f  ommands sqlite3_
5ec0: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 5d 5d  clear_bindings]]
5ed0: 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  >0} {.  do_test 
5ee0: 63 61 70 69 33 63 2d 31 33 2e 31 20 7b 0a 20 20  capi3c-13.1 {.  
5ef0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5f00: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
5f10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ;.    }.    set 
5f20: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5f30: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 49 4e  epare_v2 $DB "IN
5f40: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5f50: 55 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41  UES(?, ?)" -1 TA
5f60: 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  IL].    sqlite3_
5f70: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
5f80: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64  SQLITE_DONE}.  d
5f90: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
5fa0: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
5fb0: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20  _reset $STMT.   
5fc0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
5fd0: 78 74 20 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f  xt $STMT 1 hello
5fe0: 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   5.    sqlite3_b
5ff0: 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 32  ind_text $STMT 2
6000: 20 77 6f 72 6c 64 20 35 0a 20 20 20 20 73 71 6c   world 5.    sql
6010: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6020: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45    } {SQLITE_DONE
6030: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
6040: 33 63 2d 31 33 2e 33 20 7b 0a 20 20 20 20 73 71  3c-13.3 {.    sq
6050: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
6060: 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  T.    sqlite3_cl
6070: 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 24 53 54  ear_bindings $ST
6080: 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  MT.    sqlite3_s
6090: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
60a0: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f  QLITE_DONE}.  do
60b0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2d  _test capi3c-13-
60c0: 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  4 {.    sqlite3_
60d0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
60e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
60f0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6100: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   t1;.    }.  } {
6110: 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72 6c  {} {} hello worl
6120: 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b  d {} {}}.}.if {[
6130: 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f  llength [info co
6140: 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 73  mmands sqlite3_s
6150: 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f  leep]]>0} {.  do
6160: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2d  _test capi3c-13-
6170: 35 20 7b 0a 20 20 20 20 73 65 74 20 6d 73 20 5b  5 {.    set ms [
6180: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 38 30  sqlite3_sleep 80
6190: 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 6d 73 3d  ].    expr {$ms=
61a0: 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30 30 30  =80 || $ms==1000
61b0: 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 54  }.  } {1}.}..# T
61c0: 69 63 6b 65 74 20 23 31 32 31 39 3a 20 20 4d 61  icket #1219:  Ma
61d0: 6b 65 20 73 75 72 65 20 62 69 6e 64 69 6e 67 20  ke sure binding 
61e0: 41 50 49 73 20 63 61 6e 20 68 61 6e 64 6c 65 20  APIs can handle 
61f0: 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a  a NULL pointer..
6200: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  #.do_test capi3c
6210: 2d 31 34 2e 31 20 7b 0a 20 20 73 65 74 20 72 63  -14.1 {.  set rc
6220: 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33   [catch {sqlite3
6230: 5f 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20 68  _bind_text 0 1 h
6240: 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20 6c  ello 5} msg].  l
6250: 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d  append rc $msg.}
6260: 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   {1 SQLITE_MISUS
6270: 45 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 36  E}..# Ticket #16
6280: 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20 6e  50:  Honor the n
6290: 42 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20  Bytes parameter 
62a0: 74 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  to sqlite3_prepa
62b0: 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  re..#.do_test ca
62c0: 70 69 33 63 2d 31 35 2e 31 20 7b 0a 20 20 73 65  pi3c-15.1 {.  se
62d0: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  t sql {SELECT * 
62e0: 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20 6e  FROM t2}.  set n
62f0: 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c 65  bytes [string le
6300: 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70 70  ngth $sql].  app
6310: 65 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45 20  end sql { WHERE 
6320: 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d 54  a==1}.  set STMT
6330: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6340: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 24 6e  e_v2 $DB $sql $n
6350: 62 79 74 65 73 20 54 41 49 4c 5d 0a 20 20 73 71  bytes TAIL].  sq
6360: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6370: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6380: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6390: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
63a0: 33 63 2d 31 35 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-15.2 {.  sqli
63b0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
63c0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
63d0: 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 32  int $STMT 0.} {2
63e0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
63f0: 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -15.3 {.  sqlite
6400: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
6410: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a  .} {SQLITE_OK}..
6420: 23 20 4d 61 6b 65 20 73 75 72 65 20 63 6f 64 65  # Make sure code
6430: 20 69 73 20 61 6c 77 61 79 73 20 67 65 6e 65 72   is always gener
6440: 61 74 65 64 20 65 76 65 6e 20 69 66 20 61 6e 20  ated even if an 
6450: 49 46 20 45 58 49 53 54 53 20 6f 72 20 0a 23 20  IF EXISTS or .# 
6460: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c  IF NOT EXISTS cl
6470: 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  ause is present 
6480: 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 64  that the table d
6490: 6f 65 73 20 6e 6f 74 20 6f 72 0a 23 20 64 6f 65  oes not or.# doe
64a0: 73 20 65 78 69 73 74 73 2e 20 20 54 68 61 74 20  s exists.  That 
64b0: 77 61 79 20 77 65 20 77 69 6c 6c 20 61 6c 77 61  way we will alwa
64c0: 79 73 20 68 61 76 65 20 61 20 70 72 65 70 61 72  ys have a prepar
64d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 74  ed statement.# t
64e0: 6f 20 65 78 70 69 72 65 20 77 68 65 6e 20 74 68  o expire when th
64f0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
6500: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
6510: 33 63 2d 31 36 2e 31 20 7b 0a 20 20 73 65 74 20  3c-16.1 {.  set 
6520: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
6530: 49 46 20 45 58 49 53 54 53 20 74 33 7d 0a 20 20  IF EXISTS t3}.  
6540: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
6550: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42  3_prepare_v2 $DB
6560: 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20   $sql -1 TAIL]. 
6570: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6580: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
6590: 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT!=""}.} {1}
65a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
65b0: 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c  16.2 {.  set sql
65c0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   {CREATE TABLE I
65d0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28  F NOT EXISTS t1(
65e0: 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54  x,y)}.  set STMT
65f0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6600: 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31  e_v2 $DB $sql -1
6610: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6620: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6630: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22    expr {$STMT!="
6640: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20  "}.} {1}..# But 
6650: 73 74 69 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20  still we do not 
6660: 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 69 66  generate code if
6670: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c   there is no SQL
6680: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .#.do_test capi3
6690: 63 2d 31 36 2e 33 20 7b 0a 20 20 73 65 74 20 53  c-16.3 {.  set S
66a0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
66b0: 70 61 72 65 5f 76 32 20 24 44 42 20 7b 7d 20 2d  pare_v2 $DB {} -
66c0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
66d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
66e0: 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d  .  expr {$STMT==
66f0: 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  ""}.} {1}.do_tes
6700: 74 20 63 61 70 69 33 63 2d 31 36 2e 34 20 7b 0a  t capi3c-16.4 {.
6710: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6720: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
6730: 44 42 20 7b 3b 7d 20 2d 31 20 54 41 49 4c 5d 0a  DB {;} -1 TAIL].
6740: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6750: 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20  ze $STMT.  expr 
6760: 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31  {$STMT==""}.} {1
6770: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35  }..# Ticket #215
6780: 34 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  4..#.do_test cap
6790: 69 33 63 2d 31 37 2e 31 20 7b 0a 20 20 73 65 74  i3c-17.1 {.  set
67a0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
67b0: 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53  repare_v2 $DB {S
67c0: 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f  ELECT max(a) FRO
67d0: 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2} -1 TAIL]. 
67e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
67f0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
6800: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6810: 31 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  17.2 {.  sqlite3
6820: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
6830: 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20  T 0.} 4.do_test 
6840: 63 61 70 69 33 63 2d 31 37 2e 33 20 7b 0a 20 20  capi3c-17.3 {.  
6850: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6860: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
6870: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6880: 31 37 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  17.4 {.  sqlite3
6890: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
68a0: 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 49  b eval {CREATE I
68b0: 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29  NDEX i2 ON t2(a)
68c0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
68d0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
68e0: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
68f0: 33 63 2d 31 37 2e 35 20 7b 0a 20 20 73 71 6c 69  3c-17.5 {.  sqli
6900: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
6910: 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65  STMT 0.} 4.do_te
6920: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 36 20 7b  st capi3c-17.6 {
6930: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6940: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
6950: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
6960: 33 63 2d 31 37 2e 37 20 7b 0a 20 20 73 71 6c 69  3c-17.7 {.  sqli
6970: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6980: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
6990: 49 4e 44 45 58 20 69 32 7d 0a 20 20 73 71 6c 69  INDEX i2}.  sqli
69a0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
69b0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74   SQLITE_ROW.do_t
69c0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 38 20  est capi3c-17.8 
69d0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
69e0: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
69f0: 20 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   4.do_test capi3
6a00: 63 2d 31 37 2e 39 20 7b 0a 20 20 73 71 6c 69 74  c-17.9 {.  sqlit
6a10: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6a20: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74  SQLITE_DONE.do_t
6a30: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 30  est capi3c-17.10
6a40: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
6a50: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65  alize $STMT.  se
6a60: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6a70: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b  prepare_v2 $DB {
6a80: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
6a90: 20 57 48 45 52 45 20 61 3d 3f 7d 20 2d 31 20 54   WHERE a=?} -1 T
6aa0: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62  AIL].  sqlite3_b
6ab0: 69 6e 64 5f 69 6e 74 20 24 53 54 4d 54 20 31 20  ind_int $STMT 1 
6ac0: 32 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  2.  db eval {.  
6ad0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
6ae0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6af0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 27 6f  O t1 VALUES(1,'o
6b00: 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ne');.    INSERT
6b10: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
6b20: 32 2c 27 74 77 6f 27 29 3b 0a 20 20 20 20 49 4e  2,'two');.    IN
6b30: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
6b40: 55 45 53 28 33 2c 27 74 68 72 65 65 27 29 3b 0a  UES(3,'three');.
6b50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6b60: 74 31 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75  t1 VALUES(4,'fou
6b70: 72 27 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  r');.  }.  sqlit
6b80: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6b90: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6ba0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 31 20  st capi3c-17.11 
6bb0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
6bc0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a  mn_text $STMT 0.
6bd0: 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61  } two.do_test ca
6be0: 70 69 33 63 2d 31 37 2e 31 32 20 7b 0a 20 20 73  pi3c-17.12 {.  s
6bf0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6c00: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
6c10: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6c20: 37 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.13 {.  sqlite3
6c30: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
6c40: 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 49  b eval {CREATE I
6c50: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29  NDEX i1 ON t1(a)
6c60: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
6c70: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
6c80: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
6c90: 33 63 2d 31 37 2e 31 34 20 7b 0a 20 20 73 71 6c  3c-17.14 {.  sql
6ca0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
6cb0: 20 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64   $STMT 0.} two.d
6cc0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6cd0: 2e 31 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .15 {.  sqlite3_
6ce0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
6cf0: 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74  ITE_DONE.do_test
6d00: 20 63 61 70 69 33 63 2d 31 37 2e 31 36 20 7b 0a   capi3c-17.16 {.
6d10: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
6d20: 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20  $STMT.  db eval 
6d30: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a  {DROP INDEX i1}.
6d40: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6d50: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
6d60: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
6d70: 2d 31 37 2e 31 37 20 7b 0a 20 20 73 71 6c 69 74  -17.17 {.  sqlit
6d80: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
6d90: 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f  STMT 0.} two.do_
6da0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6db0: 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  8 {.  sqlite3_st
6dc0: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6dd0: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6de0: 61 70 69 33 63 2d 31 37 2e 39 39 20 7b 0a 20 20  api3c-17.99 {.  
6df0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6e00: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
6e10: 4f 4b 0a 0a 23 20 4f 6e 20 74 68 65 20 6d 61 69  OK..# On the mai
6e20: 6c 69 6e 67 20 6c 69 73 74 20 69 74 20 68 61 73  ling list it has
6e30: 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20 74   been reported t
6e40: 68 61 74 20 66 69 6e 61 6c 69 7a 69 6e 67 20 61  hat finalizing a
6e50: 66 74 65 72 0a 23 20 61 6e 20 53 51 4c 49 54 45  fter.# an SQLITE
6e60: 5f 42 55 53 59 20 72 65 74 75 72 6e 20 6c 65 61  _BUSY return lea
6e70: 64 73 20 74 6f 20 61 20 73 65 67 66 61 75 6c 74  ds to a segfault
6e80: 2e 20 20 48 65 72 65 20 77 65 20 74 65 73 74 20  .  Here we test 
6e90: 74 68 61 74 20 63 61 73 65 2e 0a 23 0a 64 6f 5f  that case..#.do_
6ea0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 31  test capi3c-18.1
6eb0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
6ec0: 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 53   test.db.  set S
6ed0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
6ee0: 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c  pare_v2 $DB {SEL
6ef0: 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ECT max(a) FROM 
6f00: 74 31 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t1} -1 TAIL].  s
6f10: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6f20: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64  T.} SQLITE_ROW.d
6f30: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 38  o_test capi3c-18
6f40: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  .2 {.  sqlite3_c
6f50: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6f60: 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61  0.} 4.do_test ca
6f70: 70 69 33 63 2d 31 38 2e 33 20 7b 0a 20 20 73 71  pi3c-18.3 {.  sq
6f80: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
6f90: 54 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 42 45  T.  db2 eval {BE
6fa0: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 0a 20  GIN EXCLUSIVE}. 
6fb0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6fc0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 42 55 53  TMT.} SQLITE_BUS
6fd0: 59 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  Y.do_test capi3c
6fe0: 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -18.4 {.  sqlite
6ff0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7000: 0a 7d 20 53 51 4c 49 54 45 5f 42 55 53 59 0a 64  .} SQLITE_BUSY.d
7010: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 38  o_test capi3c-18
7020: 2e 35 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20  .5 {.  db2 eval 
7030: 7b 43 4f 4d 4d 49 54 7d 0a 20 20 64 62 32 20 63  {COMMIT}.  db2 c
7040: 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63  lose.} {}..# Tic
7050: 6b 65 74 20 23 32 31 35 38 2e 20 20 54 68 65 20  ket #2158.  The 
7060: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
7070: 69 6c 6c 20 73 74 69 6c 6c 20 72 65 74 75 72 6e  ill still return
7080: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 23   SQLITE_SCHEMA.#
7090: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
70a0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 20   schema changes 
70b0: 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 6d 61  in a way that ma
70c0: 6b 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  kes the statemen
70d0: 74 0a 23 20 6e 6f 20 6c 6f 6e 67 65 72 20 76 61  t.# no longer va
70e0: 6c 69 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  lid..#.do_test c
70f0: 61 70 69 33 63 2d 31 39 2e 31 20 7b 0a 20 20 64  api3c-19.1 {.  d
7100: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52  b eval {.     CR
7110: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 2c  EATE TABLE t3(x,
7120: 79 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20  y);.     INSERT 
7130: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31  INTO t3 VALUES(1
7140: 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 53  ,2);.  }.  set S
7150: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7160: 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c  pare_v2 $DB {SEL
7170: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d  ECT * FROM t3} -
7180: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
7190: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
71a0: 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73  QLITE_ROW.do_tes
71b0: 74 20 63 61 70 69 33 63 2d 31 39 2e 32 20 7b 0a  t capi3c-19.2 {.
71c0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
71d0: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 31  _int $STMT 0.} 1
71e0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
71f0: 31 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.3 {.  sqlite3
7200: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7210: 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73  LITE_DONE.do_tes
7220: 74 20 63 61 70 69 33 63 2d 31 39 2e 34 20 7b 0a  t capi3c-19.4 {.
7230: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
7240: 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20  $STMT.  db eval 
7250: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 33 7d 0a  {DROP TABLE t3}.
7260: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7270: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43  STMT.} SQLITE_SC
7280: 48 45 4d 41 0a 64 6f 5f 74 65 73 74 20 63 61 70  HEMA.do_test cap
7290: 69 33 63 2d 31 39 2e 34 2e 32 20 7b 0a 20 20 73  i3c-19.4.2 {.  s
72a0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44  qlite3_errmsg $D
72b0: 42 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74 61 62  B.} {no such tab
72c0: 6c 65 3a 20 74 33 7d 0a 64 6f 5f 74 65 73 74 20  le: t3}.do_test 
72d0: 63 61 70 69 33 63 2d 31 39 2e 35 20 7b 0a 20 20  capi3c-19.5 {.  
72e0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
72f0: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  TMT.  db eval {.
7300: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7310: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20  E t3(x,y);.     
7320: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
7330: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a  ALUES(1,2);.  }.
7340: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7350: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
7360: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
7370: 2d 31 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -19.6 {.  sqlite
7380: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
7390: 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74  MT 1.} 2.do_test
73a0: 20 63 61 70 69 33 63 2d 31 39 2e 39 39 20 7b 0a   capi3c-19.99 {.
73b0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
73c0: 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ze $STMT.} SQLIT
73d0: 45 5f 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75 72  E_OK..# Make sur
73e0: 65 20 61 20 63 68 61 6e 67 65 20 69 6e 20 61 20  e a change in a 
73f0: 73 65 70 61 72 61 74 65 20 64 61 74 61 62 61 73  separate databas
7400: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 65  e connection doe
7410: 73 20 6e 6f 74 0a 23 20 63 61 75 73 65 20 61 6e  s not.# cause an
7420: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 72   SQLITE_SCHEMA r
7430: 65 74 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74  eturn..#.do_test
7440: 20 63 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a 20   capi3c-20.1 {. 
7450: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
7460: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
7470: 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  B {SELECT * FROM
7480: 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t3} -1 TAIL].  
7490: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
74a0: 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b  .db.  db2 eval {
74b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
74c0: 78 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  x)}.  sqlite3_st
74d0: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
74e0: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
74f0: 70 69 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73 71  pi3c-20.2 {.  sq
7500: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
7510: 20 24 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f   $STMT 1.} 2.do_
7520: 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e 33  test capi3c-20.3
7530: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
7540: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
7550: 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61  _DONE.do_test ca
7560: 70 69 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64 62  pi3c-20.4 {.  db
7570: 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  2 close.  sqlite
7580: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7590: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20  .} SQLITE_OK..# 
75a0: 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74 65  Test that sqlite
75b0: 33 5f 73 74 65 70 28 29 20 73 65 74 73 20 74 68  3_step() sets th
75c0: 65 20 64 61 74 61 62 61 73 65 20 65 72 72 6f 72  e database error
75d0: 20 63 6f 64 65 20 63 6f 72 72 65 63 74 6c 79 2e   code correctly.
75e0: 0a 23 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  .# See ticket #2
75f0: 34 39 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  497..#.ifcapable
7600: 20 70 72 6f 67 72 65 73 73 20 7b 0a 20 20 64 6f   progress {.  do
7610: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7620: 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54  1 {.    set STMT
7630: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7640: 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54  e_v2 $DB {SELECT
7650: 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54   * FROM t3} -1 T
7660: 41 49 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f 67  AIL].    db prog
7670: 72 65 73 73 20 35 20 22 65 78 70 72 20 31 22 0a  ress 5 "expr 1".
7680: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
7690: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
76a0: 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20  TE_INTERRUPT}.  
76b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
76c0: 31 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.2 {.    sqlite
76d0: 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  3_errcode $DB.  
76e0: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
76f0: 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  UPT}.  do_test c
7700: 61 70 69 33 63 2d 32 31 2e 33 20 7b 0a 20 20 20  api3c-21.3 {.   
7710: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7720: 65 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  e $STMT.  } {SQL
7730: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
7740: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
7750: 32 31 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 53  21.4 {.    set S
7760: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7770: 70 61 72 65 20 24 44 42 20 7b 53 45 4c 45 43 54  pare $DB {SELECT
7780: 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54   * FROM t3} -1 T
7790: 41 49 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f 67  AIL].    db prog
77a0: 72 65 73 73 20 35 20 22 65 78 70 72 20 31 22 0a  ress 5 "expr 1".
77b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
77c0: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
77d0: 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74  TE_ERROR}.  do_t
77e0: 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 35 20  est capi3c-21.5 
77f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
7800: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
7810: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
7820: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31  o_test capi3c-21
7830: 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .6 {.    sqlite3
7840: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7850: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45    } {SQLITE_INTE
7860: 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74  RRUPT}.  do_test
7870: 20 63 61 70 69 33 63 2d 32 31 2e 37 20 7b 0a 20   capi3c-21.7 {. 
7880: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f     sqlite3_errco
7890: 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49  de $DB.  } {SQLI
78a0: 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 7d 20  TE_INTERRUPT}.} 
78b0: 20 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a      ..finish_test.