/ Hex Artifact Content
Login

Artifact 9c8b58b6a6aeb14e69bd8c8c7721b47d640464d1:


0000: 23 20 32 30 30 33 20 4a 61 6e 75 61 72 79 20 32  # 2003 January 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 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 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 63 61 6c 6c  testing the call
01d0: 62 61 63 6b 2d 66 72 65 65 20 43 2f 43 2b 2b 20  back-free C/C++ 
01e0: 41 50 49 2e 0a 23 0a 23 20 24 49 64 3a 20 63 61  API..#.# $Id: ca
01f0: 70 69 33 2e 74 65 73 74 2c 76 20 31 2e 37 30 20  pi3.test,v 1.70 
0200: 32 30 30 39 2f 30 31 2f 30 39 20 30 32 3a 34 39  2009/01/09 02:49
0210: 3a 33 32 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :32 drh Exp $.#.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63 6f   Do not use a co
0270: 64 65 63 20 66 6f 72 20 74 65 73 74 73 20 69 6e  dec for tests in
0280: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20 74   this file, as t
0290: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
02a0: 20 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74 65   is.# manipulate
02b0: 64 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e 67  d directly using
02c0: 20 74 63 6c 20 73 63 72 69 70 74 73 20 28 75 73   tcl scripts (us
02d0: 69 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f 77  ing the [hexio_w
02e0: 72 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0a  rite] command)..
02f0: 23 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f 64  #.do_not_use_cod
0300: 65 63 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65  ec..# Return the
0310: 20 55 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e   UTF-16 represen
0320: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75  tation of the su
0330: 70 70 6c 69 65 64 20 55 54 46 2d 38 20 73 74 72  pplied UTF-8 str
0340: 69 6e 67 20 24 73 74 72 2e 0a 23 20 49 66 20 24  ing $str..# If $
0350: 6e 74 20 69 73 20 74 72 75 65 2c 20 61 70 70 65  nt is true, appe
0360: 6e 64 20 74 77 6f 20 30 78 30 30 20 62 79 74 65  nd two 0x00 byte
0370: 73 20 61 73 20 61 20 6e 75 6c 20 74 65 72 6d 69  s as a nul termi
0380: 6e 61 74 6f 72 2e 0a 70 72 6f 63 20 75 74 66 31  nator..proc utf1
0390: 36 20 7b 73 74 72 20 7b 6e 74 20 31 7d 7d 20 7b  6 {str {nt 1}} {
03a0: 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69  .  set r [encodi
03b0: 6e 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69  ng convertto uni
03c0: 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 69 66 20  code $str].  if 
03d0: 7b 24 6e 74 7d 20 7b 0a 20 20 20 20 61 70 70 65  {$nt} {.    appe
03e0: 6e 64 20 72 20 22 5c 78 30 30 5c 78 30 30 22 0a  nd r "\x00\x00".
03f0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a    }.  return $r.
0400: 7d 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65 20  }..# Return the 
0410: 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74 61  UTF-8 representa
0420: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 70 70  tion of the supp
0430: 6c 69 65 64 20 55 54 46 2d 31 36 20 73 74 72 69  lied UTF-16 stri
0440: 6e 67 20 24 73 74 72 2e 20 0a 70 72 6f 63 20 75  ng $str. .proc u
0450: 74 66 38 20 7b 73 74 72 7d 20 7b 0a 20 20 23 20  tf8 {str} {.  # 
0460: 49 66 20 24 73 74 72 20 65 6e 64 73 20 69 6e 20  If $str ends in 
0470: 74 77 6f 20 30 78 30 30 20 30 78 30 30 20 62 79  two 0x00 0x00 by
0480: 74 65 73 2c 20 6b 6e 6f 63 6b 20 74 68 65 73 65  tes, knock these
0490: 20 6f 66 66 20 62 65 66 6f 72 65 0a 20 20 23 20   off before.  # 
04a0: 63 6f 6e 76 65 72 74 69 6e 67 20 74 6f 20 55 54  converting to UT
04b0: 46 2d 38 20 75 73 69 6e 67 20 54 43 4c 2e 0a 20  F-8 using TCL.. 
04c0: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 73 74   binary scan $st
04d0: 72 20 5c 63 2a 20 76 61 6c 73 0a 20 20 69 66 20  r \c* vals.  if 
04e0: 7b 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65  {[lindex $vals e
04f0: 6e 64 5d 3d 3d 30 20 26 26 20 5b 6c 69 6e 64 65  nd]==0 && [linde
0500: 78 20 24 76 61 6c 73 20 65 6e 64 2d 31 5d 3d 3d  x $vals end-1]==
0510: 30 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 74 72  0} {.    set str
0520: 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20   [binary format 
0530: 5c 63 2a 20 5b 6c 72 61 6e 67 65 20 24 76 61 6c  \c* [lrange $val
0540: 73 20 30 20 65 6e 64 2d 32 5d 5d 0a 20 20 7d 0a  s 0 end-2]].  }.
0550: 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69  .  set r [encodi
0560: 6e 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75  ng convertfrom u
0570: 6e 69 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 72  nicode $str].  r
0580: 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 68  eturn $r.}..# Th
0590: 65 73 65 20 74 65 73 74 73 20 63 6f 6d 70 6c 65  ese tests comple
05a0: 6d 65 6e 74 20 74 68 6f 73 65 20 69 6e 20 63 61  ment those in ca
05b0: 70 69 32 2e 74 65 73 74 2e 20 54 68 65 79 20 61  pi2.test. They a
05c0: 72 65 20 6f 72 67 61 6e 69 7a 65 64 0a 23 20 61  re organized.# a
05d0: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63  s follows:.#.# c
05e0: 61 70 69 33 2d 31 2e 2a 3a 20 54 65 73 74 20 73  api3-1.*: Test s
05f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 0a  qlite3_prepare .
0600: 23 20 63 61 70 69 33 2d 32 2e 2a 3a 20 54 65 73  # capi3-2.*: Tes
0610: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
0620: 65 31 36 0a 23 20 63 61 70 69 33 2d 33 2e 2a 3a  e16.# capi3-3.*:
0630: 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f 6f 70   Test sqlite3_op
0640: 65 6e 0a 23 20 63 61 70 69 33 2d 34 2e 2a 3a 20  en.# capi3-4.*: 
0650: 54 65 73 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  Test sqlite3_ope
0660: 6e 31 36 0a 23 20 63 61 70 69 33 2d 35 2e 2a 3a  n16.# capi3-5.*:
0670: 20 54 65 73 74 20 74 68 65 20 76 61 72 69 6f 75   Test the variou
0680: 73 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s sqlite3_result
0690: 5f 2a 20 41 50 49 73 0a 23 20 63 61 70 69 33 2d  _* APIs.# capi3-
06a0: 36 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 73  6.*: Test that s
06b0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 66 61 69  qlite3_close fai
06c0: 6c 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ls if there are 
06d0: 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 2e  outstanding VMs.
06e0: 0a 23 0a 0a 73 65 74 20 44 42 20 5b 73 71 6c 69  .#..set DB [sqli
06f0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
0700: 6f 69 6e 74 65 72 20 64 62 5d 0a 0a 64 6f 5f 74  ointer db]..do_t
0710: 65 73 74 20 63 61 70 69 33 2d 31 2e 30 20 7b 0a  est capi3-1.0 {.
0720: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
0730: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
0740: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
0750: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
0760: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0770: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d   $DB {SELECT nam
0780: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
0790: 73 74 65 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  ster} -1 TAIL]. 
07a0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
07b0: 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41  e $STMT.  set TA
07c0: 49 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  IL.} {}.do_test 
07d0: 63 61 70 69 33 2d 31 2e 32 2e 31 20 7b 0a 20 20  capi3-1.2.1 {.  
07e0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
07f0: 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  $DB.} {SQLITE_OK
0800: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
0810: 31 2e 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  1.2.2 {.  sqlite
0820: 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
0830: 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45  de $DB.} {SQLITE
0840: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
0850: 69 33 2d 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74  i3-1.3 {.  sqlit
0860: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
0870: 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64  {not an error}.d
0880: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 34  o_test capi3-1.4
0890: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
08a0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
08b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
08c0: 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54  ECT 10}.  set ST
08d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
08e0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20  are $DB $sql -1 
08f0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
0900: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
0910: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45 4c   set TAIL.} {SEL
0920: 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  ECT 10}.do_test 
0930: 63 61 70 69 33 2d 31 2e 35 20 7b 0a 20 20 73 65  capi3-1.5 {.  se
0940: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  t sql {SELECT na
0950: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0960: 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d  aster;SELECT 10}
0970: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
0980: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
0990: 20 24 73 71 6c 20 5b 73 74 72 69 6e 67 20 6c 65   $sql [string le
09a0: 6e 67 74 68 20 24 73 71 6c 5d 20 54 41 49 4c 5d  ngth $sql] TAIL]
09b0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
09c0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20  ize $STMT.  set 
09d0: 54 41 49 4c 0a 7d 20 7b 53 45 4c 45 43 54 20 31  TAIL.} {SELECT 1
09e0: 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  0}.do_test capi3
09f0: 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.6 {.  set sql
0a00: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0a10: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0a20: 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20 73 65  ;SELECT 10}.  se
0a30: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0a40: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
0a50: 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c   [expr [string l
0a60: 65 6e 67 74 68 20 24 73 71 6c 5d 2b 31 5d 20 54  ength $sql]+1] T
0a70: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
0a80: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
0a90: 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45 4c 45  set TAIL.} {SELE
0aa0: 43 54 20 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20  CT 10}..do_test 
0ab0: 63 61 70 69 33 2d 31 2e 37 20 7b 0a 20 20 73 65  capi3-1.7 {.  se
0ac0: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  t sql {SELECT na
0ad0: 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  mex FROM sqlite_
0ae0: 6d 61 73 74 65 72 7d 0a 20 20 63 61 74 63 68 20  master}.  catch 
0af0: 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  {.    set STMT [
0b00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
0b10: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
0b20: 5d 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ].  }.} {1}.do_t
0b30: 65 73 74 20 63 61 70 69 33 2d 31 2e 38 2e 31 20  est capi3-1.8.1 
0b40: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  {.  sqlite3_errc
0b50: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
0b60: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
0b70: 20 63 61 70 69 33 2d 31 2e 38 2e 32 20 7b 0a 20   capi3-1.8.2 {. 
0b80: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0b90: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0ba0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
0bb0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 39  o_test capi3-1.9
0bc0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
0bd0: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
0be0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0bf0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  }..ifcapable {ut
0c00: 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  f16} {.  do_test
0c10: 20 63 61 70 69 33 2d 32 2e 31 20 7b 0a 20 20 20   capi3-2.1 {.   
0c20: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
0c30: 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  6 {SELECT name F
0c40: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0c50: 72 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54  r}].    set STMT
0c60: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0c70: 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20 2d  e16 $DB $sql16 -
0c80: 31 20 3a 3a 54 41 49 4c 5d 0a 20 20 20 20 73 71  1 ::TAIL].    sq
0c90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0ca0: 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24 3a  STMT.    utf8 $:
0cb0: 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d 0a 20 20 64  :TAIL.  } {}.  d
0cc0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 32  o_test capi3-2.2
0cd0: 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 20 5b   {.    set sql [
0ce0: 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61  utf16 {SELECT na
0cf0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0d00: 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d  aster;SELECT 10}
0d10: 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  ].    set STMT [
0d20: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
0d30: 36 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  6 $DB $sql -1 TA
0d40: 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  IL].    sqlite3_
0d50: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
0d60: 20 20 20 75 74 66 38 20 24 54 41 49 4c 0a 20 20     utf8 $TAIL.  
0d70: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20  } {SELECT 10}.  
0d80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0d90: 33 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 20  3 {.    set sql 
0da0: 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e  [utf16 {SELECT n
0db0: 61 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65  amex FROM sqlite
0dc0: 5f 6d 61 73 74 65 72 7d 5d 0a 20 20 20 20 63 61  _master}].    ca
0dd0: 74 63 68 20 7b 0a 20 20 20 20 20 20 73 65 74 20  tch {.      set 
0de0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
0df0: 65 70 61 72 65 31 36 20 24 44 42 20 24 73 71 6c  epare16 $DB $sql
0e00: 20 2d 31 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   -1].    }.  } {
0e10: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  1}.  do_test cap
0e20: 69 33 2d 32 2e 34 2e 31 20 7b 0a 20 20 20 20 73  i3-2.4.1 {.    s
0e30: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
0e40: 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45  DB.  } {SQLITE_E
0e50: 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RROR}.  do_test 
0e60: 63 61 70 69 33 2d 32 2e 34 2e 32 20 7b 0a 20 20  capi3-2.4.2 {.  
0e70: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
0e80: 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20  ed_errcode $DB. 
0e90: 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52   } {SQLITE_ERROR
0ea0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
0eb0: 33 2d 32 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69  3-2.5 {.    sqli
0ec0: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 20  te3_errmsg $DB. 
0ed0: 20 7d 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75   } {no such colu
0ee0: 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 20 20 69 66  mn: namex}..  if
0ef0: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
0f00: 72 61 67 6d 61 73 20 7b 0a 20 20 20 20 64 6f 5f  ragmas {.    do_
0f10: 74 65 73 74 20 63 61 70 69 33 2d 32 2e 36 20 7b  test capi3-2.6 {
0f20: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
0f30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 61 62  CREATE TABLE tab
0f40: 6c 65 6e 61 6d 65 28 78 29 7d 0a 20 20 20 20 20  lename(x)}.     
0f50: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
0f60: 36 20 7b 50 52 41 47 4d 41 20 74 61 62 6c 65 5f  6 {PRAGMA table_
0f70: 69 6e 66 6f 28 22 54 61 62 6c 65 4e 61 6d 65 22  info("TableName"
0f80: 29 3b 20 2d 2d 65 78 63 65 73 73 20 74 65 78 74  ); --excess text
0f90: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 53 54 4d  }].      set STM
0fa0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
0fb0: 72 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20  re16 $DB $sql16 
0fc0: 2d 31 5d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  -1].      sqlite
0fd0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20  3_step $STMT.   
0fe0: 20 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20   } SQLITE_ROW.  
0ff0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
1000: 32 2e 37 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  2.7 {.      sqli
1010: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
1020: 20 20 20 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45     } SQLITE_DONE
1030: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70  .    do_test cap
1040: 69 33 2d 32 2e 38 20 7b 0a 20 20 20 20 20 20 73  i3-2.8 {.      s
1050: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
1060: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
1070: 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d 20 3b 23 20  TE_OK.  }..} ;# 
1080: 65 6e 64 69 66 20 75 74 66 31 36 0a 0a 23 20 72  endif utf16..# r
1090: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
10a0: 65 6e 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  en sqlite3_open_
10b0: 6f 6c 64 0a 23 20 70 72 6f 63 20 73 71 6c 69 74  old.# proc sqlit
10c0: 65 33 5f 6f 70 65 6e 20 7b 66 6e 61 6d 65 20 6f  e3_open {fname o
10d0: 70 74 69 6f 6e 73 7d 20 7b 73 71 6c 69 74 65 33  ptions} {sqlite3
10e0: 5f 6f 70 65 6e 5f 6e 65 77 20 24 66 6e 61 6d 65  _open_new $fname
10f0: 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a 64 6f 5f 74   $options}..do_t
1100: 65 73 74 20 63 61 70 69 33 2d 33 2e 31 20 7b 0a  est capi3-3.1 {.
1110: 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74    set db2 [sqlit
1120: 65 33 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62 20  e3_open test.db 
1130: 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  {}].  sqlite3_er
1140: 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51  rcode $db2.} {SQ
1150: 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d  LITE_OK}.# FIX M
1160: 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74  E: Should test t
1170: 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72  he db handle wor
1180: 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ks..do_test capi
1190: 33 2d 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  3-3.2 {.  sqlite
11a0: 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b  3_close $db2.} {
11b0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
11c0: 73 74 20 63 61 70 69 33 2d 33 2e 33 20 7b 0a 20  st capi3-3.3 {. 
11d0: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
11e0: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
11f0: 65 6e 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f 74  en /bogus/path/t
1200: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 7d 0a 20  est.db {}].  }. 
1210: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
1220: 64 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  d_errcode $db2.}
1230: 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45   {SQLITE_CANTOPE
1240: 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  N}.do_test capi3
1250: 2d 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.4 {.  sqlite3
1260: 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b  _errmsg $db2.} {
1270: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
1280: 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f  atabase file}.do
1290: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 35 20  _test capi3-3.5 
12a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
12b0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
12c0: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
12d0: 69 33 2d 33 2e 36 2e 31 2d 6d 69 73 75 73 65 20  i3-3.6.1-misuse 
12e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
12f0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1300: 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74  _MISUSE}.do_test
1310: 20 63 61 70 69 33 2d 33 2e 36 2e 32 2d 6d 69 73   capi3-3.6.2-mis
1320: 75 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  use {.  sqlite3_
1330: 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 6c  errmsg $db2.} {l
1340: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63  ibrary routine c
1350: 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71  alled out of seq
1360: 75 65 6e 63 65 7d 0a 69 66 63 61 70 61 62 6c 65  uence}.ifcapable
1370: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f   {utf16} {.  do_
1380: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 33  test capi3-3.6.3
1390: 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 75 74  -misuse {.    ut
13a0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d  f8 [sqlite3_errm
13b0: 73 67 31 36 20 24 64 62 32 5d 0a 20 20 7d 20 7b  sg16 $db2].  } {
13c0: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
13d0: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
13e0: 71 75 65 6e 63 65 7d 0a 7d 0a 0a 64 6f 5f 74 65  quence}.}..do_te
13f0: 73 74 20 63 61 70 69 33 2d 33 2e 37 20 7b 0a 20  st capi3-3.7 {. 
1400: 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65   set db2 [sqlite
1410: 33 5f 6f 70 65 6e 5d 0a 20 20 73 71 6c 69 74 65  3_open].  sqlite
1420: 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  3_errcode $db2.}
1430: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
1440: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 38 20 7b  test capi3-3.8 {
1450: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1460: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1470: 4f 4b 7d 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71  OK}..# rename sq
1480: 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22 0a 23 20  lite3_open "".# 
1490: 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f  rename sqlite3_o
14a0: 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74 65 33 5f  pen_old sqlite3_
14b0: 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62 6c 65 20  open..ifcapable 
14c0: 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f 74 65 73  {utf16} {.do_tes
14d0: 74 20 63 61 70 69 33 2d 34 2e 31 20 7b 0a 20 20  t capi3-4.1 {.  
14e0: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
14f0: 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20 74  _open16 [utf16 t
1500: 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 73 71  est.db] {}].  sq
1510: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64  lite3_errcode $d
1520: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1530: 0a 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c  .# FIX ME: Shoul
1540: 64 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61  d test the db ha
1550: 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74  ndle works..do_t
1560: 65 73 74 20 63 61 70 69 33 2d 34 2e 32 20 7b 0a  est capi3-4.2 {.
1570: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
1580: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  $db2.} {SQLITE_O
1590: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
15a0: 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b  -4.3 {.  catch {
15b0: 0a 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71  .    set db2 [sq
15c0: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74  lite3_open16 [ut
15d0: 66 31 36 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f  f16 /bogus/path/
15e0: 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 7d  test.db] {}].  }
15f0: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  .  sqlite3_errco
1600: 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  de $db2.} {SQLIT
1610: 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74  E_CANTOPEN}.do_t
1620: 65 73 74 20 63 61 70 69 33 2d 34 2e 34 20 7b 0a  est capi3-4.4 {.
1630: 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f    utf8 [sqlite3_
1640: 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 7d  errmsg16 $db2].}
1650: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
1660: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a   database file}.
1670: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e  do_test capi3-4.
1680: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  5 {.  sqlite3_cl
1690: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
16a0: 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66 31  TE_OK}.} ;# utf1
16b0: 36 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69  6..# This proc i
16c0: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
16d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49  he following API
16e0: 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69   calls:.#.# sqli
16f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1700: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1710: 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33  n_name.# sqlite3
1720: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a 23  _column_name16.#
1730: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1740: 64 65 63 6c 74 79 70 65 0a 23 20 73 71 6c 69 74  decltype.# sqlit
1750: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1760: 70 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69  pe16.#.# $STMT i
1770: 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  s a compiled SQL
1780: 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73   statement. $tes
1790: 74 20 69 73 20 61 20 70 72 65 66 69 78 0a 23 20  t is a prefix.# 
17a0: 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74 20  to use for test 
17b0: 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69  names within thi
17c0: 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69  s proc. $names i
17d0: 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68  s a list.# of th
17e0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
17f0: 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65  hat should be re
1800: 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e  turned by $STMT.
1810: 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20 69 73  .# $decltypes is
1820: 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d   a list of colum
1830: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
1840: 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23  pes for $STMT..#
1850: 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  .# Example:.#.# 
1860: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
1870: 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45 43  3_prepare "SELEC
1880: 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44  T 1, 2, 2;" -1 D
1890: 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65  UMMY].# check_he
18a0: 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20  ader test1.1 {1 
18b0: 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a  2 3} {"" "" ""}.
18c0: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68 65 61  #.proc check_hea
18d0: 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20 6e  der {STMT test n
18e0: 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73 7d 20  ames decltypes} 
18f0: 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20 72  {..  # Use the r
1900: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
1910: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1920: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
1930: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
1940: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
1950: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
1960: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73  umn_count.  # is
1970: 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69   3, build the li
1980: 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65  st {0 1 2}..  se
1990: 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73  t ::idxlist [lis
19a0: 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f  t].  set ::numco
19b0: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ls [sqlite3_colu
19c0: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a  mn_count $STMT].
19d0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
19e0: 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73  {$i < $::numcols
19f0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70  } {incr i} {lapp
1a00: 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69  end ::idxlist $i
1a10: 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  }..  # Column na
1a20: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64  mes in UTF-8.  d
1a30: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b  o_test $test.1 {
1a40: 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69  .    set cnameli
1a50: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  st [list].    fo
1a60: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
1a70: 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c   {lappend cnamel
1a80: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
1a90: 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  umn_name $STMT $
1aa0: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1ab0: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65  melist.  } $name
1ac0: 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  s..  # Column na
1ad0: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
1ae0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1af0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1b00: 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20 20 20  $test.2 {.      
1b10: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1b20: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1b30: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1b40: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1b50: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1b60: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1b70: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
1b80: 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ].      }.      
1b90: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
1ba0: 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a    } $names.  }..
1bb0: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1bc0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
1bd0: 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20  est $test.3 {.  
1be0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1bf0: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
1c00: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
1c10: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
1c20: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1c30: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1c40: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1c50: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1c60: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1c70: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1c80: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1c90: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1ca0: 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73 65 74  st.4 {.      set
1cb0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1cc0: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
1cd0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
1ce0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
1cf0: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
1d00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1d10: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
1d20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1d30: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1d40: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1d50: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1d60: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1d70: 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20 20 73   $test.5 {.    s
1d80: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1d90: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1da0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1db0: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1dc0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1dd0: 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d  cltype $STMT $i]
1de0: 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65  } .    set cname
1df0: 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c 74 79  list.  } $declty
1e00: 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  pes..  # Column 
1e10: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
1e20: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66  s in UTF-16.  if
1e30: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1e40: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
1e50: 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20 73 65  est.6 {.      se
1e60: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
1e70: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
1e80: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
1e90: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
1ea0: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
1eb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1ec0: 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 24  cltype16 $STMT $
1ed0: 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i]].      }.    
1ee0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1ef0: 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73      } $decltypes
1f00: 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20  .  }...  # Test 
1f10: 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61 6e 67  some out of rang
1f20: 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20  e conditions:.  
1f30: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1f40: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1f50: 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20 20 20  $test.7 {.      
1f60: 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20 20 5b  list \.        [
1f70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1f80: 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a  ame $STMT -1] \.
1f90: 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33          [sqlite3
1fa0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
1fb0: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
1fc0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1fd0: 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d  mn_decltype $STM
1fe0: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1ff0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2000: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
2010: 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b   -1] \.        [
2020: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
2030: 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f  ame $STMT $numco
2040: 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73  ls] \.        [s
2050: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
2060: 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63  me16 $STMT $numc
2070: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
2080: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2090: 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 6e  ecltype $STMT $n
20a0: 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20  umcols] \.      
20b0: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
20c0: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
20d0: 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20  MT $numcols].   
20e0: 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20   } {{} {} {} {} 
20f0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d  {} {} {} {}}.  }
2100: 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  .} ..# This proc
2110: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
2120: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
2130: 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71  PI calls:.#.# sq
2140: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2150: 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  gin_name.# sqlit
2160: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2170: 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65  _name16.# sqlite
2180: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
2190: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
21a0: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
21b0: 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  6.# sqlite3_colu
21c0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
21d0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
21e0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
21f0: 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61  6.#.# $STMT is a
2200: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
2210: 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69  atement. $test i
2220: 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20  s a prefix.# to 
2230: 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d  use for test nam
2240: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70  es within this p
2250: 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61  roc. $names is a
2260: 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63   list.# of the c
2270: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
2280: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72   should be retur
2290: 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20  ned by $STMT..# 
22a0: 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61 20  $decltypes is a 
22b0: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  list of column d
22c0: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73  eclaration types
22d0: 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20   for $STMT..#.# 
22e0: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
22f0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
2300: 72 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 31  repare "SELECT 1
2310: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
2320: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
2330: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
2340: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
2350: 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67 69 6e  roc check_origin
2360: 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65  _header {STMT te
2370: 73 74 20 64 62 73 20 74 61 62 6c 65 73 20 63 6f  st dbs tables co
2380: 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73 71 6c  ls} {.  # If sql
2390: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
23a0: 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20 66 72  in_name() and fr
23b0: 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20 63 6f  iends are not co
23c0: 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20 23 20  mpiled into.  # 
23d0: 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68 69 73  this build, this
23e0: 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d 6f 70   proc is a no-op
23f0: 2e 0a 20 20 69 66 63 61 70 61 62 6c 65 20 63 6f  ..  ifcapable co
2400: 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a 20  lumnmetadata {. 
2410: 20 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74     # Use the ret
2420: 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  urn value of sql
2430: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
2440: 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 20  t() to build.   
2450: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
2460: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
2470: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
2480: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20  umn_count.    # 
2490: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
24a0: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
24b0: 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20    set ::idxlist 
24c0: 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 3a  [list].    set :
24d0: 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65  :numcols [sqlite
24e0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
24f0: 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73  STMT].    for {s
2500: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a  et i 0} {$i < $:
2510: 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20  :numcols} {incr 
2520: 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64  i} {lappend ::id
2530: 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20 20 20  xlist $i}.  .   
2540: 20 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65   # Database name
2550: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2560: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b  o_test $test.8 {
2570: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2580: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
2590: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
25a0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
25b0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
25c0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
25d0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 20 24  _database_name $
25e0: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
25f0: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
2600: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64 62 73  elist.    } $dbs
2610: 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61  .  .    # Databa
2620: 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  se names in UTF-
2630: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2640: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2650: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39   do_test $test.9
2660: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   {.        set c
2670: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2680: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2690: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
26a0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
26b0: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
26c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
26d0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 20 24  atabase_name16 $
26e0: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
26f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20    }.        set 
2700: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20  cnamelist.      
2710: 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a  } $dbs.    }.  .
2720: 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65      # Table name
2730: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2740: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20  o_test $test.10 
2750: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2760: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2770: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2780: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2790: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
27a0: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
27b0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54  n_table_name $ST
27c0: 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a  MT $i].      } .
27d0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
27e0: 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62 6c 65  ist.    } $table
27f0: 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65  s.  .    # Table
2800: 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36   names in UTF-16
2810: 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b  .    ifcapable {
2820: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64  utf16} {.      d
2830: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20  o_test $test.11 
2840: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  {.        set cn
2850: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2860: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69         foreach i
2870: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
2880: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2890: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
28a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
28b0: 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  ble_name16 $STMT
28c0: 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a   $i]].        }.
28d0: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
28e0: 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 74  elist.      } $t
28f0: 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20  ables.    }.  . 
2900: 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65     # Origin name
2910: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2920: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20  o_test $test.12 
2930: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2940: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2950: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2960: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2970: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
2980: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
2990: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53  n_origin_name $S
29a0: 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20  TMT $i].      } 
29b0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
29c0: 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73  list.    } $cols
29d0: 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e  .  .    # Origin
29e0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
29f0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20  es in UTF-16.   
2a00: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
2a10: 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65  6} {.      do_te
2a20: 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20  st $test.13 {.  
2a30: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
2a40: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
2a50: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2a60: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2a70: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2a80: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
2a90: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2aa0: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
2ab0: 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]].        }.   
2ac0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2ad0: 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f 6c 73  st.      } $cols
2ae0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20  .    }.  }.}..# 
2af0: 54 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65  This proc is use
2b00: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f  d to test the fo
2b10: 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a  llowing APIs:.#.
2b20: 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  # sqlite3_data_c
2b30: 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63  ount.# sqlite3_c
2b40: 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c  olumn_type.# sql
2b50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a  ite3_column_int.
2b60: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2b70: 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65 33 5f  _text.# sqlite3_
2b80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20  column_text16.# 
2b90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2ba0: 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20  ouble.#.# $STMT 
2bb0: 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51  is a compiled SQ
2bc0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  L statement for 
2bd0: 77 68 69 63 68 20 74 68 65 20 70 72 65 76 69 6f  which the previo
2be0: 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71  us call .# to sq
2bf0: 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74 75 72  lite3_step retur
2c00: 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20  ned SQLITE_ROW. 
2c10: 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69  $test is a prefi
2c20: 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f 72 20  x to use .# for 
2c30: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
2c40: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 74 79  n this proc. $ty
2c50: 70 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66  pes is a list of
2c60: 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65 73 74   the .# manifest
2c70: 20 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 63   types for the c
2c80: 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74  urrent row. $int
2c90: 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e 64 20  s, $doubles and 
2ca0: 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65 20 6c  $strings.# are l
2cb0: 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65  ists of the inte
2cc0: 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20 73 74  ger, real and st
2cd0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2ce0: 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20 76 61  ions of.# the va
2cf0: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  lues in the curr
2d00: 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61  ent row..#.# Exa
2d10: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
2d20: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
2d30: 61 72 65 20 22 53 45 4c 45 43 54 20 27 68 65 6c  are "SELECT 'hel
2d40: 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c 22 20  lo', 1.1, NULL" 
2d50: 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71 6c 69  -1 DUMMY].# sqli
2d60: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 23  te3_step $STMT.#
2d70: 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65 73 74   check_data test
2d80: 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c 20 4e  1.2 {TEXT REAL N
2d90: 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b 30 20  ULL} {0 1 0} {0 
2da0: 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20 31 2e  1.1 0} {hello 1.
2db0: 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63 68 65  1 {}}.#.proc che
2dc0: 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20 74 65  ck_data {STMT te
2dd0: 73 74 20 74 79 70 65 73 20 69 6e 74 73 20 64 6f  st types ints do
2de0: 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d 20 7b  ubles strings} {
2df0: 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20 72 65  ..  # Use the re
2e00: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71  turn value of sq
2e10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
2e20: 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20  nt() to build.  
2e30: 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  # a list of colu
2e40: 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e  mn indexes. i.e.
2e50: 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   If sqlite3_colu
2e60: 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20  mn_count.  # is 
2e70: 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73  3, build the lis
2e80: 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74  t {0 1 2}..  set
2e90: 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74   ::idxlist [list
2ea0: 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c 73 20  ].  set numcols 
2eb0: 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f  [sqlite3_data_co
2ec0: 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72  unt $STMT].  for
2ed0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
2ee0: 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72   $numcols} {incr
2ef0: 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69   i} {lappend ::i
2f00: 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20 74 79  dxlist $i}..# ty
2f10: 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  pes.do_test $tes
2f20: 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79 70 65  t.1 {.  set type
2f30: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
2f40: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
2f50: 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b 73 71  append types [sq
2f60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
2f70: 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  e $STMT $i]}.  s
2f80: 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79 70 65  et types.} $type
2f90: 73 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64 6f  s..# Integers.do
2fa0: 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20 7b 0a  _test $test.2 {.
2fb0: 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73 74    set ints [list
2fc0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
2fd0: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
2fe0: 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ints [sqlite3_co
2ff0: 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53 54 4d 54  lumn_int64 $STMT
3000: 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73   $i]}.  set ints
3010: 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62 79 74 65  .} $ints..# byte
3020: 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74  s.set lens [list
3030: 5d 0a 66 6f 72 65 61 63 68 20 69 20 24 3a 3a 69  ].foreach i $::i
3040: 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61 70 70 65  dxlist {.  lappe
3050: 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69 6e 67 20  nd lens [string 
3060: 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20 24  length [lindex $
3070: 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a 7d 0a 64  strings $i]].}.d
3080: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b  o_test $test.3 {
3090: 0a 20 20 73 65 74 20 62 79 74 65 73 20 5b 6c 69  .  set bytes [li
30a0: 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b  st].  set lens [
30b0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
30c0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
30d0: 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73 20 5b   lappend bytes [
30e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
30f0: 79 74 65 73 20 24 53 54 4d 54 20 24 69 5d 0a 20  ytes $STMT $i]. 
3100: 20 7d 0a 20 20 73 65 74 20 62 79 74 65 73 0a 7d   }.  set bytes.}
3110: 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74 65 73 31   $lens..# bytes1
3120: 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  6.ifcapable {utf
3130: 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c 65 6e 73  16} {.  set lens
3140: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3150: 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b  h i $::idxlist {
3160: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e  .    lappend len
3170: 73 20 5b 65 78 70 72 20 32 20 2a 20 5b 73 74 72  s [expr 2 * [str
3180: 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64  ing length [lind
3190: 65 78 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d  ex $strings $i]]
31a0: 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ].  }.  do_test 
31b0: 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 73 65  $test.4 {.    se
31c0: 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20  t bytes [list]. 
31d0: 20 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73     set lens [lis
31e0: 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69  t].    foreach i
31f0: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
3200: 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73 20    lappend bytes 
3210: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3220: 62 79 74 65 73 31 36 20 24 53 54 4d 54 20 24 69  bytes16 $STMT $i
3230: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ].    }.    set 
3240: 62 79 74 65 73 0a 20 20 7d 20 24 6c 65 6e 73 0a  bytes.  } $lens.
3250: 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f 74 65 73  }..# Blob.do_tes
3260: 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 73 65  t $test.5 {.  se
3270: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
3280: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3290: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
32a0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
32b0: 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24 69 5d 7d  _blob $STMT $i]}
32c0: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 73  .  set utf8.} $s
32d0: 74 72 69 6e 67 73 0a 0a 23 20 55 54 46 2d 38 0a  trings..# UTF-8.
32e0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 36 20  do_test $test.6 
32f0: 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69  {.  set utf8 [li
3300: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
3310: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3320: 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f  d utf8 [sqlite3_
3330: 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d  column_text $STM
3340: 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66  T $i]}.  set utf
3350: 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20  8.} $strings..# 
3360: 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24  Floats.do_test $
3370: 74 65 73 74 2e 37 20 7b 0a 20 20 73 65 74 20 75  test.7 {.  set u
3380: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
3390: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
33a0: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
33b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
33c0: 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a  uble $STMT $i]}.
33d0: 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64 6f    set utf8.} $do
33e0: 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 31 36 0a  ubles..# UTF-16.
33f0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
3400: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 24 74  } {.  do_test $t
3410: 65 73 74 2e 38 20 7b 0a 20 20 20 20 73 65 74 20  est.8 {.    set 
3420: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 20 20  utf8 [list].    
3430: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3440: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
3450: 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f   [utf8 [sqlite3_
3460: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24 53  column_text16 $S
3470: 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20 20 73 65  TMT $i]]}.    se
3480: 74 20 75 74 66 38 0a 20 20 7d 20 24 73 74 72 69  t utf8.  } $stri
3490: 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65 67 65 72  ngs.}..# Integer
34a0: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
34b0: 39 20 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b  9 {.  set ints [
34c0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
34d0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
34e0: 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65  end ints [sqlite
34f0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
3500: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e  MT $i]}.  set in
3510: 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 46 6c  ts.} $ints..# Fl
3520: 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  oats.do_test $te
3530: 73 74 2e 31 30 20 7b 0a 20 20 73 65 74 20 75 74  st.10 {.  set ut
3540: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
3550: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3560: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3570: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
3580: 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ble $STMT $i]}. 
3590: 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64 6f 75   set utf8.} $dou
35a0: 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f  bles..# UTF-8.do
35b0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20 7b  _test $test.11 {
35c0: 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73  .  set utf8 [lis
35d0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
35e0: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
35f0: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63   utf8 [sqlite3_c
3600: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
3610: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
3620: 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 54  .} $strings..# T
3630: 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  ypes.do_test $te
3640: 73 74 2e 31 32 20 7b 0a 20 20 73 65 74 20 74 79  st.12 {.  set ty
3650: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
3660: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
3670: 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b  {lappend types [
3680: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
3690: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ype $STMT $i]}. 
36a0: 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79   set types.} $ty
36b0: 70 65 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74  pes..# Test that
36c0: 20 61 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   an out of range
36d0: 20 72 65 71 75 65 73 74 20 72 65 74 75 72 6e 73   request returns
36e0: 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
36f0: 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73 74 20  of NULL.do_test 
3700: 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c  $test.13 {.  sql
3710: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
3720: 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30 7d 0a 64  $STMT -1.} {0}.d
3730: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20  o_test $test.13 
3740: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
3750: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 2d 31  mn_text $STMT -1
3760: 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63 61 70 61  .} {}..}..ifcapa
3770: 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70 6f 69  ble !floatingpoi
3780: 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  nt {.  finish_te
3790: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64  st.  return.}..d
37a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 30  o_test capi3-5.0
37b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
37c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
37d0: 74 31 28 61 20 56 41 52 49 4e 54 2c 20 62 20 42  t1(a VARINT, b B
37e0: 4c 4f 42 2c 20 63 20 56 41 52 43 48 41 52 28 31  LOB, c VARCHAR(1
37f0: 36 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  6));.    INSERT 
3800: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
3810: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53  , 2, 3);.    INS
3820: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3830: 45 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 2c  ES('one', 'two',
3840: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45   NULL);.    INSE
3850: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
3860: 53 28 31 2e 32 2c 20 31 2e 33 2c 20 31 2e 34 29  S(1.2, 1.3, 1.4)
3870: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  ;.  }.  set sql 
3880: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
3890: 31 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  1".  set STMT [s
38a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
38b0: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
38c0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
38d0: 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20  n_count $STMT.} 
38e0: 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20  3..check_header 
38f0: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 31 20  $STMT capi3-5.1 
3900: 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20  {a b c} {VARINT 
3910: 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29  BLOB VARCHAR(16)
3920: 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68  }.check_origin_h
3930: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3940: 33 2d 35 2e 31 20 7b 6d 61 69 6e 20 6d 61 69 6e  3-5.1 {main main
3950: 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31   main} {t1 t1 t1
3960: 7d 20 7b 61 20 62 20 63 7d 0a 64 6f 5f 74 65 73  } {a b c}.do_tes
3970: 74 20 63 61 70 69 33 2d 35 2e 32 20 7b 0a 20 20  t capi3-5.2 {.  
3980: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3990: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
39a0: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
39b0: 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 20 7b 61  TMT capi3-5.3 {a
39c0: 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c   b c} {VARINT BL
39d0: 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a  OB VARCHAR(16)}.
39e0: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
39f0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3a00: 35 2e 33 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  5.3 {main main m
3a10: 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20  ain} {t1 t1 t1} 
3a20: 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61  {a b c}.check_da
3a30: 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  ta $STMT capi3-5
3a40: 2e 34 20 7b 49 4e 54 45 47 45 52 20 49 4e 54 45  .4 {INTEGER INTE
3a50: 47 45 52 20 54 45 58 54 7d 20 7b 31 20 32 20 33  GER TEXT} {1 2 3
3a60: 7d 20 7b 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20  } {1.0 2.0 3.0} 
3a70: 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74  {1 2 3}..do_test
3a80: 20 63 61 70 69 33 2d 35 2e 35 20 7b 0a 20 20 73   capi3-5.5 {.  s
3a90: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
3aa0: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a  T.} SQLITE_ROW..
3ab0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
3ac0: 4d 54 20 63 61 70 69 33 2d 35 2e 36 20 7b 61 20  MT capi3-5.6 {a 
3ad0: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3ae0: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3af0: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3b00: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  er $STMT capi3-5
3b10: 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .6 {main main ma
3b20: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3b30: 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74  a b c}.check_dat
3b40: 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  a $STMT capi3-5.
3b50: 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e 55 4c  7 {TEXT TEXT NUL
3b60: 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e 30 20  L} {0 0 0} {0.0 
3b70: 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20 74 77  0.0 0.0} {one tw
3b80: 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  o {}}..do_test c
3b90: 61 70 69 33 2d 35 2e 38 20 7b 0a 20 20 73 71 6c  api3-5.8 {.  sql
3ba0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3bb0: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68  } SQLITE_ROW..ch
3bc0: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3bd0: 20 63 61 70 69 33 2d 35 2e 39 20 7b 61 20 62 20   capi3-5.9 {a b 
3be0: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3bf0: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3c00: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3c10: 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 39   $STMT capi3-5.9
3c20: 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e   {main main main
3c30: 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20  } {t1 t1 t1} {a 
3c40: 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20  b c}.check_data 
3c50: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 31 30  $STMT capi3-5.10
3c60: 20 7b 46 4c 4f 41 54 20 46 4c 4f 41 54 20 54 45   {FLOAT FLOAT TE
3c70: 58 54 7d 20 7b 31 20 31 20 31 7d 20 7b 31 2e 32  XT} {1 1 1} {1.2
3c80: 20 31 2e 33 20 31 2e 34 7d 20 7b 31 2e 32 20 31   1.3 1.4} {1.2 1
3c90: 2e 33 20 31 2e 34 7d 0a 0a 64 6f 5f 74 65 73 74  .3 1.4}..do_test
3ca0: 20 63 61 70 69 33 2d 35 2e 31 31 20 7b 0a 20 20   capi3-5.11 {.  
3cb0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3cc0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
3cd0: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  ..do_test capi3-
3ce0: 35 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  5.12 {.  sqlite3
3cf0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
3d00: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f  } SQLITE_OK..do_
3d10: 74 65 73 74 20 63 61 70 69 33 2d 35 2e 32 30 20  test capi3-5.20 
3d20: 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c  {.  set sql "SEL
3d30: 45 43 54 20 61 2c 20 73 75 6d 28 62 29 2c 20 6d  ECT a, sum(b), m
3d40: 61 78 28 63 29 20 46 52 4f 4d 20 74 31 20 47 52  ax(c) FROM t1 GR
3d50: 4f 55 50 20 42 59 20 61 22 0a 20 20 73 65 74 20  OUP BY a".  set 
3d60: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
3d70: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d  epare $DB $sql -
3d80: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
3d90: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
3da0: 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f  STMT.} 3..check_
3db0: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3dc0: 69 33 2d 35 2e 32 31 20 7b 61 20 73 75 6d 28 62  i3-5.21 {a sum(b
3dd0: 29 20 6d 61 78 28 63 29 7d 20 7b 56 41 52 49 4e  ) max(c)} {VARIN
3de0: 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f  T {} {}}.check_o
3df0: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
3e00: 4d 54 20 63 61 70 69 33 2d 35 2e 32 32 20 7b 6d  MT capi3-5.22 {m
3e10: 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b  ain {} {}} {t1 {
3e20: 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a  } {}} {a {} {}}.
3e30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
3e40: 32 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  23 {.  sqlite3_f
3e50: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
3e60: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65  SQLITE_OK..do_te
3e70: 73 74 20 63 61 70 69 33 2d 35 2e 33 30 20 7b 0a  st capi3-5.30 {.
3e80: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
3e90: 54 20 61 20 41 53 20 78 2c 20 73 75 6d 28 62 29  T a AS x, sum(b)
3ea0: 20 41 53 20 79 2c 20 6d 61 78 28 63 29 20 41 53   AS y, max(c) AS
3eb0: 20 7a 20 46 52 4f 4d 20 74 31 20 41 53 20 6d 20   z FROM t1 AS m 
3ec0: 47 52 4f 55 50 20 42 59 20 78 22 0a 20 20 73 65  GROUP BY x".  se
3ed0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
3ee0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
3ef0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
3f00: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
3f10: 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63   $STMT.} 3..chec
3f20: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
3f30: 61 70 69 33 2d 35 2e 33 31 20 7b 78 20 79 20 7a  api3-5.31 {x y z
3f40: 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d  } {VARINT {} {}}
3f50: 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65  .check_origin_he
3f60: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3f70: 2d 35 2e 33 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b  -5.32 {main {} {
3f80: 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61  }} {t1 {} {}} {a
3f90: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
3fa0: 63 61 70 69 33 2d 35 2e 33 33 20 7b 0a 20 20 73  capi3-5.33 {.  s
3fb0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3fc0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
3fd0: 4b 0a 0a 0a 73 65 74 20 3a 3a 45 4e 43 20 5b 65  K...set ::ENC [e
3fe0: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65  xecsql {pragma e
3ff0: 6e 63 6f 64 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f  ncoding}].db clo
4000: 73 65 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  se..do_test capi
4010: 33 2d 36 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65  3-6.0 {.  sqlite
4020: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73  3 db test.db.  s
4030: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
4040: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
4050: 72 20 64 62 5d 0a 20 20 69 66 20 7b 5b 73 71 6c  r db].  if {[sql
4060: 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d  ite3 -has-codec]
4070: 3d 3d 30 7d 20 7b 20 73 71 6c 69 74 65 33 5f 6b  ==0} { sqlite3_k
4080: 65 79 20 24 44 42 20 78 79 7a 7a 79 20 7d 0a 20  ey $DB xyzzy }. 
4090: 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54   set sql {SELECT
40a0: 20 61 20 46 52 4f 4d 20 74 31 20 6f 72 64 65 72   a FROM t1 order
40b0: 20 62 79 20 72 6f 77 69 64 7d 0a 20 20 73 65 74   by rowid}.  set
40c0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
40d0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
40e0: 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 70 72 20  -1 TAIL].  expr 
40f0: 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  0.} {0}.do_test 
4100: 63 61 70 69 33 2d 36 2e 31 20 7b 0a 20 20 64 62  capi3-6.1 {.  db
4110: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73   cache flush.  s
4120: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42  qlite3_close $DB
4130: 0a 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 7d  .} {SQLITE_BUSY}
4140: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
4150: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
4160: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
4170: 49 54 45 5f 45 52 52 4f 52 7d 0a 23 63 68 65 63  ITE_ERROR}.#chec
4180: 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70  k_data $STMT cap
4190: 69 33 2d 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d  i3-6.3 {INTEGER}
41a0: 20 7b 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64   {1} {1.0} {1}.d
41b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 33  o_test capi3-6.3
41c0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
41d0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
41e0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 64 6f  QLITE_SCHEMA}.do
41f0: 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 34 2d  _test capi3-6.4-
4200: 6d 69 73 75 73 65 20 7b 0a 20 20 64 62 20 63 61  misuse {.  db ca
4210: 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69  che flush.  sqli
4220: 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20  te3_close $DB.} 
4230: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 62 20 63  {SQLITE_OK}.db c
4240: 6c 6f 73 65 0a 0a 23 20 54 68 69 73 20 70 72 6f  lose..# This pro
4250: 63 65 64 75 72 65 20 73 65 74 73 20 74 68 65 20  cedure sets the 
4260: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 69 6c  value of the fil
4270: 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c 65  e-format in file
4280: 20 27 74 65 73 74 2e 64 62 27 0a 23 20 74 6f 20   'test.db'.# to 
4290: 24 6e 65 77 76 61 6c 2e 20 41 6c 73 6f 2c 20 74  $newval. Also, t
42a0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
42b0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
42c0: 0a 23 20 0a 70 72 6f 63 20 73 65 74 5f 66 69 6c  .# .proc set_fil
42d0: 65 5f 66 6f 72 6d 61 74 20 7b 6e 65 77 76 61 6c  e_format {newval
42e0: 7d 20 7b 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  } {.  hexio_writ
42f0: 65 20 74 65 73 74 2e 64 62 20 34 34 20 5b 68 65  e test.db 44 [he
4300: 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32  xio_render_int32
4310: 20 24 6e 65 77 76 61 6c 5d 0a 20 20 73 65 74 20   $newval].  set 
4320: 73 63 68 65 6d 61 63 6f 6f 6b 69 65 20 5b 68 65  schemacookie [he
4330: 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78  xio_get_int [hex
4340: 69 6f 5f 72 65 61 64 20 74 65 73 74 2e 64 62 20  io_read test.db 
4350: 34 30 20 34 5d 5d 0a 20 20 69 6e 63 72 20 73 63  40 4]].  incr sc
4360: 68 65 6d 61 63 6f 6f 6b 69 65 0a 20 20 68 65 78  hemacookie.  hex
4370: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
4380: 20 34 30 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65   40 [hexio_rende
4390: 72 5f 69 6e 74 33 32 20 24 73 63 68 65 6d 61 63  r_int32 $schemac
43a0: 6f 6f 6b 69 65 5d 0a 20 20 72 65 74 75 72 6e 20  ookie].  return 
43b0: 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f  {}.}..# This pro
43c0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74  cedure returns t
43d0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
43e0: 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66  file-format in f
43f0: 69 6c 65 20 27 74 65 73 74 2e 64 62 27 2e 0a 23  ile 'test.db'..#
4400: 20 0a 70 72 6f 63 20 67 65 74 5f 66 69 6c 65 5f   .proc get_file_
4410: 66 6f 72 6d 61 74 20 7b 7b 66 6e 61 6d 65 20 74  format {{fname t
4420: 65 73 74 2e 64 62 7d 7d 20 7b 0a 20 20 72 65 74  est.db}} {.  ret
4430: 75 72 6e 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69  urn [hexio_get_i
4440: 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 24  nt [hexio_read $
4450: 66 6e 61 6d 65 20 34 34 20 34 5d 5d 0a 7d 0a 0a  fname 44 4]].}..
4460: 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68  if {![sqlite3 -h
4470: 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23  as-codec]} {.  #
4480: 20 54 65 73 74 20 77 68 61 74 20 68 61 70 70 65   Test what happe
4490: 6e 73 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72  ns when the libr
44a0: 61 72 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61  ary encounters a
44b0: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
44c0: 61 74 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  at..  do_test ca
44d0: 70 69 33 2d 37 2e 31 20 7b 0a 20 20 20 20 73 65  pi3-7.1 {.    se
44e0: 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 35 0a  t_file_format 5.
44f0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4500: 20 63 61 70 69 33 2d 37 2e 32 20 7b 0a 20 20 20   capi3-7.2 {.   
4510: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
4520: 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20   db test.db }.  
4530: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4540: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4550: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
4560: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e      }.  } {1 {un
4570: 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66  supported file f
4580: 6f 72 6d 61 74 7d 7d 0a 20 20 64 62 20 63 6c 6f  ormat}}.  db clo
4590: 73 65 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69  se.}..if {![sqli
45a0: 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d  te3 -has-codec]}
45b0: 20 7b 0a 20 20 23 20 4e 6f 77 20 74 65 73 74 20   {.  # Now test 
45c0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
45d0: 20 63 6f 72 72 65 63 74 6c 79 20 68 61 6e 64 6c   correctly handl
45e0: 65 73 20 62 6f 67 75 73 20 65 6e 74 72 69 65 73  es bogus entries
45f0: 20 69 6e 20 74 68 65 0a 20 20 23 20 73 71 6c 69   in the.  # sqli
4600: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
4610: 28 73 63 68 65 6d 61 20 63 6f 72 72 75 70 74 69  (schema corrupti
4620: 6f 6e 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63  on)..  do_test c
4630: 61 70 69 33 2d 38 2e 31 20 7b 0a 20 20 20 20 66  api3-8.1 {.    f
4640: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
4650: 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  db test.db-journ
4660: 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  al.    sqlite3 d
4670: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  b test.db.    ex
4680: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
4690: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29  EATE TABLE t1(a)
46a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63  ;.    }.    db c
46b0: 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  lose.  } {}.  do
46c0: 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 32 20  _test capi3-8.2 
46d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
46e0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
46f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4700: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
4710: 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e  ema=ON;.      IN
4720: 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65  SERT INTO sqlite
4730: 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28 4e  _master VALUES(N
4740: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  ULL,NULL,NULL,NU
4750: 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a  LL,NULL);.    }.
4760: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d      db close.  }
4770: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
4780: 70 69 33 2d 38 2e 33 20 7b 0a 20 20 20 20 63 61  pi3-8.3 {.    ca
4790: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62  tch { sqlite3 db
47a0: 20 74 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63   test.db }.    c
47b0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
47c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
47d0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
47e0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f   }.  } {1 {malfo
47f0: 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63  rmed database sc
4800: 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f  hema (?)}}.  do_
4810: 74 65 73 74 20 63 61 70 69 33 2d 38 2e 34 20 7b  test capi3-8.4 {
4820: 0a 20 20 20 20 23 20 42 75 69 6c 64 20 61 20 35  .    # Build a 5
4830: 2d 66 69 65 6c 64 20 72 6f 77 20 72 65 63 6f 72  -field row recor
4840: 64 2e 20 54 68 65 20 66 69 72 73 74 20 66 69 65  d. The first fie
4850: 6c 64 20 69 73 20 61 20 73 74 72 69 6e 67 20 27  ld is a string '
4860: 74 61 62 6c 65 27 2c 20 61 6e 64 0a 20 20 20 20  table', and.    
4870: 23 20 73 75 62 73 65 71 75 65 6e 74 20 66 69 65  # subsequent fie
4880: 6c 64 73 20 61 72 65 20 61 6c 6c 20 4e 55 4c 4c  lds are all NULL
4890: 2e 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  ..    db close. 
48a0: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
48b0: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a  est.db test.db-j
48c0: 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74  ournal.    sqlit
48d0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
48e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
48f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4900: 31 28 61 29 3b 0a 20 20 20 20 20 20 50 52 41 47  1(a);.      PRAG
4910: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
4920: 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53  ma=ON;.      INS
4930: 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
4940: 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28 27 74  master VALUES('t
4950: 61 62 6c 65 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c  able',NULL,NULL,
4960: 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20  NULL,NULL);.    
4970: 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  }.    db close. 
4980: 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65 73 74   } {};.  do_test
4990: 20 63 61 70 69 33 2d 38 2e 35 20 7b 0a 20 20 20   capi3-8.5 {.   
49a0: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
49b0: 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20   db test.db }.  
49c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
49d0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
49e0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
49f0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61      }.  } {1 {ma
4a00: 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  lformed database
4a10: 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20   schema (?)}}.  
4a20: 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 6f 72 63 65  db close.}.force
4a30: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 66  delete test.db.f
4a40: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
4a50: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23 20 54  db-journal...# T
4a60: 65 73 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20  est the english 
4a70: 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20  language string 
4a80: 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20  equivalents for 
4a90: 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  sqlite error cod
4aa0: 65 73 0a 73 65 74 20 63 6f 64 65 32 65 6e 67 6c  es.set code2engl
4ab0: 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51 4c 49  ish [list \.SQLI
4ac0: 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20 7b 6e  TE_OK         {n
4ad0: 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c 0a 53  ot an error} \.S
4ae0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20 20 20  QLITE_ERROR     
4af0: 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   {SQL logic erro
4b00: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
4b10: 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  abase} \.SQLITE_
4b20: 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63 65  PERM       {acce
4b30: 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65  ss permission de
4b40: 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41  nied} \.SQLITE_A
4b50: 42 4f 52 54 20 20 20 20 20 20 7b 63 61 6c 6c 62  BORT      {callb
4b60: 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75  ack requested qu
4b70: 65 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53 51 4c  ery abort} \.SQL
4b80: 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 7b  ITE_BUSY       {
4b90: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
4ba0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43  ed} \.SQLITE_LOC
4bb0: 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62 61 73  KED     {databas
4bc0: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
4bd0: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45  d} \.SQLITE_NOME
4be0: 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20 6d  M      {out of m
4bf0: 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45 5f  emory} \.SQLITE_
4c00: 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74 65  READONLY   {atte
4c10: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
4c20: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
4c30: 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45 52  } \.SQLITE_INTER
4c40: 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70 74  RUPT  {interrupt
4c50: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f 45  ed} \.SQLITE_IOE
4c60: 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49 2f  RR      {disk I/
4c70: 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  O error} \.SQLIT
4c80: 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64 61  E_CORRUPT    {da
4c90: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
4ca0: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 20  e is malformed} 
4cb0: 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20  \.SQLITE_FULL   
4cc0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f 72      {database or
4cd0: 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20 5c   disk is full} \
4ce0: 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e  .SQLITE_CANTOPEN
4cf0: 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70     {unable to op
4d00: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
4d10: 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50 54 59  } \.SQLITE_EMPTY
4d20: 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63 6f 6e        {table con
4d30: 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d 20 5c  tains no data} \
4d40: 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 20  .SQLITE_SCHEMA  
4d50: 20 20 20 7b 64 61 74 61 62 61 73 65 20 73 63 68     {database sch
4d60: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d  ema has changed}
4d70: 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52   \.SQLITE_CONSTR
4d80: 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69 6e 74  AINT {constraint
4d90: 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c 49 54   failed} \.SQLIT
4da0: 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b 64 61  E_MISMATCH   {da
4db0: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d  tatype mismatch}
4dc0: 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   \.SQLITE_MISUSE
4dd0: 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20 72 6f       {library ro
4de0: 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74  utine called out
4df0: 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20 5c 0a   of sequence} \.
4e00: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20 20  SQLITE_NOLFS    
4e10: 20 20 7b 6c 61 72 67 65 20 66 69 6c 65 20 73 75    {large file su
4e20: 70 70 6f 72 74 20 69 73 20 64 69 73 61 62 6c 65  pport is disable
4e30: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55 54 48  d} \.SQLITE_AUTH
4e40: 20 20 20 20 20 20 20 7b 61 75 74 68 6f 72 69 7a         {authoriz
4e50: 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a  ation denied} \.
4e60: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20 20 20  SQLITE_FORMAT   
4e70: 20 20 7b 61 75 78 69 6c 69 61 72 79 20 64 61 74    {auxiliary dat
4e80: 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72  abase format err
4e90: 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 41 4e  or} \.SQLITE_RAN
4ea0: 47 45 20 20 20 20 20 20 7b 62 69 6e 64 20 6f 72  GE      {bind or
4eb0: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75   column index ou
4ec0: 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53 51  t of range} \.SQ
4ed0: 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20  LITE_NOTADB     
4ee0: 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74  {file is encrypt
4ef0: 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64  ed or is not a d
4f00: 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f  atabase} \.unkno
4f10: 77 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75 6e  wnerror      {un
4f20: 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d  known error} \.]
4f30: 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62 65  ..set test_numbe
4f40: 72 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f 64  r 1.foreach {cod
4f50: 65 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64 65  e english} $code
4f60: 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f 5f  2english {.  do_
4f70: 74 65 73 74 20 63 61 70 69 33 2d 39 2e 24 74 65  test capi3-9.$te
4f80: 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c 69 74  st_number "sqlit
4f90: 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20 24  e3_test_errstr $
4fa0: 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68 0a 20  code" $english. 
4fb0: 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d 62 65   incr test_numbe
4fc0: 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20  r.}..# Test the 
4fd0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 68  error message wh
4fe0: 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75 74 20  en a "real" out 
4ff0: 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75 72 73  of memory occurs
5000: 2e 0a 69 66 63 61 70 61 62 6c 65 20 6d 65 6d 64  ..ifcapable memd
5010: 65 62 75 67 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ebug {.  do_test
5020: 20 63 61 70 69 33 2d 31 30 2d 31 20 7b 0a 20 20   capi3-10-1 {.  
5030: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5040: 74 2e 64 62 0a 20 20 20 20 73 65 74 20 44 42 20  t.db.    set DB 
5050: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
5060: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
5070: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64      sqlite3_memd
5080: 65 62 75 67 5f 66 61 69 6c 20 31 0a 20 20 20 20  ebug_fail 1.    
5090: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
50a0: 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73   select * from s
50b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
50c0: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20    }.  } {1 {out 
50d0: 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f  of memory}}.  do
50e0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 32  _test capi3-10-2
50f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
5100: 72 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20  rrmsg $::DB.  } 
5110: 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a  {out of memory}.
5120: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
5130: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
5140: 74 20 63 61 70 69 33 2d 31 30 2d 33 20 7b 0a 20  t capi3-10-3 {. 
5150: 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74       utf8 [sqlit
5160: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44  e3_errmsg16 $::D
5170: 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66  B].    } {out of
5180: 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64   memory}.  }.  d
5190: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
51a0: 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20  3_memdebug_fail 
51b0: 2d 31 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  -1.  do_test cap
51c0: 69 33 2d 31 30 2d 34 20 7b 0a 20 20 20 20 73 71  i3-10-4 {.    sq
51d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
51e0: 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73 71 6c  .    set DB [sql
51f0: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5200: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 20 20  pointer db].    
5210: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
5220: 5f 66 61 69 6c 20 31 0a 20 20 20 20 63 61 74 63  _fail 1.    catc
5230: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c  hsql {.      sel
5240: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
5250: 65 5f 6d 61 73 74 65 72 20 77 68 65 72 65 20 72  e_master where r
5260: 6f 77 69 64 3e 35 3b 0a 20 20 20 20 7d 0a 20 20  owid>5;.    }.  
5270: 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  } {1 {out of mem
5280: 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ory}}.  do_test 
5290: 63 61 70 69 33 2d 31 30 2d 35 20 7b 0a 20 20 20  capi3-10-5 {.   
52a0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
52b0: 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20 6f  $::DB.  } {out o
52c0: 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63 61  f memory}.  ifca
52d0: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
52e0: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
52f0: 33 2d 31 30 2d 36 20 7b 0a 20 20 20 20 20 20 75  3-10-6 {.      u
5300: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72  tf8 [sqlite3_err
5310: 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20 20  msg16 $::DB].   
5320: 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   } {out of memor
5330: 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73  y}.  }.  db clos
5340: 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64  e.  sqlite3_memd
5350: 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 7d 0a 0a  ebug_fail -1.}..
5360: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
5370: 74 65 73 74 73 20 2d 20 63 61 70 69 33 2d 31 31  tests - capi3-11
5380: 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20 61  .* - test that a
5390: 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42   COMMIT or ROLLB
53a0: 41 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e 74 20  ACK.# statement 
53b0: 69 73 73 75 65 64 20 77 68 69 6c 65 20 74 68 65  issued while the
53c0: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6f 75 74  re are still out
53d0: 73 74 61 6e 64 69 6e 67 20 56 4d 73 20 74 68 61  standing VMs tha
53e0: 74 20 61 72 65 20 70 61 72 74 20 6f 66 0a 23 20  t are part of.# 
53f0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5400: 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33 20 64  fails..sqlite3 d
5410: 62 20 74 65 73 74 2e 64 62 0a 73 65 74 20 44 42  b test.db.set DB
5420: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
5430: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
5440: 0a 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72  .sqlite_register
5450: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24  _test_function $
5460: 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73 74 20  DB func.do_test 
5470: 63 61 70 69 33 2d 31 31 2e 31 20 7b 0a 20 20 65  capi3-11.1 {.  e
5480: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
5490: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
54a0: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20  ABLE t1(a, b);. 
54b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
54c0: 31 20 56 41 4c 55 45 53 28 31 2c 20 27 69 6e 74  1 VALUES(1, 'int
54d0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
54e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c  NTO t1 VALUES(2,
54f0: 20 27 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20 20   'notatype');.  
5500: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
5510: 61 70 69 33 2d 31 31 2e 31 2e 31 20 7b 0a 20 20  api3-11.1.1 {.  
5520: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
5530: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
5540: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5550: 32 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  2 {.  set STMT [
5560: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
5570: 24 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63  $DB "SELECT func
5580: 28 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20  (b, a) FROM t1" 
5590: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
55a0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
55b0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a 23 20  {SQLITE_ROW}..# 
55c0: 41 73 20 6f 66 20 33 2e 36 2e 35 20 61 20 43 4f  As of 3.6.5 a CO
55d0: 4d 4d 49 54 20 69 73 20 4f 4b 20 64 75 72 69 6e  MMIT is OK durin
55e0: 67 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20  g while a query 
55f0: 69 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  is still running
5600: 20 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61 73 20   -.# as long as 
5610: 69 74 20 69 73 20 61 20 72 65 61 64 2d 6f 6e 6c  it is a read-onl
5620: 79 20 71 75 65 72 79 20 61 6e 64 20 6e 6f 74 20  y query and not 
5630: 61 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  an incremental B
5640: 4c 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64 6f 5f  LOB write..#.do_
5650: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e  test capi3-11.3.
5660: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
5670: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
5680: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5690: 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 32 20 7b  t capi3-11.3.2 {
56a0: 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  .  sqlite3_exten
56b0: 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a  ded_errcode $DB.
56c0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
56d0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33  _test capi3-11.3
56e0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .3 {.  sqlite3_g
56f0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
5700: 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 1.do_test ca
5710: 70 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20 20 64  pi3-11.3.4 {.  d
5720: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 6c  b eval {PRAGMA l
5730: 6f 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20 7b 6d  ock_status}.} {m
5740: 61 69 6e 20 73 68 61 72 65 64 20 74 65 6d 70 20  ain shared temp 
5750: 63 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65 73 74  closed}..do_test
5760: 20 63 61 70 69 33 2d 31 31 2e 34 20 7b 0a 20 20   capi3-11.4 {.  
5770: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5780: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5790: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
57a0: 33 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69 74  3-11.5 {.  sqlit
57b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
57c0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f  T.} {SQLITE_ERRO
57d0: 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  R}.do_test capi3
57e0: 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63 68 73  -11.6 {.  catchs
57f0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5800: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
5810: 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e 6f 74   {0 {1 int 2 not
5820: 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  atype}}.do_test 
5830: 63 61 70 69 33 2d 31 31 2e 37 20 7b 0a 20 20 73  capi3-11.7 {.  s
5840: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5850: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5860: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 38  _test capi3-11.8
5870: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5880: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5890: 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52  t2(a);.    INSER
58a0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
58b0: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
58c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
58d0: 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  );.    BEGIN;.  
58e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
58f0: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d 0a   VALUES(3);.  }.
5900: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
5910: 69 33 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73 71  i3-11.8.1 {.  sq
5920: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
5930: 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f  mmit $DB.} 0.do_
5940: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39 20  test capi3-11.9 
5950: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
5960: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
5970: 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  B "SELECT a FROM
5980: 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t2" -1 TAIL].  
5990: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
59a0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
59b0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
59c0: 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.9.1 {.  sqlit
59d0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
59e0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
59f0: 74 20 63 61 70 69 33 2d 31 31 2e 39 2e 32 20 7b  t capi3-11.9.2 {
5a00: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5a10: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
5a20: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5a30: 20 63 61 70 69 33 2d 31 31 2e 39 2e 33 20 7b 0a   capi3-11.9.3 {.
5a40: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5a50: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5a60: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5a70: 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.10 {.  sqlite3
5a80: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5a90: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f  QLITE_ERROR}.do_
5aa0: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 31  test capi3-11.11
5ab0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5ac0: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5ad0: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5ae0: 61 70 69 33 2d 31 31 2e 31 32 20 7b 0a 20 20 73  api3-11.12 {.  s
5af0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5b00: 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  T.  sqlite3_step
5b10: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5b20: 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63  _DONE}.do_test c
5b30: 61 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20 20 73  api3-11.13 {.  s
5b40: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5b50: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5b60: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
5b70: 33 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78 65 63  3-11.14 {.  exec
5b80: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
5b90: 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   a FROM t2;.  }.
5ba0: 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20  } {1 2}.do_test 
5bb0: 63 61 70 69 33 2d 31 31 2e 31 34 2e 31 20 7b 0a  capi3-11.14.1 {.
5bc0: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5bd0: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5be0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5bf0: 31 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71  1.15 {.  catchsq
5c00: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
5c10: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e  ;.  }.} {1 {cann
5c20: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
5c30: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
5c40: 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74  active}}.do_test
5c50: 20 63 61 70 69 33 2d 31 31 2e 31 35 2e 31 20 7b   capi3-11.15.1 {
5c60: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5c70: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5c80: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  1.do_test capi3-
5c90: 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  11.16 {.  execsq
5ca0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
5cb0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
5cc0: 7b 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20  {1 2}..# Sanity 
5cd0: 63 68 65 63 6b 20 6f 6e 20 74 68 65 20 64 65 66  check on the def
5ce0: 69 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73  inition of 'outs
5cf0: 74 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68 69  tanding VM'. Thi
5d00: 73 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23  s means any VM.#
5d10: 20 74 68 61 74 20 68 61 73 20 68 61 64 20 73 71   that has had sq
5d20: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
5d30: 6c 65 64 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c  led more recentl
5d40: 79 20 74 68 61 6e 20 73 71 6c 69 74 65 33 5f 66  y than sqlite3_f
5d50: 69 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73  inalize() or.# s
5d60: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2e 20  qlite3_reset(). 
5d70: 53 6f 20 61 20 56 4d 20 74 68 61 74 20 68 61 73  So a VM that has
5d80: 20 6a 75 73 74 20 62 65 65 6e 20 70 72 65 70 61   just been prepa
5d90: 72 65 64 20 6f 72 20 72 65 73 65 74 20 64 6f 65  red or reset doe
5da0: 73 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73  s not.# count as
5db0: 20 61 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a 64   an active VM..d
5dc0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5dd0: 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  17 {.  execsql {
5de0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a  .    BEGIN;.  }.
5df0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
5e00: 69 33 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74  i3-11.18 {.  set
5e10: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
5e20: 72 65 70 61 72 65 20 24 44 42 20 22 53 45 4c 45  repare $DB "SELE
5e30: 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20 2d 31  CT a FROM t1" -1
5e40: 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68 73 71   TAIL].  catchsq
5e50: 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  l {.    COMMIT;.
5e60: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
5e70: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 39  test capi3-11.19
5e80: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5e90: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5ea0: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5eb0: 61 70 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20 63  api3-11.20 {.  c
5ec0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45  atchsql {.    BE
5ed0: 47 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  GIN;.    COMMIT;
5ee0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5ef0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32  _test capi3-11.2
5f00: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  0 {.  sqlite3_re
5f10: 73 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74 63  set $STMT.  catc
5f20: 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49  hsql {.    COMMI
5f30: 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e  T;.  }.} {1 {can
5f40: 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
5f50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
5f60: 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  ctive}}.do_test 
5f70: 63 61 70 69 33 2d 31 31 2e 32 31 20 7b 0a 20 20  capi3-11.21 {.  
5f80: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5f90: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5fa0: 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c  _OK}..# The foll
5fb0: 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61  owing tests - ca
5fc0: 70 69 33 2d 31 32 2e 2a 20 2d 20 63 68 65 63 6b  pi3-12.* - check
5fd0: 20 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20   that its Ok to 
5fe0: 73 74 61 72 74 20 61 0a 23 20 74 72 61 6e 73 61  start a.# transa
5ff0: 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68 65  ction while othe
6000: 72 20 56 4d 73 20 61 72 65 20 61 63 74 69 76 65  r VMs are active
6010: 2c 20 61 6e 64 20 74 68 61 74 20 69 74 73 20 4f  , and that its O
6020: 6b 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20 61  k to execute.# a
6030: 74 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69 6e  tomic updates in
6040: 20 74 68 65 20 73 61 6d 65 20 73 69 74 75 61 74   the same situat
6050: 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ion .#.do_test c
6060: 61 70 69 33 2d 31 32 2e 31 20 7b 0a 20 20 73 65  api3-12.1 {.  se
6070: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6080: 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45 4c  prepare $DB "SEL
6090: 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d  ECT a FROM t2" -
60a0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
60b0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
60c0: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
60d0: 65 73 74 20 63 61 70 69 33 2d 31 32 2e 32 20 7b  est capi3-12.2 {
60e0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
60f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6100: 20 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c 29   VALUES(3, NULL)
6110: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
6120: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e  o_test capi3-12.
6130: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
6140: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6150: 20 74 32 20 56 41 4c 55 45 53 28 34 29 3b 0a 20   t2 VALUES(4);. 
6160: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6170: 65 73 74 20 63 61 70 69 33 2d 31 32 2e 34 20 7b  est capi3-12.4 {
6180: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
6190: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53    BEGIN;.    INS
61a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
61b0: 45 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d  ES(4, NULL);.  }
61c0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
61d0: 74 20 63 61 70 69 33 2d 31 32 2e 35 20 7b 0a 20  t capi3-12.5 {. 
61e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
61f0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
6200: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
6210: 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69  -12.5.1 {.  sqli
6220: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6230: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
6240: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 36  _test capi3-12.6
6250: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
6260: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
6270: 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20  E_DONE}.do_test 
6280: 63 61 70 69 33 2d 31 32 2e 37 20 7b 0a 20 20 73  capi3-12.7 {.  s
6290: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
62a0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
62b0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK}.do_test capi
62c0: 33 2d 31 32 2e 38 20 7b 0a 20 20 65 78 65 63 73  3-12.8 {.  execs
62d0: 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ql {.    COMMIT;
62e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
62f0: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t1;.  }.} {1 
6300: 32 20 33 20 34 7d 0a 0a 23 20 54 65 73 74 20 63  2 3 4}..# Test c
6310: 61 73 65 73 20 63 61 70 69 33 2d 31 33 2e 2a 20  ases capi3-13.* 
6320: 74 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  test the sqlite3
6330: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28  _clear_bindings(
6340: 29 20 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 33  ) and .# sqlite3
6350: 5f 73 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a 69  _sleep APIs..#.i
6360: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
6370: 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74  o commands sqlit
6380: 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
6390: 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65  s]]>0} {.  do_te
63a0: 73 74 20 63 61 70 69 33 2d 31 33 2e 31 20 7b 0a  st capi3-13.1 {.
63b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
63c0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
63d0: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  t1;.    }.    se
63e0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
63f0: 70 72 65 70 61 72 65 20 24 44 42 20 22 49 4e 53  prepare $DB "INS
6400: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6410: 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41 49  ES(?, ?)" -1 TAI
6420: 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  L].    sqlite3_s
6430: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
6440: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f  QLITE_DONE}.  do
6450: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33 2e 32  _test capi3-13.2
6460: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72   {.    sqlite3_r
6470: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73  eset $STMT.    s
6480: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
6490: 20 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f 20 35   $STMT 1 hello 5
64a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
64b0: 64 5f 74 65 78 74 20 24 53 54 4d 54 20 32 20 77  d_text $STMT 2 w
64c0: 6f 72 6c 64 20 35 0a 20 20 20 20 73 71 6c 69 74  orld 5.    sqlit
64d0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
64e0: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
64f0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6500: 31 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74  13.3 {.    sqlit
6510: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
6520: 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72     sqlite3_clear
6530: 5f 62 69 6e 64 69 6e 67 73 20 24 53 54 4d 54 0a  _bindings $STMT.
6540: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6550: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
6560: 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  TE_DONE}.  do_te
6570: 73 74 20 63 61 70 69 33 2d 31 33 2d 34 20 7b 0a  st capi3-13-4 {.
6580: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
6590: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 65  lize $STMT.    e
65a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
65b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
65c0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 7b  .    }.  } {{} {
65d0: 7d 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b 7d  } hello world {}
65e0: 20 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65 6e   {}}.}.if {[llen
65f0: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e  gth [info comman
6600: 64 73 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  ds sqlite3_sleep
6610: 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  ]]>0} {.  do_tes
6620: 74 20 63 61 70 69 33 2d 31 33 2d 35 20 7b 0a 20  t capi3-13-5 {. 
6630: 20 20 20 73 65 74 20 6d 73 20 5b 73 71 6c 69 74     set ms [sqlit
6640: 65 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20 20  e3_sleep 80].   
6650: 20 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20 7c   expr {$ms==80 |
6660: 7c 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20 7d  | $ms==1000}.  }
6670: 20 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74   {1}.}..# Ticket
6680: 20 23 31 32 31 39 3a 20 20 4d 61 6b 65 20 73 75   #1219:  Make su
6690: 72 65 20 62 69 6e 64 69 6e 67 20 41 50 49 73 20  re binding APIs 
66a0: 63 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55 4c  can handle a NUL
66b0: 4c 20 70 6f 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f  L pointer..#.do_
66c0: 74 65 73 74 20 63 61 70 69 33 2d 31 34 2e 31 2d  test capi3-14.1-
66d0: 6d 69 73 75 73 65 20 7b 0a 20 20 73 65 74 20 72  misuse {.  set r
66e0: 63 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65  c [catch {sqlite
66f0: 33 5f 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20  3_bind_text 0 1 
6700: 68 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20  hello 5} msg].  
6710: 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a  lappend rc $msg.
6720: 7d 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55  } {1 SQLITE_MISU
6730: 53 45 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31  SE}..# Ticket #1
6740: 36 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20  650:  Honor the 
6750: 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74 65 72  nBytes parameter
6760: 20 74 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70   to sqlite3_prep
6770: 61 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  are..#.do_test c
6780: 61 70 69 33 2d 31 35 2e 31 20 7b 0a 20 20 73 65  api3-15.1 {.  se
6790: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  t sql {SELECT * 
67a0: 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20 6e  FROM t2}.  set n
67b0: 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c 65  bytes [string le
67c0: 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70 70  ngth $sql].  app
67d0: 65 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45 20  end sql { WHERE 
67e0: 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d 54  a==1}.  set STMT
67f0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6800: 65 20 24 44 42 20 24 73 71 6c 20 24 6e 62 79 74  e $DB $sql $nbyt
6810: 65 73 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  es TAIL].  sqlit
6820: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6830: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6840: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d  nt $STMT 0.} {1}
6850: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6860: 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  5.2 {.  sqlite3_
6870: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c  step $STMT.  sql
6880: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6890: 24 53 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64 6f  $STMT 0.} {2}.do
68a0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 33  _test capi3-15.3
68b0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
68c0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
68d0: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
68e0: 74 20 63 61 70 69 33 2d 31 35 2e 34 20 7b 0a 20  t capi3-15.4 {. 
68f0: 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36   #        123456
6900: 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65  789 1234567.  se
6910: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  t sql {SELECT 12
6920: 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20  34567890}.  set 
6930: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6940: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 38  epare $DB $sql 8
6950: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6960: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65  _step $STMT.  se
6970: 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t v1 [sqlite3_co
6980: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6990: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
69a0: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
69b0: 20 76 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73   v1.} {1}.do_tes
69c0: 74 20 63 61 70 69 33 2d 31 35 2e 35 20 7b 0a 20  t capi3-15.5 {. 
69d0: 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36   #        123456
69e0: 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65  789 1234567.  se
69f0: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  t sql {SELECT 12
6a00: 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20  34567890}.  set 
6a10: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6a20: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 39  epare $DB $sql 9
6a30: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6a40: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65  _step $STMT.  se
6a50: 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t v1 [sqlite3_co
6a60: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6a70: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6a80: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
6a90: 20 76 31 0a 7d 20 7b 31 32 7d 0a 64 6f 5f 74 65   v1.} {12}.do_te
6aa0: 73 74 20 63 61 70 69 33 2d 31 35 2e 36 20 7b 0a  st capi3-15.6 {.
6ab0: 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35    #        12345
6ac0: 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73  6789 1234567.  s
6ad0: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31  et sql {SELECT 1
6ae0: 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74  234567890}.  set
6af0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6b00: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6b10: 31 32 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  12 TAIL].  sqlit
6b20: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6b30: 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f  set v1 [sqlite3_
6b40: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6b50: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
6b60: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6b70: 65 74 20 76 31 0a 7d 20 7b 31 32 33 34 35 7d 0a  et v1.} {12345}.
6b80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
6b90: 2e 37 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20  .7 {.  #        
6ba0: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
6bb0: 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  7.  set sql {SEL
6bc0: 45 43 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d  ECT 12.34567890}
6bd0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6be0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6bf0: 20 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a 20   $sql 12 TAIL]. 
6c00: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6c10: 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71  TMT.  set v1 [sq
6c20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
6c30: 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73  ble $STMT 0].  s
6c40: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6c50: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d  $STMT.  set v1.}
6c60: 20 7b 31 32 2e 33 34 7d 0a 64 6f 5f 74 65 73 74   {12.34}.do_test
6c70: 20 63 61 70 69 33 2d 31 35 2e 38 20 7b 0a 20 20   capi3-15.8 {.  
6c80: 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37  #        1234567
6c90: 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74  89 1234567.  set
6ca0: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 2e   sql {SELECT 12.
6cb0: 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20  34567890}.  set 
6cc0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6cd0: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 31  epare $DB $sql 1
6ce0: 34 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  4 TAIL].  sqlite
6cf0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6d00: 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63  et v1 [sqlite3_c
6d10: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54  olumn_double $ST
6d20: 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f  MT 0].  sqlite3_
6d30: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
6d40: 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33 34   set v1.} {12.34
6d50: 35 36 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  56}..# Make sure
6d60: 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79 73 20   code is always 
6d70: 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e 20 69  generated even i
6d80: 66 20 61 6e 20 49 46 20 45 58 49 53 54 53 20 6f  f an IF EXISTS o
6d90: 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58 49 53  r .# IF NOT EXIS
6da0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
6db0: 73 65 6e 74 20 74 68 61 74 20 74 68 65 20 74 61  sent that the ta
6dc0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72 0a  ble does not or.
6dd0: 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e 20 20  # does exists.  
6de0: 54 68 61 74 20 77 61 79 20 77 65 20 77 69 6c 6c  That way we will
6df0: 20 61 6c 77 61 79 73 20 68 61 76 65 20 61 20 70   always have a p
6e00: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6e10: 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20 77 68  t.# to expire wh
6e20: 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  en the schema ch
6e30: 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  anges..#.do_test
6e40: 20 63 61 70 69 33 2d 31 36 2e 31 20 7b 0a 20 20   capi3-16.1 {.  
6e50: 73 65 74 20 73 71 6c 20 7b 44 52 4f 50 20 54 41  set sql {DROP TA
6e60: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33  BLE IF EXISTS t3
6e70: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
6e80: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6e90: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
6ea0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6eb0: 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20  ze $STMT.  expr 
6ec0: 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31  {$STMT!=""}.} {1
6ed0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
6ee0: 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c  16.2 {.  set sql
6ef0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   {CREATE TABLE I
6f00: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28  F NOT EXISTS t1(
6f10: 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54  x,y)}.  set STMT
6f20: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6f30: 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  e $DB $sql -1 TA
6f40: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  IL].  sqlite3_fi
6f50: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65  nalize $STMT.  e
6f60: 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a  xpr {$STMT!=""}.
6f70: 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73 74 69  } {1}..# But sti
6f80: 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e  ll we do not gen
6f90: 65 72 61 74 65 20 63 6f 64 65 20 69 66 20 74 68  erate code if th
6fa0: 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a  ere is no SQL.#.
6fb0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36  do_test capi3-16
6fc0: 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .3 {.  set STMT 
6fd0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6fe0: 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d   $DB {} -1 TAIL]
6ff0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
7000: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
7010: 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b   {$STMT==""}.} {
7020: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
7030: 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54  -16.4 {.  set ST
7040: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
7050: 61 72 65 20 24 44 42 20 7b 3b 7d 20 2d 31 20 54  are $DB {;} -1 T
7060: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
7070: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
7080: 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d  expr {$STMT==""}
7090: 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65 74  .} {1}..# Ticket
70a0: 20 23 32 34 32 36 3a 20 20 4d 69 73 75 73 65 20   #2426:  Misuse 
70b0: 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  of sqlite3_colum
70c0: 6e 5f 2a 20 62 79 20 63 61 6c 6c 69 6e 67 20 69  n_* by calling i
70d0: 74 20 61 66 74 65 72 0a 23 20 61 20 73 71 6c 69  t after.# a sqli
70e0: 74 65 33 5f 72 65 73 65 74 20 73 68 6f 75 6c 64  te3_reset should
70f0: 20 62 65 20 68 61 72 6d 6c 65 73 73 2e 0a 23 0a   be harmless..#.
7100: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37  do_test capi3-17
7110: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
7120: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
7130: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46   $DB {SELECT * F
7140: 52 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d  ROM t2} -1 TAIL]
7150: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7160: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
7170: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
7180: 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   0.} {1}.do_test
7190: 20 63 61 70 69 33 2d 31 37 2e 32 20 7b 0a 20 20   capi3-17.2 {.  
71a0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
71b0: 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  TMT.  sqlite3_co
71c0: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
71d0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {0}.do_test c
71e0: 61 70 69 33 2d 31 37 2e 33 20 7b 0a 20 20 73 71  api3-17.3 {.  sq
71f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
7200: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  STMT.} {SQLITE_O
7210: 4b 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61  K}..# Verify tha
7220: 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  t sqlite3_step()
7230: 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 53   fails with an S
7240: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
7250: 6f 72 0a 23 20 77 68 65 6e 20 74 68 65 20 73 74  or.# when the st
7260: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
7270: 72 65 64 20 77 69 74 68 20 73 71 6c 69 74 65 33  red with sqlite3
7280: 5f 70 72 65 70 61 72 65 28 29 20 28 6e 6f 74 0a  _prepare() (not.
7290: 23 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  # sqlite3_prepar
72a0: 65 5f 76 32 28 29 29 20 61 6e 64 20 74 68 65 20  e_v2()) and the 
72b0: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
72c0: 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  ed..#.do_test ca
72d0: 70 69 33 2d 31 38 2e 31 20 7b 0a 20 20 73 65 74  pi3-18.1 {.  set
72e0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
72f0: 72 65 70 61 72 65 20 64 62 20 7b 53 45 4c 45 43  repare db {SELEC
7300: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  T * FROM t2} -1 
7310: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 20  TAIL].  sqlite3 
7320: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64 62  db2 test.db.  db
7330: 32 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54  2 eval {CREATE T
7340: 41 42 4c 45 20 74 33 28 78 29 7d 0a 20 20 64 62  ABLE t3(x)}.  db
7350: 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  2 close.  sqlite
7360: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
7370: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
7380: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 32  _test capi3-18.2
7390: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
73a0: 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  et $STMT.  sqlit
73b0: 65 33 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20  e3_errcode db.} 
73c0: 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a  {SQLITE_SCHEMA}.
73d0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38  do_test capi3-18
73e0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .3 {.  sqlite3_e
73f0: 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61  rrmsg db.} {data
7400: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
7410: 63 68 61 6e 67 65 64 7d 0a 23 20 54 68 65 20 65  changed}.# The e
7420: 72 72 6f 72 20 70 65 72 73 69 73 74 20 6f 6e 20  rror persist on 
7430: 72 65 74 72 79 20 77 68 65 6e 20 73 71 6c 69 74  retry when sqlit
7440: 65 33 5f 70 72 65 70 61 72 65 28 29 20 68 61 73  e3_prepare() has
7450: 20 62 65 65 6e 20 75 73 65 64 2e 0a 64 6f 5f 74   been used..do_t
7460: 65 73 74 20 63 61 70 69 33 2d 31 38 2e 34 20 7b  est capi3-18.4 {
7470: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7480: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
7490: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63  ERROR}.do_test c
74a0: 61 70 69 33 2d 31 38 2e 35 20 7b 0a 20 20 73 71  api3-18.5 {.  sq
74b0: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
74c0: 54 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  T.  sqlite3_errc
74d0: 6f 64 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45  ode db.} {SQLITE
74e0: 5f 53 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73 74  _SCHEMA}.do_test
74f0: 20 63 61 70 69 33 2d 31 38 2e 36 20 7b 0a 20 20   capi3-18.6 {.  
7500: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64  sqlite3_errmsg d
7510: 62 0a 7d 20 7b 64 61 74 61 62 61 73 65 20 73 63  b.} {database sc
7520: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
7530: 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  }.sqlite3_finali
7540: 7a 65 20 24 53 54 4d 54 0a 0a 23 20 54 69 63 6b  ze $STMT..# Tick
7550: 65 74 20 23 33 31 33 34 2e 20 20 50 72 65 70 61  et #3134.  Prepa
7560: 72 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77  re a statement w
7570: 69 74 68 20 61 6e 20 6e 42 79 74 65 73 20 70 61  ith an nBytes pa
7580: 72 61 6d 65 74 65 72 20 6f 66 20 30 2e 0a 23 20  rameter of 0..# 
7590: 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 77  Make sure this w
75a0: 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 61  orks correctly a
75b0: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 72 65 66 65  nd does not refe
75c0: 72 65 6e 63 65 20 6d 65 6d 6f 72 79 20 6f 75 74  rence memory out
75d0: 20 6f 66 0a 23 20 72 61 6e 67 65 2e 0a 23 0a 64   of.# range..#.d
75e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 39 2e  o_test capi3-19.
75f0: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72  1 {.  sqlite3_pr
7600: 65 70 61 72 65 5f 74 6b 74 33 31 33 34 20 64 62  epare_tkt3134 db
7610: 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 73 20 6f  .} {}..# Tests o
7620: 66 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  f the interface 
7630: 77 68 65 6e 20 6e 6f 20 56 46 53 20 69 73 20 72  when no VFS is r
7640: 65 67 69 73 74 65 72 65 64 2e 0a 23 0a 69 66 20  egistered..#.if 
7650: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74  {![info exists t
7660: 65 73 74 65 72 5f 64 6f 5f 62 69 6e 61 72 79 6c  ester_do_binaryl
7670: 6f 67 5d 7d 20 7b 0a 20 20 64 62 20 63 6c 6f 73  og]} {.  db clos
7680: 65 0a 20 20 76 66 73 5f 75 6e 72 65 67 69 73 74  e.  vfs_unregist
7690: 65 72 5f 61 6c 6c 0a 20 20 64 6f 5f 74 65 73 74  er_all.  do_test
76a0: 20 63 61 70 69 33 2d 32 30 2e 31 20 7b 0a 20 20   capi3-20.1 {.  
76b0: 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20    sqlite3_sleep 
76c0: 31 30 30 0a 20 20 7d 20 7b 30 7d 0a 20 20 76 66  100.  } {0}.  vf
76d0: 73 5f 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c  s_reregister_all
76e0: 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  .}..finish_test.