/ Hex Artifact Content
Login

Artifact 3d276ee4c142b9e71a867a3579906bb0876840cc:


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: 35 20 32 30 30 37 2f 30 31 2f 30 39 20 31 35 3a  5 2007/01/09 15:
0240: 30 36 3a 34 32 20 64 72 68 20 45 78 70 20 24 0a  06:42 drh Exp $.
0250: 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  #..set testdir [
0260: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0270: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0280: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0290: 0a 23 20 52 65 74 75 72 6e 20 74 68 65 20 55 54  .# Return the UT
02a0: 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74 61 74  F-16 representat
02b0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c  ion of the suppl
02c0: 69 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ied UTF-8 string
02d0: 20 24 73 74 72 2e 0a 23 20 49 66 20 24 6e 74 20   $str..# If $nt 
02e0: 69 73 20 74 72 75 65 2c 20 61 70 70 65 6e 64 20  is true, append 
02f0: 74 77 6f 20 30 78 30 30 20 62 79 74 65 73 20 61  two 0x00 bytes a
0300: 73 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  s a nul terminat
0310: 6f 72 2e 0a 70 72 6f 63 20 75 74 66 31 36 20 7b  or..proc utf16 {
0320: 73 74 72 20 7b 6e 74 20 31 7d 7d 20 7b 0a 20 20  str {nt 1}} {.  
0330: 73 65 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20  set r [encoding 
0340: 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64  convertto unicod
0350: 65 20 24 73 74 72 5d 0a 20 20 69 66 20 7b 24 6e  e $str].  if {$n
0360: 74 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20  t} {.    append 
0370: 72 20 22 5c 78 30 30 5c 78 30 30 22 0a 20 20 7d  r "\x00\x00".  }
0380: 0a 20 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a  .  return $r.}..
0390: 23 20 52 65 74 75 72 6e 20 74 68 65 20 55 54 46  # Return the UTF
03a0: 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  -8 representatio
03b0: 6e 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  n of the supplie
03c0: 64 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 20  d UTF-16 string 
03d0: 24 73 74 72 2e 20 0a 70 72 6f 63 20 75 74 66 38  $str. .proc utf8
03e0: 20 7b 73 74 72 7d 20 7b 0a 20 20 23 20 49 66 20   {str} {.  # If 
03f0: 24 73 74 72 20 65 6e 64 73 20 69 6e 20 74 77 6f  $str ends in two
0400: 20 30 78 30 30 20 30 78 30 30 20 62 79 74 65 73   0x00 0x00 bytes
0410: 2c 20 6b 6e 6f 63 6b 20 74 68 65 73 65 20 6f 66  , knock these of
0420: 66 20 62 65 66 6f 72 65 0a 20 20 23 20 63 6f 6e  f before.  # con
0430: 76 65 72 74 69 6e 67 20 74 6f 20 55 54 46 2d 38  verting to UTF-8
0440: 20 75 73 69 6e 67 20 54 43 4c 2e 0a 20 20 62 69   using TCL..  bi
0450: 6e 61 72 79 20 73 63 61 6e 20 24 73 74 72 20 5c  nary scan $str \
0460: 63 2a 20 76 61 6c 73 0a 20 20 69 66 20 7b 5b 6c  c* vals.  if {[l
0470: 69 6e 64 65 78 20 24 76 61 6c 73 20 65 6e 64 5d  index $vals end]
0480: 3d 3d 30 20 26 26 20 5b 6c 69 6e 64 65 78 20 24  ==0 && [lindex $
0490: 76 61 6c 73 20 65 6e 64 2d 31 5d 3d 3d 30 7d 20  vals end-1]==0} 
04a0: 7b 0a 20 20 20 20 73 65 74 20 73 74 72 20 5b 62  {.    set str [b
04b0: 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 5c 63 2a  inary format \c*
04c0: 20 5b 6c 72 61 6e 67 65 20 24 76 61 6c 73 20 30   [lrange $vals 0
04d0: 20 65 6e 64 2d 32 5d 5d 0a 20 20 7d 0a 0a 20 20   end-2]].  }..  
04e0: 73 65 74 20 72 20 5b 65 6e 63 6f 64 69 6e 67 20  set r [encoding 
04f0: 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69 63  convertfrom unic
0500: 6f 64 65 20 24 73 74 72 5d 0a 20 20 72 65 74 75  ode $str].  retu
0510: 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 68 65 73 65  rn $r.}..# These
0520: 20 74 65 73 74 73 20 63 6f 6d 70 6c 65 6d 65 6e   tests complemen
0530: 74 20 74 68 6f 73 65 20 69 6e 20 63 61 70 69 32  t those in capi2
0540: 2e 74 65 73 74 2e 20 54 68 65 79 20 61 72 65 20  .test. They are 
0550: 6f 72 67 61 6e 69 7a 65 64 0a 23 20 61 73 20 66  organized.# as f
0560: 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63 61 70 69  ollows:.#.# capi
0570: 33 63 2d 31 2e 2a 3a 20 54 65 73 74 20 73 71 6c  3c-1.*: Test sql
0580: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
0590: 0a 23 20 63 61 70 69 33 63 2d 32 2e 2a 3a 20 54  .# capi3c-2.*: T
05a0: 65 73 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  est sqlite3_prep
05b0: 61 72 65 31 36 5f 76 32 20 0a 23 20 63 61 70 69  are16_v2 .# capi
05c0: 33 63 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c  3c-3.*: Test sql
05d0: 69 74 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69  ite3_open.# capi
05e0: 33 63 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c  3c-4.*: Test sql
05f0: 69 74 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61  ite3_open16.# ca
0600: 70 69 33 63 2d 35 2e 2a 3a 20 54 65 73 74 20 74  pi3c-5.*: Test t
0610: 68 65 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74  he various sqlit
0620: 65 33 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73  e3_result_* APIs
0630: 0a 23 20 63 61 70 69 33 63 2d 36 2e 2a 3a 20 54  .# capi3c-6.*: T
0640: 65 73 74 20 74 68 61 74 20 73 71 6c 69 74 65 33  est that sqlite3
0650: 5f 63 6c 6f 73 65 20 66 61 69 6c 73 20 69 66 20  _close fails if 
0660: 74 68 65 72 65 20 61 72 65 20 6f 75 74 73 74 61  there are outsta
0670: 6e 64 69 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65  nding VMs..#..se
0680: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t DB [sqlite3_co
0690: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
06a0: 20 64 62 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61   db]..do_test ca
06b0: 70 69 33 63 2d 31 2e 30 20 7b 0a 20 20 73 71 6c  pi3c-1.0 {.  sql
06c0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
06d0: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
06e0: 65 73 74 20 63 61 70 69 33 63 2d 31 2e 31 20 7b  est capi3c-1.1 {
06f0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
0700: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
0710: 24 44 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  $DB {SELECT name
0720: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0730: 74 65 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20  ter} -1 TAIL].  
0740: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0750: 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49   $STMT.  set TAI
0760: 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  L.} {}.do_test c
0770: 61 70 69 33 63 2d 31 2e 32 20 7b 0a 20 20 73 71  api3c-1.2 {.  sq
0780: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44  lite3_errcode $D
0790: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
07a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
07b0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .3 {.  sqlite3_e
07c0: 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 74  rrmsg $DB.} {not
07d0: 20 61 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74 65   an error}.do_te
07e0: 73 74 20 63 61 70 69 33 63 2d 31 2e 34 20 7b 0a  st capi3c-1.4 {.
07f0: 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43    set sql {SELEC
0800: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0810: 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54  te_master;SELECT
0820: 20 31 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20   10}.  set STMT 
0830: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0840: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
0850: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
0860: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
0870: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45 4c   set TAIL.} {SEL
0880: 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  ECT 10}.do_test 
0890: 63 61 70 69 33 63 2d 31 2e 35 20 7b 0a 20 20 73  capi3c-1.5 {.  s
08a0: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  et sql {SELECT n
08b0: 61 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65  amex FROM sqlite
08c0: 5f 6d 61 73 74 65 72 7d 0a 20 20 63 61 74 63 68  _master}.  catch
08d0: 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20   {.    set STMT 
08e0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
08f0: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
0900: 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  TAIL].  }.} {1}.
0910: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
0920: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .6 {.  sqlite3_e
0930: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
0940: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
0950: 65 73 74 20 63 61 70 69 33 63 2d 31 2e 37 20 7b  est capi3c-1.7 {
0960: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  .  sqlite3_errms
0970: 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75 63 68  g $DB.} {no such
0980: 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d 0a   column: namex}.
0990: 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31  .ifcapable {utf1
09a0: 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  6} {.  do_test c
09b0: 61 70 69 33 63 2d 32 2e 31 20 7b 0a 20 20 20 20  api3c-2.1 {.    
09c0: 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31 36  set sql16 [utf16
09d0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
09e0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
09f0: 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20  }].    set STMT 
0a00: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0a10: 31 36 5f 76 32 20 20 24 44 42 20 24 73 71 6c 31  16_v2  $DB $sql1
0a20: 36 20 2d 31 20 3a 3a 54 41 49 4c 5d 0a 20 20 20  6 -1 ::TAIL].   
0a30: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0a40: 65 20 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38  e $STMT.    utf8
0a50: 20 24 3a 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d 0a   $::TAIL.  } {}.
0a60: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
0a70: 2d 32 2e 32 20 7b 0a 20 20 20 20 73 65 74 20 73  -2.2 {.    set s
0a80: 71 6c 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43  ql [utf16 {SELEC
0a90: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0aa0: 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54  te_master;SELECT
0ab0: 20 31 30 7d 5d 0a 20 20 20 20 73 65 74 20 53 54   10}].    set ST
0ac0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
0ad0: 61 72 65 31 36 5f 76 32 20 20 24 44 42 20 24 73  are16_v2  $DB $s
0ae0: 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20  ql -1 TAIL].    
0af0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0b00: 20 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20   $STMT.    utf8 
0b10: 24 54 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43  $TAIL.  } {SELEC
0b20: 54 20 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20  T 10}.  do_test 
0b30: 63 61 70 69 33 63 2d 32 2e 33 20 7b 0a 20 20 20  capi3c-2.3 {.   
0b40: 20 73 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20   set sql [utf16 
0b50: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52  {SELECT namex FR
0b60: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0b70: 7d 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20  }].    catch {. 
0b80: 20 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73       set STMT [s
0b90: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0ba0: 5f 76 32 20 20 24 44 42 20 24 73 71 6c 20 2d 31  _v2  $DB $sql -1
0bb0: 20 54 41 49 4c 5d 0a 20 20 20 20 7d 0a 20 20 7d   TAIL].    }.  }
0bc0: 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   {1}.  do_test c
0bd0: 61 70 69 33 63 2d 32 2e 34 20 7b 0a 20 20 20 20  api3c-2.4 {.    
0be0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
0bf0: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
0c00: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
0c10: 20 63 61 70 69 33 63 2d 32 2e 35 20 7b 0a 20 20   capi3c-2.5 {.  
0c20: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
0c30: 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75 63   $DB.  } {no suc
0c40: 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78 7d  h column: namex}
0c50: 0a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73 63  ..  ifcapable sc
0c60: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20  hema_pragmas {. 
0c70: 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33     do_test capi3
0c80: 63 2d 32 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  c-2.6 {.      ex
0c90: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
0ca0: 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65 28 78 29  BLE tablename(x)
0cb0: 7d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 31  }.      set sql1
0cc0: 36 20 5b 75 74 66 31 36 20 7b 50 52 41 47 4d 41  6 [utf16 {PRAGMA
0cd0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62   table_info("Tab
0ce0: 6c 65 4e 61 6d 65 22 29 7d 5d 0a 20 20 20 20 20  leName")}].     
0cf0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
0d00: 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20  e3_prepare16_v2 
0d10: 20 24 44 42 20 24 73 71 6c 31 36 20 2d 31 20 54   $DB $sql16 -1 T
0d20: 41 49 4c 5d 0a 20 20 20 20 20 20 73 71 6c 69 74  AIL].      sqlit
0d30: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
0d40: 20 20 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20    } SQLITE_ROW. 
0d50: 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33     do_test capi3
0d60: 63 2d 32 2e 37 20 7b 0a 20 20 20 20 20 20 73 71  c-2.7 {.      sq
0d70: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
0d80: 0a 20 20 20 20 7d 20 53 51 4c 49 54 45 5f 44 4f  .    } SQLITE_DO
0d90: 4e 45 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63  NE.    do_test c
0da0: 61 70 69 33 63 2d 32 2e 38 20 7b 0a 20 20 20 20  api3c-2.8 {.    
0db0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
0dc0: 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 7d 20 53  ze $STMT.    } S
0dd0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d 20  QLITE_OK.  }..} 
0de0: 3b 23 20 65 6e 64 69 66 20 75 74 66 31 36 0a 0a  ;# endif utf16..
0df0: 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33  # rename sqlite3
0e00: 5f 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 6f 70  _open sqlite3_op
0e10: 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f 63 20 73 71  en_old.# proc sq
0e20: 6c 69 74 65 33 5f 6f 70 65 6e 20 7b 66 6e 61 6d  lite3_open {fnam
0e30: 65 20 6f 70 74 69 6f 6e 73 7d 20 7b 73 71 6c 69  e options} {sqli
0e40: 74 65 33 5f 6f 70 65 6e 5f 6e 65 77 20 24 66 6e  te3_open_new $fn
0e50: 61 6d 65 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a 64  ame $options}..d
0e60: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e  o_test capi3c-3.
0e70: 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20 5b 73  1 {.  set db2 [s
0e80: 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74 65 73 74  qlite3_open test
0e90: 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65  .db {}].  sqlite
0ea0: 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  3_errcode $db2.}
0eb0: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46   {SQLITE_OK}.# F
0ec0: 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65  IX ME: Should te
0ed0: 73 74 20 74 68 65 20 64 62 20 68 61 6e 64 6c 65  st the db handle
0ee0: 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20   works..do_test 
0ef0: 63 61 70 69 33 63 2d 33 2e 32 20 7b 0a 20 20 73  capi3c-3.2 {.  s
0f00: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62  qlite3_close $db
0f10: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
0f20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33  do_test capi3c-3
0f30: 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20  .3 {.  catch {. 
0f40: 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69     set db2 [sqli
0f50: 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67 75 73 2f  te3_open /bogus/
0f60: 70 61 74 68 2f 74 65 73 74 2e 64 62 20 7b 7d 5d  path/test.db {}]
0f70: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65  .  }.  sqlite3_e
0f80: 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53  rrcode $db2.} {S
0f90: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a  QLITE_CANTOPEN}.
0fa0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33  do_test capi3c-3
0fb0: 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .4 {.  sqlite3_e
0fc0: 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e  rrmsg $db2.} {un
0fd0: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
0fe0: 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74  abase file}.do_t
0ff0: 65 73 74 20 63 61 70 69 33 63 2d 33 2e 35 20 7b  est capi3c-3.5 {
1000: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1010: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1020: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
1030: 33 63 2d 33 2e 36 2e 31 2d 6d 69 73 75 73 65 20  3c-3.6.1-misuse 
1040: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
1050: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1060: 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74  _MISUSE}.do_test
1070: 20 63 61 70 69 33 63 2d 33 2e 36 2e 32 2d 6d 69   capi3c-3.6.2-mi
1080: 73 75 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  suse {.  sqlite3
1090: 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b  _errmsg $db2.} {
10a0: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
10b0: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
10c0: 71 75 65 6e 63 65 7d 0a 69 66 63 61 70 61 62 6c  quence}.ifcapabl
10d0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f  e {utf16} {.  do
10e0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e 36  _test capi3c-3.6
10f0: 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20  .3-misuse {.    
1100: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72  utf8 [sqlite3_er
1110: 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 20 20 7d  rmsg16 $db2].  }
1120: 20 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   {library routin
1130: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
1140: 73 65 71 75 65 6e 63 65 7d 0a 7d 0a 0a 23 20 72  sequence}.}..# r
1150: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
1160: 65 6e 20 22 22 0a 23 20 72 65 6e 61 6d 65 20 73  en "".# rename s
1170: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 20  qlite3_open_old 
1180: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a 0a 69 66  sqlite3_open..if
1190: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
11a0: 7b 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  {.do_test capi3c
11b0: 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32  -4.1 {.  set db2
11c0: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36   [sqlite3_open16
11d0: 20 5b 75 74 66 31 36 20 74 65 73 74 2e 64 62 5d   [utf16 test.db]
11e0: 20 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65   {}].  sqlite3_e
11f0: 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53  rrcode $db2.} {S
1200: 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20  QLITE_OK}.# FIX 
1210: 4d 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20  ME: Should test 
1220: 74 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f  the db handle wo
1230: 72 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70  rks..do_test cap
1240: 69 33 63 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69  i3c-4.2 {.  sqli
1250: 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d  te3_close $db2.}
1260: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
1270: 74 65 73 74 20 63 61 70 69 33 63 2d 34 2e 33 20  test capi3c-4.3 
1280: 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20  {.  catch {.    
1290: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
12a0: 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20 2f  _open16 [utf16 /
12b0: 62 6f 67 75 73 2f 70 61 74 68 2f 74 65 73 74 2e  bogus/path/test.
12c0: 64 62 5d 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71  db] {}].  }.  sq
12d0: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64  lite3_errcode $d
12e0: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e  b2.} {SQLITE_CAN
12f0: 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63  TOPEN}.do_test c
1300: 61 70 69 33 63 2d 34 2e 34 20 7b 0a 20 20 75 74  api3c-4.4 {.  ut
1310: 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d  f8 [sqlite3_errm
1320: 73 67 31 36 20 24 64 62 32 5d 0a 7d 20 7b 75 6e  sg16 $db2].} {un
1330: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
1340: 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74  abase file}.do_t
1350: 65 73 74 20 63 61 70 69 33 63 2d 34 2e 35 20 7b  est capi3c-4.5 {
1360: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1370: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1380: 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a  OK}.} ;# utf16..
1390: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
13a0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
13b0: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63 61  following API ca
13c0: 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33  lls:.#.# sqlite3
13d0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20  _column_count.# 
13e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
13f0: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
1400: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71  lumn_name16.# sq
1410: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1420: 6c 74 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f  ltype.# sqlite3_
1430: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
1440: 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61  6.#.# $STMT is a
1450: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
1460: 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69  atement. $test i
1470: 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20  s a prefix.# to 
1480: 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d  use for test nam
1490: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70  es within this p
14a0: 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61  roc. $names is a
14b0: 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63   list.# of the c
14c0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
14d0: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72   should be retur
14e0: 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20  ned by $STMT..# 
14f0: 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61 20  $decltypes is a 
1500: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  list of column d
1510: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73  eclaration types
1520: 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20   for $STMT..#.# 
1530: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
1540: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
1550: 72 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43  repare_v2 "SELEC
1560: 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44  T 1, 2, 2;" -1 D
1570: 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65  UMMY].# check_he
1580: 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20  ader test1.1 {1 
1590: 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a  2 3} {"" "" ""}.
15a0: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68 65 61  #.proc check_hea
15b0: 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20 6e  der {STMT test n
15c0: 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73 7d 20  ames decltypes} 
15d0: 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20 72  {..  # Use the r
15e0: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
15f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1600: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
1610: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
1620: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
1630: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
1640: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73  umn_count.  # is
1650: 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69   3, build the li
1660: 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65  st {0 1 2}..  se
1670: 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73  t ::idxlist [lis
1680: 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f  t].  set ::numco
1690: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ls [sqlite3_colu
16a0: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a  mn_count $STMT].
16b0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
16c0: 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73  {$i < $::numcols
16d0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70  } {incr i} {lapp
16e0: 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69  end ::idxlist $i
16f0: 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  }..  # Column na
1700: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64  mes in UTF-8.  d
1710: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b  o_test $test.1 {
1720: 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69  .    set cnameli
1730: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  st [list].    fo
1740: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
1750: 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c   {lappend cnamel
1760: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
1770: 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  umn_name $STMT $
1780: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1790: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65  melist.  } $name
17a0: 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  s..  # Column na
17b0: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
17c0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
17d0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
17e0: 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20 20 20  $test.2 {.      
17f0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1800: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1810: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1820: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1830: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1840: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1850: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
1860: 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ].      }.      
1870: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
1880: 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a    } $names.  }..
1890: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
18a0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
18b0: 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20  est $test.3 {.  
18c0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
18d0: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
18e0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
18f0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
1900: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1910: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1920: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1930: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1940: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1950: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1960: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1970: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1980: 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73 65 74  st.4 {.      set
1990: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
19a0: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
19b0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
19c0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
19d0: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
19e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
19f0: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
1a00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1a10: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1a20: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1a30: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1a40: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1a50: 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20 20 73   $test.5 {.    s
1a60: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1a70: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1a80: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1a90: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1aa0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1ab0: 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d  cltype $STMT $i]
1ac0: 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65  } .    set cname
1ad0: 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c 74 79  list.  } $declty
1ae0: 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  pes..  # Column 
1af0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
1b00: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66  s in UTF-16.  if
1b10: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1b20: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
1b30: 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20 73 65  est.6 {.      se
1b40: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
1b50: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
1b60: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
1b70: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
1b80: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
1b90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1ba0: 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 24  cltype16 $STMT $
1bb0: 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i]].      }.    
1bc0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1bd0: 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73      } $decltypes
1be0: 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20  .  }...  # Test 
1bf0: 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61 6e 67  some out of rang
1c00: 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20  e conditions:.  
1c10: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1c20: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1c30: 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20 20 20  $test.7 {.      
1c40: 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20 20 5b  list \.        [
1c50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1c60: 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a  ame $STMT -1] \.
1c70: 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33          [sqlite3
1c80: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
1c90: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
1ca0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1cb0: 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d  mn_decltype $STM
1cc0: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1cd0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1ce0: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
1cf0: 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b   -1] \.        [
1d00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1d10: 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f  ame $STMT $numco
1d20: 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73  ls] \.        [s
1d30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1d40: 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63  me16 $STMT $numc
1d50: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
1d60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1d70: 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 6e  ecltype $STMT $n
1d80: 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20  umcols] \.      
1d90: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
1da0: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
1db0: 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20  MT $numcols].   
1dc0: 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20   } {{} {} {} {} 
1dd0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d  {} {} {} {}}.  }
1de0: 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  .} ..# This proc
1df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
1e00: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
1e10: 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71  PI calls:.#.# sq
1e20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1e30: 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  gin_name.# sqlit
1e40: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
1e50: 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65  _name16.# sqlite
1e60: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
1e70: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
1e80: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
1e90: 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  6.# sqlite3_colu
1ea0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1eb0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1ec0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
1ed0: 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61  6.#.# $STMT is a
1ee0: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
1ef0: 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69  atement. $test i
1f00: 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20  s a prefix.# to 
1f10: 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d  use for test nam
1f20: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70  es within this p
1f30: 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61  roc. $names is a
1f40: 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63   list.# of the c
1f50: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
1f60: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72   should be retur
1f70: 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20  ned by $STMT..# 
1f80: 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61 20  $decltypes is a 
1f90: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  list of column d
1fa0: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73  eclaration types
1fb0: 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20   for $STMT..#.# 
1fc0: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
1fd0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
1fe0: 72 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43  repare_v2 "SELEC
1ff0: 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44  T 1, 2, 2;" -1 D
2000: 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65  UMMY].# check_he
2010: 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20  ader test1.1 {1 
2020: 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a  2 3} {"" "" ""}.
2030: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69  #.proc check_ori
2040: 67 69 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d 54  gin_header {STMT
2050: 20 74 65 73 74 20 64 62 73 20 74 61 62 6c 65 73   test dbs tables
2060: 20 63 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20   cols} {.  # If 
2070: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
2080: 72 69 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64  rigin_name() and
2090: 20 66 72 69 65 6e 64 73 20 61 72 65 20 6e 6f 74   friends are not
20a0: 20 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20   compiled into. 
20b0: 20 23 20 74 68 69 73 20 62 75 69 6c 64 2c 20 74   # this build, t
20c0: 68 69 73 20 70 72 6f 63 20 69 73 20 61 20 6e 6f  his proc is a no
20d0: 2d 6f 70 2e 0a 69 66 63 61 70 61 62 6c 65 20 63  -op..ifcapable c
20e0: 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a  olumnmetadata {.
20f0: 0a 20 20 20 20 23 20 55 73 65 20 74 68 65 20 72  .    # Use the r
2100: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
2110: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
2120: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
2130: 20 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63     # a list of c
2140: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
2150: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
2160: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20  olumn_count.    
2170: 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68  # is 3, build th
2180: 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a  e list {0 1 2}..
2190: 20 20 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73      set ::idxlis
21a0: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74  t [list].    set
21b0: 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69   ::numcols [sqli
21c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
21d0: 20 24 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20   $STMT].    for 
21e0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
21f0: 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63  $::numcols} {inc
2200: 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a  r i} {lappend ::
2210: 69 64 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20  idxlist $i}.  . 
2220: 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e 61     # Database na
2230: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2240: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38   do_test $test.8
2250: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61   {.      set cna
2260: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
2270: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
2280: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20  dxlist {.       
2290: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
22a0: 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  st [sqlite3_colu
22b0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
22c0: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20   $STMT $i].     
22d0: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e   } .      set cn
22e0: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64  amelist.    } $d
22f0: 62 73 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61  bs.  .    # Data
2300: 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54  base names in UT
2310: 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62  F-16.    ifcapab
2320: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20  le {utf16} {.   
2330: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
2340: 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  .9 {.        set
2350: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
2360: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
2370: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
2380: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2390: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
23a0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
23b0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
23c0: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
23d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65      }.        se
23e0: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
23f0: 20 20 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20    } $dbs.    }. 
2400: 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61   .    # Table na
2410: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2420: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2430: 30 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  0 {.      set cn
2440: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2450: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2460: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2470: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2480: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
2490: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24  umn_table_name $
24a0: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
24b0: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
24c0: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62  elist.    } $tab
24d0: 6c 65 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62  les.  .    # Tab
24e0: 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  le names in UTF-
24f0: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2500: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2510: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2520: 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  1 {.        set 
2530: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
2540: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
2550: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
2560: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2570: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
2580: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2590: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54  table_name16 $ST
25a0: 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20  MT $i]].        
25b0: 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  }.        set cn
25c0: 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20  amelist.      } 
25d0: 24 74 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20  $tables.    }.  
25e0: 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61  .    # Origin na
25f0: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2600: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2610: 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  2 {.      set cn
2620: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2630: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2640: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2650: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2660: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
2670: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20  umn_origin_name 
2680: 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20  $STMT $i].      
2690: 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61  } .      set cna
26a0: 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f  melist.    } $co
26b0: 6c 73 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67  ls.  .    # Orig
26c0: 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  in declaration t
26d0: 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ypes in UTF-16. 
26e0: 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74     ifcapable {ut
26f0: 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f  f16} {.      do_
2700: 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a  test $test.13 {.
2710: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
2720: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2730: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2740: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2750: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d      lappend cnam
2760: 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c  elist [utf8 [sql
2770: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2780: 69 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  in_name16 $STMT 
2790: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
27a0: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
27b0: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f  list.      } $co
27c0: 6c 73 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  ls.    }.  }.}..
27d0: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
27e0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
27f0: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a  following APIs:.
2800: 23 0a 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61  #.# sqlite3_data
2810: 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33  _count.# sqlite3
2820: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73  _column_type.# s
2830: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2840: 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  t.# sqlite3_colu
2850: 6d 6e 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65  mn_text.# sqlite
2860: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a  3_column_text16.
2870: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2880: 5f 64 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d  _double.#.# $STM
2890: 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20  T is a compiled 
28a0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  SQL statement fo
28b0: 72 20 77 68 69 63 68 20 74 68 65 20 70 72 65 76  r which the prev
28c0: 69 6f 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20  ious call .# to 
28d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74  sqlite3_step ret
28e0: 75 72 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57  urned SQLITE_ROW
28f0: 2e 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65  . $test is a pre
2900: 66 69 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f  fix to use .# fo
2910: 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74  r test names wit
2920: 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24  hin this proc. $
2930: 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74 20  types is a list 
2940: 6f 66 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65  of the .# manife
2950: 73 74 20 74 79 70 65 73 20 66 6f 72 20 74 68 65  st types for the
2960: 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69   current row. $i
2970: 6e 74 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e  nts, $doubles an
2980: 64 20 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65  d $strings.# are
2990: 20 6c 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e   lists of the in
29a0: 74 65 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20  teger, real and 
29b0: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
29c0: 61 74 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20  ations of.# the 
29d0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75  values in the cu
29e0: 72 72 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45  rrent row..#.# E
29f0: 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20  xample:.#.# set 
2a00: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
2a10: 65 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54  epare_v2 "SELECT
2a20: 20 27 68 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e   'hello', 1.1, N
2a30: 55 4c 4c 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23  ULL" -1 DUMMY].#
2a40: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
2a50: 54 4d 54 0a 23 20 63 68 65 63 6b 5f 64 61 74 61  TMT.# check_data
2a60: 20 74 65 73 74 31 2e 32 20 7b 54 45 58 54 20 52   test1.2 {TEXT R
2a70: 45 41 4c 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30  EAL NULL} {0 1 0
2a80: 7d 20 7b 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c  } {0 1.1 0} {hel
2a90: 6c 6f 20 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f  lo 1.1 {}}.#.pro
2aa0: 63 20 63 68 65 63 6b 5f 64 61 74 61 20 7b 53 54  c check_data {ST
2ab0: 4d 54 20 74 65 73 74 20 74 79 70 65 73 20 69 6e  MT test types in
2ac0: 74 73 20 64 6f 75 62 6c 65 73 20 73 74 72 69 6e  ts doubles strin
2ad0: 67 73 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74  gs} {..  # Use t
2ae0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
2af0: 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  of sqlite3_colum
2b00: 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69  n_count() to bui
2b10: 6c 64 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66  ld.  # a list of
2b20: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e   column indexes.
2b30: 20 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33   i.e. If sqlite3
2b40: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20  _column_count.  
2b50: 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68  # is 3, build th
2b60: 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a  e list {0 1 2}..
2b70: 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20    set ::idxlist 
2b80: 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d  [list].  set num
2b90: 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 64 61  cols [sqlite3_da
2ba0: 74 61 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a  ta_count $STMT].
2bb0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
2bc0: 7b 24 69 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20  {$i < $numcols} 
2bd0: 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e  {incr i} {lappen
2be0: 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a  d ::idxlist $i}.
2bf0: 0a 23 20 74 79 70 65 73 0a 64 6f 5f 74 65 73 74  .# types.do_test
2c00: 20 24 74 65 73 74 2e 31 20 7b 0a 20 20 73 65 74   $test.1 {.  set
2c10: 20 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20   types [list].  
2c20: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
2c30: 73 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65  st {lappend type
2c40: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
2c50: 6e 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d  n_type $STMT $i]
2c60: 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20  }.  set types.} 
2c70: 24 74 79 70 65 73 0a 0a 23 20 49 6e 74 65 67 65  $types..# Intege
2c80: 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  rs.do_test $test
2c90: 2e 32 20 7b 0a 20 20 73 65 74 20 69 6e 74 73 20  .2 {.  set ints 
2ca0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
2cb0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
2cc0: 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69 74  pend ints [sqlit
2cd0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20  e3_column_int64 
2ce0: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
2cf0: 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23   ints.} $ints..#
2d00: 20 62 79 74 65 73 0a 73 65 74 20 6c 65 6e 73 20   bytes.set lens 
2d10: 5b 6c 69 73 74 5d 0a 66 6f 72 65 61 63 68 20 69  [list].foreach i
2d20: 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20   $::idxlist {.  
2d30: 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b 73 74  lappend lens [st
2d40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e  ring length [lin
2d50: 64 65 78 20 24 73 74 72 69 6e 67 73 20 24 69 5d  dex $strings $i]
2d60: 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ].}.do_test $tes
2d70: 74 2e 33 20 7b 0a 20 20 73 65 74 20 62 79 74 65  t.3 {.  set byte
2d80: 73 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 6c  s [list].  set l
2d90: 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  ens [list].  for
2da0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2db0: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79  {.    lappend by
2dc0: 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tes [sqlite3_col
2dd0: 75 6d 6e 5f 62 79 74 65 73 20 24 53 54 4d 54 20  umn_bytes $STMT 
2de0: 24 69 5d 0a 20 20 7d 0a 20 20 73 65 74 20 62 79  $i].  }.  set by
2df0: 74 65 73 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20 62  tes.} $lens..# b
2e00: 79 74 65 73 31 36 0a 69 66 63 61 70 61 62 6c 65  ytes16.ifcapable
2e10: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 73 65 74   {utf16} {.  set
2e20: 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66   lens [list].  f
2e30: 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c  oreach i $::idxl
2e40: 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  ist {.    lappen
2e50: 64 20 6c 65 6e 73 20 5b 65 78 70 72 20 32 20 2a  d lens [expr 2 *
2e60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
2e70: 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e 67 73  [lindex $strings
2e80: 20 24 69 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f 5f   $i]]].  }.  do_
2e90: 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b 0a 20  test $test.4 {. 
2ea0: 20 20 20 73 65 74 20 62 79 74 65 73 20 5b 6c 69     set bytes [li
2eb0: 73 74 5d 0a 20 20 20 20 73 65 74 20 6c 65 6e 73  st].    set lens
2ec0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
2ed0: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
2ee0: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 62  .      lappend b
2ef0: 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ytes [sqlite3_co
2f00: 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 24 53 54  lumn_bytes16 $ST
2f10: 4d 54 20 24 69 5d 0a 20 20 20 20 7d 0a 20 20 20  MT $i].    }.   
2f20: 20 73 65 74 20 62 79 74 65 73 0a 20 20 7d 20 24   set bytes.  } $
2f30: 6c 65 6e 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a 64  lens.}..# Blob.d
2f40: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35 20 7b  o_test $test.5 {
2f50: 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73  .  set utf8 [lis
2f60: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
2f70: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
2f80: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63   utf8 [sqlite3_c
2f90: 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d 54  olumn_blob $STMT
2fa0: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
2fb0: 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 55  .} $strings..# U
2fc0: 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65  TF-8.do_test $te
2fd0: 73 74 2e 36 20 7b 0a 20 20 73 65 74 20 75 74 66  st.6 {.  set utf
2fe0: 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  8 [list].  forea
2ff0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
3000: 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c  append utf8 [sql
3010: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3020: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3030: 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67  t utf8.} $string
3040: 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74  s..# Floats.do_t
3050: 65 73 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20  est $test.7 {.  
3060: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
3070: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3080: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
3090: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
30a0: 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54 20  mn_double $STMT 
30b0: 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a  $i]}.  set utf8.
30c0: 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54  } $doubles..# UT
30d0: 46 2d 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b  F-16.ifcapable {
30e0: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
30f0: 73 74 20 24 74 65 73 74 2e 38 20 7b 0a 20 20 20  st $test.8 {.   
3100: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
3110: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24  .    foreach i $
3120: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
3130: 20 75 74 66 38 20 5b 75 74 66 38 20 5b 73 71 6c   utf8 [utf8 [sql
3140: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3150: 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 7d 0a 20  16 $STMT $i]]}. 
3160: 20 20 20 73 65 74 20 75 74 66 38 0a 20 20 7d 20     set utf8.  } 
3170: 24 73 74 72 69 6e 67 73 0a 7d 0a 0a 23 20 49 6e  $strings.}..# In
3180: 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74 20 24  tegers.do_test $
3190: 74 65 73 74 2e 39 20 7b 0a 20 20 73 65 74 20 69  test.9 {.  set i
31a0: 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  nts [list].  for
31b0: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
31c0: 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20 5b 73  {lappend ints [s
31d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
31e0: 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  t $STMT $i]}.  s
31f0: 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a  et ints.} $ints.
3200: 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73  .# Floats.do_tes
3210: 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20 20 73  t $test.10 {.  s
3220: 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20  et utf8 [list]. 
3230: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
3240: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66  ist {lappend utf
3250: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
3260: 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24  n_double $STMT $
3270: 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d  i]}.  set utf8.}
3280: 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46   $doubles..# UTF
3290: 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  -8.do_test $test
32a0: 2e 31 31 20 7b 0a 20 20 73 65 74 20 75 74 66 38  .11 {.  set utf8
32b0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
32c0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
32d0: 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69  ppend utf8 [sqli
32e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
32f0: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
3300: 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73   utf8.} $strings
3310: 0a 0a 23 20 54 79 70 65 73 0a 64 6f 5f 74 65 73  ..# Types.do_tes
3320: 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20 20 73  t $test.12 {.  s
3330: 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a  et types [list].
3340: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3350: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 74 79  list {lappend ty
3360: 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  pes [sqlite3_col
3370: 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54 20 24  umn_type $STMT $
3380: 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a  i]}.  set types.
3390: 7d 20 24 74 79 70 65 73 0a 0a 23 20 54 65 73 74  } $types..# Test
33a0: 20 74 68 61 74 20 61 6e 20 6f 75 74 20 6f 66 20   that an out of 
33b0: 72 61 6e 67 65 20 72 65 71 75 65 73 74 20 72 65  range request re
33c0: 74 75 72 6e 73 20 74 68 65 20 65 71 75 69 76 61  turns the equiva
33d0: 6c 65 6e 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f 5f  lent of NULL.do_
33e0: 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a  test $test.13 {.
33f0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
3400: 5f 69 6e 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20  _int $STMT -1.} 
3410: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  {0}.do_test $tes
3420: 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  t.13 {.  sqlite3
3430: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54  _column_text $ST
3440: 4d 54 20 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69  MT -1.} {}..}..i
3450: 66 63 61 70 61 62 6c 65 20 21 66 6c 6f 61 74 69  fcapable !floati
3460: 6e 67 70 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69  ngpoint {.  fini
3470: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
3480: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  .}..do_test capi
3490: 33 63 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73  3c-5.0 {.  execs
34a0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
34b0: 54 41 42 4c 45 20 74 31 28 61 20 56 41 52 49 4e  TABLE t1(a VARIN
34c0: 54 2c 20 62 20 42 4c 4f 42 2c 20 63 20 56 41 52  T, b BLOB, c VAR
34d0: 43 48 41 52 28 31 36 29 29 3b 0a 20 20 20 20 49  CHAR(16));.    I
34e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
34f0: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
3500: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3510: 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20  1 VALUES('one', 
3520: 27 74 77 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20  'two', NULL);.  
3530: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
3540: 20 56 41 4c 55 45 53 28 31 2e 32 2c 20 31 2e 33   VALUES(1.2, 1.3
3550: 2c 20 31 2e 34 29 3b 0a 20 20 7d 0a 20 20 73 65  , 1.4);.  }.  se
3560: 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 2a 20  t sql "SELECT * 
3570: 46 52 4f 4d 20 74 31 22 0a 20 20 73 65 74 20 53  FROM t1".  set S
3580: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
3590: 70 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c  pare_v2 $DB $sql
35a0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
35b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
35c0: 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63   $STMT.} 3..chec
35d0: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
35e0: 61 70 69 33 63 2d 35 2e 31 20 7b 61 20 62 20 63  api3c-5.1 {a b c
35f0: 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56  } {VARINT BLOB V
3600: 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63  ARCHAR(16)}.chec
3610: 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20  k_origin_header 
3620: 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 31  $STMT capi3c-5.1
3630: 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e   {main main main
3640: 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20  } {t1 t1 t1} {a 
3650: 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  b c}.do_test cap
3660: 69 33 63 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69  i3c-5.2 {.  sqli
3670: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3680: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65   SQLITE_ROW..che
3690: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
36a0: 63 61 70 69 33 63 2d 35 2e 33 20 7b 61 20 62 20  capi3c-5.3 {a b 
36b0: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
36c0: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
36d0: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
36e0: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
36f0: 33 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69  3 {main main mai
3700: 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61  n} {t1 t1 t1} {a
3710: 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61   b c}.check_data
3720: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3730: 34 20 7b 49 4e 54 45 47 45 52 20 49 4e 54 45 47  4 {INTEGER INTEG
3740: 45 52 20 54 45 58 54 7d 20 7b 31 20 32 20 33 7d  ER TEXT} {1 2 3}
3750: 20 7b 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b   {1.0 2.0 3.0} {
3760: 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 2 3}..do_test 
3770: 63 61 70 69 33 63 2d 35 2e 35 20 7b 0a 20 20 73  capi3c-5.5 {.  s
3780: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
3790: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a  T.} SQLITE_ROW..
37a0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
37b0: 4d 54 20 63 61 70 69 33 63 2d 35 2e 36 20 7b 61  MT capi3c-5.6 {a
37c0: 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c   b c} {VARINT BL
37d0: 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a  OB VARCHAR(16)}.
37e0: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
37f0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63  der $STMT capi3c
3800: 2d 35 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20  -5.6 {main main 
3810: 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d  main} {t1 t1 t1}
3820: 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64   {a b c}.check_d
3830: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63  ata $STMT capi3c
3840: 2d 35 2e 37 20 7b 54 45 58 54 20 54 45 58 54 20  -5.7 {TEXT TEXT 
3850: 4e 55 4c 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30  NULL} {0 0 0} {0
3860: 2e 30 20 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65  .0 0.0 0.0} {one
3870: 20 74 77 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73   two {}}..do_tes
3880: 74 20 63 61 70 69 33 63 2d 35 2e 38 20 7b 0a 20  t capi3c-5.8 {. 
3890: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
38a0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
38b0: 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24  ..check_header $
38c0: 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 39 20  STMT capi3c-5.9 
38d0: 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20  {a b c} {VARINT 
38e0: 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29  BLOB VARCHAR(16)
38f0: 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68  }.check_origin_h
3900: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3910: 33 63 2d 35 2e 39 20 7b 6d 61 69 6e 20 6d 61 69  3c-5.9 {main mai
3920: 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74  n main} {t1 t1 t
3930: 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b  1} {a b c}.check
3940: 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69  _data $STMT capi
3950: 33 63 2d 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46  3c-5.10 {FLOAT F
3960: 4c 4f 41 54 20 54 45 58 54 7d 20 7b 31 20 31 20  LOAT TEXT} {1 1 
3970: 31 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d  1} {1.2 1.3 1.4}
3980: 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a   {1.2 1.3 1.4}..
3990: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35  do_test capi3c-5
39a0: 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .11 {.  sqlite3_
39b0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
39c0: 49 54 45 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73  ITE_DONE..do_tes
39d0: 74 20 63 61 70 69 33 63 2d 35 2e 31 32 20 7b 0a  t capi3c-5.12 {.
39e0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
39f0: 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ze $STMT.} SQLIT
3a00: 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK..do_test ca
3a10: 70 69 33 63 2d 35 2e 32 30 20 7b 0a 20 20 73 65  pi3c-5.20 {.  se
3a20: 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61 2c  t sql "SELECT a,
3a30: 20 73 75 6d 28 62 29 2c 20 6d 61 78 28 63 29 20   sum(b), max(c) 
3a40: 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59  FROM t1 GROUP BY
3a50: 20 61 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b   a".  set STMT [
3a60: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
3a70: 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  v2 $DB $sql -1 T
3a80: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63  AIL].  sqlite3_c
3a90: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d  olumn_count $STM
3aa0: 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61  T.} 3..check_hea
3ab0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63  der $STMT capi3c
3ac0: 2d 35 2e 32 31 20 7b 61 20 73 75 6d 28 62 29 20  -5.21 {a sum(b) 
3ad0: 6d 61 78 28 63 29 7d 20 7b 56 41 52 49 4e 54 20  max(c)} {VARINT 
3ae0: 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69  {} {}}.check_ori
3af0: 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54  gin_header $STMT
3b00: 20 63 61 70 69 33 63 2d 35 2e 32 32 20 7b 6d 61   capi3c-5.22 {ma
3b10: 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d  in {} {}} {t1 {}
3b20: 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64   {}} {a {} {}}.d
3b30: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e  o_test capi3c-5.
3b40: 32 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  23 {.  sqlite3_f
3b50: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
3b60: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74 20  SQLITE_OK...set 
3b70: 3a 3a 45 4e 43 20 5b 65 78 65 63 73 71 6c 20 7b  ::ENC [execsql {
3b80: 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 7d  pragma encoding}
3b90: 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74  ].db close..do_t
3ba0: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 30 20 7b  est capi3c-6.0 {
3bb0: 0a 62 74 72 65 65 5f 62 72 65 61 6b 70 6f 69 6e  .btree_breakpoin
3bc0: 74 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  t.  sqlite3 db t
3bd0: 65 73 74 2e 64 62 0a 20 20 73 65 74 20 44 42 20  est.db.  set DB 
3be0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
3bf0: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
3c00: 62 74 72 65 65 5f 62 72 65 61 6b 70 6f 69 6e 74  btree_breakpoint
3c10: 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 24  .  sqlite3_key $
3c20: 44 42 20 78 79 7a 7a 79 0a 20 20 73 65 74 20 73  DB xyzzy.  set s
3c30: 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  ql {SELECT a FRO
3c40: 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20 72 6f  M t1 order by ro
3c50: 77 69 64 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  wid}.  set STMT 
3c60: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
3c70: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
3c80: 54 41 49 4c 5d 0a 20 20 65 78 70 72 20 30 0a 7d  TAIL].  expr 0.}
3c90: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {0}.do_test cap
3ca0: 69 33 63 2d 36 2e 31 20 7b 0a 20 20 64 62 20 63  i3c-6.1 {.  db c
3cb0: 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c  ache flush.  sql
3cc0: 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d  ite3_close $DB.}
3cd0: 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 7d 0a 64   {SQLITE_BUSY}.d
3ce0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36 2e  o_test capi3c-6.
3cf0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
3d00: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
3d10: 54 45 5f 52 4f 57 7d 0a 63 68 65 63 6b 5f 64 61  TE_ROW}.check_da
3d20: 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  ta $STMT capi3c-
3d30: 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20 7b 31  6.3 {INTEGER} {1
3d40: 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74  } {1.0} {1}.do_t
3d50: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 33 20 7b  est capi3c-6.3 {
3d60: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
3d70: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  ize $STMT.} {SQL
3d80: 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20  ITE_OK}.do_test 
3d90: 63 61 70 69 33 63 2d 36 2e 34 20 7b 0a 20 20 64  capi3c-6.4 {.  d
3da0: 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20  b cache flush.  
3db0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44  sqlite3_close $D
3dc0: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
3dd0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36  do_test capi3c-6
3de0: 2e 39 39 2d 6d 69 73 75 73 65 20 7b 0a 20 20 64  .99-misuse {.  d
3df0: 62 20 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 69 66  b close.} {}..if
3e00: 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73   {![sqlite3 -has
3e10: 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 54  -codec]} {.  # T
3e20: 65 73 74 20 77 68 61 74 20 68 61 70 70 65 6e 73  est what happens
3e30: 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61 72   when the librar
3e40: 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 6e  y encounters a n
3e50: 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74  ewer file format
3e60: 2e 0a 20 20 23 20 44 6f 20 74 68 69 73 20 62 79  ..  # Do this by
3e70: 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 66 69   updating the fi
3e80: 6c 65 20 66 6f 72 6d 61 74 20 76 69 61 20 74 68  le format via th
3e90: 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 0a 20  e btree layer.. 
3ea0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
3eb0: 37 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  7.1 {.    set ::
3ec0: 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74  bt [btree_open t
3ed0: 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20 20  est.db 10 0].   
3ee0: 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61   btree_begin_tra
3ef0: 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a 20  nsaction $::bt. 
3f00: 20 20 20 73 65 74 20 6d 65 74 61 20 5b 62 74 72     set meta [btr
3f10: 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62  ee_get_meta $::b
3f20: 74 5d 0a 20 20 20 20 6c 73 65 74 20 6d 65 74 61  t].    lset meta
3f30: 20 32 20 35 0a 20 20 20 20 65 76 61 6c 20 5b 63   2 5.    eval [c
3f40: 6f 6e 63 61 74 20 62 74 72 65 65 5f 75 70 64 61  oncat btree_upda
3f50: 74 65 5f 6d 65 74 61 20 24 3a 3a 62 74 20 5b 6c  te_meta $::bt [l
3f60: 72 61 6e 67 65 20 24 6d 65 74 61 20 30 20 65 6e  range $meta 0 en
3f70: 64 5d 5d 0a 20 20 20 20 62 74 72 65 65 5f 63 6f  d]].    btree_co
3f80: 6d 6d 69 74 20 24 3a 3a 62 74 0a 20 20 20 20 62  mmit $::bt.    b
3f90: 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74  tree_close $::bt
3fa0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
3fb0: 74 20 63 61 70 69 33 63 2d 37 2e 32 20 7b 0a 20  t capi3c-7.2 {. 
3fc0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
3fd0: 73 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73  st.db.    catchs
3fe0: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
3ff0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
4000: 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20  master;.    }.  
4010: 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65  } {1 {unsupporte
4020: 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a  d file format}}.
4030: 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66    db close.}..if
4040: 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73   {![sqlite3 -has
4050: 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e  -codec]} {.  # N
4060: 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65  ow test that the
4070: 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63 74   library correct
4080: 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73  ly handles bogus
4090: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a   entries in the.
40a0: 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65    # sqlite_maste
40b0: 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20  r table (schema 
40c0: 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64  corruption)..  d
40d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e  o_test capi3c-8.
40e0: 31 20 7b 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  1 {.    file del
40f0: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force test.
4100: 64 62 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65  db.    file dele
4110: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64  te -force test.d
4120: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
4130: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4140: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4150: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
4160: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
4170: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
4180: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
4190: 69 33 63 2d 38 2e 32 20 7b 0a 20 20 20 20 73 65  i3c-8.2 {.    se
41a0: 74 20 3a 3a 62 74 20 5b 62 74 72 65 65 5f 6f 70  t ::bt [btree_op
41b0: 65 6e 20 74 65 73 74 2e 64 62 20 31 30 20 30 5d  en test.db 10 0]
41c0: 0a 20 20 20 20 62 74 72 65 65 5f 62 65 67 69 6e  .    btree_begin
41d0: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a  _transaction $::
41e0: 62 74 0a 20 20 20 20 73 65 74 20 3a 3a 62 63 20  bt.    set ::bc 
41f0: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a  [btree_cursor $:
4200: 3a 62 74 20 31 20 31 5d 0a 0a 20 20 20 20 23 20  :bt 1 1]..    # 
4210: 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20  Build a 5-field 
4220: 72 6f 77 20 72 65 63 6f 72 64 20 63 6f 6e 73 69  row record consi
4230: 73 74 69 6e 67 20 6f 66 20 35 20 6e 75 6c 6c 20  sting of 5 null 
4240: 72 65 63 6f 72 64 73 2e 20 54 68 69 73 20 69 73  records. This is
4250: 0a 20 20 20 20 23 20 6f 66 66 69 63 69 61 6c 6c  .    # officiall
4260: 79 20 62 6c 61 63 6b 20 6d 61 67 69 63 2e 0a 20  y black magic.. 
4270: 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20     catch {unset 
4280: 64 61 74 61 7d 0a 20 20 20 20 73 65 74 20 64 61  data}.    set da
4290: 74 61 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61  ta [binary forma
42a0: 74 20 63 36 20 7b 36 20 30 20 30 20 30 20 30 20  t c6 {6 0 0 0 0 
42b0: 30 7d 5d 0a 20 20 20 20 62 74 72 65 65 5f 69 6e  0}].    btree_in
42c0: 73 65 72 74 20 24 3a 3a 62 63 20 35 20 24 64 61  sert $::bc 5 $da
42d0: 74 61 0a 0a 20 20 20 20 62 74 72 65 65 5f 63 6c  ta..    btree_cl
42e0: 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 63  ose_cursor $::bc
42f0: 0a 20 20 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69  .    btree_commi
4300: 74 20 24 3a 3a 62 74 0a 20 20 20 20 62 74 72 65  t $::bt.    btre
4310: 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74 0a 20 20  e_close $::bt.  
4320: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  } {}.  do_test c
4330: 61 70 69 33 63 2d 38 2e 33 20 7b 0a 20 20 20 20  api3c-8.3 {.    
4340: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4350: 64 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20  db.    catchsql 
4360: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
4370: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4380: 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ter;.    }.  } {
4390: 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74  1 {malformed dat
43a0: 61 62 61 73 65 20 73 63 68 65 6d 61 7d 7d 0a 20  abase schema}}. 
43b0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
43c0: 38 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  8.4 {.    set ::
43d0: 62 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74  bt [btree_open t
43e0: 65 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20 20  est.db 10 0].   
43f0: 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61   btree_begin_tra
4400: 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a 20  nsaction $::bt. 
4410: 20 20 20 73 65 74 20 3a 3a 62 63 20 5b 62 74 72     set ::bc [btr
4420: 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 74 20  ee_cursor $::bt 
4430: 31 20 31 5d 0a 20 20 0a 20 20 20 20 23 20 42 75  1 1].  .    # Bu
4440: 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72 6f  ild a 5-field ro
4450: 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 66 69  w record. The fi
4460: 72 73 74 20 66 69 65 6c 64 20 69 73 20 61 20 73  rst field is a s
4470: 74 72 69 6e 67 20 27 74 61 62 6c 65 27 2c 20 61  tring 'table', a
4480: 6e 64 0a 20 20 20 20 23 20 73 75 62 73 65 71 75  nd.    # subsequ
4490: 65 6e 74 20 66 69 65 6c 64 73 20 61 72 65 20 61  ent fields are a
44a0: 6c 6c 20 4e 55 4c 4c 2e 20 52 65 70 6c 61 63 65  ll NULL. Replace
44b0: 20 74 68 65 20 6f 74 68 65 72 20 62 72 6f 6b 65   the other broke
44c0: 6e 20 72 65 63 6f 72 64 20 77 69 74 68 0a 20 20  n record with.  
44d0: 20 20 23 20 74 68 69 73 20 6f 6e 65 20 61 6e 64    # this one and
44e0: 20 74 72 79 20 74 6f 20 72 65 61 64 20 74 68 65   try to read the
44f0: 20 73 63 68 65 6d 61 20 61 67 61 69 6e 2e 20 54   schema again. T
4500: 68 65 20 62 72 6f 6b 65 6e 20 72 65 63 6f 72 64  he broken record
4510: 20 75 73 65 73 0a 20 20 20 20 23 20 65 69 74 68   uses.    # eith
4520: 65 72 20 55 54 46 2d 38 20 6f 72 20 6e 61 74 69  er UTF-8 or nati
4530: 76 65 20 55 54 46 2d 31 36 20 28 69 66 20 74 68  ve UTF-16 (if th
4540: 69 73 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  is file is being
4550: 20 72 75 6e 20 62 79 0a 20 20 20 20 23 20 75 74   run by.    # ut
4560: 66 31 36 2e 74 65 73 74 29 2e 0a 20 20 20 20 69  f16.test)..    i
4570: 66 20 7b 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  f { [string matc
4580: 68 20 55 54 46 2d 31 36 2a 20 24 3a 3a 45 4e 43  h UTF-16* $::ENC
4590: 5d 20 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  ] } {.      set 
45a0: 64 61 74 61 20 5b 62 69 6e 61 72 79 20 66 6f 72  data [binary for
45b0: 6d 61 74 20 63 36 61 31 30 20 7b 36 20 33 33 20  mat c6a10 {6 33 
45c0: 30 20 30 20 30 20 30 7d 20 5b 75 74 66 31 36 20  0 0 0 0} [utf16 
45d0: 74 61 62 6c 65 5d 5d 0a 20 20 20 20 7d 20 65 6c  table]].    } el
45e0: 73 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20 64  se {.      set d
45f0: 61 74 61 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d  ata [binary form
4600: 61 74 20 63 36 61 35 20 7b 36 20 32 33 20 30 20  at c6a5 {6 23 0 
4610: 30 20 30 20 30 7d 20 74 61 62 6c 65 5d 0a 20 20  0 0 0} table].  
4620: 20 20 7d 0a 20 20 20 20 62 74 72 65 65 5f 69 6e    }.    btree_in
4630: 73 65 72 74 20 24 3a 3a 62 63 20 35 20 24 64 61  sert $::bc 5 $da
4640: 74 61 0a 20 20 0a 20 20 20 20 62 74 72 65 65 5f  ta.  .    btree_
4650: 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a  close_cursor $::
4660: 62 63 0a 20 20 20 20 62 74 72 65 65 5f 63 6f 6d  bc.    btree_com
4670: 6d 69 74 20 24 3a 3a 62 74 0a 20 20 20 20 62 74  mit $::bt.    bt
4680: 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 74 0a  ree_close $::bt.
4690: 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65 73    } {};.  do_tes
46a0: 74 20 63 61 70 69 33 63 2d 38 2e 35 20 7b 0a 20  t capi3c-8.5 {. 
46b0: 20 20 20 64 62 20 63 6c 6f 73 65 20 0a 20 20 20     db close .   
46c0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
46d0: 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c  .db.    catchsql
46e0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
46f0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4700: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4710: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
4720: 74 61 62 61 73 65 20 73 63 68 65 6d 61 7d 7d 0a  tabase schema}}.
4730: 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 69 6c    db close.}.fil
4740: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
4750: 74 65 73 74 2e 64 62 0a 66 69 6c 65 20 64 65 6c  test.db.file del
4760: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force test.
4770: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23 20 54  db-journal...# T
4780: 65 73 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20  est the english 
4790: 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20  language string 
47a0: 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20  equivalents for 
47b0: 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  sqlite error cod
47c0: 65 73 0a 73 65 74 20 63 6f 64 65 32 65 6e 67 6c  es.set code2engl
47d0: 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51 4c 49  ish [list \.SQLI
47e0: 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 7b 6e  TE_OK         {n
47f0: 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c 0a 53  ot an error} \.S
4800: 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20 20  QLITE_ERROR     
4810: 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   {SQL logic erro
4820: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
4830: 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  abase} \.SQLITE_
4840: 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63 65  PERM       {acce
4850: 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65  ss permission de
4860: 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41  nied} \.SQLITE_A
4870: 42 4f 52 54 20 20 20 20 20 20 7b 63 61 6c 6c 62  BORT      {callb
4880: 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75  ack requested qu
4890: 65 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53 51 4c  ery abort} \.SQL
48a0: 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 7b  ITE_BUSY       {
48b0: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
48c0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43  ed} \.SQLITE_LOC
48d0: 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62 61 73  KED     {databas
48e0: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
48f0: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45  d} \.SQLITE_NOME
4900: 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20 6d  M      {out of m
4910: 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45 5f  emory} \.SQLITE_
4920: 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74 65  READONLY   {atte
4930: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
4940: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
4950: 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45 52  } \.SQLITE_INTER
4960: 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70 74  RUPT  {interrupt
4970: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f 45  ed} \.SQLITE_IOE
4980: 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49 2f  RR      {disk I/
4990: 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  O error} \.SQLIT
49a0: 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64 61  E_CORRUPT    {da
49b0: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
49c0: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 20  e is malformed} 
49d0: 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20  \.SQLITE_FULL   
49e0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f 72      {database or
49f0: 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20 5c   disk is full} \
4a00: 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e  .SQLITE_CANTOPEN
4a10: 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70     {unable to op
4a20: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
4a30: 7d 20 5c 0a 53 51 4c 49 54 45 5f 50 52 4f 54 4f  } \.SQLITE_PROTO
4a40: 43 4f 4c 20 20 20 7b 64 61 74 61 62 61 73 65 20  COL   {database 
4a50: 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c  locking protocol
4a60: 20 66 61 69 6c 75 72 65 7d 20 5c 0a 53 51 4c 49   failure} \.SQLI
4a70: 54 45 5f 45 4d 50 54 59 20 20 20 20 20 20 7b 74  TE_EMPTY      {t
4a80: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  able contains no
4a90: 20 64 61 74 61 7d 20 5c 0a 53 51 4c 49 54 45 5f   data} \.SQLITE_
4aa0: 53 43 48 45 4d 41 20 20 20 20 20 7b 64 61 74 61  SCHEMA     {data
4ab0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
4ac0: 63 68 61 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54  changed} \.SQLIT
4ad0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f  E_CONSTRAINT {co
4ae0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d  nstraint failed}
4af0: 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   \.SQLITE_MISMAT
4b00: 43 48 20 20 20 7b 64 61 74 61 74 79 70 65 20 6d  CH   {datatype m
4b10: 69 73 6d 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54  ismatch} \.SQLIT
4b20: 45 5f 4d 49 53 55 53 45 20 20 20 20 20 7b 6c 69  E_MISUSE     {li
4b30: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
4b40: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
4b50: 65 6e 63 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e  ence} \.SQLITE_N
4b60: 4f 4c 46 53 20 20 20 20 20 20 7b 6b 65 72 6e 65  OLFS      {kerne
4b70: 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20 66 69  l lacks large fi
4b80: 6c 65 20 73 75 70 70 6f 72 74 7d 20 5c 0a 53 51  le support} \.SQ
4b90: 4c 49 54 45 5f 41 55 54 48 20 20 20 20 20 20 20  LITE_AUTH       
4ba0: 7b 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64  {authorization d
4bb0: 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  enied} \.SQLITE_
4bc0: 46 4f 52 4d 41 54 20 20 20 20 20 7b 61 75 78 69  FORMAT     {auxi
4bd0: 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
4be0: 6f 72 6d 61 74 20 65 72 72 6f 72 7d 20 5c 0a 53  ormat error} \.S
4bf0: 51 4c 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20  QLITE_RANGE     
4c00: 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e   {bind or column
4c10: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
4c20: 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f  nge} \.SQLITE_NO
4c30: 54 41 44 42 20 20 20 20 20 7b 66 69 6c 65 20 69  TADB     {file i
4c40: 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69  s encrypted or i
4c50: 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
4c60: 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72  } \.unknownerror
4c70: 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65        {unknown e
4c80: 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74  rror} \.]..set t
4c90: 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a 66 6f 72  est_number 1.for
4ca0: 65 61 63 68 20 7b 63 6f 64 65 20 65 6e 67 6c 69  each {code engli
4cb0: 73 68 7d 20 24 63 6f 64 65 32 65 6e 67 6c 69 73  sh} $code2englis
4cc0: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  h {.  do_test ca
4cd0: 70 69 33 63 2d 39 2e 24 74 65 73 74 5f 6e 75 6d  pi3c-9.$test_num
4ce0: 62 65 72 20 22 73 71 6c 69 74 65 33 5f 74 65 73  ber "sqlite3_tes
4cf0: 74 5f 65 72 72 73 74 72 20 24 63 6f 64 65 22 20  t_errstr $code" 
4d00: 24 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63 72 20  $english.  incr 
4d10: 74 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23  test_number.}..#
4d20: 20 54 65 73 74 20 74 68 65 20 65 72 72 6f 72 20   Test the error 
4d30: 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61 20 22  message when a "
4d40: 72 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d 65 6d  real" out of mem
4d50: 6f 72 79 20 6f 63 63 75 72 73 2e 0a 69 66 20 7b  ory occurs..if {
4d60: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 73 71  [info command sq
4d70: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74  lite_malloc_stat
4d80: 5d 21 3d 22 22 7d 20 7b 0a 73 65 74 20 73 71 6c  ]!=""} {.set sql
4d90: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20  ite_malloc_fail 
4da0: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  1.do_test capi3c
4db0: 2d 31 30 2d 31 20 7b 0a 20 20 73 71 6c 69 74 65  -10-1 {.  sqlite
4dc0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73  3 db test.db.  s
4dd0: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
4de0: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
4df0: 72 20 64 62 5d 0a 20 20 73 71 6c 69 74 65 5f 6d  r db].  sqlite_m
4e00: 61 6c 6c 6f 63 5f 66 61 69 6c 20 31 0a 20 20 63  alloc_fail 1.  c
4e10: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 73 65  atchsql {.    se
4e20: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
4e30: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d  te_master;.  }.}
4e40: 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f   {1 {out of memo
4e50: 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ry}}.do_test cap
4e60: 69 33 63 2d 31 30 2d 32 20 7b 0a 20 20 73 71 6c  i3c-10-2 {.  sql
4e70: 69 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44  ite3_errmsg $::D
4e80: 42 0a 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f  B.} {out of memo
4e90: 72 79 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  ry}.ifcapable {u
4ea0: 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  tf16} {.  do_tes
4eb0: 74 20 63 61 70 69 33 63 2d 31 30 2d 33 20 7b 0a  t capi3c-10-3 {.
4ec0: 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65      utf8 [sqlite
4ed0: 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44 42  3_errmsg16 $::DB
4ee0: 5d 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65  ].  } {out of me
4ef0: 6d 6f 72 79 7d 0a 7d 0a 64 62 20 63 6c 6f 73 65  mory}.}.db close
4f00: 0a 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66  .sqlite_malloc_f
4f10: 61 69 6c 20 30 0a 7d 0a 0a 23 20 54 68 65 20 66  ail 0.}..# The f
4f20: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d  ollowing tests -
4f30: 20 63 61 70 69 33 63 2d 31 31 2e 2a 20 2d 20 74   capi3c-11.* - t
4f40: 65 73 74 20 74 68 61 74 20 61 20 43 4f 4d 4d 49  est that a COMMI
4f50: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23 20  T or ROLLBACK.# 
4f60: 73 74 61 74 65 6d 65 6e 74 20 69 73 73 75 65 64  statement issued
4f70: 20 77 68 69 6c 65 20 74 68 65 72 65 20 61 72 65   while there are
4f80: 20 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64 69   still outstandi
4f90: 6e 67 20 56 4d 73 20 74 68 61 74 20 61 72 65 20  ng VMs that are 
4fa0: 70 61 72 74 20 6f 66 0a 23 20 74 68 65 20 74 72  part of.# the tr
4fb0: 61 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c 73 2e  ansaction fails.
4fc0: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
4fd0: 2e 64 62 0a 73 65 74 20 44 42 20 5b 73 71 6c 69  .db.set DB [sqli
4fe0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
4ff0: 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69 74  ointer db].sqlit
5000: 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f  e_register_test_
5010: 66 75 6e 63 74 69 6f 6e 20 24 44 42 20 66 75 6e  function $DB fun
5020: 63 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  c.do_test capi3c
5030: 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -11.1 {.  execsq
5040: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
5050: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5060: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e  t1(a, b);.    IN
5070: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5080: 55 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20  UES(1, 'int');. 
5090: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
50a0: 31 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74  1 VALUES(2, 'not
50b0: 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b  atype');.  }.} {
50c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
50d0: 2d 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.1.1 {.  sqli
50e0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
50f0: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5100: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32 20 7b  st capi3c-11.2 {
5110: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
5120: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
5130: 24 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63  $DB "SELECT func
5140: 28 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20  (b, a) FROM t1" 
5150: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
5160: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5170: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5180: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 33  test capi3c-11.3
5190: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
51a0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
51b0: 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d  } {1 {cannot com
51c0: 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
51d0: 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
51e0: 20 69 6e 20 70 72 6f 67 72 65 73 73 7d 7d 0a 64   in progress}}.d
51f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5200: 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .3.1 {.  sqlite3
5210: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5220: 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20  $DB.} 0.do_test 
5230: 63 61 70 69 33 63 2d 31 31 2e 34 20 7b 0a 20 20  capi3c-11.4 {.  
5240: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5250: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5260: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5270: 33 63 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69  3c-11.5 {.  sqli
5280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
5290: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
52a0: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
52b0: 33 63 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63  3c-11.6 {.  catc
52c0: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
52d0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
52e0: 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e  .} {0 {1 int 2 n
52f0: 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73  otatype}}.do_tes
5300: 74 20 63 61 70 69 33 63 2d 31 31 2e 36 2e 31 20  t capi3c-11.6.1 
5310: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
5320: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5330: 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   0.do_test capi3
5340: 63 2d 31 31 2e 37 20 7b 0a 20 20 63 61 74 63 68  c-11.7 {.  catch
5350: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5360: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5370: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5380: 2e 37 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .7.1 {.  sqlite3
5390: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
53a0: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
53b0: 63 61 70 69 33 63 2d 31 31 2e 38 20 7b 0a 20 20  capi3c-11.8 {.  
53c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
53d0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 29  EATE TABLE t2(a)
53e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
53f0: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t2 VALUES(1);.
5400: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5410: 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20  t2 VALUES(2);.  
5420: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53    BEGIN;.    INS
5430: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
5440: 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ES(3);.  }.} {}.
5450: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5460: 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  1.8.1 {.  sqlite
5470: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5480: 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74   $DB.} 0.do_test
5490: 20 63 61 70 69 33 63 2d 31 31 2e 39 20 7b 0a 20   capi3c-11.9 {. 
54a0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
54b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
54c0: 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  B "SELECT a FROM
54d0: 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t2" -1 TAIL].  
54e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
54f0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5500: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5510: 2d 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.9.1 {.  sqli
5520: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5530: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5540: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 32  st capi3c-11.9.2
5550: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5560: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
5570: 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72  }.} {1 {cannot r
5580: 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
5590: 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  ion - SQL statem
55a0: 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
55b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
55c0: 63 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c  c-11.9.3 {.  sql
55d0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
55e0: 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74  mit $DB.} 0.do_t
55f0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 30  est capi3c-11.10
5600: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5610: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5620: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5630: 61 70 69 33 63 2d 31 31 2e 31 31 20 7b 0a 20 20  api3c-11.11 {.  
5640: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5650: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5660: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5670: 2d 31 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74  -11.12 {.  sqlit
5680: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5690: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f  {SQLITE_DONE}.do
56a0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
56b0: 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  13 {.  sqlite3_f
56c0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
56d0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
56e0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 34  est capi3c-11.14
56f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5700: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
5710: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t2;.  }.} {1 2 
5720: 33 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  3}.do_test capi3
5730: 63 2d 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73 71  c-11.14.1 {.  sq
5740: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
5750: 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f  mmit $DB.} 0.do_
5760: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
5770: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
5780: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
5790: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
57a0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 35  est capi3c-11.15
57b0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .1 {.  sqlite3_g
57c0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
57d0: 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 1.do_test ca
57e0: 70 69 33 63 2d 31 31 2e 31 36 20 7b 0a 20 20 65  pi3c-11.16 {.  e
57f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5800: 45 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT a FROM t2;. 
5810: 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 23 20 53 61   }.} {1 2}..# Sa
5820: 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 74 68  nity check on th
5830: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
5840: 27 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 27  'outstanding VM'
5850: 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 61 6e 79  . This means any
5860: 20 56 4d 0a 23 20 74 68 61 74 20 68 61 73 20 68   VM.# that has h
5870: 61 64 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ad sqlite3_step(
5880: 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20 72 65  ) called more re
5890: 63 65 6e 74 6c 79 20 74 68 61 6e 20 73 71 6c 69  cently than sqli
58a0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f  te3_finalize() o
58b0: 72 0a 23 20 73 71 6c 69 74 65 33 5f 72 65 73 65  r.# sqlite3_rese
58c0: 74 28 29 2e 20 53 6f 20 61 20 56 4d 20 74 68 61  t(). So a VM tha
58d0: 74 20 68 61 73 20 6a 75 73 74 20 62 65 65 6e 20  t has just been 
58e0: 70 72 65 70 61 72 65 64 20 6f 72 20 72 65 73 65  prepared or rese
58f0: 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63 6f 75  t does not.# cou
5900: 6e 74 20 61 73 20 61 6e 20 61 63 74 69 76 65 20  nt as an active 
5910: 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  VM..do_test capi
5920: 33 63 2d 31 31 2e 31 37 20 7b 0a 20 20 65 78 65  3c-11.17 {.  exe
5930: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
5940: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
5950: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 38 20  st capi3c-11.18 
5960: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
5970: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
5980: 20 24 44 42 20 22 53 45 4c 45 43 54 20 61 20 46   $DB "SELECT a F
5990: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
59a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
59b0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
59c0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
59d0: 61 70 69 33 63 2d 31 31 2e 31 39 20 7b 0a 20 20  api3c-11.19 {.  
59e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
59f0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5a00: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5a10: 2d 31 31 2e 32 30 20 7b 0a 20 20 63 61 74 63 68  -11.20 {.  catch
5a20: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
5a30: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
5a40: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f  .} {1 {cannot co
5a50: 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
5a60: 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
5a70: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 7d 7d 0a  s in progress}}.
5a80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5a90: 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.20 {.  sqlite3
5aa0: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 63  _reset $STMT.  c
5ab0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f  atchsql {.    CO
5ac0: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  MMIT;.  }.} {0 {
5ad0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5ae0: 63 2d 31 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69  c-11.21 {.  sqli
5af0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
5b00: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
5b10: 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ..# The followin
5b20: 67 20 74 65 73 74 73 20 2d 20 63 61 70 69 33 63  g tests - capi3c
5b30: 2d 31 32 2e 2a 20 2d 20 63 68 65 63 6b 20 74 68  -12.* - check th
5b40: 61 74 20 69 74 27 73 20 4f 6b 20 74 6f 20 73 74  at it's Ok to st
5b50: 61 72 74 20 61 0a 23 20 74 72 61 6e 73 61 63 74  art a.# transact
5b60: 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68 65 72 20  ion while other 
5b70: 56 4d 73 20 61 72 65 20 61 63 74 69 76 65 2c 20  VMs are active, 
5b80: 61 6e 64 20 74 68 61 74 20 69 74 27 73 20 4f 6b  and that it's Ok
5b90: 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20 61 74   to execute.# at
5ba0: 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69 6e 20  omic updates in 
5bb0: 74 68 65 20 73 61 6d 65 20 73 69 74 75 61 74 69  the same situati
5bc0: 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  on .#.do_test ca
5bd0: 70 69 33 63 2d 31 32 2e 31 20 7b 0a 20 20 73 65  pi3c-12.1 {.  se
5be0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
5bf0: 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 22  prepare_v2 $DB "
5c00: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
5c10: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  " -1 TAIL].  sql
5c20: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5c30: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
5c40: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32  o_test capi3c-12
5c50: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
5c60: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
5c70: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 4e  O t1 VALUES(3, N
5c80: 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  ULL);.  }.} {0 {
5c90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5ca0: 63 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  c-12.3 {.  catch
5cb0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
5cc0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5cd0: 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  4);.  }.} {0 {}}
5ce0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5cf0: 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71  12.4 {.  catchsq
5d00: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
5d10: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5d20: 31 20 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c 4c  1 VALUES(4, NULL
5d30: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  );.  }.} {0 {}}.
5d40: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5d50: 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.5 {.  sqlite3_
5d60: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5d70: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5d80: 74 20 63 61 70 69 33 63 2d 31 32 2e 35 2e 31 20  t capi3c-12.5.1 
5d90: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
5da0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5db0: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61  _ROW}.do_test ca
5dc0: 70 69 33 63 2d 31 32 2e 36 20 7b 0a 20 20 73 71  pi3c-12.6 {.  sq
5dd0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5de0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d  .} {SQLITE_DONE}
5df0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5e00: 31 32 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.7 {.  sqlite3
5e10: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5e20: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
5e30: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5e40: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
5e50: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
5e60: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
5e70: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  ;.  }.} {1 2 3 4
5e80: 7d 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  }..# Test cases 
5e90: 63 61 70 69 33 63 2d 31 33 2e 2a 20 74 65 73 74  capi3c-13.* test
5ea0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6c 65   the sqlite3_cle
5eb0: 61 72 5f 62 69 6e 64 69 6e 67 73 28 29 20 61 6e  ar_bindings() an
5ec0: 64 20 0a 23 20 73 71 6c 69 74 65 33 5f 73 6c 65  d .# sqlite3_sle
5ed0: 65 70 20 41 50 49 73 2e 0a 23 0a 69 66 20 7b 5b  ep APIs..#.if {[
5ee0: 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f  llength [info co
5ef0: 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 63  mmands sqlite3_c
5f00: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 5d 5d 3e  lear_bindings]]>
5f10: 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  0} {.  do_test c
5f20: 61 70 69 33 63 2d 31 33 2e 31 20 7b 0a 20 20 20  api3c-13.1 {.   
5f30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5f40: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
5f50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 53  .    }.    set S
5f60: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
5f70: 70 61 72 65 5f 76 32 20 24 44 42 20 22 49 4e 53  pare_v2 $DB "INS
5f80: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
5f90: 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41 49  ES(?, ?)" -1 TAI
5fa0: 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  L].    sqlite3_s
5fb0: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
5fc0: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f  QLITE_DONE}.  do
5fd0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2e  _test capi3c-13.
5fe0: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
5ff0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20  reset $STMT.    
6000: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6010: 74 20 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f 20  t $STMT 1 hello 
6020: 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  5.    sqlite3_bi
6030: 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 32 20  nd_text $STMT 2 
6040: 77 6f 72 6c 64 20 35 0a 20 20 20 20 73 71 6c 69  world 5.    sqli
6050: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
6060: 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d   } {SQLITE_DONE}
6070: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
6080: 63 2d 31 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c  c-13.3 {.    sql
6090: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
60a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65  .    sqlite3_cle
60b0: 61 72 5f 62 69 6e 64 69 6e 67 73 20 24 53 54 4d  ar_bindings $STM
60c0: 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  T.    sqlite3_st
60d0: 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51  ep $STMT.  } {SQ
60e0: 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f  LITE_DONE}.  do_
60f0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2d 34  test capi3c-13-4
6100: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
6110: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
6120: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6130: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6140: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b  t1;.    }.  } {{
6150: 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72 6c 64  } {} hello world
6160: 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c   {} {}}.}.if {[l
6170: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d  length [info com
6180: 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f 73 6c  mands sqlite3_sl
6190: 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f  eep]]>0} {.  do_
61a0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2d 35  test capi3c-13-5
61b0: 20 7b 0a 20 20 20 20 73 65 74 20 6d 73 20 5b 73   {.    set ms [s
61c0: 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 38 30 5d  qlite3_sleep 80]
61d0: 0a 20 20 20 20 65 78 70 72 20 7b 24 6d 73 3d 3d  .    expr {$ms==
61e0: 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30 30 30 7d  80 || $ms==1000}
61f0: 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 54 69  .  } {1}.}..# Ti
6200: 63 6b 65 74 20 23 31 32 31 39 3a 20 20 4d 61 6b  cket #1219:  Mak
6210: 65 20 73 75 72 65 20 62 69 6e 64 69 6e 67 20 41  e sure binding A
6220: 50 49 73 20 63 61 6e 20 68 61 6e 64 6c 65 20 61  PIs can handle a
6230: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a 23   NULL pointer..#
6240: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6250: 31 34 2e 31 20 7b 0a 20 20 73 65 74 20 72 63 20  14.1 {.  set rc 
6260: 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f  [catch {sqlite3_
6270: 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20 68 65  bind_text 0 1 he
6280: 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20 6c 61  llo 5} msg].  la
6290: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20  ppend rc $msg.} 
62a0: 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  {1 SQLITE_MISUSE
62b0: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 36 35  }..# Ticket #165
62c0: 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20 6e 42  0:  Honor the nB
62d0: 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20 74  ytes parameter t
62e0: 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  o sqlite3_prepar
62f0: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  e..#.do_test cap
6300: 69 33 63 2d 31 35 2e 31 20 7b 0a 20 20 73 65 74  i3c-15.1 {.  set
6310: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46   sql {SELECT * F
6320: 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20 6e 62  ROM t2}.  set nb
6330: 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ytes [string len
6340: 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70 70 65  gth $sql].  appe
6350: 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45 20 61  nd sql { WHERE a
6360: 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  ==1}.  set STMT 
6370: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6380: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 24 6e 62  _v2 $DB $sql $nb
6390: 79 74 65 73 20 54 41 49 4c 5d 0a 20 20 73 71 6c  ytes TAIL].  sql
63a0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
63b0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
63c0: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b  _int $STMT 0.} {
63d0: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
63e0: 63 2d 31 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74  c-15.2 {.  sqlit
63f0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6400: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6410: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 32 7d  nt $STMT 0.} {2}
6420: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6430: 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  15.3 {.  sqlite3
6440: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6450: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23  } {SQLITE_OK}..#
6460: 20 4d 61 6b 65 20 73 75 72 65 20 63 6f 64 65 20   Make sure code 
6470: 69 73 20 61 6c 77 61 79 73 20 67 65 6e 65 72 61  is always genera
6480: 74 65 64 20 65 76 65 6e 20 69 66 20 61 6e 20 49  ted even if an I
6490: 46 20 45 58 49 53 54 53 20 6f 72 20 0a 23 20 49  F EXISTS or .# I
64a0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
64b0: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 74  use is present t
64c0: 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 64 6f  hat the table do
64d0: 65 73 20 6e 6f 74 20 6f 72 0a 23 20 64 6f 65 73  es not or.# does
64e0: 20 65 78 69 73 74 73 2e 20 20 54 68 61 74 20 77   exists.  That w
64f0: 61 79 20 77 65 20 77 69 6c 6c 20 61 6c 77 61 79  ay we will alway
6500: 73 20 68 61 76 65 20 61 20 70 72 65 70 61 72 65  s have a prepare
6510: 64 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 74 6f  d statement.# to
6520: 20 65 78 70 69 72 65 20 77 68 65 6e 20 74 68 65   expire when the
6530: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
6540: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .#.do_test capi3
6550: 63 2d 31 36 2e 31 20 7b 0a 20 20 73 65 74 20 73  c-16.1 {.  set s
6560: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 49  ql {DROP TABLE I
6570: 46 20 45 58 49 53 54 53 20 74 33 7d 0a 20 20 73  F EXISTS t3}.  s
6580: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6590: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
65a0: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
65b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
65c0: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
65d0: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
65e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
65f0: 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  6.2 {.  set sql 
6600: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  {CREATE TABLE IF
6610: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28 78   NOT EXISTS t1(x
6620: 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54 20  ,y)}.  set STMT 
6630: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6640: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
6650: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6660: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
6670: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
6680: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73  }.} {1}..# But s
6690: 74 69 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67  till we do not g
66a0: 65 6e 65 72 61 74 65 20 63 6f 64 65 20 69 66 20  enerate code if 
66b0: 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a  there is no SQL.
66c0: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  #.do_test capi3c
66d0: 2d 31 36 2e 33 20 7b 0a 20 20 73 65 74 20 53 54  -16.3 {.  set ST
66e0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
66f0: 61 72 65 5f 76 32 20 24 44 42 20 7b 7d 20 2d 31  are_v2 $DB {} -1
6700: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6710: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6720: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
6730: 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  "}.} {1}.do_test
6740: 20 63 61 70 69 33 63 2d 31 36 2e 34 20 7b 0a 20   capi3c-16.4 {. 
6750: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6760: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
6770: 42 20 7b 3b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  B {;} -1 TAIL]. 
6780: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6790: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
67a0: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
67b0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 34  ..# Ticket #2154
67c0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
67d0: 33 63 2d 31 37 2e 31 20 7b 0a 20 20 73 65 74 20  3c-17.1 {.  set 
67e0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
67f0: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45  epare_v2 $DB {SE
6800: 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d  LECT max(a) FROM
6810: 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t2} -1 TAIL].  
6820: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6830: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
6840: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6850: 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  7.2 {.  sqlite3_
6860: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6870: 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63   0.} 4.do_test c
6880: 61 70 69 33 63 2d 31 37 2e 33 20 7b 0a 20 20 73  api3c-17.3 {.  s
6890: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
68a0: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
68b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
68c0: 37 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  7.4 {.  sqlite3_
68d0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62  reset $STMT.  db
68e0: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 49 4e   eval {CREATE IN
68f0: 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 7d  DEX i2 ON t2(a)}
6900: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6910: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6920: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6930: 63 2d 31 37 2e 35 20 7b 0a 20 20 73 71 6c 69 74  c-17.5 {.  sqlit
6940: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6950: 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73  TMT 0.} 4.do_tes
6960: 74 20 63 61 70 69 33 63 2d 31 37 2e 36 20 7b 0a  t capi3c-17.6 {.
6970: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6980: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6990: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
69a0: 63 2d 31 37 2e 37 20 7b 0a 20 20 73 71 6c 69 74  c-17.7 {.  sqlit
69b0: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
69c0: 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 49   db eval {DROP I
69d0: 4e 44 45 58 20 69 32 7d 0a 20 20 73 71 6c 69 74  NDEX i2}.  sqlit
69e0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
69f0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6a00: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 38 20 7b  st capi3c-17.8 {
6a10: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6a20: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6a30: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
6a40: 2d 31 37 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65  -17.9 {.  sqlite
6a50: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6a60: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6a70: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 30 20  st capi3c-17.10 
6a80: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
6a90: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
6aa0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6ab0: 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 53  repare_v2 $DB {S
6ac0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20  ELECT b FROM t1 
6ad0: 57 48 45 52 45 20 61 3d 3f 7d 20 2d 31 20 54 41  WHERE a=?} -1 TA
6ae0: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  IL].  sqlite3_bi
6af0: 6e 64 5f 69 6e 74 20 24 53 54 4d 54 20 31 20 32  nd_int $STMT 1 2
6b00: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
6b10: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
6b20: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6b30: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 27 6f 6e   t1 VALUES(1,'on
6b40: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
6b50: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
6b60: 2c 27 74 77 6f 27 29 3b 0a 20 20 20 20 49 4e 53  ,'two');.    INS
6b70: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6b80: 45 53 28 33 2c 27 74 68 72 65 65 27 29 3b 0a 20  ES(3,'three');. 
6b90: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6ba0: 31 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72  1 VALUES(4,'four
6bb0: 27 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ');.  }.  sqlite
6bc0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6bd0: 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73  QLITE_ROW.do_tes
6be0: 74 20 63 61 70 69 33 63 2d 31 37 2e 31 31 20 7b  t capi3c-17.11 {
6bf0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6c00: 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a 7d  n_text $STMT 0.}
6c10: 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70   two.do_test cap
6c20: 69 33 63 2d 31 37 2e 31 32 20 7b 0a 20 20 73 71  i3c-17.12 {.  sq
6c30: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6c40: 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64  .} SQLITE_DONE.d
6c50: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6c60: 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .13 {.  sqlite3_
6c70: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62  reset $STMT.  db
6c80: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 49 4e   eval {CREATE IN
6c90: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 7d  DEX i1 ON t1(a)}
6ca0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6cb0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6cc0: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6cd0: 63 2d 31 37 2e 31 34 20 7b 0a 20 20 73 71 6c 69  c-17.14 {.  sqli
6ce0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
6cf0: 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f  $STMT 0.} two.do
6d00: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6d10: 31 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  15 {.  sqlite3_s
6d20: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6d30: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
6d40: 63 61 70 69 33 63 2d 31 37 2e 31 36 20 7b 0a 20  capi3c-17.16 {. 
6d50: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
6d60: 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b  STMT.  db eval {
6d70: 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20  DROP INDEX i1}. 
6d80: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6d90: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
6da0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6db0: 31 37 2e 31 37 20 7b 0a 20 20 73 71 6c 69 74 65  17.17 {.  sqlite
6dc0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
6dd0: 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f 74  TMT 0.} two.do_t
6de0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 38  est capi3c-17.18
6df0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
6e00: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6e10: 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61  _DONE.do_test ca
6e20: 70 69 33 63 2d 31 37 2e 39 39 20 7b 0a 20 20 73  pi3c-17.99 {.  s
6e30: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6e40: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
6e50: 4b 0a 0a 23 20 4f 6e 20 74 68 65 20 6d 61 69 6c  K..# On the mail
6e60: 69 6e 67 20 6c 69 73 74 20 69 74 20 68 61 73 20  ing list it has 
6e70: 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20 74 68  been reported th
6e80: 61 74 20 66 69 6e 61 6c 69 7a 69 6e 67 20 61 66  at finalizing af
6e90: 74 65 72 0a 23 20 61 6e 20 53 51 4c 49 54 45 5f  ter.# an SQLITE_
6ea0: 42 55 53 59 20 72 65 74 75 72 6e 20 6c 65 61 64  BUSY return lead
6eb0: 73 20 74 6f 20 61 20 73 65 67 66 61 75 6c 74 2e  s to a segfault.
6ec0: 20 20 48 65 72 65 20 77 65 20 74 65 73 74 20 74    Here we test t
6ed0: 68 61 74 20 63 61 73 65 2e 0a 23 0a 64 6f 5f 74  hat case..#.do_t
6ee0: 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 31 20  est capi3c-18.1 
6ef0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20  {.  sqlite3 db2 
6f00: 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 53 54  test.db.  set ST
6f10: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6f20: 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45  are_v2 $DB {SELE
6f30: 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20 74  CT max(a) FROM t
6f40: 31 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  1} -1 TAIL].  sq
6f50: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6f60: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6f70: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e  _test capi3c-18.
6f80: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  2 {.  sqlite3_co
6f90: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6fa0: 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 4.do_test cap
6fb0: 69 33 63 2d 31 38 2e 33 20 7b 0a 20 20 73 71 6c  i3c-18.3 {.  sql
6fc0: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
6fd0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 42 45 47  .  db2 eval {BEG
6fe0: 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 0a 20 20  IN EXCLUSIVE}.  
6ff0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7000: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 42 55 53 59  MT.} SQLITE_BUSY
7010: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7020: 31 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  18.4 {.  sqlite3
7030: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7040: 7d 20 53 51 4c 49 54 45 5f 42 55 53 59 0a 64 6f  } SQLITE_BUSY.do
7050: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e  _test capi3c-18.
7060: 35 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b  5 {.  db2 eval {
7070: 43 4f 4d 4d 49 54 7d 0a 20 20 64 62 32 20 63 6c  COMMIT}.  db2 cl
7080: 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63 6b  ose.} {}..# Tick
7090: 65 74 20 23 32 31 35 38 2e 20 20 54 68 65 20 73  et #2158.  The s
70a0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 69  qlite3_step() wi
70b0: 6c 6c 20 73 74 69 6c 6c 20 72 65 74 75 72 6e 20  ll still return 
70c0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 23 20  SQLITE_SCHEMA.# 
70d0: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
70e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 20 69  schema changes i
70f0: 6e 20 61 20 77 61 79 20 74 68 61 74 20 6d 61 6b  n a way that mak
7100: 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  es the statement
7110: 0a 23 20 6e 6f 20 6c 6f 6e 67 65 72 20 76 61 6c  .# no longer val
7120: 69 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  id..#.do_test ca
7130: 70 69 33 63 2d 31 39 2e 31 20 7b 0a 20 20 64 62  pi3c-19.1 {.  db
7140: 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52 45   eval {.     CRE
7150: 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 2c 79  ATE TABLE t3(x,y
7160: 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49  );.     INSERT I
7170: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c  NTO t3 VALUES(1,
7180: 32 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 53 54  2);.  }.  set ST
7190: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
71a0: 61 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45  are_v2 $DB {SELE
71b0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31  CT * FROM t3} -1
71c0: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
71d0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
71e0: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
71f0: 20 63 61 70 69 33 63 2d 31 39 2e 32 20 7b 0a 20   capi3c-19.2 {. 
7200: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7210: 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 31 0a  int $STMT 0.} 1.
7220: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7230: 39 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.3 {.  sqlite3_
7240: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
7250: 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74  ITE_DONE.do_test
7260: 20 63 61 70 69 33 63 2d 31 39 2e 34 20 7b 0a 20   capi3c-19.4 {. 
7270: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
7280: 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b  STMT.  db eval {
7290: 44 52 4f 50 20 54 41 42 4c 45 20 74 33 7d 0a 20  DROP TABLE t3}. 
72a0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
72b0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48  TMT.} SQLITE_SCH
72c0: 45 4d 41 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  EMA.do_test capi
72d0: 33 63 2d 31 39 2e 34 2e 32 20 7b 0a 20 20 73 71  3c-19.4.2 {.  sq
72e0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42  lite3_errmsg $DB
72f0: 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  .} {no such tabl
7300: 65 3a 20 74 33 7d 0a 64 6f 5f 74 65 73 74 20 63  e: t3}.do_test c
7310: 61 70 69 33 63 2d 31 39 2e 35 20 7b 0a 20 20 73  api3c-19.5 {.  s
7320: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
7330: 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  MT.  db eval {. 
7340: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
7350: 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20 49   t3(x,y);.     I
7360: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
7370: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a 20  LUES(1,2);.  }. 
7380: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7390: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
73a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
73b0: 31 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.6 {.  sqlite3
73c0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
73d0: 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20  T 1.} 2.do_test 
73e0: 63 61 70 69 33 63 2d 31 39 2e 39 39 20 7b 0a 20  capi3c-19.99 {. 
73f0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7400: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
7410: 5f 4f 4b 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  _OK..finish_test
7420: 0a                                               .