/ Hex Artifact Content
Login

Artifact 96e35164739c6fe3357fa36f0fe74bc23abc8ef7:


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: 37 20 32 30 30 37 2f 30 33 2f 33 30 20 32 30 3a  7 2007/03/30 20:
0240: 34 36 3a 31 34 20 64 72 68 20 45 78 70 20 24 0a  46:14 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 45 4d 50 54 59  } \.SQLITE_EMPTY
4a40: 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63 6f 6e        {table con
4a50: 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d 20 5c  tains no data} \
4a60: 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 20  .SQLITE_SCHEMA  
4a70: 20 20 20 7b 64 61 74 61 62 61 73 65 20 73 63 68     {database sch
4a80: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d  ema has changed}
4a90: 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52   \.SQLITE_CONSTR
4aa0: 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e 74  AINT {constraint
4ab0: 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49 54   failed} \.SQLIT
4ac0: 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64 61  E_MISMATCH   {da
4ad0: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d  tatype mismatch}
4ae0: 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   \.SQLITE_MISUSE
4af0: 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20 72 6f       {library ro
4b00: 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74  utine called out
4b10: 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20 5c 0a   of sequence} \.
4b20: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20 20  SQLITE_NOLFS    
4b30: 20 20 7b 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20    {kernel lacks 
4b40: 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f  large file suppo
4b50: 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55 54  rt} \.SQLITE_AUT
4b60: 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f 72 69  H       {authori
4b70: 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c  zation denied} \
4b80: 0a 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20 20  .SQLITE_FORMAT  
4b90: 20 20 20 7b 61 75 78 69 6c 69 61 72 79 20 64 61     {auxiliary da
4ba0: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
4bb0: 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 41  ror} \.SQLITE_RA
4bc0: 4e 47 45 20 20 20 20 20 20 7b 62 69 6e 64 20 6f  NGE      {bind o
4bd0: 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f  r column index o
4be0: 75 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53  ut of range} \.S
4bf0: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20  QLITE_NOTADB    
4c00: 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70   {file is encryp
4c10: 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ted or is not a 
4c20: 64 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e  database} \.unkn
4c30: 6f 77 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75  ownerror      {u
4c40: 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a  nknown error} \.
4c50: 5d 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62  ]..set test_numb
4c60: 65 72 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f  er 1.foreach {co
4c70: 64 65 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64  de english} $cod
4c80: 65 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f  e2english {.  do
4c90: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 39 2e 24  _test capi3c-9.$
4ca0: 74 65 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c  test_number "sql
4cb0: 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72  ite3_test_errstr
4cc0: 20 24 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68   $code" $english
4cd0: 0a 20 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d  .  incr test_num
4ce0: 62 65 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68  ber.}..# Test th
4cf0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4d00: 77 68 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75  when a "real" ou
4d10: 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75  t of memory occu
4d20: 72 73 2e 0a 69 66 20 7b 5b 69 6e 66 6f 20 63 6f  rs..if {[info co
4d30: 6d 6d 61 6e 64 20 73 71 6c 69 74 65 5f 6d 61 6c  mmand sqlite_mal
4d40: 6c 6f 63 5f 73 74 61 74 5d 21 3d 22 22 7d 20 7b  loc_stat]!=""} {
4d50: 0a 73 65 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  .set sqlite_mall
4d60: 6f 63 5f 66 61 69 6c 20 31 0a 64 6f 5f 74 65 73  oc_fail 1.do_tes
4d70: 74 20 63 61 70 69 33 63 2d 31 30 2d 31 20 7b 0a  t capi3c-10-1 {.
4d80: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4d90: 74 2e 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73  t.db.  set DB [s
4da0: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4db0: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20  n_pointer db].  
4dc0: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61  sqlite_malloc_fa
4dd0: 69 6c 20 31 0a 20 20 63 61 74 63 68 73 71 6c 20  il 1.  catchsql 
4de0: 7b 0a 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66  {.    select * f
4df0: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
4e00: 72 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 75 74  r;.  }.} {1 {out
4e10: 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f   of memory}}.do_
4e20: 74 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d 32  test capi3c-10-2
4e30: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
4e40: 6d 73 67 20 24 3a 3a 44 42 0a 7d 20 7b 6f 75 74  msg $::DB.} {out
4e50: 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 69 66 63 61   of memory}.ifca
4e60: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
4e70: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4e80: 2d 31 30 2d 33 20 7b 0a 20 20 20 20 75 74 66 38  -10-3 {.    utf8
4e90: 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   [sqlite3_errmsg
4ea0: 31 36 20 24 3a 3a 44 42 5d 0a 20 20 7d 20 7b 6f  16 $::DB].  } {o
4eb0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 7d 0a  ut of memory}.}.
4ec0: 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 5f  db close.sqlite_
4ed0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 30 0a 7d 0a  malloc_fail 0.}.
4ee0: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
4ef0: 20 74 65 73 74 73 20 2d 20 63 61 70 69 33 63 2d   tests - capi3c-
4f00: 31 31 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74  11.* - test that
4f10: 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c   a COMMIT or ROL
4f20: 4c 42 41 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e  LBACK.# statemen
4f30: 74 20 69 73 73 75 65 64 20 77 68 69 6c 65 20 74  t issued while t
4f40: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6f  here are still o
4f50: 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 20 74  utstanding VMs t
4f60: 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 0a  hat are part of.
4f70: 23 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  # the transactio
4f80: 6e 20 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33  n fails..sqlite3
4f90: 20 64 62 20 74 65 73 74 2e 64 62 0a 73 65 74 20   db test.db.set 
4fa0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
4fb0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
4fc0: 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67 69 73 74  b].sqlite_regist
4fd0: 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  er_test_function
4fe0: 20 24 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73   $DB func.do_tes
4ff0: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 20 7b 0a  t capi3c-11.1 {.
5000: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5010: 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54  BEGIN;.    CREAT
5020: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
5030: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5040: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 27  O t1 VALUES(1, '
5050: 69 6e 74 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  int');.    INSER
5060: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5070: 28 32 2c 20 27 6e 6f 74 61 74 79 70 65 27 29 3b  (2, 'notatype');
5080: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5090: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 2e 31 20  t capi3c-11.1.1 
50a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
50b0: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
50c0: 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   0.do_test capi3
50d0: 63 2d 31 31 2e 32 20 7b 0a 20 20 73 65 74 20 53  c-11.2 {.  set S
50e0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
50f0: 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c  pare_v2 $DB "SEL
5100: 45 43 54 20 66 75 6e 63 28 62 2c 20 61 29 20 46  ECT func(b, a) F
5110: 52 4f 4d 20 74 31 22 20 2d 31 20 54 41 49 4c 5d  ROM t1" -1 TAIL]
5120: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5130: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5140: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5150: 69 33 63 2d 31 31 2e 33 20 7b 0a 20 20 63 61 74  i3c-11.3 {.  cat
5160: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  chsql {.    COMM
5170: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61  IT;.  }.} {1 {ca
5180: 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
5190: 73 61 63 74 69 6f 6e 20 2d 20 53 51 4c 20 73 74  saction - SQL st
51a0: 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
51b0: 72 65 73 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  ress}}.do_test c
51c0: 61 70 69 33 63 2d 31 31 2e 33 2e 31 20 7b 0a 20  api3c-11.3.1 {. 
51d0: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
51e0: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a  ocommit $DB.} 0.
51f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5200: 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.4 {.  sqlite3_
5210: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5220: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
5230: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 35 20  est capi3c-11.5 
5240: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
5250: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
5260: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
5270: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 36 20  est capi3c-11.6 
5280: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5290: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
52a0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31   t1;.  }.} {0 {1
52b0: 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70 65 7d   int 2 notatype}
52c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
52d0: 2d 31 31 2e 36 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.6.1 {.  sqli
52e0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
52f0: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5300: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 37 20 7b  st capi3c-11.7 {
5310: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5320: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
5330: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
5340: 61 70 69 33 63 2d 31 31 2e 37 2e 31 20 7b 0a 20  api3c-11.7.1 {. 
5350: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5360: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a  ocommit $DB.} 1.
5370: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5380: 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.8 {.  execsql 
5390: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
53a0: 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e  LE t2(a);.    IN
53b0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
53c0: 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45  UES(1);.    INSE
53d0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
53e0: 53 28 32 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b  S(2);.    BEGIN;
53f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5400: 20 74 32 20 56 41 4c 55 45 53 28 33 29 3b 0a 20   t2 VALUES(3);. 
5410: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
5420: 63 61 70 69 33 63 2d 31 31 2e 38 2e 31 20 7b 0a  capi3c-11.8.1 {.
5430: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5440: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30  tocommit $DB.} 0
5450: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5460: 31 31 2e 39 20 7b 0a 20 20 73 65 74 20 53 54 4d  11.9 {.  set STM
5470: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5480: 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43  re_v2 $DB "SELEC
5490: 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20  T a FROM t2" -1 
54a0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
54b0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
54c0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
54d0: 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 31 20  t capi3c-11.9.1 
54e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
54f0: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5500: 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   0.do_test capi3
5510: 63 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61 74  c-11.9.2 {.  cat
5520: 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c  chsql {.    ROLL
5530: 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  BACK;.  }.} {1 {
5540: 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
5550: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 53 51  transaction - SQ
5560: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
5570: 70 72 6f 67 72 65 73 73 7d 7d 0a 64 6f 5f 74 65  progress}}.do_te
5580: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 33  st capi3c-11.9.3
5590: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
55a0: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
55b0: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
55c0: 33 63 2d 31 31 2e 31 30 20 7b 0a 20 20 73 71 6c  3c-11.10 {.  sql
55d0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
55e0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
55f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5600: 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .11 {.  sqlite3_
5610: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5620: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5630: 74 20 63 61 70 69 33 63 2d 31 31 2e 31 32 20 7b  t capi3c-11.12 {
5640: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5650: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5660: 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  DONE}.do_test ca
5670: 70 69 33 63 2d 31 31 2e 31 33 20 7b 0a 20 20 73  pi3c-11.13 {.  s
5680: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5690: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
56a0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
56b0: 33 63 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78 65  3c-11.14 {.  exe
56c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
56d0: 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T a FROM t2;.  }
56e0: 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65  .} {1 2 3}.do_te
56f0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 34 2e  st capi3c-11.14.
5700: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5710: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5720: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5730: 69 33 63 2d 31 31 2e 31 35 20 7b 0a 20 20 63 61  i3c-11.15 {.  ca
5740: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c  tchsql {.    ROL
5750: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20  LBACK;.  }.} {0 
5760: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5770: 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73  3c-11.15.1 {.  s
5780: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5790: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
57a0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
57b0: 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  16 {.  execsql {
57c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
57d0: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
57e0: 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63 68 65  2}..# Sanity che
57f0: 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69 6e 69  ck on the defini
5800: 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e  tion of 'outstan
5810: 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73 20 6d  ding VM'. This m
5820: 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20 74 68  eans any VM.# th
5830: 61 74 20 68 61 73 20 68 61 64 20 73 71 6c 69 74  at has had sqlit
5840: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 65 64  e3_step() called
5850: 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79 20 74   more recently t
5860: 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  han sqlite3_fina
5870: 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71 6c 69  lize() or.# sqli
5880: 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53 6f 20  te3_reset(). So 
5890: 61 20 56 4d 20 74 68 61 74 20 68 61 73 20 6a 75  a VM that has ju
58a0: 73 74 20 62 65 65 6e 20 70 72 65 70 61 72 65 64  st been prepared
58b0: 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73 20 6e   or reset does n
58c0: 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20 61 6e  ot.# count as an
58d0: 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74   active VM..do_t
58e0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 37  est capi3c-11.17
58f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5900: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20     BEGIN;.  }.} 
5910: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5920: 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20  c-11.18 {.  set 
5930: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5940: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45  epare_v2 $DB "SE
5950: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5960: 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68  -1 TAIL].  catch
5970: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5980: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5990: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
59a0: 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .19 {.  sqlite3_
59b0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
59c0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
59d0: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 30 20 7b  t capi3c-11.20 {
59e0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
59f0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d    BEGIN;.    COM
5a00: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63  MIT;.  }.} {1 {c
5a10: 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
5a20: 6e 73 61 63 74 69 6f 6e 20 2d 20 53 51 4c 20 73  nsaction - SQL s
5a30: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
5a40: 67 72 65 73 73 7d 7d 0a 64 6f 5f 74 65 73 74 20  gress}}.do_test 
5a50: 63 61 70 69 33 63 2d 31 31 2e 32 30 20 7b 0a 20  capi3c-11.20 {. 
5a60: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
5a70: 53 54 4d 54 0a 20 20 63 61 74 63 68 73 71 6c 20  STMT.  catchsql 
5a80: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
5a90: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5aa0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32 31 20  st capi3c-11.21 
5ab0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
5ac0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
5ad0: 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20  LITE_OK}..# The 
5ae0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20  following tests 
5af0: 2d 20 63 61 70 69 33 63 2d 31 32 2e 2a 20 2d 20  - capi3c-12.* - 
5b00: 63 68 65 63 6b 20 74 68 61 74 20 69 74 27 73 20  check that it's 
5b10: 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23 20  Ok to start a.# 
5b20: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
5b30: 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  e other VMs are 
5b40: 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61 74  active, and that
5b50: 20 69 74 27 73 20 4f 6b 20 74 6f 20 65 78 65 63   it's Ok to exec
5b60: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
5b70: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
5b80: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
5b90: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5ba0: 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  1 {.  set STMT [
5bb0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5bc0: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  v2 $DB "SELECT a
5bd0: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
5be0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
5bf0: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5c00: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5c10: 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a 20 20 63  api3c-12.2 {.  c
5c20: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
5c30: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5c40: 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(3, NULL);.  
5c50: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5c60: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 33 20 7b  st capi3c-12.3 {
5c70: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5c80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5c90: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a   VALUES(4);.  }.
5ca0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5cb0: 20 63 61 70 69 33 63 2d 31 32 2e 34 20 7b 0a 20   capi3c-12.4 {. 
5cc0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5cd0: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
5ce0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5cf0: 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  (4, NULL);.  }.}
5d00: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5d10: 63 61 70 69 33 63 2d 31 32 2e 35 20 7b 0a 20 20  capi3c-12.5 {.  
5d20: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5d30: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5d40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5d50: 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69  -12.5.1 {.  sqli
5d60: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5d70: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5d80: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5d90: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
5da0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5db0: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
5dc0: 20 63 61 70 69 33 63 2d 31 32 2e 37 20 7b 0a 20   capi3c-12.7 {. 
5dd0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5de0: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
5df0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5e00: 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20 20 65 78  pi3c-12.8 {.  ex
5e10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  ecsql {.    COMM
5e20: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  IT;.    SELECT a
5e30: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
5e40: 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73  {1 2 3 4}..# Tes
5e50: 74 20 63 61 73 65 73 20 63 61 70 69 33 63 2d 31  t cases capi3c-1
5e60: 33 2e 2a 20 74 65 73 74 20 74 68 65 20 73 71 6c  3.* test the sql
5e70: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
5e80: 6e 67 73 28 29 20 61 6e 64 20 0a 23 20 73 71 6c  ngs() and .# sql
5e90: 69 74 65 33 5f 73 6c 65 65 70 20 41 50 49 73 2e  ite3_sleep APIs.
5ea0: 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .#.if {[llength 
5eb0: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73  [info commands s
5ec0: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
5ed0: 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64  dings]]>0} {.  d
5ee0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
5ef0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
5f00: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
5f10: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
5f20: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
5f30: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
5f40: 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $DB "INSERT INTO
5f50: 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29   t1 VALUES(?, ?)
5f60: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  " -1 TAIL].    s
5f70: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5f80: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  T.  } {SQLITE_DO
5f90: 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  NE}.  do_test ca
5fa0: 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20 20 20 20  pi3c-13.2 {.    
5fb0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
5fc0: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
5fd0: 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20  bind_text $STMT 
5fe0: 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71  1 hello 5.    sq
5ff0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
6000: 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a  $STMT 2 world 5.
6010: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6020: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
6030: 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  TE_DONE}.  do_te
6040: 73 74 20 63 61 70 69 33 63 2d 31 33 2e 33 20 7b  st capi3c-13.3 {
6050: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
6060: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
6070: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
6080: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
6090: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
60a0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
60b0: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
60c0: 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73  i3c-13-4 {.    s
60d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
60e0: 24 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71  $STMT.    execsq
60f0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
6100: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
6110: 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c  }.  } {{} {} hel
6120: 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a  lo world {} {}}.
6130: 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b  }.if {[llength [
6140: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71  info commands sq
6150: 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d  lite3_sleep]]>0}
6160: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
6170: 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73  i3c-13-5 {.    s
6180: 65 74 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73  et ms [sqlite3_s
6190: 6c 65 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70  leep 80].    exp
61a0: 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d  r {$ms==80 || $m
61b0: 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d  s==1000}.  } {1}
61c0: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32  .}..# Ticket #12
61d0: 31 39 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62  19:  Make sure b
61e0: 69 6e 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20  inding APIs can 
61f0: 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f  handle a NULL po
6200: 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  inter..#.do_test
6210: 20 63 61 70 69 33 63 2d 31 34 2e 31 20 7b 0a 20   capi3c-14.1 {. 
6220: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
6230: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6240: 74 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20 6d  t 0 1 hello 5} m
6250: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
6260: 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54   $msg.} {1 SQLIT
6270: 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20 54 69 63  E_MISUSE}..# Tic
6280: 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e 6f  ket #1650:  Hono
6290: 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61 72  r the nBytes par
62a0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
62b0: 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f 5f  3_prepare..#.do_
62c0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 31  test capi3c-15.1
62d0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
62e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
62f0: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
6300: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
6310: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6320: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6330: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6340: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6350: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
6360: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
6370: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
6380: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
6390: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
63a0: 73 74 20 63 61 70 69 33 63 2d 31 35 2e 32 20 7b  st capi3c-15.2 {
63b0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
63c0: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
63d0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
63e0: 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   0.} {2}.do_test
63f0: 20 63 61 70 69 33 63 2d 31 35 2e 33 20 7b 0a 20   capi3c-15.3 {. 
6400: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6410: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6420: 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  E_OK}..# Make su
6430: 72 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79  re code is alway
6440: 73 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e  s generated even
6450: 20 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53   if an IF EXISTS
6460: 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58   or .# IF NOT EX
6470: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
6480: 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20  resent that the 
6490: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f  table does not o
64a0: 72 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e  r.# does exists.
64b0: 20 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69    That way we wi
64c0: 6c 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61  ll always have a
64d0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
64e0: 65 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20  ent.# to expire 
64f0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
6500: 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65  changes..#.do_te
6510: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 31 20 7b  st capi3c-16.1 {
6520: 0a 20 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50  .  set sql {DROP
6530: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
6540: 20 74 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20   t3}.  set STMT 
6550: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6560: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
6570: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6580: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
6590: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
65a0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
65b0: 63 61 70 69 33 63 2d 31 36 2e 32 20 7b 0a 20 20  capi3c-16.2 {.  
65c0: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
65d0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
65e0: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
65f0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6600: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6610: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6620: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6630: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6640: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
6650: 0a 23 20 42 75 74 20 73 74 69 6c 6c 20 77 65 20  .# But still we 
6660: 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 20  do not generate 
6670: 63 6f 64 65 20 69 66 20 74 68 65 72 65 20 69 73  code if there is
6680: 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73   no SQL.#.do_tes
6690: 74 20 63 61 70 69 33 63 2d 31 36 2e 33 20 7b 0a  t capi3c-16.3 {.
66a0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
66b0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
66c0: 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  DB {} -1 TAIL]. 
66d0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
66e0: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
66f0: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
6700: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6710: 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.4 {.  set STM
6720: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6730: 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d 20 2d 31  re_v2 $DB {;} -1
6740: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6750: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6760: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
6770: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b  "}.} {1}..# Tick
6780: 65 74 20 23 32 31 35 34 2e 0a 23 0a 64 6f 5f 74  et #2154..#.do_t
6790: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 20  est capi3c-17.1 
67a0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
67b0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
67c0: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78   $DB {SELECT max
67d0: 28 61 29 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  (a) FROM t2} -1 
67e0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
67f0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
6800: 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20  ITE_ROW.do_test 
6810: 63 61 70 69 33 63 2d 31 37 2e 32 20 7b 0a 20 20  capi3c-17.2 {.  
6820: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6830: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64  nt $STMT 0.} 4.d
6840: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6850: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .3 {.  sqlite3_s
6860: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6870: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
6880: 63 61 70 69 33 63 2d 31 37 2e 34 20 7b 0a 20 20  capi3c-17.4 {.  
6890: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
68a0: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
68b0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f  REATE INDEX i2 O
68c0: 4e 20 74 32 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t2(a)}.  sqlit
68d0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
68e0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
68f0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 35 20 7b  st capi3c-17.5 {
6900: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6910: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6920: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
6930: 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -17.6 {.  sqlite
6940: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6950: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6960: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 37 20 7b  st capi3c-17.7 {
6970: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6980: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6990: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
69a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
69b0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
69c0: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
69d0: 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71 6c 69 74  c-17.8 {.  sqlit
69e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
69f0: 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73  TMT 0.} 4.do_tes
6a00: 74 20 63 61 70 69 33 63 2d 31 37 2e 39 20 7b 0a  t capi3c-17.9 {.
6a10: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6a20: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6a30: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6a40: 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73 71 6c 69  c-17.10 {.  sqli
6a50: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6a60: 4d 54 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  MT.  set STMT [s
6a70: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6a80: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 62 20  2 $DB {SELECT b 
6a90: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
6aa0: 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ?} -1 TAIL].  sq
6ab0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24  lite3_bind_int $
6ac0: 53 54 4d 54 20 31 20 32 0a 20 20 64 62 20 65 76  STMT 1 2.  db ev
6ad0: 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  al {.    DELETE 
6ae0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53  FROM t1;.    INS
6af0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6b00: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
6b10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6b20: 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29 3b  VALUES(2,'two');
6b30: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6b40: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 27 74 68   t1 VALUES(3,'th
6b50: 72 65 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ree');.    INSER
6b60: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6b70: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
6b80: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6b90: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
6ba0: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
6bb0: 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -17.11 {.  sqlit
6bc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
6bd0: 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f  STMT 0.} two.do_
6be0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6bf0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6c00: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6c10: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6c20: 61 70 69 33 63 2d 31 37 2e 31 33 20 7b 0a 20 20  api3c-17.13 {.  
6c30: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6c40: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6c50: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
6c60: 4e 20 74 31 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t1(a)}.  sqlit
6c70: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6c80: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6c90: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 34 20  st capi3c-17.14 
6ca0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
6cb0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a  mn_text $STMT 0.
6cc0: 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61  } two.do_test ca
6cd0: 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a 20 20 73  pi3c-17.15 {.  s
6ce0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6cf0: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
6d00: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6d10: 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.16 {.  sqlite3
6d20: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
6d30: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44  b eval {DROP IND
6d40: 45 58 20 69 31 7d 0a 20 20 73 71 6c 69 74 65 33  EX i1}.  sqlite3
6d50: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6d60: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
6d70: 20 63 61 70 69 33 63 2d 31 37 2e 31 37 20 7b 0a   capi3c-17.17 {.
6d80: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6d90: 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a 7d 20  _text $STMT 0.} 
6da0: 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  two.do_test capi
6db0: 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20 73 71 6c  3c-17.18 {.  sql
6dc0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6dd0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
6de0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6df0: 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  99 {.  sqlite3_f
6e00: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6e10: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 4f 6e 20  SQLITE_OK..# On 
6e20: 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  the mailing list
6e30: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 70   it has been rep
6e40: 6f 72 74 65 64 20 74 68 61 74 20 66 69 6e 61 6c  orted that final
6e50: 69 7a 69 6e 67 20 61 66 74 65 72 0a 23 20 61 6e  izing after.# an
6e60: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 74   SQLITE_BUSY ret
6e70: 75 72 6e 20 6c 65 61 64 73 20 74 6f 20 61 20 73  urn leads to a s
6e80: 65 67 66 61 75 6c 74 2e 20 20 48 65 72 65 20 77  egfault.  Here w
6e90: 65 20 74 65 73 74 20 74 68 61 74 20 63 61 73 65  e test that case
6ea0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
6eb0: 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73 71 6c 69  3c-18.1 {.  sqli
6ec0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
6ed0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6ee0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
6ef0: 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61  DB {SELECT max(a
6f00: 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41  ) FROM t1} -1 TA
6f10: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
6f20: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6f30: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
6f40: 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20 20 73 71  pi3c-18.2 {.  sq
6f50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6f60: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
6f70: 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 33  test capi3c-18.3
6f80: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
6f90: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 32 20 65  et $STMT.  db2 e
6fa0: 76 61 6c 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  val {BEGIN EXCLU
6fb0: 53 49 56 45 7d 0a 20 20 73 71 6c 69 74 65 33 5f  SIVE}.  sqlite3_
6fc0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
6fd0: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
6fe0: 20 63 61 70 69 33 63 2d 31 38 2e 34 20 7b 0a 20   capi3c-18.4 {. 
6ff0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7000: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
7010: 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74 20 63 61  _BUSY.do_test ca
7020: 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20 20 64 62  pi3c-18.5 {.  db
7030: 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a  2 eval {COMMIT}.
7040: 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d    db2 close.} {}
7050: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 38  ..# Ticket #2158
7060: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
7070: 74 65 70 28 29 20 77 69 6c 6c 20 73 74 69 6c 6c  tep() will still
7080: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 53   return SQLITE_S
7090: 43 48 45 4d 41 0a 23 20 69 66 20 74 68 65 20 64  CHEMA.# if the d
70a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
70b0: 68 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20  hanges in a way 
70c0: 74 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 73  that makes the s
70d0: 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f 20 6c 6f  tatement.# no lo
70e0: 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23 0a 64 6f  nger valid..#.do
70f0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
7100: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
7110: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7120: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20  E t3(x,y);.     
7130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
7140: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a  ALUES(1,2);.  }.
7150: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7160: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7170: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7180: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7190: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
71a0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
71b0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
71c0: 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.2 {.  sqlite3
71d0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
71e0: 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  T 0.} 1.do_test 
71f0: 63 61 70 69 33 63 2d 31 39 2e 33 20 7b 0a 20 20  capi3c-19.3 {.  
7200: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7210: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
7220: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7230: 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.4 {.  sqlite3
7240: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
7250: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42  b eval {DROP TAB
7260: 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69 74 65 33  LE t3}.  sqlite3
7270: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7280: 4c 49 54 45 5f 53 43 48 45 4d 41 0a 64 6f 5f 74  LITE_SCHEMA.do_t
7290: 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e  est capi3c-19.4.
72a0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  2 {.  sqlite3_er
72b0: 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73  rmsg $DB.} {no s
72c0: 75 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a 64  uch table: t3}.d
72d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39  o_test capi3c-19
72e0: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  .5 {.  sqlite3_r
72f0: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20  eset $STMT.  db 
7300: 65 76 61 6c 20 7b 0a 20 20 20 20 20 43 52 45 41  eval {.     CREA
7310: 54 45 20 54 41 42 4c 45 20 74 33 28 78 2c 79 29  TE TABLE t3(x,y)
7320: 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;.     INSERT IN
7330: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32  TO t3 VALUES(1,2
7340: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
7350: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7360: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
7370: 20 63 61 70 69 33 63 2d 31 39 2e 36 20 7b 0a 20   capi3c-19.6 {. 
7380: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7390: 69 6e 74 20 24 53 54 4d 54 20 31 0a 7d 20 32 0a  int $STMT 1.} 2.
73a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
73b0: 39 2e 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33  9.99 {.  sqlite3
73c0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
73d0: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 4d  } SQLITE_OK..# M
73e0: 61 6b 65 20 73 75 72 65 20 61 20 63 68 61 6e 67  ake sure a chang
73f0: 65 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20  e in a separate 
7400: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7410: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63  ion does not.# c
7420: 61 75 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 53  ause an SQLITE_S
7430: 43 48 45 4d 41 20 72 65 74 75 72 6e 2e 0a 23 0a  CHEMA return..#.
7440: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7450: 30 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  0.1 {.  set STMT
7460: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7470: 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54  e_v2 $DB {SELECT
7480: 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54   * FROM t3} -1 T
7490: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 20 64  AIL].  sqlite3 d
74a0: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64 62 32  b2 test.db.  db2
74b0: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41   eval {CREATE TA
74c0: 42 4c 45 20 74 34 28 78 29 7d 0a 20 20 73 71 6c  BLE t4(x)}.  sql
74d0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
74e0: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f  } SQLITE_ROW.do_
74f0: 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e 32  test capi3c-20.2
7500: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
7510: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 31 0a  umn_int $STMT 1.
7520: 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 2.do_test capi
7530: 33 63 2d 32 30 2e 33 20 7b 0a 20 20 73 71 6c 69  3c-20.3 {.  sqli
7540: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
7550: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f   SQLITE_DONE.do_
7560: 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e 34  test capi3c-20.4
7570: 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20   {.  db2 close. 
7580: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7590: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
75a0: 5f 4f 4b 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  _OK..finish_test
75b0: 0a                                               .