/ Hex Artifact Content
Login

Artifact f0c66919e43d42e1572a69be039e4527a931b00f:


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 65 74 20 3a 3a 63 61  ].  }.  set ::ca
1230: 70 69 33 5f 65 72 72 6e 6f 20 5b 73 71 6c 69 74  pi3_errno [sqlit
1240: 65 33 5f 73 79 73 74 65 6d 5f 65 72 72 6e 6f 20  e3_system_errno 
1250: 24 64 62 32 5d 0a 20 20 6c 69 73 74 20 5b 73 71  $db2].  list [sq
1260: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
1270: 72 72 63 6f 64 65 20 24 64 62 32 5d 20 5b 65 78  rrcode $db2] [ex
1280: 70 72 20 7b 24 3a 3a 63 61 70 69 33 5f 65 72 72  pr {$::capi3_err
1290: 6e 6f 21 3d 30 7d 5d 0a 7d 20 7b 53 51 4c 49 54  no!=0}].} {SQLIT
12a0: 45 5f 43 41 4e 54 4f 50 45 4e 20 31 7d 0a 64 6f  E_CANTOPEN 1}.do
12b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 34 20  _test capi3-3.4 
12c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
12d0: 73 67 20 24 64 62 32 0a 7d 20 7b 75 6e 61 62 6c  sg $db2.} {unabl
12e0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
12f0: 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73 74  se file}.do_test
1300: 20 63 61 70 69 33 2d 33 2e 35 20 7b 0a 20 20 6c   capi3-3.5 {.  l
1310: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 73 79 73  ist [sqlite3_sys
1320: 74 65 6d 5f 65 72 72 6e 6f 20 24 64 62 32 5d 20  tem_errno $db2] 
1330: 5b 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24  [sqlite3_close $
1340: 64 62 32 5d 0a 7d 20 5b 6c 69 73 74 20 24 3a 3a  db2].} [list $::
1350: 63 61 70 69 33 5f 65 72 72 6e 6f 20 53 51 4c 49  capi3_errno SQLI
1360: 54 45 5f 4f 4b 5d 0a 69 66 20 7b 5b 63 6c 61 6e  TE_OK].if {[clan
1370: 67 5f 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65  g_sanitize_addre
1380: 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74  ss]==0} {.  do_t
1390: 65 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 31 2d  est capi3-3.6.1-
13a0: 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 73 71 6c  misuse {.    sql
13b0: 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a  ite3_close $db2.
13c0: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55    } {SQLITE_MISU
13d0: 53 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  SE}.  do_test ca
13e0: 70 69 33 2d 33 2e 36 2e 32 2d 6d 69 73 75 73 65  pi3-3.6.2-misuse
13f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   {.    sqlite3_e
1400: 72 72 6d 73 67 20 24 64 62 32 0a 20 20 7d 20 7b  rrmsg $db2.  } {
1410: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
1420: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
1430: 71 75 65 6e 63 65 7d 0a 20 20 69 66 63 61 70 61  quence}.  ifcapa
1440: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
1450: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
1460: 33 2e 36 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20  3.6.3-misuse {. 
1470: 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74       utf8 [sqlit
1480: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 64 62 32  e3_errmsg16 $db2
1490: 5d 0a 20 20 20 20 7d 20 7b 6c 69 62 72 61 72 79  ].    } {library
14a0: 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20   routine called 
14b0: 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 7d  out of sequence}
14c0: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  .  }.}..do_test 
14d0: 63 61 70 69 33 2d 33 2e 37 20 7b 0a 20 20 73 65  capi3-3.7 {.  se
14e0: 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f  t db2 [sqlite3_o
14f0: 70 65 6e 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65  pen].  sqlite3_e
1500: 72 72 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53  rrcode $db2.} {S
1510: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
1520: 74 20 63 61 70 69 33 2d 33 2e 38 20 7b 0a 20 20  t capi3-3.8 {.  
1530: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
1540: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1550: 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74  ..# rename sqlit
1560: 65 33 5f 6f 70 65 6e 20 22 22 0a 23 20 72 65 6e  e3_open "".# ren
1570: 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ame sqlite3_open
1580: 5f 6f 6c 64 20 73 71 6c 69 74 65 33 5f 6f 70 65  _old sqlite3_ope
1590: 6e 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  n..ifcapable {ut
15a0: 66 31 36 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 63  f16} {.do_test c
15b0: 61 70 69 33 2d 34 2e 31 20 7b 0a 20 20 73 65 74  api3-4.1 {.  set
15c0: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
15d0: 65 6e 31 36 20 5b 75 74 66 31 36 20 74 65 73 74  en16 [utf16 test
15e0: 2e 64 62 5d 20 7b 7d 5d 0a 20 20 73 71 6c 69 74  .db] {}].  sqlit
15f0: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
1600: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20  } {SQLITE_OK}.# 
1610: 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74  FIX ME: Should t
1620: 65 73 74 20 74 68 65 20 64 62 20 68 61 6e 64 6c  est the db handl
1630: 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74  e works..do_test
1640: 20 63 61 70 69 33 2d 34 2e 32 20 7b 0a 20 20 73   capi3-4.2 {.  s
1650: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62  qlite3_close $db
1660: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1670: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e  do_test capi3-4.
1680: 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a 20 20  3 {.  catch {.  
1690: 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74    set db2 [sqlit
16a0: 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36  e3_open16 [utf16
16b0: 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f 74 65 73   /bogus/path/tes
16c0: 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 7d 0a 20 20  t.db] {}].  }.  
16d0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
16e0: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 43  $db2.} {SQLITE_C
16f0: 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73 74  ANTOPEN}.do_test
1700: 20 63 61 70 69 33 2d 34 2e 34 20 7b 0a 20 20 75   capi3-4.4 {.  u
1710: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72  tf8 [sqlite3_err
1720: 6d 73 67 31 36 20 24 64 62 32 5d 0a 7d 20 7b 75  msg16 $db2].} {u
1730: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
1740: 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f  tabase file}.do_
1750: 74 65 73 74 20 63 61 70 69 33 2d 34 2e 35 20 7b  test capi3-4.5 {
1760: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1770: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1780: 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a  OK}.} ;# utf16..
1790: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
17a0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
17b0: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63 61  following API ca
17c0: 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33  lls:.#.# sqlite3
17d0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20  _column_count.# 
17e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
17f0: 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ame.# sqlite3_co
1800: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71  lumn_name16.# sq
1810: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1820: 6c 74 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f  ltype.# sqlite3_
1830: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
1840: 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61  6.#.# $STMT is a
1850: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
1860: 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69  atement. $test i
1870: 73 20 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20  s a prefix.# to 
1880: 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d  use for test nam
1890: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 70  es within this p
18a0: 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61  roc. $names is a
18b0: 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63   list.# of the c
18c0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
18d0: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72   should be retur
18e0: 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20  ned by $STMT..# 
18f0: 24 64 65 63 6c 74 79 70 65 73 20 69 73 20 61 20  $decltypes is a 
1900: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  list of column d
1910: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73  eclaration types
1920: 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20   for $STMT..#.# 
1930: 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74  Example:.#.# set
1940: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
1950: 72 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 31  repare "SELECT 1
1960: 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d  , 2, 2;" -1 DUMM
1970: 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64 65  Y].# check_heade
1980: 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20 33  r test1.1 {1 2 3
1990: 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a 70  } {"" "" ""}.#.p
19a0: 72 6f 63 20 63 68 65 63 6b 5f 68 65 61 64 65 72  roc check_header
19b0: 20 7b 53 54 4d 54 20 74 65 73 74 20 6e 61 6d 65   {STMT test name
19c0: 73 20 64 65 63 6c 74 79 70 65 73 7d 20 7b 0a 0a  s decltypes} {..
19d0: 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75    # Use the retu
19e0: 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  rn value of sqli
19f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
1a00: 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20  () to build.  # 
1a10: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
1a20: 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49   indexes. i.e. I
1a30: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
1a40: 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c  _count.  # is 3,
1a50: 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   build the list 
1a60: 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a  {0 1 2}..  set :
1a70: 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  :idxlist [list].
1a80: 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20    set ::numcols 
1a90: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1aa0: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
1ab0: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
1ac0: 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b   < $::numcols} {
1ad0: 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64  incr i} {lappend
1ae0: 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a   ::idxlist $i}..
1af0: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1b00: 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74   in UTF-8.  do_t
1b10: 65 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20 20  est $test.1 {.  
1b20: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1b30: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
1b40: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
1b50: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
1b60: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1b70: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d  _name $STMT $i]}
1b80: 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c   .    set cnamel
1b90: 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a  ist.  } $names..
1ba0: 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73    # Column names
1bb0: 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63   in UTF-16.  ifc
1bc0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1bd0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
1be0: 73 74 2e 32 20 7b 0a 20 20 20 20 20 20 73 65 74  st.2 {.      set
1bf0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1c00: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
1c10: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
1c20: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
1c30: 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71  melist [utf8 [sq
1c40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1c50: 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20  e16 $STMT $i]]. 
1c60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1c70: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
1c80: 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23   $names.  }..  #
1c90: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1ca0: 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74   UTF-8.  do_test
1cb0: 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 20 20 73   $test.3 {.    s
1cc0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1cd0: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
1ce0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
1cf0: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
1d00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1d10: 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a 20  me $STMT $i]} . 
1d20: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1d30: 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20 23  .  } $names..  #
1d40: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   Column names in
1d50: 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70 61   UTF-16.  ifcapa
1d60: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
1d70: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
1d80: 34 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  4 {.      set cn
1d90: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
1da0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
1db0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
1dc0: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
1dd0: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
1de0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
1df0: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
1e00: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63 6e    }.      set cn
1e10: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 6e  amelist.    } $n
1e20: 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43 6f  ames.  }..  # Co
1e30: 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54  lumn names in UT
1e40: 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24 74  F-8.  do_test $t
1e50: 65 73 74 2e 35 20 7b 0a 20 20 20 20 73 65 74 20  est.5 {.    set 
1e60: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
1e70: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24  .    foreach i $
1e80: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
1e90: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69   cnamelist [sqli
1ea0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1eb0: 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a  ype $STMT $i]} .
1ec0: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1ed0: 74 0a 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73  t.  } $decltypes
1ee0: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 64 65 63  ..  # Column dec
1ef0: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 69  laration types i
1f00: 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70  n UTF-16.  ifcap
1f10: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1f20: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1f30: 2e 36 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  .6 {.      set c
1f40: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
1f50: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
1f60: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
1f70: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
1f80: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
1f90: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1fa0: 79 70 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ype16 $STMT $i]]
1fb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1fc0: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
1fd0: 20 7d 20 24 64 65 63 6c 74 79 70 65 73 0a 20 20   } $decltypes.  
1fe0: 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20 73 6f 6d  }...  # Test som
1ff0: 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 63  e out of range c
2000: 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20 69 66 63  onditions:.  ifc
2010: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
2020: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
2030: 73 74 2e 37 20 7b 0a 20 20 20 20 20 20 6c 69 73  st.7 {.      lis
2040: 74 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  t \.        [sql
2050: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
2060: 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20   $STMT -1] \.   
2070: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
2080: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d  lumn_name16 $STM
2090: 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20  T -1] \.        
20a0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
20b0: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 2d  decltype $STMT -
20c0: 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  1] \.        [sq
20d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
20e0: 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 2d 31  ltype16 $STMT -1
20f0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
2100: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
2110: 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d   $STMT $numcols]
2120: 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69   \.        [sqli
2130: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
2140: 36 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73  6 $STMT $numcols
2150: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
2160: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
2170: 74 79 70 65 20 24 53 54 4d 54 20 24 6e 75 6d 63  type $STMT $numc
2180: 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  ols] \.        [
2190: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
21a0: 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20  ecltype16 $STMT 
21b0: 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20 20 7d 20  $numcols].    } 
21c0: 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20  {{} {} {} {} {} 
21d0: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 0a 7d 20  {} {} {}}.  }.} 
21e0: 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69 73  ..# This proc is
21f0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
2200: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 20  e following API 
2210: 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69 74  calls:.#.# sqlit
2220: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2230: 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f  _name.# sqlite3_
2240: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
2250: 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63  me16.# sqlite3_c
2260: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
2270: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2280: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 0a 23  n_table_name16.#
2290: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
22a0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 0a 23 20  database_name.# 
22b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
22c0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 0a 23  atabase_name16.#
22d0: 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63 6f  .# $STMT is a co
22e0: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
22f0: 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20 61  ment. $test is a
2300: 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73 65   prefix.# to use
2310: 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73 20   for test names 
2320: 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f 63  within this proc
2330: 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c 69  . $names is a li
2340: 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c 75  st.# of the colu
2350: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73 68  mn names that sh
2360: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
2370: 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64 65   by $STMT..# $de
2380: 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69 73  cltypes is a lis
2390: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
23a0: 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66 6f  aration types fo
23b0: 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78 61  r $STMT..#.# Exa
23c0: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
23d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
23e0: 61 72 65 20 22 53 45 4c 45 43 54 20 31 2c 20 32  are "SELECT 1, 2
23f0: 2c 20 32 3b 22 20 2d 31 20 44 55 4d 4d 59 5d 0a  , 2;" -1 DUMMY].
2400: 23 20 63 68 65 63 6b 5f 68 65 61 64 65 72 20 74  # check_header t
2410: 65 73 74 31 2e 31 20 7b 31 20 32 20 33 7d 20 7b  est1.1 {1 2 3} {
2420: 22 22 20 22 22 20 22 22 7d 0a 23 0a 70 72 6f 63  "" "" ""}.#.proc
2430: 20 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65   check_origin_he
2440: 61 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74 20  ader {STMT test 
2450: 64 62 73 20 74 61 62 6c 65 73 20 63 6f 6c 73 7d  dbs tables cols}
2460: 20 7b 0a 20 20 23 20 49 66 20 73 71 6c 69 74 65   {.  # If sqlite
2470: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
2480: 6e 61 6d 65 28 29 20 61 6e 64 20 66 72 69 65 6e  name() and frien
2490: 64 73 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 69  ds are not compi
24a0: 6c 65 64 20 69 6e 74 6f 0a 20 20 23 20 74 68 69  led into.  # thi
24b0: 73 20 62 75 69 6c 64 2c 20 74 68 69 73 20 70 72  s build, this pr
24c0: 6f 63 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 20  oc is a no-op.. 
24d0: 20 69 66 63 61 70 61 62 6c 65 20 63 6f 6c 75 6d   ifcapable colum
24e0: 6e 6d 65 74 61 64 61 74 61 20 7b 0a 20 20 20 20  nmetadata {.    
24f0: 23 20 55 73 65 20 74 68 65 20 72 65 74 75 72 6e  # Use the return
2500: 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
2510: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29  3_column_count()
2520: 20 74 6f 20 62 75 69 6c 64 0a 20 20 20 20 23 20   to build.    # 
2530: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
2540: 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49   indexes. i.e. I
2550: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
2560: 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20 69 73 20  _count.    # is 
2570: 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73  3, build the lis
2580: 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 20 20 73  t {0 1 2}..    s
2590: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
25a0: 73 74 5d 0a 20 20 20 20 73 65 74 20 3a 3a 6e 75  st].    set ::nu
25b0: 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63  mcols [sqlite3_c
25c0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d  olumn_count $STM
25d0: 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20  T].    for {set 
25e0: 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75  i 0} {$i < $::nu
25f0: 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20  mcols} {incr i} 
2600: 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69  {lappend ::idxli
2610: 73 74 20 24 69 7d 0a 20 20 0a 20 20 20 20 23 20  st $i}.  .    # 
2620: 44 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 69  Database names i
2630: 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74  n UTF-8.    do_t
2640: 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a 20 20  est $test.8 {.  
2650: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
2660: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66  t [list].      f
2670: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
2680: 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70  t {.        lapp
2690: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73  end cnamelist [s
26a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
26b0: 74 61 62 61 73 65 5f 6e 61 6d 65 20 24 53 54 4d  tabase_name $STM
26c0: 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20  T $i].      } . 
26d0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
26e0: 73 74 0a 20 20 20 20 7d 20 24 64 62 73 0a 20 20  st.    } $dbs.  
26f0: 0a 20 20 20 20 23 20 44 61 74 61 62 61 73 65 20  .    # Database 
2700: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  names in UTF-16.
2710: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75      ifcapable {u
2720: 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f  tf16} {.      do
2730: 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20 7b 0a  _test $test.9 {.
2740: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
2750: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2760: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2770: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2780: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d      lappend cnam
2790: 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c  elist [utf8 [sql
27a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
27b0: 62 61 73 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d  base_name16 $STM
27c0: 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d  T $i]].        }
27d0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61  .        set cna
27e0: 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24  melist.      } $
27f0: 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20  dbs.    }.  .   
2800: 20 23 20 54 61 62 6c 65 20 6e 61 6d 65 73 20 69   # Table names i
2810: 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74  n UTF-8.    do_t
2820: 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20  est $test.10 {. 
2830: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2840: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
2850: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
2860: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  st {.        lap
2870: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
2880: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2890: 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54 4d 54 20  able_name $STMT 
28a0: 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20  $i].      } .   
28b0: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
28c0: 0a 20 20 20 20 7d 20 24 74 61 62 6c 65 73 0a 20  .    } $tables. 
28d0: 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61   .    # Table na
28e0: 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  mes in UTF-16.  
28f0: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
2900: 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74  16} {.      do_t
2910: 65 73 74 20 24 74 65 73 74 2e 31 31 20 7b 0a 20  est $test.11 {. 
2920: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2930: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
2940: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
2950: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20  dxlist {.       
2960: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
2970: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
2980: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
2990: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
29a0: 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]].        }.   
29b0: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
29c0: 73 74 0a 20 20 20 20 20 20 7d 20 24 74 61 62 6c  st.      } $tabl
29d0: 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  es.    }.  .    
29e0: 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65 73 20 69  # Origin names i
29f0: 6e 20 55 54 46 2d 38 0a 20 20 20 20 64 6f 5f 74  n UTF-8.    do_t
2a00: 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20  est $test.12 {. 
2a10: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2a20: 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20  st [list].      
2a30: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
2a40: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  st {.        lap
2a50: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
2a60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
2a70: 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53 54 4d 54  rigin_name $STMT
2a80: 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a 20 20   $i].      } .  
2a90: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
2aa0: 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20  t.    } $cols.  
2ab0: 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 64 65  .    # Origin de
2ac0: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20  claration types 
2ad0: 69 6e 20 55 54 46 2d 31 36 0a 20 20 20 20 69 66  in UTF-16.    if
2ae0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
2af0: 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  {.      do_test 
2b00: 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 20 20 20  $test.13 {.     
2b10: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
2b20: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 20 20   [list].        
2b30: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
2b40: 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c  st {.          l
2b50: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
2b60: 20 5b 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f   [utf8 [sqlite3_
2b70: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
2b80: 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a  me16 $STMT $i]].
2b90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2ba0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
2bb0: 20 20 20 20 20 20 7d 20 24 63 6f 6c 73 0a 20 20        } $cols.  
2bc0: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 54 68 69    }.  }.}..# Thi
2bd0: 73 20 70 72 6f 63 20 69 73 20 75 73 65 64 20 74  s proc is used t
2be0: 6f 20 74 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f  o test the follo
2bf0: 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a 23 20 73  wing APIs:.#.# s
2c00: 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
2c10: 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  t.# sqlite3_colu
2c20: 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c 69 74 65  mn_type.# sqlite
2c30: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a 23 20 73  3_column_int.# s
2c40: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
2c50: 78 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  xt.# sqlite3_col
2c60: 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20 73 71 6c  umn_text16.# sql
2c70: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
2c80: 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20 69 73 20  le.#.# $STMT is 
2c90: 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73  a compiled SQL s
2ca0: 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 77 68 69  tatement for whi
2cb0: 63 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  ch the previous 
2cc0: 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71 6c 69 74  call .# to sqlit
2cd0: 65 33 5f 73 74 65 70 20 72 65 74 75 72 6e 65 64  e3_step returned
2ce0: 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20 24 74 65   SQLITE_ROW. $te
2cf0: 73 74 20 69 73 20 61 20 70 72 65 66 69 78 20 74  st is a prefix t
2d00: 6f 20 75 73 65 20 0a 23 20 66 6f 72 20 74 65 73  o use .# for tes
2d10: 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74  t names within t
2d20: 68 69 73 20 70 72 6f 63 2e 20 24 74 79 70 65 73  his proc. $types
2d30: 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 74 68   is a list of th
2d40: 65 20 0a 23 20 6d 61 6e 69 66 65 73 74 20 74 79  e .# manifest ty
2d50: 70 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  pes for the curr
2d60: 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74 73 2c 20  ent row. $ints, 
2d70: 24 64 6f 75 62 6c 65 73 20 61 6e 64 20 24 73 74  $doubles and $st
2d80: 72 69 6e 67 73 0a 23 20 61 72 65 20 6c 69 73 74  rings.# are list
2d90: 73 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  s of the integer
2da0: 2c 20 72 65 61 6c 20 61 6e 64 20 73 74 72 69 6e  , real and strin
2db0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2dc0: 73 20 6f 66 0a 23 20 74 68 65 20 76 61 6c 75 65  s of.# the value
2dd0: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
2de0: 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61 6d 70 6c   row..#.# Exampl
2df0: 65 3a 0a 23 0a 23 20 73 65 74 20 53 54 4d 54 20  e:.#.# set STMT 
2e00: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
2e10: 20 22 53 45 4c 45 43 54 20 27 68 65 6c 6c 6f 27   "SELECT 'hello'
2e20: 2c 20 31 2e 31 2c 20 4e 55 4c 4c 22 20 2d 31 20  , 1.1, NULL" -1 
2e30: 44 55 4d 4d 59 5d 0a 23 20 73 71 6c 69 74 65 33  DUMMY].# sqlite3
2e40: 5f 73 74 65 70 20 24 53 54 4d 54 0a 23 20 63 68  _step $STMT.# ch
2e50: 65 63 6b 5f 64 61 74 61 20 74 65 73 74 31 2e 32  eck_data test1.2
2e60: 20 7b 54 45 58 54 20 52 45 41 4c 20 4e 55 4c 4c   {TEXT REAL NULL
2e70: 7d 20 7b 30 20 31 20 30 7d 20 7b 30 20 31 2e 31  } {0 1 0} {0 1.1
2e80: 20 30 7d 20 7b 68 65 6c 6c 6f 20 31 2e 31 20 7b   0} {hello 1.1 {
2e90: 7d 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f  }}.#.proc check_
2ea0: 64 61 74 61 20 7b 53 54 4d 54 20 74 65 73 74 20  data {STMT test 
2eb0: 74 79 70 65 73 20 69 6e 74 73 20 64 6f 75 62 6c  types ints doubl
2ec0: 65 73 20 73 74 72 69 6e 67 73 7d 20 7b 0a 0a 20  es strings} {.. 
2ed0: 20 23 20 55 73 65 20 74 68 65 20 72 65 74 75 72   # Use the retur
2ee0: 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74  n value of sqlit
2ef0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
2f00: 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23 20 61  ) to build.  # a
2f10: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   list of column 
2f20: 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20 49 66  indexes. i.e. If
2f30: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2f40: 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33 2c 20  count.  # is 3, 
2f50: 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 7b  build the list {
2f60: 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20 3a 3a  0 1 2}..  set ::
2f70: 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  idxlist [list]. 
2f80: 20 73 65 74 20 6e 75 6d 63 6f 6c 73 20 5b 73 71   set numcols [sq
2f90: 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
2fa0: 20 24 53 54 4d 54 5d 0a 20 20 66 6f 72 20 7b 73   $STMT].  for {s
2fb0: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e  et i 0} {$i < $n
2fc0: 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d  umcols} {incr i}
2fd0: 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c   {lappend ::idxl
2fe0: 69 73 74 20 24 69 7d 0a 0a 23 20 74 79 70 65 73  ist $i}..# types
2ff0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
3000: 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73 20 5b   {.  set types [
3010: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
3020: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
3030: 20 73 65 74 20 78 20 5b 73 71 6c 69 74 65 33 5f   set x [sqlite3_
3040: 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d  column_type $STM
3050: 54 20 24 69 5d 0a 20 20 20 20 23 20 45 56 49 44  T $i].    # EVID
3060: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 37 39 33  ENCE-OF: R-12793
3070: 2d 34 33 32 38 33 20 45 76 65 72 79 20 76 61 6c  -43283 Every val
3080: 75 65 20 69 6e 20 53 51 4c 69 74 65 20 68 61 73  ue in SQLite has
3090: 20 6f 6e 65 20 6f 66 20 66 69 76 65 0a 20 20 20   one of five.   
30a0: 20 23 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20 64   # fundamental d
30b0: 61 74 61 74 79 70 65 73 3a 20 36 34 2d 62 69 74  atatypes: 64-bit
30c0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
30d0: 36 34 2d 62 69 74 20 49 45 45 45 20 66 6c 6f 61  64-bit IEEE floa
30e0: 74 69 6e 67 0a 20 20 20 20 23 20 70 6f 69 6e 74  ting.    # point
30f0: 20 6e 75 6d 62 65 72 20 73 74 72 69 6e 67 20 42   number string B
3100: 4c 4f 42 20 4e 55 4c 4c 0a 20 20 20 20 69 66 20  LOB NULL.    if 
3110: 7b 5b 6c 73 65 61 72 63 68 20 7b 49 4e 54 45 47  {[lsearch {INTEG
3120: 45 52 20 46 4c 4f 41 54 20 54 45 58 54 20 42 4c  ER FLOAT TEXT BL
3130: 4f 42 20 4e 55 4c 4c 7d 20 24 78 5d 3c 30 7d 20  OB NULL} $x]<0} 
3140: 7b 0a 20 20 20 20 20 20 73 65 74 20 74 79 70 65  {.      set type
3150: 73 20 45 52 52 4f 52 0a 20 20 20 20 20 20 62 72  s ERROR.      br
3160: 65 61 6b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  eak.    } else {
3170: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 74  .      lappend t
3180: 79 70 65 73 20 24 78 0a 20 20 20 20 7d 0a 20 20  ypes $x.    }.  
3190: 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20  }.  set types.} 
31a0: 24 74 79 70 65 73 0a 20 0a 0a 23 20 49 6e 74 65  $types. ..# Inte
31b0: 67 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  gers.do_test $te
31c0: 73 74 2e 32 20 7b 0a 20 20 73 65 74 20 69 6e 74  st.2 {.  set int
31d0: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
31e0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
31f0: 61 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c  append ints [sql
3200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
3210: 34 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  4 $STMT $i]}.  s
3220: 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a  et ints.} $ints.
3230: 0a 23 20 62 79 74 65 73 0a 73 65 74 20 6c 65 6e  .# bytes.set len
3240: 73 20 5b 6c 69 73 74 5d 0a 66 6f 72 65 61 63 68  s [list].foreach
3250: 20 69 20 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a   i $::idxlist {.
3260: 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b    lappend lens [
3270: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c  string length [l
3280: 69 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24  index $strings $
3290: 69 5d 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 24 74  i]].}.do_test $t
32a0: 65 73 74 2e 33 20 7b 0a 20 20 73 65 74 20 62 79  est.3 {.  set by
32b0: 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  tes [list].  set
32c0: 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66   lens [list].  f
32d0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
32e0: 74 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  t {.    lappend 
32f0: 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  bytes [sqlite3_c
3300: 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 24 53 54 4d  olumn_bytes $STM
3310: 54 20 24 69 5d 0a 20 20 7d 0a 20 20 73 65 74 20  T $i].  }.  set 
3320: 62 79 74 65 73 0a 7d 20 24 6c 65 6e 73 0a 0a 23  bytes.} $lens..#
3330: 20 62 79 74 65 73 31 36 0a 69 66 63 61 70 61 62   bytes16.ifcapab
3340: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 73  le {utf16} {.  s
3350: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20  et lens [list]. 
3360: 20 66 6f 72 65 61 63 68 20 69 20 24 3a 3a 69 64   foreach i $::id
3370: 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70  xlist {.    lapp
3380: 65 6e 64 20 6c 65 6e 73 20 5b 65 78 70 72 20 32  end lens [expr 2
3390: 20 2a 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74   * [string lengt
33a0: 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e  h [lindex $strin
33b0: 67 73 20 24 69 5d 5d 5d 0a 20 20 7d 0a 20 20 64  gs $i]]].  }.  d
33c0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 34 20 7b  o_test $test.4 {
33d0: 0a 20 20 20 20 73 65 74 20 62 79 74 65 73 20 5b  .    set bytes [
33e0: 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 6c 65  list].    set le
33f0: 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  ns [list].    fo
3400: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
3410: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
3420: 20 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33 5f   bytes [sqlite3_
3430: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 24  column_bytes16 $
3440: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 7d 0a 20  STMT $i].    }. 
3450: 20 20 20 73 65 74 20 62 79 74 65 73 0a 20 20 7d     set bytes.  }
3460: 20 24 6c 65 6e 73 0a 7d 0a 0a 23 20 42 6c 6f 62   $lens.}..# Blob
3470: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 35  .do_test $test.5
3480: 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c   {.  set utf8 [l
3490: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
34a0: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
34b0: 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33  nd utf8 [sqlite3
34c0: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24 53 54  _column_blob $ST
34d0: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
34e0: 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a 23  f8.} $strings..#
34f0: 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24   UTF-8.do_test $
3500: 74 65 73 74 2e 36 20 7b 0a 20 20 73 65 74 20 75  test.6 {.  set u
3510: 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  tf8 [list].  for
3520: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
3530: 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73  {lappend utf8 [s
3540: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3550: 78 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20  xt $STMT $i]}.  
3560: 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69  set utf8.} $stri
3570: 6e 67 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f  ngs..# Floats.do
3580: 5f 74 65 73 74 20 24 74 65 73 74 2e 37 20 7b 0a  _test $test.7 {.
3590: 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74    set utf8 [list
35a0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
35b0: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
35c0: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
35d0: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d  lumn_double $STM
35e0: 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66  T $i]}.  set utf
35f0: 38 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20  8.} $doubles..# 
3600: 55 54 46 2d 31 36 0a 69 66 63 61 70 61 62 6c 65  UTF-16.ifcapable
3610: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f   {utf16} {.  do_
3620: 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b 0a 20  test $test.8 {. 
3630: 20 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73     set utf8 [lis
3640: 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69  t].    foreach i
3650: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
3660: 6e 64 20 75 74 66 38 20 5b 75 74 66 38 20 5b 73  nd utf8 [utf8 [s
3670: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3680: 78 74 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 7d  xt16 $STMT $i]]}
3690: 0a 20 20 20 20 73 65 74 20 75 74 66 38 0a 20 20  .    set utf8.  
36a0: 7d 20 24 73 74 72 69 6e 67 73 0a 7d 0a 0a 23 20  } $strings.}..# 
36b0: 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74  Integers.do_test
36c0: 20 24 74 65 73 74 2e 39 20 7b 0a 20 20 73 65 74   $test.9 {.  set
36d0: 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66   ints [list].  f
36e0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
36f0: 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20  t {lappend ints 
3700: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3710: 69 6e 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  int $STMT $i]}. 
3720: 20 73 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74   set ints.} $int
3730: 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74  s..# Floats.do_t
3740: 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b 0a 20  est $test.10 {. 
3750: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
3760: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3770: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
3780: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
3790: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
37a0: 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38   $i]}.  set utf8
37b0: 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55  .} $doubles..# U
37c0: 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65  TF-8.do_test $te
37d0: 73 74 2e 31 31 20 7b 0a 20 20 73 65 74 20 75 74  st.11 {.  set ut
37e0: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
37f0: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3800: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3810: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
3820: 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  t $STMT $i]}.  s
3830: 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e  et utf8.} $strin
3840: 67 73 0a 0a 23 20 54 79 70 65 73 0a 64 6f 5f 74  gs..# Types.do_t
3850: 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b 0a 20  est $test.12 {. 
3860: 20 73 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74   set types [list
3870: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
3880: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
3890: 74 79 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  types [sqlite3_c
38a0: 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54  olumn_type $STMT
38b0: 20 24 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65   $i]}.  set type
38c0: 73 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20 54 65  s.} $types..# Te
38d0: 73 74 20 74 68 61 74 20 61 6e 20 6f 75 74 20 6f  st that an out o
38e0: 66 20 72 61 6e 67 65 20 72 65 71 75 65 73 74 20  f range request 
38f0: 72 65 74 75 72 6e 73 20 74 68 65 20 65 71 75 69  returns the equi
3900: 76 61 6c 65 6e 74 20 6f 66 20 4e 55 4c 4c 0a 64  valent of NULL.d
3910: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 33 20  o_test $test.13 
3920: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
3930: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 2d 31 0a  mn_int $STMT -1.
3940: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 24 74  } {0}.do_test $t
3950: 65 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74  est.13 {.  sqlit
3960: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
3970: 53 54 4d 54 20 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a  STMT -1.} {}..}.
3980: 0a 69 66 63 61 70 61 62 6c 65 20 21 66 6c 6f 61  .ifcapable !floa
3990: 74 69 6e 67 70 6f 69 6e 74 20 7b 0a 20 20 66 69  tingpoint {.  fi
39a0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
39b0: 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  rn.}..do_test ca
39c0: 70 69 33 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63  pi3-5.0 {.  exec
39d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
39e0: 20 54 41 42 4c 45 20 74 31 28 61 20 56 41 52 49   TABLE t1(a VARI
39f0: 4e 54 2c 20 62 20 42 4c 4f 42 2c 20 63 20 56 41  NT, b BLOB, c VA
3a00: 52 43 48 41 52 28 31 36 29 29 3b 0a 20 20 20 20  RCHAR(16));.    
3a10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3a20: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
3a30: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3a40: 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  t1 VALUES('one',
3a50: 20 27 74 77 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20   'two', NULL);. 
3a60: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3a70: 31 20 56 41 4c 55 45 53 28 31 2e 32 2c 20 31 2e  1 VALUES(1.2, 1.
3a80: 33 2c 20 31 2e 34 29 3b 0a 20 20 7d 0a 20 20 73  3, 1.4);.  }.  s
3a90: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 2a  et sql "SELECT *
3aa0: 20 46 52 4f 4d 20 74 31 22 0a 20 20 73 65 74 20   FROM t1".  set 
3ab0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
3ac0: 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d  epare $DB $sql -
3ad0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
3ae0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
3af0: 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f  STMT.} 3..check_
3b00: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3b10: 69 33 2d 35 2e 31 20 7b 61 20 62 20 63 7d 20 7b  i3-5.1 {a b c} {
3b20: 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43  VARINT BLOB VARC
3b30: 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f  HAR(16)}.check_o
3b40: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
3b50: 4d 54 20 63 61 70 69 33 2d 35 2e 31 20 7b 6d 61  MT capi3-5.1 {ma
3b60: 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74  in main main} {t
3b70: 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d  1 t1 t1} {a b c}
3b80: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35  .do_test capi3-5
3b90: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .2 {.  sqlite3_s
3ba0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
3bb0: 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65  TE_ROW..check_he
3bc0: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
3bd0: 2d 35 2e 33 20 7b 61 20 62 20 63 7d 20 7b 56 41  -5.3 {a b c} {VA
3be0: 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41  RINT BLOB VARCHA
3bf0: 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69  R(16)}.check_ori
3c00: 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54  gin_header $STMT
3c10: 20 63 61 70 69 33 2d 35 2e 33 20 7b 6d 61 69 6e   capi3-5.3 {main
3c20: 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20   main main} {t1 
3c30: 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63  t1 t1} {a b c}.c
3c40: 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20  heck_data $STMT 
3c50: 63 61 70 69 33 2d 35 2e 34 20 7b 49 4e 54 45 47  capi3-5.4 {INTEG
3c60: 45 52 20 49 4e 54 45 47 45 52 20 54 45 58 54 7d  ER INTEGER TEXT}
3c70: 20 7b 31 20 32 20 33 7d 20 7b 31 2e 30 20 32 2e   {1 2 3} {1.0 2.
3c80: 30 20 33 2e 30 7d 20 7b 31 20 32 20 33 7d 0a 0a  0 3.0} {1 2 3}..
3c90: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
3ca0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  5 {.  sqlite3_st
3cb0: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
3cc0: 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61  E_ROW..check_hea
3cd0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
3ce0: 35 2e 36 20 7b 61 20 62 20 63 7d 20 7b 56 41 52  5.6 {a b c} {VAR
3cf0: 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52  INT BLOB VARCHAR
3d00: 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67  (16)}.check_orig
3d10: 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  in_header $STMT 
3d20: 63 61 70 69 33 2d 35 2e 36 20 7b 6d 61 69 6e 20  capi3-5.6 {main 
3d30: 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74  main main} {t1 t
3d40: 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68  1 t1} {a b c}.ch
3d50: 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63  eck_data $STMT c
3d60: 61 70 69 33 2d 35 2e 37 20 7b 54 45 58 54 20 54  api3-5.7 {TEXT T
3d70: 45 58 54 20 4e 55 4c 4c 7d 20 7b 30 20 30 20 30  EXT NULL} {0 0 0
3d80: 7d 20 7b 30 2e 30 20 30 2e 30 20 30 2e 30 7d 20  } {0.0 0.0 0.0} 
3d90: 7b 6f 6e 65 20 74 77 6f 20 7b 7d 7d 0a 0a 64 6f  {one two {}}..do
3da0: 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 38 20  _test capi3-5.8 
3db0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
3dc0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3dd0: 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  ROW..check_heade
3de0: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
3df0: 39 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e  9 {a b c} {VARIN
3e00: 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31  T BLOB VARCHAR(1
3e10: 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  6)}.check_origin
3e20: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3e30: 70 69 33 2d 35 2e 39 20 7b 6d 61 69 6e 20 6d 61  pi3-5.9 {main ma
3e40: 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20  in main} {t1 t1 
3e50: 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63  t1} {a b c}.chec
3e60: 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70  k_data $STMT cap
3e70: 69 33 2d 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46  i3-5.10 {FLOAT F
3e80: 4c 4f 41 54 20 54 45 58 54 7d 20 7b 31 20 31 20  LOAT TEXT} {1 1 
3e90: 31 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d  1} {1.2 1.3 1.4}
3ea0: 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a   {1.2 1.3 1.4}..
3eb0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e  do_test capi3-5.
3ec0: 31 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  11 {.  sqlite3_s
3ed0: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
3ee0: 54 45 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73 74  TE_DONE..do_test
3ef0: 20 63 61 70 69 33 2d 35 2e 31 32 20 7b 0a 20 20   capi3-5.12 {.  
3f00: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
3f10: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3f20: 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK..do_test capi
3f30: 33 2d 35 2e 32 30 20 7b 0a 20 20 73 65 74 20 73  3-5.20 {.  set s
3f40: 71 6c 20 22 53 45 4c 45 43 54 20 61 2c 20 73 75  ql "SELECT a, su
3f50: 6d 28 62 29 2c 20 6d 61 78 28 63 29 20 46 52 4f  m(b), max(c) FRO
3f60: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 61 22  M t1 GROUP BY a"
3f70: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
3f80: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
3f90: 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20   $sql -1 TAIL]. 
3fa0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3fb0: 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a  count $STMT.} 3.
3fc0: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
3fd0: 54 4d 54 20 63 61 70 69 33 2d 35 2e 32 31 20 7b  TMT capi3-5.21 {
3fe0: 61 20 73 75 6d 28 62 29 20 6d 61 78 28 63 29 7d  a sum(b) max(c)}
3ff0: 20 7b 56 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a   {VARINT {} {}}.
4000: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
4010: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d  der $STMT capi3-
4020: 35 2e 32 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d  5.22 {main {} {}
4030: 7d 20 7b 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20  } {t1 {} {}} {a 
4040: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {} {}}.do_test c
4050: 61 70 69 33 2d 35 2e 32 33 20 7b 0a 20 20 73 71  api3-5.23 {.  sq
4060: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
4070: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b  STMT.} SQLITE_OK
4080: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  ..do_test capi3-
4090: 35 2e 33 30 20 7b 0a 20 20 73 65 74 20 73 71 6c  5.30 {.  set sql
40a0: 20 22 53 45 4c 45 43 54 20 61 20 41 53 20 78 2c   "SELECT a AS x,
40b0: 20 73 75 6d 28 62 29 20 41 53 20 79 2c 20 6d 61   sum(b) AS y, ma
40c0: 78 28 63 29 20 41 53 20 7a 20 46 52 4f 4d 20 74  x(c) AS z FROM t
40d0: 31 20 41 53 20 6d 20 47 52 4f 55 50 20 42 59 20  1 AS m GROUP BY 
40e0: 78 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  x".  set STMT [s
40f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
4100: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
4110: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
4120: 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20  n_count $STMT.} 
4130: 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20  3..check_header 
4140: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 31  $STMT capi3-5.31
4150: 20 7b 78 20 79 20 7a 7d 20 7b 56 41 52 49 4e 54   {x y z} {VARINT
4160: 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72   {} {}}.check_or
4170: 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d  igin_header $STM
4180: 54 20 63 61 70 69 33 2d 35 2e 33 32 20 7b 6d 61  T capi3-5.32 {ma
4190: 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d  in {} {}} {t1 {}
41a0: 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64   {}} {a {} {}}.d
41b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 33  o_test capi3-5.3
41c0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  3 {.  sqlite3_fi
41d0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53  nalize $STMT.} S
41e0: 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74 20 3a  QLITE_OK...set :
41f0: 3a 45 4e 43 20 5b 65 78 65 63 73 71 6c 20 7b 70  :ENC [execsql {p
4200: 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 7d 5d  ragma encoding}]
4210: 0a 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74 65  .db close..do_te
4220: 73 74 20 63 61 70 69 33 2d 36 2e 30 20 7b 0a 20  st capi3-6.0 {. 
4230: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
4240: 2e 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73 71  .db.  set DB [sq
4250: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
4260: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 69  _pointer db].  i
4270: 66 20 7b 5b 73 71 6c 69 74 65 33 20 2d 68 61 73  f {[sqlite3 -has
4280: 2d 63 6f 64 65 63 5d 3d 3d 30 7d 20 7b 20 73 71  -codec]==0} { sq
4290: 6c 69 74 65 33 5f 6b 65 79 20 24 44 42 20 78 79  lite3_key $DB xy
42a0: 7a 7a 79 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  zzy }.  set sql 
42b0: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
42c0: 31 20 6f 72 64 65 72 20 62 79 20 72 6f 77 69 64  1 order by rowid
42d0: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
42e0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
42f0: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
4300: 20 20 65 78 70 72 20 30 0a 7d 20 7b 30 7d 0a 64    expr 0.} {0}.d
4310: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e 31  o_test capi3-6.1
4320: 20 7b 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c   {.  db cache fl
4330: 75 73 68 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  ush.  sqlite3_cl
4340: 6f 73 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ose $DB.} {SQLIT
4350: 45 5f 42 55 53 59 7d 0a 0a 23 20 36 2e 32 20 61  E_BUSY}..# 6.2 a
4360: 6e 64 20 36 2e 33 20 75 73 65 64 20 74 6f 20 72  nd 6.3 used to r
4370: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4380: 4f 52 20 61 6e 64 20 53 51 4c 49 54 45 5f 53 43  OR and SQLITE_SC
4390: 48 45 4d 41 2c 20 72 65 73 70 65 63 74 69 76 65  HEMA, respective
43a0: 6c 79 2e 0a 23 20 42 75 74 20 73 69 6e 63 65 20  ly..# But since 
43b0: 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 63 6c  attempting to cl
43c0: 6f 73 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  ose a connection
43d0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 72 65 73 65 74   no longer reset
43e0: 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 23  s the internal.#
43f0: 20 73 63 68 65 6d 61 20 61 6e 64 20 65 78 70 69   schema and expi
4400: 72 65 73 20 61 6c 6c 20 73 74 61 74 65 6d 65 6e  res all statemen
4410: 74 73 2c 20 74 68 69 73 20 69 73 20 6e 6f 20 6c  ts, this is no l
4420: 6f 6e 67 65 72 20 74 68 65 20 63 61 73 65 2e 0a  onger the case..
4430: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e  do_test capi3-6.
4440: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
4450: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
4460: 54 45 5f 52 4f 57 7d 0a 23 63 68 65 63 6b 5f 64  TE_ROW}.#check_d
4470: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 2d  ata $STMT capi3-
4480: 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d 20 7b 31  6.3 {INTEGER} {1
4490: 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74  } {1.0} {1}.do_t
44a0: 65 73 74 20 63 61 70 69 33 2d 36 2e 33 20 7b 0a  est capi3-6.3 {.
44b0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
44c0: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
44d0: 54 45 5f 4f 4b 7d 0a 0a 69 66 20 7b 5b 63 6c 61  TE_OK}..if {[cla
44e0: 6e 67 5f 73 61 6e 69 74 69 7a 65 5f 61 64 64 72  ng_sanitize_addr
44f0: 65 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f  ess]==0} {.  do_
4500: 74 65 73 74 20 63 61 70 69 33 2d 36 2e 34 2d 6d  test capi3-6.4-m
4510: 69 73 75 73 65 20 7b 0a 20 20 20 20 64 62 20 63  isuse {.    db c
4520: 61 63 68 65 20 66 6c 75 73 68 0a 20 20 20 20 73  ache flush.    s
4530: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42  qlite3_close $DB
4540: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  .  } {SQLITE_OK}
4550: 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a 23 20 54  .}.db close..# T
4560: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 65  his procedure se
4570: 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
4580: 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20  the file-format 
4590: 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62  in file 'test.db
45a0: 27 0a 23 20 74 6f 20 24 6e 65 77 76 61 6c 2e 20  '.# to $newval. 
45b0: 41 6c 73 6f 2c 20 74 68 65 20 73 63 68 65 6d 61  Also, the schema
45c0: 20 63 6f 6f 6b 69 65 20 69 73 20 69 6e 63 72 65   cookie is incre
45d0: 6d 65 6e 74 65 64 2e 0a 23 20 0a 70 72 6f 63 20  mented..# .proc 
45e0: 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20  set_file_format 
45f0: 7b 6e 65 77 76 61 6c 7d 20 7b 0a 20 20 68 65 78  {newval} {.  hex
4600: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
4610: 20 34 34 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65   44 [hexio_rende
4620: 72 5f 69 6e 74 33 32 20 24 6e 65 77 76 61 6c 5d  r_int32 $newval]
4630: 0a 20 20 73 65 74 20 73 63 68 65 6d 61 63 6f 6f  .  set schemacoo
4640: 6b 69 65 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69  kie [hexio_get_i
4650: 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 74  nt [hexio_read t
4660: 65 73 74 2e 64 62 20 34 30 20 34 5d 5d 0a 20 20  est.db 40 4]].  
4670: 69 6e 63 72 20 73 63 68 65 6d 61 63 6f 6f 6b 69  incr schemacooki
4680: 65 0a 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20  e.  hexio_write 
4690: 74 65 73 74 2e 64 62 20 34 30 20 5b 68 65 78 69  test.db 40 [hexi
46a0: 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32 20 24  o_render_int32 $
46b0: 73 63 68 65 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20  schemacookie].  
46c0: 72 65 74 75 72 6e 20 7b 7d 0a 7d 0a 0a 23 20 54  return {}.}..# T
46d0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
46e0: 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65 20  turns the value 
46f0: 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d  of the file-form
4700: 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65 73 74  at in file 'test
4710: 2e 64 62 27 2e 0a 23 20 0a 70 72 6f 63 20 67 65  .db'..# .proc ge
4720: 74 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 7b  t_file_format {{
4730: 66 6e 61 6d 65 20 74 65 73 74 2e 64 62 7d 7d 20  fname test.db}} 
4740: 7b 0a 20 20 72 65 74 75 72 6e 20 5b 68 65 78 69  {.  return [hexi
4750: 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f  o_get_int [hexio
4760: 5f 72 65 61 64 20 24 66 6e 61 6d 65 20 34 34 20  _read $fname 44 
4770: 34 5d 5d 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c  4]].}..if {![sql
4780: 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d  ite3 -has-codec]
4790: 7d 20 7b 0a 20 20 23 20 54 65 73 74 20 77 68 61  } {.  # Test wha
47a0: 74 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 74  t happens when t
47b0: 68 65 20 6c 69 62 72 61 72 79 20 65 6e 63 6f 75  he library encou
47c0: 6e 74 65 72 73 20 61 20 6e 65 77 65 72 20 66 69  nters a newer fi
47d0: 6c 65 20 66 6f 72 6d 61 74 2e 0a 20 20 64 6f 5f  le format..  do_
47e0: 74 65 73 74 20 63 61 70 69 33 2d 37 2e 31 20 7b  test capi3-7.1 {
47f0: 0a 20 20 20 20 73 65 74 5f 66 69 6c 65 5f 66 6f  .    set_file_fo
4800: 72 6d 61 74 20 35 0a 20 20 7d 20 7b 7d 0a 20 20  rmat 5.  } {}.  
4810: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 37 2e  do_test capi3-7.
4820: 32 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  2 {.    catch { 
4830: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4840: 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71  db }.    catchsq
4850: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
4860: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
4870: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
4880: 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64   {1 {unsupported
4890: 20 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a 20   file format}}. 
48a0: 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 20   db close.}..if 
48b0: 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d  {![sqlite3 -has-
48c0: 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e 6f  codec]} {.  # No
48d0: 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20  w test that the 
48e0: 6c 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c  library correctl
48f0: 79 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73 20  y handles bogus 
4900: 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20  entries in the. 
4910: 20 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72   # sqlite_master
4920: 20 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20 63   table (schema c
4930: 6f 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64 6f  orruption)..  do
4940: 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e 31 20  _test capi3-8.1 
4950: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
4960: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
4970: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
4980: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4990: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
49a0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
49b0: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
49c0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
49d0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
49e0: 69 33 2d 38 2e 32 20 7b 0a 20 20 20 20 73 71 6c  i3-8.2 {.    sql
49f0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4a00: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4a10: 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61      PRAGMA writa
4a20: 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20  ble_schema=ON;. 
4a30: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4a40: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 56   sqlite_master V
4a50: 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c 4c 2c  ALUES(NULL,NULL,
4a60: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b  NULL,NULL,NULL);
4a70: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c  .    }.    db cl
4a80: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ose.  } {}.  do_
4a90: 74 65 73 74 20 63 61 70 69 33 2d 38 2e 33 20 7b  test capi3-8.3 {
4aa0: 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73 71 6c  .    catch { sql
4ab0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
4ac0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
4ad0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
4ae0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4af0: 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  er;.    }.  } {1
4b00: 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74 61   {malformed data
4b10: 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29 7d  base schema (?)}
4b20: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
4b30: 33 2d 38 2e 34 20 7b 0a 20 20 20 20 23 20 42 75  3-8.4 {.    # Bu
4b40: 69 6c 64 20 61 20 35 2d 66 69 65 6c 64 20 72 6f  ild a 5-field ro
4b50: 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 66 69  w record. The fi
4b60: 72 73 74 20 66 69 65 6c 64 20 69 73 20 61 20 73  rst field is a s
4b70: 74 72 69 6e 67 20 27 74 61 62 6c 65 27 2c 20 61  tring 'table', a
4b80: 6e 64 0a 20 20 20 20 23 20 73 75 62 73 65 71 75  nd.    # subsequ
4b90: 65 6e 74 20 66 69 65 6c 64 73 20 61 72 65 20 61  ent fields are a
4ba0: 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20 64 62 20  ll NULL..    db 
4bb0: 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72 63 65 64  close.    forced
4bc0: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65  elete test.db te
4bd0: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
4be0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4bf0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
4c00: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
4c10: 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 20  TABLE t1(a);.   
4c20: 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62     PRAGMA writab
4c30: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20  le_schema=ON;.  
4c40: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4c50: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 56 41  sqlite_master VA
4c60: 4c 55 45 53 28 27 74 61 62 6c 65 27 2c 4e 55 4c  LUES('table',NUL
4c70: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  L,NULL,NULL,NULL
4c80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  );.    }.    db 
4c90: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b 0a 20 20  close.  } {};.  
4ca0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 38 2e  do_test capi3-8.
4cb0: 35 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  5 {.    catch { 
4cc0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4cd0: 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71  db }.    catchsq
4ce0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
4cf0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
4d00: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  aster;.    }.  }
4d10: 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64   {1 {malformed d
4d20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
4d30: 3f 29 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ?)}}.  db close.
4d40: 7d 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  }.forcedelete te
4d50: 73 74 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74  st.db.forcedelet
4d60: 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  e test.db-journa
4d70: 6c 0a 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65  l...# Test the e
4d80: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
4d90: 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e  string equivalen
4da0: 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72  ts for sqlite er
4db0: 72 6f 72 20 63 6f 64 65 73 0a 73 65 74 20 63 6f  ror codes.set co
4dc0: 64 65 32 65 6e 67 6c 69 73 68 20 5b 6c 69 73 74  de2english [list
4dd0: 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20   \.SQLITE_OK    
4de0: 20 20 20 20 20 7b 6e 6f 74 20 61 6e 20 65 72 72       {not an err
4df0: 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 52 52  or} \.SQLITE_ERR
4e00: 4f 52 20 20 20 20 20 20 7b 53 51 4c 20 6c 6f 67  OR      {SQL log
4e10: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
4e20: 69 6e 67 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  ing database} \.
4e30: 53 51 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20  SQLITE_PERM     
4e40: 20 20 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73    {access permis
4e50: 73 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53  sion denied} \.S
4e60: 51 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20  QLITE_ABORT     
4e70: 20 7b 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65   {callback reque
4e80: 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74  sted query abort
4e90: 7d 20 5c 0a 53 51 4c 49 54 45 5f 42 55 53 59 20  } \.SQLITE_BUSY 
4ea0: 20 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20        {database 
4eb0: 69 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c  is locked} \.SQL
4ec0: 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b  ITE_LOCKED     {
4ed0: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
4ee0: 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49  s locked} \.SQLI
4ef0: 54 45 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f  TE_NOMEM      {o
4f00: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a  ut of memory} \.
4f10: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20  SQLITE_READONLY 
4f20: 20 20 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72    {attempt to wr
4f30: 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64  ite a readonly d
4f40: 61 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54  atabase} \.SQLIT
4f50: 45 5f 49 4e 54 45 52 52 55 50 54 20 20 7b 69 6e  E_INTERRUPT  {in
4f60: 74 65 72 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c  terrupted} \.SQL
4f70: 49 54 45 5f 49 4f 45 52 52 20 20 20 20 20 20 7b  ITE_IOERR      {
4f80: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20  disk I/O error} 
4f90: 5c 0a 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  \.SQLITE_CORRUPT
4fa0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 64 69      {database di
4fb0: 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66  sk image is malf
4fc0: 6f 72 6d 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  ormed} \.SQLITE_
4fd0: 46 55 4c 4c 20 20 20 20 20 20 20 7b 64 61 74 61  FULL       {data
4fe0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20  base or disk is 
4ff0: 66 75 6c 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43  full} \.SQLITE_C
5000: 41 4e 54 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c  ANTOPEN   {unabl
5010: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
5020: 73 65 20 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54  se file} \.SQLIT
5030: 45 5f 45 4d 50 54 59 20 20 20 20 20 20 7b 74 61  E_EMPTY      {ta
5040: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
5050: 64 61 74 61 7d 20 5c 0a 53 51 4c 49 54 45 5f 53  data} \.SQLITE_S
5060: 43 48 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62  CHEMA     {datab
5070: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
5080: 68 61 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45  hanged} \.SQLITE
5090: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e  _CONSTRAINT {con
50a0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20  straint failed} 
50b0: 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  \.SQLITE_MISMATC
50c0: 48 20 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69  H   {datatype mi
50d0: 73 6d 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45  smatch} \.SQLITE
50e0: 5f 4d 49 53 55 53 45 20 20 20 20 20 7b 6c 69 62  _MISUSE     {lib
50f0: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
5100: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
5110: 6e 63 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f  nce} \.SQLITE_NO
5120: 4c 46 53 20 20 20 20 20 20 7b 6c 61 72 67 65 20  LFS      {large 
5130: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  file support is 
5140: 64 69 73 61 62 6c 65 64 7d 20 5c 0a 53 51 4c 49  disabled} \.SQLI
5150: 54 45 5f 41 55 54 48 20 20 20 20 20 20 20 7b 61  TE_AUTH       {a
5160: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e  uthorization den
5170: 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 4f  ied} \.SQLITE_FO
5180: 52 4d 41 54 20 20 20 20 20 7b 61 75 78 69 6c 69  RMAT     {auxili
5190: 61 72 79 20 64 61 74 61 62 61 73 65 20 66 6f 72  ary database for
51a0: 6d 61 74 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c  mat error} \.SQL
51b0: 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b  ITE_RANGE      {
51c0: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
51d0: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
51e0: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 54 41  e} \.SQLITE_NOTA
51f0: 44 42 20 20 20 20 20 7b 66 69 6c 65 20 69 73 20  DB     {file is 
5200: 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20  encrypted or is 
5210: 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20  not a database} 
5220: 5c 0a 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72 20 20  \.unknownerror  
5230: 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72      {unknown err
5240: 6f 72 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74 65 73  or} \.]..set tes
5250: 74 5f 6e 75 6d 62 65 72 20 31 0a 66 6f 72 65 61  t_number 1.forea
5260: 63 68 20 7b 63 6f 64 65 20 65 6e 67 6c 69 73 68  ch {code english
5270: 7d 20 24 63 6f 64 65 32 65 6e 67 6c 69 73 68 20  } $code2english 
5280: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
5290: 33 2d 39 2e 24 74 65 73 74 5f 6e 75 6d 62 65 72  3-9.$test_number
52a0: 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65   "sqlite3_test_e
52b0: 72 72 73 74 72 20 24 63 6f 64 65 22 20 24 65 6e  rrstr $code" $en
52c0: 67 6c 69 73 68 0a 20 20 69 6e 63 72 20 74 65 73  glish.  incr tes
52d0: 74 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20 54 65  t_number.}..# Te
52e0: 73 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  st the error mes
52f0: 73 61 67 65 20 77 68 65 6e 20 61 20 22 72 65 61  sage when a "rea
5300: 6c 22 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  l" out of memory
5310: 20 6f 63 63 75 72 73 2e 0a 69 66 20 7b 20 5b 70   occurs..if { [p
5320: 65 72 6d 75 74 61 74 69 6f 6e 5d 20 21 3d 20 22  ermutation] != "
5330: 6e 6f 66 61 75 6c 74 73 69 6d 22 20 7d 20 7b 0a  nofaultsim" } {.
5340: 69 66 63 61 70 61 62 6c 65 20 6d 65 6d 64 65 62  ifcapable memdeb
5350: 75 67 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ug {.  do_test c
5360: 61 70 69 33 2d 31 30 2d 31 20 7b 0a 20 20 20 20  api3-10-1 {.    
5370: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
5380: 64 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73  db.    set DB [s
5390: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
53a0: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20  n_pointer db].  
53b0: 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62    sqlite3_memdeb
53c0: 75 67 5f 66 61 69 6c 20 31 0a 20 20 20 20 63 61  ug_fail 1.    ca
53d0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73  tchsql {.      s
53e0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
53f0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
5400: 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66  }.  } {1 {out of
5410: 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74   memory}}.  do_t
5420: 65 73 74 20 63 61 70 69 33 2d 31 30 2d 32 20 7b  est capi3-10-2 {
5430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72  .    sqlite3_err
5440: 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f  msg $::DB.  } {o
5450: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20  ut of memory}.  
5460: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
5470: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
5480: 63 61 70 69 33 2d 31 30 2d 33 20 7b 0a 20 20 20  capi3-10-3 {.   
5490: 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33     utf8 [sqlite3
54a0: 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d  _errmsg16 $::DB]
54b0: 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d  .    } {out of m
54c0: 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20  emory}.  }.  db 
54d0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
54e0: 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 2d 31  memdebug_fail -1
54f0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
5500: 2d 31 30 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69  -10-4 {.    sqli
5510: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
5520: 20 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74     set DB [sqlit
5530: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
5540: 69 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 73 71  inter db].    sq
5550: 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66  lite3_memdebug_f
5560: 61 69 6c 20 31 0a 20 20 20 20 63 61 74 63 68 73  ail 1.    catchs
5570: 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63  ql {.      selec
5580: 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  t * from sqlite_
5590: 6d 61 73 74 65 72 20 77 68 65 72 65 20 72 6f 77  master where row
55a0: 69 64 3e 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  id>5;.    }.  } 
55b0: 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  {1 {out of memor
55c0: 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  y}}.  do_test ca
55d0: 70 69 33 2d 31 30 2d 35 20 7b 0a 20 20 20 20 73  pi3-10-5 {.    s
55e0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 3a  qlite3_errmsg $:
55f0: 3a 44 42 0a 20 20 7d 20 7b 6f 75 74 20 6f 66 20  :DB.  } {out of 
5600: 6d 65 6d 6f 72 79 7d 0a 20 20 69 66 63 61 70 61  memory}.  ifcapa
5610: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
5620: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
5630: 31 30 2d 36 20 7b 0a 20 20 20 20 20 20 75 74 66  10-6 {.      utf
5640: 38 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  8 [sqlite3_errms
5650: 67 31 36 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d  g16 $::DB].    }
5660: 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d   {out of memory}
5670: 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .  }.  db close.
5680: 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62    sqlite3_memdeb
5690: 75 67 5f 66 61 69 6c 20 2d 31 0a 7d 0a 7d 0a 0a  ug_fail -1.}.}..
56a0: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
56b0: 74 65 73 74 73 20 2d 20 63 61 70 69 33 2d 31 31  tests - capi3-11
56c0: 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20 61  .* - test that a
56d0: 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42   COMMIT or ROLLB
56e0: 41 43 4b 0a 23 20 73 74 61 74 65 6d 65 6e 74 20  ACK.# statement 
56f0: 69 73 73 75 65 64 20 77 68 69 6c 65 20 74 68 65  issued while the
5700: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6f 75 74  re are still out
5710: 73 74 61 6e 64 69 6e 67 20 56 4d 73 20 74 68 61  standing VMs tha
5720: 74 20 61 72 65 20 70 61 72 74 20 6f 66 0a 23 20  t are part of.# 
5730: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5740: 66 61 69 6c 73 2e 0a 73 71 6c 69 74 65 33 20 64  fails..sqlite3 d
5750: 62 20 74 65 73 74 2e 64 62 0a 73 65 74 20 44 42  b test.db.set DB
5760: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
5770: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
5780: 0a 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72  .sqlite_register
5790: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24  _test_function $
57a0: 44 42 20 66 75 6e 63 0a 64 6f 5f 74 65 73 74 20  DB func.do_test 
57b0: 63 61 70 69 33 2d 31 31 2e 31 20 7b 0a 20 20 65  capi3-11.1 {.  e
57c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
57d0: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
57e0: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20  ABLE t1(a, b);. 
57f0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5800: 31 20 56 41 4c 55 45 53 28 31 2c 20 27 69 6e 74  1 VALUES(1, 'int
5810: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
5820: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c  NTO t1 VALUES(2,
5830: 20 27 6e 6f 74 61 74 79 70 65 27 29 3b 0a 20 20   'notatype');.  
5840: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
5850: 61 70 69 33 2d 31 31 2e 31 2e 31 20 7b 0a 20 20  api3-11.1.1 {.  
5860: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
5870: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
5880: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5890: 32 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  2 {.  set STMT [
58a0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
58b0: 24 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63  $DB "SELECT func
58c0: 28 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20  (b, a) FROM t1" 
58d0: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
58e0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
58f0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a 23 20  {SQLITE_ROW}..# 
5900: 41 73 20 6f 66 20 33 2e 36 2e 35 20 61 20 43 4f  As of 3.6.5 a CO
5910: 4d 4d 49 54 20 69 73 20 4f 4b 20 64 75 72 69 6e  MMIT is OK durin
5920: 67 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20  g while a query 
5930: 69 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  is still running
5940: 20 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61 73 20   -.# as long as 
5950: 69 74 20 69 73 20 61 20 72 65 61 64 2d 6f 6e 6c  it is a read-onl
5960: 79 20 71 75 65 72 79 20 61 6e 64 20 6e 6f 74 20  y query and not 
5970: 61 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  an incremental B
5980: 4c 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64 6f 5f  LOB write..#.do_
5990: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e  test capi3-11.3.
59a0: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
59b0: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
59c0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
59d0: 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 32 20 7b  t capi3-11.3.2 {
59e0: 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  .  sqlite3_exten
59f0: 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a  ded_errcode $DB.
5a00: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
5a10: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33  _test capi3-11.3
5a20: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .3 {.  sqlite3_g
5a30: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
5a40: 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 1.do_test ca
5a50: 70 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20 20 64  pi3-11.3.4 {.  d
5a60: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 6c  b eval {PRAGMA l
5a70: 6f 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20 7b 6d  ock_status}.} {m
5a80: 61 69 6e 20 73 68 61 72 65 64 20 74 65 6d 70 20  ain shared temp 
5a90: 63 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65 73 74  closed}..do_test
5aa0: 20 63 61 70 69 33 2d 31 31 2e 34 20 7b 0a 20 20   capi3-11.4 {.  
5ab0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5ac0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5ad0: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5ae0: 33 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69 74  3-11.5 {.  sqlit
5af0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
5b00: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f  T.} {SQLITE_ERRO
5b10: 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  R}.do_test capi3
5b20: 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63 68 73  -11.6 {.  catchs
5b30: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5b40: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
5b50: 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e 6f 74   {0 {1 int 2 not
5b60: 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  atype}}.do_test 
5b70: 63 61 70 69 33 2d 31 31 2e 37 20 7b 0a 20 20 73  capi3-11.7 {.  s
5b80: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5b90: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5ba0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 38  _test capi3-11.8
5bb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5bc0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5bd0: 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52  t2(a);.    INSER
5be0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
5bf0: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
5c00: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
5c10: 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  );.    BEGIN;.  
5c20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5c30: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 7d 0a   VALUES(3);.  }.
5c40: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  } {}.do_test cap
5c50: 69 33 2d 31 31 2e 38 2e 31 20 7b 0a 20 20 73 71  i3-11.8.1 {.  sq
5c60: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
5c70: 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f  mmit $DB.} 0.do_
5c80: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39 20  test capi3-11.9 
5c90: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
5ca0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
5cb0: 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  B "SELECT a FROM
5cc0: 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t2" -1 TAIL].  
5cd0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5ce0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5cf0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
5d00: 31 31 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.9.1 {.  sqlit
5d10: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
5d20: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
5d30: 74 20 63 61 70 69 33 2d 31 31 2e 39 2e 32 20 7b  t capi3-11.9.2 {
5d40: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5d50: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
5d60: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5d70: 20 63 61 70 69 33 2d 31 31 2e 39 2e 33 20 7b 0a   capi3-11.9.3 {.
5d80: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5d90: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5da0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
5db0: 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.10 {.  sqlite3
5dc0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5dd0: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
5de0: 73 74 20 63 61 70 69 33 2d 31 31 2e 31 31 20 7b  st capi3-11.11 {
5df0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5e00: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5e10: 44 4f 4e 45 7d 0a 69 66 63 61 70 61 62 6c 65 20  DONE}.ifcapable 
5e20: 21 61 75 74 6f 72 65 73 65 74 20 7b 0a 20 20 64  !autoreset {.  d
5e30: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5e40: 31 32 61 72 6d 6f 72 20 7b 0a 20 20 20 20 73 71  12armor {.    sq
5e50: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5e60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
5e70: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
5e80: 49 54 45 5f 4d 49 53 55 53 45 7d 0a 7d 20 65 6c  ITE_MISUSE}.} el
5e90: 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  se {.  do_test c
5ea0: 61 70 69 33 2d 31 31 2e 31 32 20 7b 0a 20 20 20  api3-11.12 {.   
5eb0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5ec0: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
5ed0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
5ee0: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 7d 0a 64 6f  SQLITE_ROW}.}.do
5ef0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5f00: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  3 {.  sqlite3_fi
5f10: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5f20: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
5f30: 73 74 20 63 61 70 69 33 2d 31 31 2e 31 34 20 7b  st capi3-11.14 {
5f40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5f50: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
5f60: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64  2;.  }.} {1 2}.d
5f70: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5f80: 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  14.1 {.  sqlite3
5f90: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
5fa0: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
5fb0: 63 61 70 69 33 2d 31 31 2e 31 35 20 7b 0a 20 20  capi3-11.15 {.  
5fc0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52  catchsql {.    R
5fd0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
5fe0: 31 20 7b 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  1 {cannot rollba
5ff0: 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
6000: 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a  ion is active}}.
6010: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
6020: 2e 31 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  .15.1 {.  sqlite
6030: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
6040: 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74   $DB.} 1.do_test
6050: 20 63 61 70 69 33 2d 31 31 2e 31 36 20 7b 0a 20   capi3-11.16 {. 
6060: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
6070: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 3b  ELECT a FROM t2;
6080: 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 23 20  .  }.} {1 2}..# 
6090: 53 61 6e 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  Sanity check on 
60a0: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
60b0: 66 20 27 6f 75 74 73 74 61 6e 64 69 6e 67 20 56  f 'outstanding V
60c0: 4d 27 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 61  M'. This means a
60d0: 6e 79 20 56 4d 0a 23 20 74 68 61 74 20 68 61 73  ny VM.# that has
60e0: 20 68 61 64 20 73 71 6c 69 74 65 33 5f 73 74 65   had sqlite3_ste
60f0: 70 28 29 20 63 61 6c 6c 65 64 20 6d 6f 72 65 20  p() called more 
6100: 72 65 63 65 6e 74 6c 79 20 74 68 61 6e 20 73 71  recently than sq
6110: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6120: 20 6f 72 0a 23 20 73 71 6c 69 74 65 33 5f 72 65   or.# sqlite3_re
6130: 73 65 74 28 29 2e 20 53 6f 20 61 20 56 4d 20 74  set(). So a VM t
6140: 68 61 74 20 68 61 73 20 6a 75 73 74 20 62 65 65  hat has just bee
6150: 6e 20 70 72 65 70 61 72 65 64 20 6f 72 20 72 65  n prepared or re
6160: 73 65 74 20 64 6f 65 73 20 6e 6f 74 0a 23 20 63  set does not.# c
6170: 6f 75 6e 74 20 61 73 20 61 6e 20 61 63 74 69 76  ount as an activ
6180: 65 20 56 4d 2e 0a 64 6f 5f 74 65 73 74 20 63 61  e VM..do_test ca
6190: 70 69 33 2d 31 31 2e 31 37 20 7b 0a 20 20 65 78  pi3-11.17 {.  ex
61a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
61b0: 4e 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  N;.  }.} {}.do_t
61c0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 38 20  est capi3-11.18 
61d0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
61e0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
61f0: 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  B "SELECT a FROM
6200: 20 74 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1" -1 TAIL].  
6210: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
6220: 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OMMIT;.  }.} {0 
6230: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
6240: 33 2d 31 31 2e 31 39 20 7b 0a 20 20 73 71 6c 69  3-11.19 {.  sqli
6250: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6260: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
6270: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 32  _test capi3-11.2
6280: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
6290: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
62a0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
62b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
62c0: 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c  i3-11.20 {.  sql
62d0: 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54  ite3_reset $STMT
62e0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
62f0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20    COMMIT;.  }.} 
6300: 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  {1 {cannot commi
6310: 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
6320: 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64  on is active}}.d
6330: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
6340: 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  21 {.  sqlite3_f
6350: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6360: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54  {SQLITE_OK}..# T
6370: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73  he following tes
6380: 74 73 20 2d 20 63 61 70 69 33 2d 31 32 2e 2a 20  ts - capi3-12.* 
6390: 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 73  - check that its
63a0: 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23   Ok to start a.#
63b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
63c0: 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  le other VMs are
63d0: 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61   active, and tha
63e0: 74 20 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63  t its Ok to exec
63f0: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
6400: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
6410: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
6420: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 31  _test capi3-12.1
6430: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
6440: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
6450: 44 42 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f  DB "SELECT a FRO
6460: 4d 20 74 32 22 20 2d 31 20 54 41 49 4c 5d 0a 20  M t2" -1 TAIL]. 
6470: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
6480: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  TMT.} {SQLITE_RO
6490: 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  W}.do_test capi3
64a0: 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -12.2 {.  catchs
64b0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
64c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
64d0: 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b  , NULL);.  }.} {
64e0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61  0 {}}.do_test ca
64f0: 70 69 33 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74  pi3-12.3 {.  cat
6500: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
6510: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
6520: 53 28 34 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  S(4);.  }.} {0 {
6530: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
6540: 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  -12.4 {.  catchs
6550: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
6560: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6570: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c  t1 VALUES(4, NUL
6580: 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  L);.  }.} {0 {}}
6590: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
65a0: 32 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.5 {.  sqlite3_
65b0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
65c0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
65d0: 74 20 63 61 70 69 33 2d 31 32 2e 35 2e 31 20 7b  t capi3-12.5.1 {
65e0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
65f0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
6600: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
6610: 69 33 2d 31 32 2e 36 20 7b 0a 20 20 73 71 6c 69  i3-12.6 {.  sqli
6620: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6630: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64   {SQLITE_DONE}.d
6640: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e  o_test capi3-12.
6650: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  7 {.  sqlite3_fi
6660: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
6670: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
6680: 73 74 20 63 61 70 69 33 2d 31 32 2e 38 20 7b 0a  st capi3-12.8 {.
6690: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
66a0: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
66b0: 43 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT a FROM t1;.  
66c0: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23  }.} {1 2 3 4}..#
66d0: 20 54 65 73 74 20 63 61 73 65 73 20 63 61 70 69   Test cases capi
66e0: 33 2d 31 33 2e 2a 20 74 65 73 74 20 74 68 65 20  3-13.* test the 
66f0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
6700: 6e 64 69 6e 67 73 28 29 20 61 6e 64 20 0a 23 20  ndings() and .# 
6710: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 41 50  sqlite3_sleep AP
6720: 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67  Is..#.if {[lleng
6730: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  th [info command
6740: 73 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  s sqlite3_clear_
6750: 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a  bindings]]>0} {.
6760: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6770: 31 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  13.1 {.    execs
6780: 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54  ql {.      DELET
6790: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d  E FROM t1;.    }
67a0: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
67b0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
67c0: 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  DB "INSERT INTO 
67d0: 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29 22  t1 VALUES(?, ?)"
67e0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
67f0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6800: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
6810: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
6820: 69 33 2d 31 33 2e 32 20 7b 0a 20 20 20 20 73 71  i3-13.2 {.    sq
6830: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
6840: 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  T.    sqlite3_bi
6850: 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 31 20  nd_text $STMT 1 
6860: 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71 6c 69  hello 5.    sqli
6870: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53  te3_bind_text $S
6880: 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a 20 20  TMT 2 world 5.  
6890: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
68a0: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
68b0: 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74  _DONE}.  do_test
68c0: 20 63 61 70 69 33 2d 31 33 2e 33 20 7b 0a 20 20   capi3-13.3 {.  
68d0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
68e0: 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65  $STMT.    sqlite
68f0: 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
6900: 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74   $STMT.    sqlit
6910: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
6920: 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a  } {SQLITE_DONE}.
6930: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
6940: 31 33 2d 34 20 7b 0a 20 20 20 20 73 71 6c 69 74  13-4 {.    sqlit
6950: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6960: 54 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  T.    execsql {.
6970: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
6980: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ROM t1;.    }.  
6990: 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c 6c 6f 20 77  } {{} {} hello w
69a0: 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a 7d 0a 69 66  orld {} {}}.}.if
69b0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
69c0: 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69 74 65   commands sqlite
69d0: 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d 20 7b 0a 20  3_sleep]]>0} {. 
69e0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
69f0: 33 2d 35 20 7b 0a 20 20 20 20 73 65 74 20 6d 73  3-5 {.    set ms
6a00: 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20   [sqlite3_sleep 
6a10: 38 30 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 6d  80].    expr {$m
6a20: 73 3d 3d 38 30 20 7c 7c 20 24 6d 73 3d 3d 31 30  s==80 || $ms==10
6a30: 30 30 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23  00}.  } {1}.}..#
6a40: 20 54 69 63 6b 65 74 20 23 31 32 31 39 3a 20 20   Ticket #1219:  
6a50: 4d 61 6b 65 20 73 75 72 65 20 62 69 6e 64 69 6e  Make sure bindin
6a60: 67 20 41 50 49 73 20 63 61 6e 20 68 61 6e 64 6c  g APIs can handl
6a70: 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  e a NULL pointer
6a80: 2e 0a 23 20 0a 69 66 20 7b 5b 63 6c 61 6e 67 5f  ..# .if {[clang_
6a90: 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65 73 73  sanitize_address
6aa0: 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  ]==0} {.  do_tes
6ab0: 74 20 63 61 70 69 33 2d 31 34 2e 31 2d 6d 69 73  t capi3-14.1-mis
6ac0: 75 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 63  use {.    set rc
6ad0: 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33   [catch {sqlite3
6ae0: 5f 62 69 6e 64 5f 74 65 78 74 20 30 20 31 20 68  _bind_text 0 1 h
6af0: 65 6c 6c 6f 20 35 7d 20 6d 73 67 5d 0a 20 20 20  ello 5} msg].   
6b00: 20 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d     lappend rc $m
6b10: 73 67 0a 20 20 7d 20 7b 31 20 53 51 4c 49 54 45  sg.  } {1 SQLITE
6b20: 5f 4d 49 53 55 53 45 7d 0a 7d 0a 0a 23 20 54 69  _MISUSE}.}..# Ti
6b30: 63 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e  cket #1650:  Hon
6b40: 6f 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61  or the nBytes pa
6b50: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
6b60: 65 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f  e3_prepare..#.do
6b70: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e 31  _test capi3-15.1
6b80: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
6b90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
6ba0: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
6bb0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
6bc0: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6bd0: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6be0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6bf0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
6c00: 6c 20 24 6e 62 79 74 65 73 20 54 41 49 4c 5d 0a  l $nbytes TAIL].
6c10: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6c20: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
6c30: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6c40: 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  0.} {1}.do_test 
6c50: 63 61 70 69 33 2d 31 35 2e 32 20 7b 0a 20 20 73  capi3-15.2 {.  s
6c60: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6c70: 54 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  T.  sqlite3_colu
6c80: 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d  mn_int $STMT 0.}
6c90: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {2}.do_test cap
6ca0: 69 33 2d 31 35 2e 33 20 7b 0a 20 20 73 71 6c 69  i3-15.3 {.  sqli
6cb0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6cc0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  MT.} {SQLITE_OK}
6cd0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6ce0: 35 2e 34 20 7b 0a 20 20 23 20 20 20 20 20 20 20  5.4 {.  #       
6cf0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
6d00: 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45  67.  set sql {SE
6d10: 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30 7d  LECT 1234567890}
6d20: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6d30: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6d40: 20 24 73 71 6c 20 38 20 54 41 49 4c 5d 0a 20 20   $sql 8 TAIL].  
6d50: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6d60: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
6d70: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6d80: 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74  $STMT 0].  sqlit
6d90: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6da0: 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 7d  T.  set v1.} {1}
6db0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6dc0: 35 2e 35 20 7b 0a 20 20 23 20 20 20 20 20 20 20  5.5 {.  #       
6dd0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
6de0: 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45  67.  set sql {SE
6df0: 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30 7d  LECT 1234567890}
6e00: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
6e10: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
6e20: 20 24 73 71 6c 20 39 20 54 41 49 4c 5d 0a 20 20   $sql 9 TAIL].  
6e30: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6e40: 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71 6c  MT.  set v1 [sql
6e50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
6e60: 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74  $STMT 0].  sqlit
6e70: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
6e80: 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32  T.  set v1.} {12
6e90: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
6ea0: 31 35 2e 36 20 7b 0a 20 20 23 20 20 20 20 20 20  15.6 {.  #      
6eb0: 20 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34    123456789 1234
6ec0: 35 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53  567.  set sql {S
6ed0: 45 4c 45 43 54 20 31 32 33 34 35 36 37 38 39 30  ELECT 1234567890
6ee0: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
6ef0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6f00: 42 20 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a  B $sql 12 TAIL].
6f10: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6f20: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73  STMT.  set v1 [s
6f30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
6f40: 74 20 24 53 54 4d 54 20 30 5d 0a 20 20 73 71 6c  t $STMT 0].  sql
6f50: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
6f60: 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d 20 7b  TMT.  set v1.} {
6f70: 31 32 33 34 35 7d 0a 64 6f 5f 74 65 73 74 20 63  12345}.do_test c
6f80: 61 70 69 33 2d 31 35 2e 37 20 7b 0a 20 20 23 20  api3-15.7 {.  # 
6f90: 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 39         123456789
6fa0: 20 31 32 33 34 35 36 37 0a 20 20 73 65 74 20 73   1234567.  set s
6fb0: 71 6c 20 7b 53 45 4c 45 43 54 20 31 32 2e 33 34  ql {SELECT 12.34
6fc0: 35 36 37 38 39 30 7d 0a 20 20 73 65 74 20 53 54  567890}.  set ST
6fd0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
6fe0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 31 32 20  are $DB $sql 12 
6ff0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
7000: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 65 74  step $STMT.  set
7010: 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   v1 [sqlite3_col
7020: 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54  umn_double $STMT
7030: 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   0].  sqlite3_fi
7040: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
7050: 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33 34 7d 0a  et v1.} {12.34}.
7060: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35  do_test capi3-15
7070: 2e 38 20 7b 0a 20 20 23 20 20 20 20 20 20 20 20  .8 {.  #        
7080: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
7090: 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c  7.  set sql {SEL
70a0: 45 43 54 20 31 32 2e 33 34 35 36 37 38 39 30 7d  ECT 12.34567890}
70b0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
70c0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42  ite3_prepare $DB
70d0: 20 24 73 71 6c 20 31 34 20 54 41 49 4c 5d 0a 20   $sql 14 TAIL]. 
70e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
70f0: 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73 71  TMT.  set v1 [sq
7100: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
7110: 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20 20 73  ble $STMT 0].  s
7120: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
7130: 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a 7d  $STMT.  set v1.}
7140: 20 7b 31 32 2e 33 34 35 36 7d 0a 0a 23 20 4d 61   {12.3456}..# Ma
7150: 6b 65 20 73 75 72 65 20 63 6f 64 65 20 69 73 20  ke sure code is 
7160: 61 6c 77 61 79 73 20 67 65 6e 65 72 61 74 65 64  always generated
7170: 20 65 76 65 6e 20 69 66 20 61 6e 20 49 46 20 45   even if an IF E
7180: 58 49 53 54 53 20 6f 72 20 0a 23 20 49 46 20 4e  XISTS or .# IF N
7190: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
71a0: 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 61 74   is present that
71b0: 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20   the table does 
71c0: 6e 6f 74 20 6f 72 0a 23 20 64 6f 65 73 20 65 78  not or.# does ex
71d0: 69 73 74 73 2e 20 20 54 68 61 74 20 77 61 79 20  ists.  That way 
71e0: 77 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 68  we will always h
71f0: 61 76 65 20 61 20 70 72 65 70 61 72 65 64 20 73  ave a prepared s
7200: 74 61 74 65 6d 65 6e 74 0a 23 20 74 6f 20 65 78  tatement.# to ex
7210: 70 69 72 65 20 77 68 65 6e 20 74 68 65 20 73 63  pire when the sc
7220: 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 23 0a  hema changes..#.
7230: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 36  do_test capi3-16
7240: 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b  .1 {.  set sql {
7250: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
7260: 49 53 54 53 20 74 33 7d 0a 20 20 73 65 74 20 53  ISTS t3}.  set S
7270: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7280: 70 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31  pare $DB $sql -1
7290: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
72a0: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
72b0: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22    expr {$STMT!="
72c0: 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  "}.} {1}.do_test
72d0: 20 63 61 70 69 33 2d 31 36 2e 32 20 7b 0a 20 20   capi3-16.2 {.  
72e0: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
72f0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
7300: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
7310: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
7320: 5f 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71  _prepare $DB $sq
7330: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  l -1 TAIL].  sql
7340: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
7350: 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d  TMT.  expr {$STM
7360: 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20  T!=""}.} {1}..# 
7370: 42 75 74 20 73 74 69 6c 6c 20 77 65 20 64 6f 20  But still we do 
7380: 6e 6f 74 20 67 65 6e 65 72 61 74 65 20 63 6f 64  not generate cod
7390: 65 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  e if there is no
73a0: 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73 74 20 63   SQL.#.do_test c
73b0: 61 70 69 33 2d 31 36 2e 33 20 7b 0a 20 20 73 65  api3-16.3 {.  se
73c0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
73d0: 70 72 65 70 61 72 65 20 24 44 42 20 7b 7d 20 2d  prepare $DB {} -
73e0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
73f0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7400: 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d  .  expr {$STMT==
7410: 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  ""}.} {1}.do_tes
7420: 74 20 63 61 70 69 33 2d 31 36 2e 34 20 7b 0a 20  t capi3-16.4 {. 
7430: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
7440: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
7450: 3b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ;} -1 TAIL].  sq
7460: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
7470: 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54  STMT.  expr {$ST
7480: 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23  MT==""}.} {1}..#
7490: 20 54 69 63 6b 65 74 20 23 32 34 32 36 3a 20 20   Ticket #2426:  
74a0: 4d 69 73 75 73 65 20 6f 66 20 73 71 6c 69 74 65  Misuse of sqlite
74b0: 33 5f 63 6f 6c 75 6d 6e 5f 2a 20 62 79 20 63 61  3_column_* by ca
74c0: 6c 6c 69 6e 67 20 69 74 20 61 66 74 65 72 0a 23  lling it after.#
74d0: 20 61 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   a sqlite3_reset
74e0: 20 73 68 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c   should be harml
74f0: 65 73 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ess..#.do_test c
7500: 61 70 69 33 2d 31 37 2e 31 20 7b 0a 20 20 73 65  api3-17.1 {.  se
7510: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
7520: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
7530: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d  ECT * FROM t2} -
7540: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
7550: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
7560: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
7570: 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a  t $STMT 0.} {1}.
7580: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37  do_test capi3-17
7590: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  .2 {.  sqlite3_r
75a0: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c  eset $STMT.  sql
75b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
75c0: 24 53 54 4d 54 20 30 0a 7d 20 7b 30 7d 0a 64 6f  $STMT 0.} {0}.do
75d0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 37 2e 33  _test capi3-17.3
75e0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
75f0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
7600: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 56 65 72  QLITE_OK}..# Ver
7610: 69 66 79 20 74 68 61 74 20 73 71 6c 69 74 65 33  ify that sqlite3
7620: 5f 73 74 65 70 28 29 20 66 61 69 6c 73 20 77 69  _step() fails wi
7630: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  th an SQLITE_SCH
7640: 45 4d 41 20 65 72 72 6f 72 0a 23 20 77 68 65 6e  EMA error.# when
7650: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
7660: 73 20 70 72 65 70 61 72 65 64 20 77 69 74 68 20  s prepared with 
7670: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
7680: 29 20 28 6e 6f 74 0a 23 20 73 71 6c 69 74 65 33  ) (not.# sqlite3
7690: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 20 61  _prepare_v2()) a
76a0: 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 68 61  nd the schema ha
76b0: 73 20 63 68 61 6e 67 65 64 2e 0a 23 0a 64 6f 5f  s changed..#.do_
76c0: 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 31 20  test capi3-18.1 
76d0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
76e0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 64 62  lite3_prepare db
76f0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
7700: 74 32 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  t2} -1 TAIL].  s
7710: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7720: 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43  db.  db2 eval {C
7730: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78  REATE TABLE t3(x
7740: 29 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  )}.  db2 close. 
7750: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7760: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52  TMT.} {SQLITE_ER
7770: 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROR}.do_test cap
7780: 69 33 2d 31 38 2e 32 20 7b 0a 20 20 73 71 6c 69  i3-18.2 {.  sqli
7790: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
77a0: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64    sqlite3_errcod
77b0: 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45 5f 53  e db.} {SQLITE_S
77c0: 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73 74 20 63  CHEMA}.do_test c
77d0: 61 70 69 33 2d 31 38 2e 33 20 7b 0a 20 20 73 71  api3-18.3 {.  sq
77e0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 0a  lite3_errmsg db.
77f0: 7d 20 7b 64 61 74 61 62 61 73 65 20 73 63 68 65  } {database sche
7800: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 7d 0a  ma has changed}.
7810: 23 20 54 68 65 20 65 72 72 6f 72 20 70 65 72 73  # The error pers
7820: 69 73 74 20 6f 6e 20 72 65 74 72 79 20 77 68 65  ist on retry whe
7830: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
7840: 65 28 29 20 68 61 73 20 62 65 65 6e 20 75 73 65  e() has been use
7850: 64 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  d..do_test capi3
7860: 2d 31 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -18.4 {.  sqlite
7870: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
7880: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
7890: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 35  _test capi3-18.5
78a0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
78b0: 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  et $STMT.  sqlit
78c0: 65 33 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d 20  e3_errcode db.} 
78d0: 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a  {SQLITE_SCHEMA}.
78e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38  do_test capi3-18
78f0: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .6 {.  sqlite3_e
7900: 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74 61  rrmsg db.} {data
7910: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
7920: 63 68 61 6e 67 65 64 7d 0a 73 71 6c 69 74 65 33  changed}.sqlite3
7930: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7940: 0a 23 20 54 69 63 6b 65 74 20 23 33 31 33 34 2e  .# Ticket #3134.
7950: 20 20 50 72 65 70 61 72 65 20 61 20 73 74 61 74    Prepare a stat
7960: 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 20 6e 42  ement with an nB
7970: 79 74 65 73 20 70 61 72 61 6d 65 74 65 72 20 6f  ytes parameter o
7980: 66 20 30 2e 0a 23 20 4d 61 6b 65 20 73 75 72 65  f 0..# Make sure
7990: 20 74 68 69 73 20 77 6f 72 6b 73 20 63 6f 72 72   this works corr
79a0: 65 63 74 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e  ectly and does n
79b0: 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6d 65 6d  ot reference mem
79c0: 6f 72 79 20 6f 75 74 20 6f 66 0a 23 20 72 61 6e  ory out of.# ran
79d0: 67 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61  ge..#.do_test ca
79e0: 70 69 33 2d 31 39 2e 31 20 7b 0a 20 20 73 71 6c  pi3-19.1 {.  sql
79f0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 74 6b 74  ite3_prepare_tkt
7a00: 33 31 33 34 20 64 62 0a 7d 20 7b 7d 0a 0a 23 20  3134 db.} {}..# 
7a10: 54 65 73 74 20 74 68 61 74 20 63 61 6c 6c 69 6e  Test that callin
7a20: 67 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  g sqlite3_column
7a30: 5f 62 6c 6f 62 28 29 20 6f 6e 20 61 20 54 45 58  _blob() on a TEX
7a40: 54 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  T value does not
7a50: 20 63 68 61 6e 67 65 0a 23 20 74 68 65 20 72 65   change.# the re
7a60: 74 75 72 6e 20 74 79 70 65 20 6f 66 20 73 75 62  turn type of sub
7a70: 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
7a80: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7a90: 74 79 70 65 28 29 2e 0a 23 0a 64 6f 5f 65 78 65  type()..#.do_exe
7aa0: 63 73 71 6c 5f 74 65 73 74 20 32 30 2e 31 20 7b  csql_test 20.1 {
7ab0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
7ac0: 74 34 28 78 29 3b 0a 20 20 49 4e 53 45 52 54 20  t4(x);.  INSERT 
7ad0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
7ae0: 61 62 63 64 65 66 67 68 69 6a 27 29 3b 0a 7d 0a  abcdefghij');.}.
7af0: 64 6f 5f 74 65 73 74 20 32 30 2e 32 20 7b 0a 20  do_test 20.2 {. 
7b00: 20 73 65 74 20 73 74 6d 74 20 5b 73 71 6c 69 74   set stmt [sqlit
7b10: 65 33 5f 70 72 65 70 61 72 65 20 64 62 20 22 53  e3_prepare db "S
7b20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22  ELECT * FROM t4"
7b30: 20 2d 31 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c   -1 dummy].  sql
7b40: 69 74 65 33 5f 73 74 65 70 20 24 73 74 6d 74 0a  ite3_step $stmt.
7b50: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
7b60: 6f 5f 74 65 73 74 20 32 30 2e 33 20 7b 20 73 71  o_test 20.3 { sq
7b70: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
7b80: 65 20 24 73 74 6d 74 20 30 20 7d 20 7b 54 45 58  e $stmt 0 } {TEX
7b90: 54 7d 0a 64 6f 5f 74 65 73 74 20 32 30 2e 34 20  T}.do_test 20.4 
7ba0: 7b 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  { sqlite3_column
7bb0: 5f 62 6c 6f 62 20 24 73 74 6d 74 20 30 20 7d 20  _blob $stmt 0 } 
7bc0: 7b 61 62 63 64 65 66 67 68 69 6a 7d 0a 64 6f 5f  {abcdefghij}.do_
7bd0: 74 65 73 74 20 32 30 2e 35 20 7b 20 73 71 6c 69  test 20.5 { sqli
7be0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20  te3_column_type 
7bf0: 24 73 74 6d 74 20 30 20 7d 20 7b 54 45 58 54 7d  $stmt 0 } {TEXT}
7c00: 0a 64 6f 5f 74 65 73 74 20 32 30 2e 36 20 7b 20  .do_test 20.6 { 
7c10: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7c20: 20 24 73 74 6d 74 20 7d 20 53 51 4c 49 54 45 5f   $stmt } SQLITE_
7c30: 4f 4b 0a 0a 0a 23 20 54 65 73 74 73 20 6f 66 20  OK...# Tests of 
7c40: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 77 68  the interface wh
7c50: 65 6e 20 6e 6f 20 56 46 53 20 69 73 20 72 65 67  en no VFS is reg
7c60: 69 73 74 65 72 65 64 2e 0a 23 0a 69 66 20 7b 21  istered..#.if {!
7c70: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 65 73  [info exists tes
7c80: 74 65 72 5f 64 6f 5f 62 69 6e 61 72 79 6c 6f 67  ter_do_binarylog
7c90: 5d 7d 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ]} {.  db close.
7ca0: 20 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72    vfs_unregister
7cb0: 5f 61 6c 6c 0a 20 20 64 6f 5f 74 65 73 74 20 63  _all.  do_test c
7cc0: 61 70 69 33 2d 32 30 2e 31 20 7b 0a 20 20 20 20  api3-20.1 {.    
7cd0: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 31 30  sqlite3_sleep 10
7ce0: 30 0a 20 20 7d 20 7b 30 7d 0a 20 20 76 66 73 5f  0.  } {0}.  vfs_
7cf0: 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 7d  reregister_all.}
7d00: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.