/ Hex Artifact Content
Login

Artifact 54e2dc0c8fd7c34ad1590d1be6864397da2438c95a9f5aee2f8fbc60c112e44b:


0000: 23 20 32 30 30 36 20 4e 6f 76 65 6d 62 65 72 20  # 2006 November 
0010: 30 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  08.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 0a 23 0a 23 20 54 68 69 73 20  ary.  .#.# This 
01b0: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
01c0: 20 63 61 70 69 33 2e 74 65 73 74 20 66 69 6c 65   capi3.test file
01d0: 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
01e0: 64 61 70 74 65 64 20 74 6f 0a 23 20 74 65 73 74  dapted to.# test
01f0: 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 33   the new sqlite3
0200: 5f 70 72 65 70 61 72 65 5f 76 32 20 69 6e 74 65  _prepare_v2 inte
0210: 72 66 61 63 65 2e 0a 23 0a 23 20 24 49 64 3a 20  rface..#.# $Id: 
0220: 63 61 70 69 33 63 2e 74 65 73 74 2c 76 20 31 2e  capi3c.test,v 1.
0230: 32 33 20 32 30 30 39 2f 30 37 2f 32 32 20 30 37  23 2009/07/22 07
0240: 3a 32 37 3a 35 37 20 64 61 6e 69 65 6c 6b 31 39  :27:57 danielk19
0250: 37 37 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20  77 Exp $.#..set 
0260: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0270: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0280: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0290: 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73  ster.tcl.set tes
02a0: 74 70 72 65 66 69 78 20 63 61 70 69 33 63 0a 0a  tprefix capi3c..
02b0: 23 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63  # Do not use a c
02c0: 6f 64 65 63 20 66 6f 72 20 74 65 73 74 73 20 69  odec for tests i
02d0: 6e 20 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20  n this file, as 
02e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
02f0: 65 20 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74  e is.# manipulat
0300: 65 64 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e  ed directly usin
0310: 67 20 74 63 6c 20 73 63 72 69 70 74 73 20 28 75  g tcl scripts (u
0320: 73 69 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f  sing the [hexio_
0330: 77 72 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e  write] command).
0340: 0a 23 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f  .#.do_not_use_co
0350: 64 65 63 0a 0a 23 20 52 65 74 75 72 6e 20 74 68  dec..# Return th
0360: 65 20 55 54 46 2d 31 36 20 72 65 70 72 65 73 65  e UTF-16 represe
0370: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
0380: 75 70 70 6c 69 65 64 20 55 54 46 2d 38 20 73 74  upplied UTF-8 st
0390: 72 69 6e 67 20 24 73 74 72 2e 0a 23 20 49 66 20  ring $str..# If 
03a0: 24 6e 74 20 69 73 20 74 72 75 65 2c 20 61 70 70  $nt is true, app
03b0: 65 6e 64 20 74 77 6f 20 30 78 30 30 20 62 79 74  end two 0x00 byt
03c0: 65 73 20 61 73 20 61 20 6e 75 6c 20 74 65 72 6d  es as a nul term
03d0: 69 6e 61 74 6f 72 2e 0a 70 72 6f 63 20 75 74 66  inator..proc utf
03e0: 31 36 20 7b 73 74 72 20 7b 6e 74 20 31 7d 7d 20  16 {str {nt 1}} 
03f0: 7b 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64  {.  set r [encod
0400: 69 6e 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e  ing convertto un
0410: 69 63 6f 64 65 20 24 73 74 72 5d 0a 20 20 69 66  icode $str].  if
0420: 20 7b 24 6e 74 7d 20 7b 0a 20 20 20 20 61 70 70   {$nt} {.    app
0430: 65 6e 64 20 72 20 22 5c 78 30 30 5c 78 30 30 22  end r "\x00\x00"
0440: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 72  .  }.  return $r
0450: 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 74 68 65  .}..# Return the
0460: 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
0470: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 70  ation of the sup
0480: 70 6c 69 65 64 20 55 54 46 2d 31 36 20 73 74 72  plied UTF-16 str
0490: 69 6e 67 20 24 73 74 72 2e 20 0a 70 72 6f 63 20  ing $str. .proc 
04a0: 75 74 66 38 20 7b 73 74 72 7d 20 7b 0a 20 20 23  utf8 {str} {.  #
04b0: 20 49 66 20 24 73 74 72 20 65 6e 64 73 20 69 6e   If $str ends in
04c0: 20 74 77 6f 20 30 78 30 30 20 30 78 30 30 20 62   two 0x00 0x00 b
04d0: 79 74 65 73 2c 20 6b 6e 6f 63 6b 20 74 68 65 73  ytes, knock thes
04e0: 65 20 6f 66 66 20 62 65 66 6f 72 65 0a 20 20 23  e off before.  #
04f0: 20 63 6f 6e 76 65 72 74 69 6e 67 20 74 6f 20 55   converting to U
0500: 54 46 2d 38 20 75 73 69 6e 67 20 54 43 4c 2e 0a  TF-8 using TCL..
0510: 20 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 73    binary scan $s
0520: 74 72 20 5c 63 2a 20 76 61 6c 73 0a 20 20 69 66  tr \c* vals.  if
0530: 20 7b 5b 6c 69 6e 64 65 78 20 24 76 61 6c 73 20   {[lindex $vals 
0540: 65 6e 64 5d 3d 3d 30 20 26 26 20 5b 6c 69 6e 64  end]==0 && [lind
0550: 65 78 20 24 76 61 6c 73 20 65 6e 64 2d 31 5d 3d  ex $vals end-1]=
0560: 3d 30 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 74  =0} {.    set st
0570: 72 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74  r [binary format
0580: 20 5c 63 2a 20 5b 6c 72 61 6e 67 65 20 24 76 61   \c* [lrange $va
0590: 6c 73 20 30 20 65 6e 64 2d 32 5d 5d 0a 20 20 7d  ls 0 end-2]].  }
05a0: 0a 0a 20 20 73 65 74 20 72 20 5b 65 6e 63 6f 64  ..  set r [encod
05b0: 69 6e 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20  ing convertfrom 
05c0: 75 6e 69 63 6f 64 65 20 24 73 74 72 5d 0a 20 20  unicode $str].  
05d0: 72 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54  return $r.}..# T
05e0: 68 65 73 65 20 74 65 73 74 73 20 63 6f 6d 70 6c  hese tests compl
05f0: 65 6d 65 6e 74 20 74 68 6f 73 65 20 69 6e 20 63  ement those in c
0600: 61 70 69 32 2e 74 65 73 74 2e 20 54 68 65 79 20  api2.test. They 
0610: 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 0a 23 20  are organized.# 
0620: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20  as follows:.#.# 
0630: 63 61 70 69 33 63 2d 31 2e 2a 3a 20 54 65 73 74  capi3c-1.*: Test
0640: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
0650: 5f 76 32 20 0a 23 20 63 61 70 69 33 63 2d 32 2e  _v2 .# capi3c-2.
0660: 2a 3a 20 54 65 73 74 20 73 71 6c 69 74 65 33 5f  *: Test sqlite3_
0670: 70 72 65 70 61 72 65 31 36 5f 76 32 20 0a 23 20  prepare16_v2 .# 
0680: 63 61 70 69 33 63 2d 33 2e 2a 3a 20 54 65 73 74  capi3c-3.*: Test
0690: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 0a 23 20   sqlite3_open.# 
06a0: 63 61 70 69 33 63 2d 34 2e 2a 3a 20 54 65 73 74  capi3c-4.*: Test
06b0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 0a   sqlite3_open16.
06c0: 23 20 63 61 70 69 33 63 2d 35 2e 2a 3a 20 54 65  # capi3c-5.*: Te
06d0: 73 74 20 74 68 65 20 76 61 72 69 6f 75 73 20 73  st the various s
06e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 20  qlite3_result_* 
06f0: 41 50 49 73 0a 23 20 63 61 70 69 33 63 2d 36 2e  APIs.# capi3c-6.
0700: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 73 71 6c  *: Test that sql
0710: 69 74 65 33 5f 63 6c 6f 73 65 20 66 61 69 6c 73  ite3_close fails
0720: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 75   if there are ou
0730: 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 2e 0a 23  tstanding VMs..#
0740: 0a 0a 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65  ..set DB [sqlite
0750: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
0760: 6e 74 65 72 20 64 62 5d 0a 0a 64 6f 5f 74 65 73  nter db]..do_tes
0770: 74 20 63 61 70 69 33 63 2d 31 2e 30 20 7b 0a 20  t capi3c-1.0 {. 
0780: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
0790: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a  ocommit $DB.} 1.
07a0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
07b0: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
07c0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
07d0: 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20  _v2 $DB {SELECT 
07e0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
07f0: 5f 6d 61 73 74 65 72 7d 20 2d 31 20 54 41 49 4c  _master} -1 TAIL
0800: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
0810: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74  lize $STMT.  set
0820: 20 54 41 49 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65   TAIL.} {}.do_te
0830: 73 74 20 63 61 70 69 33 63 2d 31 2e 32 2e 31 20  st capi3c-1.2.1 
0840: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63  {.  sqlite3_errc
0850: 6f 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54  ode $DB.} {SQLIT
0860: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
0870: 70 69 33 63 2d 31 2e 32 2e 32 20 7b 0a 20 20 73  pi3c-1.2.2 {.  s
0880: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
0890: 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20 7b 53  errcode $DB.} {S
08a0: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
08b0: 74 20 63 61 70 69 33 63 2d 31 2e 33 20 7b 0a 20  t capi3c-1.3 {. 
08c0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
08d0: 24 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65 72  $DB.} {not an er
08e0: 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ror}.do_test cap
08f0: 69 33 63 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20  i3c-1.4 {.  set 
0900: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
0910: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0920: 74 65 72 3b 53 45 4c 45 43 54 20 31 30 7d 0a 20  ter;SELECT 10}. 
0930: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
0940: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
0950: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
0960: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
0970: 7a 65 20 24 53 54 4d 54 0a 20 20 73 65 74 20 54  ze $STMT.  set T
0980: 41 49 4c 0a 7d 20 7b 53 45 4c 45 43 54 20 31 30  AIL.} {SELECT 10
0990: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
09a0: 2d 31 2e 35 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.5 {.  set sql
09b0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 78 20 46   {SELECT namex F
09c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
09d0: 72 7d 0a 20 20 63 61 74 63 68 20 7b 0a 20 20 20  r}.  catch {.   
09e0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
09f0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44  e3_prepare_v2 $D
0a00: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
0a10: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
0a20: 74 20 63 61 70 69 33 63 2d 31 2e 36 2e 31 20 7b  t capi3c-1.6.1 {
0a30: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  .  sqlite3_errco
0a40: 64 65 20 24 44 42 0a 7d 20 7b 53 51 4c 49 54 45  de $DB.} {SQLITE
0a50: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
0a60: 63 61 70 69 33 63 2d 31 2e 36 2e 32 20 7b 0a 20  capi3c-1.6.2 {. 
0a70: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
0a80: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d 20  d_errcode $DB.} 
0a90: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
0aa0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 2e  o_test capi3c-1.
0ab0: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  7 {.  sqlite3_er
0ac0: 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73  rmsg $DB.} {no s
0ad0: 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d 65  uch column: name
0ae0: 78 7d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b  x}...ifcapable {
0af0: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
0b00: 73 74 20 63 61 70 69 33 63 2d 32 2e 31 20 7b 0a  st capi3c-2.1 {.
0b10: 20 20 20 20 73 65 74 20 73 71 6c 31 36 20 5b 75      set sql16 [u
0b20: 74 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d  tf16 {SELECT nam
0b30: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
0b40: 73 74 65 72 7d 5d 0a 20 20 20 20 73 65 74 20 53  ster}].    set S
0b50: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
0b60: 70 61 72 65 31 36 5f 76 32 20 20 24 44 42 20 24  pare16_v2  $DB $
0b70: 73 71 6c 31 36 20 2d 31 20 3a 3a 54 41 49 4c 5d  sql16 -1 ::TAIL]
0b80: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
0b90: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
0ba0: 75 74 66 38 20 24 3a 3a 54 41 49 4c 0a 20 20 7d  utf8 $::TAIL.  }
0bb0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61   {}.  do_test ca
0bc0: 70 69 33 63 2d 32 2e 32 20 7b 0a 20 20 20 20 73  pi3c-2.2 {.    s
0bd0: 65 74 20 73 71 6c 20 5b 75 74 66 31 36 20 7b 53  et sql [utf16 {S
0be0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0bf0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 53 45  sqlite_master;SE
0c00: 4c 45 43 54 20 31 30 7d 5d 0a 20 20 20 20 73 65  LECT 10}].    se
0c10: 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  t STMT [sqlite3_
0c20: 70 72 65 70 61 72 65 31 36 5f 76 32 20 20 24 44  prepare16_v2  $D
0c30: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
0c40: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
0c50: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 75  lize $STMT.    u
0c60: 74 66 38 20 24 54 41 49 4c 0a 20 20 7d 20 7b 53  tf8 $TAIL.  } {S
0c70: 45 4c 45 43 54 20 31 30 7d 0a 20 20 64 6f 5f 74  ELECT 10}.  do_t
0c80: 65 73 74 20 63 61 70 69 33 63 2d 32 2e 33 20 7b  est capi3c-2.3 {
0c90: 0a 20 20 20 20 73 65 74 20 73 71 6c 20 5b 75 74  .    set sql [ut
0ca0: 66 31 36 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  f16 {SELECT name
0cb0: 78 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  x FROM sqlite_ma
0cc0: 73 74 65 72 7d 5d 0a 20 20 20 20 63 61 74 63 68  ster}].    catch
0cd0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 53 54 4d   {.      set STM
0ce0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
0cf0: 72 65 31 36 5f 76 32 20 20 24 44 42 20 24 73 71  re16_v2  $DB $sq
0d00: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 7d  l -1 TAIL].    }
0d10: 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65  .  } {1}.  do_te
0d20: 73 74 20 63 61 70 69 33 63 2d 32 2e 34 2e 31 20  st capi3c-2.4.1 
0d30: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
0d40: 72 63 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53  rcode $DB.  } {S
0d50: 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64  QLITE_ERROR}.  d
0d60: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 2e  o_test capi3c-2.
0d70: 34 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  4.2 {.    sqlite
0d80: 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
0d90: 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49  de $DB.  } {SQLI
0da0: 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74  TE_ERROR}.  do_t
0db0: 65 73 74 20 63 61 70 69 33 63 2d 32 2e 35 20 7b  est capi3c-2.5 {
0dc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72  .    sqlite3_err
0dd0: 6d 73 67 20 24 44 42 0a 20 20 7d 20 7b 6e 6f 20  msg $DB.  } {no 
0de0: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 61 6d  such column: nam
0df0: 65 78 7d 0a 0a 20 20 69 66 63 61 70 61 62 6c 65  ex}..  ifcapable
0e00: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
0e10: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61  {.    do_test ca
0e20: 70 69 33 63 2d 32 2e 36 20 7b 0a 20 20 20 20 20  pi3c-2.6 {.     
0e30: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
0e40: 20 54 41 42 4c 45 20 74 61 62 6c 65 6e 61 6d 65   TABLE tablename
0e50: 28 78 29 7d 0a 20 20 20 20 20 20 73 65 74 20 73  (x)}.      set s
0e60: 71 6c 31 36 20 5b 75 74 66 31 36 20 7b 50 52 41  ql16 [utf16 {PRA
0e70: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 22  GMA table_info("
0e80: 54 61 62 6c 65 4e 61 6d 65 22 29 7d 5d 0a 20 20  TableName")}].  
0e90: 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71      set STMT [sq
0ea0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f  lite3_prepare16_
0eb0: 76 32 20 20 24 44 42 20 24 73 71 6c 31 36 20 2d  v2  $DB $sql16 -
0ec0: 31 20 54 41 49 4c 5d 0a 20 20 20 20 20 20 73 71  1 TAIL].      sq
0ed0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
0ee0: 0a 20 20 20 20 7d 20 53 51 4c 49 54 45 5f 52 4f  .    } SQLITE_RO
0ef0: 57 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61  W.    do_test ca
0f00: 70 69 33 63 2d 32 2e 37 20 7b 0a 20 20 20 20 20  pi3c-2.7 {.     
0f10: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
0f20: 54 4d 54 0a 20 20 20 20 7d 20 53 51 4c 49 54 45  TMT.    } SQLITE
0f30: 5f 44 4f 4e 45 0a 20 20 20 20 64 6f 5f 74 65 73  _DONE.    do_tes
0f40: 74 20 63 61 70 69 33 63 2d 32 2e 38 20 7b 0a 20  t capi3c-2.8 {. 
0f50: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
0f60: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 20 20  alize $STMT.    
0f70: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  } SQLITE_OK.  }.
0f80: 0a 7d 20 3b 23 20 65 6e 64 69 66 20 75 74 66 31  .} ;# endif utf1
0f90: 36 0a 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69  6..# rename sqli
0fa0: 74 65 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65 33  te3_open sqlite3
0fb0: 5f 6f 70 65 6e 5f 6f 6c 64 0a 23 20 70 72 6f 63  _open_old.# proc
0fc0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 7b 66   sqlite3_open {f
0fd0: 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 7d 20 7b 73  name options} {s
0fe0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 6e 65 77 20  qlite3_open_new 
0ff0: 24 66 6e 61 6d 65 20 24 6f 70 74 69 6f 6e 73 7d  $fname $options}
1000: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
1010: 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32  -3.1 {.  set db2
1020: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 74   [sqlite3_open t
1030: 65 73 74 2e 64 62 20 7b 7d 5d 0a 20 20 73 71 6c  est.db {}].  sql
1040: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62  ite3_errcode $db
1050: 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  2.} {SQLITE_OK}.
1060: 23 20 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64  # FIX ME: Should
1070: 20 74 65 73 74 20 74 68 65 20 64 62 20 68 61 6e   test the db han
1080: 64 6c 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65  dle works..do_te
1090: 73 74 20 63 61 70 69 33 63 2d 33 2e 32 20 7b 0a  st capi3c-3.2 {.
10a0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
10b0: 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f  $db2.} {SQLITE_O
10c0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  K}.do_test capi3
10d0: 63 2d 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 20  c-3.3 {.  catch 
10e0: 7b 0a 20 20 20 20 73 65 74 20 64 62 32 20 5b 73  {.    set db2 [s
10f0: 71 6c 69 74 65 33 5f 6f 70 65 6e 20 2f 62 6f 67  qlite3_open /bog
1100: 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64 62 20  us/path/test.db 
1110: 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  {}].  }.  sqlite
1120: 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a 7d  3_errcode $db2.}
1130: 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45   {SQLITE_CANTOPE
1140: 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  N}.do_test capi3
1150: 63 2d 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  c-3.4 {.  sqlite
1160: 33 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 7d 20  3_errmsg $db2.} 
1170: 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  {unable to open 
1180: 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a 64  database file}.d
1190: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e  o_test capi3c-3.
11a0: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c  5 {.  sqlite3_cl
11b0: 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49  ose $db2.} {SQLI
11c0: 54 45 5f 4f 4b 7d 0a 69 66 20 7b 5b 63 6c 61 6e  TE_OK}.if {[clan
11d0: 67 5f 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65  g_sanitize_addre
11e0: 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74  ss]==0} {.  do_t
11f0: 65 73 74 20 63 61 70 69 33 63 2d 33 2e 36 2e 31  est capi3c-3.6.1
1200: 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 73 71  -misuse {.    sq
1210: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64 62 32  lite3_close $db2
1220: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53  .  } {SQLITE_MIS
1230: 55 53 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  USE}.  do_test c
1240: 61 70 69 33 63 2d 33 2e 36 2e 32 2d 6d 69 73 75  api3c-3.6.2-misu
1250: 73 65 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  se {.    sqlite3
1260: 5f 65 72 72 6d 73 67 20 24 64 62 32 0a 20 20 7d  _errmsg $db2.  }
1270: 20 7b 62 61 64 20 70 61 72 61 6d 65 74 65 72 20   {bad parameter 
1280: 6f 72 20 6f 74 68 65 72 20 41 50 49 20 6d 69 73  or other API mis
1290: 75 73 65 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  use}.  ifcapable
12a0: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64   {utf16} {.    d
12b0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 33 2e  o_test capi3c-3.
12c0: 36 2e 33 2d 6d 69 73 75 73 65 20 7b 0a 20 20 20  6.3-misuse {.   
12d0: 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33     utf8 [sqlite3
12e0: 5f 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a  _errmsg16 $db2].
12f0: 20 20 20 20 7d 20 7b 62 61 64 20 70 61 72 61 6d      } {bad param
1300: 65 74 65 72 20 6f 72 20 6f 74 68 65 72 20 41 50  eter or other AP
1310: 49 20 6d 69 73 75 73 65 7d 0a 20 20 7d 0a 7d 0a  I misuse}.  }.}.
1320: 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65  .# rename sqlite
1330: 33 5f 6f 70 65 6e 20 22 22 0a 23 20 72 65 6e 61  3_open "".# rena
1340: 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  me sqlite3_open_
1350: 6f 6c 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  old sqlite3_open
1360: 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  ..ifcapable {utf
1370: 31 36 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 63 61  16} {.do_test ca
1380: 70 69 33 63 2d 34 2e 31 20 7b 0a 20 20 73 65 74  pi3c-4.1 {.  set
1390: 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f 70   db2 [sqlite3_op
13a0: 65 6e 31 36 20 5b 75 74 66 31 36 20 74 65 73 74  en16 [utf16 test
13b0: 2e 64 62 5d 20 7b 7d 5d 0a 20 20 73 71 6c 69 74  .db] {}].  sqlit
13c0: 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32 0a  e3_errcode $db2.
13d0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 23 20  } {SQLITE_OK}.# 
13e0: 46 49 58 20 4d 45 3a 20 53 68 6f 75 6c 64 20 74  FIX ME: Should t
13f0: 65 73 74 20 74 68 65 20 64 62 20 68 61 6e 64 6c  est the db handl
1400: 65 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73 74  e works..do_test
1410: 20 63 61 70 69 33 63 2d 34 2e 32 20 7b 0a 20 20   capi3c-4.2 {.  
1420: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 64  sqlite3_close $d
1430: 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  b2.} {SQLITE_OK}
1440: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
1450: 34 2e 33 20 7b 0a 20 20 63 61 74 63 68 20 7b 0a  4.3 {.  catch {.
1460: 20 20 20 20 73 65 74 20 64 62 32 20 5b 73 71 6c      set db2 [sql
1470: 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b 75 74 66  ite3_open16 [utf
1480: 31 36 20 2f 62 6f 67 75 73 2f 70 61 74 68 2f 74  16 /bogus/path/t
1490: 65 73 74 2e 64 62 5d 20 7b 7d 5d 0a 20 20 7d 0a  est.db] {}].  }.
14a0: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64    sqlite3_errcod
14b0: 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45  e $db2.} {SQLITE
14c0: 5f 43 41 4e 54 4f 50 45 4e 7d 0a 64 6f 5f 74 65  _CANTOPEN}.do_te
14d0: 73 74 20 63 61 70 69 33 63 2d 34 2e 34 20 7b 0a  st capi3c-4.4 {.
14e0: 20 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f    utf8 [sqlite3_
14f0: 65 72 72 6d 73 67 31 36 20 24 64 62 32 5d 0a 7d  errmsg16 $db2].}
1500: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
1510: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 0a   database file}.
1520: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34  do_test capi3c-4
1530: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  .5 {.  sqlite3_c
1540: 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  lose $db2.} {SQL
1550: 49 54 45 5f 4f 4b 7d 0a 7d 20 3b 23 20 75 74 66  ITE_OK}.} ;# utf
1560: 31 36 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20  16..# This proc 
1570: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
1580: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50  the following AP
1590: 49 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c  I calls:.#.# sql
15a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
15b0: 74 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  t.# sqlite3_colu
15c0: 6d 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65  mn_name.# sqlite
15d0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 0a  3_column_name16.
15e0: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
15f0: 5f 64 65 63 6c 74 79 70 65 0a 23 20 73 71 6c 69  _decltype.# sqli
1600: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1610: 79 70 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20  ype16.#.# $STMT 
1620: 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51  is a compiled SQ
1630: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65  L statement. $te
1640: 73 74 20 69 73 20 61 20 70 72 65 66 69 78 0a 23  st is a prefix.#
1650: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74   to use for test
1660: 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68   names within th
1670: 69 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20  is proc. $names 
1680: 69 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74  is a list.# of t
1690: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
16a0: 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72  that should be r
16b0: 65 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54  eturned by $STMT
16c0: 2e 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20 69  ..# $decltypes i
16d0: 73 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  s a list of colu
16e0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
16f0: 79 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a  ypes for $STMT..
1700: 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23  #.# Example:.#.#
1710: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
1720: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 22 53  e3_prepare_v2 "S
1730: 45 4c 45 43 54 20 31 2c 20 32 2c 20 32 3b 22 20  ELECT 1, 2, 2;" 
1740: 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63  -1 DUMMY].# chec
1750: 6b 5f 68 65 61 64 65 72 20 74 65 73 74 31 2e 31  k_header test1.1
1760: 20 7b 31 20 32 20 33 7d 20 7b 22 22 20 22 22 20   {1 2 3} {"" "" 
1770: 22 22 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b  ""}.#.proc check
1780: 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74 65  _header {STMT te
1790: 73 74 20 6e 61 6d 65 73 20 64 65 63 6c 74 79 70  st names decltyp
17a0: 65 73 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74  es} {..  # Use t
17b0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
17c0: 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  of sqlite3_colum
17d0: 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69  n_count() to bui
17e0: 6c 64 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66  ld.  # a list of
17f0: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e   column indexes.
1800: 20 69 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33   i.e. If sqlite3
1810: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20  _column_count.  
1820: 23 20 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68  # is 3, build th
1830: 65 20 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a  e list {0 1 2}..
1840: 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20    set ::idxlist 
1850: 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 3a 3a 6e  [list].  set ::n
1860: 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f  umcols [sqlite3_
1870: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54  column_count $ST
1880: 4d 54 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  MT].  for {set i
1890: 20 30 7d 20 7b 24 69 20 3c 20 24 3a 3a 6e 75 6d   0} {$i < $::num
18a0: 63 6f 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  cols} {incr i} {
18b0: 6c 61 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73  lappend ::idxlis
18c0: 74 20 24 69 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d  t $i}..  # Colum
18d0: 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38  n names in UTF-8
18e0: 0a 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74  .  do_test $test
18f0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 63 6e 61  .1 {.    set cna
1900: 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20  melist [list].  
1910: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
1920: 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e  list {lappend cn
1930: 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  amelist [sqlite3
1940: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54  _column_name $ST
1950: 4d 54 20 24 69 5d 7d 20 0a 20 20 20 20 73 65 74  MT $i]} .    set
1960: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24   cnamelist.  } $
1970: 6e 61 6d 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d  names..  # Colum
1980: 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31  n names in UTF-1
1990: 36 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75  6.  ifcapable {u
19a0: 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74  tf16} {.    do_t
19b0: 65 73 74 20 24 74 65 73 74 2e 32 20 7b 0a 20 20  est $test.2 {.  
19c0: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
19d0: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66  t [list].      f
19e0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
19f0: 74 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70  t {.        lapp
1a00: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75  end cnamelist [u
1a10: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
1a20: 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  umn_name16 $STMT
1a30: 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20   $i]].      }.  
1a40: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1a50: 74 0a 20 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20  t.    } $names. 
1a60: 20 7d 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e   }..  # Column n
1a70: 61 6d 65 73 20 69 6e 20 55 54 46 2d 38 0a 20 20  ames in UTF-8.  
1a80: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 33 20  do_test $test.3 
1a90: 7b 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c  {.    set cnamel
1aa0: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66  ist [list].    f
1ab0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
1ac0: 74 20 7b 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65  t {lappend cname
1ad0: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
1ae0: 6c 75 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20  lumn_name $STMT 
1af0: 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63 6e  $i]} .    set cn
1b00: 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d  amelist.  } $nam
1b10: 65 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e  es..  # Column n
1b20: 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20  ames in UTF-16. 
1b30: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
1b40: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
1b50: 20 24 74 65 73 74 2e 34 20 7b 0a 20 20 20 20 20   $test.4 {.     
1b60: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
1b70: 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72 65  list].      fore
1b80: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
1b90: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
1ba0: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38   cnamelist [utf8
1bb0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1bc0: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
1bd0: 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  ]].      }.     
1be0: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20   set cnamelist. 
1bf0: 20 20 20 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a     } $names.  }.
1c00: 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65  .  # Column name
1c10: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f  s in UTF-8.  do_
1c20: 74 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20  test $test.5 {. 
1c30: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1c40: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
1c50: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
1c60: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
1c70: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
1c80: 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54  n_decltype $STMT
1c90: 20 24 69 5d 7d 20 0a 20 20 20 20 73 65 74 20 63   $i]} .    set c
1ca0: 6e 61 6d 65 6c 69 73 74 0a 20 20 7d 20 24 64 65  namelist.  } $de
1cb0: 63 6c 74 79 70 65 73 0a 0a 20 20 23 20 43 6f 6c  cltypes..  # Col
1cc0: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
1cd0: 74 79 70 65 73 20 69 6e 20 55 54 46 2d 31 36 0a  types in UTF-16.
1ce0: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66    ifcapable {utf
1cf0: 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  16} {.    do_tes
1d00: 74 20 24 74 65 73 74 2e 36 20 7b 0a 20 20 20 20  t $test.6 {.    
1d10: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20    set cnamelist 
1d20: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
1d30: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
1d40: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
1d50: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66  d cnamelist [utf
1d60: 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8 [sqlite3_colum
1d70: 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24 53 54  n_decltype16 $ST
1d80: 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 7d 0a  MT $i]].      }.
1d90: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
1da0: 69 73 74 0a 20 20 20 20 7d 20 24 64 65 63 6c 74  ist.    } $declt
1db0: 79 70 65 73 0a 20 20 7d 0a 0a 0a 20 20 23 20 54  ypes.  }...  # T
1dc0: 65 73 74 20 73 6f 6d 65 20 6f 75 74 20 6f 66 20  est some out of 
1dd0: 72 61 6e 67 65 20 63 6f 6e 64 69 74 69 6f 6e 73  range conditions
1de0: 3a 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 75  :.  ifcapable {u
1df0: 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74  tf16} {.    do_t
1e00: 65 73 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20  est $test.7 {.  
1e10: 20 20 20 20 6c 69 73 74 20 5c 0a 20 20 20 20 20      list \.     
1e20: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1e30: 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 2d 31  mn_name $STMT -1
1e40: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1e50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1e60: 31 36 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20  16 $STMT -1] \. 
1e70: 20 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f         [sqlite3_
1e80: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20  column_decltype 
1e90: 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20  $STMT -1] \.    
1ea0: 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c      [sqlite3_col
1eb0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 20 24  umn_decltype16 $
1ec0: 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20  STMT -1] \.     
1ed0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1ee0: 6d 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 6e  mn_name $STMT $n
1ef0: 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20  umcols] \.      
1f00: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d    [sqlite3_colum
1f10: 6e 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24  n_name16 $STMT $
1f20: 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20  numcols] \.     
1f30: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
1f40: 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d  mn_decltype $STM
1f50: 54 20 24 6e 75 6d 63 6f 6c 73 5d 20 5c 0a 20 20  T $numcols] \.  
1f60: 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63        [sqlite3_c
1f70: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
1f80: 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73 5d   $STMT $numcols]
1f90: 0a 20 20 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d  .    } {{} {} {}
1fa0: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d   {} {} {} {} {}}
1fb0: 0a 20 20 7d 0a 7d 20 0a 0a 23 20 54 68 69 73 20  .  }.} ..# This 
1fc0: 70 72 6f 63 20 69 73 20 75 73 65 64 20 74 6f 20  proc is used to 
1fd0: 74 65 73 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69  test the followi
1fe0: 6e 67 20 41 50 49 20 63 61 6c 6c 73 3a 0a 23 0a  ng API calls:.#.
1ff0: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2000: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 0a 23 20 73  _origin_name.# s
2010: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
2020: 69 67 69 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71  igin_name16.# sq
2030: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
2040: 6c 65 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65  le_name.# sqlite
2050: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
2060: 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f  ame16.# sqlite3_
2070: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
2080: 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33 5f 63  name.# sqlite3_c
2090: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
20a0: 61 6d 65 31 36 0a 23 0a 23 20 24 53 54 4d 54 20  ame16.#.# $STMT 
20b0: 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51  is a compiled SQ
20c0: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 24 74 65  L statement. $te
20d0: 73 74 20 69 73 20 61 20 70 72 65 66 69 78 0a 23  st is a prefix.#
20e0: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 65 73 74   to use for test
20f0: 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68   names within th
2100: 69 73 20 70 72 6f 63 2e 20 24 6e 61 6d 65 73 20  is proc. $names 
2110: 69 73 20 61 20 6c 69 73 74 0a 23 20 6f 66 20 74  is a list.# of t
2120: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
2130: 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72  that should be r
2140: 65 74 75 72 6e 65 64 20 62 79 20 24 53 54 4d 54  eturned by $STMT
2150: 2e 0a 23 20 24 64 65 63 6c 74 79 70 65 73 20 69  ..# $decltypes i
2160: 73 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  s a list of colu
2170: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
2180: 79 70 65 73 20 66 6f 72 20 24 53 54 4d 54 2e 0a  ypes for $STMT..
2190: 23 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23  #.# Example:.#.#
21a0: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
21b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 22 53  e3_prepare_v2 "S
21c0: 45 4c 45 43 54 20 31 2c 20 32 2c 20 32 3b 22 20  ELECT 1, 2, 2;" 
21d0: 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 63 68 65 63  -1 DUMMY].# chec
21e0: 6b 5f 68 65 61 64 65 72 20 74 65 73 74 31 2e 31  k_header test1.1
21f0: 20 7b 31 20 32 20 33 7d 20 7b 22 22 20 22 22 20   {1 2 3} {"" "" 
2200: 22 22 7d 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b  ""}.#.proc check
2210: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 7b  _origin_header {
2220: 53 54 4d 54 20 74 65 73 74 20 64 62 73 20 74 61  STMT test dbs ta
2230: 62 6c 65 73 20 63 6f 6c 73 7d 20 7b 0a 20 20 23  bles cols} {.  #
2240: 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   If sqlite3_colu
2250: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 29  mn_origin_name()
2260: 20 61 6e 64 20 66 72 69 65 6e 64 73 20 61 72 65   and friends are
2270: 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 69 6e   not compiled in
2280: 74 6f 0a 20 20 23 20 74 68 69 73 20 62 75 69 6c  to.  # this buil
2290: 64 2c 20 74 68 69 73 20 70 72 6f 63 20 69 73 20  d, this proc is 
22a0: 61 20 6e 6f 2d 6f 70 2e 0a 69 66 63 61 70 61 62  a no-op..ifcapab
22b0: 6c 65 20 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74  le columnmetadat
22c0: 61 20 7b 0a 0a 20 20 20 20 23 20 55 73 65 20 74  a {..    # Use t
22d0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
22e0: 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  of sqlite3_colum
22f0: 6e 5f 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69  n_count() to bui
2300: 6c 64 0a 20 20 20 20 23 20 61 20 6c 69 73 74 20  ld.    # a list 
2310: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
2320: 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c 69 74  s. i.e. If sqlit
2330: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a  e3_column_count.
2340: 20 20 20 20 23 20 69 73 20 33 2c 20 62 75 69 6c      # is 3, buil
2350: 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20 31 20  d the list {0 1 
2360: 32 7d 2e 0a 20 20 20 20 73 65 74 20 3a 3a 69 64  2}..    set ::id
2370: 78 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  xlist [list].   
2380: 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73 20 5b   set ::numcols [
2390: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
23a0: 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20 20 20  ount $STMT].    
23b0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
23c0: 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20  i < $::numcols} 
23d0: 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e  {incr i} {lappen
23e0: 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a  d ::idxlist $i}.
23f0: 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61 73    .    # Databas
2400: 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38  e names in UTF-8
2410: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
2420: 73 74 2e 38 20 7b 0a 20 20 20 20 20 20 73 65 74  st.8 {.      set
2430: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
2440: 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ].      foreach 
2450: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
2460: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61       lappend cna
2470: 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f  melist [sqlite3_
2480: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
2490: 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a 20  name $STMT $i]. 
24a0: 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 73 65       } .      se
24b0: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
24c0: 7d 20 24 64 62 73 0a 20 20 0a 20 20 20 20 23 20  } $dbs.  .    # 
24d0: 44 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 69  Database names i
24e0: 6e 20 55 54 46 2d 31 36 0a 20 20 20 20 69 66 63  n UTF-16.    ifc
24f0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
2500: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 24  .      do_test $
2510: 74 65 73 74 2e 39 20 7b 0a 20 20 20 20 20 20 20  test.9 {.       
2520: 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b   set cnamelist [
2530: 6c 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f  list].        fo
2540: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
2550: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70   {.          lap
2560: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
2570: 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f  utf8 [sqlite3_co
2580: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
2590: 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a  me16 $STMT $i]].
25a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
25b0: 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a    set cnamelist.
25c0: 20 20 20 20 20 20 7d 20 24 64 62 73 0a 20 20 20        } $dbs.   
25d0: 20 7d 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c   }.  .    # Tabl
25e0: 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38  e names in UTF-8
25f0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
2600: 73 74 2e 31 30 20 7b 0a 20 20 20 20 20 20 73 65  st.10 {.      se
2610: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
2620: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
2630: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
2640: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2650: 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  amelist [sqlite3
2660: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
2670: 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20  me $STMT $i].   
2680: 20 20 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20     } .      set 
2690: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20  cnamelist.    } 
26a0: 24 74 61 62 6c 65 73 0a 20 20 0a 20 20 20 20 23  $tables.  .    #
26b0: 20 54 61 62 6c 65 20 6e 61 6d 65 73 20 69 6e 20   Table names in 
26c0: 55 54 46 2d 31 36 0a 20 20 20 20 69 66 63 61 70  UTF-16.    ifcap
26d0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
26e0: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65       do_test $te
26f0: 73 74 2e 31 31 20 7b 0a 20 20 20 20 20 20 20 20  st.11 {.        
2700: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
2710: 69 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f 72  ist].        for
2720: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2730: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  {.          lapp
2740: 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 75  end cnamelist [u
2750: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
2760: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36  umn_table_name16
2770: 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20   $STMT $i]].    
2780: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65      }.        se
2790: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
27a0: 20 20 7d 20 24 74 61 62 6c 65 73 0a 20 20 20 20    } $tables.    
27b0: 7d 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69  }.  .    # Origi
27c0: 6e 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 38  n names in UTF-8
27d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65  .    do_test $te
27e0: 73 74 2e 31 32 20 7b 0a 20 20 20 20 20 20 73 65  st.12 {.      se
27f0: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
2800: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
2810: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
2820: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2830: 61 6d 65 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  amelist [sqlite3
2840: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
2850: 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 0a 20 20  ame $STMT $i].  
2860: 20 20 20 20 7d 20 0a 20 20 20 20 20 20 73 65 74      } .      set
2870: 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d   cnamelist.    }
2880: 20 24 63 6f 6c 73 0a 20 20 0a 20 20 20 20 23 20   $cols.  .    # 
2890: 4f 72 69 67 69 6e 20 64 65 63 6c 61 72 61 74 69  Origin declarati
28a0: 6f 6e 20 74 79 70 65 73 20 69 6e 20 55 54 46 2d  on types in UTF-
28b0: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
28c0: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
28d0: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31   do_test $test.1
28e0: 33 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  3 {.        set 
28f0: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
2900: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
2910: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
2920: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2930: 63 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20  cnamelist [utf8 
2940: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2950: 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 20 24 53  origin_name16 $S
2960: 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20 20  TMT $i]].       
2970: 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   }.        set c
2980: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20 7d  namelist.      }
2990: 20 24 63 6f 6c 73 0a 20 20 20 20 7d 0a 20 20 7d   $cols.    }.  }
29a0: 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20  .}..# This proc 
29b0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
29c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50  the following AP
29d0: 49 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f  Is:.#.# sqlite3_
29e0: 64 61 74 61 5f 63 6f 75 6e 74 0a 23 20 73 71 6c  data_count.# sql
29f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
2a00: 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .# sqlite3_colum
2a10: 6e 5f 69 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f  n_int.# sqlite3_
2a20: 63 6f 6c 75 6d 6e 5f 74 65 78 74 0a 23 20 73 71  column_text.# sq
2a30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
2a40: 74 31 36 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  t16.# sqlite3_co
2a50: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 0a 23 0a 23 20  lumn_double.#.# 
2a60: 24 53 54 4d 54 20 69 73 20 61 20 63 6f 6d 70 69  $STMT is a compi
2a70: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
2a80: 74 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  t for which the 
2a90: 70 72 65 76 69 6f 75 73 20 63 61 6c 6c 20 0a 23  previous call .#
2aa0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 73 74 65 70   to sqlite3_step
2ab0: 20 72 65 74 75 72 6e 65 64 20 53 51 4c 49 54 45   returned SQLITE
2ac0: 5f 52 4f 57 2e 20 24 74 65 73 74 20 69 73 20 61  _ROW. $test is a
2ad0: 20 70 72 65 66 69 78 20 74 6f 20 75 73 65 20 0a   prefix to use .
2ae0: 23 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73  # for test names
2af0: 20 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f   within this pro
2b00: 63 2e 20 24 74 79 70 65 73 20 69 73 20 61 20 6c  c. $types is a l
2b10: 69 73 74 20 6f 66 20 74 68 65 20 0a 23 20 6d 61  ist of the .# ma
2b20: 6e 69 66 65 73 74 20 74 79 70 65 73 20 66 6f 72  nifest types for
2b30: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
2b40: 2e 20 24 69 6e 74 73 2c 20 24 64 6f 75 62 6c 65  . $ints, $double
2b50: 73 20 61 6e 64 20 24 73 74 72 69 6e 67 73 0a 23  s and $strings.#
2b60: 20 61 72 65 20 6c 69 73 74 73 20 6f 66 20 74 68   are lists of th
2b70: 65 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 20  e integer, real 
2b80: 61 6e 64 20 73 74 72 69 6e 67 20 72 65 70 72 65  and string repre
2b90: 73 65 6e 74 61 74 69 6f 6e 73 20 6f 66 0a 23 20  sentations of.# 
2ba0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  the values in th
2bb0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0a 23  e current row..#
2bc0: 0a 23 20 45 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  .# Example:.#.# 
2bd0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
2be0: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 22 53 45  3_prepare_v2 "SE
2bf0: 4c 45 43 54 20 27 68 65 6c 6c 6f 27 2c 20 31 2e  LECT 'hello', 1.
2c00: 31 2c 20 4e 55 4c 4c 22 20 2d 31 20 44 55 4d 4d  1, NULL" -1 DUMM
2c10: 59 5d 0a 23 20 73 71 6c 69 74 65 33 5f 73 74 65  Y].# sqlite3_ste
2c20: 70 20 24 53 54 4d 54 0a 23 20 63 68 65 63 6b 5f  p $STMT.# check_
2c30: 64 61 74 61 20 74 65 73 74 31 2e 32 20 7b 54 45  data test1.2 {TE
2c40: 58 54 20 52 45 41 4c 20 4e 55 4c 4c 7d 20 7b 30  XT REAL NULL} {0
2c50: 20 31 20 30 7d 20 7b 30 20 31 2e 31 20 30 7d 20   1 0} {0 1.1 0} 
2c60: 7b 68 65 6c 6c 6f 20 31 2e 31 20 7b 7d 7d 0a 23  {hello 1.1 {}}.#
2c70: 0a 70 72 6f 63 20 63 68 65 63 6b 5f 64 61 74 61  .proc check_data
2c80: 20 7b 53 54 4d 54 20 74 65 73 74 20 74 79 70 65   {STMT test type
2c90: 73 20 69 6e 74 73 20 64 6f 75 62 6c 65 73 20 73  s ints doubles s
2ca0: 74 72 69 6e 67 73 7d 20 7b 0a 0a 20 20 23 20 55  trings} {..  # U
2cb0: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
2cc0: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 63  lue of sqlite3_c
2cd0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 29 20 74 6f  olumn_count() to
2ce0: 20 62 75 69 6c 64 0a 20 20 23 20 61 20 6c 69 73   build.  # a lis
2cf0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  t of column inde
2d00: 78 65 73 2e 20 69 2e 65 2e 20 49 66 20 73 71 6c  xes. i.e. If sql
2d10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
2d20: 74 0a 20 20 23 20 69 73 20 33 2c 20 62 75 69 6c  t.  # is 3, buil
2d30: 64 20 74 68 65 20 6c 69 73 74 20 7b 30 20 31 20  d the list {0 1 
2d40: 32 7d 2e 0a 20 20 73 65 74 20 3a 3a 69 64 78 6c  2}..  set ::idxl
2d50: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  ist [list].  set
2d60: 20 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65   numcols [sqlite
2d70: 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20 24 53 54  3_data_count $ST
2d80: 4d 54 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  MT].  for {set i
2d90: 20 30 7d 20 7b 24 69 20 3c 20 24 6e 75 6d 63 6f   0} {$i < $numco
2da0: 6c 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 6c 61  ls} {incr i} {la
2db0: 70 70 65 6e 64 20 3a 3a 69 64 78 6c 69 73 74 20  ppend ::idxlist 
2dc0: 24 69 7d 0a 0a 23 20 74 79 70 65 73 0a 64 6f 5f  $i}..# types.do_
2dd0: 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20  test $test.1 {. 
2de0: 20 73 65 74 20 74 79 70 65 73 20 5b 6c 69 73 74   set types [list
2df0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69  ].  foreach i $i
2e00: 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20  dxlist {lappend 
2e10: 74 79 70 65 73 20 5b 73 71 6c 69 74 65 33 5f 63  types [sqlite3_c
2e20: 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54 4d 54  olumn_type $STMT
2e30: 20 24 69 5d 7d 0a 20 20 73 65 74 20 74 79 70 65   $i]}.  set type
2e40: 73 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20 49 6e  s.} $types..# In
2e50: 74 65 67 65 72 73 0a 64 6f 5f 74 65 73 74 20 24  tegers.do_test $
2e60: 74 65 73 74 2e 32 20 7b 0a 20 20 73 65 74 20 69  test.2 {.  set i
2e70: 6e 74 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  nts [list].  for
2e80: 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20  each i $idxlist 
2e90: 7b 6c 61 70 70 65 6e 64 20 69 6e 74 73 20 5b 73  {lappend ints [s
2ea0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2eb0: 74 36 34 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  t64 $STMT $i]}. 
2ec0: 20 73 65 74 20 69 6e 74 73 0a 7d 20 24 69 6e 74   set ints.} $int
2ed0: 73 0a 0a 23 20 62 79 74 65 73 0a 73 65 74 20 6c  s..# bytes.set l
2ee0: 65 6e 73 20 5b 6c 69 73 74 5d 0a 66 6f 72 65 61  ens [list].forea
2ef0: 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73 74 20  ch i $::idxlist 
2f00: 7b 0a 20 20 6c 61 70 70 65 6e 64 20 6c 65 6e 73  {.  lappend lens
2f10: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
2f20: 5b 6c 69 6e 64 65 78 20 24 73 74 72 69 6e 67 73  [lindex $strings
2f30: 20 24 69 5d 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20   $i]].}.do_test 
2f40: 24 74 65 73 74 2e 33 20 7b 0a 20 20 73 65 74 20  $test.3 {.  set 
2f50: 62 79 74 65 73 20 5b 6c 69 73 74 5d 0a 20 20 73  bytes [list].  s
2f60: 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20  et lens [list]. 
2f70: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
2f80: 69 73 74 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  ist {.    lappen
2f90: 64 20 62 79 74 65 73 20 5b 73 71 6c 69 74 65 33  d bytes [sqlite3
2fa0: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 24 53  _column_bytes $S
2fb0: 54 4d 54 20 24 69 5d 0a 20 20 7d 0a 20 20 73 65  TMT $i].  }.  se
2fc0: 74 20 62 79 74 65 73 0a 7d 20 24 6c 65 6e 73 0a  t bytes.} $lens.
2fd0: 0a 23 20 62 79 74 65 73 31 36 0a 69 66 63 61 70  .# bytes16.ifcap
2fe0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
2ff0: 20 73 65 74 20 6c 65 6e 73 20 5b 6c 69 73 74 5d   set lens [list]
3000: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 3a 3a  .  foreach i $::
3010: 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 6c 61  idxlist {.    la
3020: 70 70 65 6e 64 20 6c 65 6e 73 20 5b 65 78 70 72  ppend lens [expr
3030: 20 32 20 2a 20 5b 73 74 72 69 6e 67 20 6c 65 6e   2 * [string len
3040: 67 74 68 20 5b 6c 69 6e 64 65 78 20 24 73 74 72  gth [lindex $str
3050: 69 6e 67 73 20 24 69 5d 5d 5d 0a 20 20 7d 0a 20  ings $i]]].  }. 
3060: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 34   do_test $test.4
3070: 20 7b 0a 20 20 20 20 73 65 74 20 62 79 74 65 73   {.    set bytes
3080: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20   [list].    set 
3090: 6c 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20  lens [list].    
30a0: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
30b0: 73 74 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  st {.      lappe
30c0: 6e 64 20 62 79 74 65 73 20 5b 73 71 6c 69 74 65  nd bytes [sqlite
30d0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
30e0: 20 24 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 7d   $STMT $i].    }
30f0: 0a 20 20 20 20 73 65 74 20 62 79 74 65 73 0a 20  .    set bytes. 
3100: 20 7d 20 24 6c 65 6e 73 0a 7d 0a 0a 23 20 42 6c   } $lens.}..# Bl
3110: 6f 62 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  ob.do_test $test
3120: 2e 35 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20  .5 {.  set utf8 
3130: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
3140: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3150: 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74  pend utf8 [sqlit
3160: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 24  e3_column_blob $
3170: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3180: 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a  utf8.} $strings.
3190: 0a 23 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74  .# UTF-8.do_test
31a0: 20 24 74 65 73 74 2e 36 20 7b 0a 20 20 73 65 74   $test.6 {.  set
31b0: 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66   utf8 [list].  f
31c0: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
31d0: 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20  t {lappend utf8 
31e0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
31f0: 74 65 78 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a  text $STMT $i]}.
3200: 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74    set utf8.} $st
3210: 72 69 6e 67 73 0a 0a 23 20 46 6c 6f 61 74 73 0a  rings..# Floats.
3220: 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 37 20  do_test $test.7 
3230: 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69  {.  set utf8 [li
3240: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
3250: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3260: 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f  d utf8 [sqlite3_
3270: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53  column_double $S
3280: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75  TMT $i]}.  set u
3290: 74 66 38 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a  tf8.} $doubles..
32a0: 23 20 55 54 46 2d 31 36 0a 69 66 63 61 70 61 62  # UTF-16.ifcapab
32b0: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64  le {utf16} {.  d
32c0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b  o_test $test.8 {
32d0: 0a 20 20 20 20 73 65 74 20 75 74 66 38 20 5b 6c  .    set utf8 [l
32e0: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
32f0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
3300: 70 65 6e 64 20 75 74 66 38 20 5b 75 74 66 38 20  pend utf8 [utf8 
3310: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3320: 74 65 78 74 31 36 20 24 53 54 4d 54 20 24 69 5d  text16 $STMT $i]
3330: 5d 7d 0a 20 20 20 20 73 65 74 20 75 74 66 38 0a  ]}.    set utf8.
3340: 20 20 7d 20 24 73 74 72 69 6e 67 73 0a 7d 0a 0a    } $strings.}..
3350: 23 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65  # Integers.do_te
3360: 73 74 20 24 74 65 73 74 2e 39 20 7b 0a 20 20 73  st $test.9 {.  s
3370: 65 74 20 69 6e 74 73 20 5b 6c 69 73 74 5d 0a 20  et ints [list]. 
3380: 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c   foreach i $idxl
3390: 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 69 6e 74  ist {lappend int
33a0: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
33b0: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 24 69 5d 7d  n_int $STMT $i]}
33c0: 0a 20 20 73 65 74 20 69 6e 74 73 0a 7d 20 24 69  .  set ints.} $i
33d0: 6e 74 73 0a 0a 23 20 46 6c 6f 61 74 73 0a 64 6f  nts..# Floats.do
33e0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20 7b  _test $test.10 {
33f0: 0a 20 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73  .  set utf8 [lis
3400: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24  t].  foreach i $
3410: 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64  idxlist {lappend
3420: 20 75 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63   utf8 [sqlite3_c
3430: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 24 53 54  olumn_double $ST
3440: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75 74  MT $i]}.  set ut
3450: 66 38 0a 7d 20 24 64 6f 75 62 6c 65 73 0a 0a 23  f8.} $doubles..#
3460: 20 55 54 46 2d 38 0a 64 6f 5f 74 65 73 74 20 24   UTF-8.do_test $
3470: 74 65 73 74 2e 31 31 20 7b 0a 20 20 73 65 74 20  test.11 {.  set 
3480: 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  utf8 [list].  fo
3490: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
34a0: 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20 5b   {lappend utf8 [
34b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
34c0: 65 78 74 20 24 53 54 4d 54 20 24 69 5d 7d 0a 20  ext $STMT $i]}. 
34d0: 20 73 65 74 20 75 74 66 38 0a 7d 20 24 73 74 72   set utf8.} $str
34e0: 69 6e 67 73 0a 0a 23 20 54 79 70 65 73 0a 64 6f  ings..# Types.do
34f0: 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20 7b  _test $test.12 {
3500: 0a 20 20 73 65 74 20 74 79 70 65 73 20 5b 6c 69  .  set types [li
3510: 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 20  st].  foreach i 
3520: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
3530: 64 20 74 79 70 65 73 20 5b 73 71 6c 69 74 65 33  d types [sqlite3
3540: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 53 54  _column_type $ST
3550: 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 74 79  MT $i]}.  set ty
3560: 70 65 73 0a 7d 20 24 74 79 70 65 73 0a 0a 23 20  pes.} $types..# 
3570: 54 65 73 74 20 74 68 61 74 20 61 6e 20 6f 75 74  Test that an out
3580: 20 6f 66 20 72 61 6e 67 65 20 72 65 71 75 65 73   of range reques
3590: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 65 71  t returns the eq
35a0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 4e 55 4c 4c  uivalent of NULL
35b0: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
35c0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  3 {.  sqlite3_co
35d0: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 2d  lumn_int $STMT -
35e0: 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  1.} {0}.do_test 
35f0: 24 74 65 73 74 2e 31 33 20 7b 0a 20 20 73 71 6c  $test.13 {.  sql
3600: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3610: 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 7d 0a 0a   $STMT -1.} {}..
3620: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 66 6c  }..ifcapable !fl
3630: 6f 61 74 69 6e 67 70 6f 69 6e 74 20 7b 0a 20 20  oatingpoint {.  
3640: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
3650: 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  turn.}..do_test 
3660: 63 61 70 69 33 63 2d 35 2e 30 20 7b 0a 20 20 65  capi3c-5.0 {.  e
3670: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3680: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 56  ATE TABLE t1(a V
3690: 41 52 49 4e 54 2c 20 62 20 42 4c 4f 42 2c 20 63  ARINT, b BLOB, c
36a0: 20 56 41 52 43 48 41 52 28 31 36 29 29 3b 0a 20   VARCHAR(16));. 
36b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
36c0: 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33  1 VALUES(1, 2, 3
36d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
36e0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
36f0: 65 27 2c 20 27 74 77 6f 27 2c 20 4e 55 4c 4c 29  e', 'two', NULL)
3700: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3710: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2e 32 2c  O t1 VALUES(1.2,
3720: 20 31 2e 33 2c 20 31 2e 34 29 3b 0a 20 20 7d 0a   1.3, 1.4);.  }.
3730: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
3740: 54 20 2a 20 46 52 4f 4d 20 74 31 22 0a 20 20 73  T * FROM t1".  s
3750: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
3760: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
3770: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
3780: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
3790: 6f 75 6e 74 20 24 53 54 4d 54 0a 7d 20 33 0a 0a  ount $STMT.} 3..
37a0: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
37b0: 4d 54 20 63 61 70 69 33 63 2d 35 2e 31 20 7b 61  MT capi3c-5.1 {a
37c0: 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c   b c} {VARINT BL
37d0: 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a  OB VARCHAR(16)}.
37e0: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
37f0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63  der $STMT capi3c
3800: 2d 35 2e 31 20 7b 6d 61 69 6e 20 6d 61 69 6e 20  -5.1 {main main 
3810: 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d  main} {t1 t1 t1}
3820: 20 7b 61 20 62 20 63 7d 0a 64 6f 5f 74 65 73 74   {a b c}.do_test
3830: 20 63 61 70 69 33 63 2d 35 2e 32 20 7b 0a 20 20   capi3c-5.2 {.  
3840: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
3850: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
3860: 0a 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53  .check_header $S
3870: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 33 20 7b  TMT capi3c-5.3 {
3880: 61 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42  a b c} {VARINT B
3890: 4c 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d  LOB VARCHAR(16)}
38a0: 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65  .check_origin_he
38b0: 61 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33  ader $STMT capi3
38c0: 63 2d 35 2e 33 20 7b 6d 61 69 6e 20 6d 61 69 6e  c-5.3 {main main
38d0: 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31   main} {t1 t1 t1
38e0: 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f  } {a b c}.check_
38f0: 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33  data $STMT capi3
3900: 63 2d 35 2e 34 20 7b 49 4e 54 45 47 45 52 20 49  c-5.4 {INTEGER I
3910: 4e 54 45 47 45 52 20 54 45 58 54 7d 20 7b 31 20  NTEGER TEXT} {1 
3920: 32 20 33 7d 20 7b 31 2e 30 20 32 2e 30 20 33 2e  2 3} {1.0 2.0 3.
3930: 30 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74  0} {1 2 3}..do_t
3940: 65 73 74 20 63 61 70 69 33 63 2d 35 2e 35 20 7b  est capi3c-5.5 {
3950: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
3960: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
3970: 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65 72  OW..check_header
3980: 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e   $STMT capi3c-5.
3990: 36 20 7b 61 20 62 20 63 7d 20 7b 56 41 52 49 4e  6 {a b c} {VARIN
39a0: 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31  T BLOB VARCHAR(1
39b0: 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69 6e  6)}.check_origin
39c0: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
39d0: 70 69 33 63 2d 35 2e 36 20 7b 6d 61 69 6e 20 6d  pi3c-5.6 {main m
39e0: 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20 74 31  ain main} {t1 t1
39f0: 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63 68 65   t1} {a b c}.che
3a00: 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61  ck_data $STMT ca
3a10: 70 69 33 63 2d 35 2e 37 20 7b 54 45 58 54 20 54  pi3c-5.7 {TEXT T
3a20: 45 58 54 20 4e 55 4c 4c 7d 20 7b 30 20 30 20 30  EXT NULL} {0 0 0
3a30: 7d 20 7b 30 2e 30 20 30 2e 30 20 30 2e 30 7d 20  } {0.0 0.0 0.0} 
3a40: 7b 6f 6e 65 20 74 77 6f 20 7b 7d 7d 0a 0a 64 6f  {one two {}}..do
3a50: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 38  _test capi3c-5.8
3a60: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
3a70: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
3a80: 5f 52 4f 57 0a 0a 63 68 65 63 6b 5f 68 65 61 64  _ROW..check_head
3a90: 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d  er $STMT capi3c-
3aa0: 35 2e 39 20 7b 61 20 62 20 63 7d 20 7b 56 41 52  5.9 {a b c} {VAR
3ab0: 49 4e 54 20 42 4c 4f 42 20 56 41 52 43 48 41 52  INT BLOB VARCHAR
3ac0: 28 31 36 29 7d 0a 63 68 65 63 6b 5f 6f 72 69 67  (16)}.check_orig
3ad0: 69 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20  in_header $STMT 
3ae0: 63 61 70 69 33 63 2d 35 2e 39 20 7b 6d 61 69 6e  capi3c-5.9 {main
3af0: 20 6d 61 69 6e 20 6d 61 69 6e 7d 20 7b 74 31 20   main main} {t1 
3b00: 74 31 20 74 31 7d 20 7b 61 20 62 20 63 7d 0a 63  t1 t1} {a b c}.c
3b10: 68 65 63 6b 5f 64 61 74 61 20 24 53 54 4d 54 20  heck_data $STMT 
3b20: 63 61 70 69 33 63 2d 35 2e 31 30 20 7b 46 4c 4f  capi3c-5.10 {FLO
3b30: 41 54 20 46 4c 4f 41 54 20 54 45 58 54 7d 20 7b  AT FLOAT TEXT} {
3b40: 31 20 31 20 31 7d 20 7b 31 2e 32 20 31 2e 33 20  1 1 1} {1.2 1.3 
3b50: 31 2e 34 7d 20 7b 31 2e 32 20 31 2e 33 20 31 2e  1.4} {1.2 1.3 1.
3b60: 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  4}..do_test capi
3b70: 33 63 2d 35 2e 31 31 20 7b 0a 20 20 73 71 6c 69  3c-5.11 {.  sqli
3b80: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
3b90: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 0a 64 6f   SQLITE_DONE..do
3ba0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 31  _test capi3c-5.1
3bb0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  2 {.  sqlite3_fi
3bc0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53  nalize $STMT.} S
3bd0: 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73  QLITE_OK..do_tes
3be0: 74 20 63 61 70 69 33 63 2d 35 2e 32 30 20 7b 0a  t capi3c-5.20 {.
3bf0: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
3c00: 54 20 61 2c 20 73 75 6d 28 62 29 2c 20 6d 61 78  T a, sum(b), max
3c10: 28 63 29 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  (c) FROM t1 GROU
3c20: 50 20 42 59 20 61 22 0a 20 20 73 65 74 20 53 54  P BY a".  set ST
3c30: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
3c40: 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20  are_v2 $DB $sql 
3c50: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
3c60: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20  e3_column_count 
3c70: 24 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b  $STMT.} 3..check
3c80: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3c90: 70 69 33 63 2d 35 2e 32 31 20 7b 61 20 73 75 6d  pi3c-5.21 {a sum
3ca0: 28 62 29 20 6d 61 78 28 63 29 7d 20 7b 56 41 52  (b) max(c)} {VAR
3cb0: 49 4e 54 20 7b 7d 20 7b 7d 7d 0a 63 68 65 63 6b  INT {} {}}.check
3cc0: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24  _origin_header $
3cd0: 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 32 32  STMT capi3c-5.22
3ce0: 20 7b 6d 61 69 6e 20 7b 7d 20 7b 7d 7d 20 7b 74   {main {} {}} {t
3cf0: 31 20 7b 7d 20 7b 7d 7d 20 7b 61 20 7b 7d 20 7b  1 {} {}} {a {} {
3d00: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  }}.do_test capi3
3d10: 63 2d 35 2e 32 33 20 7b 0a 20 20 73 71 6c 69 74  c-5.23 {.  sqlit
3d20: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
3d30: 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 0a  T.} SQLITE_OK...
3d40: 73 65 74 20 3a 3a 45 4e 43 20 5b 65 78 65 63 73  set ::ENC [execs
3d50: 71 6c 20 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64  ql {pragma encod
3d60: 69 6e 67 7d 5d 0a 64 62 20 63 6c 6f 73 65 0a 0a  ing}].db close..
3d70: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36  do_test capi3c-6
3d80: 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .0 {.  sqlite3 d
3d90: 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20  b test.db.  set 
3da0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
3db0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
3dc0: 62 5d 0a 20 20 69 66 20 7b 5b 73 71 6c 69 74 65  b].  if {[sqlite
3dd0: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 3d 3d 30  3 -has-codec]==0
3de0: 7d 20 7b 20 73 71 6c 69 74 65 33 5f 6b 65 79 20  } { sqlite3_key 
3df0: 24 44 42 20 78 79 7a 7a 79 20 7d 0a 20 20 73 65  $DB xyzzy }.  se
3e00: 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20  t sql {SELECT a 
3e10: 46 52 4f 4d 20 74 31 20 6f 72 64 65 72 20 62 79  FROM t1 order by
3e20: 20 72 6f 77 69 64 7d 0a 20 20 73 65 74 20 53 54   rowid}.  set ST
3e30: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
3e40: 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20  are_v2 $DB $sql 
3e50: 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 70 72 20  -1 TAIL].  expr 
3e60: 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  0.} {0}.do_test 
3e70: 63 61 70 69 33 63 2d 36 2e 31 20 7b 0a 20 20 64  capi3c-6.1 {.  d
3e80: 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20 20  b cache flush.  
3e90: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44  sqlite3_close $D
3ea0: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 42 55 53 59  B.} {SQLITE_BUSY
3eb0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
3ec0: 2d 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -6.2 {.  sqlite3
3ed0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
3ee0: 51 4c 49 54 45 5f 52 4f 57 7d 0a 63 68 65 63 6b  QLITE_ROW}.check
3ef0: 5f 64 61 74 61 20 24 53 54 4d 54 20 63 61 70 69  _data $STMT capi
3f00: 33 63 2d 36 2e 33 20 7b 49 4e 54 45 47 45 52 7d  3c-6.3 {INTEGER}
3f10: 20 7b 31 7d 20 7b 31 2e 30 7d 20 7b 31 7d 0a 64   {1} {1.0} {1}.d
3f20: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36 2e  o_test capi3c-6.
3f30: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  3 {.  sqlite3_fi
3f40: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
3f50: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 69 66 20 7b 5b  SQLITE_OK}.if {[
3f60: 63 6c 61 6e 67 5f 73 61 6e 69 74 69 7a 65 5f 61  clang_sanitize_a
3f70: 64 64 72 65 73 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ddress]==0} {.  
3f80: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 36  do_test capi3c-6
3f90: 2e 34 20 7b 0a 20 20 20 20 64 62 20 63 61 63 68  .4 {.    db cach
3fa0: 65 20 66 6c 75 73 68 0a 20 20 20 20 20 20 73 71  e flush.      sq
3fb0: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24 44 42 0a  lite3_close $DB.
3fc0: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a    } {SQLITE_OK}.
3fd0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
3fe0: 2d 36 2e 39 39 2d 6d 69 73 75 73 65 20 7b 0a 20  -6.99-misuse {. 
3ff0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
4000: 7b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 62  {}.} else {.  db
4010: 20 63 6c 6f 73 65 0a 7d 0a 0a 23 20 54 68 69 73   close.}..# This
4020: 20 70 72 6f 63 65 64 75 72 65 20 73 65 74 73 20   procedure sets 
4030: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
4040: 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20   file-format in 
4050: 66 69 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23  file 'test.db'.#
4060: 20 74 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73   to $newval. Als
4070: 6f 2c 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  o, the schema co
4080: 6f 6b 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e  okie is incremen
4090: 74 65 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74  ted..# .proc set
40a0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65  _file_format {ne
40b0: 77 76 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f  wval} {.  hexio_
40c0: 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 34  write test.db 44
40d0: 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69   [hexio_render_i
40e0: 6e 74 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20  nt32 $newval].  
40f0: 73 65 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65  set schemacookie
4100: 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20   [hexio_get_int 
4110: 5b 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74  [hexio_read test
4120: 2e 64 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63  .db 40 4]].  inc
4130: 72 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20  r schemacookie. 
4140: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
4150: 74 2e 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72  t.db 40 [hexio_r
4160: 65 6e 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68  ender_int32 $sch
4170: 65 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74  emacookie].  ret
4180: 75 72 6e 20 7b 7d 0a 7d 0a 0a 23 20 54 68 69 73  urn {}.}..# This
4190: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
41a0: 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ns the value of 
41b0: 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 20  the file-format 
41c0: 69 6e 20 66 69 6c 65 20 27 74 65 73 74 2e 64 62  in file 'test.db
41d0: 27 2e 0a 23 20 0a 70 72 6f 63 20 67 65 74 5f 66  '..# .proc get_f
41e0: 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 7b 66 6e 61  ile_format {{fna
41f0: 6d 65 20 74 65 73 74 2e 64 62 7d 7d 20 7b 0a 20  me test.db}} {. 
4200: 20 72 65 74 75 72 6e 20 5b 68 65 78 69 6f 5f 67   return [hexio_g
4210: 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65  et_int [hexio_re
4220: 61 64 20 24 66 6e 61 6d 65 20 34 34 20 34 5d 5d  ad $fname 44 4]]
4230: 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65  .}..if {![sqlite
4240: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b  3 -has-codec]} {
4250: 0a 20 20 23 20 54 65 73 74 20 77 68 61 74 20 68  .  # Test what h
4260: 61 70 70 65 6e 73 20 77 68 65 6e 20 74 68 65 20  appens when the 
4270: 6c 69 62 72 61 72 79 20 65 6e 63 6f 75 6e 74 65  library encounte
4280: 72 73 20 61 20 6e 65 77 65 72 20 66 69 6c 65 20  rs a newer file 
4290: 66 6f 72 6d 61 74 2e 0a 20 20 64 6f 5f 74 65 73  format..  do_tes
42a0: 74 20 63 61 70 69 33 63 2d 37 2e 31 20 7b 0a 20  t capi3c-7.1 {. 
42b0: 20 20 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72 6d     set_file_form
42c0: 61 74 20 35 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  at 5.  } {}.  do
42d0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 37 2e 32  _test capi3c-7.2
42e0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
42f0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4300: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4310: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
4320: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
4330: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
4340: 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20  {1 {unsupported 
4350: 66 69 6c 65 20 66 6f 72 6d 61 74 7d 7d 0a 20 20  file format}}.  
4360: 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 20 7b  db close.}..if {
4370: 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63  ![sqlite3 -has-c
4380: 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 4e 6f 77  odec]} {.  # Now
4390: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20 6c   test that the l
43a0: 69 62 72 61 72 79 20 63 6f 72 72 65 63 74 6c 79  ibrary correctly
43b0: 20 68 61 6e 64 6c 65 73 20 62 6f 67 75 73 20 65   handles bogus e
43c0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20  ntries in the.  
43d0: 23 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  # sqlite_master 
43e0: 74 61 62 6c 65 20 28 73 63 68 65 6d 61 20 63 6f  table (schema co
43f0: 72 72 75 70 74 69 6f 6e 29 2e 0a 20 20 64 6f 5f  rruption)..  do_
4400: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 31 20  test capi3c-8.1 
4410: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
4420: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
4430: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71  b-journal.    sq
4440: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4450: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4460: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
4470: 45 20 74 31 28 61 29 3b 0a 20 20 20 20 7d 0a 20  E t1(a);.    }. 
4480: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20     db close.  } 
4490: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  {}.  do_test cap
44a0: 69 33 63 2d 38 2e 32 20 7b 0a 20 20 20 20 73 71  i3c-8.2 {.    sq
44b0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
44c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
44d0: 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e 53  config db DEFENS
44e0: 49 56 45 20 30 0a 20 20 20 20 65 78 65 63 73 71  IVE 0.    execsq
44f0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
4500: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
4510: 3d 4f 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  =ON;.      INSER
4520: 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61  T INTO sqlite_ma
4530: 73 74 65 72 20 56 41 4c 55 45 53 28 4e 55 4c 4c  ster VALUES(NULL
4540: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c  ,NULL,NULL,NULL,
4550: 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20  NULL);.    }.   
4560: 20 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d   db close.  } {}
4570: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
4580: 63 2d 38 2e 33 20 7b 0a 20 20 20 20 63 61 74 63  c-8.3 {.    catc
4590: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
45a0: 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74  est.db }.    cat
45b0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  chsql {.      SE
45c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
45d0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
45e0: 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d  .  } {1 {malform
45f0: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
4600: 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 6f 5f 74 65  ma (?)}}.  do_te
4610: 73 74 20 63 61 70 69 33 63 2d 38 2e 34 20 7b 0a  st capi3c-8.4 {.
4620: 20 20 20 20 23 20 42 75 69 6c 64 20 61 20 35 2d      # Build a 5-
4630: 66 69 65 6c 64 20 72 6f 77 20 72 65 63 6f 72 64  field row record
4640: 2e 20 54 68 65 20 66 69 72 73 74 20 66 69 65 6c  . The first fiel
4650: 64 20 69 73 20 61 20 73 74 72 69 6e 67 20 27 74  d is a string 't
4660: 61 62 6c 65 27 2c 20 61 6e 64 0a 20 20 20 20 23  able', and.    #
4670: 20 73 75 62 73 65 71 75 65 6e 74 20 66 69 65 6c   subsequent fiel
4680: 64 73 20 61 72 65 20 61 6c 6c 20 4e 55 4c 4c 2e  ds are all NULL.
4690: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
46a0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
46b0: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
46c0: 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65  urnal.    sqlite
46d0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
46e0: 20 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66   sqlite3_db_conf
46f0: 69 67 20 64 62 20 44 45 46 45 4e 53 49 56 45 20  ig db DEFENSIVE 
4700: 30 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  0.    execsql {.
4710: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
4720: 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20  LE t1(a);.      
4730: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
4740: 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20  schema=ON;.     
4750: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c   INSERT INTO sql
4760: 69 74 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45  ite_master VALUE
4770: 53 28 27 74 61 62 6c 65 27 2c 4e 55 4c 4c 2c 4e  S('table',NULL,N
4780: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a  ULL,NULL,NULL);.
4790: 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f      }.    db clo
47a0: 73 65 0a 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f  se.  } {};.  do_
47b0: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 35 20  test capi3c-8.5 
47c0: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73 71  {.    catch { sq
47d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
47e0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
47f0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
4800: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4810: 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ter;.    }.  } {
4820: 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74  1 {malformed dat
4830: 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29  abase schema (?)
4840: 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a  }}.  db close.}.
4850: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
4860: 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  .db.forcedelete 
4870: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
4880: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65 6e 67  ..# Test the eng
4890: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 73 74  lish language st
48a0: 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e 74 73  ring equivalents
48b0: 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72 72 6f   for sqlite erro
48c0: 72 20 63 6f 64 65 73 0a 73 65 74 20 63 6f 64 65  r codes.set code
48d0: 32 65 6e 67 6c 69 73 68 20 5b 6c 69 73 74 20 5c  2english [list \
48e0: 0a 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20  .SQLITE_OK      
48f0: 20 20 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72     {not an error
4900: 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 52 52 4f 52  } \.SQLITE_ERROR
4910: 20 20 20 20 20 20 7b 53 51 4c 20 6c 6f 67 69 63        {SQL logic
4920: 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45   error} \.SQLITE
4930: 5f 50 45 52 4d 20 20 20 20 20 20 20 7b 61 63 63  _PERM       {acc
4940: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
4950: 65 6e 69 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f  enied} \.SQLITE_
4960: 41 42 4f 52 54 20 20 20 20 20 20 7b 71 75 65 72  ABORT      {quer
4970: 79 20 61 62 6f 72 74 65 64 7d 20 5c 0a 53 51 4c  y aborted} \.SQL
4980: 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 7b  ITE_BUSY       {
4990: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
49a0: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4c 4f 43  ed} \.SQLITE_LOC
49b0: 4b 45 44 20 20 20 20 20 7b 64 61 74 61 62 61 73  KED     {databas
49c0: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
49d0: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4d 45  d} \.SQLITE_NOME
49e0: 4d 20 20 20 20 20 20 7b 6f 75 74 20 6f 66 20 6d  M      {out of m
49f0: 65 6d 6f 72 79 7d 20 5c 0a 53 51 4c 49 54 45 5f  emory} \.SQLITE_
4a00: 52 45 41 44 4f 4e 4c 59 20 20 20 7b 61 74 74 65  READONLY   {atte
4a10: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
4a20: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
4a30: 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4e 54 45 52  } \.SQLITE_INTER
4a40: 52 55 50 54 20 20 7b 69 6e 74 65 72 72 75 70 74  RUPT  {interrupt
4a50: 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 49 4f 45  ed} \.SQLITE_IOE
4a60: 52 52 20 20 20 20 20 20 7b 64 69 73 6b 20 49 2f  RR      {disk I/
4a70: 4f 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  O error} \.SQLIT
4a80: 45 5f 43 4f 52 52 55 50 54 20 20 20 20 7b 64 61  E_CORRUPT    {da
4a90: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
4aa0: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 20  e is malformed} 
4ab0: 5c 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20  \.SQLITE_FULL   
4ac0: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 6f 72      {database or
4ad0: 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 7d 20 5c   disk is full} \
4ae0: 0a 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e  .SQLITE_CANTOPEN
4af0: 20 20 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70     {unable to op
4b00: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
4b10: 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 4d 50 54 59  } \.SQLITE_EMPTY
4b20: 20 20 20 20 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65        {unknown e
4b30: 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45 5f 53  rror} \.SQLITE_S
4b40: 43 48 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62  CHEMA     {datab
4b50: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
4b60: 68 61 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45  hanged} \.SQLITE
4b70: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e  _CONSTRAINT {con
4b80: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20  straint failed} 
4b90: 5c 0a 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  \.SQLITE_MISMATC
4ba0: 48 20 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69  H   {datatype mi
4bb0: 73 6d 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45  smatch} \.SQLITE
4bc0: 5f 4d 49 53 55 53 45 20 20 20 20 20 7b 62 61 64  _MISUSE     {bad
4bd0: 20 70 61 72 61 6d 65 74 65 72 20 6f 72 20 6f 74   parameter or ot
4be0: 68 65 72 20 41 50 49 20 6d 69 73 75 73 65 7d 20  her API misuse} 
4bf0: 5c 0a 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20  \.SQLITE_AUTH   
4c00: 20 20 20 20 7b 61 75 74 68 6f 72 69 7a 61 74 69      {authorizati
4c10: 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c  on denied} \.SQL
4c20: 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b  ITE_RANGE      {
4c30: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74  column index out
4c40: 20 6f 66 20 72 61 6e 67 65 7d 20 5c 0a 53 51 4c   of range} \.SQL
4c50: 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 7b  ITE_NOTADB     {
4c60: 66 69 6c 65 20 69 73 20 6e 6f 74 20 61 20 64 61  file is not a da
4c70: 74 61 62 61 73 65 7d 20 5c 0a 75 6e 6b 6e 6f 77  tabase} \.unknow
4c80: 6e 65 72 72 6f 72 20 20 20 20 20 20 7b 75 6e 6b  nerror      {unk
4c90: 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a 5d 0a  nown error} \.].
4ca0: 0a 73 65 74 20 74 65 73 74 5f 6e 75 6d 62 65 72  .set test_number
4cb0: 20 31 0a 66 6f 72 65 61 63 68 20 7b 63 6f 64 65   1.foreach {code
4cc0: 20 65 6e 67 6c 69 73 68 7d 20 24 63 6f 64 65 32   english} $code2
4cd0: 65 6e 67 6c 69 73 68 20 7b 0a 20 20 64 6f 5f 74  english {.  do_t
4ce0: 65 73 74 20 63 61 70 69 33 63 2d 39 2e 24 74 65  est capi3c-9.$te
4cf0: 73 74 5f 6e 75 6d 62 65 72 20 22 73 71 6c 69 74  st_number "sqlit
4d00: 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20 24  e3_test_errstr $
4d10: 63 6f 64 65 22 20 24 65 6e 67 6c 69 73 68 0a 20  code" $english. 
4d20: 20 69 6e 63 72 20 74 65 73 74 5f 6e 75 6d 62 65   incr test_numbe
4d30: 72 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20  r.}..# Test the 
4d40: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 68  error message wh
4d50: 65 6e 20 61 20 22 72 65 61 6c 22 20 6f 75 74 20  en a "real" out 
4d60: 6f 66 20 6d 65 6d 6f 72 79 20 6f 63 63 75 72 73  of memory occurs
4d70: 2e 0a 69 66 20 7b 20 5b 70 65 72 6d 75 74 61 74  ..if { [permutat
4d80: 69 6f 6e 5d 20 21 3d 20 22 6e 6f 66 61 75 6c 74  ion] != "nofault
4d90: 73 69 6d 22 20 7d 20 7b 0a 20 20 64 6f 5f 74 65  sim" } {.  do_te
4da0: 73 74 20 63 61 70 69 33 63 2d 31 30 2d 31 20 7b  st capi3c-10-1 {
4db0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4dc0: 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20  test.db.    set 
4dd0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
4de0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
4df0: 62 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  b].    sqlite3_m
4e00: 65 6d 64 65 62 75 67 5f 66 61 69 6c 20 30 0a 20  emdebug_fail 0. 
4e10: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
4e20: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
4e30: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
4e40: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6f  .    }.  } {1 {o
4e50: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 20  ut of memory}}. 
4e60: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
4e70: 31 30 2d 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  10-2 {.    sqlit
4e80: 65 33 5f 65 72 72 6d 73 67 20 24 3a 3a 44 42 0a  e3_errmsg $::DB.
4e90: 20 20 7d 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f    } {out of memo
4ea0: 72 79 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20  ry}.  ifcapable 
4eb0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 64 6f  {utf16} {.    do
4ec0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d  _test capi3c-10-
4ed0: 33 20 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b  3 {.      utf8 [
4ee0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
4ef0: 20 24 3a 3a 44 42 5d 0a 20 20 20 20 7d 20 7b 6f   $::DB].    } {o
4f00: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20 20  ut of memory}.  
4f10: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  }.  db close.  s
4f20: 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62 75 67 5f  qlite3_memdebug_
4f30: 66 61 69 6c 20 2d 31 0a 7d 0a 0a 23 20 54 68 65  fail -1.}..# The
4f40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
4f50: 20 2d 20 63 61 70 69 33 63 2d 31 31 2e 2a 20 2d   - capi3c-11.* -
4f60: 20 74 65 73 74 20 74 68 61 74 20 61 20 43 4f 4d   test that a COM
4f70: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a  MIT or ROLLBACK.
4f80: 23 20 73 74 61 74 65 6d 65 6e 74 20 69 73 73 75  # statement issu
4f90: 65 64 20 77 68 69 6c 65 20 74 68 65 72 65 20 61  ed while there a
4fa0: 72 65 20 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e  re still outstan
4fb0: 64 69 6e 67 20 56 4d 73 20 74 68 61 74 20 61 72  ding VMs that ar
4fc0: 65 20 70 61 72 74 20 6f 66 0a 23 20 74 68 65 20  e part of.# the 
4fd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c  transaction fail
4fe0: 73 2e 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65  s..sqlite3 db te
4ff0: 73 74 2e 64 62 0a 73 65 74 20 44 42 20 5b 73 71  st.db.set DB [sq
5000: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
5010: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c  _pointer db].sql
5020: 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73  ite_register_tes
5030: 74 5f 66 75 6e 63 74 69 6f 6e 20 24 44 42 20 66  t_function $DB f
5040: 75 6e 63 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  unc.do_test capi
5050: 33 63 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63  3c-11.1 {.  exec
5060: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
5070: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
5080: 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20  E t1(a, b);.    
5090: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
50a0: 41 4c 55 45 53 28 31 2c 20 27 69 6e 74 27 29 3b  ALUES(1, 'int');
50b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
50c0: 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20 27 6e   t1 VALUES(2, 'n
50d0: 6f 74 61 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d  otatype');.  }.}
50e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69   {}.do_test capi
50f0: 33 63 2d 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71  3c-11.1.1 {.  sq
5100: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
5110: 6d 6d 69 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f  mmit $DB.} 0.do_
5120: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5130: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
5140: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5150: 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 66 75  2 $DB "SELECT fu
5160: 6e 63 28 62 2c 20 61 29 20 46 52 4f 4d 20 74 31  nc(b, a) FROM t1
5170: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  " -1 TAIL].  sql
5180: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
5190: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a  } {SQLITE_ROW}..
51a0: 23 20 41 73 20 6f 66 20 33 2e 36 2e 35 20 61 20  # As of 3.6.5 a 
51b0: 43 4f 4d 4d 49 54 20 69 73 20 4f 4b 20 64 75 72  COMMIT is OK dur
51c0: 69 6e 67 20 77 68 69 6c 65 20 61 20 71 75 65 72  ing while a quer
51d0: 79 20 69 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69  y is still runni
51e0: 6e 67 20 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61  ng -.# as long a
51f0: 73 20 69 74 20 69 73 20 61 20 72 65 61 64 2d 6f  s it is a read-o
5200: 6e 6c 79 20 71 75 65 72 79 20 61 6e 64 20 6e 6f  nly query and no
5210: 74 20 61 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c  t an incremental
5220: 20 42 4c 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64   BLOB write..#.d
5230: 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e  o_test capi3-11.
5240: 33 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  3.1 {.  catchsql
5250: 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20   {.    COMMIT;. 
5260: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5270: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 32  est capi3-11.3.2
5280: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74   {.  sqlite3_ext
5290: 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44  ended_errcode $D
52a0: 42 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  B.} {SQLITE_OK}.
52b0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 2d 31 31  do_test capi3-11
52c0: 2e 33 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  .3.3 {.  sqlite3
52d0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
52e0: 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  $DB.} 1.do_test 
52f0: 63 61 70 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20  capi3-11.3.4 {. 
5300: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
5310: 20 6c 6f 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20   lock_status}.} 
5320: 7b 6d 61 69 6e 20 73 68 61 72 65 64 20 74 65 6d  {main shared tem
5330: 70 20 63 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65  p closed}..do_te
5340: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 34 20 7b  st capi3c-11.4 {
5350: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5360: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5370: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63  ERROR}.do_test c
5380: 61 70 69 33 63 2d 31 31 2e 35 20 7b 0a 20 20 73  api3c-11.5 {.  s
5390: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
53a0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
53b0: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63  ERROR}.do_test c
53c0: 61 70 69 33 63 2d 31 31 2e 36 20 7b 0a 20 20 63  api3c-11.6 {.  c
53d0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
53e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
53f0: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20    }.} {0 {1 int 
5400: 32 20 6e 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f  2 notatype}}.do_
5410: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 37  test capi3c-11.7
5420: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
5430: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
5440: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 1.do_test capi
5450: 33 63 2d 31 31 2e 38 20 7b 0a 20 20 65 78 65 63  3c-11.8 {.  exec
5460: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5470: 20 54 41 42 4c 45 20 74 32 28 61 29 3b 0a 20 20   TABLE t2(a);.  
5480: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5490: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
54a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
54b0: 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 42 45  ALUES(2);.    BE
54c0: 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  GIN;.    INSERT 
54d0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33  INTO t2 VALUES(3
54e0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
54f0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 38 2e  est capi3c-11.8.
5500: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  1 {.  sqlite3_ge
5510: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5520: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 0.do_test cap
5530: 69 33 63 2d 31 31 2e 39 20 7b 0a 20 20 73 65 74  i3c-11.9 {.  set
5540: 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70   STMT [sqlite3_p
5550: 72 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53  repare_v2 $DB "S
5560: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 22  ELECT a FROM t2"
5570: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
5580: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5590: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
55a0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
55b0: 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.1 {.  sqlite3_
55c0: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24  get_autocommit $
55d0: 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63  DB.} 0.do_test c
55e0: 61 70 69 33 63 2d 31 31 2e 39 2e 32 20 7b 0a 20  api3c-11.9.2 {. 
55f0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5600: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
5610: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  {0 {}}.do_test c
5620: 61 70 69 33 63 2d 31 31 2e 39 2e 33 20 7b 0a 20  api3c-11.9.3 {. 
5630: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
5640: 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a  ocommit $DB.} 1.
5650: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5660: 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.10 {.  sqlite3
5670: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5680: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
5690: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 31 20  st capi3c-11.11 
56a0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
56b0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
56c0: 5f 44 4f 4e 45 7d 0a 69 66 63 61 70 61 62 6c 65  _DONE}.ifcapable
56d0: 20 21 61 75 74 6f 72 65 73 65 74 20 7b 0a 20 20   !autoreset {.  
56e0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
56f0: 31 2e 31 32 61 72 6d 6f 72 20 7b 0a 20 20 20 20  1.12armor {.    
5700: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5710: 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  MT.    sqlite3_s
5720: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
5730: 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 7d 20  QLITE_MISUSE}.} 
5740: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
5750: 20 63 61 70 69 33 63 2d 31 31 2e 31 32 20 7b 0a   capi3c-11.12 {.
5760: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
5770: 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74   $STMT.    sqlit
5780: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
5790: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 7d  } {SQLITE_ROW}.}
57a0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
57b0: 31 31 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  11.13 {.  sqlite
57c0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
57d0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
57e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
57f0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
5800: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
5810: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t2;.  }.} {1
5820: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69   2}.do_test capi
5830: 33 63 2d 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73  3c-11.14.1 {.  s
5840: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5850: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5860: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5870: 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  15 {.  catchsql 
5880: 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  {.    ROLLBACK;.
5890: 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74    }.} {1 {cannot
58a0: 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
58b0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
58c0: 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63  tive}}.do_test c
58d0: 61 70 69 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a  api3c-11.15.1 {.
58e0: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
58f0: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5900: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5910: 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  11.16 {.  execsq
5920: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
5930: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
5940: 7b 31 20 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20  {1 2}..# Sanity 
5950: 63 68 65 63 6b 20 6f 6e 20 74 68 65 20 64 65 66  check on the def
5960: 69 6e 69 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73  inition of 'outs
5970: 74 61 6e 64 69 6e 67 20 56 4d 27 2e 20 54 68 69  tanding VM'. Thi
5980: 73 20 6d 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23  s means any VM.#
5990: 20 74 68 61 74 20 68 61 73 20 68 61 64 20 73 71   that has had sq
59a0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
59b0: 6c 65 64 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c  led more recentl
59c0: 79 20 74 68 61 6e 20 73 71 6c 69 74 65 33 5f 66  y than sqlite3_f
59d0: 69 6e 61 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73  inalize() or.# s
59e0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2e 20  qlite3_reset(). 
59f0: 53 6f 20 61 20 56 4d 20 74 68 61 74 20 68 61 73  So a VM that has
5a00: 20 6a 75 73 74 20 62 65 65 6e 20 70 72 65 70 61   just been prepa
5a10: 72 65 64 20 6f 72 20 72 65 73 65 74 20 64 6f 65  red or reset doe
5a20: 73 20 6e 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73  s not.# count as
5a30: 20 61 6e 20 61 63 74 69 76 65 20 56 4d 2e 0a 64   an active VM..d
5a40: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5a50: 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .17 {.  execsql 
5a60: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d  {.    BEGIN;.  }
5a70: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  .} {}.do_test ca
5a80: 70 69 33 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73  pi3c-11.18 {.  s
5a90: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
5aa0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
5ab0: 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  "SELECT a FROM t
5ac0: 31 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61  1" -1 TAIL].  ca
5ad0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  tchsql {.    COM
5ae0: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5af0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5b00: 2d 31 31 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74  -11.19 {.  sqlit
5b10: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
5b20: 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f  {SQLITE_ROW}.do_
5b30: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5b40: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
5b50: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
5b60: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30  COMMIT;.  }.} {0
5b70: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70   {}}.do_test cap
5b80: 69 33 63 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71  i3c-11.20 {.  sq
5b90: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
5ba0: 54 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  T.  catchsql {. 
5bb0: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d     COMMIT;.  }.}
5bc0: 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d   {1 {cannot comm
5bd0: 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
5be0: 69 6f 6e 20 69 73 20 61 63 74 69 76 65 7d 7d 0a  ion is active}}.
5bf0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
5c00: 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.21 {.  sqlite3
5c10: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
5c20: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23  } {SQLITE_OK}..#
5c30: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
5c40: 65 73 74 73 20 2d 20 63 61 70 69 33 63 2d 31 32  ests - capi3c-12
5c50: 2e 2a 20 2d 20 63 68 65 63 6b 20 74 68 61 74 20  .* - check that 
5c60: 69 74 73 20 4f 6b 20 74 6f 20 73 74 61 72 74 20  its Ok to start 
5c70: 61 0a 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  a.# transaction 
5c80: 77 68 69 6c 65 20 6f 74 68 65 72 20 56 4d 73 20  while other VMs 
5c90: 61 72 65 20 61 63 74 69 76 65 2c 20 61 6e 64 20  are active, and 
5ca0: 74 68 61 74 20 69 74 73 20 4f 6b 20 74 6f 20 65  that its Ok to e
5cb0: 78 65 63 75 74 65 0a 23 20 61 74 6f 6d 69 63 20  xecute.# atomic 
5cc0: 75 70 64 61 74 65 73 20 69 6e 20 74 68 65 20 73  updates in the s
5cd0: 61 6d 65 20 73 69 74 75 61 74 69 6f 6e 20 0a 23  ame situation .#
5ce0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5cf0: 31 32 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d  12.1 {.  set STM
5d00: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5d10: 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45 43  re_v2 $DB "SELEC
5d20: 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31 20  T a FROM t2" -1 
5d30: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
5d40: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5d50: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5d60: 74 20 63 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a  t capi3c-12.2 {.
5d70: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5d80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
5d90: 56 41 4c 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b  VALUES(3, NULL);
5da0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5db0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5dc0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
5dd0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5de0: 20 74 32 20 56 41 4c 55 45 53 28 34 29 3b 0a 20   t2 VALUES(4);. 
5df0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5e00: 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e 34 20  est capi3c-12.4 
5e10: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5e20: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e     BEGIN;.    IN
5e30: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5e40: 55 45 53 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(4, NULL);.  
5e50: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5e60: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 35 20 7b  st capi3c-12.5 {
5e70: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
5e80: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
5e90: 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  ROW}.do_test cap
5ea0: 69 33 63 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73  i3c-12.5.1 {.  s
5eb0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
5ec0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
5ed0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5ee0: 31 32 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  12.6 {.  sqlite3
5ef0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5f00: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74  QLITE_DONE}.do_t
5f10: 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e 37 20  est capi3c-12.7 
5f20: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
5f30: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
5f40: 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74  LITE_OK}.do_test
5f50: 20 63 61 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20   capi3c-12.8 {. 
5f60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
5f70: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
5f80: 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T a FROM t1;.  }
5f90: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20  .} {1 2 3 4}..# 
5fa0: 54 65 73 74 20 63 61 73 65 73 20 63 61 70 69 33  Test cases capi3
5fb0: 63 2d 31 33 2e 2a 20 74 65 73 74 20 74 68 65 20  c-13.* test the 
5fc0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
5fd0: 6e 64 69 6e 67 73 28 29 20 61 6e 64 20 0a 23 20  ndings() and .# 
5fe0: 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 41 50  sqlite3_sleep AP
5ff0: 49 73 2e 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67  Is..#.if {[lleng
6000: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64  th [info command
6010: 73 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  s sqlite3_clear_
6020: 62 69 6e 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a  bindings]]>0} {.
6030: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
6040: 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -13.1 {.    exec
6050: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
6060: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
6070: 7d 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  }.    set STMT [
6080: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
6090: 76 32 20 24 44 42 20 22 49 4e 53 45 52 54 20 49  v2 $DB "INSERT I
60a0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3f 2c  NTO t1 VALUES(?,
60b0: 20 3f 29 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20   ?)" -1 TAIL].  
60c0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
60d0: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
60e0: 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74  _DONE}.  do_test
60f0: 20 63 61 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20   capi3c-13.2 {. 
6100: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74     sqlite3_reset
6110: 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c 69 74   $STMT.    sqlit
6120: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 53 54  e3_bind_text $ST
6130: 4d 54 20 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20  MT 1 hello 5.   
6140: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
6150: 78 74 20 24 53 54 4d 54 20 32 20 77 6f 72 6c 64  xt $STMT 2 world
6160: 20 35 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   5.    sqlite3_s
6170: 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  tep $STMT.  } {S
6180: 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f  QLITE_DONE}.  do
6190: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33 2e  _test capi3c-13.
61a0: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  3 {.    sqlite3_
61b0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 20 20  reset $STMT.    
61c0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
61d0: 6e 64 69 6e 67 73 20 24 53 54 4d 54 0a 20 20 20  ndings $STMT.   
61e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
61f0: 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  TMT.  } {SQLITE_
6200: 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  DONE}.  do_test 
6210: 63 61 70 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20  capi3c-13-4 {.  
6220: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
6230: 7a 65 20 24 53 54 4d 54 0a 20 20 20 20 65 78 65  ze $STMT.    exe
6240: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
6250: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
6260: 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20     }.  } {{} {} 
6270: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b  hello world {} {
6280: 7d 7d 0a 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74  }}.}.if {[llengt
6290: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73  h [info commands
62a0: 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d   sqlite3_sleep]]
62b0: 3e 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  >0} {.  do_test 
62c0: 63 61 70 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20  capi3c-13-5 {.  
62d0: 20 20 73 65 74 20 6d 73 20 5b 73 71 6c 69 74 65    set ms [sqlite
62e0: 33 5f 73 6c 65 65 70 20 38 30 5d 0a 20 20 20 20  3_sleep 80].    
62f0: 65 78 70 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c  expr {$ms==80 ||
6300: 20 24 6d 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20   $ms==1000}.  } 
6310: 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20  {1}.}..# Ticket 
6320: 23 31 32 31 39 3a 20 20 4d 61 6b 65 20 73 75 72  #1219:  Make sur
6330: 65 20 62 69 6e 64 69 6e 67 20 41 50 49 73 20 63  e binding APIs c
6340: 61 6e 20 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c  an handle a NULL
6350: 20 70 6f 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74   pointer..#.do_t
6360: 65 73 74 20 63 61 70 69 33 63 2d 31 34 2e 31 20  est capi3c-14.1 
6370: 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  {.  set rc [catc
6380: 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  h {sqlite3_bind_
6390: 74 65 78 74 20 30 20 31 20 68 65 6c 6c 6f 20 35  text 0 1 hello 5
63a0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
63b0: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51   rc $msg.} {1 SQ
63c0: 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20  LITE_MISUSE}..# 
63d0: 54 69 63 6b 65 74 20 23 31 36 35 30 3a 20 20 48  Ticket #1650:  H
63e0: 6f 6e 6f 72 20 74 68 65 20 6e 42 79 74 65 73 20  onor the nBytes 
63f0: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
6400: 69 74 65 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a  ite3_prepare..#.
6410: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6420: 35 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20  5.1 {.  set sql 
6430: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
6440: 32 7d 0a 20 20 73 65 74 20 6e 62 79 74 65 73 20  2}.  set nbytes 
6450: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
6460: 73 71 6c 5d 0a 20 20 61 70 70 65 6e 64 20 73 71  sql].  append sq
6470: 6c 20 7b 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a  l { WHERE a==1}.
6480: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6490: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
64a0: 44 42 20 24 73 71 6c 20 24 6e 62 79 74 65 73 20  DB $sql $nbytes 
64b0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
64c0: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c  step $STMT.  sql
64d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
64e0: 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f  $STMT 0.} {1}.do
64f0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e  _test capi3c-15.
6500: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6510: 65 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74  ep $STMT.  sqlit
6520: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6530: 54 4d 54 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  TMT 0.} {2}.do_t
6540: 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 33 20  est capi3c-15.3 
6550: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
6560: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51  lize $STMT.} {SQ
6570: 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65  LITE_OK}..# Make
6580: 20 73 75 72 65 20 63 6f 64 65 20 69 73 20 61 6c   sure code is al
6590: 77 61 79 73 20 67 65 6e 65 72 61 74 65 64 20 65  ways generated e
65a0: 76 65 6e 20 69 66 20 61 6e 20 49 46 20 45 58 49  ven if an IF EXI
65b0: 53 54 53 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54  STS or .# IF NOT
65c0: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
65d0: 73 20 70 72 65 73 65 6e 74 20 74 68 61 74 20 74  s present that t
65e0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
65f0: 74 20 6f 72 0a 23 20 64 6f 65 73 20 65 78 69 73  t or.# does exis
6600: 74 73 2e 20 20 54 68 61 74 20 77 61 79 20 77 65  ts.  That way we
6610: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 68 61 76   will always hav
6620: 65 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  e a prepared sta
6630: 74 65 6d 65 6e 74 0a 23 20 74 6f 20 65 78 70 69  tement.# to expi
6640: 72 65 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  re when the sche
6650: 6d 61 20 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f  ma changes..#.do
6660: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 36 2e  _test capi3c-16.
6670: 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 44  1 {.  set sql {D
6680: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
6690: 53 54 53 20 74 33 7d 0a 20 20 73 65 74 20 53 54  STS t3}.  set ST
66a0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
66b0: 61 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20  are_v2 $DB $sql 
66c0: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
66d0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
66e0: 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54 21  T.  expr {$STMT!
66f0: 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  =""}.} {1}.do_te
6700: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 32 20 7b  st capi3c-16.2 {
6710: 0a 20 20 73 65 74 20 73 71 6c 20 7b 43 52 45 41  .  set sql {CREA
6720: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
6730: 45 58 49 53 54 53 20 74 31 28 78 2c 79 29 7d 0a  EXISTS t1(x,y)}.
6740: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6750: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
6760: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
6770: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
6780: 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72  ize $STMT.  expr
6790: 20 7b 24 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b   {$STMT!=""}.} {
67a0: 31 7d 0a 0a 23 20 42 75 74 20 73 74 69 6c 6c 20  1}..# But still 
67b0: 77 65 20 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61  we do not genera
67c0: 74 65 20 63 6f 64 65 20 69 66 20 74 68 65 72 65  te code if there
67d0: 20 69 73 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f   is no SQL.#.do_
67e0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 36 2e 33  test capi3c-16.3
67f0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
6800: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6810: 32 20 24 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c  2 $DB {} -1 TAIL
6820: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ].  sqlite3_fina
6830: 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 65 78 70  lize $STMT.  exp
6840: 72 20 7b 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20  r {$STMT==""}.} 
6850: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {1}.do_test capi
6860: 33 63 2d 31 36 2e 34 20 7b 0a 20 20 73 65 74 20  3c-16.4 {.  set 
6870: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
6880: 65 70 61 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d  epare_v2 $DB {;}
6890: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
68a0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
68b0: 4d 54 0a 20 20 65 78 70 72 20 7b 24 53 54 4d 54  MT.  expr {$STMT
68c0: 3d 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54  ==""}.} {1}..# T
68d0: 69 63 6b 65 74 20 23 32 31 35 34 2e 0a 23 0a 64  icket #2154..#.d
68e0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
68f0: 2e 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20  .1 {.  set STMT 
6900: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6910: 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20  _v2 $DB {SELECT 
6920: 6d 61 78 28 61 29 20 46 52 4f 4d 20 74 32 7d 20  max(a) FROM t2} 
6930: 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74  -1 TAIL].  sqlit
6940: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6950: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6960: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 32 20 7b  st capi3c-17.2 {
6970: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6980: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6990: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
69a0: 2d 31 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -17.3 {.  sqlite
69b0: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
69c0: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
69d0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 34 20 7b  st capi3c-17.4 {
69e0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
69f0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6a00: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
6a10: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 20 20 73 71  2 ON t2(a)}.  sq
6a20: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6a30: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6a40: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6a50: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  5 {.  sqlite3_co
6a60: 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30  lumn_int $STMT 0
6a70: 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 4.do_test cap
6a80: 69 33 63 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c  i3c-17.6 {.  sql
6a90: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6aa0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
6ab0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6ac0: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  7 {.  sqlite3_re
6ad0: 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62 20 65  set $STMT.  db e
6ae0: 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  val {DROP INDEX 
6af0: 69 32 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  i2}.  sqlite3_st
6b00: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6b10: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
6b20: 70 69 33 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71  pi3c-17.8 {.  sq
6b30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6b40: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
6b50: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 39  test capi3c-17.9
6b60: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   {.  sqlite3_ste
6b70: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6b80: 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61  _DONE.do_test ca
6b90: 70 69 33 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73  pi3c-17.10 {.  s
6ba0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6bb0: 24 53 54 4d 54 0a 20 20 73 65 74 20 53 54 4d 54  $STMT.  set STMT
6bc0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
6bd0: 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54  e_v2 $DB {SELECT
6be0: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
6bf0: 20 61 3d 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20   a=?} -1 TAIL]. 
6c00: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
6c10: 74 20 24 53 54 4d 54 20 31 20 32 0a 20 20 64 62  t $STMT 1 2.  db
6c20: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45   eval {.    DELE
6c30: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
6c40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
6c50: 41 4c 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a  ALUES(1,'one');.
6c60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6c70: 74 31 20 56 41 4c 55 45 53 28 32 2c 27 74 77 6f  t1 VALUES(2,'two
6c80: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
6c90: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
6ca0: 27 74 68 72 65 65 27 29 3b 0a 20 20 20 20 49 4e  'three');.    IN
6cb0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
6cc0: 55 45 53 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20  UES(4,'four');. 
6cd0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65   }.  sqlite3_ste
6ce0: 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  p $STMT.} SQLITE
6cf0: 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70  _ROW.do_test cap
6d00: 69 33 63 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71  i3c-17.11 {.  sq
6d10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6d20: 74 20 24 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a  t $STMT 0.} two.
6d30: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6d40: 37 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.12 {.  sqlite3
6d50: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6d60: 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73  LITE_DONE.do_tes
6d70: 74 20 63 61 70 69 33 63 2d 31 37 2e 31 33 20 7b  t capi3c-17.13 {
6d80: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6d90: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6da0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
6db0: 31 20 4f 4e 20 74 31 28 61 29 7d 0a 20 20 73 71  1 ON t1(a)}.  sq
6dc0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6dd0: 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f  .} SQLITE_ROW.do
6de0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6df0: 31 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  14 {.  sqlite3_c
6e00: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
6e10: 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74   0.} two.do_test
6e20: 20 63 61 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a   capi3c-17.15 {.
6e30: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6e40: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6e50: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6e60: 63 2d 31 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69  c-17.16 {.  sqli
6e70: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
6e80: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
6e90: 49 4e 44 45 58 20 69 31 7d 0a 20 20 73 71 6c 69  INDEX i1}.  sqli
6ea0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
6eb0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74   SQLITE_ROW.do_t
6ec0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 37  est capi3c-17.17
6ed0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c   {.  sqlite3_col
6ee0: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30  umn_text $STMT 0
6ef0: 0a 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63  .} two.do_test c
6f00: 61 70 69 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20  api3c-17.18 {.  
6f10: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
6f20: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
6f30: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6f40: 31 37 2e 39 39 20 7b 0a 20 20 73 71 6c 69 74 65  17.99 {.  sqlite
6f50: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
6f60: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20  .} SQLITE_OK..# 
6f70: 4f 6e 20 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c  On the mailing l
6f80: 69 73 74 20 69 74 20 68 61 73 20 62 65 65 6e 20  ist it has been 
6f90: 72 65 70 6f 72 74 65 64 20 74 68 61 74 20 66 69  reported that fi
6fa0: 6e 61 6c 69 7a 69 6e 67 20 61 66 74 65 72 0a 23  nalizing after.#
6fb0: 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20   an SQLITE_BUSY 
6fc0: 72 65 74 75 72 6e 20 6c 65 61 64 73 20 74 6f 20  return leads to 
6fd0: 61 20 73 65 67 66 61 75 6c 74 2e 20 20 48 65 72  a segfault.  Her
6fe0: 65 20 77 65 20 74 65 73 74 20 74 68 61 74 20 63  e we test that c
6ff0: 61 73 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  ase..#.do_test c
7000: 61 70 69 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73  api3c-18.1 {.  s
7010: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7020: 64 62 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  db.  set STMT [s
7030: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7040: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61  2 $DB {SELECT ma
7050: 78 28 61 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31  x(a) FROM t1} -1
7060: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7070: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7080: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
7090: 20 63 61 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20   capi3c-18.2 {. 
70a0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
70b0: 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a  int $STMT 0.} 4.
70c0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
70d0: 38 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.3 {.  sqlite3_
70e0: 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64 62  reset $STMT.  db
70f0: 32 20 65 76 61 6c 20 7b 42 45 47 49 4e 20 45 58  2 eval {BEGIN EX
7100: 43 4c 55 53 49 56 45 7d 0a 20 20 73 71 6c 69 74  CLUSIVE}.  sqlit
7110: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
7120: 53 51 4c 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74  SQLITE_BUSY.do_t
7130: 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 34 20  est capi3c-18.4 
7140: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
7150: 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c  lize $STMT.} SQL
7160: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
7170: 20 63 61 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20   capi3c-18.5 {. 
7180: 20 64 62 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49   db2 eval {COMMI
7190: 54 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d  T}.  db2 close.}
71a0: 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32   {}..# Ticket #2
71b0: 31 35 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65  158.  The sqlite
71c0: 33 5f 73 74 65 70 28 29 20 77 69 6c 6c 20 73 74  3_step() will st
71d0: 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ill return SQLIT
71e0: 45 5f 53 43 48 45 4d 41 0a 23 20 69 66 20 74 68  E_SCHEMA.# if th
71f0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7200: 61 20 63 68 61 6e 67 65 73 20 69 6e 20 61 20 77  a changes in a w
7210: 61 79 20 74 68 61 74 20 6d 61 6b 65 73 20 74 68  ay that makes th
7220: 65 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f  e statement.# no
7230: 20 6c 6f 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23   longer valid..#
7240: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7250: 31 39 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  19.1 {.  db eval
7260: 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45 20 54   {.     CREATE T
7270: 41 42 4c 45 20 74 33 28 78 2c 79 29 3b 0a 20 20  ABLE t3(x,y);.  
7280: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7290: 33 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20  3 VALUES(1,2);. 
72a0: 20 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   }.  set STMT [s
72b0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
72c0: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a 20  2 $DB {SELECT * 
72d0: 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c  FROM t3} -1 TAIL
72e0: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
72f0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7300: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
7310: 33 63 2d 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-19.2 {.  sqli
7320: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
7330: 53 54 4d 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65  STMT 0.} 1.do_te
7340: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 33 20 7b  st capi3c-19.3 {
7350: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7360: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
7370: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
7380: 33 63 2d 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69  3c-19.4 {.  sqli
7390: 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a  te3_reset $STMT.
73a0: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
73b0: 54 41 42 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69  TABLE t3}.  sqli
73c0: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
73d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f   SQLITE_ERROR.do
73e0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
73f0: 34 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.1 {.  sqlite3_
7400: 65 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f  errmsg $DB.} {no
7410: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 33 7d   such table: t3}
7420: 0a 69 66 63 61 70 61 62 6c 65 20 64 65 70 72 65  .ifcapable depre
7430: 63 61 74 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73  cated {.  do_tes
7440: 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 32 20  t capi3c-19.4.2 
7450: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  {.    sqlite3_ex
7460: 70 69 72 65 64 20 24 53 54 4d 54 0a 20 20 7d 20  pired $STMT.  } 
7470: 31 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  1.}.do_test capi
7480: 33 63 2d 31 39 2e 34 2e 33 20 7b 0a 20 20 73 71  3c-19.4.3 {.  sq
7490: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42  lite3_errmsg $DB
74a0: 0a 7d 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  .} {no such tabl
74b0: 65 3a 20 74 33 7d 0a 69 66 63 61 70 61 62 6c 65  e: t3}.ifcapable
74c0: 20 64 65 70 72 65 63 61 74 65 64 20 7b 0a 20 20   deprecated {.  
74d0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
74e0: 39 2e 34 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69  9.4.4 {.    sqli
74f0: 74 65 33 5f 65 78 70 69 72 65 64 20 30 0a 20 20  te3_expired 0.  
7500: 7d 20 31 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61  } 1.}.do_test ca
7510: 70 69 33 63 2d 31 39 2e 35 20 7b 0a 20 20 73 71  pi3c-19.5 {.  sq
7520: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53 54 4d  lite3_reset $STM
7530: 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  T.  db eval {.  
7540: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
7550: 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e  t3(x,y);.     IN
7560: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
7570: 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20  UES(1,2);.  }.  
7580: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7590: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a  MT.} SQLITE_ROW.
75a0: 69 66 63 61 70 61 62 6c 65 20 64 65 70 72 65 63  ifcapable deprec
75b0: 61 74 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ated {.  do_test
75c0: 20 63 61 70 69 33 63 2d 31 39 2e 35 2e 32 20 7b   capi3c-19.5.2 {
75d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70  .    sqlite3_exp
75e0: 69 72 65 64 20 24 53 54 4d 54 0a 20 20 7d 20 30  ired $STMT.  } 0
75f0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .}.do_test capi3
7600: 63 2d 31 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74  c-19.6 {.  sqlit
7610: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
7620: 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73  TMT 1.} 2.do_tes
7630: 74 20 63 61 70 69 33 63 2d 31 39 2e 39 39 20 7b  t capi3c-19.99 {
7640: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
7650: 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  ize $STMT.} SQLI
7660: 54 45 5f 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75  TE_OK..# Make su
7670: 72 65 20 61 20 63 68 61 6e 67 65 20 69 6e 20 61  re a change in a
7680: 20 73 65 70 61 72 61 74 65 20 64 61 74 61 62 61   separate databa
7690: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
76a0: 65 73 20 6e 6f 74 0a 23 20 63 61 75 73 65 20 61  es not.# cause a
76b0: 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
76c0: 72 65 74 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73  return..#.do_tes
76d0: 74 20 63 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a  t capi3c-20.1 {.
76e0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
76f0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7700: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7710: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7720: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
7730: 74 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20  t.db.  db2 eval 
7740: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34  {CREATE TABLE t4
7750: 28 78 29 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  (x)}.  sqlite3_s
7760: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
7770: 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63  TE_ROW.do_test c
7780: 61 70 69 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73  api3c-20.2 {.  s
7790: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
77a0: 74 20 24 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f  t $STMT 1.} 2.do
77b0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 30 2e  _test capi3c-20.
77c0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  3 {.  sqlite3_st
77d0: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
77e0: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
77f0: 61 70 69 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64  api3c-20.4 {.  d
7800: 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  b2 close.  sqlit
7810: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
7820: 54 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23  T.} SQLITE_OK..#
7830: 20 54 65 73 74 20 74 68 61 74 20 73 71 6c 69 74   Test that sqlit
7840: 65 33 5f 73 74 65 70 28 29 20 73 65 74 73 20 74  e3_step() sets t
7850: 68 65 20 64 61 74 61 62 61 73 65 20 65 72 72 6f  he database erro
7860: 72 20 63 6f 64 65 20 63 6f 72 72 65 63 74 6c 79  r code correctly
7870: 2e 0a 23 20 53 65 65 20 74 69 63 6b 65 74 20 23  ..# See ticket #
7880: 32 34 39 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c  2497..#.ifcapabl
7890: 65 20 70 72 6f 67 72 65 73 73 20 7b 0a 20 20 64  e progress {.  d
78a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31  o_test capi3c-21
78b0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d  .1 {.    set STM
78c0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
78d0: 72 65 5f 76 32 20 24 44 42 20 7b 53 45 4c 45 43  re_v2 $DB {SELEC
78e0: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20  T * FROM t3} -1 
78f0: 54 41 49 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f  TAIL].    db pro
7900: 67 72 65 73 73 20 35 20 22 65 78 70 72 20 31 22  gress 5 "expr 1"
7910: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
7920: 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  p $STMT.  } {SQL
7930: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
7940: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
7950: 32 31 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  21.2 {.    sqlit
7960: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
7970: 6f 64 65 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c  ode $DB.  } {SQL
7980: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20  ITE_INTERRUPT}. 
7990: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
79a0: 32 31 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74  21.3 {.    sqlit
79b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d  e3_finalize $STM
79c0: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e  T.  } {SQLITE_IN
79d0: 54 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65  TERRUPT}.  do_te
79e0: 73 74 20 63 61 70 69 33 63 2d 32 31 2e 34 20 7b  st capi3c-21.4 {
79f0: 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73  .    set STMT [s
7a00: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
7a10: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7a20: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7a30: 20 20 20 64 62 20 70 72 6f 67 72 65 73 73 20 35     db progress 5
7a40: 20 22 65 78 70 72 20 31 22 0a 20 20 20 20 73 71   "expr 1".    sq
7a50: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
7a60: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
7a70: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
7a80: 70 69 33 63 2d 32 31 2e 35 20 7b 0a 20 20 20 20  pi3c-21.5 {.    
7a90: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
7aa0: 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  $DB.  } {SQLITE_
7ab0: 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74  ERROR}.  do_test
7ac0: 20 63 61 70 69 33 63 2d 32 31 2e 36 20 7b 0a 20   capi3c-21.6 {. 
7ad0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
7ae0: 69 7a 65 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53  ize $STMT.  } {S
7af0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 7d  QLITE_INTERRUPT}
7b00: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7b10: 63 2d 32 31 2e 37 20 7b 0a 20 20 20 20 73 71 6c  c-21.7 {.    sql
7b20: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
7b30: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7b40: 45 52 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73  ERRUPT}.  do_tes
7b50: 74 20 63 61 70 69 33 63 2d 32 31 2e 38 20 7b 0a  t capi3c-21.8 {.
7b60: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
7b70: 6e 64 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42  nded_errcode $DB
7b80: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54  .  } {SQLITE_INT
7b90: 45 52 52 55 50 54 7d 0a 7d 0a 0a 23 20 4d 61 6b  ERRUPT}.}..# Mak
7ba0: 65 20 73 75 72 65 20 73 71 6c 69 74 65 33 5f 72  e sure sqlite3_r
7bb0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65  esult_error_code
7bc0: 28 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 63  () returns the c
7bd0: 6f 72 72 65 63 74 20 65 72 72 6f 72 20 63 6f 64  orrect error cod
7be0: 65 2e 0a 23 20 53 65 65 20 74 69 63 6b 65 74 20  e..# See ticket 
7bf0: 23 32 39 34 30 0a 23 0a 64 6f 5f 74 65 73 74 20  #2940.#.do_test 
7c00: 63 61 70 69 33 63 2d 32 32 2e 31 20 7b 0a 20 20  capi3c-22.1 {.  
7c10: 64 62 20 70 72 6f 67 72 65 73 73 20 30 20 7b 7d  db progress 0 {}
7c20: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
7c30: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
7c40: 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f  db {SELECT test_
7c50: 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61  error('the messa
7c60: 67 65 27 2c 33 29 7d 20 2d 31 20 54 41 49 4c 5d  ge',3)} -1 TAIL]
7c70: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7c80: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
7c90: 50 45 52 4d 7d 0a 73 71 6c 69 74 65 33 5f 66 69  PERM}.sqlite3_fi
7ca0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f  nalize $STMT.do_
7cb0: 74 65 73 74 20 63 61 70 69 33 63 2d 32 32 2e 32  test capi3c-22.2
7cc0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7cd0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7ce0: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73  2 db {SELECT tes
7cf0: 74 5f 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73  t_error('the mes
7d00: 73 61 67 65 27 2c 34 29 7d 20 2d 31 20 54 41 49  sage',4)} -1 TAI
7d10: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
7d20: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
7d30: 45 5f 41 42 4f 52 54 7d 0a 73 71 6c 69 74 65 33  E_ABORT}.sqlite3
7d40: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
7d50: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7d60: 32 2e 33 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  2.3 {.  set STMT
7d70: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
7d80: 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43 54 20  e_v2 db {SELECT 
7d90: 74 65 73 74 5f 65 72 72 6f 72 28 27 74 68 65 20  test_error('the 
7da0: 6d 65 73 73 61 67 65 27 2c 31 36 29 7d 20 2d 31  message',16)} -1
7db0: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
7dc0: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
7dd0: 51 4c 49 54 45 5f 45 4d 50 54 59 7d 0a 73 71 6c  QLITE_EMPTY}.sql
7de0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
7df0: 54 4d 54 0a 0a 23 20 46 6f 72 20 61 20 6d 75 6c  TMT..# For a mul
7e00: 74 69 2d 63 6f 6c 75 6d 6e 20 72 65 73 75 6c 74  ti-column result
7e10: 20 73 65 74 20 77 68 65 72 65 20 74 68 65 20 73   set where the s
7e20: 61 6d 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  ame table column
7e30: 20 69 73 20 72 65 70 65 61 74 65 64 0a 23 20 69   is repeated.# i
7e40: 6e 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d  n multiple colum
7e50: 6e 73 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  ns of the output
7e60: 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 64 6f  , verify that do
7e70: 69 6e 67 20 61 20 55 54 46 2d 38 20 74 6f 20 55  ing a UTF-8 to U
7e80: 54 46 2d 31 36 0a 23 20 63 6f 6e 76 65 72 73 69  TF-16.# conversi
7e90: 6f 6e 20 28 6f 72 20 76 69 63 65 20 76 65 72 73  on (or vice vers
7ea0: 61 29 20 6f 6e 20 6f 6e 65 20 63 6f 6c 75 6d 6e  a) on one column
7eb0: 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65   does not change
7ec0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 23 20   the value of.# 
7ed0: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 23 0a 69 66  the second..#.if
7ee0: 63 61 70 61 62 6c 65 20 75 74 66 31 36 20 7b 0a  capable utf16 {.
7ef0: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
7f00: 2d 32 33 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  -23.1 {.    set 
7f10: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
7f20: 65 70 61 72 65 5f 76 32 20 64 62 20 7b 53 45 4c  epare_v2 db {SEL
7f30: 45 43 54 20 62 2c 62 2c 62 2c 62 20 46 52 4f 4d  ECT b,b,b,b FROM
7f40: 20 74 31 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20   t1} -1 TAIL].  
7f50: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7f60: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
7f70: 5f 52 4f 57 7d 0a 20 20 64 6f 5f 74 65 73 74 20  _ROW}.  do_test 
7f80: 63 61 70 69 33 63 2d 32 33 2e 32 20 7b 0a 20 20  capi3c-23.2 {.  
7f90: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
7fa0: 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 30 0a  _text16 $STMT 0.
7fb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
7fc0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 31 0a  mn_text $STMT 1.
7fd0: 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74    } {one}.  do_t
7fe0: 65 73 74 20 63 61 70 69 33 63 2d 32 33 2e 33 20  est capi3c-23.3 
7ff0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  {.    sqlite3_co
8000: 6c 75 6d 6e 5f 74 65 78 74 31 36 20 24 53 54 4d  lumn_text16 $STM
8010: 54 20 32 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  T 2.    sqlite3_
8020: 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d  column_text $STM
8030: 54 20 33 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20  T 3.  } {one}.  
8040: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
8050: 20 24 53 54 4d 54 0a 20 20 64 6f 5f 74 65 73 74   $STMT.  do_test
8060: 20 63 61 70 69 33 63 2d 32 33 2e 34 20 7b 0a 20   capi3c-23.4 {. 
8070: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
8080: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
8090: 64 62 20 7b 53 45 4c 45 43 54 20 62 7c 7c 27 78  db {SELECT b||'x
80a0: 27 2c 62 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d  ',b,b,b FROM t1}
80b0: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71   -1 TAIL].    sq
80c0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
80d0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  .  } {SQLITE_ROW
80e0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  }.  do_test capi
80f0: 33 63 2d 32 33 2e 35 20 7b 0a 20 20 20 20 73 71  3c-23.5 {.    sq
8100: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
8110: 74 31 36 20 24 53 54 4d 54 20 30 0a 20 20 20 20  t16 $STMT 0.    
8120: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8130: 65 78 74 20 24 53 54 4d 54 20 31 0a 20 20 7d 20  ext $STMT 1.  } 
8140: 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {one}.  do_test 
8150: 63 61 70 69 33 63 2d 32 33 2e 36 20 7b 0a 20 20  capi3c-23.6 {.  
8160: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
8170: 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 32 0a  _text16 $STMT 2.
8180: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
8190: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 33 0a  mn_text $STMT 3.
81a0: 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69    } {one}.  sqli
81b0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
81c0: 4d 54 0a 7d 0a 0a 23 20 54 65 73 74 20 64 65 63  MT.}..# Test dec
81d0: 6c 74 79 70 65 20 6f 6e 20 73 6f 6d 65 20 53 45  ltype on some SE
81e0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
81f0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 73 75 62  that contain sub
8200: 2d 73 65 6c 65 63 74 73 2e 0a 23 0a 70 72 6f 63  -selects..#.proc
8210: 20 64 65 63 6c 74 79 70 65 20 7b 7a 53 71 6c 7d   decltype {zSql}
8220: 20 7b 0a 20 20 73 65 74 20 72 65 74 20 5b 6c 69   {.  set ret [li
8230: 73 74 5d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  st].  set STMT [
8240: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
8250: 76 32 20 64 62 20 24 7a 53 71 6c 20 2d 31 20 54  v2 db $zSql -1 T
8260: 41 49 4c 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  AIL].  for {set 
8270: 69 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69  i 0} {$i < [sqli
8280: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
8290: 20 24 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69   $STMT]} {incr i
82a0: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
82b0: 72 65 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ret [sqlite3_col
82c0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 24 53 54  umn_decltype $ST
82d0: 4d 54 20 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c  MT $i].  }.  sql
82e0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
82f0: 54 4d 54 0a 20 20 72 65 74 75 72 6e 20 24 72 65  TMT.  return $re
8300: 74 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  t.}.do_test capi
8310: 33 63 2d 32 34 2e 31 20 7b 0a 20 20 65 78 65 63  3c-24.1 {.  exec
8320: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42  sql { CREATE TAB
8330: 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52 2c  LE t5(a INTEGER,
8340: 20 62 20 53 54 52 49 4e 47 2c 20 63 20 44 41 54   b STRING, c DAT
8350: 45 54 49 4d 45 29 20 7d 0a 20 20 64 65 63 6c 74  ETIME) }.  declt
8360: 79 70 65 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  ype {SELECT * FR
8370: 4f 4d 20 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45  OM t5}.} {INTEGE
8380: 52 20 53 54 52 49 4e 47 20 44 41 54 45 54 49 4d  R STRING DATETIM
8390: 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  E}.do_test capi3
83a0: 63 2d 32 34 2e 32 20 7b 0a 20 20 64 65 63 6c 74  c-24.2 {.  declt
83b0: 79 70 65 20 7b 53 45 4c 45 43 54 20 28 53 45 4c  ype {SELECT (SEL
83c0: 45 43 54 20 63 29 20 46 52 4f 4d 20 74 35 7d 0a  ECT c) FROM t5}.
83d0: 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f  } {DATETIME}.do_
83e0: 74 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 33  test capi3c-24.3
83f0: 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53   {.  decltype {S
8400: 45 4c 45 43 54 20 28 53 45 4c 45 43 54 20 2a 20  ELECT (SELECT * 
8410: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 29 29  FROM (SELECT c))
8420: 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54   FROM t5}.} {DAT
8430: 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63  ETIME}.do_test c
8440: 61 70 69 33 63 2d 32 34 2e 34 20 7b 0a 20 20 64  api3c-24.4 {.  d
8450: 65 63 6c 74 79 70 65 20 7b 53 45 4c 45 43 54 20  ecltype {SELECT 
8460: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a  * FROM (SELECT *
8470: 20 46 52 4f 4d 20 74 35 20 4f 52 44 45 52 20 42   FROM t5 ORDER B
8480: 59 20 63 20 4c 49 4d 49 54 20 31 29 20 4f 52 44  Y c LIMIT 1) ORD
8490: 45 52 20 42 59 20 62 7d 0a 7d 20 7b 49 4e 54 45  ER BY b}.} {INTE
84a0: 47 45 52 20 53 54 52 49 4e 47 20 44 41 54 45 54  GER STRING DATET
84b0: 49 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  IME}.do_test cap
84c0: 69 33 63 2d 32 34 2e 35 20 7b 0a 20 20 64 65 63  i3c-24.5 {.  dec
84d0: 6c 74 79 70 65 20 7b 0a 20 20 20 20 53 45 4c 45  ltype {.    SELE
84e0: 43 54 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f  CT (SELECT x FRO
84f0: 4d 20 28 53 45 4c 45 43 54 20 63 20 41 53 20 78  M (SELECT c AS x
8500: 29 29 20 0a 20 20 20 20 46 52 4f 4d 20 28 53 45  )) .    FROM (SE
8510: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f  LECT * FROM t5 O
8520: 52 44 45 52 20 42 59 20 63 20 4c 49 4d 49 54 20  RDER BY c LIMIT 
8530: 31 29 20 4f 52 44 45 52 20 42 59 20 62 0a 20 20  1) ORDER BY b.  
8540: 7d 0a 7d 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64  }.} {DATETIME}.d
8550: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 34  o_test capi3c-24
8560: 2e 33 20 7b 0a 20 20 64 65 63 6c 74 79 70 65 20  .3 {.  decltype 
8570: 7b 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54 20  {SELECT (SELECT 
8580: 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 74  x FROM (SELECT t
8590: 35 2e 61 20 41 53 20 78 29 29 20 46 52 4f 4d 20  5.a AS x)) FROM 
85a0: 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 7d 0a  t5}.} {INTEGER}.
85b0: 0a 0a 23 20 46 75 72 74 68 65 72 20 74 65 73 74  ..# Further test
85c0: 73 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  s of sqlite3_col
85d0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 29 3a 0a  umn_decltype():.
85e0: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
85f0: 74 20 32 35 2e 30 20 7b 0a 20 20 43 52 45 41 54  t 25.0 {.  CREAT
8600: 45 20 54 41 42 4c 45 20 74 31 31 28 61 20 56 41  E TABLE t11(a VA
8610: 52 43 48 41 52 28 31 30 29 2c 20 62 20 49 4e 54  RCHAR(10), b INT
8620: 45 47 45 52 29 3b 0a 20 20 43 52 45 41 54 45 20  EGER);.  CREATE 
8630: 54 41 42 4c 45 20 74 31 32 28 61 20 56 41 52 43  TABLE t12(a VARC
8640: 48 41 52 28 31 35 29 2c 20 62 20 46 4c 4f 41 54  HAR(15), b FLOAT
8650: 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74  );.}..foreach {t
8660: 6e 20 73 71 6c 7d 20 7b 0a 20 20 31 20 22 53 45  n sql} {.  1 "SE
8670: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31 20  LECT * FROM t11 
8680: 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
8690: 20 2a 20 46 52 4f 4d 20 74 31 32 22 0a 20 20 32   * FROM t12".  2
86a0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
86b0: 74 31 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54  t11 UNION SELECT
86c0: 20 2a 20 46 52 4f 4d 20 74 31 32 22 0a 20 20 33   * FROM t12".  3
86d0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
86e0: 74 31 31 20 45 58 43 45 50 54 20 53 45 4c 45 43  t11 EXCEPT SELEC
86f0: 54 20 2a 20 46 52 4f 4d 20 74 31 32 22 0a 20 20  T * FROM t12".  
8700: 34 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  4 "SELECT * FROM
8710: 20 74 31 31 20 49 4e 54 45 52 53 45 43 54 20 53   t11 INTERSECT S
8720: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 32  ELECT * FROM t12
8730: 22 0a 0a 20 20 35 20 22 53 45 4c 45 43 54 20 2a  "..  5 "SELECT *
8740: 20 46 52 4f 4d 20 74 31 31 20 55 4e 49 4f 4e 20   FROM t11 UNION 
8750: 41 4c 4c 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ALL SELECT * FRO
8760: 4d 20 74 31 32 20 4f 52 44 45 52 20 42 59 20 31  M t12 ORDER BY 1
8770: 22 0a 20 20 36 20 22 53 45 4c 45 43 54 20 2a 20  ".  6 "SELECT * 
8780: 46 52 4f 4d 20 74 31 31 20 55 4e 49 4f 4e 20 53  FROM t11 UNION S
8790: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 32  ELECT * FROM t12
87a0: 20 4f 52 44 45 52 20 42 59 20 31 22 0a 20 20 37   ORDER BY 1".  7
87b0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
87c0: 74 31 31 20 45 58 43 45 50 54 20 53 45 4c 45 43  t11 EXCEPT SELEC
87d0: 54 20 2a 20 46 52 4f 4d 20 74 31 32 20 4f 52 44  T * FROM t12 ORD
87e0: 45 52 20 42 59 20 31 22 0a 20 20 38 20 22 53 45  ER BY 1".  8 "SE
87f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31 20  LECT * FROM t11 
8800: 49 4e 54 45 52 53 45 43 54 20 53 45 4c 45 43 54  INTERSECT SELECT
8810: 20 2a 20 46 52 4f 4d 20 74 31 32 20 4f 52 44 45   * FROM t12 ORDE
8820: 52 20 42 59 20 31 22 0a 7d 20 7b 0a 20 20 64 6f  R BY 1".} {.  do
8830: 5f 74 65 73 74 20 32 35 2e 24 74 6e 20 7b 20 64  _test 25.$tn { d
8840: 65 63 6c 74 79 70 65 20 24 73 71 6c 20 7d 20 7b  ecltype $sql } {
8850: 56 41 52 43 48 41 52 28 31 30 29 20 49 4e 54 45  VARCHAR(10) INTE
8860: 47 45 52 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74  GER}.}..finish_t
8870: 65 73 74 0a                                      est.