/ Hex Artifact Content
Login

Artifact bf6f0308bbbba1e770dac13aa08e5c2ac61c7324:


0000: 23 20 32 30 30 33 20 4a 61 6e 75 61 72 79 20 32  # 2003 January 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 63 61 6c 6c  testing the call
01d0: 62 61 63 6b 2d 66 72 65 65 20 43 2f 43 2b 2b 20  back-free C/C++ 
01e0: 41 50 49 2e 0a 23 0a 23 20 24 49 64 3a 20 63 61  API..#.# $Id: ca
01f0: 70 69 33 2e 74 65 73 74 2c 76 20 31 2e 37 30 20  pi3.test,v 1.70 
0200: 32 30 30 39 2f 30 31 2f 30 39 20 30 32 3a 34 39  2009/01/09 02:49
0210: 3a 33 32 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :32 drh Exp $.#.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65  ir/tester.tcl.se
0260: 74 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20 63  t ::testprefix c
0270: 61 70 69 33 0a 0a 23 20 44 6f 20 6e 6f 74 20 75  api3..# Do not u
0280: 73 65 20 61 20 63 6f 64 65 63 20 66 6f 72 20 74  se a codec for t
0290: 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ests in this fil
02a0: 65 2c 20 61 73 20 74 68 65 20 64 61 74 61 62 61  e, as the databa
02b0: 73 65 20 66 69 6c 65 20 69 73 0a 23 20 6d 61 6e  se file is.# man
02c0: 69 70 75 6c 61 74 65 64 20 64 69 72 65 63 74 6c  ipulated directl
02d0: 79 20 75 73 69 6e 67 20 74 63 6c 20 73 63 72 69  y using tcl scri
02e0: 70 74 73 20 28 75 73 69 6e 67 20 74 68 65 20 5b  pts (using the [
02f0: 68 65 78 69 6f 5f 77 72 69 74 65 5d 20 63 6f 6d  hexio_write] com
0300: 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e 6f 74 5f  mand)..#.do_not_
0310: 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20 52 65 74  use_codec..# Ret
0320: 75 72 6e 20 74 68 65 20 55 54 46 2d 31 36 20 72  urn the UTF-16 r
0330: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
0340: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 55 54   the supplied UT
0350: 46 2d 38 20 73 74 72 69 6e 67 20 24 73 74 72 2e  F-8 string $str.
0360: 0a 23 20 49 66 20 24 6e 74 20 69 73 20 74 72 75  .# If $nt is tru
0370: 65 2c 20 61 70 70 65 6e 64 20 74 77 6f 20 30 78  e, append two 0x
0380: 30 30 20 62 79 74 65 73 20 61 73 20 61 20 6e 75  00 bytes as a nu
0390: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a 70 72  l terminator..pr
03a0: 6f 63 20 75 74 66 31 36 20 7b 73 74 72 20 7b 6e  oc utf16 {str {n
03b0: 74 20 31 7d 7d 20 7b 0a 20 20 73 65 74 20 72 20  t 1}} {.  set r 
03c0: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
03d0: 74 74 6f 20 75 6e 69 63 6f 64 65 20 24 73 74 72  tto unicode $str
03e0: 5d 0a 20 20 69 66 20 7b 24 6e 74 7d 20 7b 0a 20  ].  if {$nt} {. 
03f0: 20 20 20 61 70 70 65 6e 64 20 72 20 22 5c 78 30     append r "\x0
0400: 30 5c 78 30 30 22 0a 20 20 7d 0a 20 20 72 65 74  0\x00".  }.  ret
0410: 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 52 65 74 75  urn $r.}..# Retu
0420: 72 6e 20 74 68 65 20 55 54 46 2d 38 20 72 65 70  rn the UTF-8 rep
0430: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
0440: 68 65 20 73 75 70 70 6c 69 65 64 20 55 54 46 2d  he supplied UTF-
0450: 31 36 20 73 74 72 69 6e 67 20 24 73 74 72 2e 20  16 string $str. 
0460: 0a 70 72 6f 63 20 75 74 66 38 20 7b 73 74 72 7d  .proc utf8 {str}
0470: 20 7b 0a 20 20 23 20 49 66 20 24 73 74 72 20 65   {.  # If $str e
0480: 6e 64 73 20 69 6e 20 74 77 6f 20 30 78 30 30 20  nds in two 0x00 
0490: 30 78 30 30 20 62 79 74 65 73 2c 20 6b 6e 6f 63  0x00 bytes, knoc
04a0: 6b 20 74 68 65 73 65 20 6f 66 66 20 62 65 66 6f  k these off befo
04b0: 72 65 0a 20 20 23 20 63 6f 6e 76 65 72 74 69 6e  re.  # convertin
04c0: 67 20 74 6f 20 55 54 46 2d 38 20 75 73 69 6e 67  g to UTF-8 using
04d0: 20 54 43 4c 2e 0a 20 20 62 69 6e 61 72 79 20 73   TCL..  binary s
04e0: 63 61 6e 20 24 73 74 72 20 5c 63 2a 20 76 61 6c  can $str \c* val
04f0: 73 0a 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20  s.  if {[lindex 
0500: 24 76 61 6c 73 20 65 6e 64 5d 3d 3d 30 20 26 26  $vals end]==0 &&
0510: 20 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20 65   [lindex $vals e
0520: 6e 64 2d 31 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20  nd-1]==0} {.    
0530: 73 65 74 20 73 74 72 20 5b 62 69 6e 61 72 79 20  set str [binary 
0540: 66 6f 72 6d 61 74 20 5c 63 2a 20 5b 6c 72 61 6e  format \c* [lran
0550: 67 65 20 24 76 61 6c 73 20 30 20 65 6e 64 2d 32  ge $vals 0 end-2
0560: 5d 5d 0a 20 20 7d 0a 0a 20 20 73 65 74 20 72 20  ]].  }..  set r 
0570: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
0580: 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20 24 73  tfrom unicode $s
0590: 74 72 5d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a  tr].  return $r.
05a0: 7d 0a 0a 23 20 54 68 65 73 65 20 74 65 73 74 73  }..# These tests
05b0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 74 68 6f 73   complement thos
05c0: 65 20 69 6e 20 63 61 70 69 32 2e 74 65 73 74 2e  e in capi2.test.
05d0: 20 54 68 65 79 20 61 72 65 20 6f 72 67 61 6e 69   They are organi
05e0: 7a 65 64 0a 23 20 61 73 20 66 6f 6c 6c 6f 77 73  zed.# as follows
05f0: 3a 0a 23 0a 23 20 63 61 70 69 33 2d 31 2e 2a 3a  :.#.# capi3-1.*:
0600: 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f 70 72   Test sqlite3_pr
0610: 65 70 61 72 65 20 0a 23 20 63 61 70 69 33 2d 32  epare .# capi3-2
0620: 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69 74 65 33  .*: Test sqlite3
0630: 5f 70 72 65 70 61 72 65 31 36 0a 23 20 63 61 70  _prepare16.# cap
0640: 69 33 2d 33 2e 2a 3a 20 54 65 73 74 20 73 71 6c  i3-3.*: Test sql
0650: 69 74 65 33 5f 6f 70 65 6e 0a 23 20 63 61 70 69  ite3_open.# capi
0660: 33 2d 34 2e 2a 3a 20 54 65 73 74 20 73 71 6c 69  3-4.*: Test sqli
0670: 74 65 33 5f 6f 70 65 6e 31 36 0a 23 20 63 61 70  te3_open16.# cap
0680: 69 33 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68 65  i3-5.*: Test the
0690: 20 76 61 72 69 6f 75 73 20 73 71 6c 69 74 65 33   various sqlite3
06a0: 5f 72 65 73 75 6c 74 5f 2a 20 41 50 49 73 0a 23  _result_* APIs.#
06b0: 20 63 61 70 69 33 2d 36 2e 2a 3a 20 54 65 73 74   capi3-6.*: Test
06c0: 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 63 6c   that sqlite3_cl
06d0: 6f 73 65 20 66 61 69 6c 73 20 69 66 20 74 68 65  ose fails if the
06e0: 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64 69  re are outstandi
06f0: 6e 67 20 56 4d 73 2e 0a 23 0a 0a 73 65 74 20 44  ng VMs..#..set D
0700: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
0710: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
0720: 5d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  ]..do_test capi3
0730: 2d 31 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.0 {.  sqlite3
0740: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
0750: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
0760: 63 61 70 69 33 2d 31 2e 31 20 7b 0a 20 20 73 65  capi3-1.1 {.  se
0770: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0780: 70 72 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c  prepare $DB {SEL
0790: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
07a0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20  lite_master} -1 
07b0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
07c0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
07d0: 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 7d 0a 64   set TAIL.} {}.d
07e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 32  o_test capi3-1.2
07f0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65  .1 {.  sqlite3_e
0800: 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51  rrcode $DB.} {SQ
0810: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
0820: 20 63 61 70 69 33 2d 31 2e 32 2e 32 20 7b 0a 20   capi3-1.2.2 {. 
0830: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0840: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0850: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
0860: 65 73 74 20 63 61 70 69 33 2d 31 2e 33 20 7b 0a  est capi3-1.3 {.
0870: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
0880: 20 24 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65   $DB.} {not an e
0890: 72 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 63 61  rror}.do_test ca
08a0: 70 69 33 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20  pi3-1.4 {.  set 
08b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
08c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
08d0: 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20  ter;SELECT 10}. 
08e0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
08f0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
0900: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
0910: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0920: 24 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c  $STMT.  set TAIL
0930: 0a 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 64  .} {SELECT 10}.d
0940: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 35  o_test capi3-1.5
0950: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0960: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0970: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0980: 45 43 54 20 31 30 7d 0a 20 20 73 65 74 20 53 54  ECT 10}.  set ST
0990: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
09a0: 61 72 65 20 24 44 42 20 24 73 71 6c 20 5b 73 74  are $DB $sql [st
09b0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
09c0: 5d 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  ] TAIL].  sqlite
09d0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
09e0: 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20 7b 53  .  set TAIL.} {S
09f0: 45 4c 45 43 54 20 31 30 7d 0a 64 6f 5f 74 65 73  ELECT 10}.do_tes
0a00: 74 20 63 61 70 69 33 2d 31 2e 36 20 7b 0a 20 20  t capi3-1.6 {.  
0a10: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
0a20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0a30: 5f 6d 61 73 74 65 72 3b 53 45 4c 45 43 54 20 31  _master;SELECT 1
0a40: 30 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  0}.  set STMT [s
0a50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
0a60: 44 42 20 24 73 71 6c 20 5b 65 78 70 72 20 5b 73  DB $sql [expr [s
0a70: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71  tring length $sq
0a80: 6c 5d 2b 31 5d 20 54 41 49 4c 5d 0a 20 20 73 71  l]+1] TAIL].  sq
0a90: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
0aa0: 53 54 4d 54 0a 20 20 73 65 74 20 54 41 49 4c 0a  STMT.  set TAIL.
0ab0: 7d 20 7b 53 45 4c 45 43 54 20 31 30 7d 0a 0a 64  } {SELECT 10}..d
0ac0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e 37  o_test capi3-1.7
0ad0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
0ae0: 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d 20  LECT namex FROM 
0af0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
0b00: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74   catch {.    set
0b10: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0b20: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
0b30: 2d 31 20 54 41 49 4c 5d 0a 20 20 7d 0a 7d 20 7b  -1 TAIL].  }.} {
0b40: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
0b50: 2d 31 2e 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -1.8.1 {.  sqlit
0b60: 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  e3_errcode $DB.}
0b70: 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a   {SQLITE_ERROR}.
0b80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 2e  do_test capi3-1.
0b90: 38 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.2 {.  sqlite3_
0ba0: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
0bb0: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 45   $DB.} {SQLITE_E
0bc0: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61  RROR}.do_test ca
0bd0: 70 69 33 2d 31 2e 39 20 7b 0a 20 20 73 71 6c 69  pi3-1.9 {.  sqli
0be0: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d  te3_errmsg $DB.}
0bf0: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
0c00: 3a 20 6e 61 6d 65 78 7d 0a 0a 69 66 63 61 70 61  : namex}..ifcapa
0c10: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
0c20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e  do_test capi3-2.
0c30: 31 20 7b 0a 20 20 20 20 73 65 74 20 73 71 6c 31  1 {.    set sql1
0c40: 36 20 5b 75 74 66 31 36 20 7b 53 45 4c 45 43 54  6 [utf16 {SELECT
0c50: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0c60: 65 5f 6d 61 73 74 65 72 7d 5d 0a 20 20 20 20 73  e_master}].    s
0c70: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
0c80: 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20 24  _prepare16 $DB $
0c90: 73 71 6c 31 36 20 2d 31 20 3a 3a 54 41 49 4c 5d  sql16 -1 ::TAIL]
0ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
0cb0: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
0cc0: 75 74 66 38 20 24 3a 3a 54 41 49 4c 0a 20 20 7d  utf8 $::TAIL.  }
0cd0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
0ce0: 70 69 33 2d 32 2e 32 20 7b 0a 20 20 20 20 73 65  pi3-2.2 {.    se
0cf0: 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53 45  t sql [utf16 {SE
0d00: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0d10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45 4c  qlite_master;SEL
0d20: 45 43 54 20 31 30 7d 5d 0a 20 20 20 20 73 65 74  ECT 10}].    set
0d30: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
0d40: 72 65 70 61 72 65 31 36 20 24 44 42 20 24 73 71  repare16 $DB $sq
0d50: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  l -1 TAIL].    s
0d60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
0d70: 24 53 54 4d 54 0a 20 20 20 20 75 74 66 38 20 24  $STMT.    utf8 $
0d80: 54 41 49 4c 0a 20 20 7d 20 7b 53 45 4c 45 43 54  TAIL.  } {SELECT
0d90: 20 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   10}.  do_test c
0da0: 61 70 69 33 2d 32 2e 33 20 7b 0a 20 20 20 20 73  api3-2.3 {.    s
0db0: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0dc0: 45 4c 45 43 54 20 6e 61 6d 65 78 20 46 52 4f 4d  ELECT namex FROM
0dd0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d   sqlite_master}]
0de0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
0df0: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
0e00: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20 24  ite3_prepare16 $
0e10: 44 42 20 24 73 71 6c 20 2d 31 5d 0a 20 20 20 20  DB $sql -1].    
0e20: 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74  }.  } {1}.  do_t
0e30: 65 73 74 20 63 61 70 69 33 2d 32 2e 34 2e 31 20  est capi3-2.4.1 
0e40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
0e50: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
0e60: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
0e70: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32 2e 34  o_test capi3-2.4
0e80: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
0e90: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
0ea0: 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54  e $DB.  } {SQLIT
0eb0: 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65  E_ERROR}.  do_te
0ec0: 73 74 20 63 61 70 69 33 2d 32 2e 35 20 7b 0a 20  st capi3-2.5 {. 
0ed0: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
0ee0: 67 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20 73 75  g $DB.  } {no su
0ef0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65 78  ch column: namex
0f00: 7d 0a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73  }..  ifcapable s
0f10: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
0f20: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
0f30: 33 2d 32 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  3-2.6 {.      ex
0f40: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
0f50: 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65 28 78 29  BLE tablename(x)
0f60: 7d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 31  }.      set sql1
0f70: 36 20 5b 75 74 66 31 36 20 7b 50 52 41 47 4d 41  6 [utf16 {PRAGMA
0f80: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22 54 61 62   table_info("Tab
0f90: 6c 65 4e 61 6d 65 22 29 3b 20 2d 2d 65 78 63 65  leName"); --exce
0fa0: 73 73 20 74 65 78 74 7d 5d 0a 20 20 20 20 20 20  ss text}].      
0fb0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
0fc0: 33 5f 70 72 65 70 61 72 65 31 36 20 24 44 42 20  3_prepare16 $DB 
0fd0: 24 73 71 6c 31 36 20 2d 31 5d 0a 20 20 20 20 20  $sql16 -1].     
0fe0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
0ff0: 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49 54 45  TMT.    } SQLITE
1000: 5f 52 4f 57 0a 20 20 20 20 64 6f 5f 74 65 73 74  _ROW.    do_test
1010: 20 63 61 70 69 33 2d 32 2e 37 20 7b 0a 20 20 20   capi3-2.7 {.   
1020: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
1030: 24 53 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49  $STMT.    } SQLI
1040: 54 45 5f 44 4f 4e 45 0a 20 20 20 20 64 6f 5f 74  TE_DONE.    do_t
1050: 65 73 74 20 63 61 70 69 33 2d 32 2e 38 20 7b 0a  est capi3-2.8 {.
1060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
1070: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20  nalize $STMT.   
1080: 20 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d   } SQLITE_OK.  }
1090: 0a 0a 7d 20 3b 23 20 65 6e 64 69 66 20 75 74 66  ..} ;# endif utf
10a0: 31 36 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c  16..# rename sql
10b0: 69 74 65 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65  ite3_open sqlite
10c0: 33 5f 6f 70 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f  3_open_old.# pro
10d0: 63 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 7b  c sqlite3_open {
10e0: 66 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 7d 20 7b  fname options} {
10f0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6e 65 77  sqlite3_open_new
1100: 20 24 66 6e 61 6d 65 20 24 6f 70 74 69 6f 6e 73   $fname $options
1110: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }..do_test capi3
1120: 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32  -3.1 {.  set db2
1130: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74   [sqlite3_open t
1140: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c  est.db {}].  sql
1150: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62  ite3_errcode $db
1160: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1170: 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64  # FIX ME: Should
1180: 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61 6e   test the db han
1190: 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65  dle works..do_te
11a0: 73 74 20 63 61 70 69 33 2d 33 2e 32 20 7b 0a 20  st capi3-3.2 {. 
11b0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
11c0: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
11d0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
11e0: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a  3.3 {.  catch {.
11f0: 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c      set db2 [sql
1200: 69 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67 75 73  ite3_open /bogus
1210: 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 20 7b 7d  /path/test.db {}
1220: 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ].  }.  sqlite3_
1230: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
1240: 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f   $db2.} {SQLITE_
1250: 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65 73  CANTOPEN}.do_tes
1260: 74 20 63 61 70 69 33 2d 33 2e 34 20 7b 0a 20 20  t capi3-3.4 {.  
1270: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
1280: 64 62 32 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f  db2.} {unable to
1290: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66   open database f
12a0: 69 6c 65 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ile}.do_test cap
12b0: 69 33 2d 33 2e 35 20 7b 0a 20 20 73 71 6c 69 74  i3-3.5 {.  sqlit
12c0: 65 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20  e3_close $db2.} 
12d0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 69 66 20 7b  {SQLITE_OK}.if {
12e0: 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65 5f  [clang_sanitize_
12f0: 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a 20  address]==0} {. 
1300: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33   do_test capi3-3
1310: 2e 36 2e 31 2d 6d 69 73 75 73 65 20 7b 0a 20 20  .6.1-misuse {.  
1320: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
1330: 24 64 62 32 0a 20 20 7d 20 7b 53 51 4c 49 54 45  $db2.  } {SQLITE
1340: 5f 4d 49 53 55 53 45 7d 0a 20 20 64 6f 5f 74 65  _MISUSE}.  do_te
1350: 73 74 20 63 61 70 69 33 2d 33 2e 36 2e 32 2d 6d  st capi3-3.6.2-m
1360: 69 73 75 73 65 20 7b 0a 20 20 20 20 73 71 6c 69  isuse {.    sqli
1370: 74 65 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a  te3_errmsg $db2.
1380: 20 20 7d 20 7b 6c 69 62 72 61 72 79 20 72 6f 75    } {library rou
1390: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
13a0: 6f 66 20 73 65 71 75 65 6e 63 65 7d 0a 20 20 69  of sequence}.  i
13b0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
13c0: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63   {.    do_test c
13d0: 61 70 69 33 2d 33 2e 36 2e 33 2d 6d 69 73 75 73  api3-3.6.3-misus
13e0: 65 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b  e {.      utf8 [
13f0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
1400: 20 24 64 62 32 5d 0a 20 20 20 20 7d 20 7b 6c 69   $db2].    } {li
1410: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
1420: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
1430: 65 6e 63 65 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  ence}.  }.}..do_
1440: 74 65 73 74 20 63 61 70 69 33 2d 33 2e 37 20 7b  test capi3-3.7 {
1450: 0a 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69  .  set db2 [sqli
1460: 74 65 33 5f 6f 70 65 6e 5d 0a 20 20 73 71 6c 69  te3_open].  sqli
1470: 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32  te3_errcode $db2
1480: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
1490: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 33 2e 38  o_test capi3-3.8
14a0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f   {.  sqlite3_clo
14b0: 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54  se $db2.} {SQLIT
14c0: 45 5f 4f 4b 7d 0a 0a 23 20 72 65 6e 61 6d 65 20  E_OK}..# rename 
14d0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 22 22 0a  sqlite3_open "".
14e0: 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33  # rename sqlite3
14f0: 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71 6c 69 74 65  _open_old sqlite
1500: 33 5f 6f 70 65 6e 0a 0a 69 66 63 61 70 61 62 6c  3_open..ifcapabl
1510: 65 20 7b 75 74 66 31 36 7d 20 7b 0a 64 6f 5f 74  e {utf16} {.do_t
1520: 65 73 74 20 63 61 70 69 33 2d 34 2e 31 20 7b 0a  est capi3-4.1 {.
1530: 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c 69 74    set db2 [sqlit
1540: 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66 31 36  e3_open16 [utf16
1550: 20 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20   test.db] {}].  
1560: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
1570: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  $db2.} {SQLITE_O
1580: 4b 7d 0a 23 20 46 49 58 20 4d 45 3a 20 53 68 6f  K}.# FIX ME: Sho
1590: 75 6c 64 20 74 65 73 74 20 74 68 65 20 64 62 20  uld test the db 
15a0: 68 61 6e 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f  handle works..do
15b0: 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 32 20  _test capi3-4.2 
15c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  {.  sqlite3_clos
15d0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
15e0: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
15f0: 69 33 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68  i3-4.3 {.  catch
1600: 20 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20 5b   {.    set db2 [
1610: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b  sqlite3_open16 [
1620: 75 74 66 31 36 20 2f 62 6f 67 75 73 2f 70 61 74  utf16 /bogus/pat
1630: 68 2f 74 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20  h/test.db] {}]. 
1640: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   }.  sqlite3_err
1650: 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  code $db2.} {SQL
1660: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f  ITE_CANTOPEN}.do
1670: 5f 74 65 73 74 20 63 61 70 69 33 2d 34 2e 34 20  _test capi3-4.4 
1680: 7b 0a 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65  {.  utf8 [sqlite
1690: 33 5f 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d  3_errmsg16 $db2]
16a0: 0a 7d 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70  .} {unable to op
16b0: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
16c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
16d0: 34 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.5 {.  sqlite3_
16e0: 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51  close $db2.} {SQ
16f0: 4c 49 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74  LITE_OK}.} ;# ut
1700: 66 31 36 0a 0a 23 20 54 68 69 73 20 70 72 6f 63  f16..# This proc
1710: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
1720: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41   the following A
1730: 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71  PI calls:.#.# sq
1740: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
1750: 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt.# sqlite3_col
1760: 75 6d 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74  umn_name.# sqlit
1770: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
1780: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
1790: 6e 5f 64 65 63 6c 74 79 70 65 0a 23 20 73 71 6c  n_decltype.# sql
17a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
17b0: 74 79 70 65 31 36 0a 23 0a 23 20 24 53 54 4d 54  type16.#.# $STMT
17c0: 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53   is a compiled S
17d0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74  QL statement. $t
17e0: 65 73 74 20 69 73 20 61 20 70 72 65 66 69 78 0a  est is a prefix.
17f0: 23 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73  # to use for tes
1800: 74 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74  t names within t
1810: 68 69 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73  his proc. $names
1820: 20 69 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20   is a list.# of 
1830: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
1840: 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
1850: 72 65 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d  returned by $STM
1860: 54 2e 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20  T..# $decltypes 
1870: 69 73 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c  is a list of col
1880: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
1890: 74 79 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e  types for $STMT.
18a0: 0a 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a  .#.# Example:.#.
18b0: 23 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69  # set STMT [sqli
18c0: 74 65 33 5f 70 72 65 70 61 72 65 20 22 53 45 4c  te3_prepare "SEL
18d0: 45 43 54 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31  ECT 1, 2, 2;" -1
18e0: 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f   DUMMY].# check_
18f0: 68 65 61 64 65 72 20 74 65 73 74 31 2e 31 20 7b  header test1.1 {
1900: 31 20 32 20 33 7d 20 7b 22 22 20 22 22 20 22 22  1 2 3} {"" "" ""
1910: 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 68  }.#.proc check_h
1920: 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65 73 74  eader {STMT test
1930: 20 6e 61 6d 65 73 20 64 65 63 6c 74 79 70 65 73   names decltypes
1940: 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65  } {..  # Use the
1950: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66   return value of
1960: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1970: 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64  count() to build
1980: 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63  .  # a list of c
1990: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
19a0: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
19b0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20  olumn_count.  # 
19c0: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
19d0: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
19e0: 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c  set ::idxlist [l
19f0: 69 73 74 5d 0a 20 20 73 65 74 20 3a 3a 6e 75 6d  ist].  set ::num
1a00: 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  cols [sqlite3_co
1a10: 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54  lumn_count $STMT
1a20: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
1a30: 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f  } {$i < $::numco
1a40: 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61  ls} {incr i} {la
1a50: 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20  ppend ::idxlist 
1a60: 24 69 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  $i}..  # Column 
1a70: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20  names in UTF-8. 
1a80: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
1a90: 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65   {.    set cname
1aa0: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
1ab0: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
1ac0: 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d  st {lappend cnam
1ad0: 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63  elist [sqlite3_c
1ae0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54  olumn_name $STMT
1af0: 20 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63   $i]} .    set c
1b00: 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61  namelist.  } $na
1b10: 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20  mes..  # Column 
1b20: 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  names in UTF-16.
1b30: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
1b40: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
1b50: 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 20 20  t $test.2 {.    
1b60: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1b70: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
1b80: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
1b90: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
1ba0: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66  d cnamelist [utf
1bb0: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
1bc0: 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24  n_name16 $STMT $
1bd0: 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i]].      }.    
1be0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
1bf0: 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d      } $names.  }
1c00: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d  ..  # Column nam
1c10: 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f  es in UTF-8.  do
1c20: 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20 7b 0a  _test $test.3 {.
1c30: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1c40: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  t [list].    for
1c50: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
1c60: 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69  {lappend cnameli
1c70: 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  st [sqlite3_colu
1c80: 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69  mn_name $STMT $i
1c90: 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d  ]} .    set cnam
1ca0: 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73  elist.  } $names
1cb0: 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d  ..  # Column nam
1cc0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69  es in UTF-16.  i
1cd0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
1ce0: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24   {.    do_test $
1cf0: 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 20 20 73  test.4 {.      s
1d00: 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69  et cnamelist [li
1d10: 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  st].      foreac
1d20: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
1d30: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
1d40: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
1d50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1d60: 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d  ame16 $STMT $i]]
1d70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1d80: 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20  et cnamelist.   
1d90: 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20   } $names.  }.. 
1da0: 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20   # Column names 
1db0: 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65  in UTF-8.  do_te
1dc0: 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20 20 20  st $test.5 {.   
1dd0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
1de0: 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63  list].    foreac
1df0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61  h i $idxlist {la
1e00: 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20  ppend cnamelist 
1e10: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1e20: 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20 24  decltype $STMT $
1e30: 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61  i]} .    set cna
1e40: 6d 65 6c 69 73 74 0a 20 20 7d 20 24 64 65 63 6c  melist.  } $decl
1e50: 74 79 70 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d  types..  # Colum
1e60: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
1e70: 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20  pes in UTF-16.  
1e80: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1e90: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
1ea0: 24 74 65 73 74 2e 36 20 7b 0a 20 20 20 20 20 20  $test.6 {.      
1eb0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1ec0: 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61  ist].      forea
1ed0: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
1ee0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1ef0: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
1f00: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1f10: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
1f20: 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20   $i]].      }.  
1f30: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1f40: 74 0a 20 20 20 20 7d 20 24 64 65 63 6c 74 79 70  t.    } $decltyp
1f50: 65 73 0a 20 20 7d 0a 0a 0a 20 20 23 20 54 65 73  es.  }...  # Tes
1f60: 74 20 73 6f 6d 65 20 6f 75 74 20 6f 66 20 72 61  t some out of ra
1f70: 6e 67 65 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a  nge conditions:.
1f80: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
1f90: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
1fa0: 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 20 20  t $test.7 {.    
1fb0: 20 20 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 20    list \.       
1fc0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1fd0: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 2d 31 5d 20  _name $STMT -1] 
1fe0: 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 69 74  \.        [sqlit
1ff0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
2000: 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20   $STMT -1] \.   
2010: 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f       [sqlite3_co
2020: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53  lumn_decltype $S
2030: 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20  TMT -1] \.      
2040: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
2050: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
2060: 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20  MT -1] \.       
2070: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2080: 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 6e 75 6d  _name $STMT $num
2090: 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20  cols] \.        
20a0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
20b0: 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 6e 75  name16 $STMT $nu
20c0: 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20  mcols] \.       
20d0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
20e0: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
20f0: 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20  $numcols] \.    
2100: 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c      [sqlite3_col
2110: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24  umn_decltype16 $
2120: 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20  STMT $numcols]. 
2130: 20 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b     } {{} {} {} {
2140: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20  } {} {} {} {}}. 
2150: 20 7d 0a 7d 20 0a 0a 23 20 54 68 69 73 20 70 72   }.} ..# This pr
2160: 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  oc is used to te
2170: 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  st the following
2180: 20 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20   API calls:.#.# 
2190: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
21a0: 72 69 67 69 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c  rigin_name.# sql
21b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
21c0: 69 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  in_name16.# sqli
21d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
21e0: 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f  _name.# sqlite3_
21f0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
2200: 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  e16.# sqlite3_co
2210: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
2220: 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c  me.# sqlite3_col
2230: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
2240: 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20 69 73  e16.#.# $STMT is
2250: 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20   a compiled SQL 
2260: 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65 73 74  statement. $test
2270: 20 69 73 20 61 20 70 72 65 66 69 78 0a 23 20 74   is a prefix.# t
2280: 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74 20 6e  o use for test n
2290: 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 69 73  ames within this
22a0: 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20 69 73   proc. $names is
22b0: 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74 68 65   a list.# of the
22c0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
22d0: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74  at should be ret
22e0: 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54 2e 0a  urned by $STMT..
22f0: 23 20 24 64 65 63 6c 74 79 70 65 73 20 69 73 20  # $decltypes is 
2300: 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  a list of column
2310: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
2320: 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a 23 0a  es for $STMT..#.
2330: 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73  # Example:.#.# s
2340: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
2350: 5f 70 72 65 70 61 72 65 20 22 53 45 4c 45 43 54  _prepare "SELECT
2360: 20 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55   1, 2, 2;" -1 DU
2370: 4d 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61  MMY].# check_hea
2380: 64 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32  der test1.1 {1 2
2390: 20 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23   3} {"" "" ""}.#
23a0: 0a 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67  .proc check_orig
23b0: 69 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20  in_header {STMT 
23c0: 74 65 73 74 20 64 62 73 20 74 61 62 6c 65 73 20  test dbs tables 
23d0: 63 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73  cols} {.  # If s
23e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
23f0: 69 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20  igin_name() and 
2400: 66 72 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20  friends are not 
2410: 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20  compiled into.  
2420: 23 20 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68  # this build, th
2430: 69 73 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d  is proc is a no-
2440: 6f 70 2e 0a 20 20 69 66 63 61 70 61 62 6c 65 20  op..  ifcapable 
2450: 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b  columnmetadata {
2460: 0a 20 20 20 20 23 20 55 73 65 20 74 68 65 20 72  .    # Use the r
2470: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73  eturn value of s
2480: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
2490: 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20  unt() to build. 
24a0: 20 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63     # a list of c
24b0: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
24c0: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
24d0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20  olumn_count.    
24e0: 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68  # is 3, build th
24f0: 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a  e list {0 1 2}..
2500: 20 20 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73      set ::idxlis
2510: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74  t [list].    set
2520: 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69   ::numcols [sqli
2530: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
2540: 20 24 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20   $STMT].    for 
2550: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
2560: 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63  $::numcols} {inc
2570: 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a  r i} {lappend ::
2580: 69 64 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20  idxlist $i}.  . 
2590: 20 20 20 23 20 44 61 74 61 62 61 73 65 20 6e 61     # Database na
25a0: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
25b0: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38   do_test $test.8
25c0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61   {.      set cna
25d0: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
25e0: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69      foreach i $i
25f0: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20  dxlist {.       
2600: 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69   lappend cnameli
2610: 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  st [sqlite3_colu
2620: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
2630: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20   $STMT $i].     
2640: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e   } .      set cn
2650: 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64  amelist.    } $d
2660: 62 73 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61  bs.  .    # Data
2670: 62 61 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54  base names in UT
2680: 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70 61 62  F-16.    ifcapab
2690: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20  le {utf16} {.   
26a0: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
26b0: 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  .9 {.        set
26c0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
26d0: 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ].        foreac
26e0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
26f0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
2700: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
2710: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2720: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
2730: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
2740: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65      }.        se
2750: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
2760: 20 20 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20    } $dbs.    }. 
2770: 20 0a 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61   .    # Table na
2780: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2790: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
27a0: 30 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  0 {.      set cn
27b0: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
27c0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
27d0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
27e0: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
27f0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
2800: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24  umn_table_name $
2810: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
2820: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
2830: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62  elist.    } $tab
2840: 6c 65 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62  les.  .    # Tab
2850: 6c 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  le names in UTF-
2860: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2870: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2880: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2890: 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  1 {.        set 
28a0: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
28b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
28c0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
28d0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
28e0: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
28f0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2900: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54  table_name16 $ST
2910: 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20  MT $i]].        
2920: 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  }.        set cn
2930: 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20  amelist.      } 
2940: 24 74 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20  $tables.    }.  
2950: 0a 20 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61  .    # Origin na
2960: 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20  mes in UTF-8.   
2970: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
2980: 32 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e  2 {.      set cn
2990: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
29a0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
29b0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
29c0: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
29d0: 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ist [sqlite3_col
29e0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20  umn_origin_name 
29f0: 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20  $STMT $i].      
2a00: 7d 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61  } .      set cna
2a10: 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f  melist.    } $co
2a20: 6c 73 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67  ls.  .    # Orig
2a30: 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  in declaration t
2a40: 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ypes in UTF-16. 
2a50: 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74     ifcapable {ut
2a60: 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f  f16} {.      do_
2a70: 74 65 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a  test $test.13 {.
2a80: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
2a90: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2aa0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24       foreach i $
2ab0: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20  idxlist {.      
2ac0: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d      lappend cnam
2ad0: 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c  elist [utf8 [sql
2ae0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
2af0: 69 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20  in_name16 $STMT 
2b00: 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  $i]].        }. 
2b10: 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65         set cname
2b20: 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f  list.      } $co
2b30: 6c 73 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  ls.    }.  }.}..
2b40: 23 20 54 68 69 73 20 70 72 6f 63 20 69 73 20 75  # This proc is u
2b50: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
2b60: 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a  following APIs:.
2b70: 23 0a 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61  #.# sqlite3_data
2b80: 5f 63 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33  _count.# sqlite3
2b90: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73  _column_type.# s
2ba0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2bb0: 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  t.# sqlite3_colu
2bc0: 6d 6e 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65  mn_text.# sqlite
2bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a  3_column_text16.
2be0: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2bf0: 5f 64 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d  _double.#.# $STM
2c00: 54 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20  T is a compiled 
2c10: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  SQL statement fo
2c20: 72 20 77 68 69 63 68 20 74 68 65 20 70 72 65 76  r which the prev
2c30: 69 6f 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20  ious call .# to 
2c40: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74  sqlite3_step ret
2c50: 75 72 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57  urned SQLITE_ROW
2c60: 2e 20 24 74 65 73 74 20 69 73 20 61 20 70 72 65  . $test is a pre
2c70: 66 69 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f  fix to use .# fo
2c80: 72 20 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74  r test names wit
2c90: 68 69 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24  hin this proc. $
2ca0: 74 79 70 65 73 20 69 73 20 61 20 6c 69 73 74 20  types is a list 
2cb0: 6f 66 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65  of the .# manife
2cc0: 73 74 20 74 79 70 65 73 20 66 6f 72 20 74 68 65  st types for the
2cd0: 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69   current row. $i
2ce0: 6e 74 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e  nts, $doubles an
2cf0: 64 20 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65  d $strings.# are
2d00: 20 6c 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e   lists of the in
2d10: 74 65 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20  teger, real and 
2d20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2d30: 61 74 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20  ations of.# the 
2d40: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75  values in the cu
2d50: 72 72 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45  rrent row..#.# E
2d60: 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20  xample:.#.# set 
2d70: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
2d80: 65 70 61 72 65 20 22 53 45 4c 45 43 54 20 27 68  epare "SELECT 'h
2d90: 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c 4c  ello', 1.1, NULL
2da0: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73 71  " -1 DUMMY].# sq
2db0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
2dc0: 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74 65  .# check_data te
2dd0: 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41 4c  st1.2 {TEXT REAL
2de0: 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20 7b   NULL} {0 1 0} {
2df0: 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f 20  0 1.1 0} {hello 
2e00: 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20 63  1.1 {}}.#.proc c
2e10: 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54 20  heck_data {STMT 
2e20: 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73 20  test types ints 
2e30: 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73 7d  doubles strings}
2e40: 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65 20   {..  # Use the 
2e50: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20  return value of 
2e60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
2e70: 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64 0a  ount() to build.
2e80: 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f    # a list of co
2e90: 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e  lumn indexes. i.
2ea0: 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f  e. If sqlite3_co
2eb0: 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69  lumn_count.  # i
2ec0: 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20 6c  s 3, build the l
2ed0: 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73  ist {0 1 2}..  s
2ee0: 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69  et ::idxlist [li
2ef0: 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f 6c  st].  set numcol
2f00: 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  s [sqlite3_data_
2f10: 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 66  count $STMT].  f
2f20: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
2f30: 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e   < $numcols} {in
2f40: 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a  cr i} {lappend :
2f50: 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23 20  :idxlist $i}..# 
2f60: 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24 74  types.do_test $t
2f70: 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74 79  est.1 {.  set ty
2f80: 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  pes [list].  for
2f90: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2fa0: 7b 0a 20 20 20 20 73 65 74 20 78 20 5b 73 71 6c  {.    set x [sql
2fb0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
2fc0: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 23   $STMT $i].    #
2fd0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2fe0: 31 32 37 39 33 2d 34 33 32 38 33 20 45 76 65 72  12793-43283 Ever
2ff0: 79 20 76 61 6c 75 65 20 69 6e 20 53 51 4c 69 74  y value in SQLit
3000: 65 20 68 61 73 20 6f 6e 65 20 6f 66 20 66 69 76  e has one of fiv
3010: 65 0a 20 20 20 20 23 20 66 75 6e 64 61 6d 65 6e  e.    # fundamen
3020: 74 61 6c 20 64 61 74 61 74 79 70 65 73 3a 20 36  tal datatypes: 6
3030: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
3040: 65 67 65 72 20 36 34 2d 62 69 74 20 49 45 45 45  eger 64-bit IEEE
3050: 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 23 20   floating.    # 
3060: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 73 74 72  point number str
3070: 69 6e 67 20 42 4c 4f 42 20 4e 55 4c 4c 0a 20 20  ing BLOB NULL.  
3080: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 7b    if {[lsearch {
3090: 49 4e 54 45 47 45 52 20 46 4c 4f 41 54 20 54 45  INTEGER FLOAT TE
30a0: 58 54 20 42 4c 4f 42 20 4e 55 4c 4c 7d 20 24 78  XT BLOB NULL} $x
30b0: 5d 3c 30 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  ]<0} {.      set
30c0: 20 74 79 70 65 73 20 45 52 52 4f 52 0a 20 20 20   types ERROR.   
30d0: 20 20 20 62 72 65 61 6b 0a 20 20 20 20 7d 20 65     break.    } e
30e0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  lse {.      lapp
30f0: 65 6e 64 20 74 79 70 65 73 20 24 78 0a 20 20 20  end types $x.   
3100: 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20 74 79 70   }.  }.  set typ
3110: 65 73 0a 7d 20 24 74 79 70 65 73 0a 20 0a 0a 23  es.} $types. ..#
3120: 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73   Integers.do_tes
3130: 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20 73 65  t $test.2 {.  se
3140: 74 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20  t ints [list].  
3150: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3160: 73 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73  st {lappend ints
3170: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3180: 5f 69 6e 74 36 34 20 24 53 54 4d 54 20 24 69 5d  _int64 $STMT $i]
3190: 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20 24  }.  set ints.} $
31a0: 69 6e 74 73 0a 0a 23 20 62 79 74 65 73 0a 73 65  ints..# bytes.se
31b0: 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 66 6f  t lens [list].fo
31c0: 72 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69  reach i $::idxli
31d0: 73 74 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 6c  st {.  lappend l
31e0: 65 6e 73 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  ens [string leng
31f0: 74 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72 69  th [lindex $stri
3200: 6e 67 73 20 24 69 5d 5d 0a 7d 0a 64 6f 5f 74 65  ngs $i]].}.do_te
3210: 73 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 73  st $test.3 {.  s
3220: 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74 5d 0a  et bytes [list].
3230: 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74    set lens [list
3240: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
3250: 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61 70  dxlist {.    lap
3260: 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c 69  pend bytes [sqli
3270: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
3280: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 7d 0a 20   $STMT $i].  }. 
3290: 20 73 65 74 20 62 79 74 65 73 0a 7d 20 24 6c 65   set bytes.} $le
32a0: 6e 73 0a 0a 23 20 62 79 74 65 73 31 36 0a 69 66  ns..# bytes16.if
32b0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
32c0: 7b 0a 20 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69  {.  set lens [li
32d0: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
32e0: 24 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  $::idxlist {.   
32f0: 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73 20 5b 65   lappend lens [e
3300: 78 70 72 20 32 20 2a 20 5b 73 74 72 69 6e 67 20  xpr 2 * [string 
3310: 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65 78 20 24  length [lindex $
3320: 73 74 72 69 6e 67 73 20 24 69 5d 5d 5d 0a 20 20  strings $i]]].  
3330: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73  }.  do_test $tes
3340: 74 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 62 79  t.4 {.    set by
3350: 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73  tes [list].    s
3360: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20  et lens [list]. 
3370: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
3380: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 6c 61  xlist {.      la
3390: 70 70 65 6e 64 20 62 79 74 65 73 20 5b 73 71 6c  ppend bytes [sql
33a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
33b0: 73 31 36 20 24 53 54 4d 54 20 24 69 5d 0a 20 20  s16 $STMT $i].  
33c0: 20 20 7d 0a 20 20 20 20 73 65 74 20 62 79 74 65    }.    set byte
33d0: 73 0a 20 20 7d 20 24 6c 65 6e 73 0a 7d 0a 0a 23  s.  } $lens.}..#
33e0: 20 42 6c 6f 62 0a 64 6f 5f 74 65 73 74 20 24 74   Blob.do_test $t
33f0: 65 73 74 2e 35 20 7b 0a 20 20 73 65 74 20 75 74  est.5 {.  set ut
3400: 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  f8 [list].  fore
3410: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
3420: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 73 71  lappend utf8 [sq
3430: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
3440: 62 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73  b $STMT $i]}.  s
3450: 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72 69 6e  et utf8.} $strin
3460: 67 73 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74  gs..# UTF-8.do_t
3470: 65 73 74 20 24 74 65 73 74 2e 36 20 7b 0a 20 20  est $test.6 {.  
3480: 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a  set utf8 [list].
3490: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
34a0: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74  list {lappend ut
34b0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
34c0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69  mn_text $STMT $i
34d0: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
34e0: 24 73 74 72 69 6e 67 73 0a 0a 23 20 46 6c 6f 61  $strings..# Floa
34f0: 74 73 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  ts.do_test $test
3500: 2e 37 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20  .7 {.  set utf8 
3510: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
3520: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3530: 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74  pend utf8 [sqlit
3540: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
3550: 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65   $STMT $i]}.  se
3560: 74 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65  t utf8.} $double
3570: 73 0a 0a 23 20 55 54 46 2d 31 36 0a 69 66 63 61  s..# UTF-16.ifca
3580: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
3590: 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e    do_test $test.
35a0: 38 20 7b 0a 20 20 20 20 73 65 74 20 75 74 66 38  8 {.    set utf8
35b0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
35c0: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
35d0: 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b 75 74  lappend utf8 [ut
35e0: 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8 [sqlite3_colu
35f0: 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20  mn_text16 $STMT 
3600: 24 69 5d 5d 7d 0a 20 20 20 20 73 65 74 20 75 74  $i]]}.    set ut
3610: 66 38 0a 20 20 7d 20 24 73 74 72 69 6e 67 73 0a  f8.  } $strings.
3620: 7d 0a 0a 23 20 49 6e 74 65 67 65 72 73 0a 64 6f  }..# Integers.do
3630: 5f 74 65 73 74 20 24 74 65 73 74 2e 39 20 7b 0a  _test $test.9 {.
3640: 20 20 73 65 74 20 69 6e 74 73 20 5b 6c 69 73 74    set ints [list
3650: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
3660: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
3670: 69 6e 74 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ints [sqlite3_co
3680: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 24  lumn_int $STMT $
3690: 69 5d 7d 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d  i]}.  set ints.}
36a0: 20 24 69 6e 74 73 0a 0a 23 20 46 6c 6f 61 74 73   $ints..# Floats
36b0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
36c0: 30 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  0 {.  set utf8 [
36d0: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
36e0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
36f0: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
3700: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20  3_column_double 
3710: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
3720: 20 75 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65 73   utf8.} $doubles
3730: 0a 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73  ..# UTF-8.do_tes
3740: 74 20 24 74 65 73 74 2e 31 31 20 7b 0a 20 20 73  t $test.11 {.  s
3750: 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20  et utf8 [list]. 
3760: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
3770: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66  ist {lappend utf
3780: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
3790: 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 24 69 5d  n_text $STMT $i]
37a0: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
37b0: 73 74 72 69 6e 67 73 0a 0a 23 20 54 79 70 65 73  strings..# Types
37c0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
37d0: 32 20 7b 0a 20 20 73 65 74 20 74 79 70 65 73 20  2 {.  set types 
37e0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
37f0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3800: 70 65 6e 64 20 74 79 70 65 73 20 5b 73 71 6c 69  pend types [sqli
3810: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20  te3_column_type 
3820: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
3830: 20 74 79 70 65 73 0a 7d 20 24 74 79 70 65 73 0a   types.} $types.
3840: 0a 23 20 54 65 73 74 20 74 68 61 74 20 61 6e 20  .# Test that an 
3850: 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 72 65 71  out of range req
3860: 75 65 73 74 20 72 65 74 75 72 6e 73 20 74 68 65  uest returns the
3870: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 4e   equivalent of N
3880: 55 4c 4c 0a 64 6f 5f 74 65 73 74 20 24 74 65 73  ULL.do_test $tes
3890: 74 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  t.13 {.  sqlite3
38a0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
38b0: 54 20 2d 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  T -1.} {0}.do_te
38c0: 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20  st $test.13 {.  
38d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
38e0: 65 78 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b  ext $STMT -1.} {
38f0: 7d 0a 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  }..}..ifcapable 
3900: 21 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 20 7b  !floatingpoint {
3910: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
3920: 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65   return.}..do_te
3930: 73 74 20 63 61 70 69 33 2d 35 2e 30 20 7b 0a 20  st capi3-5.0 {. 
3940: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
3950: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
3960: 20 56 41 52 49 4e 54 2c 20 62 20 42 4c 4f 42 2c   VARINT, b BLOB,
3970: 20 63 20 56 41 52 43 48 41 52 28 31 36 29 29 3b   c VARCHAR(16));
3980: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3990: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c   t1 VALUES(1, 2,
39a0: 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   3);.    INSERT 
39b0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
39c0: 6f 6e 65 27 2c 20 27 74 77 6f 27 2c 20 4e 55 4c  one', 'two', NUL
39d0: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
39e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2e  NTO t1 VALUES(1.
39f0: 32 2c 20 31 2e 33 2c 20 31 2e 34 29 3b 0a 20 20  2, 1.3, 1.4);.  
3a00: 7d 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c  }.  set sql "SEL
3a10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 22 0a 20  ECT * FROM t1". 
3a20: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
3a30: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 24  e3_prepare $DB $
3a40: 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73  sql -1 TAIL].  s
3a50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
3a60: 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a 63  unt $STMT.} 3..c
3a70: 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d  heck_header $STM
3a80: 54 20 63 61 70 69 33 2d 35 2e 31 20 7b 61 20 62  T capi3-5.1 {a b
3a90: 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42   c} {VARINT BLOB
3aa0: 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68   VARCHAR(16)}.ch
3ab0: 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65  eck_origin_heade
3ac0: 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e  r $STMT capi3-5.
3ad0: 31 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69  1 {main main mai
3ae0: 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61  n} {t1 t1 t1} {a
3af0: 20 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61   b c}.do_test ca
3b00: 70 69 33 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69  pi3-5.2 {.  sqli
3b10: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3b20: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65   SQLITE_ROW..che
3b30: 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  ck_header $STMT 
3b40: 63 61 70 69 33 2d 35 2e 33 20 7b 61 20 62 20 63  capi3-5.3 {a b c
3b50: 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56  } {VARINT BLOB V
3b60: 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63  ARCHAR(16)}.chec
3b70: 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20  k_origin_header 
3b80: 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33 20  $STMT capi3-5.3 
3b90: 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d  {main main main}
3ba0: 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62   {t1 t1 t1} {a b
3bb0: 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24   c}.check_data $
3bc0: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 34 20 7b  STMT capi3-5.4 {
3bd0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
3be0: 54 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b 31  TEXT} {1 2 3} {1
3bf0: 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20 32  .0 2.0 3.0} {1 2
3c00: 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70   3}..do_test cap
3c10: 69 33 2d 35 2e 35 20 7b 0a 20 20 73 71 6c 69 74  i3-5.5 {.  sqlit
3c20: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
3c30: 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63  SQLITE_ROW..chec
3c40: 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  k_header $STMT c
3c50: 61 70 69 33 2d 35 2e 36 20 7b 61 20 62 20 63 7d  api3-5.6 {a b c}
3c60: 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41   {VARINT BLOB VA
3c70: 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b  RCHAR(16)}.check
3c80: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24  _origin_header $
3c90: 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 36 20 7b  STMT capi3-5.6 {
3ca0: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3cb0: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
3cc0: 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53  c}.check_data $S
3cd0: 54 4d 54 20 63 61 70 69 33 2d 35 2e 37 20 7b 54  TMT capi3-5.7 {T
3ce0: 45 58 54 20 54 45 58 54 20 4e 55 4c 4c 7d 20 7b  EXT TEXT NULL} {
3cf0: 30 20 30 20 30 7d 20 7b 30 2e 30 20 30 2e 30 20  0 0 0} {0.0 0.0 
3d00: 30 2e 30 7d 20 7b 6f 6e 65 20 74 77 6f 20 7b 7d  0.0} {one two {}
3d10: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }..do_test capi3
3d20: 2d 35 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33  -5.8 {.  sqlite3
3d30: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
3d40: 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f  LITE_ROW..check_
3d50: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
3d60: 69 33 2d 35 2e 39 20 7b 61 20 62 20 63 7d 20 7b  i3-5.9 {a b c} {
3d70: 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52 43  VARINT BLOB VARC
3d80: 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f  HAR(16)}.check_o
3d90: 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53 54  rigin_header $ST
3da0: 4d 54 20 63 61 70 69 33 2d 35 2e 39 20 7b 6d 61  MT capi3-5.9 {ma
3db0: 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74  in main main} {t
3dc0: 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d  1 t1 t1} {a b c}
3dd0: 0a 63 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d  .check_data $STM
3de0: 54 20 63 61 70 69 33 2d 35 2e 31 30 20 7b 46 4c  T capi3-5.10 {FL
3df0: 4f 41 54 20 46 4c 4f 41 54 20 54 45 58 54 7d 20  OAT FLOAT TEXT} 
3e00: 7b 31 20 31 20 31 7d 20 7b 31 2e 32 20 31 2e 33  {1 1 1} {1.2 1.3
3e10: 20 31 2e 34 7d 20 7b 31 2e 32 20 31 2e 33 20 31   1.4} {1.2 1.3 1
3e20: 2e 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70  .4}..do_test cap
3e30: 69 33 2d 35 2e 31 31 20 7b 0a 20 20 73 71 6c 69  i3-5.11 {.  sqli
3e40: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3e50: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 0a 64 6f   SQLITE_DONE..do
3e60: 5f 74 65 73 74 20 63 61 70 69 33 2d 35 2e 31 32  _test capi3-5.12
3e70: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
3e80: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51  alize $STMT.} SQ
3e90: 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74  LITE_OK..do_test
3ea0: 20 63 61 70 69 33 2d 35 2e 32 30 20 7b 0a 20 20   capi3-5.20 {.  
3eb0: 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20  set sql "SELECT 
3ec0: 61 2c 20 73 75 6d 28 62 29 2c 20 6d 61 78 28 63  a, sum(b), max(c
3ed0: 29 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20  ) FROM t1 GROUP 
3ee0: 42 59 20 61 22 0a 20 20 73 65 74 20 53 54 4d 54  BY a".  set STMT
3ef0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
3f00: 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  e $DB $sql -1 TA
3f10: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  IL].  sqlite3_co
3f20: 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54  lumn_count $STMT
3f30: 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64  .} 3..check_head
3f40: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35  er $STMT capi3-5
3f50: 2e 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d 61  .21 {a sum(b) ma
3f60: 78 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b 7d  x(c)} {VARINT {}
3f70: 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69   {}}.check_origi
3f80: 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  n_header $STMT c
3f90: 61 70 69 33 2d 35 2e 32 32 20 7b 6d 61 69 6e 20  api3-5.22 {main 
3fa0: 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b 7d  {} {}} {t1 {} {}
3fb0: 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  } {a {} {}}.do_t
3fc0: 65 73 74 20 63 61 70 69 33 2d 35 2e 32 33 20 7b  est capi3-5.23 {
3fd0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
3fe0: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  ize $STMT.} SQLI
3ff0: 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63  TE_OK..do_test c
4000: 61 70 69 33 2d 35 2e 33 30 20 7b 0a 20 20 73 65  api3-5.30 {.  se
4010: 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 61 20  t sql "SELECT a 
4020: 41 53 20 78 2c 20 73 75 6d 28 62 29 20 41 53 20  AS x, sum(b) AS 
4030: 79 2c 20 6d 61 78 28 63 29 20 41 53 20 7a 20 46  y, max(c) AS z F
4040: 52 4f 4d 20 74 31 20 41 53 20 6d 20 47 52 4f 55  ROM t1 AS m GROU
4050: 50 20 42 59 20 78 22 0a 20 20 73 65 74 20 53 54  P BY x".  set ST
4060: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
4070: 61 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20  are $DB $sql -1 
4080: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
4090: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54  column_count $ST
40a0: 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65  MT.} 3..check_he
40b0: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
40c0: 2d 35 2e 33 31 20 7b 78 20 79 20 7a 7d 20 7b 56  -5.31 {x y z} {V
40d0: 41 52 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65  ARINT {} {}}.che
40e0: 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72  ck_origin_header
40f0: 20 24 53 54 4d 54 20 63 61 70 69 33 2d 35 2e 33   $STMT capi3-5.3
4100: 32 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b  2 {main {} {}} {
4110: 74 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20  t1 {} {}} {a {} 
4120: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
4130: 33 2d 35 2e 33 33 20 7b 0a 20 20 73 71 6c 69 74  3-5.33 {.  sqlit
4140: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
4150: 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a  T.} SQLITE_OK...
4160: 73 65 74 20 3a 3a 45 4e 43 20 5b 65 78 65 63 73  set ::ENC [execs
4170: 71 6c 20 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64  ql {pragma encod
4180: 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a  ing}].db close..
4190: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36 2e  do_test capi3-6.
41a0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  0 {.  sqlite3 db
41b0: 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 44   test.db.  set D
41c0: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
41d0: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
41e0: 5d 0a 20 20 69 66 20 7b 5b 73 71 6c 69 74 65 33  ].  if {[sqlite3
41f0: 20 2d 68 61 73 2d 63 6f 64 65 63 5d 3d 3d 30 7d   -has-codec]==0}
4200: 20 7b 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 24   { sqlite3_key $
4210: 44 42 20 78 79 7a 7a 79 20 7d 0a 20 20 73 65 74  DB xyzzy }.  set
4220: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46   sql {SELECT a F
4230: 52 4f 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20  ROM t1 order by 
4240: 72 6f 77 69 64 7d 0a 20 20 73 65 74 20 53 54 4d  rowid}.  set STM
4250: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
4260: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
4270: 41 49 4c 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20  AIL].  expr 0.} 
4280: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {0}.do_test capi
4290: 33 2d 36 2e 31 20 7b 0a 20 20 64 62 20 63 61 63  3-6.1 {.  db cac
42a0: 68 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69 74  he flush.  sqlit
42b0: 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b  e3_close $DB.} {
42c0: 53 51 4c 49 54 45 5f 42 55 53 59 7d 0a 0a 23 20  SQLITE_BUSY}..# 
42d0: 36 2e 32 20 61 6e 64 20 36 2e 33 20 75 73 65 64  6.2 and 6.3 used
42e0: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
42f0: 45 5f 45 52 52 4f 52 20 61 6e 64 20 53 51 4c 49  E_ERROR and SQLI
4300: 54 45 5f 53 43 48 45 4d 41 2c 20 72 65 73 70 65  TE_SCHEMA, respe
4310: 63 74 69 76 65 6c 79 2e 0a 23 20 42 75 74 20 73  ctively..# But s
4320: 69 6e 63 65 20 61 74 74 65 6d 70 74 69 6e 67 20  ince attempting 
4330: 74 6f 20 63 6c 6f 73 65 20 61 20 63 6f 6e 6e 65  to close a conne
4340: 63 74 69 6f 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20  ction no longer 
4350: 72 65 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  resets the inter
4360: 6e 61 6c 0a 23 20 73 63 68 65 6d 61 20 61 6e 64  nal.# schema and
4370: 20 65 78 70 69 72 65 73 20 61 6c 6c 20 73 74 61   expires all sta
4380: 74 65 6d 65 6e 74 73 2c 20 74 68 69 73 20 69 73  tements, this is
4390: 20 6e 6f 20 6c 6f 6e 67 65 72 20 74 68 65 20 63   no longer the c
43a0: 61 73 65 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70  ase..do_test cap
43b0: 69 33 2d 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74  i3-6.2 {.  sqlit
43c0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
43d0: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 23 63 68  {SQLITE_ROW}.#ch
43e0: 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63  eck_data $STMT c
43f0: 61 70 69 33 2d 36 2e 33 20 7b 49 4e 54 45 47 45  api3-6.3 {INTEGE
4400: 52 7d 20 7b 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d  R} {1} {1.0} {1}
4410: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 36  .do_test capi3-6
4420: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .3 {.  sqlite3_f
4430: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
4440: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 69 66 20  {SQLITE_OK}..if 
4450: 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65  {[clang_sanitize
4460: 5f 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a  _address]==0} {.
4470: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4480: 36 2e 34 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20  6.4-misuse {.   
4490: 20 64 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a   db cache flush.
44a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
44b0: 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54  e $DB.  } {SQLIT
44c0: 45 5f 4f 4b 7d 0a 7d 0a 64 62 20 63 6c 6f 73 65  E_OK}.}.db close
44d0: 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75  ..# This procedu
44e0: 72 65 20 73 65 74 73 20 74 68 65 20 76 61 6c 75  re sets the valu
44f0: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f  e of the file-fo
4500: 72 6d 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65  rmat in file 'te
4510: 73 74 2e 64 62 27 0a 23 20 74 6f 20 24 6e 65 77  st.db'.# to $new
4520: 76 61 6c 2e 20 41 6c 73 6f 2c 20 74 68 65 20 73  val. Also, the s
4530: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20  chema cookie is 
4540: 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 23 20 0a  incremented..# .
4550: 70 72 6f 63 20 73 65 74 5f 66 69 6c 65 5f 66 6f  proc set_file_fo
4560: 72 6d 61 74 20 7b 6e 65 77 76 61 6c 7d 20 7b 0a  rmat {newval} {.
4570: 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65    hexio_write te
4580: 73 74 2e 64 62 20 34 34 20 5b 68 65 78 69 6f 5f  st.db 44 [hexio_
4590: 72 65 6e 64 65 72 5f 69 6e 74 33 32 20 24 6e 65  render_int32 $ne
45a0: 77 76 61 6c 5d 0a 20 20 73 65 74 20 73 63 68 65  wval].  set sche
45b0: 6d 61 63 6f 6f 6b 69 65 20 5b 68 65 78 69 6f 5f  macookie [hexio_
45c0: 67 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72  get_int [hexio_r
45d0: 65 61 64 20 74 65 73 74 2e 64 62 20 34 30 20 34  ead test.db 40 4
45e0: 5d 5d 0a 20 20 69 6e 63 72 20 73 63 68 65 6d 61  ]].  incr schema
45f0: 63 6f 6f 6b 69 65 0a 20 20 68 65 78 69 6f 5f 77  cookie.  hexio_w
4600: 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 30 20  rite test.db 40 
4610: 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e  [hexio_render_in
4620: 74 33 32 20 24 73 63 68 65 6d 61 63 6f 6f 6b 69  t32 $schemacooki
4630: 65 5d 0a 20 20 72 65 74 75 72 6e 20 7b 7d 0a 7d  e].  return {}.}
4640: 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75  ..# This procedu
4650: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 76  re returns the v
4660: 61 6c 75 65 20 6f 66 20 74 68 65 20 66 69 6c 65  alue of the file
4670: 2d 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c 65 20  -format in file 
4680: 27 74 65 73 74 2e 64 62 27 2e 0a 23 20 0a 70 72  'test.db'..# .pr
4690: 6f 63 20 67 65 74 5f 66 69 6c 65 5f 66 6f 72 6d  oc get_file_form
46a0: 61 74 20 7b 7b 66 6e 61 6d 65 20 74 65 73 74 2e  at {{fname test.
46b0: 64 62 7d 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  db}} {.  return 
46c0: 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b  [hexio_get_int [
46d0: 68 65 78 69 6f 5f 72 65 61 64 20 24 66 6e 61 6d  hexio_read $fnam
46e0: 65 20 34 34 20 34 5d 5d 0a 7d 0a 0a 69 66 20 7b  e 44 4]].}..if {
46f0: 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63  ![sqlite3 -has-c
4700: 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 54 65 73  odec]} {.  # Tes
4710: 74 20 77 68 61 74 20 68 61 70 70 65 6e 73 20 77  t what happens w
4720: 68 65 6e 20 74 68 65 20 6c 69 62 72 61 72 79 20  hen the library 
4730: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 6e 65 77  encounters a new
4740: 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 0a  er file format..
4750: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4760: 37 2e 31 20 7b 0a 20 20 20 20 73 65 74 5f 66 69  7.1 {.    set_fi
4770: 6c 65 5f 66 6f 72 6d 61 74 20 35 0a 20 20 7d 20  le_format 5.  } 
4780: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
4790: 69 33 2d 37 2e 32 20 7b 0a 20 20 20 20 63 61 74  i3-7.2 {.    cat
47a0: 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20  ch { sqlite3 db 
47b0: 74 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61  test.db }.    ca
47c0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  tchsql {.      S
47d0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
47e0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
47f0: 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70  }.  } {1 {unsupp
4800: 6f 72 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61  orted file forma
4810: 74 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d  t}}.  db close.}
4820: 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20  ..if {![sqlite3 
4830: 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20  -has-codec]} {. 
4840: 20 23 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74   # Now test that
4850: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 72   the library cor
4860: 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 73 20 62  rectly handles b
4870: 6f 67 75 73 20 65 6e 74 72 69 65 73 20 69 6e 20  ogus entries in 
4880: 74 68 65 0a 20 20 23 20 73 71 6c 69 74 65 5f 6d  the.  # sqlite_m
4890: 61 73 74 65 72 20 74 61 62 6c 65 20 28 73 63 68  aster table (sch
48a0: 65 6d 61 20 63 6f 72 72 75 70 74 69 6f 6e 29 2e  ema corruption).
48b0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
48c0: 2d 38 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63 65  -8.1 {.    force
48d0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
48e0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  est.db-journal. 
48f0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
4900: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
4910: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
4920: 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20   TABLE t1(a);.  
4930: 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65    }.    db close
4940: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
4950: 74 20 63 61 70 69 33 2d 38 2e 32 20 7b 0a 20 20  t capi3-8.2 {.  
4960: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4970: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
4980: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4990: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
49a0: 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  ON;.      INSERT
49b0: 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73   INTO sqlite_mas
49c0: 74 65 72 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c  ter VALUES(NULL,
49d0: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
49e0: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ULL);.    }.    
49f0: 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a  db close.  } {}.
4a00: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
4a10: 38 2e 33 20 7b 0a 20 20 20 20 63 61 74 63 68 20  8.3 {.    catch 
4a20: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
4a30: 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74 63 68  t.db }.    catch
4a40: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
4a50: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
4a60: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
4a70: 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64   } {1 {malformed
4a80: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
4a90: 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74   (?)}}.  do_test
4aa0: 20 63 61 70 69 33 2d 38 2e 34 20 7b 0a 20 20 20   capi3-8.4 {.   
4ab0: 20 23 20 42 75 69 6c 64 20 61 20 35 2d 66 69 65   # Build a 5-fie
4ac0: 6c 64 20 72 6f 77 20 72 65 63 6f 72 64 2e 20 54  ld row record. T
4ad0: 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  he first field i
4ae0: 73 20 61 20 73 74 72 69 6e 67 20 27 74 61 62 6c  s a string 'tabl
4af0: 65 27 2c 20 61 6e 64 0a 20 20 20 20 23 20 73 75  e', and.    # su
4b00: 62 73 65 71 75 65 6e 74 20 66 69 65 6c 64 73 20  bsequent fields 
4b10: 61 72 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a 20 20  are all NULL..  
4b20: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66    db close.    f
4b30: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
4b40: 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  db test.db-journ
4b50: 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  al.    sqlite3 d
4b60: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  b test.db.    ex
4b70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
4b80: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29  EATE TABLE t1(a)
4b90: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 77  ;.      PRAGMA w
4ba0: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
4bb0: 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  N;.      INSERT 
4bc0: 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74  INTO sqlite_mast
4bd0: 65 72 20 56 41 4c 55 45 53 28 27 74 61 62 6c 65  er VALUES('table
4be0: 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  ',NULL,NULL,NULL
4bf0: 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20  ,NULL);.    }.  
4c00: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b    db close.  } {
4c10: 7d 3b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  };.  do_test cap
4c20: 69 33 2d 38 2e 35 20 7b 0a 20 20 20 20 63 61 74  i3-8.5 {.    cat
4c30: 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20  ch { sqlite3 db 
4c40: 74 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61  test.db }.    ca
4c50: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  tchsql {.      S
4c60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
4c70: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
4c80: 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72  }.  } {1 {malfor
4c90: 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68  med database sch
4ca0: 65 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63  ema (?)}}.  db c
4cb0: 6c 6f 73 65 0a 7d 0a 66 6f 72 63 65 64 65 6c 65  lose.}.forcedele
4cc0: 74 65 20 74 65 73 74 2e 64 62 0a 66 6f 72 63 65  te test.db.force
4cd0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 2d 6a  delete test.db-j
4ce0: 6f 75 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20  ournal...# Test 
4cf0: 74 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67  the english lang
4d00: 75 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69  uage string equi
4d10: 76 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69  valents for sqli
4d20: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73  te error codes.s
4d30: 65 74 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20  et code2english 
4d40: 5b 6c 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f  [list \.SQLITE_O
4d50: 4b 20 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61  K         {not a
4d60: 6e 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  n error} \.SQLIT
4d70: 45 5f 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51  E_ERROR      {SQ
4d80: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
4d90: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
4da0: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 50 45 52 4d  e} \.SQLITE_PERM
4db0: 20 20 20 20 20 20 20 7b 61 63 63 65 73 73 20 70         {access p
4dc0: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
4dd0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 41 42 4f 52 54  } \.SQLITE_ABORT
4de0: 20 20 20 20 20 20 7b 63 61 6c 6c 62 61 63 6b 20        {callback 
4df0: 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20  requested query 
4e00: 61 62 6f 72 74 7d 20 5c 0a 53 51 4c 49 54 45 5f  abort} \.SQLITE_
4e10: 42 55 53 59 20 20 20 20 20 20 20 7b 64 61 74 61  BUSY       {data
4e20: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20  base is locked} 
4e30: 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  \.SQLITE_LOCKED 
4e40: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 74 61      {database ta
4e50: 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 20 5c  ble is locked} \
4e60: 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20  .SQLITE_NOMEM   
4e70: 20 20 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72     {out of memor
4e80: 79 7d 20 5c 0a 53 51 4c 49 54 45 5f 52 45 41 44  y} \.SQLITE_READ
4e90: 4f 4e 4c 59 20 20 20 7b 61 74 74 65 6d 70 74 20  ONLY   {attempt 
4ea0: 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f  to write a reado
4eb0: 6e 6c 79 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  nly database} \.
4ec0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
4ed0: 20 20 7b 69 6e 74 65 72 72 75 70 74 65 64 7d 20    {interrupted} 
4ee0: 5c 0a 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20  \.SQLITE_IOERR  
4ef0: 20 20 20 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72      {disk I/O er
4f00: 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 4f  ror} \.SQLITE_CO
4f10: 52 52 55 50 54 20 20 20 20 7b 64 61 74 61 62 61  RRUPT    {databa
4f20: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
4f30: 20 6d 61 6c 66 6f 72 6d 65 64 7d 20 5c 0a 53 51   malformed} \.SQ
4f40: 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20  LITE_FULL       
4f50: 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73  {database or dis
4f60: 6b 20 69 73 20 66 75 6c 6c 7d 20 5c 0a 53 51 4c  k is full} \.SQL
4f70: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20 20 7b  ITE_CANTOPEN   {
4f80: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
4f90: 61 74 61 62 61 73 65 20 66 69 6c 65 7d 20 5c 0a  atabase file} \.
4fa0: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20  SQLITE_EMPTY    
4fb0: 20 20 7b 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e    {table contain
4fc0: 73 20 6e 6f 20 64 61 74 61 7d 20 5c 0a 53 51 4c  s no data} \.SQL
4fd0: 49 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20 7b  ITE_SCHEMA     {
4fe0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
4ff0: 68 61 73 20 63 68 61 6e 67 65 64 7d 20 5c 0a 53  has changed} \.S
5000: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
5010: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
5020: 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d 49  led} \.SQLITE_MI
5030: 53 4d 41 54 43 48 20 20 20 7b 64 61 74 61 74 79  SMATCH   {dataty
5040: 70 65 20 6d 69 73 6d 61 74 63 68 7d 20 5c 0a 53  pe mismatch} \.S
5050: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20  QLITE_MISUSE    
5060: 20 7b 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   {library routin
5070: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
5080: 73 65 71 75 65 6e 63 65 7d 20 5c 0a 53 51 4c 49  sequence} \.SQLI
5090: 54 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 7b 6c  TE_NOLFS      {l
50a0: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
50b0: 74 20 69 73 20 64 69 73 61 62 6c 65 64 7d 20 5c  t is disabled} \
50c0: 0a 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20 20  .SQLITE_AUTH    
50d0: 20 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69 6f     {authorizatio
50e0: 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49  n denied} \.SQLI
50f0: 54 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 7b 61  TE_FORMAT     {a
5100: 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
5110: 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 7d 20  e format error} 
5120: 5c 0a 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20  \.SQLITE_RANGE  
5130: 20 20 20 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c      {bind or col
5140: 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66  umn index out of
5150: 20 72 61 6e 67 65 7d 20 5c 0a 53 51 4c 49 54 45   range} \.SQLITE
5160: 5f 4e 4f 54 41 44 42 20 20 20 20 20 7b 66 69 6c  _NOTADB     {fil
5170: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
5180: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
5190: 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77 6e 65 72  ase} \.unknowner
51a0: 72 6f 72 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77  ror      {unknow
51b0: 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a 0a 73 65  n error} \.]..se
51c0: 74 20 74 65 73 74 5f 6e 75 6d 62 65 72 20 31 0a  t test_number 1.
51d0: 66 6f 72 65 61 63 68 20 7b 63 6f 64 65 20 65 6e  foreach {code en
51e0: 67 6c 69 73 68 7d 20 24 63 6f 64 65 32 65 6e 67  glish} $code2eng
51f0: 6c 69 73 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  lish {.  do_test
5200: 20 63 61 70 69 33 2d 39 2e 24 74 65 73 74 5f 6e   capi3-9.$test_n
5210: 75 6d 62 65 72 20 22 73 71 6c 69 74 65 33 5f 74  umber "sqlite3_t
5220: 65 73 74 5f 65 72 72 73 74 72 20 24 63 6f 64 65  est_errstr $code
5230: 22 20 24 65 6e 67 6c 69 73 68 0a 20 20 69 6e 63  " $english.  inc
5240: 72 20 74 65 73 74 5f 6e 75 6d 62 65 72 0a 7d 0a  r test_number.}.
5250: 0a 23 20 54 65 73 74 20 74 68 65 20 65 72 72 6f  .# Test the erro
5260: 72 20 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61  r message when a
5270: 20 22 72 65 61 6c 22 20 6f 75 74 20 6f 66 20 6d   "real" out of m
5280: 65 6d 6f 72 79 20 6f 63 63 75 72 73 2e 0a 69 66  emory occurs..if
5290: 20 7b 20 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d   { [permutation]
52a0: 20 21 3d 20 22 6e 6f 66 61 75 6c 74 73 69 6d 22   != "nofaultsim"
52b0: 20 7d 20 7b 0a 69 66 63 61 70 61 62 6c 65 20 6d   } {.ifcapable m
52c0: 65 6d 64 65 62 75 67 20 7b 0a 20 20 64 6f 5f 74  emdebug {.  do_t
52d0: 65 73 74 20 63 61 70 69 33 2d 31 30 2d 31 20 7b  est capi3-10-1 {
52e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
52f0: 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20  test.db.    set 
5300: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
5310: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
5320: 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  b].    sqlite3_m
5330: 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 31 0a 20  emdebug_fail 1. 
5340: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
5350: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
5360: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
5370: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f  .    }.  } {1 {o
5380: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20  ut of memory}}. 
5390: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31   do_test capi3-1
53a0: 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0-2 {.    sqlite
53b0: 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42 0a 20  3_errmsg $::DB. 
53c0: 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   } {out of memor
53d0: 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b  y}.  ifcapable {
53e0: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f  utf16} {.    do_
53f0: 74 65 73 74 20 63 61 70 69 33 2d 31 30 2d 33 20  test capi3-10-3 
5400: 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b 73 71  {.      utf8 [sq
5410: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 20 24  lite3_errmsg16 $
5420: 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74  ::DB].    } {out
5430: 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a   of memory}.  }.
5440: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
5450: 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61  ite3_memdebug_fa
5460: 69 6c 20 2d 31 0a 20 20 64 6f 5f 74 65 73 74 20  il -1.  do_test 
5470: 63 61 70 69 33 2d 31 30 2d 34 20 7b 0a 20 20 20  capi3-10-4 {.   
5480: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
5490: 2e 64 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b  .db.    set DB [
54a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
54b0: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20  on_pointer db]. 
54c0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65     sqlite3_memde
54d0: 62 75 67 5f 66 61 69 6c 20 31 0a 20 20 20 20 63  bug_fail 1.    c
54e0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
54f0: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
5500: 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72  lite_master wher
5510: 65 20 72 6f 77 69 64 3e 35 3b 0a 20 20 20 20 7d  e rowid>5;.    }
5520: 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20  .  } {1 {out of 
5530: 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65  memory}}.  do_te
5540: 73 74 20 63 61 70 69 33 2d 31 30 2d 35 20 7b 0a  st capi3-10-5 {.
5550: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d      sqlite3_errm
5560: 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b 6f 75  sg $::DB.  } {ou
5570: 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20 69  t of memory}.  i
5580: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
5590: 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63   {.    do_test c
55a0: 61 70 69 33 2d 31 30 2d 36 20 7b 0a 20 20 20 20  api3-10-6 {.    
55b0: 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f    utf8 [sqlite3_
55c0: 65 72 72 6d 73 67 31 36 20 24 3a 3a 44 42 5d 0a  errmsg16 $::DB].
55d0: 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65      } {out of me
55e0: 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64 62 20 63  mory}.  }.  db c
55f0: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d  lose.  sqlite3_m
5600: 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 2d 31 0a  emdebug_fail -1.
5610: 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  }.}..# The follo
5620: 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63 61 70  wing tests - cap
5630: 69 33 2d 31 31 2e 2a 20 2d 20 74 65 73 74 20 74  i3-11.* - test t
5640: 68 61 74 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20  hat a COMMIT or 
5650: 52 4f 4c 4c 42 41 43 4b 0a 23 20 73 74 61 74 65  ROLLBACK.# state
5660: 6d 65 6e 74 20 69 73 73 75 65 64 20 77 68 69 6c  ment issued whil
5670: 65 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  e there are stil
5680: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d  l outstanding VM
5690: 73 20 74 68 61 74 20 61 72 65 20 70 61 72 74 20  s that are part 
56a0: 6f 66 0a 23 20 74 68 65 20 74 72 61 6e 73 61 63  of.# the transac
56b0: 74 69 6f 6e 20 66 61 69 6c 73 2e 0a 73 71 6c 69  tion fails..sqli
56c0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73  te3 db test.db.s
56d0: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63  et DB [sqlite3_c
56e0: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
56f0: 72 20 64 62 5d 0a 73 71 6c 69 74 65 5f 72 65 67  r db].sqlite_reg
5700: 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74  ister_test_funct
5710: 69 6f 6e 20 24 44 42 20 66 75 6e 63 0a 64 6f 5f  ion $DB func.do_
5720: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 20  test capi3-11.1 
5730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5740: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
5750: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
5760: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
5770: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
5780: 20 27 69 6e 74 27 29 3b 0a 20 20 20 20 49 4e 53   'int');.    INS
5790: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
57a0: 45 53 28 32 2c 20 27 6e 6f 74 61 74 79 70 65 27  ES(2, 'notatype'
57b0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
57c0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31 2e 31  est capi3-11.1.1
57d0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
57e0: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
57f0: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
5800: 33 2d 31 31 2e 32 20 7b 0a 20 20 73 65 74 20 53  3-11.2 {.  set S
5810: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
5820: 70 61 72 65 20 24 44 42 20 22 53 45 4c 45 43 54  pare $DB "SELECT
5830: 20 66 75 6e 63 28 62 2c 20 61 29 20 46 52 4f 4d   func(b, a) FROM
5840: 20 74 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1" -1 TAIL].  
5850: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5860: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5870: 7d 0a 0a 23 20 41 73 20 6f 66 20 33 2e 36 2e 35  }..# As of 3.6.5
5880: 20 61 20 43 4f 4d 4d 49 54 20 69 73 20 4f 4b 20   a COMMIT is OK 
5890: 64 75 72 69 6e 67 20 77 68 69 6c 65 20 61 20 71  during while a q
58a0: 75 65 72 79 20 69 73 20 73 74 69 6c 6c 20 72 75  uery is still ru
58b0: 6e 6e 69 6e 67 20 2d 0a 23 20 61 73 20 6c 6f 6e  nning -.# as lon
58c0: 67 20 61 73 20 69 74 20 69 73 20 61 20 72 65 61  g as it is a rea
58d0: 64 2d 6f 6e 6c 79 20 71 75 65 72 79 20 61 6e 64  d-only query and
58e0: 20 6e 6f 74 20 61 6e 20 69 6e 63 72 65 6d 65 6e   not an incremen
58f0: 74 61 6c 20 42 4c 4f 42 20 77 72 69 74 65 2e 0a  tal BLOB write..
5900: 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  #.do_test capi3-
5910: 31 31 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68  11.3.1 {.  catch
5920: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5930: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5940: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5950: 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.2 {.  sqlite3_
5960: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
5970: 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f   $DB.} {SQLITE_O
5980: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
5990: 2d 31 31 2e 33 2e 33 20 7b 0a 20 20 73 71 6c 69  -11.3.3 {.  sqli
59a0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
59b0: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
59c0: 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 34 20  st capi3-11.3.4 
59d0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41  {.  db eval {PRA
59e0: 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 7d  GMA lock_status}
59f0: 0a 7d 20 7b 6d 61 69 6e 20 73 68 61 72 65 64 20  .} {main shared 
5a00: 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f  temp closed}..do
5a10: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 34  _test capi3-11.4
5a20: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
5a30: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5a40: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
5a50: 20 63 61 70 69 33 2d 31 31 2e 35 20 7b 0a 20 20   capi3-11.5 {.  
5a60: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5a70: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5a80: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
5a90: 63 61 70 69 33 2d 31 31 2e 36 20 7b 0a 20 20 63  capi3-11.6 {.  c
5aa0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
5ab0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
5ac0: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20    }.} {0 {1 int 
5ad0: 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f  2 notatype}}.do_
5ae0: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 37 20  test capi3-11.7 
5af0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
5b00: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
5b10: 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   1.do_test capi3
5b20: 2d 31 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  -11.8 {.  execsq
5b30: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
5b40: 41 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20  ABLE t2(a);.    
5b50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
5b60: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e  ALUES(1);.    IN
5b70: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
5b80: 55 45 53 28 32 29 3b 0a 20 20 20 20 42 45 47 49  UES(2);.    BEGI
5b90: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
5ba0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 29 3b  TO t2 VALUES(3);
5bb0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5bc0: 74 20 63 61 70 69 33 2d 31 31 2e 38 2e 31 20 7b  t capi3-11.8.1 {
5bd0: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5be0: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5bf0: 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  0.do_test capi3-
5c00: 31 31 2e 39 20 7b 0a 20 20 73 65 74 20 53 54 4d  11.9 {.  set STM
5c10: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5c20: 72 65 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  re $DB "SELECT a
5c30: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
5c40: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
5c50: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5c60: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5c70: 61 70 69 33 2d 31 31 2e 39 2e 31 20 7b 0a 20 20  api3-11.9.1 {.  
5c80: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
5c90: 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64  commit $DB.} 0.d
5ca0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5cb0: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
5cc0: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
5cd0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5ce0: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 39  _test capi3-11.9
5cf0: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67  .3 {.  sqlite3_g
5d00: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44  et_autocommit $D
5d10: 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61  B.} 1.do_test ca
5d20: 70 69 33 2d 31 31 2e 31 30 20 7b 0a 20 20 73 71  pi3-11.10 {.  sq
5d30: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
5d40: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
5d50: 69 66 63 61 70 61 62 6c 65 20 21 61 75 74 6f 72  ifcapable !autor
5d60: 65 73 65 74 20 7b 0a 20 20 23 20 49 66 20 53 51  eset {.  # If SQ
5d70: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45  LITE_OMIT_AUTORE
5d80: 53 45 54 20 69 73 20 64 65 66 69 6e 65 64 2c 20  SET is defined, 
5d90: 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  then the stateme
5da0: 6e 74 20 6d 75 73 74 20 62 65 0a 20 20 23 20 72  nt must be.  # r
5db0: 65 73 65 74 28 29 20 62 65 66 6f 72 65 20 69 74  eset() before it
5dc0: 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20 74   can be passed t
5dd0: 6f 20 73 74 65 70 28 29 20 61 67 61 69 6e 2e 0a  o step() again..
5de0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d    do_test capi3-
5df0: 31 31 2e 31 31 61 20 7b 20 73 71 6c 69 74 65 33  11.11a { sqlite3
5e00: 5f 73 74 65 70 20 24 53 54 4d 54 20 7d 20 7b 53  _step $STMT } {S
5e10: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 20 20  QLITE_MISUSE}.  
5e20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
5e30: 2e 31 31 62 20 7b 20 73 71 6c 69 74 65 33 5f 72  .11b { sqlite3_r
5e40: 65 73 65 74 20 24 53 54 4d 54 20 7d 20 7b 53 51  eset $STMT } {SQ
5e50: 4c 49 54 45 5f 41 42 4f 52 54 7d 0a 7d 0a 64 6f  LITE_ABORT}.}.do
5e60: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
5e70: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  1 {.  sqlite3_st
5e80: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5e90: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
5ea0: 20 63 61 70 69 33 2d 31 31 2e 31 32 20 7b 0a 20   capi3-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 73 71 6c 69 74 65 33 5f 73 74  TMT.  sqlite3_st
5ed0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5ee0: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5ef0: 63 61 70 69 33 2d 31 31 2e 31 33 20 7b 0a 20 20  capi3-11.13 {.  
5f00: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5f10: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
5f20: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
5f30: 69 33 2d 31 31 2e 31 34 20 7b 0a 20 20 65 78 65  i3-11.14 {.  exe
5f40: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
5f50: 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T a FROM t2;.  }
5f60: 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74  .} {1 2}.do_test
5f70: 20 63 61 70 69 33 2d 31 31 2e 31 34 2e 31 20 7b   capi3-11.14.1 {
5f80: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
5f90: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
5fa0: 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  1.do_test capi3-
5fb0: 31 31 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73  11.15 {.  catchs
5fc0: 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  ql {.    ROLLBAC
5fd0: 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e  K;.  }.} {1 {can
5fe0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
5ff0: 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
6000: 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73   active}}.do_tes
6010: 74 20 63 61 70 69 33 2d 31 31 2e 31 35 2e 31 20  t capi3-11.15.1 
6020: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  {.  sqlite3_get_
6030: 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d  autocommit $DB.}
6040: 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33   1.do_test capi3
6050: 2d 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73  -11.16 {.  execs
6060: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
6070: 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  a FROM t2;.  }.}
6080: 20 7b 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79   {1 2}..# Sanity
6090: 20 63 68 65 63 6b 20 6f 6e 20 74 68 65 20 64 65   check on the de
60a0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74  finition of 'out
60b0: 73 74 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68  standing VM'. Th
60c0: 69 73 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a  is means any VM.
60d0: 23 20 74 68 61 74 20 68 61 73 20 68 61 64 20 73  # that has had s
60e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
60f0: 6c 6c 65 64 20 6d 6f 72 65 20 72 65 63 65 6e 74  lled more recent
6100: 6c 79 20 74 68 61 6e 20 73 71 6c 69 74 65 33 5f  ly than sqlite3_
6110: 66 69 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20  finalize() or.# 
6120: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2e  sqlite3_reset().
6130: 20 53 6f 20 61 20 56 4d 20 74 68 61 74 20 68 61   So a VM that ha
6140: 73 20 6a 75 73 74 20 62 65 65 6e 20 70 72 65 70  s just been prep
6150: 61 72 65 64 20 6f 72 20 72 65 73 65 74 20 64 6f  ared or reset do
6160: 65 73 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61  es not.# count a
6170: 73 20 61 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a  s an active VM..
6180: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
6190: 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .17 {.  execsql 
61a0: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d  {.    BEGIN;.  }
61b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
61c0: 70 69 33 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65  pi3-11.18 {.  se
61d0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
61e0: 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45 4c  prepare $DB "SEL
61f0: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20 2d  ECT a FROM t1" -
6200: 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68 73  1 TAIL].  catchs
6210: 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ql {.    COMMIT;
6220: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
6230: 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 31  _test capi3-11.1
6240: 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  9 {.  sqlite3_st
6250: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
6260: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
6270: 63 61 70 69 33 2d 31 31 2e 32 30 20 7b 0a 20 20  capi3-11.20 {.  
6280: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42  catchsql {.    B
6290: 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  EGIN;.    COMMIT
62a0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
62b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
62c0: 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  20 {.  sqlite3_r
62d0: 65 73 65 74 20 24 53 54 4d 54 0a 20 20 63 61 74  eset $STMT.  cat
62e0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  chsql {.    COMM
62f0: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61  IT;.  }.} {1 {ca
6300: 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
6310: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
6320: 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74  active}}.do_test
6330: 20 63 61 70 69 33 2d 31 31 2e 32 31 20 7b 0a 20   capi3-11.21 {. 
6340: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6350: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6360: 45 5f 4f 4b 7d 0a 0a 23 20 54 68 65 20 66 6f 6c  E_OK}..# The fol
6370: 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20 63  lowing tests - c
6380: 61 70 69 33 2d 31 32 2e 2a 20 2d 20 63 68 65 63  api3-12.* - chec
6390: 6b 20 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f  k that its Ok to
63a0: 20 73 74 61 72 74 20 61 0a 23 20 74 72 61 6e 73   start a.# trans
63b0: 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 6f 74 68  action while oth
63c0: 65 72 20 56 4d 73 20 61 72 65 20 61 63 74 69 76  er VMs are activ
63d0: 65 2c 20 61 6e 64 20 74 68 61 74 20 69 74 73 20  e, and that its 
63e0: 4f 6b 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20  Ok to execute.# 
63f0: 61 74 6f 6d 69 63 20 75 70 64 61 74 65 73 20 69  atomic updates i
6400: 6e 20 74 68 65 20 73 61 6d 65 20 73 69 74 75 61  n the same situa
6410: 74 69 6f 6e 20 0a 23 0a 64 6f 5f 74 65 73 74 20  tion .#.do_test 
6420: 63 61 70 69 33 2d 31 32 2e 31 20 7b 0a 20 20 73  capi3-12.1 {.  s
6430: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6440: 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 53 45  _prepare $DB "SE
6450: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20  LECT a FROM t2" 
6460: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6470: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6480: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
6490: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 32 20  test capi3-12.2 
64a0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
64b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
64c0: 31 20 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c  1 VALUES(3, NULL
64d0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  );.  }.} {0 {}}.
64e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32  do_test capi3-12
64f0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
6500: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
6510: 4f 20 74 32 20 56 41 4c 55 45 53 28 34 29 3b 0a  O t2 VALUES(4);.
6520: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
6530: 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e 34 20  test capi3-12.4 
6540: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
6550: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e     BEGIN;.    IN
6560: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
6570: 55 45 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(4, NULL);.  
6580: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6590: 73 74 20 63 61 70 69 33 2d 31 32 2e 35 20 7b 0a  st capi3-12.5 {.
65a0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
65b0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52  STMT.} {SQLITE_R
65c0: 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OW}.do_test capi
65d0: 33 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c  3-12.5.1 {.  sql
65e0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
65f0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64  } {SQLITE_ROW}.d
6600: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 32 2e  o_test capi3-12.
6610: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
6620: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
6630: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
6640: 20 63 61 70 69 33 2d 31 32 2e 37 20 7b 0a 20 20   capi3-12.7 {.  
6650: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6660: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
6670: 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  _OK}.do_test cap
6680: 69 33 2d 31 32 2e 38 20 7b 0a 20 20 65 78 65 63  i3-12.8 {.  exec
6690: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
66a0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
66b0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
66c0: 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73 74 20   2 3 4}..# Test 
66d0: 63 61 73 65 73 20 63 61 70 69 33 2d 31 33 2e 2a  cases capi3-13.*
66e0: 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   test the sqlite
66f0: 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
6700: 28 29 20 61 6e 64 20 0a 23 20 73 71 6c 69 74 65  () and .# sqlite
6710: 33 5f 73 6c 65 65 70 20 41 50 49 73 2e 0a 23 0a  3_sleep APIs..#.
6720: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  if {[llength [in
6730: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71 6c 69  fo commands sqli
6740: 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
6750: 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74  gs]]>0} {.  do_t
6760: 65 73 74 20 63 61 70 69 33 2d 31 33 2e 31 20 7b  est capi3-13.1 {
6770: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6780: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
6790: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   t1;.    }.    s
67a0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
67b0: 5f 70 72 65 70 61 72 65 20 24 44 42 20 22 49 4e  _prepare $DB "IN
67c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
67d0: 55 45 53 28 3f 2c 20 3f 29 22 20 2d 31 20 54 41  UES(?, ?)" -1 TA
67e0: 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  IL].    sqlite3_
67f0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
6800: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64  SQLITE_DONE}.  d
6810: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 33 2e  o_test capi3-13.
6820: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
6830: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20  reset $STMT.    
6840: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6850: 74 20 24 53 54 4d 54 20 31 20 68 65 6c 6c 6f 20  t $STMT 1 hello 
6860: 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  5.    sqlite3_bi
6870: 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20 32 20  nd_text $STMT 2 
6880: 77 6f 72 6c 64 20 35 0a 20 20 20 20 73 71 6c 69  world 5.    sqli
6890: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
68a0: 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d   } {SQLITE_DONE}
68b0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
68c0: 2d 31 33 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69  -13.3 {.    sqli
68d0: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
68e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61      sqlite3_clea
68f0: 72 5f 62 69 6e 64 69 6e 67 73 20 24 53 54 4d 54  r_bindings $STMT
6900: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
6910: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
6920: 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ITE_DONE}.  do_t
6930: 65 73 74 20 63 61 70 69 33 2d 31 33 2d 34 20 7b  est capi3-13-4 {
6940: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
6950: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
6960: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6970: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
6980: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20  ;.    }.  } {{} 
6990: 7b 7d 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b  {} hello world {
69a0: 7d 20 7b 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65  } {}}.}.if {[lle
69b0: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  ngth [info comma
69c0: 6e 64 73 20 73 71 6c 69 74 65 33 5f 73 6c 65 65  nds sqlite3_slee
69d0: 70 5d 5d 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65  p]]>0} {.  do_te
69e0: 73 74 20 63 61 70 69 33 2d 31 33 2d 35 20 7b 0a  st capi3-13-5 {.
69f0: 20 20 20 20 73 65 74 20 6d 73 20 5b 73 71 6c 69      set ms [sqli
6a00: 74 65 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20  te3_sleep 80].  
6a10: 20 20 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20    expr {$ms==80 
6a20: 7c 7c 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20  || $ms==1000}.  
6a30: 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65  } {1}.}..# Ticke
6a40: 74 20 23 31 32 31 39 3a 20 20 4d 61 6b 65 20 73  t #1219:  Make s
6a50: 75 72 65 20 62 69 6e 64 69 6e 67 20 41 50 49 73  ure binding APIs
6a60: 20 63 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55   can handle a NU
6a70: 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a 23 20 0a 69  LL pointer..# .i
6a80: 66 20 7b 5b 63 6c 61 6e 67 5f 73 61 6e 69 74 69  f {[clang_saniti
6a90: 7a 65 5f 61 64 64 72 65 73 73 5d 3d 3d 30 7d 20  ze_address]==0} 
6aa0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  {.  do_test capi
6ab0: 33 2d 31 34 2e 31 2d 6d 69 73 75 73 65 20 7b 0a  3-14.1-misuse {.
6ac0: 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63      set rc [catc
6ad0: 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  h {sqlite3_bind_
6ae0: 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20 35  text 0 1 hello 5
6af0: 7d 20 6d 73 67 5d 0a 20 20 20 20 20 20 6c 61 70  } msg].      lap
6b00: 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 20 20 7d  pend rc $msg.  }
6b10: 20 7b 31 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   {1 SQLITE_MISUS
6b20: 45 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23  E}.}..# Ticket #
6b30: 31 36 35 30 3a 20 20 48 6f 6e 6f 72 20 74 68 65  1650:  Honor the
6b40: 20 6e 42 79 74 65 73 20 70 61 72 61 6d 65 74 65   nBytes paramete
6b50: 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 70 72 65  r to sqlite3_pre
6b60: 70 61 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  pare..#.do_test 
6b70: 63 61 70 69 33 2d 31 35 2e 31 20 7b 0a 20 20 73  capi3-15.1 {.  s
6b80: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  et sql {SELECT *
6b90: 20 46 52 4f 4d 20 74 32 7d 0a 20 20 73 65 74 20   FROM t2}.  set 
6ba0: 6e 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20 6c  nbytes [string l
6bb0: 65 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61 70  ength $sql].  ap
6bc0: 70 65 6e 64 20 73 71 6c 20 7b 20 57 48 45 52 45  pend sql { WHERE
6bd0: 20 61 3d 3d 31 7d 0a 20 20 73 65 74 20 53 54 4d   a==1}.  set STM
6be0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6bf0: 72 65 20 24 44 42 20 24 73 71 6c 20 24 6e 62 79  re $DB $sql $nby
6c00: 74 65 73 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69  tes TAIL].  sqli
6c10: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
6c20: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6c30: 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31  int $STMT 0.} {1
6c40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d  }.do_test capi3-
6c50: 31 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  15.2 {.  sqlite3
6c60: 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71  _step $STMT.  sq
6c70: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6c80: 20 24 53 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64   $STMT 0.} {2}.d
6c90: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 35 2e  o_test capi3-15.
6ca0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  3 {.  sqlite3_fi
6cb0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
6cc0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
6cd0: 73 74 20 63 61 70 69 33 2d 31 35 2e 34 20 7b 0a  st capi3-15.4 {.
6ce0: 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35    #        12345
6cf0: 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73  6789 1234567.  s
6d00: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31  et sql {SELECT 1
6d10: 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74  234567890}.  set
6d20: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6d30: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6d40: 38 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  8 TAIL].  sqlite
6d50: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6d60: 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63  et v1 [sqlite3_c
6d70: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6d80: 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  0].  sqlite3_fin
6d90: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65  alize $STMT.  se
6da0: 74 20 76 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  t v1.} {1}.do_te
6db0: 73 74 20 63 61 70 69 33 2d 31 35 2e 35 20 7b 0a  st capi3-15.5 {.
6dc0: 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35    #        12345
6dd0: 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73  6789 1234567.  s
6de0: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31  et sql {SELECT 1
6df0: 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74  234567890}.  set
6e00: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
6e10: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
6e20: 39 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  9 TAIL].  sqlite
6e30: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73  3_step $STMT.  s
6e40: 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f 63  et v1 [sqlite3_c
6e50: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
6e60: 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  0].  sqlite3_fin
6e70: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65  alize $STMT.  se
6e80: 74 20 76 31 0a 7d 20 7b 31 32 7d 0a 64 6f 5f 74  t v1.} {12}.do_t
6e90: 65 73 74 20 63 61 70 69 33 2d 31 35 2e 36 20 7b  est capi3-15.6 {
6ea0: 0a 20 20 23 20 20 20 20 20 20 20 20 31 32 33 34  .  #        1234
6eb0: 35 36 37 38 39 20 31 32 33 34 35 36 37 0a 20 20  56789 1234567.  
6ec0: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
6ed0: 31 32 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65  1234567890}.  se
6ee0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
6ef0: 70 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c  prepare $DB $sql
6f00: 20 31 32 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   12 TAIL].  sqli
6f10: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
6f20: 20 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33   set v1 [sqlite3
6f30: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
6f40: 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  T 0].  sqlite3_f
6f50: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
6f60: 73 65 74 20 76 31 0a 7d 20 7b 31 32 33 34 35 7d  set v1.} {12345}
6f70: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
6f80: 35 2e 37 20 7b 0a 20 20 23 20 20 20 20 20 20 20  5.7 {.  #       
6f90: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
6fa0: 36 37 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45  67.  set sql {SE
6fb0: 4c 45 43 54 20 31 32 2e 33 34 35 36 37 38 39 30  LECT 12.34567890
6fc0: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
6fd0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
6fe0: 42 20 24 73 71 6c 20 31 32 20 54 41 49 4c 5d 0a  B $sql 12 TAIL].
6ff0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7000: 53 54 4d 54 0a 20 20 73 65 74 20 76 31 20 5b 73  STMT.  set v1 [s
7010: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
7020: 75 62 6c 65 20 24 53 54 4d 54 20 30 5d 0a 20 20  uble $STMT 0].  
7030: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7040: 20 24 53 54 4d 54 0a 20 20 73 65 74 20 76 31 0a   $STMT.  set v1.
7050: 7d 20 7b 31 32 2e 33 34 7d 0a 64 6f 5f 74 65 73  } {12.34}.do_tes
7060: 74 20 63 61 70 69 33 2d 31 35 2e 38 20 7b 0a 20  t capi3-15.8 {. 
7070: 20 23 20 20 20 20 20 20 20 20 31 32 33 34 35 36   #        123456
7080: 37 38 39 20 31 32 33 34 35 36 37 0a 20 20 73 65  789 1234567.  se
7090: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  t sql {SELECT 12
70a0: 2e 33 34 35 36 37 38 39 30 7d 0a 20 20 73 65 74  .34567890}.  set
70b0: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
70c0: 72 65 70 61 72 65 20 24 44 42 20 24 73 71 6c 20  repare $DB $sql 
70d0: 31 34 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  14 TAIL].  sqlit
70e0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
70f0: 73 65 74 20 76 31 20 5b 73 71 6c 69 74 65 33 5f  set v1 [sqlite3_
7100: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53  column_double $S
7110: 54 4d 54 20 30 5d 0a 20 20 73 71 6c 69 74 65 33  TMT 0].  sqlite3
7120: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7130: 20 20 73 65 74 20 76 31 0a 7d 20 7b 31 32 2e 33    set v1.} {12.3
7140: 34 35 36 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  456}..# Make sur
7150: 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79 73  e code is always
7160: 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e 20   generated even 
7170: 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53 20  if an IF EXISTS 
7180: 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58 49  or .# IF NOT EXI
7190: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
71a0: 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20 74  esent that the t
71b0: 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f 72  able does not or
71c0: 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e 20  .# does exists. 
71d0: 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69 6c   That way we wil
71e0: 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61 20  l always have a 
71f0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
7200: 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20 77  nt.# to expire w
7210: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
7220: 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73  hanges..#.do_tes
7230: 74 20 63 61 70 69 33 2d 31 36 2e 31 20 7b 0a 20  t capi3-16.1 {. 
7240: 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50 20 54   set sql {DROP T
7250: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74  ABLE IF EXISTS t
7260: 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  3}.  set STMT [s
7270: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
7280: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
7290: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
72a0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
72b0: 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b   {$STMT!=""}.} {
72c0: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  1}.do_test capi3
72d0: 2d 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 73 71  -16.2 {.  set sq
72e0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
72f0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31  IF NOT EXISTS t1
7300: 28 78 2c 79 29 7d 0a 20 20 73 65 74 20 53 54 4d  (x,y)}.  set STM
7310: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7320: 72 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54  re $DB $sql -1 T
7330: 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66  AIL].  sqlite3_f
7340: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20  inalize $STMT.  
7350: 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22 7d  expr {$STMT!=""}
7360: 0a 7d 20 7b 31 7d 0a 0a 23 20 42 75 74 20 73 74  .} {1}..# But st
7370: 69 6c 6c 20 77 65 20 64 6f 20 6e 6f 74 20 67 65  ill we do not ge
7380: 6e 65 72 61 74 65 20 63 6f 64 65 20 69 66 20 74  nerate code if t
7390: 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 0a 23  here is no SQL.#
73a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
73b0: 36 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  6.3 {.  set STMT
73c0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
73d0: 65 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c  e $DB {} -1 TAIL
73e0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
73f0: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
7400: 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20  r {$STMT==""}.} 
7410: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
7420: 33 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53  3-16.4 {.  set S
7430: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
7440: 70 61 72 65 20 24 44 42 20 7b 3b 7d 20 2d 31 20  pare $DB {;} -1 
7450: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
7460: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7470: 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22 22   expr {$STMT==""
7480: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65  }.} {1}..# Ticke
7490: 74 20 23 32 34 32 36 3a 20 20 4d 69 73 75 73 65  t #2426:  Misuse
74a0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   of sqlite3_colu
74b0: 6d 6e 5f 2a 20 62 79 20 63 61 6c 6c 69 6e 67 20  mn_* by calling 
74c0: 69 74 20 61 66 74 65 72 0a 23 20 61 20 73 71 6c  it after.# a sql
74d0: 69 74 65 33 5f 72 65 73 65 74 20 73 68 6f 75 6c  ite3_reset shoul
74e0: 64 20 62 65 20 68 61 72 6d 6c 65 73 73 2e 0a 23  d be harmless..#
74f0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
7500: 37 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  7.1 {.  set STMT
7510: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7520: 65 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a 20  e $DB {SELECT * 
7530: 46 52 4f 4d 20 74 32 7d 20 2d 31 20 54 41 49 4c  FROM t2} -1 TAIL
7540: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
7550: 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33   $STMT.  sqlite3
7560: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
7570: 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  T 0.} {1}.do_tes
7580: 74 20 63 61 70 69 33 2d 31 37 2e 32 20 7b 0a 20  t capi3-17.2 {. 
7590: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
75a0: 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 63  STMT.  sqlite3_c
75b0: 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20  olumn_int $STMT 
75c0: 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  0.} {0}.do_test 
75d0: 63 61 70 69 33 2d 31 37 2e 33 20 7b 0a 20 20 73  capi3-17.3 {.  s
75e0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
75f0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
7600: 4f 4b 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68  OK}..# Verify th
7610: 61 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  at sqlite3_step(
7620: 29 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  ) fails with an 
7630: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
7640: 72 6f 72 0a 23 20 77 68 65 6e 20 74 68 65 20 73  ror.# when the s
7650: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
7660: 61 72 65 64 20 77 69 74 68 20 73 71 6c 69 74 65  ared with sqlite
7670: 33 5f 70 72 65 70 61 72 65 28 29 20 28 6e 6f 74  3_prepare() (not
7680: 0a 23 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  .# sqlite3_prepa
7690: 72 65 5f 76 32 28 29 29 20 61 6e 64 20 74 68 65  re_v2()) and the
76a0: 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
76b0: 67 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ged..#.do_test c
76c0: 61 70 69 33 2d 31 38 2e 31 20 7b 0a 20 20 73 65  api3-18.1 {.  se
76d0: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
76e0: 70 72 65 70 61 72 65 20 64 62 20 7b 53 45 4c 45  prepare db {SELE
76f0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 2d 31  CT * FROM t2} -1
7700: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7710: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64   db2 test.db.  d
7720: 62 32 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  b2 eval {CREATE 
7730: 54 41 42 4c 45 20 74 33 28 78 29 7d 0a 20 20 64  TABLE t3(x)}.  d
7740: 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  b2 close.  sqlit
7750: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
7760: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
7770: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e  o_test capi3-18.
7780: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  2 {.  sqlite3_re
7790: 73 65 74 20 24 53 54 4d 54 0a 20 20 73 71 6c 69  set $STMT.  sqli
77a0: 74 65 33 5f 65 72 72 63 6f 64 65 20 64 62 0a 7d  te3_errcode db.}
77b0: 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d   {SQLITE_SCHEMA}
77c0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31  .do_test capi3-1
77d0: 38 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.3 {.  sqlite3_
77e0: 65 72 72 6d 73 67 20 64 62 0a 7d 20 7b 64 61 74  errmsg db.} {dat
77f0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
7800: 20 63 68 61 6e 67 65 64 7d 0a 23 20 54 68 65 20   changed}.# The 
7810: 65 72 72 6f 72 20 70 65 72 73 69 73 74 20 6f 6e  error persist on
7820: 20 72 65 74 72 79 20 77 68 65 6e 20 73 71 6c 69   retry when sqli
7830: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 68 61  te3_prepare() ha
7840: 73 20 62 65 65 6e 20 75 73 65 64 2e 0a 64 6f 5f  s been used..do_
7850: 74 65 73 74 20 63 61 70 69 33 2d 31 38 2e 34 20  test capi3-18.4 
7860: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
7870: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
7880: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
7890: 63 61 70 69 33 2d 31 38 2e 35 20 7b 0a 20 20 73  capi3-18.5 {.  s
78a0: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54  qlite3_reset $ST
78b0: 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72  MT.  sqlite3_err
78c0: 63 6f 64 65 20 64 62 0a 7d 20 7b 53 51 4c 49 54  code db.} {SQLIT
78d0: 45 5f 53 43 48 45 4d 41 7d 0a 64 6f 5f 74 65 73  E_SCHEMA}.do_tes
78e0: 74 20 63 61 70 69 33 2d 31 38 2e 36 20 7b 0a 20  t capi3-18.6 {. 
78f0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
7900: 64 62 0a 7d 20 7b 64 61 74 61 62 61 73 65 20 73  db.} {database s
7910: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
7920: 64 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  d}.sqlite3_final
7930: 69 7a 65 20 24 53 54 4d 54 0a 0a 23 20 54 69 63  ize $STMT..# Tic
7940: 6b 65 74 20 23 33 31 33 34 2e 20 20 50 72 65 70  ket #3134.  Prep
7950: 61 72 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  are a statement 
7960: 77 69 74 68 20 61 6e 20 6e 42 79 74 65 73 20 70  with an nBytes p
7970: 61 72 61 6d 65 74 65 72 20 6f 66 20 30 2e 0a 23  arameter of 0..#
7980: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
7990: 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20  works correctly 
79a0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 72 65 66  and does not ref
79b0: 65 72 65 6e 63 65 20 6d 65 6d 6f 72 79 20 6f 75  erence memory ou
79c0: 74 20 6f 66 0a 23 20 72 61 6e 67 65 2e 0a 23 0a  t of.# range..#.
79d0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 39  do_test capi3-19
79e0: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 70  .1 {.  sqlite3_p
79f0: 72 65 70 61 72 65 5f 74 6b 74 33 31 33 34 20 64  repare_tkt3134 d
7a00: 62 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74  b.} {}..# Test t
7a10: 68 61 74 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  hat calling sqli
7a20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
7a30: 29 20 6f 6e 20 61 20 54 45 58 54 20 76 61 6c 75  ) on a TEXT valu
7a40: 65 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67  e does not chang
7a50: 65 0a 23 20 74 68 65 20 72 65 74 75 72 6e 20 74  e.# the return t
7a60: 79 70 65 20 6f 66 20 73 75 62 73 65 71 75 65 6e  ype of subsequen
7a70: 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
7a80: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 29  e3_column_type()
7a90: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
7aa0: 65 73 74 20 32 30 2e 31 20 7b 0a 20 20 43 52 45  est 20.1 {.  CRE
7ab0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 78 29 3b  ATE TABLE t4(x);
7ac0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
7ad0: 34 20 56 41 4c 55 45 53 28 27 61 62 63 64 65 66  4 VALUES('abcdef
7ae0: 67 68 69 6a 27 29 3b 0a 7d 0a 64 6f 5f 74 65 73  ghij');.}.do_tes
7af0: 74 20 32 30 2e 32 20 7b 0a 20 20 73 65 74 20 73  t 20.2 {.  set s
7b00: 74 6d 74 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  tmt [sqlite3_pre
7b10: 70 61 72 65 20 64 62 20 22 53 45 4c 45 43 54 20  pare db "SELECT 
7b20: 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 64 75  * FROM t4" -1 du
7b30: 6d 6d 79 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  mmy].  sqlite3_s
7b40: 74 65 70 20 24 73 74 6d 74 0a 7d 20 7b 53 51 4c  tep $stmt.} {SQL
7b50: 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74  ITE_ROW}.do_test
7b60: 20 32 30 2e 33 20 7b 20 73 71 6c 69 74 65 33 5f   20.3 { sqlite3_
7b70: 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 73 74 6d  column_type $stm
7b80: 74 20 30 20 7d 20 7b 54 45 58 54 7d 0a 64 6f 5f  t 0 } {TEXT}.do_
7b90: 74 65 73 74 20 32 30 2e 34 20 7b 20 73 71 6c 69  test 20.4 { sqli
7ba0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20  te3_column_blob 
7bb0: 24 73 74 6d 74 20 30 20 7d 20 7b 61 62 63 64 65  $stmt 0 } {abcde
7bc0: 66 67 68 69 6a 7d 0a 64 6f 5f 74 65 73 74 20 32  fghij}.do_test 2
7bd0: 30 2e 35 20 7b 20 73 71 6c 69 74 65 33 5f 63 6f  0.5 { sqlite3_co
7be0: 6c 75 6d 6e 5f 74 79 70 65 20 24 73 74 6d 74 20  lumn_type $stmt 
7bf0: 30 20 7d 20 7b 54 45 58 54 7d 0a 64 6f 5f 74 65  0 } {TEXT}.do_te
7c00: 73 74 20 32 30 2e 36 20 7b 20 73 71 6c 69 74 65  st 20.6 { sqlite
7c10: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74  3_finalize $stmt
7c20: 20 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a 23   } SQLITE_OK...#
7c30: 20 54 65 73 74 73 20 6f 66 20 74 68 65 20 69 6e   Tests of the in
7c40: 74 65 72 66 61 63 65 20 77 68 65 6e 20 6e 6f 20  terface when no 
7c50: 56 46 53 20 69 73 20 72 65 67 69 73 74 65 72 65  VFS is registere
7c60: 64 2e 0a 23 0a 69 66 20 7b 21 5b 69 6e 66 6f 20  d..#.if {![info 
7c70: 65 78 69 73 74 73 20 74 65 73 74 65 72 5f 64 6f  exists tester_do
7c80: 5f 62 69 6e 61 72 79 6c 6f 67 5d 7d 20 7b 0a 20  _binarylog]} {. 
7c90: 20 64 62 20 63 6c 6f 73 65 0a 20 20 76 66 73 5f   db close.  vfs_
7ca0: 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 20  unregister_all. 
7cb0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 32   do_test capi3-2
7cc0: 30 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0.1 {.    sqlite
7cd0: 33 5f 73 6c 65 65 70 20 31 30 30 0a 20 20 7d 20  3_sleep 100.  } 
7ce0: 7b 30 7d 0a 20 20 76 66 73 5f 72 65 72 65 67 69  {0}.  vfs_reregi
7cf0: 73 74 65 72 5f 61 6c 6c 0a 7d 0a 0a 66 69 6e 69  ster_all.}..fini
7d00: 73 68 5f 74 65 73 74 0a                          sh_test.