/ Hex Artifact Content
Login

Artifact f0718f4f90d0efdc980119bfbdf1d7f1541ee5ef:


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 73 65  ir/tester.tcl.se
0260: 74 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20 63  t ::testprefix c
0270: 61 70 69 33 0a 0a 23 20 44 6f 20 6e 6f 74 20 75  api3..# Do not u
0280: 73 65 20 61 20 63 6f 64 65 63 20 66 6f 72 20 74  se a codec for t
0290: 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ests in this fil
02a0: 65 2c 20 61 73 20 74 68 65 20 64 61 74 61 62 61  e, as the databa
02b0: 73 65 20 66 69 6c 65 20 69 73 0a 23 20 6d 61 6e  se file is.# man
02c0: 69 70 75 6c 61 74 65 64 20 64 69 72 65 63 74 6c  ipulated directl
02d0: 79 20 75 73 69 6e 67 20 74 63 6c 20 73 63 72 69  y using tcl scri
02e0: 70 74 73 20 28 75 73 69 6e 67 20 74 68 65 20 5b  pts (using the [
02f0: 68 65 78 69 6f 5f 77 72 69 74 65 5d 20 63 6f 6d  hexio_write] com
0300: 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e 6f 74 5f  mand)..#.do_not_
0310: 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20 52 65 74  use_codec..# Ret
0320: 75 72 6e 20 74 68 65 20 55 54 46 2d 31 36 20 72  urn the UTF-16 r
0330: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
0340: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 55 54   the supplied UT
0350: 46 2d 38 20 73 74 72 69 6e 67 20 24 73 74 72 2e  F-8 string $str.
0360: 0a 23 20 49 66 20 24 6e 74 20 69 73 20 74 72 75  .# If $nt is tru
0370: 65 2c 20 61 70 70 65 6e 64 20 74 77 6f 20 30 78  e, append two 0x
0380: 30 30 20 62 79 74 65 73 20 61 73 20 61 20 6e 75  00 bytes as a nu
0390: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a 70 72  l terminator..pr
03a0: 6f 63 20 75 74 66 31 36 20 7b 73 74 72 20 7b 6e  oc utf16 {str {n
03b0: 74 20 31 7d 7d 20 7b 0a 20 20 73 65 74 20 72 20  t 1}} {.  set r 
03c0: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
03d0: 74 74 6f 20 75 6e 69 63 6f 64 65 20 24 73 74 72  tto unicode $str
03e0: 5d 0a 20 20 69 66 20 7b 24 6e 74 7d 20 7b 0a 20  ].  if {$nt} {. 
03f0: 20 20 20 61 70 70 65 6e 64 20 72 20 22 5c 78 30     append r "\x0
0400: 30 5c 78 30 30 22 0a 20 20 7d 0a 20 20 72 65 74  0\x00".  }.  ret
0410: 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 52 65 74 75  urn $r.}..# Retu
0420: 72 6e 20 74 68 65 20 55 54 46 2d 38 20 72 65 70  rn the UTF-8 rep
0430: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
0440: 68 65 20 73 75 70 70 6c 69 65 64 20 55 54 46 2d  he supplied UTF-
0450: 31 36 20 73 74 72 69 6e 67 20 24 73 74 72 2e 20  16 string $str. 
0460: 0a 70 72 6f 63 20 75 74 66 38 20 7b 73 74 72 7d  .proc utf8 {str}
0470: 20 7b 0a 20 20 23 20 49 66 20 24 73 74 72 20 65   {.  # If $str e
0480: 6e 64 73 20 69 6e 20 74 77 6f 20 30 78 30 30 20  nds in two 0x00 
0490: 30 78 30 30 20 62 79 74 65 73 2c 20 6b 6e 6f 63  0x00 bytes, knoc
04a0: 6b 20 74 68 65 73 65 20 6f 66 66 20 62 65 66 6f  k these off befo
04b0: 72 65 0a 20 20 23 20 63 6f 6e 76 65 72 74 69 6e  re.  # convertin
04c0: 67 20 74 6f 20 55 54 46 2d 38 20 75 73 69 6e 67  g to UTF-8 using
04d0: 20 54 43 4c 2e 0a 20 20 62 69 6e 61 72 79 20 73   TCL..  binary s
04e0: 63 61 6e 20 24 73 74 72 20 5c 63 2a 20 76 61 6c  can $str \c* val
04f0: 73 0a 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20  s.  if {[lindex 
0500: 24 76 61 6c 73 20 65 6e 64 5d 3d 3d 30 20 26 26  $vals end]==0 &&
0510: 20 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65   [lindex $vals e
0520: 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20  nd-1]==0} {.    
0530: 73 65 74 20 73 74 72 20 5b 62 69 6e 61 72 79 20  set str [binary 
0540: 66 6f 72 6d 61 74 20 5c 63 2a 20 5b 6c 72 61 6e  format \c* [lran
0550: 67 65 20 24 76 61 6c 73 20 30 20 65 6e 64 2d 32  ge $vals 0 end-2
0560: 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65 74 20 72 20  ]].  }..  set r 
0570: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
0580: 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20 24 73  tfrom unicode $s
0590: 74 72 5d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a  tr].  return $r.
05a0: 7d 0a 0a 23 20 54 68 65 73 65 20 74 65 73 74 73  }..# These tests
05b0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 74 68 6f 73   complement thos
05c0: 65 20 69 6e 20 63 61 70 69 32 2e 74 65 73 74 2e  e in capi2.test.
05d0: 20 54 68 65 79 20 61 72 65 20 6f 72 67 61 6e 69   They are organi
05e0: 7a 65 64 0a 23 20 61 73 20 66 6f 6c 6c 6f 77 73  zed.# as follows
05f0: 3a 0a 23 0a 23 20 63 61 70 69 33 2d 31 2e 2a 3a  :.#.# capi3-1.*:
0600: 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f 70 72   Test sqlite3_pr
0610: 65 70 61 72 65 20 0a 23 20 63 61 70 69 33 2d 32  epare .# capi3-2
0620: 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74 65 33  .*: Test sqlite3
0630: 5f 70 72 65 70 61 72 65 31 36 0a 23 20 63 61 70  _prepare16.# cap
0640: 69 33 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c  i3-3.*: Test sql
0650: 69 74 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69  ite3_open.# capi
0660: 33 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69  3-4.*: Test sqli
0670: 74 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61 70  te3_open16.# cap
0680: 69 33 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68 65  i3-5.*: Test the
0690: 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74 65 33   various sqlite3
06a0: 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73 0a 23  _result_* APIs.#
06b0: 20 63 61 70 69 33 2d 36 2e 2a 3a 20 54 65 73 74   capi3-6.*: Test
06c0: 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 63 6c   that sqlite3_cl
06d0: 6f 73 65 20 66 61 69 6c 73 20 69 66 20 74 68 65  ose fails if the
06e0: 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64 69  re are outstandi
06f0: 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65 74 20 44  ng VMs..#..set D
0700: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
0710: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
0720: 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  ]..do_test capi3
0730: 2d 31 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.0 {.  sqlite3
0740: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
0750: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
0760: 63 61 70 69 33 2d 31 2e 31 20 7b 0a 20 20 73 65  capi3-1.1 {.  se
0770: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0780: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
0790: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
07a0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20  lite_master} -1 
07b0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
07c0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
07d0: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 7d 0a 64   set TAIL.} {}.d
07e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 32  o_test capi3-1.2
07f0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .1 {.  sqlite3_e
0800: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
0810: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
0820: 20 63 61 70 69 33 2d 31 2e 32 2e 32 20 7b 0a 20   capi3-1.2.2 {. 
0830: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0840: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0850: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
0860: 65 73 74 20 63 61 70 69 33 2d 31 2e 33 20 7b 0a  est capi3-1.3 {.
0870: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
0880: 20 24 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65   $DB.} {not an e
0890: 72 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 63 61  rror}.do_test ca
08a0: 70 69 33 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20  pi3-1.4 {.  set 
08b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
08c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
08d0: 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20  ter;SELECT 10}. 
08e0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
08f0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
0900: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
0910: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0920: 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c  $STMT.  set TAIL
0930: 0a 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64  .} {SELECT 10}.d
0940: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 35  o_test capi3-1.5
0950: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0960: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0970: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0980: 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54  ECT 10}.  set ST
0990: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
09a0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 5b 73 74  are $DB $sql [st
09b0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
09c0: 5d 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  ] TAIL].  sqlite
09d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
09e0: 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53  .  set TAIL.} {S
09f0: 45 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73  ELECT 10}.do_tes
0a00: 74 20 63 61 70 69 33 2d 31 2e 36 20 7b 0a 20 20  t capi3-1.6 {.  
0a10: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
0a20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0a30: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0a40: 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  0}.  set STMT [s
0a50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
0a60: 44 42 20 24 73 71 6c 20 5b 65 78 70 72 20 5b 73  DB $sql [expr [s
0a70: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71  tring length $sq
0a80: 6c 5d 2b 31 5d 20 54 41 49 4c 5d 0a 20 20 73 71  l]+1] TAIL].  sq
0a90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0aa0: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0ab0: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 0a 64  } {SELECT 10}..d
0ac0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 37  o_test capi3-1.7
0ad0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0ae0: 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20  LECT namex FROM 
0af0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
0b00: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
0b10: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0b20: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
0b30: 2d 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b  -1 TAIL].  }.} {
0b40: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
0b50: 2d 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -1.8.1 {.  sqlit
0b60: 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  e3_errcode $DB.}
0b70: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
0b80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e  do_test capi3-1.
0b90: 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.2 {.  sqlite3_
0ba0: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
0bb0: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 45   $DB.} {SQLITE_E
0bc0: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61  RROR}.do_test ca
0bd0: 70 69 33 2d 31 2e 39 20 7b 0a 20 20 73 71 6c 69  pi3-1.9 {.  sqli
0be0: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d  te3_errmsg $DB.}
0bf0: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
0c00: 3a 20 6e 61 6d 65 78 7d 0a 0a 69 66 63 61 70 61  : namex}..ifcapa
0c10: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
0c20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0c30: 31 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 31  1 {.    set sql1
0c40: 36 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54  6 [utf16 {SELECT
0c50: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0c60: 65 5f 6d 61 73 74 65 72 7d 5d 0a 20 20 20 20 73  e_master}].    s
0c70: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
0c80: 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20 24  _prepare16 $DB $
0c90: 73 71 6c 31 36 20 2d 31 20 3a 3a 54 41 49 4c 5d  sql16 -1 ::TAIL]
0ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
0cb0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
0cc0: 75 74 66 38 20 24 3a 3a 54 41 49 4c 0a 20 20 7d  utf8 $::TAIL.  }
0cd0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
0ce0: 70 69 33 2d 32 2e 32 20 7b 0a 20 20 20 20 73 65  pi3-2.2 {.    se
0cf0: 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53 45  t sql [utf16 {SE
0d00: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0d10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0d20: 45 43 54 20 31 30 7d 5d 0a 20 20 20 20 73 65 74  ECT 10}].    set
0d30: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0d40: 72 65 70 61 72 65 31 36 20 24 44 42 20 24 73 71  repare16 $DB $sq
0d50: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  l -1 TAIL].    s
0d60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0d70: 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24  $STMT.    utf8 $
0d80: 54 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43 54  TAIL.  } {SELECT
0d90: 20 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   10}.  do_test c
0da0: 61 70 69 33 2d 32 2e 33 20 7b 0a 20 20 20 20 73  api3-2.3 {.    s
0db0: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0dc0: 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d  ELECT namex FROM
0dd0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0de0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
0df0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0e00: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20 24  ite3_prepare16 $
0e10: 44 42 20 24 73 71 6c 20 2d 31 5d 0a 20 20 20 20  DB $sql -1].    
0e20: 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74  }.  } {1}.  do_t
0e30: 65 73 74 20 63 61 70 69 33 2d 32 2e 34 2e 31 20  est capi3-2.4.1 
0e40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
0e50: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
0e60: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
0e70: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 34  o_test capi3-2.4
0e80: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
0e90: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
0ea0: 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54  e $DB.  } {SQLIT
0eb0: 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65  E_ERROR}.  do_te
0ec0: 73 74 20 63 61 70 69 33 2d 32 2e 35 20 7b 0a 20  st capi3-2.5 {. 
0ed0: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
0ee0: 67 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75  g $DB.  } {no su
0ef0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0f00: 7d 0a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73  }..  ifcapable s
0f10: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
0f20: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0f30: 33 2d 32 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  3-2.6 {.      ex
0f40: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
0f50: 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65 28 78 29  BLE tablename(x)
0f60: 7d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 31  }.      set sql1
0f70: 36 20 5b 75 74 66 31 36 20 7b 50 52 41 47 4d 41  6 [utf16 {PRAGMA
0f80: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62   table_info("Tab
0f90: 6c 65 4e 61 6d 65 22 29 3b 20 2d 2d 65 78 63 65  leName"); --exce
0fa0: 73 73 20 74 65 78 74 7d 5d 0a 20 20 20 20 20 20  ss text}].      
0fb0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
0fc0: 33 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20  3_prepare16 $DB 
0fd0: 24 73 71 6c 31 36 20 2d 31 5d 0a 20 20 20 20 20  $sql16 -1].     
0fe0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
0ff0: 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49 54 45  TMT.    } SQLITE
1000: 5f 52 4f 57 0a 20 20 20 20 64 6f 5f 74 65 73 74  _ROW.    do_test
1010: 20 63 61 70 69 33 2d 32 2e 37 20 7b 0a 20 20 20   capi3-2.7 {.   
1020: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
1030: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
1040: 54 45 5f 44 4f 4e 45 0a 20 20 20 20 64 6f 5f 74  TE_DONE.    do_t
1050: 65 73 74 20 63 61 70 69 33 2d 32 2e 38 20 7b 0a  est capi3-2.8 {.
1060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
1070: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20  nalize $STMT.   
1080: 20 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d   } SQLITE_OK.  }
1090: 0a 0a 7d 20 3b 23 20 65 6e 64 69 66 20 75 74 66  ..} ;# endif utf
10a0: 31 36 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c  16..# rename sql
10b0: 69 74 65 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65  ite3_open sqlite
10c0: 33 5f 6f 70 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f  3_open_old.# pro
10d0: 63 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 7b  c sqlite3_open {
10e0: 66 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 7d 20 7b  fname options} {
10f0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6e 65 77  sqlite3_open_new
1100: 20 24 66 6e 61 6d 65 20 24 6f 70 74 69 6f 6e 73   $fname $options
1110: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }..do_test capi3
1120: 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32  -3.1 {.  set db2
1130: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74   [sqlite3_open t
1140: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c  est.db {}].  sql
1150: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62  ite3_errcode $db
1160: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1170: 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64  # FIX ME: Should
1180: 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61 6e   test the db han
1190: 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65  dle works..do_te
11a0: 73 74 20 63 61 70 69 33 2d 33 2e 32 20 7b 0a 20  st capi3-3.2 {. 
11b0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
11c0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
11d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
11e0: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a  3.3 {.  catch {.
11f0: 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c      set db2 [sql
1200: 69 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67 75 73  ite3_open /bogus
1210: 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 20 7b 7d  /path/test.db {}
1220: 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ].  }.  sqlite3_
1230: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
1240: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1250: 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73  CANTOPEN}.do_tes
1260: 74 20 63 61 70 69 33 2d 33 2e 34 20 7b 0a 20 20  t capi3-3.4 {.  
1270: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
1280: 64 62 32 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f  db2.} {unable to
1290: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66   open database f
12a0: 69 6c 65 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ile}.do_test cap
12b0: 69 33 2d 33 2e 35 20 7b 0a 20 20 73 71 6c 69 74  i3-3.5 {.  sqlit
12c0: 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20  e3_close $db2.} 
12d0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 69 66 20 7b  {SQLITE_OK}.if {
12e0: 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65 5f  [clang_sanitize_
12f0: 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a 20  address]==0} {. 
1300: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33   do_test capi3-3
1310: 2e 36 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20 20  .6.1-misuse {.  
1320: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
1330: 24 64 62 32 0a 20 20 7d 20 7b 53 51 4c 49 54 45  $db2.  } {SQLITE
1340: 5f 4d 49 53 55 53 45 7d 0a 20 20 64 6f 5f 74 65  _MISUSE}.  do_te
1350: 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 32 2d 6d  st capi3-3.6.2-m
1360: 69 73 75 73 65 20 7b 0a 20 20 20 20 73 71 6c 69  isuse {.    sqli
1370: 74 65 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a  te3_errmsg $db2.
1380: 20 20 7d 20 7b 6c 69 62 72 61 72 79 20 72 6f 75    } {library rou
1390: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
13a0: 6f 66 20 73 65 71 75 65 6e 63 65 7d 0a 20 20 69  of sequence}.  i
13b0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
13c0: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63   {.    do_test c
13d0: 61 70 69 33 2d 33 2e 36 2e 33 2d 6d 69 73 75 73  api3-3.6.3-misus
13e0: 65 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b  e {.      utf8 [
13f0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
1400: 20 24 64 62 32 5d 0a 20 20 20 20 7d 20 7b 6c 69   $db2].    } {li
1410: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
1420: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
1430: 65 6e 63 65 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  ence}.  }.}..do_
1440: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 37 20 7b  test capi3-3.7 {
1450: 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69  .  set db2 [sqli
1460: 74 65 33 5f 6f 70 65 6e 5d 0a 20 20 73 71 6c 69  te3_open].  sqli
1470: 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32  te3_errcode $db2
1480: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
1490: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 38  o_test capi3-3.8
14a0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
14b0: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
14c0: 45 5f 4f 4b 7d 0a 0a 23 20 72 65 6e 61 6d 65 20  E_OK}..# rename 
14d0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22 0a  sqlite3_open "".
14e0: 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33  # rename sqlite3
14f0: 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74 65  _open_old sqlite
1500: 33 5f 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62 6c  3_open..ifcapabl
1510: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f 74  e {utf16} {.do_t
1520: 65 73 74 20 63 61 70 69 33 2d 34 2e 31 20 7b 0a  est capi3-4.1 {.
1530: 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74    set db2 [sqlit
1540: 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36  e3_open16 [utf16
1550: 20 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20   test.db] {}].  
1560: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
1570: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  $db2.} {SQLITE_O
1580: 4b 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68 6f  K}.# FIX ME: Sho
1590: 75 6c 64 20 74 65 73 74 20 74 68 65 20 64 62 20  uld test the db 
15a0: 68 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f  handle works..do
15b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 32 20  _test capi3-4.2 
15c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
15d0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
15e0: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
15f0: 69 33 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68  i3-4.3 {.  catch
1600: 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20 5b   {.    set db2 [
1610: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b  sqlite3_open16 [
1620: 75 74 66 31 36 20 2f 62 6f 67 75 73 2f 70 61 74  utf16 /bogus/pat
1630: 68 2f 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20  h/test.db] {}]. 
1640: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   }.  sqlite3_err
1650: 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  code $db2.} {SQL
1660: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f  ITE_CANTOPEN}.do
1670: 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 34 20  _test capi3-4.4 
1680: 7b 0a 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65  {.  utf8 [sqlite
1690: 33 5f 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d  3_errmsg16 $db2]
16a0: 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70  .} {unable to op
16b0: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
16c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
16d0: 34 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.5 {.  sqlite3_
16e0: 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51  close $db2.} {SQ
16f0: 4c 49 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74  LITE_OK}.} ;# ut
1700: 66 31 36 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  f16..# This proc
1710: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
1720: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
1730: 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71  PI calls:.#.# sq
1740: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
1750: 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt.# sqlite3_col
1760: 75 6d 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  umn_name.# sqlit
1770: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
1780: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1790: 6e 5f 64 65 63 6c 74 79 70 65 0a 23 20 73 71 6c  n_decltype.# sql
17a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
17b0: 74 79 70 65 31 36 0a 23 0a 23 20 24 53 54 4d 54  type16.#.# $STMT
17c0: 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53   is a compiled S
17d0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74  QL statement. $t
17e0: 65 73 74 20 69 73 20 61 20 70 72 65 66 69 78 0a  est is a prefix.
17f0: 23 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73  # to use for tes
1800: 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74  t names within t
1810: 68 69 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73  his proc. $names
1820: 20 69 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20   is a list.# of 
1830: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
1840: 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
1850: 72 65 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d  returned by $STM
1860: 54 2e 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20  T..# $decltypes 
1870: 69 73 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c  is a list of col
1880: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
1890: 74 79 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e  types for $STMT.
18a0: 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a  .#.# Example:.#.
18b0: 23 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69  # set STMT [sqli
18c0: 74 65 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c  te3_prepare "SEL
18d0: 45 43 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31  ECT 1, 2, 2;" -1
18e0: 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f   DUMMY].# check_
18f0: 68 65 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b  header test1.1 {
1900: 31 20 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22  1 2 3} {"" "" ""
1910: 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68  }.#.proc check_h
1920: 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74  eader {STMT test
1930: 20 6e 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73   names decltypes
1940: 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65  } {..  # Use the
1950: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66   return value of
1960: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1970: 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64  count() to build
1980: 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63  .  # a list of c
1990: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
19a0: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
19b0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20  olumn_count.  # 
19c0: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
19d0: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
19e0: 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c  set ::idxlist [l
19f0: 69 73 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d  ist].  set ::num
1a00: 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  cols [sqlite3_co
1a10: 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54  lumn_count $STMT
1a20: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
1a30: 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f  } {$i < $::numco
1a40: 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61  ls} {incr i} {la
1a50: 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20  ppend ::idxlist 
1a60: 24 69 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  $i}..  # Column 
1a70: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20  names in UTF-8. 
1a80: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
1a90: 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65   {.    set cname
1aa0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
1ab0: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1ac0: 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d  st {lappend cnam
1ad0: 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63  elist [sqlite3_c
1ae0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54  olumn_name $STMT
1af0: 20 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63   $i]} .    set c
1b00: 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61  namelist.  } $na
1b10: 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  mes..  # Column 
1b20: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  names in UTF-16.
1b30: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
1b40: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
1b50: 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20  t $test.2 {.    
1b60: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1b70: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
1b80: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
1b90: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
1ba0: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66  d cnamelist [utf
1bb0: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
1bc0: 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24  n_name16 $STMT $
1bd0: 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i]].      }.    
1be0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1bf0: 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d      } $names.  }
1c00: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d  ..  # Column nam
1c10: 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f  es in UTF-8.  do
1c20: 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a  _test $test.3 {.
1c30: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1c40: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  t [list].    for
1c50: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
1c60: 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69  {lappend cnameli
1c70: 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  st [sqlite3_colu
1c80: 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69  mn_name $STMT $i
1c90: 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d  ]} .    set cnam
1ca0: 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73  elist.  } $names
1cb0: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d  ..  # Column nam
1cc0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69  es in UTF-16.  i
1cd0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
1ce0: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24   {.    do_test $
1cf0: 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73  test.4 {.      s
1d00: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1d10: 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  st].      foreac
1d20: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
1d30: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
1d40: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
1d50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1d60: 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ame16 $STMT $i]]
1d70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1d80: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
1d90: 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20   } $names.  }.. 
1da0: 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20   # Column names 
1db0: 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65  in UTF-8.  do_te
1dc0: 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20  st $test.5 {.   
1dd0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
1de0: 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63  list].    foreac
1df0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
1e00: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
1e10: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1e20: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24  decltype $STMT $
1e30: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1e40: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c  melist.  } $decl
1e50: 74 79 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d  types..  # Colum
1e60: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
1e70: 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  pes in UTF-16.  
1e80: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1e90: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1ea0: 24 74 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20  $test.6 {.      
1eb0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1ec0: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1ed0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1ee0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1ef0: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1f00: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1f10: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
1f20: 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20   $i]].      }.  
1f30: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1f40: 74 0a 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70  t.    } $decltyp
1f50: 65 73 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73  es.  }...  # Tes
1f60: 74 20 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61  t some out of ra
1f70: 6e 67 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a  nge conditions:.
1f80: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
1f90: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
1fa0: 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20  t $test.7 {.    
1fb0: 20 20 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20    list \.       
1fc0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1fd0: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20  _name $STMT -1] 
1fe0: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1ff0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
2000: 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20   $STMT -1] \.   
2010: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
2020: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53  lumn_decltype $S
2030: 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20  TMT -1] \.      
2040: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
2050: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
2060: 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20  MT -1] \.       
2070: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2080: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d  _name $STMT $num
2090: 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20  cols] \.        
20a0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
20b0: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75  name16 $STMT $nu
20c0: 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20  mcols] \.       
20d0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
20e0: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
20f0: 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20  $numcols] \.    
2100: 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c      [sqlite3_col
2110: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24  umn_decltype16 $
2120: 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20  STMT $numcols]. 
2130: 20 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b     } {{} {} {} {
2140: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20  } {} {} {} {}}. 
2150: 20 7d 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72   }.} ..# This pr
2160: 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  oc is used to te
2170: 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  st the following
2180: 20 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20   API calls:.#.# 
2190: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
21a0: 72 69 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c  rigin_name.# sql
21b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
21c0: 69 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  in_name16.# sqli
21d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
21e0: 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f  _name.# sqlite3_
21f0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
2200: 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  e16.# sqlite3_co
2210: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
2220: 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  me.# sqlite3_col
2230: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
2240: 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73  e16.#.# $STMT is
2250: 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20   a compiled SQL 
2260: 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74  statement. $test
2270: 20 69 73 20 61 20 70 72 65 66 69 78 0a 23 20 74   is a prefix.# t
2280: 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e  o use for test n
2290: 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69 73  ames within this
22a0: 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73   proc. $names is
22b0: 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65   a list.# of the
22c0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
22d0: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74  at should be ret
22e0: 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a  urned by $STMT..
22f0: 23 20 24 64 65 63 6c 74 79 70 65 73 20 69 73 20  # $decltypes is 
2300: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
2310: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
2320: 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a  es for $STMT..#.
2330: 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73  # Example:.#.# s
2340: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
2350: 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45 43 54  _prepare "SELECT
2360: 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55   1, 2, 2;" -1 DU
2370: 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61  MMY].# check_hea
2380: 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32  der test1.1 {1 2
2390: 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23   3} {"" "" ""}.#
23a0: 0a 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67  .proc check_orig
23b0: 69 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20  in_header {STMT 
23c0: 74 65 73 74 20 64 62 73 20 74 61 62 6c 65 73 20  test dbs tables 
23d0: 63 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73  cols} {.  # If s
23e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
23f0: 69 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20  igin_name() and 
2400: 66 72 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20  friends are not 
2410: 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20  compiled into.  
2420: 23 20 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68  # this build, th
2430: 69 73 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d  is proc is a no-
2440: 6f 70 2e 0a 20 20 69 66 63 61 70 61 62 6c 65 20  op..  ifcapable 
2450: 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b  columnmetadata {
2460: 0a 20 20 20 20 23 20 55 73 65 20 74 68 65 20 72  .    # Use the r
2470: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
2480: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
2490: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
24a0: 20 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63     # a list of c
24b0: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
24c0: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
24d0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20  olumn_count.    
24e0: 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68  # is 3, build th
24f0: 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a  e list {0 1 2}..
2500: 20 20 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73      set ::idxlis
2510: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74  t [list].    set
2520: 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69   ::numcols [sqli
2530: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
2540: 20 24 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20   $STMT].    for 
2550: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
2560: 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63  $::numcols} {inc
2570: 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a  r i} {lappend ::
2580: 69 64 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20  idxlist $i}.  . 
2590: 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e 61     # Database na
25a0: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
25b0: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38   do_test $test.8
25c0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61   {.      set cna
25d0: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
25e0: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
25f0: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20  dxlist {.       
2600: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
2610: 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  st [sqlite3_colu
2620: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
2630: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20   $STMT $i].     
2640: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e   } .      set cn
2650: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64  amelist.    } $d
2660: 62 73 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61  bs.  .    # Data
2670: 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54  base names in UT
2680: 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62  F-16.    ifcapab
2690: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20  le {utf16} {.   
26a0: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
26b0: 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  .9 {.        set
26c0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
26d0: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
26e0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
26f0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2700: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
2710: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2720: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
2730: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
2740: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65      }.        se
2750: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
2760: 20 20 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20    } $dbs.    }. 
2770: 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61   .    # Table na
2780: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2790: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
27a0: 30 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  0 {.      set cn
27b0: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
27c0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
27d0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
27e0: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
27f0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
2800: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24  umn_table_name $
2810: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
2820: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
2830: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62  elist.    } $tab
2840: 6c 65 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62  les.  .    # Tab
2850: 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  le names in UTF-
2860: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2870: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2880: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2890: 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  1 {.        set 
28a0: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
28b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
28c0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
28d0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
28e0: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
28f0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2900: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54  table_name16 $ST
2910: 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20  MT $i]].        
2920: 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  }.        set cn
2930: 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20  amelist.      } 
2940: 24 74 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20  $tables.    }.  
2950: 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61  .    # Origin na
2960: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2970: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2980: 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  2 {.      set cn
2990: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
29a0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
29b0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
29c0: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
29d0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
29e0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20  umn_origin_name 
29f0: 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20  $STMT $i].      
2a00: 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61  } .      set cna
2a10: 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f  melist.    } $co
2a20: 6c 73 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67  ls.  .    # Orig
2a30: 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  in declaration t
2a40: 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ypes in UTF-16. 
2a50: 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74     ifcapable {ut
2a60: 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f  f16} {.      do_
2a70: 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a  test $test.13 {.
2a80: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
2a90: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2aa0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2ab0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2ac0: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d      lappend cnam
2ad0: 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c  elist [utf8 [sql
2ae0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2af0: 69 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  in_name16 $STMT 
2b00: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
2b10: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2b20: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f  list.      } $co
2b30: 6c 73 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  ls.    }.  }.}..
2b40: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
2b50: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
2b60: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a  following APIs:.
2b70: 23 0a 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61  #.# sqlite3_data
2b80: 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33  _count.# sqlite3
2b90: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73  _column_type.# s
2ba0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2bb0: 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  t.# sqlite3_colu
2bc0: 6d 6e 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65  mn_text.# sqlite
2bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a  3_column_text16.
2be0: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2bf0: 5f 64 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d  _double.#.# $STM
2c00: 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20  T is a compiled 
2c10: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  SQL statement fo
2c20: 72 20 77 68 69 63 68 20 74 68 65 20 70 72 65 76  r which the prev
2c30: 69 6f 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20  ious call .# to 
2c40: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74  sqlite3_step ret
2c50: 75 72 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57  urned SQLITE_ROW
2c60: 2e 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65  . $test is a pre
2c70: 66 69 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f  fix to use .# fo
2c80: 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74  r test names wit
2c90: 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24  hin this proc. $
2ca0: 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74 20  types is a list 
2cb0: 6f 66 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65  of the .# manife
2cc0: 73 74 20 74 79 70 65 73 20 66 6f 72 20 74 68 65  st types for the
2cd0: 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69   current row. $i
2ce0: 6e 74 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e  nts, $doubles an
2cf0: 64 20 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65  d $strings.# are
2d00: 20 6c 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e   lists of the in
2d10: 74 65 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20  teger, real and 
2d20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d30: 61 74 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20  ations of.# the 
2d40: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75  values in the cu
2d50: 72 72 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45  rrent row..#.# E
2d60: 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20  xample:.#.# set 
2d70: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
2d80: 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 27 68  epare "SELECT 'h
2d90: 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c  ello', 1.1, NULL
2da0: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71  " -1 DUMMY].# sq
2db0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
2dc0: 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65  .# check_data te
2dd0: 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c  st1.2 {TEXT REAL
2de0: 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b   NULL} {0 1 0} {
2df0: 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20  0 1.1 0} {hello 
2e00: 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63  1.1 {}}.#.proc c
2e10: 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20  heck_data {STMT 
2e20: 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73 20  test types ints 
2e30: 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d  doubles strings}
2e40: 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20   {..  # Use the 
2e50: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2e60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2e70: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2e80: 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f    # a list of co
2e90: 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e  lumn indexes. i.
2ea0: 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f  e. If sqlite3_co
2eb0: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69  lumn_count.  # i
2ec0: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2ed0: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73  ist {0 1 2}..  s
2ee0: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
2ef0: 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c  st].  set numcol
2f00: 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  s [sqlite3_data_
2f10: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
2f20: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
2f30: 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   < $numcols} {in
2f40: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2f50: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20  :idxlist $i}..# 
2f60: 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74  types.do_test $t
2f70: 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79  est.1 {.  set ty
2f80: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
2f90: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2fa0: 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20 5b  {lappend types [
2fb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2fc0: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ype $STMT $i]}. 
2fd0: 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74 79   set types.} $ty
2fe0: 70 65 73 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a  pes..# Integers.
2ff0: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32 20  do_test $test.2 
3000: 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69  {.  set ints [li
3010: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
3020: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3030: 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f  d ints [sqlite3_
3040: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53 54  column_int64 $ST
3050: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69 6e  MT $i]}.  set in
3060: 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62 79  ts.} $ints..# by
3070: 74 65 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c 69  tes.set lens [li
3080: 73 74 5d 0a 66 6f 72 65 61 63 68 20 69 20 24 3a  st].foreach i $:
3090: 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61 70  :idxlist {.  lap
30a0: 70 65 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69 6e  pend lens [strin
30b0: 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78  g length [lindex
30c0: 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a 7d   $strings $i]].}
30d0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33  .do_test $test.3
30e0: 20 7b 0a 20 20 73 65 74 20 62 79 74 65 73 20 5b   {.  set bytes [
30f0: 6c 69 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e 73  list].  set lens
3100: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3110: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
3120: 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65 73     lappend bytes
3130: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3140: 5f 62 79 74 65 73 20 24 53 54 4d 54 20 24 69 5d  _bytes $STMT $i]
3150: 0a 20 20 7d 0a 20 20 73 65 74 20 62 79 74 65 73  .  }.  set bytes
3160: 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74 65  .} $lens..# byte
3170: 73 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  s16.ifcapable {u
3180: 74 66 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c 65  tf16} {.  set le
3190: 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  ns [list].  fore
31a0: 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74  ach i $::idxlist
31b0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c   {.    lappend l
31c0: 65 6e 73 20 5b 65 78 70 72 20 32 20 2a 20 5b 73  ens [expr 2 * [s
31d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69  tring length [li
31e0: 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24 69  ndex $strings $i
31f0: 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  ]]].  }.  do_tes
3200: 74 20 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20  t $test.4 {.    
3210: 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d  set bytes [list]
3220: 0a 20 20 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c  .    set lens [l
3230: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
3240: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
3250: 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65      lappend byte
3260: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
3270: 6e 5f 62 79 74 65 73 31 36 20 24 53 54 4d 54 20  n_bytes16 $STMT 
3280: 24 69 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  $i].    }.    se
3290: 74 20 62 79 74 65 73 0a 20 20 7d 20 24 6c 65 6e  t bytes.  } $len
32a0: 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f 74  s.}..# Blob.do_t
32b0: 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20  est $test.5 {.  
32c0: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
32d0: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
32e0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
32f0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
3300: 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24 69  mn_blob $STMT $i
3310: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
3320: 24 73 74 72 69 6e 67 73 0a 0a 23 20 55 54 46 2d  $strings..# UTF-
3330: 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  8.do_test $test.
3340: 36 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  6 {.  set utf8 [
3350: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
3360: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
3370: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
3380: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
3390: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75  TMT $i]}.  set u
33a0: 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a  tf8.} $strings..
33b0: 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74  # Floats.do_test
33c0: 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 73 65 74   $test.7 {.  set
33d0: 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66   utf8 [list].  f
33e0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
33f0: 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20  t {lappend utf8 
3400: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3410: 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d  double $STMT $i]
3420: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
3430: 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 31  doubles..# UTF-1
3440: 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  6.ifcapable {utf
3450: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
3460: 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20 73 65  $test.8 {.    se
3470: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
3480: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
3490: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
34a0: 66 38 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65  f8 [utf8 [sqlite
34b0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20  3_column_text16 
34c0: 24 53 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20 20  $STMT $i]]}.    
34d0: 73 65 74 20 75 74 66 38 0a 20 20 7d 20 24 73 74  set utf8.  } $st
34e0: 72 69 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65 67  rings.}..# Integ
34f0: 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ers.do_test $tes
3500: 74 2e 39 20 7b 0a 20 20 73 65 74 20 69 6e 74 73  t.9 {.  set ints
3510: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
3520: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
3530: 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69  ppend ints [sqli
3540: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
3550: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3560: 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20  ints.} $ints..# 
3570: 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20 24  Floats.do_test $
3580: 74 65 73 74 2e 31 30 20 7b 0a 20 20 73 65 74 20  test.10 {.  set 
3590: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  utf8 [list].  fo
35a0: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
35b0: 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b   {lappend utf8 [
35c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
35d0: 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d 7d  ouble $STMT $i]}
35e0: 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 64  .  set utf8.} $d
35f0: 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38 0a  oubles..# UTF-8.
3600: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31  do_test $test.11
3610: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
3620: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
3630: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
3640: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
3650: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54  _column_text $ST
3660: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
3670: 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23  f8.} $strings..#
3680: 20 54 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24   Types.do_test $
3690: 74 65 73 74 2e 31 32 20 7b 0a 20 20 73 65 74 20  test.12 {.  set 
36a0: 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66  types [list].  f
36b0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
36c0: 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73  t {lappend types
36d0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
36e0: 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d  _type $STMT $i]}
36f0: 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24  .  set types.} $
3700: 74 79 70 65 73 0a 0a 23 20 54 65 73 74 20 74 68  types..# Test th
3710: 61 74 20 61 6e 20 6f 75 74 20 6f 66 20 72 61 6e  at an out of ran
3720: 67 65 20 72 65 71 75 65 73 74 20 72 65 74 75 72  ge request retur
3730: 6e 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ns the equivalen
3740: 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73  t of NULL.do_tes
3750: 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73  t $test.13 {.  s
3760: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
3770: 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30 7d  t $STMT -1.} {0}
3780: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
3790: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  3 {.  sqlite3_co
37a0: 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20  lumn_text $STMT 
37b0: 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63 61  -1.} {}..}..ifca
37c0: 70 61 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70  pable !floatingp
37d0: 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f  oint {.  finish_
37e0: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
37f0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35  .do_test capi3-5
3800: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
3810: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3820: 45 20 74 31 28 61 20 56 41 52 49 4e 54 2c 20 62  E t1(a VARINT, b
3830: 20 42 4c 4f 42 2c 20 63 20 56 41 52 43 48 41 52   BLOB, c VARCHAR
3840: 28 31 36 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  (16));.    INSER
3850: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
3860: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 49  (1, 2, 3);.    I
3870: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
3880: 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f  LUES('one', 'two
3890: 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  ', NULL);.    IN
38a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
38b0: 55 45 53 28 31 2e 32 2c 20 31 2e 33 2c 20 31 2e  UES(1.2, 1.3, 1.
38c0: 34 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73 71  4);.  }.  set sq
38d0: 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l "SELECT * FROM
38e0: 20 74 31 22 0a 20 20 73 65 74 20 53 54 4d 54 20   t1".  set STMT 
38f0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
3900: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
3910: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  L].  sqlite3_col
3920: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a  umn_count $STMT.
3930: 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  } 3..check_heade
3940: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
3950: 31 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e  1 {a b c} {VARIN
3960: 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31  T BLOB VARCHAR(1
3970: 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  6)}.check_origin
3980: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3990: 70 69 33 2d 35 2e 31 20 7b 6d 61 69 6e 20 6d 61  pi3-5.1 {main ma
39a0: 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20  in main} {t1 t1 
39b0: 74 31 7d 20 7b 61 20 62 20 63 7d 0a 64 6f 5f 74  t1} {a b c}.do_t
39c0: 65 73 74 20 63 61 70 69 33 2d 35 2e 32 20 7b 0a  est capi3-5.2 {.
39d0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
39e0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
39f0: 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20  W..check_header 
3a00: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 20  $STMT capi3-5.3 
3a10: 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20  {a b c} {VARINT 
3a20: 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29  BLOB VARCHAR(16)
3a30: 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68  }.check_origin_h
3a40: 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69  eader $STMT capi
3a50: 33 2d 35 2e 33 20 7b 6d 61 69 6e 20 6d 61 69 6e  3-5.3 {main main
3a60: 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31   main} {t1 t1 t1
3a70: 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f  } {a b c}.check_
3a80: 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33  data $STMT capi3
3a90: 2d 35 2e 34 20 7b 49 4e 54 45 47 45 52 20 49 4e  -5.4 {INTEGER IN
3aa0: 54 45 47 45 52 20 54 45 58 54 7d 20 7b 31 20 32  TEGER TEXT} {1 2
3ab0: 20 33 7d 20 7b 31 2e 30 20 32 2e 30 20 33 2e 30   3} {1.0 2.0 3.0
3ac0: 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65  } {1 2 3}..do_te
3ad0: 73 74 20 63 61 70 69 33 2d 35 2e 35 20 7b 0a 20  st capi3-5.5 {. 
3ae0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
3af0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
3b00: 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24  ..check_header $
3b10: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 36 20 7b  STMT capi3-5.6 {
3b20: 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42  a b c} {VARINT B
3b30: 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d  LOB VARCHAR(16)}
3b40: 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65  .check_origin_he
3b50: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3b60: 2d 35 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20  -5.6 {main main 
3b70: 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d  main} {t1 t1 t1}
3b80: 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64   {a b c}.check_d
3b90: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d  ata $STMT capi3-
3ba0: 35 2e 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e  5.7 {TEXT TEXT N
3bb0: 55 4c 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e  ULL} {0 0 0} {0.
3bc0: 30 20 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20  0 0.0 0.0} {one 
3bd0: 74 77 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74  two {}}..do_test
3be0: 20 63 61 70 69 33 2d 35 2e 38 20 7b 0a 20 20 73   capi3-5.8 {.  s
3bf0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
3c00: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a  T.} SQLITE_ROW..
3c10: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
3c20: 4d 54 20 63 61 70 69 33 2d 35 2e 39 20 7b 61 20  MT capi3-5.9 {a 
3c30: 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f  b c} {VARINT BLO
3c40: 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63  B VARCHAR(16)}.c
3c50: 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64  heck_origin_head
3c60: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  er $STMT capi3-5
3c70: 2e 39 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .9 {main main ma
3c80: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3c90: 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74  a b c}.check_dat
3ca0: 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  a $STMT capi3-5.
3cb0: 31 30 20 7b 46 4c 4f 41 54 20 46 4c 4f 41 54 20  10 {FLOAT FLOAT 
3cc0: 54 45 58 54 7d 20 7b 31 20 31 20 31 7d 20 7b 31  TEXT} {1 1 1} {1
3cd0: 2e 32 20 31 2e 33 20 31 2e 34 7d 20 7b 31 2e 32  .2 1.3 1.4} {1.2
3ce0: 20 31 2e 33 20 31 2e 34 7d 0a 0a 64 6f 5f 74 65   1.3 1.4}..do_te
3cf0: 73 74 20 63 61 70 69 33 2d 35 2e 31 31 20 7b 0a  st capi3-5.11 {.
3d00: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
3d10: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
3d20: 4e 45 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  NE..do_test capi
3d30: 33 2d 35 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74  3-5.12 {.  sqlit
3d40: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
3d50: 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64  T.} SQLITE_OK..d
3d60: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 32  o_test capi3-5.2
3d70: 30 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 53  0 {.  set sql "S
3d80: 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 62 29 2c  ELECT a, sum(b),
3d90: 20 6d 61 78 28 63 29 20 46 52 4f 4d 20 74 31 20   max(c) FROM t1 
3da0: 47 52 4f 55 50 20 42 59 20 61 22 0a 20 20 73 65  GROUP BY a".  se
3db0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
3dc0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
3dd0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
3de0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
3df0: 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63   $STMT.} 3..chec
3e00: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
3e10: 61 70 69 33 2d 35 2e 32 31 20 7b 61 20 73 75 6d  api3-5.21 {a sum
3e20: 28 62 29 20 6d 61 78 28 63 29 7d 20 7b 56 41 52  (b) max(c)} {VAR
3e30: 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b  INT {} {}}.check
3e40: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24  _origin_header $
3e50: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 32 32 20  STMT capi3-5.22 
3e60: 7b 6d 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31  {main {} {}} {t1
3e70: 20 7b 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d   {} {}} {a {} {}
3e80: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
3e90: 35 2e 32 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  5.23 {.  sqlite3
3ea0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
3eb0: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f  } SQLITE_OK..do_
3ec0: 74 65 73 74 20 63 61 70 69 33 2d 35 2e 33 30 20  test capi3-5.30 
3ed0: 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c  {.  set sql "SEL
3ee0: 45 43 54 20 61 20 41 53 20 78 2c 20 73 75 6d 28  ECT a AS x, sum(
3ef0: 62 29 20 41 53 20 79 2c 20 6d 61 78 28 63 29 20  b) AS y, max(c) 
3f00: 41 53 20 7a 20 46 52 4f 4d 20 74 31 20 41 53 20  AS z FROM t1 AS 
3f10: 6d 20 47 52 4f 55 50 20 42 59 20 78 22 0a 20 20  m GROUP BY x".  
3f20: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
3f30: 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73  3_prepare $DB $s
3f40: 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ql -1 TAIL].  sq
3f50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
3f60: 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68  nt $STMT.} 3..ch
3f70: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3f80: 20 63 61 70 69 33 2d 35 2e 33 31 20 7b 78 20 79   capi3-5.31 {x y
3f90: 20 7a 7d 20 7b 56 41 52 49 4e 54 20 7b 7d 20 7b   z} {VARINT {} {
3fa0: 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f  }}.check_origin_
3fb0: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3fc0: 69 33 2d 35 2e 33 32 20 7b 6d 61 69 6e 20 7b 7d  i3-5.32 {main {}
3fd0: 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20   {}} {t1 {} {}} 
3fe0: 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  {a {} {}}.do_tes
3ff0: 74 20 63 61 70 69 33 2d 35 2e 33 33 20 7b 0a 20  t capi3-5.33 {. 
4000: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
4010: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
4020: 5f 4f 4b 0a 0a 0a 73 65 74 20 3a 3a 45 4e 43 20  _OK...set ::ENC 
4030: 5b 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61  [execsql {pragma
4040: 20 65 6e 63 6f 64 69 6e 67 7d 5d 0a 64 62 20 63   encoding}].db c
4050: 6c 6f 73 65 0a 0a 64 6f 5f 74 65 73 74 20 63 61  lose..do_test ca
4060: 70 69 33 2d 36 2e 30 20 7b 0a 20 20 73 71 6c 69  pi3-6.0 {.  sqli
4070: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4080: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
4090: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
40a0: 74 65 72 20 64 62 5d 0a 20 20 69 66 20 7b 5b 73  ter db].  if {[s
40b0: 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65  qlite3 -has-code
40c0: 63 5d 3d 3d 30 7d 20 7b 20 73 71 6c 69 74 65 33  c]==0} { sqlite3
40d0: 5f 6b 65 79 20 24 44 42 20 78 79 7a 7a 79 20 7d  _key $DB xyzzy }
40e0: 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45  .  set sql {SELE
40f0: 43 54 20 61 20 46 52 4f 4d 20 74 31 20 6f 72 64  CT a FROM t1 ord
4100: 65 72 20 62 79 20 72 6f 77 69 64 7d 0a 20 20 73  er by rowid}.  s
4110: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
4120: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
4130: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 70  l -1 TAIL].  exp
4140: 72 20 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73  r 0.} {0}.do_tes
4150: 74 20 63 61 70 69 33 2d 36 2e 31 20 7b 0a 20 20  t capi3-6.1 {.  
4160: 64 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20  db cache flush. 
4170: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
4180: 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53  DB.} {SQLITE_BUS
4190: 59 7d 0a 0a 23 20 36 2e 32 20 61 6e 64 20 36 2e  Y}..# 6.2 and 6.
41a0: 33 20 75 73 65 64 20 74 6f 20 72 65 74 75 72 6e  3 used to return
41b0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 61 6e   SQLITE_ERROR an
41c0: 64 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2c  d SQLITE_SCHEMA,
41d0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 23   respectively..#
41e0: 20 42 75 74 20 73 69 6e 63 65 20 61 74 74 65 6d   But since attem
41f0: 70 74 69 6e 67 20 74 6f 20 63 6c 6f 73 65 20 61  pting to close a
4200: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 20 6c   connection no l
4210: 6f 6e 67 65 72 20 72 65 73 65 74 73 20 74 68 65  onger resets the
4220: 20 69 6e 74 65 72 6e 61 6c 0a 23 20 73 63 68 65   internal.# sche
4230: 6d 61 20 61 6e 64 20 65 78 70 69 72 65 73 20 61  ma and expires a
4240: 6c 6c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74  ll statements, t
4250: 68 69 73 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72  his is no longer
4260: 20 74 68 65 20 63 61 73 65 2e 0a 64 6f 5f 74 65   the case..do_te
4270: 73 74 20 63 61 70 69 33 2d 36 2e 32 20 7b 0a 20  st capi3-6.2 {. 
4280: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
4290: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
42a0: 57 7d 0a 23 63 68 65 63 6b 5f 64 61 74 61 20 24  W}.#check_data $
42b0: 53 54 4d 54 20 63 61 70 69 33 2d 36 2e 33 20 7b  STMT capi3-6.3 {
42c0: 49 4e 54 45 47 45 52 7d 20 7b 31 7d 20 7b 31 2e  INTEGER} {1} {1.
42d0: 30 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  0} {1}.do_test c
42e0: 61 70 69 33 2d 36 2e 33 20 7b 0a 20 20 73 71 6c  api3-6.3 {.  sql
42f0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
4300: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
4310: 7d 0a 0a 69 66 20 7b 5b 63 6c 61 6e 67 5f 73 61  }..if {[clang_sa
4320: 6e 69 74 69 7a 65 5f 61 64 64 72 65 73 73 5d 3d  nitize_address]=
4330: 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  =0} {.  do_test 
4340: 63 61 70 69 33 2d 36 2e 34 2d 6d 69 73 75 73 65  capi3-6.4-misuse
4350: 20 7b 0a 20 20 20 20 64 62 20 63 61 63 68 65 20   {.    db cache 
4360: 66 6c 75 73 68 0a 20 20 20 20 73 71 6c 69 74 65  flush.    sqlite
4370: 33 5f 63 6c 6f 73 65 20 24 44 42 0a 20 20 7d 20  3_close $DB.  } 
4380: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 7d 0a 64 62  {SQLITE_OK}.}.db
4390: 20 63 6c 6f 73 65 0a 0a 23 20 54 68 69 73 20 70   close..# This p
43a0: 72 6f 63 65 64 75 72 65 20 73 65 74 73 20 74 68  rocedure sets th
43b0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66  e value of the f
43c0: 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66 69  ile-format in fi
43d0: 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23 20 74  le 'test.db'.# t
43e0: 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73 6f 2c  o $newval. Also,
43f0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
4400: 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ie is incremente
4410: 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74 5f 66  d..# .proc set_f
4420: 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65 77 76  ile_format {newv
4430: 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f 77 72  al} {.  hexio_wr
4440: 69 74 65 20 74 65 73 74 2e 64 62 20 34 34 20 5b  ite test.db 44 [
4450: 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74  hexio_render_int
4460: 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20 73 65  32 $newval].  se
4470: 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 20 5b  t schemacookie [
4480: 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68  hexio_get_int [h
4490: 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74 2e 64  exio_read test.d
44a0: 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63 72 20  b 40 4]].  incr 
44b0: 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20 20 68  schemacookie.  h
44c0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
44d0: 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72 65 6e  db 40 [hexio_ren
44e0: 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68 65 6d  der_int32 $schem
44f0: 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74 75 72  acookie].  retur
4500: 6e 20 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70  n {}.}..# This p
4510: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
4520: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
4530: 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e  e file-format in
4540: 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62 27 2e   file 'test.db'.
4550: 0a 23 20 0a 70 72 6f 63 20 67 65 74 5f 66 69 6c  .# .proc get_fil
4560: 65 5f 66 6f 72 6d 61 74 20 7b 7b 66 6e 61 6d 65  e_format {{fname
4570: 20 74 65 73 74 2e 64 62 7d 7d 20 7b 0a 20 20 72   test.db}} {.  r
4580: 65 74 75 72 6e 20 5b 68 65 78 69 6f 5f 67 65 74  eturn [hexio_get
4590: 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64  _int [hexio_read
45a0: 20 24 66 6e 61 6d 65 20 34 34 20 34 5d 5d 0a 7d   $fname 44 4]].}
45b0: 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20  ..if {![sqlite3 
45c0: 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20  -has-codec]} {. 
45d0: 20 23 20 54 65 73 74 20 77 68 61 74 20 68 61 70   # Test what hap
45e0: 70 65 6e 73 20 77 68 65 6e 20 74 68 65 20 6c 69  pens when the li
45f0: 62 72 61 72 79 20 65 6e 63 6f 75 6e 74 65 72 73  brary encounters
4600: 20 61 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f   a newer file fo
4610: 72 6d 61 74 2e 0a 20 20 64 6f 5f 74 65 73 74 20  rmat..  do_test 
4620: 63 61 70 69 33 2d 37 2e 31 20 7b 0a 20 20 20 20  capi3-7.1 {.    
4630: 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20  set_file_format 
4640: 35 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  5.  } {}.  do_te
4650: 73 74 20 63 61 70 69 33 2d 37 2e 32 20 7b 0a 20  st capi3-7.2 {. 
4660: 20 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74     catch { sqlit
4670: 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a  e3 db test.db }.
4680: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
4690: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
46a0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
46b0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
46c0: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65  unsupported file
46d0: 20 66 6f 72 6d 61 74 7d 7d 0a 20 20 64 62 20 63   format}}.  db c
46e0: 6c 6f 73 65 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71  lose.}..if {![sq
46f0: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
4700: 5d 7d 20 7b 0a 20 20 23 20 4e 6f 77 20 74 65 73  ]} {.  # Now tes
4710: 74 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  t that the libra
4720: 72 79 20 63 6f 72 72 65 63 74 6c 79 20 68 61 6e  ry correctly han
4730: 64 6c 65 73 20 62 6f 67 75 73 20 65 6e 74 72 69  dles bogus entri
4740: 65 73 20 69 6e 20 74 68 65 0a 20 20 23 20 73 71  es in the.  # sq
4750: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
4760: 65 20 28 73 63 68 65 6d 61 20 63 6f 72 72 75 70  e (schema corrup
4770: 74 69 6f 6e 29 2e 0a 20 20 64 6f 5f 74 65 73 74  tion)..  do_test
4780: 20 63 61 70 69 33 2d 38 2e 31 20 7b 0a 20 20 20   capi3-8.1 {.   
4790: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
47a0: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
47b0: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
47c0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
47d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
47e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
47f0: 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  a);.    }.    db
4800: 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20   close.  } {}.  
4810: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
4820: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  2 {.    sqlite3 
4830: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
4840: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
4850: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
4860: 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20  chema=ON;.      
4870: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69  INSERT INTO sqli
4880: 74 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53  te_master VALUES
4890: 28 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c  (NULL,NULL,NULL,
48a0: 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20  NULL,NULL);.    
48b0: 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  }.    db close. 
48c0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
48d0: 63 61 70 69 33 2d 38 2e 33 20 7b 0a 20 20 20 20  capi3-8.3 {.    
48e0: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 20  catch { sqlite3 
48f0: 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20 20  db test.db }.   
4900: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
4910: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4920: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
4930: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c     }.  } {1 {mal
4940: 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20  formed database 
4950: 73 63 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64  schema (?)}}.  d
4960: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 34  o_test capi3-8.4
4970: 20 7b 0a 20 20 20 20 23 20 42 75 69 6c 64 20 61   {.    # Build a
4980: 20 35 2d 66 69 65 6c 64 20 72 6f 77 20 72 65 63   5-field row rec
4990: 6f 72 64 2e 20 54 68 65 20 66 69 72 73 74 20 66  ord. The first f
49a0: 69 65 6c 64 20 69 73 20 61 20 73 74 72 69 6e 67  ield is a string
49b0: 20 27 74 61 62 6c 65 27 2c 20 61 6e 64 0a 20 20   'table', and.  
49c0: 20 20 23 20 73 75 62 73 65 71 75 65 6e 74 20 66    # subsequent f
49d0: 69 65 6c 64 73 20 61 72 65 20 61 6c 6c 20 4e 55  ields are all NU
49e0: 4c 4c 2e 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  LL..    db close
49f0: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
4a00: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
4a10: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c  -journal.    sql
4a20: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4a30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4a40: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4a50: 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20 50 52   t1(a);.      PR
4a60: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
4a70: 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20 49  hema=ON;.      I
4a80: 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74  NSERT INTO sqlit
4a90: 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53 28  e_master VALUES(
4aa0: 27 74 61 62 6c 65 27 2c 4e 55 4c 4c 2c 4e 55 4c  'table',NULL,NUL
4ab0: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20  L,NULL,NULL);.  
4ac0: 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65    }.    db close
4ad0: 0a 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f 74 65  .  } {};.  do_te
4ae0: 73 74 20 63 61 70 69 33 2d 38 2e 35 20 7b 0a 20  st capi3-8.5 {. 
4af0: 20 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74     catch { sqlit
4b00: 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a  e3 db test.db }.
4b10: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
4b20: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
4b30: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
4b40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
4b50: 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61  malformed databa
4b60: 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d 0a  se schema (?)}}.
4b70: 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 66 6f 72    db close.}.for
4b80: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
4b90: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
4ba0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 0a 23  t.db-journal...#
4bb0: 20 54 65 73 74 20 74 68 65 20 65 6e 67 6c 69 73   Test the englis
4bc0: 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e  h language strin
4bd0: 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f  g equivalents fo
4be0: 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  r sqlite error c
4bf0: 6f 64 65 73 0a 73 65 74 20 63 6f 64 65 32 65 6e  odes.set code2en
4c00: 67 6c 69 73 68 20 5b 6c 69 73 74 20 5c 0a 53 51  glish [list \.SQ
4c10: 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20 20 20 20  LITE_OK         
4c20: 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 20 5c  {not an error} \
4c30: 0a 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20  .SQLITE_ERROR   
4c40: 20 20 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72     {SQL logic er
4c50: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
4c60: 61 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54  atabase} \.SQLIT
4c70: 45 5f 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63  E_PERM       {ac
4c80: 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20  cess permission 
4c90: 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45  denied} \.SQLITE
4ca0: 5f 41 42 4f 52 54 20 20 20 20 20 20 7b 63 61 6c  _ABORT      {cal
4cb0: 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20  lback requested 
4cc0: 71 75 65 72 79 20 61 62 6f 72 74 7d 20 5c 0a 53  query abort} \.S
4cd0: 51 4c 49 54 45 5f 42 55 53 59 20 20 20 20 20 20  QLITE_BUSY      
4ce0: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
4cf0: 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c  cked} \.SQLITE_L
4d00: 4f 43 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62  OCKED     {datab
4d10: 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
4d20: 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f  ked} \.SQLITE_NO
4d30: 4d 45 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66  MEM      {out of
4d40: 20 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54   memory} \.SQLIT
4d50: 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74  E_READONLY   {at
4d60: 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
4d70: 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61   readonly databa
4d80: 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54  se} \.SQLITE_INT
4d90: 45 52 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75  ERRUPT  {interru
4da0: 70 74 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49  pted} \.SQLITE_I
4db0: 4f 45 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20  OERR      {disk 
4dc0: 49 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c  I/O error} \.SQL
4dd0: 49 54 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b  ITE_CORRUPT    {
4de0: 64 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d  database disk im
4df0: 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64  age is malformed
4e00: 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20  } \.SQLITE_FULL 
4e10: 20 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20        {database 
4e20: 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d  or disk is full}
4e30: 20 5c 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50   \.SQLITE_CANTOP
4e40: 45 4e 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20  EN   {unable to 
4e50: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69  open database fi
4e60: 6c 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50  le} \.SQLITE_EMP
4e70: 54 59 20 20 20 20 20 20 7b 74 61 62 6c 65 20 63  TY      {table c
4e80: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 7d  ontains no data}
4e90: 20 5c 0a 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   \.SQLITE_SCHEMA
4ea0: 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 73       {database s
4eb0: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
4ec0: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f 4e 53  d} \.SQLITE_CONS
4ed0: 54 52 41 49 4e 54 20 7b 63 6f 6e 73 74 72 61 69  TRAINT {constrai
4ee0: 6e 74 20 66 61 69 6c 65 64 7d 20 5c 0a 53 51 4c  nt failed} \.SQL
4ef0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 7b  ITE_MISMATCH   {
4f00: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
4f10: 68 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 55  h} \.SQLITE_MISU
4f20: 53 45 20 20 20 20 20 7b 6c 69 62 72 61 72 79 20  SE     {library 
4f30: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
4f40: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 7d 20  ut of sequence} 
4f50: 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 20 20  \.SQLITE_NOLFS  
4f60: 20 20 20 20 7b 6c 61 72 67 65 20 66 69 6c 65 20      {large file 
4f70: 73 75 70 70 6f 72 74 20 69 73 20 64 69 73 61 62  support is disab
4f80: 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 55  led} \.SQLITE_AU
4f90: 54 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f 72  TH       {author
4fa0: 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d 20  ization denied} 
4fb0: 5c 0a 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 20  \.SQLITE_FORMAT 
4fc0: 20 20 20 20 7b 61 75 78 69 6c 69 61 72 79 20 64      {auxiliary d
4fd0: 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65  atabase format e
4fe0: 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 52  rror} \.SQLITE_R
4ff0: 41 4e 47 45 20 20 20 20 20 20 7b 62 69 6e 64 20  ANGE      {bind 
5000: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
5010: 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a  out of range} \.
5020: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20  SQLITE_NOTADB   
5030: 20 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79    {file is encry
5040: 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61  pted or is not a
5050: 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b   database} \.unk
5060: 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20 20 20 7b  nownerror      {
5070: 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c  unknown error} \
5080: 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d  .]..set test_num
5090: 62 65 72 20 31 0a 66 6f 72 65 61 63 68 20 7b 63  ber 1.foreach {c
50a0: 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f  ode english} $co
50b0: 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64  de2english {.  d
50c0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 39 2e 24  o_test capi3-9.$
50d0: 74 65 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c  test_number "sql
50e0: 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72  ite3_test_errstr
50f0: 20 24 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68   $code" $english
5100: 0a 20 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d  .  incr test_num
5110: 62 65 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68  ber.}..# Test th
5120: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
5130: 77 68 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75  when a "real" ou
5140: 74 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75  t of memory occu
5150: 72 73 2e 0a 69 66 20 7b 20 5b 70 65 72 6d 75 74  rs..if { [permut
5160: 61 74 69 6f 6e 5d 20 21 3d 20 22 6e 6f 66 61 75  ation] != "nofau
5170: 6c 74 73 69 6d 22 20 7d 20 7b 0a 69 66 63 61 70  ltsim" } {.ifcap
5180: 61 62 6c 65 20 6d 65 6d 64 65 62 75 67 20 7b 0a  able memdebug {.
5190: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
51a0: 31 30 2d 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  10-1 {.    sqlit
51b0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
51c0: 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65    set DB [sqlite
51d0: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
51e0: 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 73 71 6c  nter db].    sql
51f0: 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61  ite3_memdebug_fa
5200: 69 6c 20 31 0a 20 20 20 20 63 61 74 63 68 73 71  il 1.    catchsq
5210: 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74  l {.      select
5220: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
5230: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
5240: 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f   {1 {out of memo
5250: 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  ry}}.  do_test c
5260: 61 70 69 33 2d 31 30 2d 32 20 7b 0a 20 20 20 20  api3-10-2 {.    
5270: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
5280: 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20 6f 66  ::DB.  } {out of
5290: 20 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63 61 70   memory}.  ifcap
52a0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
52b0: 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33     do_test capi3
52c0: 2d 31 30 2d 33 20 7b 0a 20 20 20 20 20 20 75 74  -10-3 {.      ut
52d0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d  f8 [sqlite3_errm
52e0: 73 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20  sg16 $::DB].    
52f0: 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  } {out of memory
5300: 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65  }.  }.  db close
5310: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65  .  sqlite3_memde
5320: 62 75 67 5f 66 61 69 6c 20 2d 31 0a 20 20 64 6f  bug_fail -1.  do
5330: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 34  _test capi3-10-4
5340: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
5350: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65  b test.db.    se
5360: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t DB [sqlite3_co
5370: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
5380: 20 64 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33   db].    sqlite3
5390: 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 31  _memdebug_fail 1
53a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
53b0: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
53c0: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
53d0: 72 20 77 68 65 72 65 20 72 6f 77 69 64 3e 35 3b  r where rowid>5;
53e0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f  .    }.  } {1 {o
53f0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20  ut of memory}}. 
5400: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
5410: 30 2d 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0-5 {.    sqlite
5420: 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42 0a 20  3_errmsg $::DB. 
5430: 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   } {out of memor
5440: 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  y}.  ifcapable {
5450: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f  utf16} {.    do_
5460: 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 36 20  test capi3-10-6 
5470: 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b 73 71  {.      utf8 [sq
5480: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 20 24  lite3_errmsg16 $
5490: 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74  ::DB].    } {out
54a0: 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a   of memory}.  }.
54b0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
54c0: 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61  ite3_memdebug_fa
54d0: 69 6c 20 2d 31 0a 7d 0a 7d 0a 0a 23 20 54 68 65  il -1.}.}..# The
54e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
54f0: 20 2d 20 63 61 70 69 33 2d 31 31 2e 2a 20 2d 20   - capi3-11.* - 
5500: 74 65 73 74 20 74 68 61 74 20 61 20 43 4f 4d 4d  test that a COMM
5510: 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23  IT or ROLLBACK.#
5520: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 73 75 65   statement issue
5530: 64 20 77 68 69 6c 65 20 74 68 65 72 65 20 61 72  d while there ar
5540: 65 20 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64  e still outstand
5550: 69 6e 67 20 56 4d 73 20 74 68 61 74 20 61 72 65  ing VMs that are
5560: 20 70 61 72 74 20 6f 66 0a 23 20 74 68 65 20 74   part of.# the t
5570: 72 61 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c 73  ransaction fails
5580: 2e 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  ..sqlite3 db tes
5590: 74 2e 64 62 0a 73 65 74 20 44 42 20 5b 73 71 6c  t.db.set DB [sql
55a0: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
55b0: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69  pointer db].sqli
55c0: 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74  te_register_test
55d0: 5f 66 75 6e 63 74 69 6f 6e 20 24 44 42 20 66 75  _function $DB fu
55e0: 6e 63 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  nc.do_test capi3
55f0: 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -11.1 {.  execsq
5600: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
5610: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5620: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e  t1(a, b);.    IN
5630: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5640: 55 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20  UES(1, 'int');. 
5650: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5660: 31 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74  1 VALUES(2, 'not
5670: 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b  atype');.  }.} {
5680: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5690: 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.1.1 {.  sqlit
56a0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
56b0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
56c0: 74 20 63 61 70 69 33 2d 31 31 2e 32 20 7b 0a 20  t capi3-11.2 {. 
56d0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
56e0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 22  e3_prepare $DB "
56f0: 53 45 4c 45 43 54 20 66 75 6e 63 28 62 2c 20 61  SELECT func(b, a
5700: 29 20 46 52 4f 4d 20 74 31 22 20 2d 31 20 54 41  ) FROM t1" -1 TA
5710: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
5720: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5730: 54 45 5f 52 4f 57 7d 0a 0a 23 20 41 73 20 6f 66  TE_ROW}..# As of
5740: 20 33 2e 36 2e 35 20 61 20 43 4f 4d 4d 49 54 20   3.6.5 a COMMIT 
5750: 69 73 20 4f 4b 20 64 75 72 69 6e 67 20 77 68 69  is OK during whi
5760: 6c 65 20 61 20 71 75 65 72 79 20 69 73 20 73 74  le a query is st
5770: 69 6c 6c 20 72 75 6e 6e 69 6e 67 20 2d 0a 23 20  ill running -.# 
5780: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
5790: 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 71 75 65   a read-only que
57a0: 72 79 20 61 6e 64 20 6e 6f 74 20 61 6e 20 69 6e  ry and not an in
57b0: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 77  cremental BLOB w
57c0: 72 69 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  rite..#.do_test 
57d0: 63 61 70 69 33 2d 31 31 2e 33 2e 31 20 7b 0a 20  capi3-11.3.1 {. 
57e0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
57f0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
5800: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5810: 69 33 2d 31 31 2e 33 2e 32 20 7b 0a 20 20 73 71  i3-11.3.2 {.  sq
5820: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
5830: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
5840: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
5850: 20 63 61 70 69 33 2d 31 31 2e 33 2e 33 20 7b 0a   capi3-11.3.3 {.
5860: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5870: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5880: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5890: 31 2e 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61  1.3.4 {.  db eva
58a0: 6c 20 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73  l {PRAGMA lock_s
58b0: 74 61 74 75 73 7d 0a 7d 20 7b 6d 61 69 6e 20 73  tatus}.} {main s
58c0: 68 61 72 65 64 20 74 65 6d 70 20 63 6c 6f 73 65  hared temp close
58d0: 64 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  d}..do_test capi
58e0: 33 2d 31 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74  3-11.4 {.  sqlit
58f0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5900: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
5910: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5920: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  5 {.  sqlite3_fi
5930: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5940: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
5950: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 36  _test capi3-11.6
5960: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5970: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5980: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t1;.  }.} {0 {
5990: 31 20 69 6e 74 20 32 20 6e 6f 74 61 74 79 70 65  1 int 2 notatype
59a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
59b0: 2d 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  -11.7 {.  sqlite
59c0: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
59d0: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
59e0: 20 63 61 70 69 33 2d 31 31 2e 38 20 7b 0a 20 20   capi3-11.8 {.  
59f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
5a00: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 29  EATE TABLE t2(a)
5a10: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5a20: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t2 VALUES(1);.
5a30: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5a40: 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20  t2 VALUES(2);.  
5a50: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53    BEGIN;.    INS
5a60: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
5a70: 45 53 28 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ES(3);.  }.} {}.
5a80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5a90: 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .8.1 {.  sqlite3
5aa0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5ab0: 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20  $DB.} 0.do_test 
5ac0: 63 61 70 69 33 2d 31 31 2e 39 20 7b 0a 20 20 73  capi3-11.9 {.  s
5ad0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5ae0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45  _prepare $DB "SE
5af0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20  LECT a FROM t2" 
5b00: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
5b10: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5b20: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5b30: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39 2e  test capi3-11.9.
5b40: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5b50: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5b60: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5b70: 69 33 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61  i3-11.9.2 {.  ca
5b80: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c  tchsql {.    ROL
5b90: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20  LBACK;.  }.} {0 
5ba0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
5bb0: 33 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71 6c  3-11.9.3 {.  sql
5bc0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5bd0: 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74  mit $DB.} 1.do_t
5be0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 30 20  est capi3-11.10 
5bf0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
5c00: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5c10: 5f 52 4f 57 7d 0a 69 66 63 61 70 61 62 6c 65 20  _ROW}.ifcapable 
5c20: 21 61 75 74 6f 72 65 73 65 74 20 7b 0a 20 20 23  !autoreset {.  #
5c30: 20 49 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   If SQLITE_OMIT_
5c40: 41 55 54 4f 52 45 53 45 54 20 69 73 20 64 65 66  AUTORESET is def
5c50: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73  ined, then the s
5c60: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65  tatement must be
5c70: 0a 20 20 23 20 72 65 73 65 74 28 29 20 62 65 66  .  # reset() bef
5c80: 6f 72 65 20 69 74 20 63 61 6e 20 62 65 20 70 61  ore it can be pa
5c90: 73 73 65 64 20 74 6f 20 73 74 65 70 28 29 20 61  ssed to step() a
5ca0: 67 61 69 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20  gain..  do_test 
5cb0: 63 61 70 69 33 2d 31 31 2e 31 31 61 20 7b 20 73  capi3-11.11a { s
5cc0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5cd0: 54 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55  T } {SQLITE_MISU
5ce0: 53 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  SE}.  do_test ca
5cf0: 70 69 33 2d 31 31 2e 31 31 62 20 7b 20 73 71 6c  pi3-11.11b { sql
5d00: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
5d10: 20 7d 20 7b 53 51 4c 49 54 45 5f 41 42 4f 52 54   } {SQLITE_ABORT
5d20: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  }.}.do_test capi
5d30: 33 2d 31 31 2e 31 31 20 7b 0a 20 20 73 71 6c 69  3-11.11 {.  sqli
5d40: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5d50: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64   {SQLITE_DONE}.d
5d60: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5d70: 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  12 {.  sqlite3_s
5d80: 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69  tep $STMT.  sqli
5d90: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5da0: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5db0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5dc0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  3 {.  sqlite3_fi
5dd0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5de0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
5df0: 73 74 20 63 61 70 69 33 2d 31 31 2e 31 34 20 7b  st capi3-11.14 {
5e00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5e10: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
5e20: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64  2;.  }.} {1 2}.d
5e30: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5e40: 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  14.1 {.  sqlite3
5e50: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5e60: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
5e70: 63 61 70 69 33 2d 31 31 2e 31 35 20 7b 0a 20 20  capi3-11.15 {.  
5e80: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52  catchsql {.    R
5e90: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
5ea0: 31 20 7b 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  1 {cannot rollba
5eb0: 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
5ec0: 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a  ion is active}}.
5ed0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5ee0: 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  .15.1 {.  sqlite
5ef0: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
5f00: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
5f10: 20 63 61 70 69 33 2d 31 31 2e 31 36 20 7b 0a 20   capi3-11.16 {. 
5f20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
5f30: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 3b  ELECT a FROM t2;
5f40: 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 23 20  .  }.} {1 2}..# 
5f50: 53 61 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  Sanity check on 
5f60: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
5f70: 66 20 27 6f 75 74 73 74 61 6e 64 69 6e 67 20 56  f 'outstanding V
5f80: 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 61  M'. This means a
5f90: 6e 79 20 56 4d 0a 23 20 74 68 61 74 20 68 61 73  ny VM.# that has
5fa0: 20 68 61 64 20 73 71 6c 69 74 65 33 5f 73 74 65   had sqlite3_ste
5fb0: 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20  p() called more 
5fc0: 72 65 63 65 6e 74 6c 79 20 74 68 61 6e 20 73 71  recently than sq
5fd0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
5fe0: 20 6f 72 0a 23 20 73 71 6c 69 74 65 33 5f 72 65   or.# sqlite3_re
5ff0: 73 65 74 28 29 2e 20 53 6f 20 61 20 56 4d 20 74  set(). So a VM t
6000: 68 61 74 20 68 61 73 20 6a 75 73 74 20 62 65 65  hat has just bee
6010: 6e 20 70 72 65 70 61 72 65 64 20 6f 72 20 72 65  n prepared or re
6020: 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63  set does not.# c
6030: 6f 75 6e 74 20 61 73 20 61 6e 20 61 63 74 69 76  ount as an activ
6040: 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63 61  e VM..do_test ca
6050: 70 69 33 2d 31 31 2e 31 37 20 7b 0a 20 20 65 78  pi3-11.17 {.  ex
6060: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
6070: 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  N;.  }.} {}.do_t
6080: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 38 20  est capi3-11.18 
6090: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
60a0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
60b0: 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  B "SELECT a FROM
60c0: 20 74 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1" -1 TAIL].  
60d0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
60e0: 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OMMIT;.  }.} {0 
60f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
6100: 33 2d 31 31 2e 31 39 20 7b 0a 20 20 73 71 6c 69  3-11.19 {.  sqli
6110: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6120: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
6130: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32  _test capi3-11.2
6140: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
6150: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
6160: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
6170: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
6180: 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c  i3-11.20 {.  sql
6190: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
61a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
61b0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
61c0: 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  {1 {cannot commi
61d0: 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
61e0: 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64  on is active}}.d
61f0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
6200: 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  21 {.  sqlite3_f
6210: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6220: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54  {SQLITE_OK}..# T
6230: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73  he following tes
6240: 74 73 20 2d 20 63 61 70 69 33 2d 31 32 2e 2a 20  ts - capi3-12.* 
6250: 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 73  - check that its
6260: 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23   Ok to start a.#
6270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
6280: 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  le other VMs are
6290: 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61   active, and tha
62a0: 74 20 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63  t its Ok to exec
62b0: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
62c0: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
62d0: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
62e0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 31  _test capi3-12.1
62f0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
6300: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
6310: 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f  DB "SELECT a FRO
6320: 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2" -1 TAIL]. 
6330: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6340: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
6350: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
6360: 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -12.2 {.  catchs
6370: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
6380: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
6390: 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b  , NULL);.  }.} {
63a0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
63b0: 70 69 33 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74  pi3-12.3 {.  cat
63c0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
63d0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
63e0: 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  S(4);.  }.} {0 {
63f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
6400: 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  -12.4 {.  catchs
6410: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
6420: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6430: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c  t1 VALUES(4, NUL
6440: 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  L);.  }.} {0 {}}
6450: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6460: 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.5 {.  sqlite3_
6470: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
6480: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
6490: 74 20 63 61 70 69 33 2d 31 32 2e 35 2e 31 20 7b  t capi3-12.5.1 {
64a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
64b0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
64c0: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
64d0: 69 33 2d 31 32 2e 36 20 7b 0a 20 20 73 71 6c 69  i3-12.6 {.  sqli
64e0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
64f0: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64   {SQLITE_DONE}.d
6500: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e  o_test capi3-12.
6510: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  7 {.  sqlite3_fi
6520: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
6530: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
6540: 73 74 20 63 61 70 69 33 2d 31 32 2e 38 20 7b 0a  st capi3-12.8 {.
6550: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6560: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
6570: 43 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT a FROM t1;.  
6580: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23  }.} {1 2 3 4}..#
6590: 20 54 65 73 74 20 63 61 73 65 73 20 63 61 70 69   Test cases capi
65a0: 33 2d 31 33 2e 2a 20 74 65 73 74 20 74 68 65 20  3-13.* test the 
65b0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
65c0: 6e 64 69 6e 67 73 28 29 20 61 6e 64 20 0a 23 20  ndings() and .# 
65d0: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 41 50  sqlite3_sleep AP
65e0: 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67  Is..#.if {[lleng
65f0: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  th [info command
6600: 73 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  s sqlite3_clear_
6610: 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a  bindings]]>0} {.
6620: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6630: 31 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  13.1 {.    execs
6640: 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54  ql {.      DELET
6650: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d  E FROM t1;.    }
6660: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
6670: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
6680: 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  DB "INSERT INTO 
6690: 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29 22  t1 VALUES(?, ?)"
66a0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
66b0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
66c0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
66d0: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
66e0: 69 33 2d 31 33 2e 32 20 7b 0a 20 20 20 20 73 71  i3-13.2 {.    sq
66f0: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
6700: 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  T.    sqlite3_bi
6710: 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 31 20  nd_text $STMT 1 
6720: 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71 6c 69  hello 5.    sqli
6730: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53  te3_bind_text $S
6740: 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a 20 20  TMT 2 world 5.  
6750: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6760: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
6770: 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74  _DONE}.  do_test
6780: 20 63 61 70 69 33 2d 31 33 2e 33 20 7b 0a 20 20   capi3-13.3 {.  
6790: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
67a0: 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65  $STMT.    sqlite
67b0: 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
67c0: 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74   $STMT.    sqlit
67d0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
67e0: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
67f0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6800: 31 33 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74  13-4 {.    sqlit
6810: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6820: 54 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  T.    execsql {.
6830: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
6840: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ROM t1;.    }.  
6850: 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77  } {{} {} hello w
6860: 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66  orld {} {}}.}.if
6870: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
6880: 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65   commands sqlite
6890: 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20  3_sleep]]>0} {. 
68a0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
68b0: 33 2d 35 20 7b 0a 20 20 20 20 73 65 74 20 6d 73  3-5 {.    set ms
68c0: 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20   [sqlite3_sleep 
68d0: 38 30 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 6d  80].    expr {$m
68e0: 73 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30  s==80 || $ms==10
68f0: 30 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23  00}.  } {1}.}..#
6900: 20 54 69 63 6b 65 74 20 23 31 32 31 39 3a 20 20   Ticket #1219:  
6910: 4d 61 6b 65 20 73 75 72 65 20 62 69 6e 64 69 6e  Make sure bindin
6920: 67 20 41 50 49 73 20 63 61 6e 20 68 61 6e 64 6c  g APIs can handl
6930: 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  e a NULL pointer
6940: 2e 0a 23 20 0a 69 66 20 7b 5b 63 6c 61 6e 67 5f  ..# .if {[clang_
6950: 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65 73 73  sanitize_address
6960: 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  ]==0} {.  do_tes
6970: 74 20 63 61 70 69 33 2d 31 34 2e 31 2d 6d 69 73  t capi3-14.1-mis
6980: 75 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 63  use {.    set rc
6990: 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33   [catch {sqlite3
69a0: 5f 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20 68  _bind_text 0 1 h
69b0: 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20 20  ello 5} msg].   
69c0: 20 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d     lappend rc $m
69d0: 73 67 0a 20 20 7d 20 7b 31 20 53 51 4c 49 54 45  sg.  } {1 SQLITE
69e0: 5f 4d 49 53 55 53 45 7d 0a 7d 0a 0a 23 20 54 69  _MISUSE}.}..# Ti
69f0: 63 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e  cket #1650:  Hon
6a00: 6f 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61  or the nBytes pa
6a10: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
6a20: 65 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f  e3_prepare..#.do
6a30: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 31  _test capi3-15.1
6a40: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
6a50: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
6a60: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
6a70: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
6a80: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6a90: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6aa0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6ab0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
6ac0: 6c 20 24 6e 62 79 74 65 73 20 54 41 49 4c 5d 0a  l $nbytes TAIL].
6ad0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6ae0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
6af0: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6b00: 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  0.} {1}.do_test 
6b10: 63 61 70 69 33 2d 31 35 2e 32 20 7b 0a 20 20 73  capi3-15.2 {.  s
6b20: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6b30: 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  T.  sqlite3_colu
6b40: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
6b50: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {2}.do_test cap
6b60: 69 33 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69  i3-15.3 {.  sqli
6b70: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6b80: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
6b90: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6ba0: 35 2e 34 20 7b 0a 20 20 23 20 20 20 20 20 20 20  5.4 {.  #       
6bb0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
6bc0: 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45  67.  set sql {SE
6bd0: 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30 7d  LECT 1234567890}
6be0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6bf0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6c00: 20 24 73 71 6c 20 38 20 54 41 49 4c 5d 0a 20 20   $sql 8 TAIL].  
6c10: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6c20: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
6c30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6c40: 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74  $STMT 0].  sqlit
6c50: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6c60: 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 7d  T.  set v1.} {1}
6c70: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6c80: 35 2e 35 20 7b 0a 20 20 23 20 20 20 20 20 20 20  5.5 {.  #       
6c90: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
6ca0: 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45  67.  set sql {SE
6cb0: 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30 7d  LECT 1234567890}
6cc0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6cd0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6ce0: 20 24 73 71 6c 20 39 20 54 41 49 4c 5d 0a 20 20   $sql 9 TAIL].  
6cf0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6d00: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
6d10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6d20: 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74  $STMT 0].  sqlit
6d30: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6d40: 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32  T.  set v1.} {12
6d50: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
6d60: 31 35 2e 36 20 7b 0a 20 20 23 20 20 20 20 20 20  15.6 {.  #      
6d70: 20 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34    123456789 1234
6d80: 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53  567.  set sql {S
6d90: 45 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30  ELECT 1234567890
6da0: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
6db0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6dc0: 42 20 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a  B $sql 12 TAIL].
6dd0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6de0: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73  STMT.  set v1 [s
6df0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
6e00: 74 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c  t $STMT 0].  sql
6e10: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
6e20: 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b  TMT.  set v1.} {
6e30: 31 32 33 34 35 7d 0a 64 6f 5f 74 65 73 74 20 63  12345}.do_test c
6e40: 61 70 69 33 2d 31 35 2e 37 20 7b 0a 20 20 23 20  api3-15.7 {.  # 
6e50: 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 39         123456789
6e60: 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20 73   1234567.  set s
6e70: 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 2e 33 34  ql {SELECT 12.34
6e80: 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54  567890}.  set ST
6e90: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6ea0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 31 32 20  are $DB $sql 12 
6eb0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6ec0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74  step $STMT.  set
6ed0: 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   v1 [sqlite3_col
6ee0: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
6ef0: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
6f00: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
6f10: 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33 34 7d 0a  et v1.} {12.34}.
6f20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
6f30: 2e 38 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20  .8 {.  #        
6f40: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
6f50: 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  7.  set sql {SEL
6f60: 45 43 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d  ECT 12.34567890}
6f70: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6f80: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6f90: 20 24 73 71 6c 20 31 34 20 54 41 49 4c 5d 0a 20   $sql 14 TAIL]. 
6fa0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6fb0: 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71  TMT.  set v1 [sq
6fc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
6fd0: 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73  ble $STMT 0].  s
6fe0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6ff0: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d  $STMT.  set v1.}
7000: 20 7b 31 32 2e 33 34 35 36 7d 0a 0a 23 20 4d 61   {12.3456}..# Ma
7010: 6b 65 20 73 75 72 65 20 63 6f 64 65 20 69 73 20  ke sure code is 
7020: 61 6c 77 61 79 73 20 67 65 6e 65 72 61 74 65 64  always generated
7030: 20 65 76 65 6e 20 69 66 20 61 6e 20 49 46 20 45   even if an IF E
7040: 58 49 53 54 53 20 6f 72 20 0a 23 20 49 46 20 4e  XISTS or .# IF N
7050: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
7060: 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 61 74   is present that
7070: 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20   the table does 
7080: 6e 6f 74 20 6f 72 0a 23 20 64 6f 65 73 20 65 78  not or.# does ex
7090: 69 73 74 73 2e 20 20 54 68 61 74 20 77 61 79 20  ists.  That way 
70a0: 77 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 68  we will always h
70b0: 61 76 65 20 61 20 70 72 65 70 61 72 65 64 20 73  ave a prepared s
70c0: 74 61 74 65 6d 65 6e 74 0a 23 20 74 6f 20 65 78  tatement.# to ex
70d0: 70 69 72 65 20 77 68 65 6e 20 74 68 65 20 73 63  pire when the sc
70e0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 23 0a  hema changes..#.
70f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36  do_test capi3-16
7100: 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b  .1 {.  set sql {
7110: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
7120: 49 53 54 53 20 74 33 7d 0a 20 20 73 65 74 20 53  ISTS t3}.  set S
7130: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7140: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31  pare $DB $sql -1
7150: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7160: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7170: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22    expr {$STMT!="
7180: 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  "}.} {1}.do_test
7190: 20 63 61 70 69 33 2d 31 36 2e 32 20 7b 0a 20 20   capi3-16.2 {.  
71a0: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
71b0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
71c0: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
71d0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
71e0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
71f0: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  l -1 TAIL].  sql
7200: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
7210: 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d  TMT.  expr {$STM
7220: 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20  T!=""}.} {1}..# 
7230: 42 75 74 20 73 74 69 6c 6c 20 77 65 20 64 6f 20  But still we do 
7240: 6e 6f 74 20 67 65 6e 65 72 61 74 65 20 63 6f 64  not generate cod
7250: 65 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  e if there is no
7260: 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73 74 20 63   SQL.#.do_test c
7270: 61 70 69 33 2d 31 36 2e 33 20 7b 0a 20 20 73 65  api3-16.3 {.  se
7280: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
7290: 70 72 65 70 61 72 65 20 24 44 42 20 7b 7d 20 2d  prepare $DB {} -
72a0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
72b0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
72c0: 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d  .  expr {$STMT==
72d0: 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  ""}.} {1}.do_tes
72e0: 74 20 63 61 70 69 33 2d 31 36 2e 34 20 7b 0a 20  t capi3-16.4 {. 
72f0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
7300: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
7310: 3b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ;} -1 TAIL].  sq
7320: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
7330: 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54  STMT.  expr {$ST
7340: 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23  MT==""}.} {1}..#
7350: 20 54 69 63 6b 65 74 20 23 32 34 32 36 3a 20 20   Ticket #2426:  
7360: 4d 69 73 75 73 65 20 6f 66 20 73 71 6c 69 74 65  Misuse of sqlite
7370: 33 5f 63 6f 6c 75 6d 6e 5f 2a 20 62 79 20 63 61  3_column_* by ca
7380: 6c 6c 69 6e 67 20 69 74 20 61 66 74 65 72 0a 23  lling it after.#
7390: 20 61 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   a sqlite3_reset
73a0: 20 73 68 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c   should be harml
73b0: 65 73 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ess..#.do_test c
73c0: 61 70 69 33 2d 31 37 2e 31 20 7b 0a 20 20 73 65  api3-17.1 {.  se
73d0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
73e0: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
73f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d  ECT * FROM t2} -
7400: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
7410: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
7420: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
7430: 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a  t $STMT 0.} {1}.
7440: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37  do_test capi3-17
7450: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  .2 {.  sqlite3_r
7460: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c  eset $STMT.  sql
7470: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
7480: 24 53 54 4d 54 20 30 0a 7d 20 7b 30 7d 0a 64 6f  $STMT 0.} {0}.do
7490: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37 2e 33  _test capi3-17.3
74a0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
74b0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
74c0: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 56 65 72  QLITE_OK}..# Ver
74d0: 69 66 79 20 74 68 61 74 20 73 71 6c 69 74 65 33  ify that sqlite3
74e0: 5f 73 74 65 70 28 29 20 66 61 69 6c 73 20 77 69  _step() fails wi
74f0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  th an SQLITE_SCH
7500: 45 4d 41 20 65 72 72 6f 72 0a 23 20 77 68 65 6e  EMA error.# when
7510: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
7520: 73 20 70 72 65 70 61 72 65 64 20 77 69 74 68 20  s prepared with 
7530: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
7540: 29 20 28 6e 6f 74 0a 23 20 73 71 6c 69 74 65 33  ) (not.# sqlite3
7550: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 20 61  _prepare_v2()) a
7560: 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 68 61  nd the schema ha
7570: 73 20 63 68 61 6e 67 65 64 2e 0a 23 0a 64 6f 5f  s changed..#.do_
7580: 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 31 20  test capi3-18.1 
7590: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
75a0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 64 62  lite3_prepare db
75b0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
75c0: 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t2} -1 TAIL].  s
75d0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
75e0: 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43  db.  db2 eval {C
75f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78  REATE TABLE t3(x
7600: 29 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  )}.  db2 close. 
7610: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7620: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52  TMT.} {SQLITE_ER
7630: 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROR}.do_test cap
7640: 69 33 2d 31 38 2e 32 20 7b 0a 20 20 73 71 6c 69  i3-18.2 {.  sqli
7650: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
7660: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64    sqlite3_errcod
7670: 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45 5f 53  e db.} {SQLITE_S
7680: 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73 74 20 63  CHEMA}.do_test c
7690: 61 70 69 33 2d 31 38 2e 33 20 7b 0a 20 20 73 71  api3-18.3 {.  sq
76a0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 0a  lite3_errmsg db.
76b0: 7d 20 7b 64 61 74 61 62 61 73 65 20 73 63 68 65  } {database sche
76c0: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d 0a  ma has changed}.
76d0: 23 20 54 68 65 20 65 72 72 6f 72 20 70 65 72 73  # The error pers
76e0: 69 73 74 20 6f 6e 20 72 65 74 72 79 20 77 68 65  ist on retry whe
76f0: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
7700: 65 28 29 20 68 61 73 20 62 65 65 6e 20 75 73 65  e() has been use
7710: 64 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  d..do_test capi3
7720: 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -18.4 {.  sqlite
7730: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
7740: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
7750: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 35  _test capi3-18.5
7760: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
7770: 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  et $STMT.  sqlit
7780: 65 33 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20  e3_errcode db.} 
7790: 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a  {SQLITE_SCHEMA}.
77a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38  do_test capi3-18
77b0: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .6 {.  sqlite3_e
77c0: 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61  rrmsg db.} {data
77d0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
77e0: 63 68 61 6e 67 65 64 7d 0a 73 71 6c 69 74 65 33  changed}.sqlite3
77f0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7800: 0a 23 20 54 69 63 6b 65 74 20 23 33 31 33 34 2e  .# Ticket #3134.
7810: 20 20 50 72 65 70 61 72 65 20 61 20 73 74 61 74    Prepare a stat
7820: 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 20 6e 42  ement with an nB
7830: 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20 6f  ytes parameter o
7840: 66 20 30 2e 0a 23 20 4d 61 6b 65 20 73 75 72 65  f 0..# Make sure
7850: 20 74 68 69 73 20 77 6f 72 6b 73 20 63 6f 72 72   this works corr
7860: 65 63 74 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e  ectly and does n
7870: 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6d 65 6d  ot reference mem
7880: 6f 72 79 20 6f 75 74 20 6f 66 0a 23 20 72 61 6e  ory out of.# ran
7890: 67 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  ge..#.do_test ca
78a0: 70 69 33 2d 31 39 2e 31 20 7b 0a 20 20 73 71 6c  pi3-19.1 {.  sql
78b0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 74 6b 74  ite3_prepare_tkt
78c0: 33 31 33 34 20 64 62 0a 7d 20 7b 7d 0a 0a 23 20  3134 db.} {}..# 
78d0: 54 65 73 74 20 74 68 61 74 20 63 61 6c 6c 69 6e  Test that callin
78e0: 67 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  g sqlite3_column
78f0: 5f 62 6c 6f 62 28 29 20 6f 6e 20 61 20 54 45 58  _blob() on a TEX
7900: 54 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  T value does not
7910: 20 63 68 61 6e 67 65 0a 23 20 74 68 65 20 72 65   change.# the re
7920: 74 75 72 6e 20 74 79 70 65 20 6f 66 20 73 75 62  turn type of sub
7930: 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
7940: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7950: 74 79 70 65 28 29 2e 0a 23 0a 64 6f 5f 65 78 65  type()..#.do_exe
7960: 63 73 71 6c 5f 74 65 73 74 20 32 30 2e 31 20 7b  csql_test 20.1 {
7970: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
7980: 74 34 28 78 29 3b 0a 20 20 49 4e 53 45 52 54 20  t4(x);.  INSERT 
7990: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
79a0: 61 62 63 64 65 66 67 68 69 6a 27 29 3b 0a 7d 0a  abcdefghij');.}.
79b0: 64 6f 5f 74 65 73 74 20 32 30 2e 32 20 7b 0a 20  do_test 20.2 {. 
79c0: 20 73 65 74 20 73 74 6d 74 20 5b 73 71 6c 69 74   set stmt [sqlit
79d0: 65 33 5f 70 72 65 70 61 72 65 20 64 62 20 22 53  e3_prepare db "S
79e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22  ELECT * FROM t4"
79f0: 20 2d 31 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c   -1 dummy].  sql
7a00: 69 74 65 33 5f 73 74 65 70 20 24 73 74 6d 74 0a  ite3_step $stmt.
7a10: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
7a20: 6f 5f 74 65 73 74 20 32 30 2e 33 20 7b 20 73 71  o_test 20.3 { sq
7a30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
7a40: 65 20 24 73 74 6d 74 20 30 20 7d 20 7b 54 45 58  e $stmt 0 } {TEX
7a50: 54 7d 0a 64 6f 5f 74 65 73 74 20 32 30 2e 34 20  T}.do_test 20.4 
7a60: 7b 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  { sqlite3_column
7a70: 5f 62 6c 6f 62 20 24 73 74 6d 74 20 30 20 7d 20  _blob $stmt 0 } 
7a80: 7b 61 62 63 64 65 66 67 68 69 6a 7d 0a 64 6f 5f  {abcdefghij}.do_
7a90: 74 65 73 74 20 32 30 2e 35 20 7b 20 73 71 6c 69  test 20.5 { sqli
7aa0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20  te3_column_type 
7ab0: 24 73 74 6d 74 20 30 20 7d 20 7b 54 45 58 54 7d  $stmt 0 } {TEXT}
7ac0: 0a 64 6f 5f 74 65 73 74 20 32 30 2e 36 20 7b 20  .do_test 20.6 { 
7ad0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7ae0: 20 24 73 74 6d 74 20 7d 20 53 51 4c 49 54 45 5f   $stmt } SQLITE_
7af0: 4f 4b 0a 0a 0a 23 20 54 65 73 74 73 20 6f 66 20  OK...# Tests of 
7b00: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 77 68  the interface wh
7b10: 65 6e 20 6e 6f 20 56 46 53 20 69 73 20 72 65 67  en no VFS is reg
7b20: 69 73 74 65 72 65 64 2e 0a 23 0a 69 66 20 7b 21  istered..#.if {!
7b30: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 65 73  [info exists tes
7b40: 74 65 72 5f 64 6f 5f 62 69 6e 61 72 79 6c 6f 67  ter_do_binarylog
7b50: 5d 7d 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ]} {.  db close.
7b60: 20 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72    vfs_unregister
7b70: 5f 61 6c 6c 0a 20 20 64 6f 5f 74 65 73 74 20 63  _all.  do_test c
7b80: 61 70 69 33 2d 32 30 2e 31 20 7b 0a 20 20 20 20  api3-20.1 {.    
7b90: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 31 30  sqlite3_sleep 10
7ba0: 30 0a 20 20 7d 20 7b 30 7d 0a 20 20 76 66 73 5f  0.  } {0}.  vfs_
7bb0: 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 7d  reregister_all.}
7bc0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.