/ Hex Artifact Content
Login

Artifact 7ebed1d8fa2f3190149d556fe8cff5a006be62af437c5c4640db614470126098:


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 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
44d0: 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69 74       PRAGMA writ
44e0: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a  able_schema=ON;.
44f0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
4500: 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  O sqlite_master 
4510: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 4e 55 4c 4c  VALUES(NULL,NULL
4520: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29  ,NULL,NULL,NULL)
4530: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63  ;.    }.    db c
4540: 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  lose.  } {}.  do
4550: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 33  _test capi3c-8.3
4560: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73   {.    catch { s
4570: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4580: 62 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  b }.    catchsql
4590: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
45a0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
45b0: 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ster;.    }.  } 
45c0: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61  {1 {malformed da
45d0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f  tabase schema (?
45e0: 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  )}}.  do_test ca
45f0: 70 69 33 63 2d 38 2e 34 20 7b 0a 20 20 20 20 23  pi3c-8.4 {.    #
4600: 20 42 75 69 6c 64 20 61 20 35 2d 66 69 65 6c 64   Build a 5-field
4610: 20 72 6f 77 20 72 65 63 6f 72 64 2e 20 54 68 65   row record. The
4620: 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 73 20   first field is 
4630: 61 20 73 74 72 69 6e 67 20 27 74 61 62 6c 65 27  a string 'table'
4640: 2c 20 61 6e 64 0a 20 20 20 20 23 20 73 75 62 73  , and.    # subs
4650: 65 71 75 65 6e 74 20 66 69 65 6c 64 73 20 61 72  equent fields ar
4660: 65 20 61 6c 6c 20 4e 55 4c 4c 2e 0a 20 20 20 20  e all NULL..    
4670: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72  db close.    for
4680: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
4690: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
46a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
46b0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
46c0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
46d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
46e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 77 72 69        PRAGMA wri
46f0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
4700: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4710: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
4720: 20 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c   VALUES('table',
4730: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
4740: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ULL);.    }.    
4750: 64 62 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 3b  db close.  } {};
4760: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
4770: 63 2d 38 2e 35 20 7b 0a 20 20 20 20 63 61 74 63  c-8.5 {.    catc
4780: 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74  h { sqlite3 db t
4790: 65 73 74 2e 64 62 20 7d 0a 20 20 20 20 63 61 74  est.db }.    cat
47a0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  chsql {.      SE
47b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
47c0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
47d0: 0a 20 20 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d  .  } {1 {malform
47e0: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
47f0: 6d 61 20 28 3f 29 7d 7d 0a 20 20 64 62 20 63 6c  ma (?)}}.  db cl
4800: 6f 73 65 0a 7d 0a 66 6f 72 63 65 64 65 6c 65 74  ose.}.forcedelet
4810: 65 20 74 65 73 74 2e 64 62 0a 66 6f 72 63 65 64  e test.db.forced
4820: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 2d 6a 6f  elete test.db-jo
4830: 75 72 6e 61 6c 0a 0a 0a 23 20 54 65 73 74 20 74  urnal...# Test t
4840: 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he english langu
4850: 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76  age string equiv
4860: 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74  alents for sqlit
4870: 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 73 65  e error codes.se
4880: 74 20 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 5b  t code2english [
4890: 6c 69 73 74 20 5c 0a 53 51 4c 49 54 45 5f 4f 4b  list \.SQLITE_OK
48a0: 20 20 20 20 20 20 20 20 20 7b 6e 6f 74 20 61 6e           {not an
48b0: 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54 45   error} \.SQLITE
48c0: 5f 45 52 52 4f 52 20 20 20 20 20 20 7b 53 51 4c  _ERROR      {SQL
48d0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 7d 20 5c 0a   logic error} \.
48e0: 53 51 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20  SQLITE_PERM     
48f0: 20 20 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73    {access permis
4900: 73 69 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53  sion denied} \.S
4910: 51 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20  QLITE_ABORT     
4920: 20 7b 71 75 65 72 79 20 61 62 6f 72 74 65 64 7d   {query aborted}
4930: 20 5c 0a 53 51 4c 49 54 45 5f 42 55 53 59 20 20   \.SQLITE_BUSY  
4940: 20 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 69       {database i
4950: 73 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49  s locked} \.SQLI
4960: 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b 64  TE_LOCKED     {d
4970: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
4980: 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54   locked} \.SQLIT
4990: 45 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f 75  E_NOMEM      {ou
49a0: 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a 53  t of memory} \.S
49b0: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20  QLITE_READONLY  
49c0: 20 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69   {attempt to wri
49d0: 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61  te a readonly da
49e0: 74 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45  tabase} \.SQLITE
49f0: 5f 49 4e 54 45 52 52 55 50 54 20 20 7b 69 6e 74  _INTERRUPT  {int
4a00: 65 72 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c 49  errupted} \.SQLI
4a10: 54 45 5f 49 4f 45 52 52 20 20 20 20 20 20 7b 64  TE_IOERR      {d
4a20: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20 5c  isk I/O error} \
4a30: 0a 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  .SQLITE_CORRUPT 
4a40: 20 20 20 7b 64 61 74 61 62 61 73 65 20 64 69 73     {database dis
4a50: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
4a60: 72 6d 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46  rmed} \.SQLITE_F
4a70: 55 4c 4c 20 20 20 20 20 20 20 7b 64 61 74 61 62  ULL       {datab
4a80: 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66  ase or disk is f
4a90: 75 6c 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 41  ull} \.SQLITE_CA
4aa0: 4e 54 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c 65  NTOPEN   {unable
4ab0: 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73   to open databas
4ac0: 65 20 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54 45  e file} \.SQLITE
4ad0: 5f 45 4d 50 54 59 20 20 20 20 20 20 7b 75 6e 6b  _EMPTY      {unk
4ae0: 6e 6f 77 6e 20 65 72 72 6f 72 7d 20 5c 0a 53 51  nown error} \.SQ
4af0: 4c 49 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20  LITE_SCHEMA     
4b00: 7b 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  {database schema
4b10: 20 68 61 73 20 63 68 61 6e 67 65 64 7d 20 5c 0a   has changed} \.
4b20: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
4b30: 54 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  T {constraint fa
4b40: 69 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d  iled} \.SQLITE_M
4b50: 49 53 4d 41 54 43 48 20 20 20 7b 64 61 74 61 74  ISMATCH   {datat
4b60: 79 70 65 20 6d 69 73 6d 61 74 63 68 7d 20 5c 0a  ype mismatch} \.
4b70: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20  SQLITE_MISUSE   
4b80: 20 20 7b 62 61 64 20 70 61 72 61 6d 65 74 65 72    {bad parameter
4b90: 20 6f 72 20 6f 74 68 65 72 20 41 50 49 20 6d 69   or other API mi
4ba0: 73 75 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 41  suse} \.SQLITE_A
4bb0: 55 54 48 20 20 20 20 20 20 20 7b 61 75 74 68 6f  UTH       {autho
4bc0: 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 7d  rization denied}
4bd0: 20 5c 0a 53 51 4c 49 54 45 5f 52 41 4e 47 45 20   \.SQLITE_RANGE 
4be0: 20 20 20 20 20 7b 63 6f 6c 75 6d 6e 20 69 6e 64       {column ind
4bf0: 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d  ex out of range}
4c00: 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42   \.SQLITE_NOTADB
4c10: 20 20 20 20 20 7b 66 69 6c 65 20 69 73 20 6e 6f       {file is no
4c20: 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  t a database} \.
4c30: 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20  unknownerror    
4c40: 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72    {unknown error
4c50: 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f  } \.]..set test_
4c60: 6e 75 6d 62 65 72 20 31 0a 66 6f 72 65 61 63 68  number 1.foreach
4c70: 20 7b 63 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20   {code english} 
4c80: 24 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a  $code2english {.
4c90: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4ca0: 2d 39 2e 24 74 65 73 74 5f 6e 75 6d 62 65 72 20  -9.$test_number 
4cb0: 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72  "sqlite3_test_er
4cc0: 72 73 74 72 20 24 63 6f 64 65 22 20 24 65 6e 67  rstr $code" $eng
4cd0: 6c 69 73 68 0a 20 20 69 6e 63 72 20 74 65 73 74  lish.  incr test
4ce0: 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20 54 65 73  _number.}..# Tes
4cf0: 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  t the error mess
4d00: 61 67 65 20 77 68 65 6e 20 61 20 22 72 65 61 6c  age when a "real
4d10: 22 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 20  " out of memory 
4d20: 6f 63 63 75 72 73 2e 0a 69 66 20 7b 20 5b 70 65  occurs..if { [pe
4d30: 72 6d 75 74 61 74 69 6f 6e 5d 20 21 3d 20 22 6e  rmutation] != "n
4d40: 6f 66 61 75 6c 74 73 69 6d 22 20 7d 20 7b 0a 69  ofaultsim" } {.i
4d50: 66 63 61 70 61 62 6c 65 20 6d 65 6d 64 65 62 75  fcapable memdebu
4d60: 67 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  g {.  do_test ca
4d70: 70 69 33 63 2d 31 30 2d 31 20 7b 0a 20 20 20 20  pi3c-10-1 {.    
4d80: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4d90: 64 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73  db.    set DB [s
4da0: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4db0: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20  n_pointer db].  
4dc0: 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62    sqlite3_memdeb
4dd0: 75 67 5f 66 61 69 6c 20 30 0a 20 20 20 20 63 61  ug_fail 0.    ca
4de0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73  tchsql {.      s
4df0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
4e00: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
4e10: 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66  }.  } {1 {out of
4e20: 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74   memory}}.  do_t
4e30: 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d 32 20  est capi3c-10-2 
4e40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
4e50: 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b  rmsg $::DB.  } {
4e60: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
4e70: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
4e80: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
4e90: 20 63 61 70 69 33 63 2d 31 30 2d 33 20 7b 0a 20   capi3c-10-3 {. 
4ea0: 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74       utf8 [sqlit
4eb0: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44  e3_errmsg16 $::D
4ec0: 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66  B].    } {out of
4ed0: 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64   memory}.  }.  d
4ee0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
4ef0: 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20  3_memdebug_fail 
4f00: 2d 31 0a 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  -1.}.}..# The fo
4f10: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20  llowing tests - 
4f20: 63 61 70 69 33 63 2d 31 31 2e 2a 20 2d 20 74 65  capi3c-11.* - te
4f30: 73 74 20 74 68 61 74 20 61 20 43 4f 4d 4d 49 54  st that a COMMIT
4f40: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23 20 73   or ROLLBACK.# s
4f50: 74 61 74 65 6d 65 6e 74 20 69 73 73 75 65 64 20  tatement issued 
4f60: 77 68 69 6c 65 20 74 68 65 72 65 20 61 72 65 20  while there are 
4f70: 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e  still outstandin
4f80: 67 20 56 4d 73 20 74 68 61 74 20 61 72 65 20 70  g VMs that are p
4f90: 61 72 74 20 6f 66 0a 23 20 74 68 65 20 74 72 61  art of.# the tra
4fa0: 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c 73 2e 0a  nsaction fails..
4fb0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4fc0: 64 62 0a 73 65 74 20 44 42 20 5b 73 71 6c 69 74  db.set DB [sqlit
4fd0: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
4fe0: 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69 74 65  inter db].sqlite
4ff0: 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66  _register_test_f
5000: 75 6e 63 74 69 6f 6e 20 24 44 42 20 66 75 6e 63  unction $DB func
5010: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5020: 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.1 {.  execsql
5030: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
5040: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5050: 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53  1(a, b);.    INS
5060: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
5070: 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20 20  ES(1, 'int');.  
5080: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
5090: 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74 61   VALUES(2, 'nota
50a0: 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  type');.  }.} {}
50b0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
50c0: 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.1.1 {.  sqlit
50d0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
50e0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
50f0: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 20 7b 0a  t capi3c-11.2 {.
5100: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
5110: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
5120: 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63 28  DB "SELECT func(
5130: 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20 2d  b, a) FROM t1" -
5140: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
5150: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
5160: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a 23 20 41  SQLITE_ROW}..# A
5170: 73 20 6f 66 20 33 2e 36 2e 35 20 61 20 43 4f 4d  s of 3.6.5 a COM
5180: 4d 49 54 20 69 73 20 4f 4b 20 64 75 72 69 6e 67  MIT is OK during
5190: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
51a0: 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 20  s still running 
51b0: 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  -.# as long as i
51c0: 74 20 69 73 20 61 20 72 65 61 64 2d 6f 6e 6c 79  t is a read-only
51d0: 20 71 75 65 72 79 20 61 6e 64 20 6e 6f 74 20 61   query and not a
51e0: 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  n incremental BL
51f0: 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64 6f 5f 74  OB write..#.do_t
5200: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 31  est capi3-11.3.1
5210: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5220: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
5230: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5240: 20 63 61 70 69 33 2d 31 31 2e 33 2e 32 20 7b 0a   capi3-11.3.2 {.
5250: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
5260: 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  ed_errcode $DB.}
5270: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
5280: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e  test capi3-11.3.
5290: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  3 {.  sqlite3_ge
52a0: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
52b0: 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 1.do_test cap
52c0: 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20 20 64 62  i3-11.3.4 {.  db
52d0: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 6c 6f   eval {PRAGMA lo
52e0: 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20 7b 6d 61  ck_status}.} {ma
52f0: 69 6e 20 73 68 61 72 65 64 20 74 65 6d 70 20 63  in shared temp c
5300: 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65 73 74 20  losed}..do_test 
5310: 63 61 70 69 33 63 2d 31 31 2e 34 20 7b 0a 20 20  capi3c-11.4 {.  
5320: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5330: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5340: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5350: 33 63 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69  3c-11.5 {.  sqli
5360: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
5370: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5380: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5390: 33 63 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63  3c-11.6 {.  catc
53a0: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
53b0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
53c0: 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e  .} {0 {1 int 2 n
53d0: 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73  otatype}}.do_tes
53e0: 74 20 63 61 70 69 33 63 2d 31 31 2e 37 20 7b 0a  t capi3c-11.7 {.
53f0: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
5400: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
5410: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5420: 31 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.8 {.  execsql
5430: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
5440: 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20 49  BLE t2(a);.    I
5450: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
5460: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53  LUES(1);.    INS
5470: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
5480: 45 53 28 32 29 3b 0a 20 20 20 20 42 45 47 49 4e  ES(2);.    BEGIN
5490: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
54a0: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 29 3b 0a  O t2 VALUES(3);.
54b0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
54c0: 20 63 61 70 69 33 63 2d 31 31 2e 38 2e 31 20 7b   capi3c-11.8.1 {
54d0: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
54e0: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
54f0: 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  0.do_test capi3c
5500: 2d 31 31 2e 39 20 7b 0a 20 20 73 65 74 20 53 54  -11.9 {.  set ST
5510: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
5520: 61 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45  are_v2 $DB "SELE
5530: 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31  CT a FROM t2" -1
5540: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
5550: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5560: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
5570: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 31  st capi3c-11.9.1
5580: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
5590: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
55a0: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
55b0: 33 63 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61  3c-11.9.2 {.  ca
55c0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c  tchsql {.    ROL
55d0: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20  LBACK;.  }.} {0 
55e0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
55f0: 33 63 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71  3c-11.9.3 {.  sq
5600: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
5610: 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f  mmit $DB.} 1.do_
5620: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
5630: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  0 {.  sqlite3_st
5640: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5650: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5660: 63 61 70 69 33 63 2d 31 31 2e 31 31 20 7b 0a 20  capi3c-11.11 {. 
5670: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5680: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  TMT.} {SQLITE_DO
5690: 4e 45 7d 0a 69 66 63 61 70 61 62 6c 65 20 21 61  NE}.ifcapable !a
56a0: 75 74 6f 72 65 73 65 74 20 7b 0a 20 20 64 6f 5f  utoreset {.  do_
56b0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
56c0: 32 61 72 6d 6f 72 20 7b 0a 20 20 20 20 73 71 6c  2armor {.    sql
56d0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
56e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
56f0: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
5700: 54 45 5f 4d 49 53 55 53 45 7d 0a 7d 20 65 6c 73  TE_MISUSE}.} els
5710: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  e {.  do_test ca
5720: 70 69 33 63 2d 31 31 2e 31 32 20 7b 0a 20 20 20  pi3c-11.12 {.   
5730: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5740: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
5750: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
5760: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 7d 0a 64 6f  SQLITE_ROW}.}.do
5770: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5780: 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  13 {.  sqlite3_f
5790: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
57a0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
57b0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 34  est capi3c-11.14
57c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
57d0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
57e0: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d   t2;.  }.} {1 2}
57f0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5800: 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69  11.14.1 {.  sqli
5810: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5820: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
5830: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 35 20  st capi3c-11.15 
5840: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5850: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5860: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f  .} {1 {cannot ro
5870: 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
5880: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
5890: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
58a0: 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73  3c-11.15.1 {.  s
58b0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
58c0: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
58d0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
58e0: 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  16 {.  execsql {
58f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
5900: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
5910: 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63 68 65  2}..# Sanity che
5920: 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69 6e 69  ck on the defini
5930: 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e  tion of 'outstan
5940: 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73 20 6d  ding VM'. This m
5950: 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20 74 68  eans any VM.# th
5960: 61 74 20 68 61 73 20 68 61 64 20 73 71 6c 69 74  at has had sqlit
5970: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 65 64  e3_step() called
5980: 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79 20 74   more recently t
5990: 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  han sqlite3_fina
59a0: 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71 6c 69  lize() or.# sqli
59b0: 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53 6f 20  te3_reset(). So 
59c0: 61 20 56 4d 20 74 68 61 74 20 68 61 73 20 6a 75  a VM that has ju
59d0: 73 74 20 62 65 65 6e 20 70 72 65 70 61 72 65 64  st been prepared
59e0: 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73 20 6e   or reset does n
59f0: 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20 61 6e  ot.# count as an
5a00: 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74   active VM..do_t
5a10: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 37  est capi3c-11.17
5a20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5a30: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20     BEGIN;.  }.} 
5a40: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5a50: 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20  c-11.18 {.  set 
5a60: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5a70: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45  epare_v2 $DB "SE
5a80: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5a90: 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68  -1 TAIL].  catch
5aa0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5ab0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5ac0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5ad0: 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .19 {.  sqlite3_
5ae0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5af0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5b00: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 30 20 7b  t capi3c-11.20 {
5b10: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5b20: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d    BEGIN;.    COM
5b30: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5b40: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5b50: 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74  -11.20 {.  sqlit
5b60: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
5b70: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5b80: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31  COMMIT;.  }.} {1
5b90: 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   {cannot commit 
5ba0: 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
5bb0: 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f   is active}}.do_
5bc0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5bd0: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  1 {.  sqlite3_fi
5be0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5bf0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68  SQLITE_OK}..# Th
5c00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
5c10: 73 20 2d 20 63 61 70 69 33 63 2d 31 32 2e 2a 20  s - capi3c-12.* 
5c20: 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 73  - check that its
5c30: 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23   Ok to start a.#
5c40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
5c50: 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  le other VMs are
5c60: 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61   active, and tha
5c70: 74 20 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63  t its Ok to exec
5c80: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
5c90: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
5ca0: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
5cb0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5cc0: 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  1 {.  set STMT [
5cd0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5ce0: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  v2 $DB "SELECT a
5cf0: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
5d00: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
5d10: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5d20: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5d30: 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a 20 20 63  api3c-12.2 {.  c
5d40: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
5d50: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5d60: 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(3, NULL);.  
5d70: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5d80: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 33 20 7b  st capi3c-12.3 {
5d90: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5da0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5db0: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a   VALUES(4);.  }.
5dc0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5dd0: 20 63 61 70 69 33 63 2d 31 32 2e 34 20 7b 0a 20   capi3c-12.4 {. 
5de0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5df0: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
5e00: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5e10: 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  (4, NULL);.  }.}
5e20: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5e30: 63 61 70 69 33 63 2d 31 32 2e 35 20 7b 0a 20 20  capi3c-12.5 {.  
5e40: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5e50: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5e60: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5e70: 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69  -12.5.1 {.  sqli
5e80: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5e90: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5ea0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5eb0: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
5ec0: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5ed0: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
5ee0: 20 63 61 70 69 33 63 2d 31 32 2e 37 20 7b 0a 20   capi3c-12.7 {. 
5ef0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5f00: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
5f10: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5f20: 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20 20 65 78  pi3c-12.8 {.  ex
5f30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  ecsql {.    COMM
5f40: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  IT;.    SELECT a
5f50: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
5f60: 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73  {1 2 3 4}..# Tes
5f70: 74 20 63 61 73 65 73 20 63 61 70 69 33 63 2d 31  t cases capi3c-1
5f80: 33 2e 2a 20 74 65 73 74 20 74 68 65 20 73 71 6c  3.* test the sql
5f90: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
5fa0: 6e 67 73 28 29 20 61 6e 64 20 0a 23 20 73 71 6c  ngs() and .# sql
5fb0: 69 74 65 33 5f 73 6c 65 65 70 20 41 50 49 73 2e  ite3_sleep APIs.
5fc0: 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .#.if {[llength 
5fd0: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73  [info commands s
5fe0: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
5ff0: 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64  dings]]>0} {.  d
6000: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
6010: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
6020: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
6030: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
6040: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
6050: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
6060: 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $DB "INSERT INTO
6070: 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29   t1 VALUES(?, ?)
6080: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  " -1 TAIL].    s
6090: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
60a0: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  T.  } {SQLITE_DO
60b0: 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  NE}.  do_test ca
60c0: 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20 20 20 20  pi3c-13.2 {.    
60d0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
60e0: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
60f0: 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20  bind_text $STMT 
6100: 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71  1 hello 5.    sq
6110: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
6120: 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a  $STMT 2 world 5.
6130: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6140: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
6150: 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  TE_DONE}.  do_te
6160: 73 74 20 63 61 70 69 33 63 2d 31 33 2e 33 20 7b  st capi3c-13.3 {
6170: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
6180: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
6190: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
61a0: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
61b0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
61c0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
61d0: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
61e0: 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73  i3c-13-4 {.    s
61f0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6200: 24 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71  $STMT.    execsq
6210: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
6220: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
6230: 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c  }.  } {{} {} hel
6240: 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a  lo world {} {}}.
6250: 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b  }.if {[llength [
6260: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71  info commands sq
6270: 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d  lite3_sleep]]>0}
6280: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
6290: 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73  i3c-13-5 {.    s
62a0: 65 74 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73  et ms [sqlite3_s
62b0: 6c 65 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70  leep 80].    exp
62c0: 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d  r {$ms==80 || $m
62d0: 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d  s==1000}.  } {1}
62e0: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32  .}..# Ticket #12
62f0: 31 39 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62  19:  Make sure b
6300: 69 6e 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20  inding APIs can 
6310: 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f  handle a NULL po
6320: 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  inter..#.do_test
6330: 20 63 61 70 69 33 63 2d 31 34 2e 31 20 7b 0a 20   capi3c-14.1 {. 
6340: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
6350: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6360: 74 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20 6d  t 0 1 hello 5} m
6370: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
6380: 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54   $msg.} {1 SQLIT
6390: 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20 54 69 63  E_MISUSE}..# Tic
63a0: 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e 6f  ket #1650:  Hono
63b0: 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61 72  r the nBytes par
63c0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
63d0: 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f 5f  3_prepare..#.do_
63e0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 31  test capi3c-15.1
63f0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
6400: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
6410: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
6420: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
6430: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6440: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6450: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6460: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6470: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
6480: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
6490: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
64a0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
64b0: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
64c0: 73 74 20 63 61 70 69 33 63 2d 31 35 2e 32 20 7b  st capi3c-15.2 {
64d0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
64e0: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
64f0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
6500: 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   0.} {2}.do_test
6510: 20 63 61 70 69 33 63 2d 31 35 2e 33 20 7b 0a 20   capi3c-15.3 {. 
6520: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6530: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6540: 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  E_OK}..# Make su
6550: 72 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79  re code is alway
6560: 73 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e  s generated even
6570: 20 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53   if an IF EXISTS
6580: 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58   or .# IF NOT EX
6590: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
65a0: 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20  resent that the 
65b0: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f  table does not o
65c0: 72 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e  r.# does exists.
65d0: 20 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69    That way we wi
65e0: 6c 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61  ll always have a
65f0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
6600: 65 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20  ent.# to expire 
6610: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
6620: 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65  changes..#.do_te
6630: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 31 20 7b  st capi3c-16.1 {
6640: 0a 20 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50  .  set sql {DROP
6650: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
6660: 20 74 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20   t3}.  set STMT 
6670: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6680: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
6690: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
66a0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
66b0: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
66c0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
66d0: 63 61 70 69 33 63 2d 31 36 2e 32 20 7b 0a 20 20  capi3c-16.2 {.  
66e0: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
66f0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
6700: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
6710: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6720: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6730: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6740: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6750: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6760: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
6770: 0a 23 20 42 75 74 20 73 74 69 6c 6c 20 77 65 20  .# But still we 
6780: 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 20  do not generate 
6790: 63 6f 64 65 20 69 66 20 74 68 65 72 65 20 69 73  code if there is
67a0: 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73   no SQL.#.do_tes
67b0: 74 20 63 61 70 69 33 63 2d 31 36 2e 33 20 7b 0a  t capi3c-16.3 {.
67c0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
67d0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
67e0: 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  DB {} -1 TAIL]. 
67f0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6800: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
6810: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
6820: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
6830: 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.4 {.  set STM
6840: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6850: 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d 20 2d 31  re_v2 $DB {;} -1
6860: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6870: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6880: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
6890: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b  "}.} {1}..# Tick
68a0: 65 74 20 23 32 31 35 34 2e 0a 23 0a 64 6f 5f 74  et #2154..#.do_t
68b0: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 20  est capi3c-17.1 
68c0: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
68d0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
68e0: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78   $DB {SELECT max
68f0: 28 61 29 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  (a) FROM t2} -1 
6900: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6910: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
6920: 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20  ITE_ROW.do_test 
6930: 63 61 70 69 33 63 2d 31 37 2e 32 20 7b 0a 20 20  capi3c-17.2 {.  
6940: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6950: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64  nt $STMT 0.} 4.d
6960: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6970: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .3 {.  sqlite3_s
6980: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6990: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
69a0: 63 61 70 69 33 63 2d 31 37 2e 34 20 7b 0a 20 20  capi3c-17.4 {.  
69b0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
69c0: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
69d0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f  REATE INDEX i2 O
69e0: 4e 20 74 32 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t2(a)}.  sqlit
69f0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6a00: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6a10: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 35 20 7b  st capi3c-17.5 {
6a20: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6a30: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6a40: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
6a50: 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -17.6 {.  sqlite
6a60: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6a70: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6a80: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 37 20 7b  st capi3c-17.7 {
6a90: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6aa0: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6ab0: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
6ac0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6ad0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6ae0: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6af0: 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71 6c 69 74  c-17.8 {.  sqlit
6b00: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6b10: 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73  TMT 0.} 4.do_tes
6b20: 74 20 63 61 70 69 33 63 2d 31 37 2e 39 20 7b 0a  t capi3c-17.9 {.
6b30: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6b40: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6b50: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6b60: 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73 71 6c 69  c-17.10 {.  sqli
6b70: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6b80: 4d 54 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  MT.  set STMT [s
6b90: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6ba0: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 62 20  2 $DB {SELECT b 
6bb0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
6bc0: 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ?} -1 TAIL].  sq
6bd0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24  lite3_bind_int $
6be0: 53 54 4d 54 20 31 20 32 0a 20 20 64 62 20 65 76  STMT 1 2.  db ev
6bf0: 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  al {.    DELETE 
6c00: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53  FROM t1;.    INS
6c10: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6c20: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
6c30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6c40: 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29 3b  VALUES(2,'two');
6c50: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6c60: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 27 74 68   t1 VALUES(3,'th
6c70: 72 65 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ree');.    INSER
6c80: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6c90: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
6ca0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6cb0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
6cc0: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
6cd0: 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -17.11 {.  sqlit
6ce0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
6cf0: 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f  STMT 0.} two.do_
6d00: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6d10: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6d20: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6d30: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6d40: 61 70 69 33 63 2d 31 37 2e 31 33 20 7b 0a 20 20  api3c-17.13 {.  
6d50: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6d60: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6d70: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
6d80: 4e 20 74 31 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t1(a)}.  sqlit
6d90: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6da0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6db0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 34 20  st capi3c-17.14 
6dc0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
6dd0: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a  mn_text $STMT 0.
6de0: 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61  } two.do_test ca
6df0: 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a 20 20 73  pi3c-17.15 {.  s
6e00: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6e10: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
6e20: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6e30: 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.16 {.  sqlite3
6e40: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
6e50: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44  b eval {DROP IND
6e60: 45 58 20 69 31 7d 0a 20 20 73 71 6c 69 74 65 33  EX i1}.  sqlite3
6e70: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6e80: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
6e90: 20 63 61 70 69 33 63 2d 31 37 2e 31 37 20 7b 0a   capi3c-17.17 {.
6ea0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6eb0: 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a 7d 20  _text $STMT 0.} 
6ec0: 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  two.do_test capi
6ed0: 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20 73 71 6c  3c-17.18 {.  sql
6ee0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6ef0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
6f00: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6f10: 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  99 {.  sqlite3_f
6f20: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6f30: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 4f 6e 20  SQLITE_OK..# On 
6f40: 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  the mailing list
6f50: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 70   it has been rep
6f60: 6f 72 74 65 64 20 74 68 61 74 20 66 69 6e 61 6c  orted that final
6f70: 69 7a 69 6e 67 20 61 66 74 65 72 0a 23 20 61 6e  izing after.# an
6f80: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 74   SQLITE_BUSY ret
6f90: 75 72 6e 20 6c 65 61 64 73 20 74 6f 20 61 20 73  urn leads to a s
6fa0: 65 67 66 61 75 6c 74 2e 20 20 48 65 72 65 20 77  egfault.  Here w
6fb0: 65 20 74 65 73 74 20 74 68 61 74 20 63 61 73 65  e test that case
6fc0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
6fd0: 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73 71 6c 69  3c-18.1 {.  sqli
6fe0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
6ff0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7000: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7010: 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61  DB {SELECT max(a
7020: 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41  ) FROM t1} -1 TA
7030: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7040: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
7050: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
7060: 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20 20 73 71  pi3c-18.2 {.  sq
7070: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
7080: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
7090: 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 33  test capi3c-18.3
70a0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
70b0: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 32 20 65  et $STMT.  db2 e
70c0: 76 61 6c 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  val {BEGIN EXCLU
70d0: 53 49 56 45 7d 0a 20 20 73 71 6c 69 74 65 33 5f  SIVE}.  sqlite3_
70e0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
70f0: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
7100: 20 63 61 70 69 33 63 2d 31 38 2e 34 20 7b 0a 20   capi3c-18.4 {. 
7110: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7120: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
7130: 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74 20 63 61  _BUSY.do_test ca
7140: 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20 20 64 62  pi3c-18.5 {.  db
7150: 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a  2 eval {COMMIT}.
7160: 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d    db2 close.} {}
7170: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 38  ..# Ticket #2158
7180: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
7190: 74 65 70 28 29 20 77 69 6c 6c 20 73 74 69 6c 6c  tep() will still
71a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 53   return SQLITE_S
71b0: 43 48 45 4d 41 0a 23 20 69 66 20 74 68 65 20 64  CHEMA.# if the d
71c0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
71d0: 68 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20  hanges in a way 
71e0: 74 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 73  that makes the s
71f0: 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f 20 6c 6f  tatement.# no lo
7200: 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23 0a 64 6f  nger valid..#.do
7210: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
7220: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
7230: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7240: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20  E t3(x,y);.     
7250: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
7260: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a  ALUES(1,2);.  }.
7270: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7280: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7290: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
72a0: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
72b0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
72c0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
72d0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
72e0: 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.2 {.  sqlite3
72f0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
7300: 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  T 0.} 1.do_test 
7310: 63 61 70 69 33 63 2d 31 39 2e 33 20 7b 0a 20 20  capi3c-19.3 {.  
7320: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7330: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
7340: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7350: 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.4 {.  sqlite3
7360: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
7370: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42  b eval {DROP TAB
7380: 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69 74 65 33  LE t3}.  sqlite3
7390: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
73a0: 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65  LITE_ERROR.do_te
73b0: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 31  st capi3c-19.4.1
73c0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
73d0: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
73e0: 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a 69 66  ch table: t3}.if
73f0: 63 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74  capable deprecat
7400: 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ed {.  do_test c
7410: 61 70 69 33 63 2d 31 39 2e 34 2e 32 20 7b 0a 20  api3c-19.4.2 {. 
7420: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72     sqlite3_expir
7430: 65 64 20 24 53 54 4d 54 0a 20 20 7d 20 31 0a 7d  ed $STMT.  } 1.}
7440: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7450: 31 39 2e 34 2e 33 20 7b 0a 20 20 73 71 6c 69 74  19.4.3 {.  sqlit
7460: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
7470: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
7480: 74 33 7d 0a 69 66 63 61 70 61 62 6c 65 20 64 65  t3}.ifcapable de
7490: 70 72 65 63 61 74 65 64 20 7b 0a 20 20 64 6f 5f  precated {.  do_
74a0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34  test capi3c-19.4
74b0: 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .4 {.    sqlite3
74c0: 5f 65 78 70 69 72 65 64 20 30 0a 20 20 7d 20 31  _expired 0.  } 1
74d0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .}.do_test capi3
74e0: 63 2d 31 39 2e 35 20 7b 0a 20 20 73 71 6c 69 74  c-19.5 {.  sqlit
74f0: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
7500: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
7510: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
7520: 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e 53 45 52  x,y);.     INSER
7530: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
7540: 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  (1,2);.  }.  sql
7550: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7560: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 69 66 63  } SQLITE_ROW.ifc
7570: 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74 65  apable deprecate
7580: 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  d {.  do_test ca
7590: 70 69 33 63 2d 31 39 2e 35 2e 32 20 7b 0a 20 20  pi3c-19.5.2 {.  
75a0: 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65    sqlite3_expire
75b0: 64 20 24 53 54 4d 54 0a 20 20 7d 20 30 0a 7d 0a  d $STMT.  } 0.}.
75c0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
75d0: 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.6 {.  sqlite3_
75e0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
75f0: 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63   1.} 2.do_test c
7600: 61 70 69 33 63 2d 31 39 2e 39 39 20 7b 0a 20 20  api3c-19.99 {.  
7610: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7620: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7630: 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  OK..# Make sure 
7640: 61 20 63 68 61 6e 67 65 20 69 6e 20 61 20 73 65  a change in a se
7650: 70 61 72 61 74 65 20 64 61 74 61 62 61 73 65 20  parate database 
7660: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 65 73 20  connection does 
7670: 6e 6f 74 0a 23 20 63 61 75 73 65 20 61 6e 20 53  not.# cause an S
7680: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 72 65 74  QLITE_SCHEMA ret
7690: 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  urn..#.do_test c
76a0: 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a 20 20 73  api3c-20.1 {.  s
76b0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
76c0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
76d0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
76e0: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  3} -1 TAIL].  sq
76f0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
7700: 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43 52  b.  db2 eval {CR
7710: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 78 29  EATE TABLE t4(x)
7720: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
7730: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7740: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
7750: 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-20.2 {.  sqli
7760: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
7770: 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65  STMT 1.} 2.do_te
7780: 73 74 20 63 61 70 69 33 63 2d 32 30 2e 33 20 7b  st capi3c-20.3 {
7790: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
77a0: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
77b0: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
77c0: 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64 62 32 20  3c-20.4 {.  db2 
77d0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
77e0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
77f0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 54 65   SQLITE_OK..# Te
7800: 73 74 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f  st that sqlite3_
7810: 73 74 65 70 28 29 20 73 65 74 73 20 74 68 65 20  step() sets the 
7820: 64 61 74 61 62 61 73 65 20 65 72 72 6f 72 20 63  database error c
7830: 6f 64 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23  ode correctly..#
7840: 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 34 39   See ticket #249
7850: 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70  7..#.ifcapable p
7860: 72 6f 67 72 65 73 73 20 7b 0a 20 20 64 6f 5f 74  rogress {.  do_t
7870: 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 31 20  est capi3c-21.1 
7880: 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  {.    set STMT [
7890: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
78a0: 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a  v2 $DB {SELECT *
78b0: 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54 41 49   FROM t3} -1 TAI
78c0: 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f 67 72 65  L].    db progre
78d0: 73 73 20 35 20 22 65 78 70 72 20 31 22 0a 20 20  ss 5 "expr 1".  
78e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
78f0: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
7900: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
7910: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7920: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
7930: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
7940: 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45   $DB.  } {SQLITE
7950: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
7960: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7970: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  3 {.    sqlite3_
7980: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7990: 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52   } {SQLITE_INTER
79a0: 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RUPT}.  do_test 
79b0: 63 61 70 69 33 63 2d 32 31 2e 34 20 7b 0a 20 20  capi3c-21.4 {.  
79c0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
79d0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
79e0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
79f0: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20  3} -1 TAIL].    
7a00: 64 62 20 70 72 6f 67 72 65 73 73 20 35 20 22 65  db progress 5 "e
7a10: 78 70 72 20 31 22 0a 20 20 20 20 73 71 6c 69 74  xpr 1".    sqlit
7a20: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
7a30: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
7a40: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7a50: 63 2d 32 31 2e 35 20 7b 0a 20 20 20 20 73 71 6c  c-21.5 {.    sql
7a60: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
7a70: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
7a80: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
7a90: 70 69 33 63 2d 32 31 2e 36 20 7b 0a 20 20 20 20  pi3c-21.6 {.    
7aa0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7ab0: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
7ac0: 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20  TE_INTERRUPT}.  
7ad0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7ae0: 31 2e 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.7 {.    sqlite
7af0: 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  3_errcode $DB.  
7b00: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7b10: 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  UPT}.  do_test c
7b20: 61 70 69 33 63 2d 32 31 2e 38 20 7b 0a 20 20 20  api3c-21.8 {.   
7b30: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
7b40: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  d_errcode $DB.  
7b50: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7b60: 55 50 54 7d 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73  UPT}.}..# Make s
7b70: 75 72 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ure sqlite3_resu
7b80: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 29 20  lt_error_code() 
7b90: 72 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72  returns the corr
7ba0: 65 63 74 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  ect error code..
7bb0: 23 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 39  # See ticket #29
7bc0: 34 30 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  40.#.do_test cap
7bd0: 69 33 63 2d 32 32 2e 31 20 7b 0a 20 20 64 62 20  i3c-22.1 {.  db 
7be0: 70 72 6f 67 72 65 73 73 20 30 20 7b 7d 0a 20 20  progress 0 {}.  
7bf0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
7c00: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
7c10: 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65 72 72  {SELECT test_err
7c20: 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67 65 27  or('the message'
7c30: 2c 33 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20  ,3)} -1 TAIL].  
7c40: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7c50: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 50 45 52  MT.} {SQLITE_PER
7c60: 4d 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  M}.sqlite3_final
7c70: 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f 74 65 73  ize $STMT.do_tes
7c80: 74 20 63 61 70 69 33 63 2d 32 32 2e 32 20 7b 0a  t capi3c-22.2 {.
7c90: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7ca0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64  te3_prepare_v2 d
7cb0: 62 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65  b {SELECT test_e
7cc0: 72 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67  rror('the messag
7cd0: 65 27 2c 34 29 7d 20 2d 31 20 54 41 49 4c 5d 0a  e',4)} -1 TAIL].
7ce0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7cf0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 41  STMT.} {SQLITE_A
7d00: 42 4f 52 54 7d 0a 73 71 6c 69 74 65 33 5f 66 69  BORT}.sqlite3_fi
7d10: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f  nalize $STMT.do_
7d20: 74 65 73 74 20 63 61 70 69 33 63 2d 32 32 2e 33  test capi3c-22.3
7d30: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7d40: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7d50: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73  2 db {SELECT tes
7d60: 74 5f 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73  t_error('the mes
7d70: 73 61 67 65 27 2c 31 36 29 7d 20 2d 31 20 54 41  sage',16)} -1 TA
7d80: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7d90: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
7da0: 54 45 5f 45 4d 50 54 59 7d 0a 73 71 6c 69 74 65  TE_EMPTY}.sqlite
7db0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7dc0: 0a 0a 23 20 46 6f 72 20 61 20 6d 75 6c 74 69 2d  ..# For a multi-
7dd0: 63 6f 6c 75 6d 6e 20 72 65 73 75 6c 74 20 73 65  column result se
7de0: 74 20 77 68 65 72 65 20 74 68 65 20 73 61 6d 65  t where the same
7df0: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 69 73   table column is
7e00: 20 72 65 70 65 61 74 65 64 0a 23 20 69 6e 20 6d   repeated.# in m
7e10: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 20  ultiple columns 
7e20: 6f 66 20 74 68 65 20 6f 75 74 70 75 74 2c 20 76  of the output, v
7e30: 65 72 69 66 79 20 74 68 61 74 20 64 6f 69 6e 67  erify that doing
7e40: 20 61 20 55 54 46 2d 38 20 74 6f 20 55 54 46 2d   a UTF-8 to UTF-
7e50: 31 36 0a 23 20 63 6f 6e 76 65 72 73 69 6f 6e 20  16.# conversion 
7e60: 28 6f 72 20 76 69 63 65 20 76 65 72 73 61 29 20  (or vice versa) 
7e70: 6f 6e 20 6f 6e 65 20 63 6f 6c 75 6d 6e 20 64 6f  on one column do
7e80: 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  es not change th
7e90: 65 20 76 61 6c 75 65 20 6f 66 0a 23 20 74 68 65  e value of.# the
7ea0: 20 73 65 63 6f 6e 64 2e 0a 23 0a 69 66 63 61 70   second..#.ifcap
7eb0: 61 62 6c 65 20 75 74 66 31 36 20 7b 0a 20 20 64  able utf16 {.  d
7ec0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 33  o_test capi3c-23
7ed0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d  .1 {.    set STM
7ee0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7ef0: 72 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43 54  re_v2 db {SELECT
7f00: 20 62 2c 62 2c 62 2c 62 20 46 52 4f 4d 20 74 31   b,b,b,b FROM t1
7f10: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  } -1 TAIL].    s
7f20: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
7f30: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  T.  } {SQLITE_RO
7f40: 57 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  W}.  do_test cap
7f50: 69 33 63 2d 32 33 2e 32 20 7b 0a 20 20 20 20 73  i3c-23.2 {.    s
7f60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
7f70: 78 74 31 36 20 24 53 54 4d 54 20 30 0a 20 20 20  xt16 $STMT 0.   
7f80: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
7f90: 74 65 78 74 20 24 53 54 4d 54 20 31 0a 20 20 7d  text $STMT 1.  }
7fa0: 20 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74 65 73 74   {one}.  do_test
7fb0: 20 63 61 70 69 33 63 2d 32 33 2e 33 20 7b 0a 20   capi3c-23.3 {. 
7fc0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
7fd0: 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 32  n_text16 $STMT 2
7fe0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .    sqlite3_col
7ff0: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 33  umn_text $STMT 3
8000: 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c  .  } {one}.  sql
8010: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
8020: 54 4d 54 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  TMT.  do_test ca
8030: 70 69 33 63 2d 32 33 2e 34 20 7b 0a 20 20 20 20  pi3c-23.4 {.    
8040: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
8050: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
8060: 7b 53 45 4c 45 43 54 20 62 7c 7c 27 78 27 2c 62  {SELECT b||'x',b
8070: 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d 20 2d 31  ,b,b FROM t1} -1
8080: 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74   TAIL].    sqlit
8090: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
80a0: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 20  } {SQLITE_ROW}. 
80b0: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
80c0: 32 33 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  23.5 {.    sqlit
80d0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
80e0: 20 24 53 54 4d 54 20 30 0a 20 20 20 20 73 71 6c   $STMT 0.    sql
80f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8100: 20 24 53 54 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e   $STMT 1.  } {on
8110: 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  e}.  do_test cap
8120: 69 33 63 2d 32 33 2e 36 20 7b 0a 20 20 20 20 73  i3c-23.6 {.    s
8130: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8140: 78 74 31 36 20 24 53 54 4d 54 20 32 0a 20 20 20  xt16 $STMT 2.   
8150: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8160: 74 65 78 74 20 24 53 54 4d 54 20 33 0a 20 20 7d  text $STMT 3.  }
8170: 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69 74 65 33   {one}.  sqlite3
8180: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
8190: 7d 0a 0a 23 20 54 65 73 74 20 64 65 63 6c 74 79  }..# Test declty
81a0: 70 65 20 6f 6e 20 73 6f 6d 65 20 53 45 4c 45 43  pe on some SELEC
81b0: 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
81c0: 74 20 63 6f 6e 74 61 69 6e 20 73 75 62 2d 73 65  t contain sub-se
81d0: 6c 65 63 74 73 2e 0a 23 0a 70 72 6f 63 20 64 65  lects..#.proc de
81e0: 63 6c 74 79 70 65 20 7b 7a 53 71 6c 7d 20 7b 0a  cltype {zSql} {.
81f0: 20 20 73 65 74 20 72 65 74 20 5b 6c 69 73 74 5d    set ret [list]
8200: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
8210: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
8220: 64 62 20 24 7a 53 71 6c 20 2d 31 20 54 41 49 4c  db $zSql -1 TAIL
8230: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
8240: 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65 33  } {$i < [sqlite3
8250: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
8260: 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  TMT]} {incr i} {
8270: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 74  .    lappend ret
8280: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
8290: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
82a0: 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  $i].  }.  sqlite
82b0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
82c0: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 74 0a 7d  .  return $ret.}
82d0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
82e0: 32 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  24.1 {.  execsql
82f0: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
8300: 74 35 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20  t5(a INTEGER, b 
8310: 53 54 52 49 4e 47 2c 20 63 20 44 41 54 45 54 49  STRING, c DATETI
8320: 4d 45 29 20 7d 0a 20 20 64 65 63 6c 74 79 70 65  ME) }.  decltype
8330: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
8340: 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 20 53  t5}.} {INTEGER S
8350: 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45 7d 0a  TRING DATETIME}.
8360: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
8370: 34 2e 32 20 7b 0a 20 20 64 65 63 6c 74 79 70 65  4.2 {.  decltype
8380: 20 7b 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54   {SELECT (SELECT
8390: 20 63 29 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b   c) FROM t5}.} {
83a0: 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73  DATETIME}.do_tes
83b0: 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20 7b 0a  t capi3c-24.3 {.
83c0: 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45    decltype {SELE
83d0: 43 54 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  CT (SELECT * FRO
83e0: 4d 20 28 53 45 4c 45 43 54 20 63 29 29 20 46 52  M (SELECT c)) FR
83f0: 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54 45 54 49  OM t5}.} {DATETI
8400: 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ME}.do_test capi
8410: 33 63 2d 32 34 2e 34 20 7b 0a 20 20 64 65 63 6c  3c-24.4 {.  decl
8420: 74 79 70 65 20 7b 53 45 4c 45 43 54 20 2a 20 46  type {SELECT * F
8430: 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52  ROM (SELECT * FR
8440: 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59 20 63  OM t5 ORDER BY c
8450: 20 4c 49 4d 49 54 20 31 29 20 4f 52 44 45 52 20   LIMIT 1) ORDER 
8460: 42 59 20 62 7d 0a 7d 20 7b 49 4e 54 45 47 45 52  BY b}.} {INTEGER
8470: 20 53 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45   STRING DATETIME
8480: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
8490: 2d 32 34 2e 35 20 7b 0a 20 20 64 65 63 6c 74 79  -24.5 {.  declty
84a0: 70 65 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  pe {.    SELECT 
84b0: 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28  (SELECT x FROM (
84c0: 53 45 4c 45 43 54 20 63 20 41 53 20 78 29 29 20  SELECT c AS x)) 
84d0: 0a 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43  .    FROM (SELEC
84e0: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
84f0: 52 20 42 59 20 63 20 4c 49 4d 49 54 20 31 29 20  R BY c LIMIT 1) 
8500: 4f 52 44 45 52 20 42 59 20 62 0a 20 20 7d 0a 7d  ORDER BY b.  }.}
8510: 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74   {DATETIME}.do_t
8520: 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20  est capi3c-24.3 
8530: 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45  {.  decltype {SE
8540: 4c 45 43 54 20 28 53 45 4c 45 43 54 20 78 20 46  LECT (SELECT x F
8550: 52 4f 4d 20 28 53 45 4c 45 43 54 20 74 35 2e 61  ROM (SELECT t5.a
8560: 20 41 53 20 78 29 29 20 46 52 4f 4d 20 74 35 7d   AS x)) FROM t5}
8570: 0a 7d 20 7b 49 4e 54 45 47 45 52 7d 0a 0a 0a 23  .} {INTEGER}...#
8580: 20 46 75 72 74 68 65 72 20 74 65 73 74 73 20 6f   Further tests o
8590: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
85a0: 5f 64 65 63 6c 74 79 70 65 28 29 3a 0a 23 0a 64  _decltype():.#.d
85b0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
85c0: 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  5.0 {.  CREATE T
85d0: 41 42 4c 45 20 74 31 31 28 61 20 56 41 52 43 48  ABLE t11(a VARCH
85e0: 41 52 28 31 30 29 2c 20 62 20 49 4e 54 45 47 45  AR(10), b INTEGE
85f0: 52 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  R);.  CREATE TAB
8600: 4c 45 20 74 31 32 28 61 20 56 41 52 43 48 41 52  LE t12(a VARCHAR
8610: 28 31 35 29 2c 20 62 20 46 4c 4f 41 54 29 3b 0a  (15), b FLOAT);.
8620: 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73  }..foreach {tn s
8630: 71 6c 7d 20 7b 0a 20 20 31 20 22 53 45 4c 45 43  ql} {.  1 "SELEC
8640: 54 20 2a 20 46 52 4f 4d 20 74 31 31 20 55 4e 49  T * FROM t11 UNI
8650: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 2a 20  ON ALL SELECT * 
8660: 46 52 4f 4d 20 74 31 32 22 0a 20 20 32 20 22 53  FROM t12".  2 "S
8670: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
8680: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20   UNION SELECT * 
8690: 46 52 4f 4d 20 74 31 32 22 0a 20 20 33 20 22 53  FROM t12".  3 "S
86a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
86b0: 20 45 58 43 45 50 54 20 53 45 4c 45 43 54 20 2a   EXCEPT SELECT *
86c0: 20 46 52 4f 4d 20 74 31 32 22 0a 20 20 34 20 22   FROM t12".  4 "
86d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
86e0: 31 20 49 4e 54 45 52 53 45 43 54 20 53 45 4c 45  1 INTERSECT SELE
86f0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 32 22 0a 0a  CT * FROM t12"..
8700: 20 20 35 20 22 53 45 4c 45 43 54 20 2a 20 46 52    5 "SELECT * FR
8710: 4f 4d 20 74 31 31 20 55 4e 49 4f 4e 20 41 4c 4c  OM t11 UNION ALL
8720: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
8730: 31 32 20 4f 52 44 45 52 20 42 59 20 31 22 0a 20  12 ORDER BY 1". 
8740: 20 36 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f   6 "SELECT * FRO
8750: 4d 20 74 31 31 20 55 4e 49 4f 4e 20 53 45 4c 45  M t11 UNION SELE
8760: 43 54 20 2a 20 46 52 4f 4d 20 74 31 32 20 4f 52  CT * FROM t12 OR
8770: 44 45 52 20 42 59 20 31 22 0a 20 20 37 20 22 53  DER BY 1".  7 "S
8780: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
8790: 20 45 58 43 45 50 54 20 53 45 4c 45 43 54 20 2a   EXCEPT SELECT *
87a0: 20 46 52 4f 4d 20 74 31 32 20 4f 52 44 45 52 20   FROM t12 ORDER 
87b0: 42 59 20 31 22 0a 20 20 38 20 22 53 45 4c 45 43  BY 1".  8 "SELEC
87c0: 54 20 2a 20 46 52 4f 4d 20 74 31 31 20 49 4e 54  T * FROM t11 INT
87d0: 45 52 53 45 43 54 20 53 45 4c 45 43 54 20 2a 20  ERSECT SELECT * 
87e0: 46 52 4f 4d 20 74 31 32 20 4f 52 44 45 52 20 42  FROM t12 ORDER B
87f0: 59 20 31 22 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65  Y 1".} {.  do_te
8800: 73 74 20 32 35 2e 24 74 6e 20 7b 20 64 65 63 6c  st 25.$tn { decl
8810: 74 79 70 65 20 24 73 71 6c 20 7d 20 7b 56 41 52  type $sql } {VAR
8820: 43 48 41 52 28 31 30 29 20 49 4e 54 45 47 45 52  CHAR(10) INTEGER
8830: 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }.}..finish_test
8840: 0a                                               .