/ Hex Artifact Content
Login

Artifact 5c1ea6c940f2d7c4d5af8ef1ec2f92a267d2e37a:


0000: 23 20 32 30 30 33 20 4a 61 6e 75 61 72 79 20 32  # 2003 January 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 63 61 6c 6c  testing the call
01d0: 62 61 63 6b 2d 66 72 65 65 20 43 2f 43 2b 2b 20  back-free C/C++ 
01e0: 41 50 49 2e 0a 23 0a 23 20 24 49 64 3a 20 63 61  API..#.# $Id: ca
01f0: 70 69 33 2e 74 65 73 74 2c 76 20 31 2e 37 30 20  pi3.test,v 1.70 
0200: 32 30 30 39 2f 30 31 2f 30 39 20 30 32 3a 34 39  2009/01/09 02:49
0210: 3a 33 32 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :32 drh Exp $.#.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63 6f   Do not use a co
0270: 64 65 63 20 66 6f 72 20 74 65 73 74 73 20 69 6e  dec for tests in
0280: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20 74   this file, as t
0290: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
02a0: 20 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74 65   is.# manipulate
02b0: 64 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e 67  d directly using
02c0: 20 74 63 6c 20 73 63 72 69 70 74 73 20 28 75 73   tcl scripts (us
02d0: 69 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f 77  ing the [hexio_w
02e0: 72 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0a  rite] command)..
02f0: 23 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f 64  #.do_not_use_cod
0300: 65 63 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65  ec..# Return the
0310: 20 55 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e   UTF-16 represen
0320: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75  tation of the su
0330: 70 70 6c 69 65 64 20 55 54 46 2d 38 20 73 74 72  pplied UTF-8 str
0340: 69 6e 67 20 24 73 74 72 2e 0a 23 20 49 66 20 24  ing $str..# If $
0350: 6e 74 20 69 73 20 74 72 75 65 2c 20 61 70 70 65  nt is true, appe
0360: 6e 64 20 74 77 6f 20 30 78 30 30 20 62 79 74 65  nd two 0x00 byte
0370: 73 20 61 73 20 61 20 6e 75 6c 20 74 65 72 6d 69  s as a nul termi
0380: 6e 61 74 6f 72 2e 0a 70 72 6f 63 20 75 74 66 31  nator..proc utf1
0390: 36 20 7b 73 74 72 20 7b 6e 74 20 31 7d 7d 20 7b  6 {str {nt 1}} {
03a0: 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69  .  set r [encodi
03b0: 6e 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69  ng convertto uni
03c0: 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 69 66 20  code $str].  if 
03d0: 7b 24 6e 74 7d 20 7b 0a 20 20 20 20 61 70 70 65  {$nt} {.    appe
03e0: 6e 64 20 72 20 22 5c 78 30 30 5c 78 30 30 22 0a  nd r "\x00\x00".
03f0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a    }.  return $r.
0400: 7d 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65 20  }..# Return the 
0410: 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74 61  UTF-8 representa
0420: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 70 70  tion of the supp
0430: 6c 69 65 64 20 55 54 46 2d 31 36 20 73 74 72 69  lied UTF-16 stri
0440: 6e 67 20 24 73 74 72 2e 20 0a 70 72 6f 63 20 75  ng $str. .proc u
0450: 74 66 38 20 7b 73 74 72 7d 20 7b 0a 20 20 23 20  tf8 {str} {.  # 
0460: 49 66 20 24 73 74 72 20 65 6e 64 73 20 69 6e 20  If $str ends in 
0470: 74 77 6f 20 30 78 30 30 20 30 78 30 30 20 62 79  two 0x00 0x00 by
0480: 74 65 73 2c 20 6b 6e 6f 63 6b 20 74 68 65 73 65  tes, knock these
0490: 20 6f 66 66 20 62 65 66 6f 72 65 0a 20 20 23 20   off before.  # 
04a0: 63 6f 6e 76 65 72 74 69 6e 67 20 74 6f 20 55 54  converting to UT
04b0: 46 2d 38 20 75 73 69 6e 67 20 54 43 4c 2e 0a 20  F-8 using TCL.. 
04c0: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 73 74   binary scan $st
04d0: 72 20 5c 63 2a 20 76 61 6c 73 0a 20 20 69 66 20  r \c* vals.  if 
04e0: 7b 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65  {[lindex $vals e
04f0: 6e 64 5d 3d 3d 30 20 26 26 20 5b 6c 69 6e 64 65  nd]==0 && [linde
0500: 78 20 24 76 61 6c 73 20 65 6e 64 2d 31 5d 3d 3d  x $vals end-1]==
0510: 30 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 74 72  0} {.    set str
0520: 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20   [binary format 
0530: 5c 63 2a 20 5b 6c 72 61 6e 67 65 20 24 76 61 6c  \c* [lrange $val
0540: 73 20 30 20 65 6e 64 2d 32 5d 5d 0a 20 20 7d 0a  s 0 end-2]].  }.
0550: 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64 69  .  set r [encodi
0560: 6e 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75  ng convertfrom u
0570: 6e 69 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 72  nicode $str].  r
0580: 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 68  eturn $r.}..# Th
0590: 65 73 65 20 74 65 73 74 73 20 63 6f 6d 70 6c 65  ese tests comple
05a0: 6d 65 6e 74 20 74 68 6f 73 65 20 69 6e 20 63 61  ment those in ca
05b0: 70 69 32 2e 74 65 73 74 2e 20 54 68 65 79 20 61  pi2.test. They a
05c0: 72 65 20 6f 72 67 61 6e 69 7a 65 64 0a 23 20 61  re organized.# a
05d0: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63  s follows:.#.# c
05e0: 61 70 69 33 2d 31 2e 2a 3a 20 54 65 73 74 20 73  api3-1.*: Test s
05f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 0a  qlite3_prepare .
0600: 23 20 63 61 70 69 33 2d 32 2e 2a 3a 20 54 65 73  # capi3-2.*: Tes
0610: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
0620: 65 31 36 0a 23 20 63 61 70 69 33 2d 33 2e 2a 3a  e16.# capi3-3.*:
0630: 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f 6f 70   Test sqlite3_op
0640: 65 6e 0a 23 20 63 61 70 69 33 2d 34 2e 2a 3a 20  en.# capi3-4.*: 
0650: 54 65 73 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  Test sqlite3_ope
0660: 6e 31 36 0a 23 20 63 61 70 69 33 2d 35 2e 2a 3a  n16.# capi3-5.*:
0670: 20 54 65 73 74 20 74 68 65 20 76 61 72 69 6f 75   Test the variou
0680: 73 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s sqlite3_result
0690: 5f 2a 20 41 50 49 73 0a 23 20 63 61 70 69 33 2d  _* APIs.# capi3-
06a0: 36 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 73  6.*: Test that s
06b0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 66 61 69  qlite3_close fai
06c0: 6c 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ls if there are 
06d0: 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 2e  outstanding VMs.
06e0: 0a 23 0a 0a 73 65 74 20 44 42 20 5b 73 71 6c 69  .#..set DB [sqli
06f0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
0700: 6f 69 6e 74 65 72 20 64 62 5d 0a 0a 64 6f 5f 74  ointer db]..do_t
0710: 65 73 74 20 63 61 70 69 33 2d 31 2e 30 20 7b 0a  est capi3-1.0 {.
0720: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
0730: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
0740: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
0750: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
0760: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0770: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6e 61 6d   $DB {SELECT nam
0780: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
0790: 73 74 65 72 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  ster} -1 TAIL]. 
07a0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
07b0: 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41  e $STMT.  set TA
07c0: 49 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  IL.} {}.do_test 
07d0: 63 61 70 69 33 2d 31 2e 32 2e 31 20 7b 0a 20 20  capi3-1.2.1 {.  
07e0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
07f0: 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  $DB.} {SQLITE_OK
0800: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
0810: 31 2e 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  1.2.2 {.  sqlite
0820: 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
0830: 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45  de $DB.} {SQLITE
0840: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
0850: 69 33 2d 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74  i3-1.3 {.  sqlit
0860: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
0870: 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64  {not an error}.d
0880: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 34  o_test capi3-1.4
0890: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
08a0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
08b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
08c0: 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54  ECT 10}.  set ST
08d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
08e0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20  are $DB $sql -1 
08f0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
0900: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
0910: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45 4c   set TAIL.} {SEL
0920: 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  ECT 10}.do_test 
0930: 63 61 70 69 33 2d 31 2e 35 20 7b 0a 20 20 73 65  capi3-1.5 {.  se
0940: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  t sql {SELECT na
0950: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0960: 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d  aster;SELECT 10}
0970: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
0980: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
0990: 20 24 73 71 6c 20 5b 73 74 72 69 6e 67 20 6c 65   $sql [string le
09a0: 6e 67 74 68 20 24 73 71 6c 5d 20 54 41 49 4c 5d  ngth $sql] TAIL]
09b0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
09c0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20  ize $STMT.  set 
09d0: 54 41 49 4c 0a 7d 20 7b 53 45 4c 45 43 54 20 31  TAIL.} {SELECT 1
09e0: 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  0}.do_test capi3
09f0: 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.6 {.  set sql
0a00: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0a10: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0a20: 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20 73 65  ;SELECT 10}.  se
0a30: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0a40: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
0a50: 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c   [expr [string l
0a60: 65 6e 67 74 68 20 24 73 71 6c 5d 2b 31 5d 20 54  ength $sql]+1] T
0a70: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
0a80: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
0a90: 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53 45 4c 45  set TAIL.} {SELE
0aa0: 43 54 20 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20  CT 10}..do_test 
0ab0: 63 61 70 69 33 2d 31 2e 37 20 7b 0a 20 20 73 65  capi3-1.7 {.  se
0ac0: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  t sql {SELECT na
0ad0: 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  mex FROM sqlite_
0ae0: 6d 61 73 74 65 72 7d 0a 20 20 63 61 74 63 68 20  master}.  catch 
0af0: 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  {.    set STMT [
0b00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
0b10: 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c  $DB $sql -1 TAIL
0b20: 5d 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ].  }.} {1}.do_t
0b30: 65 73 74 20 63 61 70 69 33 2d 31 2e 38 2e 31 20  est capi3-1.8.1 
0b40: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  {.  sqlite3_errc
0b50: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
0b60: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
0b70: 20 63 61 70 69 33 2d 31 2e 38 2e 32 20 7b 0a 20   capi3-1.8.2 {. 
0b80: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0b90: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0ba0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
0bb0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 39  o_test capi3-1.9
0bc0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
0bd0: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
0be0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0bf0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  }..ifcapable {ut
0c00: 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  f16} {.  do_test
0c10: 20 63 61 70 69 33 2d 32 2e 31 20 7b 0a 20 20 20   capi3-2.1 {.   
0c20: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
0c30: 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  6 {SELECT name F
0c40: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0c50: 72 7d 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54  r}].    set STMT
0c60: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0c70: 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20 2d  e16 $DB $sql16 -
0c80: 31 20 3a 3a 54 41 49 4c 5d 0a 20 20 20 20 73 71  1 ::TAIL].    sq
0c90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0ca0: 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24 3a  STMT.    utf8 $:
0cb0: 3a 54 41 49 4c 0a 20 20 7d 20 7b 7d 0a 20 20 64  :TAIL.  } {}.  d
0cc0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 32  o_test capi3-2.2
0cd0: 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 20 5b   {.    set sql [
0ce0: 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61  utf16 {SELECT na
0cf0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0d00: 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d  aster;SELECT 10}
0d10: 5d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  ].    set STMT [
0d20: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
0d30: 36 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  6 $DB $sql -1 TA
0d40: 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  IL].    sqlite3_
0d50: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
0d60: 20 20 20 75 74 66 38 20 24 54 41 49 4c 0a 20 20     utf8 $TAIL.  
0d70: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 20 20  } {SELECT 10}.  
0d80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0d90: 33 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 20  3 {.    set sql 
0da0: 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e  [utf16 {SELECT n
0db0: 61 6d 65 78 20 46 52 4f 4d 20 73 71 6c 69 74 65  amex FROM sqlite
0dc0: 5f 6d 61 73 74 65 72 7d 5d 0a 20 20 20 20 63 61  _master}].    ca
0dd0: 74 63 68 20 7b 0a 20 20 20 20 20 20 73 65 74 20  tch {.      set 
0de0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
0df0: 65 70 61 72 65 31 36 20 24 44 42 20 24 73 71 6c  epare16 $DB $sql
0e00: 20 2d 31 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   -1].    }.  } {
0e10: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  1}.  do_test cap
0e20: 69 33 2d 32 2e 34 2e 31 20 7b 0a 20 20 20 20 73  i3-2.4.1 {.    s
0e30: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24  qlite3_errcode $
0e40: 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45  DB.  } {SQLITE_E
0e50: 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RROR}.  do_test 
0e60: 63 61 70 69 33 2d 32 2e 34 2e 32 20 7b 0a 20 20  capi3-2.4.2 {.  
0e70: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
0e80: 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20  ed_errcode $DB. 
0e90: 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52   } {SQLITE_ERROR
0ea0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
0eb0: 33 2d 32 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69  3-2.5 {.    sqli
0ec0: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 20  te3_errmsg $DB. 
0ed0: 20 7d 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75   } {no such colu
0ee0: 6d 6e 3a 20 6e 61 6d 65 78 7d 0a 0a 20 20 69 66  mn: namex}..  if
0ef0: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
0f00: 72 61 67 6d 61 73 20 7b 0a 20 20 20 20 64 6f 5f  ragmas {.    do_
0f10: 74 65 73 74 20 63 61 70 69 33 2d 32 2e 36 20 7b  test capi3-2.6 {
0f20: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
0f30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 61 62  CREATE TABLE tab
0f40: 6c 65 6e 61 6d 65 28 78 29 7d 0a 20 20 20 20 20  lename(x)}.     
0f50: 20 73 65 74 20 73 71 6c 31 36 20 5b 75 74 66 31   set sql16 [utf1
0f60: 36 20 7b 50 52 41 47 4d 41 20 74 61 62 6c 65 5f  6 {PRAGMA table_
0f70: 69 6e 66 6f 28 22 54 61 62 6c 65 4e 61 6d 65 22  info("TableName"
0f80: 29 3b 20 2d 2d 65 78 63 65 73 73 20 74 65 78 74  ); --excess text
0f90: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 53 54 4d  }].      set STM
0fa0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
0fb0: 72 65 31 36 20 24 44 42 20 24 73 71 6c 31 36 20  re16 $DB $sql16 
0fc0: 2d 31 5d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  -1].      sqlite
0fd0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 20  3_step $STMT.   
0fe0: 20 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20   } SQLITE_ROW.  
0ff0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
1000: 32 2e 37 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  2.7 {.      sqli
1010: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
1020: 20 20 20 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45     } SQLITE_DONE
1030: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70  .    do_test cap
1040: 69 33 2d 32 2e 38 20 7b 0a 20 20 20 20 20 20 73  i3-2.8 {.      s
1050: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
1060: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
1070: 54 45 5f 4f 4b 0a 20 20 7d 0a 0a 7d 20 3b 23 20  TE_OK.  }..} ;# 
1080: 65 6e 64 69 66 20 75 74 66 31 36 0a 0a 23 20 72  endif utf16..# r
1090: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70  ename sqlite3_op
10a0: 65 6e 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  en sqlite3_open_
10b0: 6f 6c 64 0a 23 20 70 72 6f 63 20 73 71 6c 69 74  old.# proc sqlit
10c0: 65 33 5f 6f 70 65 6e 20 7b 66 6e 61 6d 65 20 6f  e3_open {fname o
10d0: 70 74 69 6f 6e 73 7d 20 7b 73 71 6c 69 74 65 33  ptions} {sqlite3
10e0: 5f 6f 70 65 6e 5f 6e 65 77 20 24 66 6e 61 6d 65  _open_new $fname
10f0: 20 24 6f 70 74 69 6f 6e 73 7d 0a 0a 64 6f 5f 74   $options}..do_t
1100: 65 73 74 20 63 61 70 69 33 2d 33 2e 31 20 7b 0a  est capi3-3.1 {.
1110: 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74    set db2 [sqlit
1120: 65 33 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62 20  e3_open test.db 
1130: 7b 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  {}].  sqlite3_er
1140: 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51  rcode $db2.} {SQ
1150: 4c 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d  LITE_OK}.# FIX M
1160: 45 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74  E: Should test t
1170: 68 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72  he db handle wor
1180: 6b 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ks..do_test capi
1190: 33 2d 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  3-3.2 {.  sqlite
11a0: 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b  3_close $db2.} {
11b0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
11c0: 73 74 20 63 61 70 69 33 2d 33 2e 33 20 7b 0a 20  st capi3-3.3 {. 
11d0: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
11e0: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
11f0: 65 6e 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f 74  en /bogus/path/t
1200: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 7d 0a 20  est.db {}].  }. 
1210: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
1220: 64 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  d_errcode $db2.}
1230: 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45   {SQLITE_CANTOPE
1240: 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  N}.do_test capi3
1250: 2d 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.4 {.  sqlite3
1260: 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b  _errmsg $db2.} {
1270: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
1280: 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f  atabase file}.do
1290: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 35 20  _test capi3-3.5 
12a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
12b0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
12c0: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
12d0: 69 33 2d 33 2e 36 2e 31 2d 6d 69 73 75 73 65 20  i3-3.6.1-misuse 
12e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
12f0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
1300: 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74  _MISUSE}.do_test
1310: 20 63 61 70 69 33 2d 33 2e 36 2e 32 2d 6d 69 73   capi3-3.6.2-mis
1320: 75 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  use {.  sqlite3_
1330: 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20 7b 6c  errmsg $db2.} {l
1340: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63  ibrary routine c
1350: 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71  alled out of seq
1360: 75 65 6e 63 65 7d 0a 69 66 63 61 70 61 62 6c 65  uence}.ifcapable
1370: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f   {utf16} {.  do_
1380: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 33  test capi3-3.6.3
1390: 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 75 74  -misuse {.    ut
13a0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d  f8 [sqlite3_errm
13b0: 73 67 31 36 20 24 64 62 32 5d 0a 20 20 7d 20 7b  sg16 $db2].  } {
13c0: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
13d0: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
13e0: 71 75 65 6e 63 65 7d 0a 7d 0a 0a 64 6f 5f 74 65  quence}.}..do_te
13f0: 73 74 20 63 61 70 69 33 2d 33 2e 37 20 7b 0a 20  st capi3-3.7 {. 
1400: 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65   set db2 [sqlite
1410: 33 5f 6f 70 65 6e 5d 0a 20 20 73 71 6c 69 74 65  3_open].  sqlite
1420: 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  3_errcode $db2.}
1430: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
1440: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 38 20 7b  test capi3-3.8 {
1450: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1460: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1470: 4f 4b 7d 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71  OK}..# rename sq
1480: 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22 0a 23 20  lite3_open "".# 
1490: 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f  rename sqlite3_o
14a0: 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74 65 33 5f  pen_old sqlite3_
14b0: 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62 6c 65 20  open..ifcapable 
14c0: 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f 74 65 73  {utf16} {.do_tes
14d0: 74 20 63 61 70 69 33 2d 34 2e 31 20 7b 0a 20 20  t capi3-4.1 {.  
14e0: 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33  set db2 [sqlite3
14f0: 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36 20 74  _open16 [utf16 t
1500: 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 73 71  est.db] {}].  sq
1510: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64  lite3_errcode $d
1520: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1530: 0a 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c  .# FIX ME: Shoul
1540: 64 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61  d test the db ha
1550: 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74  ndle works..do_t
1560: 65 73 74 20 63 61 70 69 33 2d 34 2e 32 20 7b 0a  est capi3-4.2 {.
1570: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
1580: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  $db2.} {SQLITE_O
1590: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
15a0: 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b  -4.3 {.  catch {
15b0: 0a 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71  .    set db2 [sq
15c0: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74  lite3_open16 [ut
15d0: 66 31 36 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f  f16 /bogus/path/
15e0: 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 7d  test.db] {}].  }
15f0: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  .  sqlite3_errco
1600: 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  de $db2.} {SQLIT
1610: 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74  E_CANTOPEN}.do_t
1620: 65 73 74 20 63 61 70 69 33 2d 34 2e 34 20 7b 0a  est capi3-4.4 {.
1630: 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f    utf8 [sqlite3_
1640: 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 7d  errmsg16 $db2].}
1650: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
1660: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a   database file}.
1670: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e  do_test capi3-4.
1680: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  5 {.  sqlite3_cl
1690: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
16a0: 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66 31  TE_OK}.} ;# utf1
16b0: 36 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69  6..# This proc i
16c0: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
16d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49  he following API
16e0: 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69   calls:.#.# sqli
16f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1700: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1710: 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33  n_name.# sqlite3
1720: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a 23  _column_name16.#
1730: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1740: 64 65 63 6c 74 79 70 65 0a 23 20 73 71 6c 69 74  decltype.# sqlit
1750: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1760: 70 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69  pe16.#.# $STMT i
1770: 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  s a compiled SQL
1780: 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73   statement. $tes
1790: 74 20 69 73 20 61 20 70 72 65 66 69 78 0a 23 20  t is a prefix.# 
17a0: 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74 20  to use for test 
17b0: 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69  names within thi
17c0: 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69  s proc. $names i
17d0: 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68  s a list.# of th
17e0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
17f0: 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65  hat should be re
1800: 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e  turned by $STMT.
1810: 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20 69 73  .# $decltypes is
1820: 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d   a list of colum
1830: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
1840: 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23  pes for $STMT..#
1850: 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  .# Example:.#.# 
1860: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
1870: 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45 43  3_prepare "SELEC
1880: 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44  T 1, 2, 2;" -1 D
1890: 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65  UMMY].# check_he
18a0: 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20  ader test1.1 {1 
18b0: 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a  2 3} {"" "" ""}.
18c0: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68 65 61  #.proc check_hea
18d0: 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20 6e  der {STMT test n
18e0: 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73 7d 20  ames decltypes} 
18f0: 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20 72  {..  # Use the r
1900: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
1910: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1920: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
1930: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
1940: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
1950: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
1960: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73  umn_count.  # is
1970: 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69   3, build the li
1980: 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65  st {0 1 2}..  se
1990: 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73  t ::idxlist [lis
19a0: 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f  t].  set ::numco
19b0: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ls [sqlite3_colu
19c0: 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a  mn_count $STMT].
19d0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
19e0: 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73  {$i < $::numcols
19f0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70  } {incr i} {lapp
1a00: 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69  end ::idxlist $i
1a10: 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  }..  # Column na
1a20: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64  mes in UTF-8.  d
1a30: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b  o_test $test.1 {
1a40: 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69  .    set cnameli
1a50: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  st [list].    fo
1a60: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
1a70: 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c   {lappend cnamel
1a80: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
1a90: 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24  umn_name $STMT $
1aa0: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1ab0: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65  melist.  } $name
1ac0: 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61  s..  # Column na
1ad0: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
1ae0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1af0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1b00: 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20 20 20  $test.2 {.      
1b10: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1b20: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1b30: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1b40: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1b50: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1b60: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1b70: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d  name16 $STMT $i]
1b80: 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ].      }.      
1b90: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
1ba0: 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a    } $names.  }..
1bb0: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1bc0: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
1bd0: 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20  est $test.3 {.  
1be0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1bf0: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
1c00: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
1c10: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
1c20: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1c30: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1c40: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1c50: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1c60: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1c70: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1c80: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1c90: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1ca0: 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73 65 74  st.4 {.      set
1cb0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1cc0: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
1cd0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
1ce0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
1cf0: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
1d00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1d10: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
1d20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1d30: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1d40: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1d50: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1d60: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1d70: 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20 20 73   $test.5 {.    s
1d80: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1d90: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1da0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1db0: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1dc0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1dd0: 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d  cltype $STMT $i]
1de0: 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65  } .    set cname
1df0: 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c 74 79  list.  } $declty
1e00: 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  pes..  # Column 
1e10: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
1e20: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66  s in UTF-16.  if
1e30: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1e40: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
1e50: 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20 73 65  est.6 {.      se
1e60: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
1e70: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
1e80: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
1e90: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
1ea0: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
1eb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1ec0: 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 24  cltype16 $STMT $
1ed0: 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i]].      }.    
1ee0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1ef0: 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73      } $decltypes
1f00: 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20  .  }...  # Test 
1f10: 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61 6e 67  some out of rang
1f20: 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20  e conditions:.  
1f30: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1f40: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1f50: 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20 20 20  $test.7 {.      
1f60: 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20 20 5b  list \.        [
1f70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1f80: 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a  ame $STMT -1] \.
1f90: 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33          [sqlite3
1fa0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24  _column_name16 $
1fb0: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
1fc0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1fd0: 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d  mn_decltype $STM
1fe0: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
1ff0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2000: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
2010: 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b   -1] \.        [
2020: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
2030: 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f  ame $STMT $numco
2040: 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73  ls] \.        [s
2050: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
2060: 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63  me16 $STMT $numc
2070: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
2080: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2090: 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24 6e  ecltype $STMT $n
20a0: 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20  umcols] \.      
20b0: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
20c0: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
20d0: 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20  MT $numcols].   
20e0: 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20   } {{} {} {} {} 
20f0: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d  {} {} {} {}}.  }
2100: 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  .} ..# This proc
2110: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
2120: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
2130: 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71  PI calls:.#.# sq
2140: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2150: 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  gin_name.# sqlit
2160: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2170: 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65  _name16.# sqlite
2180: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
2190: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
21a0: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
21b0: 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  6.# sqlite3_colu
21c0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
21d0: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
21e0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
21f0: 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61  6.#.# $STMT is a
2200: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
2210: 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69  atement. $test i
2220: 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20  s a prefix.# to 
2230: 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d  use for test nam
2240: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70  es within this p
2250: 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61  roc. $names is a
2260: 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63   list.# of the c
2270: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
2280: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72   should be retur
2290: 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20  ned by $STMT..# 
22a0: 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61 20  $decltypes is a 
22b0: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  list of column d
22c0: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73  eclaration types
22d0: 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20   for $STMT..#.# 
22e0: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
22f0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
2300: 72 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 31  repare "SELECT 1
2310: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
2320: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
2330: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
2340: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
2350: 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67 69 6e  roc check_origin
2360: 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65  _header {STMT te
2370: 73 74 20 64 62 73 20 74 61 62 6c 65 73 20 63 6f  st dbs tables co
2380: 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73 71 6c  ls} {.  # If sql
2390: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
23a0: 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20 66 72  in_name() and fr
23b0: 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20 63 6f  iends are not co
23c0: 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20 23 20  mpiled into.  # 
23d0: 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68 69 73  this build, this
23e0: 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d 6f 70   proc is a no-op
23f0: 2e 0a 20 20 69 66 63 61 70 61 62 6c 65 20 63 6f  ..  ifcapable co
2400: 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a 20  lumnmetadata {. 
2410: 20 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74     # Use the ret
2420: 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  urn value of sql
2430: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
2440: 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 20  t() to build.   
2450: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
2460: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
2470: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
2480: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20  umn_count.    # 
2490: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
24a0: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
24b0: 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20    set ::idxlist 
24c0: 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 3a  [list].    set :
24d0: 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65  :numcols [sqlite
24e0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
24f0: 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73  STMT].    for {s
2500: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a  et i 0} {$i < $:
2510: 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20  :numcols} {incr 
2520: 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64  i} {lappend ::id
2530: 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20 20 20  xlist $i}.  .   
2540: 20 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65   # Database name
2550: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2560: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b  o_test $test.8 {
2570: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2580: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
2590: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
25a0: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
25b0: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
25c0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
25d0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 20 24  _database_name $
25e0: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
25f0: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
2600: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64 62 73  elist.    } $dbs
2610: 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61  .  .    # Databa
2620: 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  se names in UTF-
2630: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2640: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2650: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39   do_test $test.9
2660: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   {.        set c
2670: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2680: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2690: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
26a0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
26b0: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
26c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
26d0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 20 24  atabase_name16 $
26e0: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
26f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20    }.        set 
2700: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20  cnamelist.      
2710: 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a  } $dbs.    }.  .
2720: 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65      # Table name
2730: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2740: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20  o_test $test.10 
2750: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2760: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2770: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2780: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2790: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
27a0: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
27b0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54  n_table_name $ST
27c0: 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a  MT $i].      } .
27d0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
27e0: 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62 6c 65  ist.    } $table
27f0: 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65  s.  .    # Table
2800: 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36   names in UTF-16
2810: 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b  .    ifcapable {
2820: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64  utf16} {.      d
2830: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20  o_test $test.11 
2840: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  {.        set cn
2850: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2860: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69         foreach i
2870: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
2880: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2890: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
28a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
28b0: 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  ble_name16 $STMT
28c0: 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a   $i]].        }.
28d0: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
28e0: 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 74  elist.      } $t
28f0: 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20  ables.    }.  . 
2900: 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65     # Origin name
2910: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2920: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20  o_test $test.12 
2930: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2940: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2950: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2960: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2970: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
2980: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
2990: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53  n_origin_name $S
29a0: 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20  TMT $i].      } 
29b0: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
29c0: 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73  list.    } $cols
29d0: 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e  .  .    # Origin
29e0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
29f0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20  es in UTF-16.   
2a00: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
2a10: 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65  6} {.      do_te
2a20: 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20  st $test.13 {.  
2a30: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
2a40: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
2a50: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2a60: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2a70: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2a80: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
2a90: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2aa0: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
2ab0: 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]].        }.   
2ac0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2ad0: 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f 6c 73  st.      } $cols
2ae0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20  .    }.  }.}..# 
2af0: 54 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65  This proc is use
2b00: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f  d to test the fo
2b10: 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a  llowing APIs:.#.
2b20: 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  # sqlite3_data_c
2b30: 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63  ount.# sqlite3_c
2b40: 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c  olumn_type.# sql
2b50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a  ite3_column_int.
2b60: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2b70: 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65 33 5f  _text.# sqlite3_
2b80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20  column_text16.# 
2b90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2ba0: 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20  ouble.#.# $STMT 
2bb0: 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51  is a compiled SQ
2bc0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  L statement for 
2bd0: 77 68 69 63 68 20 74 68 65 20 70 72 65 76 69 6f  which the previo
2be0: 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71  us call .# to sq
2bf0: 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74 75 72  lite3_step retur
2c00: 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20  ned SQLITE_ROW. 
2c10: 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69  $test is a prefi
2c20: 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f 72 20  x to use .# for 
2c30: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
2c40: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 74 79  n this proc. $ty
2c50: 70 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66  pes is a list of
2c60: 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65 73 74   the .# manifest
2c70: 20 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 63   types for the c
2c80: 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74  urrent row. $int
2c90: 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e 64 20  s, $doubles and 
2ca0: 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65 20 6c  $strings.# are l
2cb0: 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65  ists of the inte
2cc0: 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20 73 74  ger, real and st
2cd0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2ce0: 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20 76 61  ions of.# the va
2cf0: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  lues in the curr
2d00: 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61  ent row..#.# Exa
2d10: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
2d20: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
2d30: 61 72 65 20 22 53 45 4c 45 43 54 20 27 68 65 6c  are "SELECT 'hel
2d40: 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c 22 20  lo', 1.1, NULL" 
2d50: 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71 6c 69  -1 DUMMY].# sqli
2d60: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 23  te3_step $STMT.#
2d70: 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65 73 74   check_data test
2d80: 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c 20 4e  1.2 {TEXT REAL N
2d90: 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b 30 20  ULL} {0 1 0} {0 
2da0: 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20 31 2e  1.1 0} {hello 1.
2db0: 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63 68 65  1 {}}.#.proc che
2dc0: 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20 74 65  ck_data {STMT te
2dd0: 73 74 20 74 79 70 65 73 20 69 6e 74 73 20 64 6f  st types ints do
2de0: 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d 20 7b  ubles strings} {
2df0: 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20 72 65  ..  # Use the re
2e00: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71  turn value of sq
2e10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
2e20: 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20  nt() to build.  
2e30: 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  # a list of colu
2e40: 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e  mn indexes. i.e.
2e50: 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   If sqlite3_colu
2e60: 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20  mn_count.  # is 
2e70: 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73  3, build the lis
2e80: 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74  t {0 1 2}..  set
2e90: 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74   ::idxlist [list
2ea0: 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c 73 20  ].  set numcols 
2eb0: 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f  [sqlite3_data_co
2ec0: 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72  unt $STMT].  for
2ed0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
2ee0: 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72   $numcols} {incr
2ef0: 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69   i} {lappend ::i
2f00: 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20 74 79  dxlist $i}..# ty
2f10: 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  pes.do_test $tes
2f20: 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79 70 65  t.1 {.  set type
2f30: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
2f40: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
2f50: 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b 73 71  append types [sq
2f60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
2f70: 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  e $STMT $i]}.  s
2f80: 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79 70 65  et types.} $type
2f90: 73 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64 6f  s..# Integers.do
2fa0: 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20 7b 0a  _test $test.2 {.
2fb0: 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73 74    set ints [list
2fc0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
2fd0: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
2fe0: 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ints [sqlite3_co
2ff0: 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53 54 4d 54  lumn_int64 $STMT
3000: 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73   $i]}.  set ints
3010: 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62 79 74 65  .} $ints..# byte
3020: 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74  s.set lens [list
3030: 5d 0a 66 6f 72 65 61 63 68 20 69 20 24 3a 3a 69  ].foreach i $::i
3040: 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61 70 70 65  dxlist {.  lappe
3050: 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69 6e 67 20  nd lens [string 
3060: 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20 24  length [lindex $
3070: 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a 7d 0a 64  strings $i]].}.d
3080: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b  o_test $test.3 {
3090: 0a 20 20 73 65 74 20 62 79 74 65 73 20 5b 6c 69  .  set bytes [li
30a0: 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b  st].  set lens [
30b0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
30c0: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
30d0: 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73 20 5b   lappend bytes [
30e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
30f0: 79 74 65 73 20 24 53 54 4d 54 20 24 69 5d 0a 20  ytes $STMT $i]. 
3100: 20 7d 0a 20 20 73 65 74 20 62 79 74 65 73 0a 7d   }.  set bytes.}
3110: 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74 65 73 31   $lens..# bytes1
3120: 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  6.ifcapable {utf
3130: 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c 65 6e 73  16} {.  set lens
3140: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3150: 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b  h i $::idxlist {
3160: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e  .    lappend len
3170: 73 20 5b 65 78 70 72 20 32 20 2a 20 5b 73 74 72  s [expr 2 * [str
3180: 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64  ing length [lind
3190: 65 78 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d  ex $strings $i]]
31a0: 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ].  }.  do_test 
31b0: 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 73 65  $test.4 {.    se
31c0: 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20  t bytes [list]. 
31d0: 20 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73     set lens [lis
31e0: 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69  t].    foreach i
31f0: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
3200: 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73 20    lappend bytes 
3210: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3220: 62 79 74 65 73 31 36 20 24 53 54 4d 54 20 24 69  bytes16 $STMT $i
3230: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ].    }.    set 
3240: 62 79 74 65 73 0a 20 20 7d 20 24 6c 65 6e 73 0a  bytes.  } $lens.
3250: 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f 74 65 73  }..# Blob.do_tes
3260: 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 73 65  t $test.5 {.  se
3270: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
3280: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3290: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
32a0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
32b0: 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24 69 5d 7d  _blob $STMT $i]}
32c0: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 73  .  set utf8.} $s
32d0: 74 72 69 6e 67 73 0a 0a 23 20 55 54 46 2d 38 0a  trings..# UTF-8.
32e0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 36 20  do_test $test.6 
32f0: 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69  {.  set utf8 [li
3300: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
3310: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3320: 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f  d utf8 [sqlite3_
3330: 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d  column_text $STM
3340: 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66  T $i]}.  set utf
3350: 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20  8.} $strings..# 
3360: 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24  Floats.do_test $
3370: 74 65 73 74 2e 37 20 7b 0a 20 20 73 65 74 20 75  test.7 {.  set u
3380: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
3390: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
33a0: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
33b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
33c0: 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a  uble $STMT $i]}.
33d0: 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64 6f    set utf8.} $do
33e0: 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 31 36 0a  ubles..# UTF-16.
33f0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
3400: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 24 74  } {.  do_test $t
3410: 65 73 74 2e 38 20 7b 0a 20 20 20 20 73 65 74 20  est.8 {.    set 
3420: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 20 20  utf8 [list].    
3430: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3440: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
3450: 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f   [utf8 [sqlite3_
3460: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24 53  column_text16 $S
3470: 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20 20 73 65  TMT $i]]}.    se
3480: 74 20 75 74 66 38 0a 20 20 7d 20 24 73 74 72 69  t utf8.  } $stri
3490: 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65 67 65 72  ngs.}..# Integer
34a0: 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  s.do_test $test.
34b0: 39 20 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b  9 {.  set ints [
34c0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
34d0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
34e0: 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65  end ints [sqlite
34f0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
3500: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e  MT $i]}.  set in
3510: 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 46 6c  ts.} $ints..# Fl
3520: 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  oats.do_test $te
3530: 73 74 2e 31 30 20 7b 0a 20 20 73 65 74 20 75 74  st.10 {.  set ut
3540: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
3550: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3560: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3570: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
3580: 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ble $STMT $i]}. 
3590: 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64 6f 75   set utf8.} $dou
35a0: 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f  bles..# UTF-8.do
35b0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20 7b  _test $test.11 {
35c0: 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73  .  set utf8 [lis
35d0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
35e0: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
35f0: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63   utf8 [sqlite3_c
3600: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
3610: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
3620: 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 54  .} $strings..# T
3630: 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  ypes.do_test $te
3640: 73 74 2e 31 32 20 7b 0a 20 20 73 65 74 20 74 79  st.12 {.  set ty
3650: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
3660: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
3670: 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b  {lappend types [
3680: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
3690: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ype $STMT $i]}. 
36a0: 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79   set types.} $ty
36b0: 70 65 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74  pes..# Test that
36c0: 20 61 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   an out of range
36d0: 20 72 65 71 75 65 73 74 20 72 65 74 75 72 6e 73   request returns
36e0: 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
36f0: 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73 74 20  of NULL.do_test 
3700: 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c  $test.13 {.  sql
3710: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
3720: 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30 7d 0a 64  $STMT -1.} {0}.d
3730: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20  o_test $test.13 
3740: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
3750: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 2d 31  mn_text $STMT -1
3760: 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63 61 70 61  .} {}..}..ifcapa
3770: 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70 6f 69  ble !floatingpoi
3780: 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  nt {.  finish_te
3790: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64  st.  return.}..d
37a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 30  o_test capi3-5.0
37b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
37c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
37d0: 74 31 28 61 20 56 41 52 49 4e 54 2c 20 62 20 42  t1(a VARINT, b B
37e0: 4c 4f 42 2c 20 63 20 56 41 52 43 48 41 52 28 31  LOB, c VARCHAR(1
37f0: 36 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  6));.    INSERT 
3800: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
3810: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53  , 2, 3);.    INS
3820: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3830: 45 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 2c  ES('one', 'two',
3840: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45   NULL);.    INSE
3850: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
3860: 53 28 31 2e 32 2c 20 31 2e 33 2c 20 31 2e 34 29  S(1.2, 1.3, 1.4)
3870: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  ;.  }.  set sql 
3880: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
3890: 31 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  1".  set STMT [s
38a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
38b0: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
38c0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
38d0: 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20  n_count $STMT.} 
38e0: 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20  3..check_header 
38f0: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 31 20  $STMT capi3-5.1 
3900: 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20  {a b c} {VARINT 
3910: 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29  BLOB VARCHAR(16)
3920: 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68  }.check_origin_h
3930: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3940: 33 2d 35 2e 31 20 7b 6d 61 69 6e 20 6d 61 69 6e  3-5.1 {main main
3950: 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31   main} {t1 t1 t1
3960: 7d 20 7b 61 20 62 20 63 7d 0a 64 6f 5f 74 65 73  } {a b c}.do_tes
3970: 74 20 63 61 70 69 33 2d 35 2e 32 20 7b 0a 20 20  t capi3-5.2 {.  
3980: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3990: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
39a0: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
39b0: 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 20 7b 61  TMT capi3-5.3 {a
39c0: 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c   b c} {VARINT BL
39d0: 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a  OB VARCHAR(16)}.
39e0: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
39f0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3a00: 35 2e 33 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  5.3 {main main m
3a10: 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20  ain} {t1 t1 t1} 
3a20: 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61  {a b c}.check_da
3a30: 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  ta $STMT capi3-5
3a40: 2e 34 20 7b 49 4e 54 45 47 45 52 20 49 4e 54 45  .4 {INTEGER INTE
3a50: 47 45 52 20 54 45 58 54 7d 20 7b 31 20 32 20 33  GER TEXT} {1 2 3
3a60: 7d 20 7b 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20  } {1.0 2.0 3.0} 
3a70: 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74  {1 2 3}..do_test
3a80: 20 63 61 70 69 33 2d 35 2e 35 20 7b 0a 20 20 73   capi3-5.5 {.  s
3a90: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
3aa0: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a  T.} SQLITE_ROW..
3ab0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
3ac0: 4d 54 20 63 61 70 69 33 2d 35 2e 36 20 7b 61 20  MT capi3-5.6 {a 
3ad0: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3ae0: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3af0: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3b00: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  er $STMT capi3-5
3b10: 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .6 {main main ma
3b20: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3b30: 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74  a b c}.check_dat
3b40: 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  a $STMT capi3-5.
3b50: 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e 55 4c  7 {TEXT TEXT NUL
3b60: 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e 30 20  L} {0 0 0} {0.0 
3b70: 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20 74 77  0.0 0.0} {one tw
3b80: 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  o {}}..do_test c
3b90: 61 70 69 33 2d 35 2e 38 20 7b 0a 20 20 73 71 6c  api3-5.8 {.  sql
3ba0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3bb0: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68  } SQLITE_ROW..ch
3bc0: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3bd0: 20 63 61 70 69 33 2d 35 2e 39 20 7b 61 20 62 20   capi3-5.9 {a b 
3be0: 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20  c} {VARINT BLOB 
3bf0: 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65  VARCHAR(16)}.che
3c00: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
3c10: 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 39   $STMT capi3-5.9
3c20: 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e   {main main main
3c30: 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20  } {t1 t1 t1} {a 
3c40: 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20  b c}.check_data 
3c50: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 31 30  $STMT capi3-5.10
3c60: 20 7b 46 4c 4f 41 54 20 46 4c 4f 41 54 20 54 45   {FLOAT FLOAT TE
3c70: 58 54 7d 20 7b 31 20 31 20 31 7d 20 7b 31 2e 32  XT} {1 1 1} {1.2
3c80: 20 31 2e 33 20 31 2e 34 7d 20 7b 31 2e 32 20 31   1.3 1.4} {1.2 1
3c90: 2e 33 20 31 2e 34 7d 0a 0a 64 6f 5f 74 65 73 74  .3 1.4}..do_test
3ca0: 20 63 61 70 69 33 2d 35 2e 31 31 20 7b 0a 20 20   capi3-5.11 {.  
3cb0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3cc0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
3cd0: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  ..do_test capi3-
3ce0: 35 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  5.12 {.  sqlite3
3cf0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
3d00: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f  } SQLITE_OK..do_
3d10: 74 65 73 74 20 63 61 70 69 33 2d 35 2e 32 30 20  test capi3-5.20 
3d20: 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c  {.  set sql "SEL
3d30: 45 43 54 20 61 2c 20 73 75 6d 28 62 29 2c 20 6d  ECT a, sum(b), m
3d40: 61 78 28 63 29 20 46 52 4f 4d 20 74 31 20 47 52  ax(c) FROM t1 GR
3d50: 4f 55 50 20 42 59 20 61 22 0a 20 20 73 65 74 20  OUP BY a".  set 
3d60: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
3d70: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d  epare $DB $sql -
3d80: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
3d90: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
3da0: 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f  STMT.} 3..check_
3db0: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3dc0: 69 33 2d 35 2e 32 31 20 7b 61 20 73 75 6d 28 62  i3-5.21 {a sum(b
3dd0: 29 20 6d 61 78 28 63 29 7d 20 7b 56 41 52 49 4e  ) max(c)} {VARIN
3de0: 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f  T {} {}}.check_o
3df0: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
3e00: 4d 54 20 63 61 70 69 33 2d 35 2e 32 32 20 7b 6d  MT capi3-5.22 {m
3e10: 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b  ain {} {}} {t1 {
3e20: 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a  } {}} {a {} {}}.
3e30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
3e40: 32 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  23 {.  sqlite3_f
3e50: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
3e60: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65  SQLITE_OK..do_te
3e70: 73 74 20 63 61 70 69 33 2d 35 2e 33 30 20 7b 0a  st capi3-5.30 {.
3e80: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
3e90: 54 20 61 20 41 53 20 78 2c 20 73 75 6d 28 62 29  T a AS x, sum(b)
3ea0: 20 41 53 20 79 2c 20 6d 61 78 28 63 29 20 41 53   AS y, max(c) AS
3eb0: 20 7a 20 46 52 4f 4d 20 74 31 20 41 53 20 6d 20   z FROM t1 AS m 
3ec0: 47 52 4f 55 50 20 42 59 20 78 22 0a 20 20 73 65  GROUP BY x".  se
3ed0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
3ee0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
3ef0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
3f00: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
3f10: 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63   $STMT.} 3..chec
3f20: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
3f30: 61 70 69 33 2d 35 2e 33 31 20 7b 78 20 79 20 7a  api3-5.31 {x y z
3f40: 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d  } {VARINT {} {}}
3f50: 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65  .check_origin_he
3f60: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3f70: 2d 35 2e 33 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b  -5.32 {main {} {
3f80: 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61  }} {t1 {} {}} {a
3f90: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
3fa0: 63 61 70 69 33 2d 35 2e 33 33 20 7b 0a 20 20 73  capi3-5.33 {.  s
3fb0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
3fc0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f  $STMT.} SQLITE_O
3fd0: 4b 0a 0a 0a 73 65 74 20 3a 3a 45 4e 43 20 5b 65  K...set ::ENC [e
3fe0: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65  xecsql {pragma e
3ff0: 6e 63 6f 64 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f  ncoding}].db clo
4000: 73 65 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  se..do_test capi
4010: 33 2d 36 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65  3-6.0 {.  sqlite
4020: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73  3 db test.db.  s
4030: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
4040: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
4050: 72 20 64 62 5d 0a 20 20 69 66 20 7b 5b 73 71 6c  r db].  if {[sql
4060: 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d  ite3 -has-codec]
4070: 3d 3d 30 7d 20 7b 20 73 71 6c 69 74 65 33 5f 6b  ==0} { sqlite3_k
4080: 65 79 20 24 44 42 20 78 79 7a 7a 79 20 7d 0a 20  ey $DB xyzzy }. 
4090: 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54   set sql {SELECT
40a0: 20 61 20 46 52 4f 4d 20 74 31 20 6f 72 64 65 72   a FROM t1 order
40b0: 20 62 79 20 72 6f 77 69 64 7d 0a 20 20 73 65 74   by rowid}.  set
40c0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
40d0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
40e0: 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 70 72 20  -1 TAIL].  expr 
40f0: 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  0.} {0}.do_test 
4100: 63 61 70 69 33 2d 36 2e 31 20 7b 0a 20 20 64 62  capi3-6.1 {.  db
4110: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20 73   cache flush.  s
4120: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42  qlite3_close $DB
4130: 0a 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 7d  .} {SQLITE_BUSY}
4140: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
4150: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
4160: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
4170: 49 54 45 5f 45 52 52 4f 52 7d 0a 23 63 68 65 63  ITE_ERROR}.#chec
4180: 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70  k_data $STMT cap
4190: 69 33 2d 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d  i3-6.3 {INTEGER}
41a0: 20 7b 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64   {1} {1.0} {1}.d
41b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 33  o_test capi3-6.3
41c0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
41d0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
41e0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 64 6f  QLITE_SCHEMA}.do
41f0: 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 34 2d  _test capi3-6.4-
4200: 6d 69 73 75 73 65 20 7b 0a 20 20 64 62 20 63 61  misuse {.  db ca
4210: 63 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69  che flush.  sqli
4220: 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20  te3_close $DB.} 
4230: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 62 20 63  {SQLITE_OK}.db c
4240: 6c 6f 73 65 0a 0a 23 20 54 68 69 73 20 70 72 6f  lose..# This pro
4250: 63 65 64 75 72 65 20 73 65 74 73 20 74 68 65 20  cedure sets the 
4260: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 69 6c  value of the fil
4270: 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c 65  e-format in file
4280: 20 27 74 65 73 74 2e 64 62 27 0a 23 20 74 6f 20   'test.db'.# to 
4290: 24 6e 65 77 76 61 6c 2e 20 41 6c 73 6f 2c 20 74  $newval. Also, t
42a0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
42b0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
42c0: 0a 23 20 0a 70 72 6f 63 20 73 65 74 5f 66 69 6c  .# .proc set_fil
42d0: 65 5f 66 6f 72 6d 61 74 20 7b 6e 65 77 76 61 6c  e_format {newval
42e0: 7d 20 7b 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  } {.  hexio_writ
42f0: 65 20 74 65 73 74 2e 64 62 20 34 34 20 5b 68 65  e test.db 44 [he
4300: 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32  xio_render_int32
4310: 20 24 6e 65 77 76 61 6c 5d 0a 20 20 73 65 74 20   $newval].  set 
4320: 73 63 68 65 6d 61 63 6f 6f 6b 69 65 20 5b 68 65  schemacookie [he
4330: 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78  xio_get_int [hex
4340: 69 6f 5f 72 65 61 64 20 74 65 73 74 2e 64 62 20  io_read test.db 
4350: 34 30 20 34 5d 5d 0a 20 20 69 6e 63 72 20 73 63  40 4]].  incr sc
4360: 68 65 6d 61 63 6f 6f 6b 69 65 0a 20 20 68 65 78  hemacookie.  hex
4370: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
4380: 20 34 30 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65   40 [hexio_rende
4390: 72 5f 69 6e 74 33 32 20 24 73 63 68 65 6d 61 63  r_int32 $schemac
43a0: 6f 6f 6b 69 65 5d 0a 20 20 72 65 74 75 72 6e 20  ookie].  return 
43b0: 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f  {}.}..# This pro
43c0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74  cedure returns t
43d0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
43e0: 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66  file-format in f
43f0: 69 6c 65 20 27 74 65 73 74 2e 64 62 27 2e 0a 23  ile 'test.db'..#
4400: 20 0a 70 72 6f 63 20 67 65 74 5f 66 69 6c 65 5f   .proc get_file_
4410: 66 6f 72 6d 61 74 20 7b 7b 66 6e 61 6d 65 20 74  format {{fname t
4420: 65 73 74 2e 64 62 7d 7d 20 7b 0a 20 20 72 65 74  est.db}} {.  ret
4430: 75 72 6e 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69  urn [hexio_get_i
4440: 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 24  nt [hexio_read $
4450: 66 6e 61 6d 65 20 34 34 20 34 5d 5d 0a 7d 0a 0a  fname 44 4]].}..
4460: 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68  if {![sqlite3 -h
4470: 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23  as-codec]} {.  #
4480: 20 54 65 73 74 20 77 68 61 74 20 68 61 70 70 65   Test what happe
4490: 6e 73 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72  ns when the libr
44a0: 61 72 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61  ary encounters a
44b0: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
44c0: 61 74 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  at..  do_test ca
44d0: 70 69 33 2d 37 2e 31 20 7b 0a 20 20 20 20 73 65  pi3-7.1 {.    se
44e0: 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 35 0a  t_file_format 5.
44f0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4500: 20 63 61 70 69 33 2d 37 2e 32 20 7b 0a 20 20 20   capi3-7.2 {.   
4510: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
4520: 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20   db test.db }.  
4530: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4540: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4550: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
4560: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e      }.  } {1 {un
4570: 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66  supported file f
4580: 6f 72 6d 61 74 7d 7d 0a 20 20 64 62 20 63 6c 6f  ormat}}.  db clo
4590: 73 65 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69  se.}..if {![sqli
45a0: 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d  te3 -has-codec]}
45b0: 20 7b 0a 20 20 23 20 4e 6f 77 20 74 65 73 74 20   {.  # Now test 
45c0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
45d0: 20 63 6f 72 72 65 63 74 6c 79 20 68 61 6e 64 6c   correctly handl
45e0: 65 73 20 62 6f 67 75 73 20 65 6e 74 72 69 65 73  es bogus entries
45f0: 20 69 6e 20 74 68 65 0a 20 20 23 20 73 71 6c 69   in the.  # sqli
4600: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
4610: 28 73 63 68 65 6d 61 20 63 6f 72 72 75 70 74 69  (schema corrupti
4620: 6f 6e 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63  on)..  do_test c
4630: 61 70 69 33 2d 38 2e 31 20 7b 0a 20 20 20 20 66  api3-8.1 {.    f
4640: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
4650: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
4660: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
4670: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4680: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4690: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
46a0: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
46b0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
46c0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
46d0: 69 33 2d 38 2e 32 20 7b 0a 20 20 20 20 73 71 6c  i3-8.2 {.    sql
46e0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
46f0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4700: 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61      PRAGMA writa
4710: 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20  ble_schema=ON;. 
4720: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4730: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 56   sqlite_master V
4740: 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c 4c 2c  ALUES(NULL,NULL,
4750: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b  NULL,NULL,NULL);
4760: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c  .    }.    db cl
4770: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ose.  } {}.  do_
4780: 74 65 73 74 20 63 61 70 69 33 2d 38 2e 33 20 7b  test capi3-8.3 {
4790: 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73 71 6c  .    catch { sql
47a0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
47b0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
47c0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
47d0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
47e0: 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  er;.    }.  } {1
47f0: 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61   {malformed data
4800: 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d  base schema (?)}
4810: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
4820: 33 2d 38 2e 34 20 7b 0a 20 20 20 20 23 20 42 75  3-8.4 {.    # Bu
4830: 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72 6f  ild a 5-field ro
4840: 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 66 69  w record. The fi
4850: 72 73 74 20 66 69 65 6c 64 20 69 73 20 61 20 73  rst field is a s
4860: 74 72 69 6e 67 20 27 74 61 62 6c 65 27 2c 20 61  tring 'table', a
4870: 6e 64 0a 20 20 20 20 23 20 73 75 62 73 65 71 75  nd.    # subsequ
4880: 65 6e 74 20 66 69 65 6c 64 73 20 61 72 65 20 61  ent fields are a
4890: 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20 64 62 20  ll NULL..    db 
48a0: 63 6c 6f 73 65 0a 20 20 20 20 66 69 6c 65 20 64  close.    file d
48b0: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73  elete -force tes
48c0: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
48d0: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
48e0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
48f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4900: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4910: 61 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  a);.      PRAGMA
4920: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
4930: 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  =ON;.      INSER
4940: 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61  T INTO sqlite_ma
4950: 73 74 65 72 20 56 41 4c 55 45 53 28 27 74 61 62  ster VALUES('tab
4960: 6c 65 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  le',NULL,NULL,NU
4970: 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a  LL,NULL);.    }.
4980: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d      db close.  }
4990: 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65 73 74 20 63   {};.  do_test c
49a0: 61 70 69 33 2d 38 2e 35 20 7b 0a 20 20 20 20 63  api3-8.5 {.    c
49b0: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64  atch { sqlite3 d
49c0: 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20 20 20  b test.db }.    
49d0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
49e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
49f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
4a00: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66    }.  } {1 {malf
4a10: 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73  ormed database s
4a20: 63 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 62  chema (?)}}.  db
4a30: 20 63 6c 6f 73 65 0a 7d 0a 66 69 6c 65 20 64 65   close.}.file de
4a40: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4a50: 2e 64 62 0a 66 69 6c 65 20 64 65 6c 65 74 65 20  .db.file delete 
4a60: 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 2d 6a  -force test.db-j
4a70: 6f 75 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20  ournal...# Test 
4a80: 74 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67  the english lang
4a90: 75 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69  uage string equi
4aa0: 76 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69  valents for sqli
4ab0: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73  te error codes.s
4ac0: 65 74 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20  et code2english 
4ad0: 5b 6c 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f  [list \.SQLITE_O
4ae0: 4b 20 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61  K         {not a
4af0: 6e 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  n error} \.SQLIT
4b00: 45 5f 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51  E_ERROR      {SQ
4b10: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
4b20: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
4b30: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 50 45 52 4d  e} \.SQLITE_PERM
4b40: 20 20 20 20 20 20 20 7b 61 63 63 65 73 73 20 70         {access p
4b50: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
4b60: 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 42 4f 52 54  } \.SQLITE_ABORT
4b70: 20 20 20 20 20 20 7b 63 61 6c 6c 62 61 63 6b 20        {callback 
4b80: 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20  requested query 
4b90: 61 62 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f  abort} \.SQLITE_
4ba0: 42 55 53 59 20 20 20 20 20 20 20 7b 64 61 74 61  BUSY       {data
4bb0: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20  base is locked} 
4bc0: 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  \.SQLITE_LOCKED 
4bd0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 74 61      {database ta
4be0: 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c  ble is locked} \
4bf0: 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20  .SQLITE_NOMEM   
4c00: 20 20 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72     {out of memor
4c10: 79 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 45 41 44  y} \.SQLITE_READ
4c20: 4f 4e 4c 59 20 20 20 7b 61 74 74 65 6d 70 74 20  ONLY   {attempt 
4c30: 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f  to write a reado
4c40: 6e 6c 79 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  nly database} \.
4c50: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
4c60: 20 20 7b 69 6e 74 65 72 72 75 70 74 65 64 7d 20    {interrupted} 
4c70: 5c 0a 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20  \.SQLITE_IOERR  
4c80: 20 20 20 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72      {disk I/O er
4c90: 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f  ror} \.SQLITE_CO
4ca0: 52 52 55 50 54 20 20 20 20 7b 64 61 74 61 62 61  RRUPT    {databa
4cb0: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
4cc0: 20 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a 53 51   malformed} \.SQ
4cd0: 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20  LITE_FULL       
4ce0: 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73  {database or dis
4cf0: 6b 20 69 73 20 66 75 6c 6c 7d 20 5c 0a 53 51 4c  k is full} \.SQL
4d00: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20 7b  ITE_CANTOPEN   {
4d10: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
4d20: 61 74 61 62 61 73 65 20 66 69 6c 65 7d 20 5c 0a  atabase file} \.
4d30: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20  SQLITE_EMPTY    
4d40: 20 20 7b 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e    {table contain
4d50: 73 20 6e 6f 20 64 61 74 61 7d 20 5c 0a 53 51 4c  s no data} \.SQL
4d60: 49 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20 7b  ITE_SCHEMA     {
4d70: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
4d80: 68 61 73 20 63 68 61 6e 67 65 64 7d 20 5c 0a 53  has changed} \.S
4d90: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
4da0: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
4db0: 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49  led} \.SQLITE_MI
4dc0: 53 4d 41 54 43 48 20 20 20 7b 64 61 74 61 74 79  SMATCH   {dataty
4dd0: 70 65 20 6d 69 73 6d 61 74 63 68 7d 20 5c 0a 53  pe mismatch} \.S
4de0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20  QLITE_MISUSE    
4df0: 20 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   {library routin
4e00: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
4e10: 73 65 71 75 65 6e 63 65 7d 20 5c 0a 53 51 4c 49  sequence} \.SQLI
4e20: 54 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 7b 6c  TE_NOLFS      {l
4e30: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
4e40: 74 20 69 73 20 64 69 73 61 62 6c 65 64 7d 20 5c  t is disabled} \
4e50: 0a 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20 20  .SQLITE_AUTH    
4e60: 20 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69 6f     {authorizatio
4e70: 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49  n denied} \.SQLI
4e80: 54 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 7b 61  TE_FORMAT     {a
4e90: 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
4ea0: 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 7d 20  e format error} 
4eb0: 5c 0a 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20  \.SQLITE_RANGE  
4ec0: 20 20 20 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c      {bind or col
4ed0: 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66  umn index out of
4ee0: 20 72 61 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45   range} \.SQLITE
4ef0: 5f 4e 4f 54 41 44 42 20 20 20 20 20 7b 66 69 6c  _NOTADB     {fil
4f00: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
4f10: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
4f20: 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72  ase} \.unknowner
4f30: 72 6f 72 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77  ror      {unknow
4f40: 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65  n error} \.]..se
4f50: 74 20 74 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a  t test_number 1.
4f60: 66 6f 72 65 61 63 68 20 7b 63 6f 64 65 20 65 6e  foreach {code en
4f70: 67 6c 69 73 68 7d 20 24 63 6f 64 65 32 65 6e 67  glish} $code2eng
4f80: 6c 69 73 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  lish {.  do_test
4f90: 20 63 61 70 69 33 2d 39 2e 24 74 65 73 74 5f 6e   capi3-9.$test_n
4fa0: 75 6d 62 65 72 20 22 73 71 6c 69 74 65 33 5f 74  umber "sqlite3_t
4fb0: 65 73 74 5f 65 72 72 73 74 72 20 24 63 6f 64 65  est_errstr $code
4fc0: 22 20 24 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63  " $english.  inc
4fd0: 72 20 74 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a  r test_number.}.
4fe0: 0a 23 20 54 65 73 74 20 74 68 65 20 65 72 72 6f  .# Test the erro
4ff0: 72 20 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61  r message when a
5000: 20 22 72 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d   "real" out of m
5010: 65 6d 6f 72 79 20 6f 63 63 75 72 73 2e 0a 69 66  emory occurs..if
5020: 63 61 70 61 62 6c 65 20 6d 65 6d 64 65 62 75 67  capable memdebug
5030: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
5040: 69 33 2d 31 30 2d 31 20 7b 0a 20 20 20 20 73 71  i3-10-1 {.    sq
5050: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
5060: 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73 71 6c  .    set DB [sql
5070: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5080: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 20 20  pointer db].    
5090: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
50a0: 5f 66 61 69 6c 20 31 0a 20 20 20 20 63 61 74 63  _fail 1.    catc
50b0: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c  hsql {.      sel
50c0: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
50d0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
50e0: 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d    } {1 {out of m
50f0: 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  emory}}.  do_tes
5100: 74 20 63 61 70 69 33 2d 31 30 2d 32 20 7b 0a 20  t capi3-10-2 {. 
5110: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
5120: 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74  g $::DB.  } {out
5130: 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66   of memory}.  if
5140: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
5150: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61  {.    do_test ca
5160: 70 69 33 2d 31 30 2d 33 20 7b 0a 20 20 20 20 20  pi3-10-3 {.     
5170: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65   utf8 [sqlite3_e
5180: 72 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20  rrmsg16 $::DB]. 
5190: 20 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d     } {out of mem
51a0: 6f 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c  ory}.  }.  db cl
51b0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65  ose.  sqlite3_me
51c0: 6d 64 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a 20  mdebug_fail -1. 
51d0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
51e0: 30 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0-4 {.    sqlite
51f0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
5200: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
5210: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
5220: 74 65 72 20 64 62 5d 0a 20 20 20 20 73 71 6c 69  ter db].    sqli
5230: 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69  te3_memdebug_fai
5240: 6c 20 31 0a 20 20 20 20 63 61 74 63 68 73 71 6c  l 1.    catchsql
5250: 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20   {.      select 
5260: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
5270: 73 74 65 72 20 77 68 65 72 65 20 72 6f 77 69 64  ster where rowid
5280: 3e 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  >5;.    }.  } {1
5290: 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d   {out of memory}
52a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
52b0: 33 2d 31 30 2d 35 20 7b 0a 20 20 20 20 73 71 6c  3-10-5 {.    sql
52c0: 69 74 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44  ite3_errmsg $::D
52d0: 42 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65  B.  } {out of me
52e0: 6d 6f 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c  mory}.  ifcapabl
52f0: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20  e {utf16} {.    
5300: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30  do_test capi3-10
5310: 2d 36 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20  -6 {.      utf8 
5320: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
5330: 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b  6 $::DB].    } {
5340: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
5350: 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   }.  db close.  
5360: 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67  sqlite3_memdebug
5370: 5f 66 61 69 6c 20 2d 31 0a 7d 0a 0a 23 20 54 68  _fail -1.}..# Th
5380: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
5390: 73 20 2d 20 63 61 70 69 33 2d 31 31 2e 2a 20 2d  s - capi3-11.* -
53a0: 20 74 65 73 74 20 74 68 61 74 20 61 20 43 4f 4d   test that a COM
53b0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a  MIT or ROLLBACK.
53c0: 23 20 73 74 61 74 65 6d 65 6e 74 20 69 73 73 75  # statement issu
53d0: 65 64 20 77 68 69 6c 65 20 74 68 65 72 65 20 61  ed while there a
53e0: 72 65 20 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e  re still outstan
53f0: 64 69 6e 67 20 56 4d 73 20 74 68 61 74 20 61 72  ding VMs that ar
5400: 65 20 70 61 72 74 20 6f 66 0a 23 20 74 68 65 20  e part of.# the 
5410: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c  transaction fail
5420: 73 2e 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65  s..sqlite3 db te
5430: 73 74 2e 64 62 0a 73 65 74 20 44 42 20 5b 73 71  st.db.set DB [sq
5440: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
5450: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c  _pointer db].sql
5460: 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73  ite_register_tes
5470: 74 5f 66 75 6e 63 74 69 6f 6e 20 24 44 42 20 66  t_function $DB f
5480: 75 6e 63 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  unc.do_test capi
5490: 33 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  3-11.1 {.  execs
54a0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
54b0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
54c0: 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49   t1(a, b);.    I
54d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
54e0: 4c 55 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a  LUES(1, 'int');.
54f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5500: 74 31 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f  t1 VALUES(2, 'no
5510: 74 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20  tatype');.  }.} 
5520: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5530: 2d 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69  -11.1.1 {.  sqli
5540: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5550: 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65  it $DB.} 0.do_te
5560: 73 74 20 63 61 70 69 33 2d 31 31 2e 32 20 7b 0a  st capi3-11.2 {.
5570: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
5580: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
5590: 22 53 45 4c 45 43 54 20 66 75 6e 63 28 62 2c 20  "SELECT func(b, 
55a0: 61 29 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54  a) FROM t1" -1 T
55b0: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  AIL].  sqlite3_s
55c0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
55d0: 49 54 45 5f 52 4f 57 7d 0a 0a 23 20 41 73 20 6f  ITE_ROW}..# As o
55e0: 66 20 33 2e 36 2e 35 20 61 20 43 4f 4d 4d 49 54  f 3.6.5 a COMMIT
55f0: 20 69 73 20 4f 4b 20 64 75 72 69 6e 67 20 77 68   is OK during wh
5600: 69 6c 65 20 61 20 71 75 65 72 79 20 69 73 20 73  ile a query is s
5610: 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 20 2d 0a 23  till running -.#
5620: 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69   as long as it i
5630: 73 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 71 75  s a read-only qu
5640: 65 72 79 20 61 6e 64 20 6e 6f 74 20 61 6e 20 69  ery and not an i
5650: 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
5660: 77 72 69 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  write..#.do_test
5670: 20 63 61 70 69 33 2d 31 31 2e 33 2e 31 20 7b 0a   capi3-11.3.1 {.
5680: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5690: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
56a0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
56b0: 70 69 33 2d 31 31 2e 33 2e 32 20 7b 0a 20 20 73  pi3-11.3.2 {.  s
56c0: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
56d0: 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53  errcode $DB.} {S
56e0: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
56f0: 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 33 20 7b  t capi3-11.3.3 {
5700: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5710: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5720: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  1.do_test capi3-
5730: 31 31 2e 33 2e 34 20 7b 0a 20 20 64 62 20 65 76  11.3.4 {.  db ev
5740: 61 6c 20 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  al {PRAGMA lock_
5750: 73 74 61 74 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20  status}.} {main 
5760: 73 68 61 72 65 64 20 74 65 6d 70 20 63 6c 6f 73  shared temp clos
5770: 65 64 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70  ed}..do_test cap
5780: 69 33 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69  i3-11.4 {.  sqli
5790: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
57a0: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
57b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
57c0: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .5 {.  sqlite3_f
57d0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
57e0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
57f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5800: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
5810: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5820: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OM t1;.  }.} {0 
5830: 7b 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70  {1 int 2 notatyp
5840: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
5850: 33 2d 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74  3-11.7 {.  sqlit
5860: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5870: 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73  t $DB.} 1.do_tes
5880: 74 20 63 61 70 69 33 2d 31 31 2e 38 20 7b 0a 20  t capi3-11.8 {. 
5890: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
58a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
58b0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
58c0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b  TO t2 VALUES(1);
58d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
58e0: 20 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20   t2 VALUES(2);. 
58f0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e     BEGIN;.    IN
5900: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
5910: 55 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  UES(3);.  }.} {}
5920: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5930: 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  1.8.1 {.  sqlite
5940: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5950: 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74   $DB.} 0.do_test
5960: 20 63 61 70 69 33 2d 31 31 2e 39 20 7b 0a 20 20   capi3-11.9 {.  
5970: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
5980: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53  3_prepare $DB "S
5990: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22  ELECT a FROM t2"
59a0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
59b0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
59c0: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
59d0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39  _test capi3-11.9
59e0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .1 {.  sqlite3_g
59f0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
5a00: 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 0.do_test ca
5a10: 70 69 33 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63  pi3-11.9.2 {.  c
5a20: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f  atchsql {.    RO
5a30: 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 31  LLBACK;.  }.} {1
5a40: 20 7b 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   {cannot rollbac
5a50: 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
5a60: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
5a70: 6e 20 70 72 6f 67 72 65 73 73 7d 7d 0a 64 6f 5f  n progress}}.do_
5a80: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39 2e  test capi3-11.9.
5a90: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  3 {.  sqlite3_ge
5aa0: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5ab0: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5ac0: 69 33 2d 31 31 2e 31 30 20 7b 0a 20 20 73 71 6c  i3-11.10 {.  sql
5ad0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5ae0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
5af0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5b00: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  11 {.  sqlite3_s
5b10: 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  tep $STMT.} {SQL
5b20: 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74  ITE_ROW}.do_test
5b30: 20 63 61 70 69 33 2d 31 31 2e 31 32 20 7b 0a 20   capi3-11.12 {. 
5b40: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5b50: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  TMT.} {SQLITE_DO
5b60: 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  NE}.do_test capi
5b70: 33 2d 31 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69  3-11.13 {.  sqli
5b80: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
5b90: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
5ba0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5bb0: 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.14 {.  execsql
5bc0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
5bd0: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
5be0: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63  1 2 3}.do_test c
5bf0: 61 70 69 33 2d 31 31 2e 31 34 2e 31 20 7b 0a 20  api3-11.14.1 {. 
5c00: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5c10: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a  ocommit $DB.} 0.
5c20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5c30: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
5c40: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5c50: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5c60: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5c70: 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  5.1 {.  sqlite3_
5c80: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
5c90: 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63  DB.} 1.do_test c
5ca0: 61 70 69 33 2d 31 31 2e 31 36 20 7b 0a 20 20 65  api3-11.16 {.  e
5cb0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5cc0: 45 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT a FROM t2;. 
5cd0: 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 23 20 53 61   }.} {1 2}..# Sa
5ce0: 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 74 68  nity check on th
5cf0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
5d00: 27 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 27  'outstanding VM'
5d10: 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 61 6e 79  . This means any
5d20: 20 56 4d 0a 23 20 74 68 61 74 20 68 61 73 20 68   VM.# that has h
5d30: 61 64 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ad sqlite3_step(
5d40: 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20 72 65  ) called more re
5d50: 63 65 6e 74 6c 79 20 74 68 61 6e 20 73 71 6c 69  cently than sqli
5d60: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f  te3_finalize() o
5d70: 72 0a 23 20 73 71 6c 69 74 65 33 5f 72 65 73 65  r.# sqlite3_rese
5d80: 74 28 29 2e 20 53 6f 20 61 20 56 4d 20 74 68 61  t(). So a VM tha
5d90: 74 20 68 61 73 20 6a 75 73 74 20 62 65 65 6e 20  t has just been 
5da0: 70 72 65 70 61 72 65 64 20 6f 72 20 72 65 73 65  prepared or rese
5db0: 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63 6f 75  t does not.# cou
5dc0: 6e 74 20 61 73 20 61 6e 20 61 63 74 69 76 65 20  nt as an active 
5dd0: 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  VM..do_test capi
5de0: 33 2d 31 31 2e 31 37 20 7b 0a 20 20 65 78 65 63  3-11.17 {.  exec
5df0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
5e00: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5e10: 74 20 63 61 70 69 33 2d 31 31 2e 31 38 20 7b 0a  t capi3-11.18 {.
5e20: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
5e30: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
5e40: 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  "SELECT a FROM t
5e50: 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61  1" -1 TAIL].  ca
5e60: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5e70: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5e80: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5e90: 31 31 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65  11.19 {.  sqlite
5ea0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
5eb0: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
5ec0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32 30 20  est capi3-11.20 
5ed0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5ee0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f     BEGIN;.    CO
5ef0: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  MMIT;.  }.} {0 {
5f00: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
5f10: 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74  -11.20 {.  sqlit
5f20: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
5f30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5f40: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31  COMMIT;.  }.} {1
5f50: 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   {cannot commit 
5f60: 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
5f70: 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f   is active}}.do_
5f80: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32 31  test capi3-11.21
5f90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
5fa0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
5fb0: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68 65  QLITE_OK}..# The
5fc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
5fd0: 20 2d 20 63 61 70 69 33 2d 31 32 2e 2a 20 2d 20   - capi3-12.* - 
5fe0: 63 68 65 63 6b 20 74 68 61 74 20 69 74 73 20 4f  check that its O
5ff0: 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23 20 74  k to start a.# t
6000: 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65  ransaction while
6010: 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 61   other VMs are a
6020: 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61 74 20  ctive, and that 
6030: 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63 75 74  its Ok to execut
6040: 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64 61 74  e.# atomic updat
6050: 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 73  es in the same s
6060: 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f 5f 74  ituation .#.do_t
6070: 65 73 74 20 63 61 70 69 33 2d 31 32 2e 31 20 7b  est capi3-12.1 {
6080: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6090: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
60a0: 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   "SELECT a FROM 
60b0: 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t2" -1 TAIL].  s
60c0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
60d0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
60e0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
60f0: 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.2 {.  catchsql
6100: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
6110: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20  TO t1 VALUES(3, 
6120: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  NULL);.  }.} {0 
6130: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
6140: 33 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  3-12.3 {.  catch
6150: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
6160: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
6170: 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  4);.  }.} {0 {}}
6180: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6190: 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.4 {.  catchsql
61a0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
61b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
61c0: 20 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c 4c 29   VALUES(4, NULL)
61d0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
61e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e  o_test capi3-12.
61f0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  5 {.  sqlite3_st
6200: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
6210: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
6220: 63 61 70 69 33 2d 31 32 2e 35 2e 31 20 7b 0a 20  capi3-12.5.1 {. 
6230: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6240: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
6250: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
6260: 2d 31 32 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -12.6 {.  sqlite
6270: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
6280: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f  SQLITE_DONE}.do_
6290: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 37 20  test capi3-12.7 
62a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
62b0: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
62c0: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
62d0: 20 63 61 70 69 33 2d 31 32 2e 38 20 7b 0a 20 20   capi3-12.8 {.  
62e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f  execsql {.    CO
62f0: 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54  MMIT;.    SELECT
6300: 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   a FROM t1;.  }.
6310: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 54  } {1 2 3 4}..# T
6320: 65 73 74 20 63 61 73 65 73 20 63 61 70 69 33 2d  est cases capi3-
6330: 31 33 2e 2a 20 74 65 73 74 20 74 68 65 20 73 71  13.* test the sq
6340: 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
6350: 69 6e 67 73 28 29 20 61 6e 64 20 0a 23 20 73 71  ings() and .# sq
6360: 6c 69 74 65 33 5f 73 6c 65 65 70 20 41 50 49 73  lite3_sleep APIs
6370: 2e 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  ..#.if {[llength
6380: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands 
6390: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
63a0: 6e 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20  ndings]]>0} {.  
63b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33  do_test capi3-13
63c0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
63d0: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
63e0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
63f0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
6400: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6410: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6420: 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29 22 20 2d   VALUES(?, ?)" -
6430: 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69  1 TAIL].    sqli
6440: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
6450: 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d   } {SQLITE_DONE}
6460: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
6470: 2d 31 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -13.2 {.    sqli
6480: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6490: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
64a0: 5f 74 65 78 74 20 24 53 54 4d 54 20 31 20 68 65  _text $STMT 1 he
64b0: 6c 6c 6f 20 35 0a 20 20 20 20 73 71 6c 69 74 65  llo 5.    sqlite
64c0: 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d  3_bind_text $STM
64d0: 54 20 32 20 77 6f 72 6c 64 20 35 0a 20 20 20 20  T 2 world 5.    
64e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
64f0: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44  MT.  } {SQLITE_D
6500: 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  ONE}.  do_test c
6510: 61 70 69 33 2d 31 33 2e 33 20 7b 0a 20 20 20 20  api3-13.3 {.    
6520: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6530: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
6540: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 24  clear_bindings $
6550: 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33  STMT.    sqlite3
6560: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20  _step $STMT.  } 
6570: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20  {SQLITE_DONE}.  
6580: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33  do_test capi3-13
6590: 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  -4 {.    sqlite3
65a0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
65b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
65c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
65d0: 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M t1;.    }.  } 
65e0: 7b 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72  {{} {} hello wor
65f0: 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b  ld {} {}}.}.if {
6600: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
6610: 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65 33 5f  ommands sqlite3_
6620: 73 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64  sleep]]>0} {.  d
6630: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33 2d  o_test capi3-13-
6640: 35 20 7b 0a 20 20 20 20 73 65 74 20 6d 73 20 5b  5 {.    set ms [
6650: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 38 30  sqlite3_sleep 80
6660: 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 6d 73 3d  ].    expr {$ms=
6670: 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30 30 30  =80 || $ms==1000
6680: 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 54  }.  } {1}.}..# T
6690: 69 63 6b 65 74 20 23 31 32 31 39 3a 20 20 4d 61  icket #1219:  Ma
66a0: 6b 65 20 73 75 72 65 20 62 69 6e 64 69 6e 67 20  ke sure binding 
66b0: 41 50 49 73 20 63 61 6e 20 68 61 6e 64 6c 65 20  APIs can handle 
66c0: 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a  a NULL pointer..
66d0: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
66e0: 31 34 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20 20  14.1-misuse {.  
66f0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 73  set rc [catch {s
6700: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
6710: 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20 6d 73   0 1 hello 5} ms
6720: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20  g].  lappend rc 
6730: 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54 45  $msg.} {1 SQLITE
6740: 5f 4d 49 53 55 53 45 7d 0a 0a 23 20 54 69 63 6b  _MISUSE}..# Tick
6750: 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e 6f 72  et #1650:  Honor
6760: 20 74 68 65 20 6e 42 79 74 65 73 20 70 61 72 61   the nBytes para
6770: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
6780: 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f 5f 74  _prepare..#.do_t
6790: 65 73 74 20 63 61 70 69 33 2d 31 35 2e 31 20 7b  est capi3-15.1 {
67a0: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
67b0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 20 20  CT * FROM t2}.  
67c0: 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74 72 69  set nbytes [stri
67d0: 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c 5d 0a  ng length $sql].
67e0: 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b 20 57    append sql { W
67f0: 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73 65 74  HERE a==1}.  set
6800: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6810: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6820: 24 6e 62 79 74 65 73 20 54 41 49 4c 5d 0a 20 20  $nbytes TAIL].  
6830: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6840: 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  MT.  sqlite3_col
6850: 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a  umn_int $STMT 0.
6860: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } {1}.do_test ca
6870: 70 69 33 2d 31 35 2e 32 20 7b 0a 20 20 73 71 6c  pi3-15.2 {.  sql
6880: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6890: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
68a0: 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b  _int $STMT 0.} {
68b0: 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  2}.do_test capi3
68c0: 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -15.3 {.  sqlite
68d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
68e0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
68f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e  o_test capi3-15.
6900: 34 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31  4 {.  #        1
6910: 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37  23456789 1234567
6920: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
6930: 43 54 20 31 32 33 34 35 36 37 38 39 30 7d 0a 20  CT 1234567890}. 
6940: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6950: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
6960: 73 71 6c 20 38 20 54 41 49 4c 5d 0a 20 20 73 71  sql 8 TAIL].  sq
6970: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6980: 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c 69 74  .  set v1 [sqlit
6990: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
69a0: 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33  TMT 0].  sqlite3
69b0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
69c0: 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 7d 0a 64    set v1.} {1}.d
69d0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e  o_test capi3-15.
69e0: 35 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31  5 {.  #        1
69f0: 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37  23456789 1234567
6a00: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
6a10: 43 54 20 31 32 33 34 35 36 37 38 39 30 7d 0a 20  CT 1234567890}. 
6a20: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6a30: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
6a40: 73 71 6c 20 39 20 54 41 49 4c 5d 0a 20 20 73 71  sql 9 TAIL].  sq
6a50: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6a60: 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c 69 74  .  set v1 [sqlit
6a70: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6a80: 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33  TMT 0].  sqlite3
6a90: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6aa0: 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 7d 0a    set v1.} {12}.
6ab0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
6ac0: 2e 36 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20  .6 {.  #        
6ad0: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
6ae0: 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  7.  set sql {SEL
6af0: 45 43 54 20 31 32 33 34 35 36 37 38 39 30 7d 0a  ECT 1234567890}.
6b00: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6b10: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
6b20: 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a 20 20  $sql 12 TAIL].  
6b30: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6b40: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
6b50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6b60: 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74  $STMT 0].  sqlit
6b70: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6b80: 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32  T.  set v1.} {12
6b90: 33 34 35 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  345}.do_test cap
6ba0: 69 33 2d 31 35 2e 37 20 7b 0a 20 20 23 20 20 20  i3-15.7 {.  #   
6bb0: 20 20 20 20 20 31 32 33 34 35 36 37 38 39 20 31       123456789 1
6bc0: 32 33 34 35 36 37 0a 20 20 73 65 74 20 73 71 6c  234567.  set sql
6bd0: 20 7b 53 45 4c 45 43 54 20 31 32 2e 33 34 35 36   {SELECT 12.3456
6be0: 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54 4d 54  7890}.  set STMT
6bf0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6c00: 65 20 24 44 42 20 24 73 71 6c 20 31 32 20 54 41  e $DB $sql 12 TA
6c10: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
6c20: 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76  ep $STMT.  set v
6c30: 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  1 [sqlite3_colum
6c40: 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 30  n_double $STMT 0
6c50: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6c60: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
6c70: 20 76 31 0a 7d 20 7b 31 32 2e 33 34 7d 0a 64 6f   v1.} {12.34}.do
6c80: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 38  _test capi3-15.8
6c90: 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20 31 32   {.  #        12
6ca0: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 0a  3456789 1234567.
6cb0: 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43    set sql {SELEC
6cc0: 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d 0a 20  T 12.34567890}. 
6cd0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
6ce0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
6cf0: 73 71 6c 20 31 34 20 54 41 49 4c 5d 0a 20 20 73  sql 14 TAIL].  s
6d00: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6d10: 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c 69  T.  set v1 [sqli
6d20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
6d30: 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c  e $STMT 0].  sql
6d40: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
6d50: 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b  TMT.  set v1.} {
6d60: 31 32 2e 33 34 35 36 7d 0a 0a 23 20 4d 61 6b 65  12.3456}..# Make
6d70: 20 73 75 72 65 20 63 6f 64 65 20 69 73 20 61 6c   sure code is al
6d80: 77 61 79 73 20 67 65 6e 65 72 61 74 65 64 20 65  ways generated e
6d90: 76 65 6e 20 69 66 20 61 6e 20 49 46 20 45 58 49  ven if an IF EXI
6da0: 53 54 53 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54  STS or .# IF NOT
6db0: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
6dc0: 73 20 70 72 65 73 65 6e 74 20 74 68 61 74 20 74  s present that t
6dd0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
6de0: 74 20 6f 72 0a 23 20 64 6f 65 73 20 65 78 69 73  t or.# does exis
6df0: 74 73 2e 20 20 54 68 61 74 20 77 61 79 20 77 65  ts.  That way we
6e00: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 68 61 76   will always hav
6e10: 65 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  e a prepared sta
6e20: 74 65 6d 65 6e 74 0a 23 20 74 6f 20 65 78 70 69  tement.# to expi
6e30: 72 65 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  re when the sche
6e40: 6d 61 20 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f  ma changes..#.do
6e50: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36 2e 31  _test capi3-16.1
6e60: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 44 52   {.  set sql {DR
6e70: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
6e80: 54 53 20 74 33 7d 0a 20 20 73 65 74 20 53 54 4d  TS t3}.  set STM
6e90: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6ea0: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
6eb0: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
6ec0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
6ed0: 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d  expr {$STMT!=""}
6ee0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {1}.do_test c
6ef0: 61 70 69 33 2d 31 36 2e 32 20 7b 0a 20 20 73 65  api3-16.2 {.  se
6f00: 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  t sql {CREATE TA
6f10: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
6f20: 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73 65 74  S t1(x,y)}.  set
6f30: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6f40: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6f50: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6f60: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6f70: 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21  T.  expr {$STMT!
6f80: 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75  =""}.} {1}..# Bu
6f90: 74 20 73 74 69 6c 6c 20 77 65 20 64 6f 20 6e 6f  t still we do no
6fa0: 74 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  t generate code 
6fb0: 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53  if there is no S
6fc0: 51 4c 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  QL.#.do_test cap
6fd0: 69 33 2d 31 36 2e 33 20 7b 0a 20 20 73 65 74 20  i3-16.3 {.  set 
6fe0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6ff0: 65 70 61 72 65 20 24 44 42 20 7b 7d 20 2d 31 20  epare $DB {} -1 
7000: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
7010: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7020: 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22   expr {$STMT==""
7030: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
7040: 63 61 70 69 33 2d 31 36 2e 34 20 7b 0a 20 20 73  capi3-16.4 {.  s
7050: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
7060: 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b 3b 7d  _prepare $DB {;}
7070: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
7080: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
7090: 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54  MT.  expr {$STMT
70a0: 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54  ==""}.} {1}..# T
70b0: 69 63 6b 65 74 20 23 32 34 32 36 3a 20 20 4d 69  icket #2426:  Mi
70c0: 73 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  suse of sqlite3_
70d0: 63 6f 6c 75 6d 6e 5f 2a 20 62 79 20 63 61 6c 6c  column_* by call
70e0: 69 6e 67 20 69 74 20 61 66 74 65 72 0a 23 20 61  ing it after.# a
70f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 73   sqlite3_reset s
7100: 68 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73  hould be harmles
7110: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  s..#.do_test cap
7120: 69 33 2d 31 37 2e 31 20 7b 0a 20 20 73 65 74 20  i3-17.1 {.  set 
7130: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7140: 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c 45 43  epare $DB {SELEC
7150: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  T * FROM t2} -1 
7160: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
7170: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c  step $STMT.  sql
7180: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
7190: 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f  $STMT 0.} {1}.do
71a0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37 2e 32  _test capi3-17.2
71b0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
71c0: 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  et $STMT.  sqlit
71d0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
71e0: 54 4d 54 20 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  TMT 0.} {0}.do_t
71f0: 65 73 74 20 63 61 70 69 33 2d 31 37 2e 33 20 7b  est capi3-17.3 {
7200: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
7210: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c  ize $STMT.} {SQL
7220: 49 54 45 5f 4f 4b 7d 0a 0a 23 20 56 65 72 69 66  ITE_OK}..# Verif
7230: 79 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 73  y that sqlite3_s
7240: 74 65 70 28 29 20 66 61 69 6c 73 20 77 69 74 68  tep() fails with
7250: 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
7260: 41 20 65 72 72 6f 72 0a 23 20 77 68 65 6e 20 74  A error.# when t
7270: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
7280: 70 72 65 70 61 72 65 64 20 77 69 74 68 20 73 71  prepared with sq
7290: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
72a0: 28 6e 6f 74 0a 23 20 73 71 6c 69 74 65 33 5f 70  (not.# sqlite3_p
72b0: 72 65 70 61 72 65 5f 76 32 28 29 29 20 61 6e 64  repare_v2()) and
72c0: 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   the schema has 
72d0: 63 68 61 6e 67 65 64 2e 0a 23 0a 64 6f 5f 74 65  changed..#.do_te
72e0: 73 74 20 63 61 70 69 33 2d 31 38 2e 31 20 7b 0a  st capi3-18.1 {.
72f0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7300: 74 65 33 5f 70 72 65 70 61 72 65 20 64 62 20 7b  te3_prepare db {
7310: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
7320: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  } -1 TAIL].  sql
7330: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7340: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43 52 45  .  db2 eval {CRE
7350: 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 29 7d  ATE TABLE t3(x)}
7360: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73  .  db2 close.  s
7370: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
7380: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f  T.} {SQLITE_ERRO
7390: 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  R}.do_test capi3
73a0: 2d 31 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -18.2 {.  sqlite
73b0: 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20  3_reset $STMT.  
73c0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
73d0: 64 62 0a 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48  db.} {SQLITE_SCH
73e0: 45 4d 41 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  EMA}.do_test cap
73f0: 69 33 2d 31 38 2e 33 20 7b 0a 20 20 73 71 6c 69  i3-18.3 {.  sqli
7400: 74 65 33 5f 65 72 72 6d 73 67 20 64 62 0a 7d 20  te3_errmsg db.} 
7410: 7b 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  {database schema
7420: 20 68 61 73 20 63 68 61 6e 67 65 64 7d 0a 23 20   has changed}.# 
7430: 54 68 65 20 65 72 72 6f 72 20 70 65 72 73 69 73  The error persis
7440: 74 20 6f 6e 20 72 65 74 72 79 20 77 68 65 6e 20  t on retry when 
7450: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
7460: 29 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 2e  ) has been used.
7470: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
7480: 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.4 {.  sqlite3_
7490: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
74a0: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
74b0: 65 73 74 20 63 61 70 69 33 2d 31 38 2e 35 20 7b  est capi3-18.5 {
74c0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
74d0: 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33   $STMT.  sqlite3
74e0: 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20 7b 53  _errcode db.} {S
74f0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 64 6f  QLITE_SCHEMA}.do
7500: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 36  _test capi3-18.6
7510: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
7520: 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61 62 61  msg db.} {databa
7530: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
7540: 61 6e 67 65 64 7d 0a 73 71 6c 69 74 65 33 5f 66  anged}.sqlite3_f
7550: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 0a 23  inalize $STMT..#
7560: 20 54 69 63 6b 65 74 20 23 33 31 33 34 2e 20 20   Ticket #3134.  
7570: 50 72 65 70 61 72 65 20 61 20 73 74 61 74 65 6d  Prepare a statem
7580: 65 6e 74 20 77 69 74 68 20 61 6e 20 6e 42 79 74  ent with an nByt
7590: 65 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  es parameter of 
75a0: 30 2e 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74  0..# Make sure t
75b0: 68 69 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63  his works correc
75c0: 74 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  tly and does not
75d0: 20 72 65 66 65 72 65 6e 63 65 20 6d 65 6d 6f 72   reference memor
75e0: 79 20 6f 75 74 20 6f 66 0a 23 20 72 61 6e 67 65  y out of.# range
75f0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
7600: 33 2d 31 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74  3-19.1 {.  sqlit
7610: 65 33 5f 70 72 65 70 61 72 65 5f 74 6b 74 33 31  e3_prepare_tkt31
7620: 33 34 20 64 62 0a 7d 20 7b 7d 0a 0a 23 20 54 65  34 db.} {}..# Te
7630: 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72  sts of the inter
7640: 66 61 63 65 20 77 68 65 6e 20 6e 6f 20 56 46 53  face when no VFS
7650: 20 69 73 20 72 65 67 69 73 74 65 72 65 64 2e 0a   is registered..
7660: 23 0a 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69  #.if {![info exi
7670: 73 74 73 20 74 65 73 74 65 72 5f 64 6f 5f 62 69  sts tester_do_bi
7680: 6e 61 72 79 6c 6f 67 5d 7d 20 7b 0a 20 20 64 62  narylog]} {.  db
7690: 20 63 6c 6f 73 65 0a 20 20 76 66 73 5f 75 6e 72   close.  vfs_unr
76a0: 65 67 69 73 74 65 72 5f 61 6c 6c 0a 20 20 64 6f  egister_all.  do
76b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 32 30 2e 31  _test capi3-20.1
76c0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   {.    sqlite3_s
76d0: 6c 65 65 70 20 31 30 30 0a 20 20 7d 20 7b 30 7d  leep 100.  } {0}
76e0: 0a 20 20 76 66 73 5f 72 65 72 65 67 69 73 74 65  .  vfs_reregiste
76f0: 72 5f 61 6c 6c 0a 7d 0a 0a 66 69 6e 69 73 68 5f  r_all.}..finish_
7700: 74 65 73 74 0a                                   test.