/ Hex Artifact Content
Login

Artifact 1945a2ba75e3f4c49d5beb8fc092115b6292d471:


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 52 4f 57 7d 0a 63 68 65 63 6b 5f 64  ITE_ROW}.check_d
4180: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d  ata $STMT capi3-
4190: 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20 7b 31  6.3 {INTEGER} {1
41a0: 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74  } {1.0} {1}.do_t
41b0: 65 73 74 20 63 61 70 69 33 2d 36 2e 33 20 7b 0a  est capi3-6.3 {.
41c0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
41d0: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
41e0: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63  TE_OK}.do_test c
41f0: 61 70 69 33 2d 36 2e 34 2d 6d 69 73 75 73 65 20  api3-6.4-misuse 
4200: 7b 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75  {.  db cache flu
4210: 73 68 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  sh.  sqlite3_clo
4220: 73 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45  se $DB.} {SQLITE
4230: 5f 4f 4b 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a 23  _OK}.db close..#
4240: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
4250: 73 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f  sets the value o
4260: 66 20 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61  f the file-forma
4270: 74 20 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e  t in file 'test.
4280: 64 62 27 0a 23 20 74 6f 20 24 6e 65 77 76 61 6c  db'.# to $newval
4290: 2e 20 41 6c 73 6f 2c 20 74 68 65 20 73 63 68 65  . Also, the sche
42a0: 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 69 6e 63  ma cookie is inc
42b0: 72 65 6d 65 6e 74 65 64 2e 0a 23 20 0a 70 72 6f  remented..# .pro
42c0: 63 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61  c set_file_forma
42d0: 74 20 7b 6e 65 77 76 61 6c 7d 20 7b 0a 20 20 68  t {newval} {.  h
42e0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
42f0: 64 62 20 34 34 20 5b 68 65 78 69 6f 5f 72 65 6e  db 44 [hexio_ren
4300: 64 65 72 5f 69 6e 74 33 32 20 24 6e 65 77 76 61  der_int32 $newva
4310: 6c 5d 0a 20 20 73 65 74 20 73 63 68 65 6d 61 63  l].  set schemac
4320: 6f 6f 6b 69 65 20 5b 68 65 78 69 6f 5f 67 65 74  ookie [hexio_get
4330: 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64  _int [hexio_read
4340: 20 74 65 73 74 2e 64 62 20 34 30 20 34 5d 5d 0a   test.db 40 4]].
4350: 20 20 69 6e 63 72 20 73 63 68 65 6d 61 63 6f 6f    incr schemacoo
4360: 6b 69 65 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  kie.  hexio_writ
4370: 65 20 74 65 73 74 2e 64 62 20 34 30 20 5b 68 65  e test.db 40 [he
4380: 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32  xio_render_int32
4390: 20 24 73 63 68 65 6d 61 63 6f 6f 6b 69 65 5d 0a   $schemacookie].
43a0: 20 20 72 65 74 75 72 6e 20 7b 7d 0a 7d 0a 0a 23    return {}.}..#
43b0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
43c0: 72 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75  returns the valu
43d0: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f  e of the file-fo
43e0: 72 6d 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65  rmat in file 'te
43f0: 73 74 2e 64 62 27 2e 0a 23 20 0a 70 72 6f 63 20  st.db'..# .proc 
4400: 67 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20  get_file_format 
4410: 7b 7b 66 6e 61 6d 65 20 74 65 73 74 2e 64 62 7d  {{fname test.db}
4420: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b 68 65  } {.  return [he
4430: 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78  xio_get_int [hex
4440: 69 6f 5f 72 65 61 64 20 24 66 6e 61 6d 65 20 34  io_read $fname 4
4450: 34 20 34 5d 5d 0a 7d 0a 0a 69 66 20 7b 21 5b 73  4 4]].}..if {![s
4460: 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65  qlite3 -has-code
4470: 63 5d 7d 20 7b 0a 20 20 23 20 54 65 73 74 20 77  c]} {.  # Test w
4480: 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65 6e  hat happens when
4490: 20 74 68 65 20 6c 69 62 72 61 72 79 20 65 6e 63   the library enc
44a0: 6f 75 6e 74 65 72 73 20 61 20 6e 65 77 65 72 20  ounters a newer 
44b0: 66 69 6c 65 20 66 6f 72 6d 61 74 2e 0a 20 20 64  file format..  d
44c0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 37 2e 31  o_test capi3-7.1
44d0: 20 7b 0a 20 20 20 20 73 65 74 5f 66 69 6c 65 5f   {.    set_file_
44e0: 66 6f 72 6d 61 74 20 35 0a 20 20 7d 20 7b 7d 0a  format 5.  } {}.
44f0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4500: 37 2e 32 20 7b 0a 20 20 20 20 63 61 74 63 68 20  7.2 {.    catch 
4510: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
4520: 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68  t.db }.    catch
4530: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4540: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4550: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4560: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
4570: 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d  ed file format}}
4580: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69  .  db close.}..i
4590: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
45a0: 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20  s-codec]} {.  # 
45b0: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
45c0: 65 20 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63  e library correc
45d0: 74 6c 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75  tly handles bogu
45e0: 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  s entries in the
45f0: 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74  .  # sqlite_mast
4600: 65 72 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61  er table (schema
4610: 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20   corruption)..  
4620: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
4630: 31 20 7b 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  1 {.    file del
4640: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force 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 69 6c 65 20 64 65 6c 65 74 65 20 2d     file delete -
48b0: 66 6f 72 63 65 20 74 65 73 74 2e 64 62 20 74 65  force test.db te
48c0: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
48d0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
48e0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
48f0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
4900: 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 20  TABLE t1(a);.   
4910: 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62     PRAGMA writab
4920: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20  le_schema=ON;.  
4930: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4940: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 56 41  sqlite_master VA
4950: 4c 55 45 53 28 27 74 61 62 6c 65 27 2c 4e 55 4c  LUES('table',NUL
4960: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  L,NULL,NULL,NULL
4970: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  );.    }.    db 
4980: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b 0a 20 20  close.  } {};.  
4990: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
49a0: 35 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  5 {.    catch { 
49b0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
49c0: 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71  db }.    catchsq
49d0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
49e0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
49f0: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
4a00: 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64   {1 {malformed d
4a10: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
4a20: 3f 29 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ?)}}.  db close.
4a30: 7d 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66  }.file delete -f
4a40: 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 66 69 6c  orce test.db.fil
4a50: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
4a60: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
4a70: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65 6e 67  ..# Test the eng
4a80: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 73 74  lish language st
4a90: 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e 74 73  ring equivalents
4aa0: 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72 72 6f   for sqlite erro
4ab0: 72 20 63 6f 64 65 73 0a 73 65 74 20 63 6f 64 65  r codes.set code
4ac0: 32 65 6e 67 6c 69 73 68 20 5b 6c 69 73 74 20 5c  2english [list \
4ad0: 0a 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20  .SQLITE_OK      
4ae0: 20 20 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72     {not an error
4af0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 52 52 4f 52  } \.SQLITE_ERROR
4b00: 20 20 20 20 20 20 7b 53 51 4c 20 6c 6f 67 69 63        {SQL logic
4b10: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
4b20: 67 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 53 51  g database} \.SQ
4b30: 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20 20 20  LITE_PERM       
4b40: 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69  {access permissi
4b50: 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c  on denied} \.SQL
4b60: 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20 20 7b  ITE_ABORT      {
4b70: 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74  callback request
4b80: 65 64 20 71 75 65 72 79 20 61 62 6f 72 74 7d 20  ed query abort} 
4b90: 5c 0a 53 51 4c 49 54 45 5f 42 55 53 59 20 20 20  \.SQLITE_BUSY   
4ba0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 69 73      {database is
4bb0: 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54   locked} \.SQLIT
4bc0: 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b 64 61  E_LOCKED     {da
4bd0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
4be0: 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45  locked} \.SQLITE
4bf0: 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f 75 74  _NOMEM      {out
4c00: 20 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51   of memory} \.SQ
4c10: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20  LITE_READONLY   
4c20: 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74  {attempt to writ
4c30: 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74  e a readonly dat
4c40: 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  abase} \.SQLITE_
4c50: 49 4e 54 45 52 52 55 50 54 20 20 7b 69 6e 74 65  INTERRUPT  {inte
4c60: 72 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c 49 54  rrupted} \.SQLIT
4c70: 45 5f 49 4f 45 52 52 20 20 20 20 20 20 7b 64 69  E_IOERR      {di
4c80: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a  sk I/O error} \.
4c90: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 20  SQLITE_CORRUPT  
4ca0: 20 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b    {database disk
4cb0: 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72   image is malfor
4cc0: 6d 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 55  med} \.SQLITE_FU
4cd0: 4c 4c 20 20 20 20 20 20 20 7b 64 61 74 61 62 61  LL       {databa
4ce0: 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75  se or disk is fu
4cf0: 6c 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 41 4e  ll} \.SQLITE_CAN
4d00: 54 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c 65 20  TOPEN   {unable 
4d10: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
4d20: 20 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54 45 5f   file} \.SQLITE_
4d30: 45 4d 50 54 59 20 20 20 20 20 20 7b 74 61 62 6c  EMPTY      {tabl
4d40: 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61  e contains no da
4d50: 74 61 7d 20 5c 0a 53 51 4c 49 54 45 5f 53 43 48  ta} \.SQLITE_SCH
4d60: 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62 61 73  EMA     {databas
4d70: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
4d80: 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 43  nged} \.SQLITE_C
4d90: 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e 73 74  ONSTRAINT {const
4da0: 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20 5c 0a  raint failed} \.
4db0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
4dc0: 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d    {datatype mism
4dd0: 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d  atch} \.SQLITE_M
4de0: 49 53 55 53 45 20 20 20 20 20 7b 6c 69 62 72 61  ISUSE     {libra
4df0: 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65  ry routine calle
4e00: 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63  d out of sequenc
4e10: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46  e} \.SQLITE_NOLF
4e20: 53 20 20 20 20 20 20 7b 6c 61 72 67 65 20 66 69  S      {large fi
4e30: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 64 69  le support is di
4e40: 73 61 62 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45  sabled} \.SQLITE
4e50: 5f 41 55 54 48 20 20 20 20 20 20 20 7b 61 75 74  _AUTH       {aut
4e60: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
4e70: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 4f 52 4d  d} \.SQLITE_FORM
4e80: 41 54 20 20 20 20 20 7b 61 75 78 69 6c 69 61 72  AT     {auxiliar
4e90: 79 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  y database forma
4ea0: 74 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  t error} \.SQLIT
4eb0: 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b 62 69  E_RANGE      {bi
4ec0: 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64  nd or column ind
4ed0: 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d  ex out of range}
4ee0: 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42   \.SQLITE_NOTADB
4ef0: 20 20 20 20 20 7b 66 69 6c 65 20 69 73 20 65 6e       {file is en
4f00: 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f  crypted or is no
4f10: 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  t a database} \.
4f20: 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20  unknownerror    
4f30: 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72    {unknown error
4f40: 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f  } \.]..set test_
4f50: 6e 75 6d 62 65 72 20 31 0a 66 6f 72 65 61 63 68  number 1.foreach
4f60: 20 7b 63 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20   {code english} 
4f70: 24 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a  $code2english {.
4f80: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4f90: 39 2e 24 74 65 73 74 5f 6e 75 6d 62 65 72 20 22  9.$test_number "
4fa0: 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72  sqlite3_test_err
4fb0: 73 74 72 20 24 63 6f 64 65 22 20 24 65 6e 67 6c  str $code" $engl
4fc0: 69 73 68 0a 20 20 69 6e 63 72 20 74 65 73 74 5f  ish.  incr test_
4fd0: 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20 54 65 73 74  number.}..# Test
4fe0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
4ff0: 67 65 20 77 68 65 6e 20 61 20 22 72 65 61 6c 22  ge when a "real"
5000: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f   out of memory o
5010: 63 63 75 72 73 2e 0a 69 66 63 61 70 61 62 6c 65  ccurs..ifcapable
5020: 20 6d 65 6d 64 65 62 75 67 20 7b 0a 20 20 64 6f   memdebug {.  do
5030: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 31  _test capi3-10-1
5040: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
5050: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65  b test.db.    se
5060: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t DB [sqlite3_co
5070: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
5080: 20 64 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33   db].    sqlite3
5090: 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 31  _memdebug_fail 1
50a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
50b0: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
50c0: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
50d0: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  r;.    }.  } {1 
50e0: 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d  {out of memory}}
50f0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
5100: 2d 31 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c 69  -10-2 {.    sqli
5110: 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42  te3_errmsg $::DB
5120: 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  .  } {out of mem
5130: 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  ory}.  ifcapable
5140: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64   {utf16} {.    d
5150: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d  o_test capi3-10-
5160: 33 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b  3 {.      utf8 [
5170: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
5180: 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b 6f   $::DB].    } {o
5190: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20  ut of memory}.  
51a0: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  }.  db close.  s
51b0: 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f  qlite3_memdebug_
51c0: 66 61 69 6c 20 2d 31 0a 20 20 64 6f 5f 74 65 73  fail -1.  do_tes
51d0: 74 20 63 61 70 69 33 2d 31 30 2d 34 20 7b 0a 20  t capi3-10-4 {. 
51e0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
51f0: 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 44 42  st.db.    set DB
5200: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
5210: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
5220: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  .    sqlite3_mem
5230: 64 65 62 75 67 5f 66 61 69 6c 20 31 0a 20 20 20  debug_fail 1.   
5240: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5250: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
5260: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68  sqlite_master wh
5270: 65 72 65 20 72 6f 77 69 64 3e 35 3b 0a 20 20 20  ere rowid>5;.   
5280: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f   }.  } {1 {out o
5290: 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f  f memory}}.  do_
52a0: 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 35 20  test capi3-10-5 
52b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
52c0: 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b  rmsg $::DB.  } {
52d0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
52e0: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
52f0: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
5300: 20 63 61 70 69 33 2d 31 30 2d 36 20 7b 0a 20 20   capi3-10-6 {.  
5310: 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65      utf8 [sqlite
5320: 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44 42  3_errmsg16 $::DB
5330: 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66 20  ].    } {out of 
5340: 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64 62  memory}.  }.  db
5350: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
5360: 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 2d  _memdebug_fail -
5370: 31 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  1.}..# The follo
5380: 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70  wing tests - cap
5390: 69 33 2d 31 31 2e 2a 20 2d 20 74 65 73 74 20 74  i3-11.* - test t
53a0: 68 61 74 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20  hat a COMMIT or 
53b0: 52 4f 4c 4c 42 41 43 4b 0a 23 20 73 74 61 74 65  ROLLBACK.# state
53c0: 6d 65 6e 74 20 69 73 73 75 65 64 20 77 68 69 6c  ment issued whil
53d0: 65 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  e there are stil
53e0: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d  l outstanding VM
53f0: 73 20 74 68 61 74 20 61 72 65 20 70 61 72 74 20  s that are part 
5400: 6f 66 0a 23 20 74 68 65 20 74 72 61 6e 73 61 63  of.# the transac
5410: 74 69 6f 6e 20 66 61 69 6c 73 2e 0a 73 71 6c 69  tion fails..sqli
5420: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73  te3 db test.db.s
5430: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
5440: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
5450: 72 20 64 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67  r db].sqlite_reg
5460: 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74  ister_test_funct
5470: 69 6f 6e 20 24 44 42 20 66 75 6e 63 0a 64 6f 5f  ion $DB func.do_
5480: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 20  test capi3-11.1 
5490: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
54a0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
54b0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
54c0: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
54d0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
54e0: 20 27 69 6e 74 27 29 3b 0a 20 20 20 20 49 4e 53   'int');.    INS
54f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
5500: 45 53 28 32 2c 20 27 6e 6f 74 61 74 79 70 65 27  ES(2, 'notatype'
5510: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
5520: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 2e 31  est capi3-11.1.1
5530: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
5540: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
5550: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
5560: 33 2d 31 31 2e 32 20 7b 0a 20 20 73 65 74 20 53  3-11.2 {.  set S
5570: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
5580: 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43 54  pare $DB "SELECT
5590: 20 66 75 6e 63 28 62 2c 20 61 29 20 46 52 4f 4d   func(b, a) FROM
55a0: 20 74 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1" -1 TAIL].  
55b0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
55c0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
55d0: 7d 0a 0a 23 20 41 73 20 6f 66 20 33 2e 36 2e 35  }..# As of 3.6.5
55e0: 20 61 20 43 4f 4d 4d 49 54 20 69 73 20 4f 4b 20   a COMMIT is OK 
55f0: 64 75 72 69 6e 67 20 77 68 69 6c 65 20 61 20 71  during while a q
5600: 75 65 72 79 20 69 73 20 73 74 69 6c 6c 20 72 75  uery is still ru
5610: 6e 6e 69 6e 67 20 2d 0a 23 20 61 73 20 6c 6f 6e  nning -.# as lon
5620: 67 20 61 73 20 69 74 20 69 73 20 61 20 72 65 61  g as it is a rea
5630: 64 2d 6f 6e 6c 79 20 71 75 65 72 79 20 61 6e 64  d-only query and
5640: 20 6e 6f 74 20 61 6e 20 69 6e 63 72 65 6d 65 6e   not an incremen
5650: 74 61 6c 20 42 4c 4f 42 20 77 72 69 74 65 2e 0a  tal BLOB write..
5660: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
5670: 31 31 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68  11.3.1 {.  catch
5680: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5690: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
56a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
56b0: 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.2 {.  sqlite3_
56c0: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
56d0: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f   $DB.} {SQLITE_O
56e0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
56f0: 2d 31 31 2e 33 2e 33 20 7b 0a 20 20 73 71 6c 69  -11.3.3 {.  sqli
5700: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5710: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
5720: 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 34 20  st capi3-11.3.4 
5730: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41  {.  db eval {PRA
5740: 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 7d  GMA lock_status}
5750: 0a 7d 20 7b 6d 61 69 6e 20 73 68 61 72 65 64 20  .} {main shared 
5760: 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f  temp closed}..do
5770: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 34  _test capi3-11.4
5780: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5790: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
57a0: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
57b0: 20 63 61 70 69 33 2d 31 31 2e 35 20 7b 0a 20 20   capi3-11.5 {.  
57c0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
57d0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
57e0: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
57f0: 63 61 70 69 33 2d 31 31 2e 36 20 7b 0a 20 20 63  capi3-11.6 {.  c
5800: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
5810: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
5820: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20    }.} {0 {1 int 
5830: 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f  2 notatype}}.do_
5840: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 37 20  test capi3-11.7 
5850: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
5860: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5870: 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   1.do_test capi3
5880: 2d 31 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  -11.8 {.  execsq
5890: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
58a0: 41 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20  ABLE t2(a);.    
58b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
58c0: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e  ALUES(1);.    IN
58d0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
58e0: 55 45 53 28 32 29 3b 0a 20 20 20 20 42 45 47 49  UES(2);.    BEGI
58f0: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
5900: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 29 3b  TO t2 VALUES(3);
5910: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5920: 74 20 63 61 70 69 33 2d 31 31 2e 38 2e 31 20 7b  t capi3-11.8.1 {
5930: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5940: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5950: 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  0.do_test capi3-
5960: 31 31 2e 39 20 7b 0a 20 20 73 65 74 20 53 54 4d  11.9 {.  set STM
5970: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5980: 72 65 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  re $DB "SELECT a
5990: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
59a0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
59b0: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
59c0: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
59d0: 61 70 69 33 2d 31 31 2e 39 2e 31 20 7b 0a 20 20  api3-11.9.1 {.  
59e0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
59f0: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
5a00: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5a10: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
5a20: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5a30: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f  .  }.} {1 {canno
5a40: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
5a50: 61 63 74 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61  action - SQL sta
5a60: 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
5a70: 65 73 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  ess}}.do_test ca
5a80: 70 69 33 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73  pi3-11.9.3 {.  s
5a90: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5aa0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f  ommit $DB.} 0.do
5ab0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5ac0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  0 {.  sqlite3_st
5ad0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5ae0: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5af0: 63 61 70 69 33 2d 31 31 2e 31 31 20 7b 0a 20 20  capi3-11.11 {.  
5b00: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5b10: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5b20: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5b30: 31 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65  11.12 {.  sqlite
5b40: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
5b50: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f  SQLITE_DONE}.do_
5b60: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 33  test capi3-11.13
5b70: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
5b80: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
5b90: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
5ba0: 74 20 63 61 70 69 33 2d 31 31 2e 31 34 20 7b 0a  t capi3-11.14 {.
5bb0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5bc0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
5bd0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a  ;.  }.} {1 2 3}.
5be0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5bf0: 2e 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  .14.1 {.  sqlite
5c00: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5c10: 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74   $DB.} 0.do_test
5c20: 20 63 61 70 69 33 2d 31 31 2e 31 35 20 7b 0a 20   capi3-11.15 {. 
5c30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5c40: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
5c50: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
5c60: 61 70 69 33 2d 31 31 2e 31 35 2e 31 20 7b 0a 20  api3-11.15.1 {. 
5c70: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5c80: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a  ocommit $DB.} 1.
5c90: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5ca0: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
5cb0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
5cc0: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t2;.  }.} {1
5cd0: 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63 68   2}..# Sanity ch
5ce0: 65 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69 6e  eck on the defin
5cf0: 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74 61  ition of 'outsta
5d00: 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73 20  nding VM'. This 
5d10: 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20 74  means any VM.# t
5d20: 68 61 74 20 68 61 73 20 68 61 64 20 73 71 6c 69  hat has had sqli
5d30: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 65  te3_step() calle
5d40: 64 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79 20  d more recently 
5d50: 74 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e  than sqlite3_fin
5d60: 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71 6c  alize() or.# sql
5d70: 69 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53 6f  ite3_reset(). So
5d80: 20 61 20 56 4d 20 74 68 61 74 20 68 61 73 20 6a   a VM that has j
5d90: 75 73 74 20 62 65 65 6e 20 70 72 65 70 61 72 65  ust been prepare
5da0: 64 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73 20  d or reset does 
5db0: 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20 61  not.# count as a
5dc0: 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f 5f  n active VM..do_
5dd0: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 37  test capi3-11.17
5de0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5df0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20     BEGIN;.  }.} 
5e00: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5e10: 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20 53  -11.18 {.  set S
5e20: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
5e30: 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43 54  pare $DB "SELECT
5e40: 20 61 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54   a FROM t1" -1 T
5e50: 41 49 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  AIL].  catchsql 
5e60: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
5e70: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5e80: 73 74 20 63 61 70 69 33 2d 31 31 2e 31 39 20 7b  st capi3-11.19 {
5e90: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5ea0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5eb0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5ec0: 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20 63 61 74  i3-11.20 {.  cat
5ed0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
5ee0: 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  N;.    COMMIT;. 
5ef0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5f00: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32 30 20  est capi3-11.20 
5f10: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  {.  sqlite3_rese
5f20: 74 20 24 53 54 4d 54 0a 20 20 63 61 74 63 68 73  t $STMT.  catchs
5f30: 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ql {.    COMMIT;
5f40: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f  .  }.} {1 {canno
5f50: 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
5f60: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
5f70: 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  ive}}.do_test ca
5f80: 70 69 33 2d 31 31 2e 32 31 20 7b 0a 20 20 73 71  pi3-11.21 {.  sq
5f90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
5fa0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  STMT.} {SQLITE_O
5fb0: 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  K}..# The follow
5fc0: 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70 69  ing tests - capi
5fd0: 33 2d 31 32 2e 2a 20 2d 20 63 68 65 63 6b 20 74  3-12.* - check t
5fe0: 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20 73 74  hat its Ok to st
5ff0: 61 72 74 20 61 0a 23 20 74 72 61 6e 73 61 63 74  art a.# transact
6000: 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68 65 72 20  ion while other 
6010: 56 4d 73 20 61 72 65 20 61 63 74 69 76 65 2c 20  VMs are active, 
6020: 61 6e 64 20 74 68 61 74 20 69 74 73 20 4f 6b 20  and that its Ok 
6030: 74 6f 20 65 78 65 63 75 74 65 0a 23 20 61 74 6f  to execute.# ato
6040: 6d 69 63 20 75 70 64 61 74 65 73 20 69 6e 20 74  mic updates in t
6050: 68 65 20 73 61 6d 65 20 73 69 74 75 61 74 69 6f  he same situatio
6060: 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  n .#.do_test cap
6070: 69 33 2d 31 32 2e 31 20 7b 0a 20 20 73 65 74 20  i3-12.1 {.  set 
6080: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6090: 65 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43  epare $DB "SELEC
60a0: 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20  T a FROM t2" -1 
60b0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
60c0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
60d0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
60e0: 74 20 63 61 70 69 33 2d 31 32 2e 32 20 7b 0a 20  t capi3-12.2 {. 
60f0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
6100: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
6110: 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a  ALUES(3, NULL);.
6120: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
6130: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 33 20  test capi3-12.3 
6140: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
6150: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6160: 32 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d  2 VALUES(4);.  }
6170: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
6180: 74 20 63 61 70 69 33 2d 31 32 2e 34 20 7b 0a 20  t capi3-12.4 {. 
6190: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
61a0: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
61b0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
61c0: 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  (4, NULL);.  }.}
61d0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
61e0: 63 61 70 69 33 2d 31 32 2e 35 20 7b 0a 20 20 73  capi3-12.5 {.  s
61f0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6200: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
6210: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6220: 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  2.5.1 {.  sqlite
6230: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
6240: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
6250: 65 73 74 20 63 61 70 69 33 2d 31 32 2e 36 20 7b  est capi3-12.6 {
6260: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6270: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
6280: 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61  DONE}.do_test ca
6290: 70 69 33 2d 31 32 2e 37 20 7b 0a 20 20 73 71 6c  pi3-12.7 {.  sql
62a0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
62b0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
62c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
62d0: 31 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.8 {.  execsql
62e0: 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20   {.    COMMIT;. 
62f0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
6300: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t1;.  }.} {1 2 
6310: 33 20 34 7d 0a 0a 23 20 54 65 73 74 20 63 61 73  3 4}..# Test cas
6320: 65 73 20 63 61 70 69 33 2d 31 33 2e 2a 20 74 65  es capi3-13.* te
6330: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  st the sqlite3_c
6340: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 29 20  lear_bindings() 
6350: 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 33 5f 73  and .# sqlite3_s
6360: 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a 69 66 20  leep APIs..#.if 
6370: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info 
6380: 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33  commands sqlite3
6390: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 5d  _clear_bindings]
63a0: 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ]>0} {.  do_test
63b0: 20 63 61 70 69 33 2d 31 33 2e 31 20 7b 0a 20 20   capi3-13.1 {.  
63c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
63d0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
63e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ;.    }.    set 
63f0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6400: 65 70 61 72 65 20 24 44 42 20 22 49 4e 53 45 52  epare $DB "INSER
6410: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6420: 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41 49 4c 5d  (?, ?)" -1 TAIL]
6430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
6440: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
6450: 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ITE_DONE}.  do_t
6460: 65 73 74 20 63 61 70 69 33 2d 31 33 2e 32 20 7b  est capi3-13.2 {
6470: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
6480: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
6490: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24  ite3_bind_text $
64a0: 53 54 4d 54 20 31 20 68 65 6c 6c 6f 20 35 0a 20  STMT 1 hello 5. 
64b0: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
64c0: 74 65 78 74 20 24 53 54 4d 54 20 32 20 77 6f 72  text $STMT 2 wor
64d0: 6c 64 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33  ld 5.    sqlite3
64e0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20  _step $STMT.  } 
64f0: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20  {SQLITE_DONE}.  
6500: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33  do_test capi3-13
6510: 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .3 {.    sqlite3
6520: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20  _reset $STMT.   
6530: 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62   sqlite3_clear_b
6540: 69 6e 64 69 6e 67 73 20 24 53 54 4d 54 0a 20 20  indings $STMT.  
6550: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6560: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
6570: 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74  _DONE}.  do_test
6580: 20 63 61 70 69 33 2d 31 33 2d 34 20 7b 0a 20 20   capi3-13-4 {.  
6590: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
65a0: 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 65 78 65  ze $STMT.    exe
65b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
65c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
65d0: 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20     }.  } {{} {} 
65e0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b  hello world {} {
65f0: 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74  }}.}.if {[llengt
6600: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73  h [info commands
6610: 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d   sqlite3_sleep]]
6620: 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  >0} {.  do_test 
6630: 63 61 70 69 33 2d 31 33 2d 35 20 7b 0a 20 20 20  capi3-13-5 {.   
6640: 20 73 65 74 20 6d 73 20 5b 73 71 6c 69 74 65 33   set ms [sqlite3
6650: 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20 20 20 65  _sleep 80].    e
6660: 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20  xpr {$ms==80 || 
6670: 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20 7b  $ms==1000}.  } {
6680: 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23  1}.}..# Ticket #
6690: 31 32 31 39 3a 20 20 4d 61 6b 65 20 73 75 72 65  1219:  Make sure
66a0: 20 62 69 6e 64 69 6e 67 20 41 50 49 73 20 63 61   binding APIs ca
66b0: 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c 20  n handle a NULL 
66c0: 70 6f 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74 65  pointer..#.do_te
66d0: 73 74 20 63 61 70 69 33 2d 31 34 2e 31 2d 6d 69  st capi3-14.1-mi
66e0: 73 75 73 65 20 7b 0a 20 20 73 65 74 20 72 63 20  suse {.  set rc 
66f0: 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f  [catch {sqlite3_
6700: 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20 68 65  bind_text 0 1 he
6710: 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20 6c 61  llo 5} msg].  la
6720: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20  ppend rc $msg.} 
6730: 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  {1 SQLITE_MISUSE
6740: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 36 35  }..# Ticket #165
6750: 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65 20 6e 42  0:  Honor the nB
6760: 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20 74  ytes parameter t
6770: 6f 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  o sqlite3_prepar
6780: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  e..#.do_test cap
6790: 69 33 2d 31 35 2e 31 20 7b 0a 20 20 73 65 74 20  i3-15.1 {.  set 
67a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
67b0: 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20 6e 62 79  OM t2}.  set nby
67c0: 74 65 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  tes [string leng
67d0: 74 68 20 24 73 71 6c 5d 0a 20 20 61 70 70 65 6e  th $sql].  appen
67e0: 64 20 73 71 6c 20 7b 20 57 48 45 52 45 20 61 3d  d sql { WHERE a=
67f0: 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  =1}.  set STMT [
6800: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
6810: 24 44 42 20 24 73 71 6c 20 24 6e 62 79 74 65 73  $DB $sql $nbytes
6820: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6830: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71  _step $STMT.  sq
6840: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6850: 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64   $STMT 0.} {1}.d
6860: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e  o_test capi3-15.
6870: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6880: 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  ep $STMT.  sqlit
6890: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
68a0: 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  TMT 0.} {2}.do_t
68b0: 65 73 74 20 63 61 70 69 33 2d 31 35 2e 33 20 7b  est capi3-15.3 {
68c0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
68d0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  ize $STMT.} {SQL
68e0: 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20  ITE_OK}.do_test 
68f0: 63 61 70 69 33 2d 31 35 2e 34 20 7b 0a 20 20 23  capi3-15.4 {.  #
6900: 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38          12345678
6910: 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20  9 1234567.  set 
6920: 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 33 34  sql {SELECT 1234
6930: 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54  567890}.  set ST
6940: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6950: 61 72 65 20 24 44 42 20 24 73 71 6c 20 38 20 54  are $DB $sql 8 T
6960: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  AIL].  sqlite3_s
6970: 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74 20  tep $STMT.  set 
6980: 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  v1 [sqlite3_colu
6990: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 5d 0a  mn_int $STMT 0].
69a0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
69b0: 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76  ze $STMT.  set v
69c0: 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  1.} {1}.do_test 
69d0: 63 61 70 69 33 2d 31 35 2e 35 20 7b 0a 20 20 23  capi3-15.5 {.  #
69e0: 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38          12345678
69f0: 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20  9 1234567.  set 
6a00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 33 34  sql {SELECT 1234
6a10: 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54  567890}.  set ST
6a20: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6a30: 61 72 65 20 24 44 42 20 24 73 71 6c 20 39 20 54  are $DB $sql 9 T
6a40: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  AIL].  sqlite3_s
6a50: 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74 20  tep $STMT.  set 
6a60: 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  v1 [sqlite3_colu
6a70: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 5d 0a  mn_int $STMT 0].
6a80: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6a90: 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76  ze $STMT.  set v
6aa0: 31 0a 7d 20 7b 31 32 7d 0a 64 6f 5f 74 65 73 74  1.} {12}.do_test
6ab0: 20 63 61 70 69 33 2d 31 35 2e 36 20 7b 0a 20 20   capi3-15.6 {.  
6ac0: 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37  #        1234567
6ad0: 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65 74  89 1234567.  set
6ae0: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 33   sql {SELECT 123
6af0: 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53  4567890}.  set S
6b00: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
6b10: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 31 32  pare $DB $sql 12
6b20: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6b30: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65  _step $STMT.  se
6b40: 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t v1 [sqlite3_co
6b50: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6b60: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6b70: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
6b80: 20 76 31 0a 7d 20 7b 31 32 33 34 35 7d 0a 64 6f   v1.} {12345}.do
6b90: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 37  _test capi3-15.7
6ba0: 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31 32   {.  #        12
6bb0: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 0a  3456789 1234567.
6bc0: 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43    set sql {SELEC
6bd0: 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d 0a 20  T 12.34567890}. 
6be0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6bf0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
6c00: 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a 20 20 73  sql 12 TAIL].  s
6c10: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6c20: 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c 69  T.  set v1 [sqli
6c30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
6c40: 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c  e $STMT 0].  sql
6c50: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
6c60: 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b  TMT.  set v1.} {
6c70: 31 32 2e 33 34 7d 0a 64 6f 5f 74 65 73 74 20 63  12.34}.do_test c
6c80: 61 70 69 33 2d 31 35 2e 38 20 7b 0a 20 20 23 20  api3-15.8 {.  # 
6c90: 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 39         123456789
6ca0: 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20 73   1234567.  set s
6cb0: 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 2e 33 34  ql {SELECT 12.34
6cc0: 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54  567890}.  set ST
6cd0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6ce0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 31 34 20  are $DB $sql 14 
6cf0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6d00: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74  step $STMT.  set
6d10: 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   v1 [sqlite3_col
6d20: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
6d30: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
6d40: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6d50: 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33 34 35 36  et v1.} {12.3456
6d60: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 63  }..# Make sure c
6d70: 6f 64 65 20 69 73 20 61 6c 77 61 79 73 20 67 65  ode is always ge
6d80: 6e 65 72 61 74 65 64 20 65 76 65 6e 20 69 66 20  nerated even if 
6d90: 61 6e 20 49 46 20 45 58 49 53 54 53 20 6f 72 20  an IF EXISTS or 
6da0: 0a 23 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  .# IF NOT EXISTS
6db0: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
6dc0: 6e 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  nt that the tabl
6dd0: 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72 0a 23 20  e does not or.# 
6de0: 64 6f 65 73 20 65 78 69 73 74 73 2e 20 20 54 68  does exists.  Th
6df0: 61 74 20 77 61 79 20 77 65 20 77 69 6c 6c 20 61  at way we will a
6e00: 6c 77 61 79 73 20 68 61 76 65 20 61 20 70 72 65  lways have a pre
6e10: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
6e20: 23 20 74 6f 20 65 78 70 69 72 65 20 77 68 65 6e  # to expire when
6e30: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
6e40: 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ges..#.do_test c
6e50: 61 70 69 33 2d 31 36 2e 31 20 7b 0a 20 20 73 65  api3-16.1 {.  se
6e60: 74 20 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  t sql {DROP TABL
6e70: 45 20 49 46 20 45 58 49 53 54 53 20 74 33 7d 0a  E IF EXISTS t3}.
6e80: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6e90: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
6ea0: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6eb0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6ec0: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6ed0: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
6ee0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36  do_test capi3-16
6ef0: 2e 32 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b  .2 {.  set sql {
6f00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
6f10: 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28 78 2c  NOT EXISTS t1(x,
6f20: 79 29 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  y)}.  set STMT [
6f30: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
6f40: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
6f50: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6f60: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
6f70: 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20  r {$STMT!=""}.} 
6f80: 7b 31 7d 0a 0a 23 20 42 75 74 20 73 74 69 6c 6c  {1}..# But still
6f90: 20 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e 65 72   we do not gener
6fa0: 61 74 65 20 63 6f 64 65 20 69 66 20 74 68 65 72  ate code if ther
6fb0: 65 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f  e is no SQL.#.do
6fc0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36 2e 33  _test capi3-16.3
6fd0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
6fe0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
6ff0: 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  DB {} -1 TAIL]. 
7000: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7010: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
7020: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
7030: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
7040: 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  6.4 {.  set STMT
7050: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7060: 65 20 24 44 42 20 7b 3b 7d 20 2d 31 20 54 41 49  e $DB {;} -1 TAI
7070: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  L].  sqlite3_fin
7080: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78  alize $STMT.  ex
7090: 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d  pr {$STMT==""}.}
70a0: 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23   {1}..# Ticket #
70b0: 32 34 32 36 3a 20 20 4d 69 73 75 73 65 20 6f 66  2426:  Misuse of
70c0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
70d0: 2a 20 62 79 20 63 61 6c 6c 69 6e 67 20 69 74 20  * by calling it 
70e0: 61 66 74 65 72 0a 23 20 61 20 73 71 6c 69 74 65  after.# a sqlite
70f0: 33 5f 72 65 73 65 74 20 73 68 6f 75 6c 64 20 62  3_reset should b
7100: 65 20 68 61 72 6d 6c 65 73 73 2e 0a 23 0a 64 6f  e harmless..#.do
7110: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37 2e 31  _test capi3-17.1
7120: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7130: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
7140: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7150: 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2} -1 TAIL]. 
7160: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7170: 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  TMT.  sqlite3_co
7180: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
7190: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {1}.do_test c
71a0: 61 70 69 33 2d 31 37 2e 32 20 7b 0a 20 20 73 71  api3-17.2 {.  sq
71b0: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
71c0: 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  T.  sqlite3_colu
71d0: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
71e0: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {0}.do_test cap
71f0: 69 33 2d 31 37 2e 33 20 7b 0a 20 20 73 71 6c 69  i3-17.3 {.  sqli
7200: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
7210: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
7220: 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20  ..# Verify that 
7230: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 66  sqlite3_step() f
7240: 61 69 6c 73 20 77 69 74 68 20 61 6e 20 53 51 4c  ails with an SQL
7250: 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72  ITE_SCHEMA error
7260: 0a 23 20 77 68 65 6e 20 74 68 65 20 73 74 61 74  .# when the stat
7270: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
7280: 64 20 77 69 74 68 20 73 71 6c 69 74 65 33 5f 70  d with sqlite3_p
7290: 72 65 70 61 72 65 28 29 20 28 6e 6f 74 0a 23 20  repare() (not.# 
72a0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
72b0: 76 32 28 29 29 20 61 6e 64 20 74 68 65 20 73 63  v2()) and the sc
72c0: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
72d0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
72e0: 33 2d 31 38 2e 31 20 7b 0a 20 20 73 65 74 20 53  3-18.1 {.  set S
72f0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7300: 70 61 72 65 20 64 62 20 7b 53 45 4c 45 43 54 20  pare db {SELECT 
7310: 2a 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20 54 41  * FROM t2} -1 TA
7320: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 20 64 62  IL].  sqlite3 db
7330: 32 20 74 65 73 74 2e 64 62 0a 20 20 64 62 32 20  2 test.db.  db2 
7340: 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41 42  eval {CREATE TAB
7350: 4c 45 20 74 33 28 78 29 7d 0a 20 20 64 62 32 20  LE t3(x)}.  db2 
7360: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
7370: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
7380: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
7390: 65 73 74 20 63 61 70 69 33 2d 31 38 2e 32 20 7b  est capi3-18.2 {
73a0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
73b0: 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33   $STMT.  sqlite3
73c0: 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20 7b 53  _errcode db.} {S
73d0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 64 6f  QLITE_SCHEMA}.do
73e0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 33  _test capi3-18.3
73f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
7400: 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61 62 61  msg db.} {databa
7410: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
7420: 61 6e 67 65 64 7d 0a 23 20 54 68 65 20 65 72 72  anged}.# The err
7430: 6f 72 20 70 65 72 73 69 73 74 20 6f 6e 20 72 65  or persist on re
7440: 74 72 79 20 77 68 65 6e 20 73 71 6c 69 74 65 33  try when sqlite3
7450: 5f 70 72 65 70 61 72 65 28 29 20 68 61 73 20 62  _prepare() has b
7460: 65 65 6e 20 75 73 65 64 2e 0a 64 6f 5f 74 65 73  een used..do_tes
7470: 74 20 63 61 70 69 33 2d 31 38 2e 34 20 7b 0a 20  t capi3-18.4 {. 
7480: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7490: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52  TMT.} {SQLITE_ER
74a0: 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROR}.do_test cap
74b0: 69 33 2d 31 38 2e 35 20 7b 0a 20 20 73 71 6c 69  i3-18.5 {.  sqli
74c0: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
74d0: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64    sqlite3_errcod
74e0: 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45 5f 53  e db.} {SQLITE_S
74f0: 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73 74 20 63  CHEMA}.do_test c
7500: 61 70 69 33 2d 31 38 2e 36 20 7b 0a 20 20 73 71  api3-18.6 {.  sq
7510: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 0a  lite3_errmsg db.
7520: 7d 20 7b 64 61 74 61 62 61 73 65 20 73 63 68 65  } {database sche
7530: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d 0a  ma has changed}.
7540: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7550: 20 24 53 54 4d 54 0a 0a 23 20 54 69 63 6b 65 74   $STMT..# Ticket
7560: 20 23 33 31 33 34 2e 20 20 50 72 65 70 61 72 65   #3134.  Prepare
7570: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74   a statement wit
7580: 68 20 61 6e 20 6e 42 79 74 65 73 20 70 61 72 61  h an nBytes para
7590: 6d 65 74 65 72 20 6f 66 20 30 2e 0a 23 20 4d 61  meter of 0..# Ma
75a0: 6b 65 20 73 75 72 65 20 74 68 69 73 20 77 6f 72  ke sure this wor
75b0: 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 61 6e 64  ks correctly and
75c0: 20 64 6f 65 73 20 6e 6f 74 20 72 65 66 65 72 65   does not refere
75d0: 6e 63 65 20 6d 65 6d 6f 72 79 20 6f 75 74 20 6f  nce memory out o
75e0: 66 0a 23 20 72 61 6e 67 65 2e 0a 23 0a 64 6f 5f  f.# range..#.do_
75f0: 74 65 73 74 20 63 61 70 69 33 2d 31 39 2e 31 20  test capi3-19.1 
7600: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70  {.  sqlite3_prep
7610: 61 72 65 5f 74 6b 74 33 31 33 34 20 64 62 0a 7d  are_tkt3134 db.}
7620: 20 7b 7d 0a 0a 23 20 54 65 73 74 73 20 6f 66 20   {}..# Tests of 
7630: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 77 68  the interface wh
7640: 65 6e 20 6e 6f 20 56 46 53 20 69 73 20 72 65 67  en no VFS is reg
7650: 69 73 74 65 72 65 64 2e 0a 23 0a 69 66 20 7b 21  istered..#.if {!
7660: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 65 73  [info exists tes
7670: 74 65 72 5f 64 6f 5f 62 69 6e 61 72 79 6c 6f 67  ter_do_binarylog
7680: 5d 7d 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ]} {.  db close.
7690: 20 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72    vfs_unregister
76a0: 5f 61 6c 6c 0a 20 20 64 6f 5f 74 65 73 74 20 63  _all.  do_test c
76b0: 61 70 69 33 2d 32 30 2e 31 20 7b 0a 20 20 20 20  api3-20.1 {.    
76c0: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 31 30  sqlite3_sleep 10
76d0: 30 0a 20 20 7d 20 7b 30 7d 0a 20 20 76 66 73 5f  0.  } {0}.  vfs_
76e0: 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 7d  reregister_all.}
76f0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.