/ Hex Artifact Content
Login

Artifact 0b9edb0c2156a964b9271cd5ea7ae56736cc2fcb:


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 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   {library routin
1280: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
1290: 73 65 71 75 65 6e 63 65 7d 0a 20 20 69 66 63 61  sequence}.  ifca
12a0: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
12b0: 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69      do_test capi
12c0: 33 63 2d 33 2e 36 2e 33 2d 6d 69 73 75 73 65 20  3c-3.6.3-misuse 
12d0: 7b 0a 20 20 20 20 20 20 75 74 66 38 20 5b 73 71  {.      utf8 [sq
12e0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 20 24  lite3_errmsg16 $
12f0: 64 62 32 5d 0a 20 20 20 20 7d 20 7b 6c 69 62 72  db2].    } {libr
1300: 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c  ary routine call
1310: 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e  ed out of sequen
1320: 63 65 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 72 65 6e  ce}.  }.}..# ren
1330: 61 6d 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ame sqlite3_open
1340: 20 22 22 0a 23 20 72 65 6e 61 6d 65 20 73 71 6c   "".# rename sql
1350: 69 74 65 33 5f 6f 70 65 6e 5f 6f 6c 64 20 73 71  ite3_open_old sq
1360: 6c 69 74 65 33 5f 6f 70 65 6e 0a 0a 69 66 63 61  lite3_open..ifca
1370: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
1380: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 34  do_test capi3c-4
1390: 2e 31 20 7b 0a 20 20 73 65 74 20 64 62 32 20 5b  .1 {.  set db2 [
13a0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 5b  sqlite3_open16 [
13b0: 75 74 66 31 36 20 74 65 73 74 2e 64 62 5d 20 7b  utf16 test.db] {
13c0: 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72  }].  sqlite3_err
13d0: 63 6f 64 65 20 24 64 62 32 0a 7d 20 7b 53 51 4c  code $db2.} {SQL
13e0: 49 54 45 5f 4f 4b 7d 0a 23 20 46 49 58 20 4d 45  ITE_OK}.# FIX ME
13f0: 3a 20 53 68 6f 75 6c 64 20 74 65 73 74 20 74 68  : Should test th
1400: 65 20 64 62 20 68 61 6e 64 6c 65 20 77 6f 72 6b  e db handle work
1410: 73 2e 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  s..do_test capi3
1420: 63 2d 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  c-4.2 {.  sqlite
1430: 33 5f 63 6c 6f 73 65 20 24 64 62 32 0a 7d 20 7b  3_close $db2.} {
1440: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65  SQLITE_OK}.do_te
1450: 73 74 20 63 61 70 69 33 63 2d 34 2e 33 20 7b 0a  st capi3c-4.3 {.
1460: 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65    catch {.    se
1470: 74 20 64 62 32 20 5b 73 71 6c 69 74 65 33 5f 6f  t db2 [sqlite3_o
1480: 70 65 6e 31 36 20 5b 75 74 66 31 36 20 2f 62 6f  pen16 [utf16 /bo
1490: 67 75 73 2f 70 61 74 68 2f 74 65 73 74 2e 64 62  gus/path/test.db
14a0: 5d 20 7b 7d 5d 0a 20 20 7d 0a 20 20 73 71 6c 69  ] {}].  }.  sqli
14b0: 74 65 33 5f 65 72 72 63 6f 64 65 20 24 64 62 32  te3_errcode $db2
14c0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f  .} {SQLITE_CANTO
14d0: 50 45 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70  PEN}.do_test cap
14e0: 69 33 63 2d 34 2e 34 20 7b 0a 20 20 75 74 66 38  i3c-4.4 {.  utf8
14f0: 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   [sqlite3_errmsg
1500: 31 36 20 24 64 62 32 5d 0a 7d 20 7b 75 6e 61 62  16 $db2].} {unab
1510: 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
1520: 61 73 65 20 66 69 6c 65 7d 0a 64 6f 5f 74 65 73  ase file}.do_tes
1530: 74 20 63 61 70 69 33 63 2d 34 2e 35 20 7b 0a 20  t capi3c-4.5 {. 
1540: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 24   sqlite3_close $
1550: 64 62 32 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  db2.} {SQLITE_OK
1560: 7d 0a 7d 20 3b 23 20 75 74 66 31 36 0a 0a 23 20  }.} ;# utf16..# 
1570: 54 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65  This proc is use
1580: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f  d to test the fo
1590: 6c 6c 6f 77 69 6e 67 20 41 50 49 20 63 61 6c 6c  llowing API call
15a0: 73 3a 0a 23 0a 23 20 73 71 6c 69 74 65 33 5f 63  s:.#.# sqlite3_c
15b0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 23 20 73 71  olumn_count.# sq
15c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
15d0: 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e.# sqlite3_colu
15e0: 6d 6e 5f 6e 61 6d 65 31 36 0a 23 20 73 71 6c 69  mn_name16.# sqli
15f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1600: 79 70 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f  ype.# sqlite3_co
1610: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 0a  lumn_decltype16.
1620: 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63  #.# $STMT is a c
1630: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
1640: 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20  ement. $test is 
1650: 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73  a prefix.# to us
1660: 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73  e for test names
1670: 20 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f   within this pro
1680: 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c  c. $names is a l
1690: 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c  ist.# of the col
16a0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73  umn names that s
16b0: 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  hould be returne
16c0: 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64  d by $STMT..# $d
16d0: 65 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69  ecltypes is a li
16e0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  st of column dec
16f0: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66  laration types f
1700: 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78  or $STMT..#.# Ex
1710: 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53  ample:.#.# set S
1720: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
1730: 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20  pare_v2 "SELECT 
1740: 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d  1, 2, 2;" -1 DUM
1750: 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64  MY].# check_head
1760: 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20  er test1.1 {1 2 
1770: 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a  3} {"" "" ""}.#.
1780: 70 72 6f 63 20 63 68 65 63 6b 5f 68 65 61 64 65  proc check_heade
1790: 72 20 7b 53 54 4d 54 20 74 65 73 74 20 6e 61 6d  r {STMT test nam
17a0: 65 73 20 64 65 63 6c 74 79 70 65 73 7d 20 7b 0a  es decltypes} {.
17b0: 0a 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74  .  # Use the ret
17c0: 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  urn value of sql
17d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
17e0: 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 23  t() to build.  #
17f0: 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d   a list of colum
1800: 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65 2e 20  n indexes. i.e. 
1810: 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  If sqlite3_colum
1820: 6e 5f 63 6f 75 6e 74 0a 20 20 23 20 69 73 20 33  n_count.  # is 3
1830: 2c 20 62 75 69 6c 64 20 74 68 65 20 6c 69 73 74  , build the list
1840: 20 7b 30 20 31 20 32 7d 2e 0a 20 20 73 65 74 20   {0 1 2}..  set 
1850: 3a 3a 69 64 78 6c 69 73 74 20 5b 6c 69 73 74 5d  ::idxlist [list]
1860: 0a 20 20 73 65 74 20 3a 3a 6e 75 6d 63 6f 6c 73  .  set ::numcols
1870: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1880: 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20  _count $STMT].  
1890: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
18a0: 69 20 3c 20 24 3a 3a 6e 75 6d 63 6f 6c 73 7d 20  i < $::numcols} 
18b0: 7b 69 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e  {incr i} {lappen
18c0: 64 20 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a  d ::idxlist $i}.
18d0: 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65  .  # Column name
18e0: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f  s in UTF-8.  do_
18f0: 74 65 73 74 20 24 74 65 73 74 2e 31 20 7b 0a 20  test $test.1 {. 
1900: 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73 74     set cnamelist
1910: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
1920: 61 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b  ach i $idxlist {
1930: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
1940: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
1950: 6e 5f 6e 61 6d 65 20 24 53 54 4d 54 20 24 69 5d  n_name $STMT $i]
1960: 7d 20 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65  } .    set cname
1970: 6c 69 73 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a  list.  } $names.
1980: 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65  .  # Column name
1990: 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66  s in UTF-16.  if
19a0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
19b0: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
19c0: 65 73 74 2e 32 20 7b 0a 20 20 20 20 20 20 73 65  est.2 {.      se
19d0: 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73  t cnamelist [lis
19e0: 74 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t].      foreach
19f0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20   i $idxlist {.  
1a00: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
1a10: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
1a20: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1a30: 6d 65 31 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a  me16 $STMT $i]].
1a40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65        }.      se
1a50: 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20  t cnamelist.    
1a60: 7d 20 24 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20  } $names.  }..  
1a70: 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  # Column names i
1a80: 6e 20 55 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73  n UTF-8.  do_tes
1a90: 74 20 24 74 65 73 74 2e 33 20 7b 0a 20 20 20 20  t $test.3 {.    
1aa0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c  set cnamelist [l
1ab0: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
1ac0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
1ad0: 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b  pend cnamelist [
1ae0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1af0: 61 6d 65 20 24 53 54 4d 54 20 24 69 5d 7d 20 0a  ame $STMT $i]} .
1b00: 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69 73      set cnamelis
1b10: 74 0a 20 20 7d 20 24 6e 61 6d 65 73 0a 0a 20 20  t.  } $names..  
1b20: 23 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  # Column names i
1b30: 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61 70  n UTF-16.  ifcap
1b40: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1b50: 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74     do_test $test
1b60: 2e 34 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  .4 {.      set c
1b70: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
1b80: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20        foreach i 
1b90: 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20 20  $idxlist {.     
1ba0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65     lappend cname
1bb0: 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69  list [utf8 [sqli
1bc0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
1bd0: 36 20 24 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20  6 $STMT $i]].   
1be0: 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 20 63     }.      set c
1bf0: 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 7d 20 24  namelist.    } $
1c00: 6e 61 6d 65 73 0a 20 20 7d 0a 0a 20 20 23 20 43  names.  }..  # C
1c10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 55  olumn names in U
1c20: 54 46 2d 38 0a 20 20 64 6f 5f 74 65 73 74 20 24  TF-8.  do_test $
1c30: 74 65 73 74 2e 35 20 7b 0a 20 20 20 20 73 65 74  test.5 {.    set
1c40: 20 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74   cnamelist [list
1c50: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20  ].    foreach i 
1c60: 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e  $idxlist {lappen
1c70: 64 20 63 6e 61 6d 65 6c 69 73 74 20 5b 73 71 6c  d cnamelist [sql
1c80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1c90: 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 20  type $STMT $i]} 
1ca0: 0a 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69  .    set cnameli
1cb0: 73 74 0a 20 20 7d 20 24 64 65 63 6c 74 79 70 65  st.  } $decltype
1cc0: 73 0a 0a 20 20 23 20 43 6f 6c 75 6d 6e 20 64 65  s..  # Column de
1cd0: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20  claration types 
1ce0: 69 6e 20 55 54 46 2d 31 36 0a 20 20 69 66 63 61  in UTF-16.  ifca
1cf0: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
1d00: 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74 65 73      do_test $tes
1d10: 74 2e 36 20 7b 0a 20 20 20 20 20 20 73 65 74 20  t.6 {.      set 
1d20: 63 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d  cnamelist [list]
1d30: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69  .      foreach i
1d40: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
1d50: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d      lappend cnam
1d60: 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c  elist [utf8 [sql
1d70: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1d80: 74 79 70 65 31 36 20 24 53 54 4d 54 20 24 69 5d  type16 $STMT $i]
1d90: 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ].      }.      
1da0: 73 65 74 20 63 6e 61 6d 65 6c 69 73 74 0a 20 20  set cnamelist.  
1db0: 20 20 7d 20 24 64 65 63 6c 74 79 70 65 73 0a 20    } $decltypes. 
1dc0: 20 7d 0a 0a 0a 20 20 23 20 54 65 73 74 20 73 6f   }...  # Test so
1dd0: 6d 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20  me out of range 
1de0: 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20 20 69 66  conditions:.  if
1df0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
1e00: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24 74  {.    do_test $t
1e10: 65 73 74 2e 37 20 7b 0a 20 20 20 20 20 20 6c 69  est.7 {.      li
1e20: 73 74 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  st \.        [sq
1e30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1e40: 65 20 24 53 54 4d 54 20 2d 31 5d 20 5c 0a 20 20  e $STMT -1] \.  
1e50: 20 20 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 63        [sqlite3_c
1e60: 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 24 53 54  olumn_name16 $ST
1e70: 4d 54 20 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20  MT -1] \.       
1e80: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
1e90: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
1ea0: 2d 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73  -1] \.        [s
1eb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1ec0: 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54 20 2d  cltype16 $STMT -
1ed0: 31 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  1] \.        [sq
1ee0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1ef0: 65 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c 73  e $STMT $numcols
1f00: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71 6c  ] \.        [sql
1f10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1f20: 31 36 20 24 53 54 4d 54 20 24 6e 75 6d 63 6f 6c  16 $STMT $numcol
1f30: 73 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 73 71  s] \.        [sq
1f40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1f50: 6c 74 79 70 65 20 24 53 54 4d 54 20 24 6e 75 6d  ltype $STMT $num
1f60: 63 6f 6c 73 5d 20 5c 0a 20 20 20 20 20 20 20 20  cols] \.        
1f70: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
1f80: 64 65 63 6c 74 79 70 65 31 36 20 24 53 54 4d 54  decltype16 $STMT
1f90: 20 24 6e 75 6d 63 6f 6c 73 5d 0a 20 20 20 20 7d   $numcols].    }
1fa0: 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d   {{} {} {} {} {}
1fb0: 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 0a 7d   {} {} {}}.  }.}
1fc0: 20 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20 69   ..# This proc i
1fd0: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
1fe0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 41 50 49  he following API
1ff0: 20 63 61 6c 6c 73 3a 0a 23 0a 23 20 73 71 6c 69   calls:.#.# sqli
2000: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
2010: 6e 5f 6e 61 6d 65 0a 23 20 73 71 6c 69 74 65 33  n_name.# sqlite3
2020: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
2030: 61 6d 65 31 36 0a 23 20 73 71 6c 69 74 65 33 5f  ame16.# sqlite3_
2040: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
2050: 65 0a 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e.# sqlite3_colu
2060: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 0a  mn_table_name16.
2070: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2080: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 0a 23  _database_name.#
2090: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
20a0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 0a  database_name16.
20b0: 23 0a 23 20 24 53 54 4d 54 20 69 73 20 61 20 63  #.# $STMT is a c
20c0: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
20d0: 65 6d 65 6e 74 2e 20 24 74 65 73 74 20 69 73 20  ement. $test is 
20e0: 61 20 70 72 65 66 69 78 0a 23 20 74 6f 20 75 73  a prefix.# to us
20f0: 65 20 66 6f 72 20 74 65 73 74 20 6e 61 6d 65 73  e for test names
2100: 20 77 69 74 68 69 6e 20 74 68 69 73 20 70 72 6f   within this pro
2110: 63 2e 20 24 6e 61 6d 65 73 20 69 73 20 61 20 6c  c. $names is a l
2120: 69 73 74 0a 23 20 6f 66 20 74 68 65 20 63 6f 6c  ist.# of the col
2130: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 73  umn names that s
2140: 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  hould be returne
2150: 64 20 62 79 20 24 53 54 4d 54 2e 0a 23 20 24 64  d by $STMT..# $d
2160: 65 63 6c 74 79 70 65 73 20 69 73 20 61 20 6c 69  ecltypes is a li
2170: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  st of column dec
2180: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 73 20 66  laration types f
2190: 6f 72 20 24 53 54 4d 54 2e 0a 23 0a 23 20 45 78  or $STMT..#.# Ex
21a0: 61 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53  ample:.#.# set S
21b0: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
21c0: 70 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20  pare_v2 "SELECT 
21d0: 31 2c 20 32 2c 20 32 3b 22 20 2d 31 20 44 55 4d  1, 2, 2;" -1 DUM
21e0: 4d 59 5d 0a 23 20 63 68 65 63 6b 5f 68 65 61 64  MY].# check_head
21f0: 65 72 20 74 65 73 74 31 2e 31 20 7b 31 20 32 20  er test1.1 {1 2 
2200: 33 7d 20 7b 22 22 20 22 22 20 22 22 7d 0a 23 0a  3} {"" "" ""}.#.
2210: 70 72 6f 63 20 63 68 65 63 6b 5f 6f 72 69 67 69  proc check_origi
2220: 6e 5f 68 65 61 64 65 72 20 7b 53 54 4d 54 20 74  n_header {STMT t
2230: 65 73 74 20 64 62 73 20 74 61 62 6c 65 73 20 63  est dbs tables c
2240: 6f 6c 73 7d 20 7b 0a 20 20 23 20 49 66 20 73 71  ols} {.  # If sq
2250: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
2260: 67 69 6e 5f 6e 61 6d 65 28 29 20 61 6e 64 20 66  gin_name() and f
2270: 72 69 65 6e 64 73 20 61 72 65 20 6e 6f 74 20 63  riends are not c
2280: 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 0a 20 20 23  ompiled into.  #
2290: 20 74 68 69 73 20 62 75 69 6c 64 2c 20 74 68 69   this build, thi
22a0: 73 20 70 72 6f 63 20 69 73 20 61 20 6e 6f 2d 6f  s proc is a no-o
22b0: 70 2e 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6c  p..ifcapable col
22c0: 75 6d 6e 6d 65 74 61 64 61 74 61 20 7b 0a 0a 20  umnmetadata {.. 
22d0: 20 20 20 23 20 55 73 65 20 74 68 65 20 72 65 74     # Use the ret
22e0: 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  urn value of sql
22f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
2300: 74 28 29 20 74 6f 20 62 75 69 6c 64 0a 20 20 20  t() to build.   
2310: 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6c   # a list of col
2320: 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69 2e 65  umn indexes. i.e
2330: 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c  . If sqlite3_col
2340: 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 20 20 23 20  umn_count.    # 
2350: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
2360: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
2370: 20 20 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20    set ::idxlist 
2380: 5b 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20 3a  [list].    set :
2390: 3a 6e 75 6d 63 6f 6c 73 20 5b 73 71 6c 69 74 65  :numcols [sqlite
23a0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
23b0: 53 54 4d 54 5d 0a 20 20 20 20 66 6f 72 20 7b 73  STMT].    for {s
23c0: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 3a  et i 0} {$i < $:
23d0: 3a 6e 75 6d 63 6f 6c 73 7d 20 7b 69 6e 63 72 20  :numcols} {incr 
23e0: 69 7d 20 7b 6c 61 70 70 65 6e 64 20 3a 3a 69 64  i} {lappend ::id
23f0: 78 6c 69 73 74 20 24 69 7d 0a 20 20 0a 20 20 20  xlist $i}.  .   
2400: 20 23 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65   # Database name
2410: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2420: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 38 20 7b  o_test $test.8 {
2430: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2440: 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20  list [list].    
2450: 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64 78    foreach i $idx
2460: 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20 6c  list {.        l
2470: 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73 74  append cnamelist
2480: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
2490: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 20 24  _database_name $
24a0: 53 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d  STMT $i].      }
24b0: 20 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d   .      set cnam
24c0: 65 6c 69 73 74 0a 20 20 20 20 7d 20 24 64 62 73  elist.    } $dbs
24d0: 0a 20 20 0a 20 20 20 20 23 20 44 61 74 61 62 61  .  .    # Databa
24e0: 73 65 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d  se names in UTF-
24f0: 31 36 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65  16.    ifcapable
2500: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20   {utf16} {.     
2510: 20 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 39   do_test $test.9
2520: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63   {.        set c
2530: 6e 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a  namelist [list].
2540: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2550: 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20  i $idxlist {.   
2560: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
2570: 6e 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b  namelist [utf8 [
2580: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2590: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 20 24  atabase_name16 $
25a0: 53 54 4d 54 20 24 69 5d 5d 0a 20 20 20 20 20 20  STMT $i]].      
25b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 65 74 20    }.        set 
25c0: 63 6e 61 6d 65 6c 69 73 74 0a 20 20 20 20 20 20  cnamelist.      
25d0: 7d 20 24 64 62 73 0a 20 20 20 20 7d 0a 20 20 0a  } $dbs.    }.  .
25e0: 20 20 20 20 23 20 54 61 62 6c 65 20 6e 61 6d 65      # Table name
25f0: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
2600: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 30 20  o_test $test.10 
2610: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2620: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2630: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2640: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2650: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
2660: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
2670: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 20 24 53 54  n_table_name $ST
2680: 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20 0a  MT $i].      } .
2690: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
26a0: 69 73 74 0a 20 20 20 20 7d 20 24 74 61 62 6c 65  ist.    } $table
26b0: 73 0a 20 20 0a 20 20 20 20 23 20 54 61 62 6c 65  s.  .    # Table
26c0: 20 6e 61 6d 65 73 20 69 6e 20 55 54 46 2d 31 36   names in UTF-16
26d0: 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 7b  .    ifcapable {
26e0: 75 74 66 31 36 7d 20 7b 0a 20 20 20 20 20 20 64  utf16} {.      d
26f0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 31 20  o_test $test.11 
2700: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6e  {.        set cn
2710: 61 6d 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20  amelist [list]. 
2720: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69         foreach i
2730: 20 24 69 64 78 6c 69 73 74 20 7b 0a 20 20 20 20   $idxlist {.    
2740: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6e        lappend cn
2750: 61 6d 65 6c 69 73 74 20 5b 75 74 66 38 20 5b 73  amelist [utf8 [s
2760: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
2770: 62 6c 65 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54  ble_name16 $STMT
2780: 20 24 69 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a   $i]].        }.
2790: 20 20 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d          set cnam
27a0: 65 6c 69 73 74 0a 20 20 20 20 20 20 7d 20 24 74  elist.      } $t
27b0: 61 62 6c 65 73 0a 20 20 20 20 7d 0a 20 20 0a 20  ables.    }.  . 
27c0: 20 20 20 23 20 4f 72 69 67 69 6e 20 6e 61 6d 65     # Origin name
27d0: 73 20 69 6e 20 55 54 46 2d 38 0a 20 20 20 20 64  s in UTF-8.    d
27e0: 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31 32 20  o_test $test.12 
27f0: 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d  {.      set cnam
2800: 65 6c 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20  elist [list].   
2810: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2820: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2830: 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c 69 73  lappend cnamelis
2840: 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  t [sqlite3_colum
2850: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 20 24 53  n_origin_name $S
2860: 54 4d 54 20 24 69 5d 0a 20 20 20 20 20 20 7d 20  TMT $i].      } 
2870: 0a 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65  .      set cname
2880: 6c 69 73 74 0a 20 20 20 20 7d 20 24 63 6f 6c 73  list.    } $cols
2890: 0a 20 20 0a 20 20 20 20 23 20 4f 72 69 67 69 6e  .  .    # Origin
28a0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
28b0: 65 73 20 69 6e 20 55 54 46 2d 31 36 0a 20 20 20  es in UTF-16.   
28c0: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
28d0: 36 7d 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65  6} {.      do_te
28e0: 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20  st $test.13 {.  
28f0: 20 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c        set cnamel
2900: 69 73 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 20  ist [list].     
2910: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
2920: 78 6c 69 73 74 20 7b 0a 20 20 20 20 20 20 20 20  xlist {.        
2930: 20 20 6c 61 70 70 65 6e 64 20 63 6e 61 6d 65 6c    lappend cnamel
2940: 69 73 74 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  ist [utf8 [sqlit
2950: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
2960: 5f 6e 61 6d 65 31 36 20 24 53 54 4d 54 20 24 69  _name16 $STMT $i
2970: 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]].        }.   
2980: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 6c 69       set cnameli
2990: 73 74 0a 20 20 20 20 20 20 7d 20 24 63 6f 6c 73  st.      } $cols
29a0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20  .    }.  }.}..# 
29b0: 54 68 69 73 20 70 72 6f 63 20 69 73 20 75 73 65  This proc is use
29c0: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 66 6f  d to test the fo
29d0: 6c 6c 6f 77 69 6e 67 20 41 50 49 73 3a 0a 23 0a  llowing APIs:.#.
29e0: 23 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  # sqlite3_data_c
29f0: 6f 75 6e 74 0a 23 20 73 71 6c 69 74 65 33 5f 63  ount.# sqlite3_c
2a00: 6f 6c 75 6d 6e 5f 74 79 70 65 0a 23 20 73 71 6c  olumn_type.# sql
2a10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 0a  ite3_column_int.
2a20: 23 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  # sqlite3_column
2a30: 5f 74 65 78 74 0a 23 20 73 71 6c 69 74 65 33 5f  _text.# sqlite3_
2a40: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 0a 23 20  column_text16.# 
2a50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2a60: 6f 75 62 6c 65 0a 23 0a 23 20 24 53 54 4d 54 20  ouble.#.# $STMT 
2a70: 69 73 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51  is a compiled SQ
2a80: 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  L statement for 
2a90: 77 68 69 63 68 20 74 68 65 20 70 72 65 76 69 6f  which the previo
2aa0: 75 73 20 63 61 6c 6c 20 0a 23 20 74 6f 20 73 71  us call .# to sq
2ab0: 6c 69 74 65 33 5f 73 74 65 70 20 72 65 74 75 72  lite3_step retur
2ac0: 6e 65 64 20 53 51 4c 49 54 45 5f 52 4f 57 2e 20  ned SQLITE_ROW. 
2ad0: 24 74 65 73 74 20 69 73 20 61 20 70 72 65 66 69  $test is a prefi
2ae0: 78 20 74 6f 20 75 73 65 20 0a 23 20 66 6f 72 20  x to use .# for 
2af0: 74 65 73 74 20 6e 61 6d 65 73 20 77 69 74 68 69  test names withi
2b00: 6e 20 74 68 69 73 20 70 72 6f 63 2e 20 24 74 79  n this proc. $ty
2b10: 70 65 73 20 69 73 20 61 20 6c 69 73 74 20 6f 66  pes is a list of
2b20: 20 74 68 65 20 0a 23 20 6d 61 6e 69 66 65 73 74   the .# manifest
2b30: 20 74 79 70 65 73 20 66 6f 72 20 74 68 65 20 63   types for the c
2b40: 75 72 72 65 6e 74 20 72 6f 77 2e 20 24 69 6e 74  urrent row. $int
2b50: 73 2c 20 24 64 6f 75 62 6c 65 73 20 61 6e 64 20  s, $doubles and 
2b60: 24 73 74 72 69 6e 67 73 0a 23 20 61 72 65 20 6c  $strings.# are l
2b70: 69 73 74 73 20 6f 66 20 74 68 65 20 69 6e 74 65  ists of the inte
2b80: 67 65 72 2c 20 72 65 61 6c 20 61 6e 64 20 73 74  ger, real and st
2b90: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2ba0: 69 6f 6e 73 20 6f 66 0a 23 20 74 68 65 20 76 61  ions of.# the va
2bb0: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  lues in the curr
2bc0: 65 6e 74 20 72 6f 77 2e 0a 23 0a 23 20 45 78 61  ent row..#.# Exa
2bd0: 6d 70 6c 65 3a 0a 23 0a 23 20 73 65 74 20 53 54  mple:.#.# set ST
2be0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
2bf0: 61 72 65 5f 76 32 20 22 53 45 4c 45 43 54 20 27  are_v2 "SELECT '
2c00: 68 65 6c 6c 6f 27 2c 20 31 2e 31 2c 20 4e 55 4c  hello', 1.1, NUL
2c10: 4c 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 23 20 73  L" -1 DUMMY].# s
2c20: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
2c30: 54 0a 23 20 63 68 65 63 6b 5f 64 61 74 61 20 74  T.# check_data t
2c40: 65 73 74 31 2e 32 20 7b 54 45 58 54 20 52 45 41  est1.2 {TEXT REA
2c50: 4c 20 4e 55 4c 4c 7d 20 7b 30 20 31 20 30 7d 20  L NULL} {0 1 0} 
2c60: 7b 30 20 31 2e 31 20 30 7d 20 7b 68 65 6c 6c 6f  {0 1.1 0} {hello
2c70: 20 31 2e 31 20 7b 7d 7d 0a 23 0a 70 72 6f 63 20   1.1 {}}.#.proc 
2c80: 63 68 65 63 6b 5f 64 61 74 61 20 7b 53 54 4d 54  check_data {STMT
2c90: 20 74 65 73 74 20 74 79 70 65 73 20 69 6e 74 73   test types ints
2ca0: 20 64 6f 75 62 6c 65 73 20 73 74 72 69 6e 67 73   doubles strings
2cb0: 7d 20 7b 0a 0a 20 20 23 20 55 73 65 20 74 68 65  } {..  # Use the
2cc0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66   return value of
2cd0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2ce0: 63 6f 75 6e 74 28 29 20 74 6f 20 62 75 69 6c 64  count() to build
2cf0: 0a 20 20 23 20 61 20 6c 69 73 74 20 6f 66 20 63  .  # a list of c
2d00: 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 2e 20 69  olumn indexes. i
2d10: 2e 65 2e 20 49 66 20 73 71 6c 69 74 65 33 5f 63  .e. If sqlite3_c
2d20: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 0a 20 20 23 20  olumn_count.  # 
2d30: 69 73 20 33 2c 20 62 75 69 6c 64 20 74 68 65 20  is 3, build the 
2d40: 6c 69 73 74 20 7b 30 20 31 20 32 7d 2e 0a 20 20  list {0 1 2}..  
2d50: 73 65 74 20 3a 3a 69 64 78 6c 69 73 74 20 5b 6c  set ::idxlist [l
2d60: 69 73 74 5d 0a 20 20 73 65 74 20 6e 75 6d 63 6f  ist].  set numco
2d70: 6c 73 20 5b 73 71 6c 69 74 65 33 5f 64 61 74 61  ls [sqlite3_data
2d80: 5f 63 6f 75 6e 74 20 24 53 54 4d 54 5d 0a 20 20  _count $STMT].  
2d90: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
2da0: 69 20 3c 20 24 6e 75 6d 63 6f 6c 73 7d 20 7b 69  i < $numcols} {i
2db0: 6e 63 72 20 69 7d 20 7b 6c 61 70 70 65 6e 64 20  ncr i} {lappend 
2dc0: 3a 3a 69 64 78 6c 69 73 74 20 24 69 7d 0a 0a 23  ::idxlist $i}..#
2dd0: 20 74 79 70 65 73 0a 64 6f 5f 74 65 73 74 20 24   types.do_test $
2de0: 74 65 73 74 2e 31 20 7b 0a 20 20 73 65 74 20 74  test.1 {.  set t
2df0: 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  ypes [list].  fo
2e00: 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73 74  reach i $idxlist
2e10: 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65 73 20   {lappend types 
2e20: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
2e30: 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d 7d 0a  type $STMT $i]}.
2e40: 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20 24 74    set types.} $t
2e50: 79 70 65 73 0a 0a 23 20 49 6e 74 65 67 65 72 73  ypes..# Integers
2e60: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 32  .do_test $test.2
2e70: 20 7b 0a 20 20 73 65 74 20 69 6e 74 73 20 5b 6c   {.  set ints [l
2e80: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69  ist].  foreach i
2e90: 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70 65   $idxlist {lappe
2ea0: 6e 64 20 69 6e 74 73 20 5b 73 71 6c 69 74 65 33  nd ints [sqlite3
2eb0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 24 53  _column_int64 $S
2ec0: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 69  TMT $i]}.  set i
2ed0: 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23 20 62  nts.} $ints..# b
2ee0: 79 74 65 73 0a 73 65 74 20 6c 65 6e 73 20 5b 6c  ytes.set lens [l
2ef0: 69 73 74 5d 0a 66 6f 72 65 61 63 68 20 69 20 24  ist].foreach i $
2f00: 3a 3a 69 64 78 6c 69 73 74 20 7b 0a 20 20 6c 61  ::idxlist {.  la
2f10: 70 70 65 6e 64 20 6c 65 6e 73 20 5b 73 74 72 69  ppend lens [stri
2f20: 6e 67 20 6c 65 6e 67 74 68 20 5b 6c 69 6e 64 65  ng length [linde
2f30: 78 20 24 73 74 72 69 6e 67 73 20 24 69 5d 5d 0a  x $strings $i]].
2f40: 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  }.do_test $test.
2f50: 33 20 7b 0a 20 20 73 65 74 20 62 79 74 65 73 20  3 {.  set bytes 
2f60: 5b 6c 69 73 74 5d 0a 20 20 73 65 74 20 6c 65 6e  [list].  set len
2f70: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
2f80: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a  ch i $idxlist {.
2f90: 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74 65      lappend byte
2fa0: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
2fb0: 6e 5f 62 79 74 65 73 20 24 53 54 4d 54 20 24 69  n_bytes $STMT $i
2fc0: 5d 0a 20 20 7d 0a 20 20 73 65 74 20 62 79 74 65  ].  }.  set byte
2fd0: 73 0a 7d 20 24 6c 65 6e 73 0a 0a 23 20 62 79 74  s.} $lens..# byt
2fe0: 65 73 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b  es16.ifcapable {
2ff0: 75 74 66 31 36 7d 20 7b 0a 20 20 73 65 74 20 6c  utf16} {.  set l
3000: 65 6e 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  ens [list].  for
3010: 65 61 63 68 20 69 20 24 3a 3a 69 64 78 6c 69 73  each i $::idxlis
3020: 74 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  t {.    lappend 
3030: 6c 65 6e 73 20 5b 65 78 70 72 20 32 20 2a 20 5b  lens [expr 2 * [
3040: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 6c  string length [l
3050: 69 6e 64 65 78 20 24 73 74 72 69 6e 67 73 20 24  index $strings $
3060: 69 5d 5d 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65  i]]].  }.  do_te
3070: 73 74 20 24 74 65 73 74 2e 34 20 7b 0a 20 20 20  st $test.4 {.   
3080: 20 73 65 74 20 62 79 74 65 73 20 5b 6c 69 73 74   set bytes [list
3090: 5d 0a 20 20 20 20 73 65 74 20 6c 65 6e 73 20 5b  ].    set lens [
30a0: 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63  list].    foreac
30b0: 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 0a 20  h i $idxlist {. 
30c0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 62 79 74       lappend byt
30d0: 65 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  es [sqlite3_colu
30e0: 6d 6e 5f 62 79 74 65 73 31 36 20 24 53 54 4d 54  mn_bytes16 $STMT
30f0: 20 24 69 5d 0a 20 20 20 20 7d 0a 20 20 20 20 73   $i].    }.    s
3100: 65 74 20 62 79 74 65 73 0a 20 20 7d 20 24 6c 65  et bytes.  } $le
3110: 6e 73 0a 7d 0a 0a 23 20 42 6c 6f 62 0a 64 6f 5f  ns.}..# Blob.do_
3120: 74 65 73 74 20 24 74 65 73 74 2e 35 20 7b 0a 20  test $test.5 {. 
3130: 20 73 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d   set utf8 [list]
3140: 0a 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64  .  foreach i $id
3150: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
3160: 74 66 38 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8 [sqlite3_col
3170: 75 6d 6e 5f 62 6c 6f 62 20 24 53 54 4d 54 20 24  umn_blob $STMT $
3180: 69 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d  i]}.  set utf8.}
3190: 20 24 73 74 72 69 6e 67 73 0a 0a 23 20 55 54 46   $strings..# UTF
31a0: 2d 38 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74  -8.do_test $test
31b0: 2e 36 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20  .6 {.  set utf8 
31c0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
31d0: 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70   i $idxlist {lap
31e0: 70 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74  pend utf8 [sqlit
31f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
3200: 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20  STMT $i]}.  set 
3210: 75 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a  utf8.} $strings.
3220: 0a 23 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73  .# Floats.do_tes
3230: 74 20 24 74 65 73 74 2e 37 20 7b 0a 20 20 73 65  t $test.7 {.  se
3240: 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20  t utf8 [list].  
3250: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3260: 73 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38  st {lappend utf8
3270: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3280: 5f 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69  _double $STMT $i
3290: 5d 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20  ]}.  set utf8.} 
32a0: 24 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d  $doubles..# UTF-
32b0: 31 36 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  16.ifcapable {ut
32c0: 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  f16} {.  do_test
32d0: 20 24 74 65 73 74 2e 38 20 7b 0a 20 20 20 20 73   $test.8 {.    s
32e0: 65 74 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20  et utf8 [list]. 
32f0: 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 69 64     foreach i $id
3300: 78 6c 69 73 74 20 7b 6c 61 70 70 65 6e 64 20 75  xlist {lappend u
3310: 74 66 38 20 5b 75 74 66 38 20 5b 73 71 6c 69 74  tf8 [utf8 [sqlit
3320: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
3330: 20 24 53 54 4d 54 20 24 69 5d 5d 7d 0a 20 20 20   $STMT $i]]}.   
3340: 20 73 65 74 20 75 74 66 38 0a 20 20 7d 20 24 73   set utf8.  } $s
3350: 74 72 69 6e 67 73 0a 7d 0a 0a 23 20 49 6e 74 65  trings.}..# Inte
3360: 67 65 72 73 0a 64 6f 5f 74 65 73 74 20 24 74 65  gers.do_test $te
3370: 73 74 2e 39 20 7b 0a 20 20 73 65 74 20 69 6e 74  st.9 {.  set int
3380: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
3390: 63 68 20 69 20 24 69 64 78 6c 69 73 74 20 7b 6c  ch i $idxlist {l
33a0: 61 70 70 65 6e 64 20 69 6e 74 73 20 5b 73 71 6c  append ints [sql
33b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20  ite3_column_int 
33c0: 24 53 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74  $STMT $i]}.  set
33d0: 20 69 6e 74 73 0a 7d 20 24 69 6e 74 73 0a 0a 23   ints.} $ints..#
33e0: 20 46 6c 6f 61 74 73 0a 64 6f 5f 74 65 73 74 20   Floats.do_test 
33f0: 24 74 65 73 74 2e 31 30 20 7b 0a 20 20 73 65 74  $test.10 {.  set
3400: 20 75 74 66 38 20 5b 6c 69 73 74 5d 0a 20 20 66   utf8 [list].  f
3410: 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69 73  oreach i $idxlis
3420: 74 20 7b 6c 61 70 70 65 6e 64 20 75 74 66 38 20  t {lappend utf8 
3430: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3440: 64 6f 75 62 6c 65 20 24 53 54 4d 54 20 24 69 5d  double $STMT $i]
3450: 7d 0a 20 20 73 65 74 20 75 74 66 38 0a 7d 20 24  }.  set utf8.} $
3460: 64 6f 75 62 6c 65 73 0a 0a 23 20 55 54 46 2d 38  doubles..# UTF-8
3470: 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e 31  .do_test $test.1
3480: 31 20 7b 0a 20 20 73 65 74 20 75 74 66 38 20 5b  1 {.  set utf8 [
3490: 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20  list].  foreach 
34a0: 69 20 24 69 64 78 6c 69 73 74 20 7b 6c 61 70 70  i $idxlist {lapp
34b0: 65 6e 64 20 75 74 66 38 20 5b 73 71 6c 69 74 65  end utf8 [sqlite
34c0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53  3_column_text $S
34d0: 54 4d 54 20 24 69 5d 7d 0a 20 20 73 65 74 20 75  TMT $i]}.  set u
34e0: 74 66 38 0a 7d 20 24 73 74 72 69 6e 67 73 0a 0a  tf8.} $strings..
34f0: 23 20 54 79 70 65 73 0a 64 6f 5f 74 65 73 74 20  # Types.do_test 
3500: 24 74 65 73 74 2e 31 32 20 7b 0a 20 20 73 65 74  $test.12 {.  set
3510: 20 74 79 70 65 73 20 5b 6c 69 73 74 5d 0a 20 20   types [list].  
3520: 66 6f 72 65 61 63 68 20 69 20 24 69 64 78 6c 69  foreach i $idxli
3530: 73 74 20 7b 6c 61 70 70 65 6e 64 20 74 79 70 65  st {lappend type
3540: 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  s [sqlite3_colum
3550: 6e 5f 74 79 70 65 20 24 53 54 4d 54 20 24 69 5d  n_type $STMT $i]
3560: 7d 0a 20 20 73 65 74 20 74 79 70 65 73 0a 7d 20  }.  set types.} 
3570: 24 74 79 70 65 73 0a 0a 23 20 54 65 73 74 20 74  $types..# Test t
3580: 68 61 74 20 61 6e 20 6f 75 74 20 6f 66 20 72 61  hat an out of ra
3590: 6e 67 65 20 72 65 71 75 65 73 74 20 72 65 74 75  nge request retu
35a0: 72 6e 73 20 74 68 65 20 65 71 75 69 76 61 6c 65  rns the equivale
35b0: 6e 74 20 6f 66 20 4e 55 4c 4c 0a 64 6f 5f 74 65  nt of NULL.do_te
35c0: 73 74 20 24 74 65 73 74 2e 31 33 20 7b 0a 20 20  st $test.13 {.  
35d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
35e0: 6e 74 20 24 53 54 4d 54 20 2d 31 0a 7d 20 7b 30  nt $STMT -1.} {0
35f0: 7d 0a 64 6f 5f 74 65 73 74 20 24 74 65 73 74 2e  }.do_test $test.
3600: 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  13 {.  sqlite3_c
3610: 6f 6c 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54  olumn_text $STMT
3620: 20 2d 31 0a 7d 20 7b 7d 0a 0a 7d 0a 0a 69 66 63   -1.} {}..}..ifc
3630: 61 70 61 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67  apable !floating
3640: 70 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68  point {.  finish
3650: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
3660: 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  ..do_test capi3c
3670: 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.0 {.  execsql
3680: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3690: 42 4c 45 20 74 31 28 61 20 56 41 52 49 4e 54 2c  BLE t1(a VARINT,
36a0: 20 62 20 42 4c 4f 42 2c 20 63 20 56 41 52 43 48   b BLOB, c VARCH
36b0: 41 52 28 31 36 29 29 3b 0a 20 20 20 20 49 4e 53  AR(16));.    INS
36c0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
36d0: 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20  ES(1, 2, 3);.   
36e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
36f0: 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74  VALUES('one', 't
3700: 77 6f 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  wo', NULL);.    
3710: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3720: 41 4c 55 45 53 28 31 2e 32 2c 20 31 2e 33 2c 20  ALUES(1.2, 1.3, 
3730: 31 2e 34 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20  1.4);.  }.  set 
3740: 73 71 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52  sql "SELECT * FR
3750: 4f 4d 20 74 31 22 0a 20 20 73 65 74 20 53 54 4d  OM t1".  set STM
3760: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
3770: 72 65 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d  re_v2 $DB $sql -
3780: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
3790: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
37a0: 53 54 4d 54 0a 7d 20 33 0a 0a 63 68 65 63 6b 5f  STMT.} 3..check_
37b0: 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61 70  header $STMT cap
37c0: 69 33 63 2d 35 2e 31 20 7b 61 20 62 20 63 7d 20  i3c-5.1 {a b c} 
37d0: 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41 52  {VARINT BLOB VAR
37e0: 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b 5f  CHAR(16)}.check_
37f0: 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24 53  origin_header $S
3800: 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 31 20 7b  TMT capi3c-5.1 {
3810: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 20  main main main} 
3820: 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62 20  {t1 t1 t1} {a b 
3830: 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  c}.do_test capi3
3840: 63 2d 35 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  c-5.2 {.  sqlite
3850: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
3860: 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68 65 63 6b  QLITE_ROW..check
3870: 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63 61  _header $STMT ca
3880: 70 69 33 63 2d 35 2e 33 20 7b 61 20 62 20 63 7d  pi3c-5.3 {a b c}
3890: 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42 20 56 41   {VARINT BLOB VA
38a0: 52 43 48 41 52 28 31 36 29 7d 0a 63 68 65 63 6b  RCHAR(16)}.check
38b0: 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65 72 20 24  _origin_header $
38c0: 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 33 20  STMT capi3c-5.3 
38d0: 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d  {main main main}
38e0: 20 7b 74 31 20 74 31 20 74 31 7d 20 7b 61 20 62   {t1 t1 t1} {a b
38f0: 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20 24   c}.check_data $
3900: 53 54 4d 54 20 63 61 70 69 33 63 2d 35 2e 34 20  STMT capi3c-5.4 
3910: 7b 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52  {INTEGER INTEGER
3920: 20 54 45 58 54 7d 20 7b 31 20 32 20 33 7d 20 7b   TEXT} {1 2 3} {
3930: 31 2e 30 20 32 2e 30 20 33 2e 30 7d 20 7b 31 20  1.0 2.0 3.0} {1 
3940: 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 61  2 3}..do_test ca
3950: 70 69 33 63 2d 35 2e 35 20 7b 0a 20 20 73 71 6c  pi3c-5.5 {.  sql
3960: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
3970: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a 63 68  } SQLITE_ROW..ch
3980: 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54 4d 54  eck_header $STMT
3990: 20 63 61 70 69 33 63 2d 35 2e 36 20 7b 61 20 62   capi3c-5.6 {a b
39a0: 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c 4f 42   c} {VARINT BLOB
39b0: 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a 63 68   VARCHAR(16)}.ch
39c0: 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61 64 65  eck_origin_heade
39d0: 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  r $STMT capi3c-5
39e0: 2e 36 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .6 {main main ma
39f0: 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d 20 7b  in} {t1 t1 t1} {
3a00: 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64 61 74  a b c}.check_dat
3a10: 61 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  a $STMT capi3c-5
3a20: 2e 37 20 7b 54 45 58 54 20 54 45 58 54 20 4e 55  .7 {TEXT TEXT NU
3a30: 4c 4c 7d 20 7b 30 20 30 20 30 7d 20 7b 30 2e 30  LL} {0 0 0} {0.0
3a40: 20 30 2e 30 20 30 2e 30 7d 20 7b 6f 6e 65 20 74   0.0 0.0} {one t
3a50: 77 6f 20 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  wo {}}..do_test 
3a60: 63 61 70 69 33 63 2d 35 2e 38 20 7b 0a 20 20 73  capi3c-5.8 {.  s
3a70: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
3a80: 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 0a  T.} SQLITE_ROW..
3a90: 63 68 65 63 6b 5f 68 65 61 64 65 72 20 24 53 54  check_header $ST
3aa0: 4d 54 20 63 61 70 69 33 63 2d 35 2e 39 20 7b 61  MT capi3c-5.9 {a
3ab0: 20 62 20 63 7d 20 7b 56 41 52 49 4e 54 20 42 4c   b c} {VARINT BL
3ac0: 4f 42 20 56 41 52 43 48 41 52 28 31 36 29 7d 0a  OB VARCHAR(16)}.
3ad0: 63 68 65 63 6b 5f 6f 72 69 67 69 6e 5f 68 65 61  check_origin_hea
3ae0: 64 65 72 20 24 53 54 4d 54 20 63 61 70 69 33 63  der $STMT capi3c
3af0: 2d 35 2e 39 20 7b 6d 61 69 6e 20 6d 61 69 6e 20  -5.9 {main main 
3b00: 6d 61 69 6e 7d 20 7b 74 31 20 74 31 20 74 31 7d  main} {t1 t1 t1}
3b10: 20 7b 61 20 62 20 63 7d 0a 63 68 65 63 6b 5f 64   {a b c}.check_d
3b20: 61 74 61 20 24 53 54 4d 54 20 63 61 70 69 33 63  ata $STMT capi3c
3b30: 2d 35 2e 31 30 20 7b 46 4c 4f 41 54 20 46 4c 4f  -5.10 {FLOAT FLO
3b40: 41 54 20 54 45 58 54 7d 20 7b 31 20 31 20 31 7d  AT TEXT} {1 1 1}
3b50: 20 7b 31 2e 32 20 31 2e 33 20 31 2e 34 7d 20 7b   {1.2 1.3 1.4} {
3b60: 31 2e 32 20 31 2e 33 20 31 2e 34 7d 0a 0a 64 6f  1.2 1.3 1.4}..do
3b70: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 31  _test capi3c-5.1
3b80: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  1 {.  sqlite3_st
3b90: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
3ba0: 45 5f 44 4f 4e 45 0a 0a 64 6f 5f 74 65 73 74 20  E_DONE..do_test 
3bb0: 63 61 70 69 33 63 2d 35 2e 31 32 20 7b 0a 20 20  capi3c-5.12 {.  
3bc0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
3bd0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
3be0: 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OK..do_test capi
3bf0: 33 63 2d 35 2e 32 30 20 7b 0a 20 20 73 65 74 20  3c-5.20 {.  set 
3c00: 73 71 6c 20 22 53 45 4c 45 43 54 20 61 2c 20 73  sql "SELECT a, s
3c10: 75 6d 28 62 29 2c 20 6d 61 78 28 63 29 20 46 52  um(b), max(c) FR
3c20: 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 61  OM t1 GROUP BY a
3c30: 22 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  ".  set STMT [sq
3c40: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
3c50: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
3c60: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  L].  sqlite3_col
3c70: 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54 4d 54 0a  umn_count $STMT.
3c80: 7d 20 33 0a 0a 63 68 65 63 6b 5f 68 65 61 64 65  } 3..check_heade
3c90: 72 20 24 53 54 4d 54 20 63 61 70 69 33 63 2d 35  r $STMT capi3c-5
3ca0: 2e 32 31 20 7b 61 20 73 75 6d 28 62 29 20 6d 61  .21 {a sum(b) ma
3cb0: 78 28 63 29 7d 20 7b 56 41 52 49 4e 54 20 7b 7d  x(c)} {VARINT {}
3cc0: 20 7b 7d 7d 0a 63 68 65 63 6b 5f 6f 72 69 67 69   {}}.check_origi
3cd0: 6e 5f 68 65 61 64 65 72 20 24 53 54 4d 54 20 63  n_header $STMT c
3ce0: 61 70 69 33 63 2d 35 2e 32 32 20 7b 6d 61 69 6e  api3c-5.22 {main
3cf0: 20 7b 7d 20 7b 7d 7d 20 7b 74 31 20 7b 7d 20 7b   {} {}} {t1 {} {
3d00: 7d 7d 20 7b 61 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  }} {a {} {}}.do_
3d10: 74 65 73 74 20 63 61 70 69 33 63 2d 35 2e 32 33  test capi3c-5.23
3d20: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
3d30: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 53 51  alize $STMT.} SQ
3d40: 4c 49 54 45 5f 4f 4b 0a 0a 0a 73 65 74 20 3a 3a  LITE_OK...set ::
3d50: 45 4e 43 20 5b 65 78 65 63 73 71 6c 20 7b 70 72  ENC [execsql {pr
3d60: 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 7d 5d 0a  agma encoding}].
3d70: 64 62 20 63 6c 6f 73 65 0a 0a 64 6f 5f 74 65 73  db close..do_tes
3d80: 74 20 63 61 70 69 33 63 2d 36 2e 30 20 7b 0a 20  t capi3c-6.0 {. 
3d90: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
3da0: 2e 64 62 0a 20 20 73 65 74 20 44 42 20 5b 73 71  .db.  set DB [sq
3db0: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
3dc0: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 69  _pointer db].  i
3dd0: 66 20 7b 5b 73 71 6c 69 74 65 33 20 2d 68 61 73  f {[sqlite3 -has
3de0: 2d 63 6f 64 65 63 5d 3d 3d 30 7d 20 7b 20 73 71  -codec]==0} { sq
3df0: 6c 69 74 65 33 5f 6b 65 79 20 24 44 42 20 78 79  lite3_key $DB xy
3e00: 7a 7a 79 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  zzy }.  set sql 
3e10: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
3e20: 31 20 6f 72 64 65 72 20 62 79 20 72 6f 77 69 64  1 order by rowid
3e30: 7d 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  }.  set STMT [sq
3e40: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
3e50: 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49   $DB $sql -1 TAI
3e60: 4c 5d 0a 20 20 65 78 70 72 20 30 0a 7d 20 7b 30  L].  expr 0.} {0
3e70: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
3e80: 2d 36 2e 31 20 7b 0a 20 20 64 62 20 63 61 63 68  -6.1 {.  db cach
3e90: 65 20 66 6c 75 73 68 0a 20 20 73 71 6c 69 74 65  e flush.  sqlite
3ea0: 33 5f 63 6c 6f 73 65 20 24 44 42 0a 7d 20 7b 53  3_close $DB.} {S
3eb0: 51 4c 49 54 45 5f 42 55 53 59 7d 0a 64 6f 5f 74  QLITE_BUSY}.do_t
3ec0: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 32 20 7b  est capi3c-6.2 {
3ed0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
3ee0: 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f  $STMT.} {SQLITE_
3ef0: 52 4f 57 7d 0a 63 68 65 63 6b 5f 64 61 74 61 20  ROW}.check_data 
3f00: 24 53 54 4d 54 20 63 61 70 69 33 63 2d 36 2e 33  $STMT capi3c-6.3
3f10: 20 7b 49 4e 54 45 47 45 52 7d 20 7b 31 7d 20 7b   {INTEGER} {1} {
3f20: 31 2e 30 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  1.0} {1}.do_test
3f30: 20 63 61 70 69 33 63 2d 36 2e 33 20 7b 0a 20 20   capi3c-6.3 {.  
3f40: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
3f50: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
3f60: 5f 4f 4b 7d 0a 69 66 20 7b 5b 63 6c 61 6e 67 5f  _OK}.if {[clang_
3f70: 73 61 6e 69 74 69 7a 65 5f 61 64 64 72 65 73 73  sanitize_address
3f80: 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  ]==0} {.  do_tes
3f90: 74 20 63 61 70 69 33 63 2d 36 2e 34 20 7b 0a 20  t capi3c-6.4 {. 
3fa0: 20 20 20 64 62 20 63 61 63 68 65 20 66 6c 75 73     db cache flus
3fb0: 68 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  h.      sqlite3_
3fc0: 63 6c 6f 73 65 20 24 44 42 0a 20 20 7d 20 7b 53  close $DB.  } {S
3fd0: 51 4c 49 54 45 5f 4f 4b 7d 0a 20 20 64 6f 5f 74  QLITE_OK}.  do_t
3fe0: 65 73 74 20 63 61 70 69 33 63 2d 36 2e 39 39 2d  est capi3c-6.99-
3ff0: 6d 69 73 75 73 65 20 7b 0a 20 20 20 20 64 62 20  misuse {.    db 
4000: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d 20 65  close.  } {}.} e
4010: 6c 73 65 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  lse {.  db close
4020: 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 65  .}..# This proce
4030: 64 75 72 65 20 73 65 74 73 20 74 68 65 20 76 61  dure sets the va
4040: 6c 75 65 20 6f 66 20 74 68 65 20 66 69 6c 65 2d  lue of the file-
4050: 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c 65 20 27  format in file '
4060: 74 65 73 74 2e 64 62 27 0a 23 20 74 6f 20 24 6e  test.db'.# to $n
4070: 65 77 76 61 6c 2e 20 41 6c 73 6f 2c 20 74 68 65  ewval. Also, the
4080: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
4090: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 23  s incremented..#
40a0: 20 0a 70 72 6f 63 20 73 65 74 5f 66 69 6c 65 5f   .proc set_file_
40b0: 66 6f 72 6d 61 74 20 7b 6e 65 77 76 61 6c 7d 20  format {newval} 
40c0: 7b 0a 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20  {.  hexio_write 
40d0: 74 65 73 74 2e 64 62 20 34 34 20 5b 68 65 78 69  test.db 44 [hexi
40e0: 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32 20 24  o_render_int32 $
40f0: 6e 65 77 76 61 6c 5d 0a 20 20 73 65 74 20 73 63  newval].  set sc
4100: 68 65 6d 61 63 6f 6f 6b 69 65 20 5b 68 65 78 69  hemacookie [hexi
4110: 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f  o_get_int [hexio
4120: 5f 72 65 61 64 20 74 65 73 74 2e 64 62 20 34 30  _read test.db 40
4130: 20 34 5d 5d 0a 20 20 69 6e 63 72 20 73 63 68 65   4]].  incr sche
4140: 6d 61 63 6f 6f 6b 69 65 0a 20 20 68 65 78 69 6f  macookie.  hexio
4150: 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 34  _write test.db 4
4160: 30 20 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f  0 [hexio_render_
4170: 69 6e 74 33 32 20 24 73 63 68 65 6d 61 63 6f 6f  int32 $schemacoo
4180: 6b 69 65 5d 0a 20 20 72 65 74 75 72 6e 20 7b 7d  kie].  return {}
4190: 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 65  .}..# This proce
41a0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65  dure returns the
41b0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 69   value of the fi
41c0: 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c  le-format in fil
41d0: 65 20 27 74 65 73 74 2e 64 62 27 2e 0a 23 20 0a  e 'test.db'..# .
41e0: 70 72 6f 63 20 67 65 74 5f 66 69 6c 65 5f 66 6f  proc get_file_fo
41f0: 72 6d 61 74 20 7b 7b 66 6e 61 6d 65 20 74 65 73  rmat {{fname tes
4200: 74 2e 64 62 7d 7d 20 7b 0a 20 20 72 65 74 75 72  t.db}} {.  retur
4210: 6e 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74  n [hexio_get_int
4220: 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 24 66 6e   [hexio_read $fn
4230: 61 6d 65 20 34 34 20 34 5d 5d 0a 7d 0a 0a 69 66  ame 44 4]].}..if
4240: 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73   {![sqlite3 -has
4250: 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20 23 20 54  -codec]} {.  # T
4260: 65 73 74 20 77 68 61 74 20 68 61 70 70 65 6e 73  est what happens
4270: 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61 72   when the librar
4280: 79 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 6e  y encounters a n
4290: 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74  ewer file format
42a0: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69  ..  do_test capi
42b0: 33 63 2d 37 2e 31 20 7b 0a 20 20 20 20 73 65 74  3c-7.1 {.    set
42c0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 35 0a 20  _file_format 5. 
42d0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
42e0: 63 61 70 69 33 63 2d 37 2e 32 20 7b 0a 20 20 20  capi3c-7.2 {.   
42f0: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
4300: 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20   db test.db }.  
4310: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4320: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4330: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
4340: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e      }.  } {1 {un
4350: 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66  supported file f
4360: 6f 72 6d 61 74 7d 7d 0a 20 20 64 62 20 63 6c 6f  ormat}}.  db clo
4370: 73 65 0a 7d 0a 0a 69 66 20 7b 21 5b 73 71 6c 69  se.}..if {![sqli
4380: 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d  te3 -has-codec]}
4390: 20 7b 0a 20 20 23 20 4e 6f 77 20 74 65 73 74 20   {.  # Now test 
43a0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
43b0: 20 63 6f 72 72 65 63 74 6c 79 20 68 61 6e 64 6c   correctly handl
43c0: 65 73 20 62 6f 67 75 73 20 65 6e 74 72 69 65 73  es bogus entries
43d0: 20 69 6e 20 74 68 65 0a 20 20 23 20 73 71 6c 69   in the.  # sqli
43e0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
43f0: 28 73 63 68 65 6d 61 20 63 6f 72 72 75 70 74 69  (schema corrupti
4400: 6f 6e 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 63  on)..  do_test c
4410: 61 70 69 33 63 2d 38 2e 31 20 7b 0a 20 20 20 20  api3c-8.1 {.    
4420: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
4430: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
4440: 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20  nal.    sqlite3 
4450: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
4460: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
4470: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
4480: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  );.    }.    db 
4490: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64  close.  } {}.  d
44a0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e  o_test capi3c-8.
44b0: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  2 {.    sqlite3 
44c0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
44d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
44e0: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
44f0: 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20 20  chema=ON;.      
4500: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69  INSERT INTO sqli
4510: 74 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45 53  te_master VALUES
4520: 28 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c  (NULL,NULL,NULL,
4530: 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20  NULL,NULL);.    
4540: 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  }.    db close. 
4550: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
4560: 63 61 70 69 33 63 2d 38 2e 33 20 7b 0a 20 20 20  capi3c-8.3 {.   
4570: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
4580: 20 64 62 20 74 65 73 74 2e 64 62 20 7d 0a 20 20   db test.db }.  
4590: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
45a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
45b0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
45c0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6d 61      }.  } {1 {ma
45d0: 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  lformed database
45e0: 20 73 63 68 65 6d 61 20 28 3f 29 7d 7d 0a 20 20   schema (?)}}.  
45f0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 38  do_test capi3c-8
4600: 2e 34 20 7b 0a 20 20 20 20 23 20 42 75 69 6c 64  .4 {.    # Build
4610: 20 61 20 35 2d 66 69 65 6c 64 20 72 6f 77 20 72   a 5-field row r
4620: 65 63 6f 72 64 2e 20 54 68 65 20 66 69 72 73 74  ecord. The first
4630: 20 66 69 65 6c 64 20 69 73 20 61 20 73 74 72 69   field is a stri
4640: 6e 67 20 27 74 61 62 6c 65 27 2c 20 61 6e 64 0a  ng 'table', and.
4650: 20 20 20 20 23 20 73 75 62 73 65 71 75 65 6e 74      # subsequent
4660: 20 66 69 65 6c 64 73 20 61 72 65 20 61 6c 6c 20   fields are all 
4670: 4e 55 4c 4c 2e 0a 20 20 20 20 64 62 20 63 6c 6f  NULL..    db clo
4680: 73 65 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65  se.    forcedele
4690: 74 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e  te test.db test.
46a0: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73  db-journal.    s
46b0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
46c0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
46d0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
46e0: 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20  LE t1(a);.      
46f0: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
4700: 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 20  schema=ON;.     
4710: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c   INSERT INTO sql
4720: 69 74 65 5f 6d 61 73 74 65 72 20 56 41 4c 55 45  ite_master VALUE
4730: 53 28 27 74 61 62 6c 65 27 2c 4e 55 4c 4c 2c 4e  S('table',NULL,N
4740: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a  ULL,NULL,NULL);.
4750: 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f      }.    db clo
4760: 73 65 0a 20 20 7d 20 7b 7d 3b 0a 20 20 64 6f 5f  se.  } {};.  do_
4770: 74 65 73 74 20 63 61 70 69 33 63 2d 38 2e 35 20  test capi3c-8.5 
4780: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 73 71  {.    catch { sq
4790: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
47a0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
47b0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
47c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
47d0: 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ter;.    }.  } {
47e0: 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74  1 {malformed dat
47f0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 3f 29  abase schema (?)
4800: 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a  }}.  db close.}.
4810: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
4820: 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  .db.forcedelete 
4830: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
4840: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 65 6e 67  ..# Test the eng
4850: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 73 74  lish language st
4860: 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e 74 73  ring equivalents
4870: 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72 72 6f   for sqlite erro
4880: 72 20 63 6f 64 65 73 0a 73 65 74 20 63 6f 64 65  r codes.set code
4890: 32 65 6e 67 6c 69 73 68 20 5b 6c 69 73 74 20 5c  2english [list \
48a0: 0a 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20  .SQLITE_OK      
48b0: 20 20 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72     {not an error
48c0: 7d 20 5c 0a 53 51 4c 49 54 45 5f 45 52 52 4f 52  } \.SQLITE_ERROR
48d0: 20 20 20 20 20 20 7b 53 51 4c 20 6c 6f 67 69 63        {SQL logic
48e0: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
48f0: 67 20 64 61 74 61 62 61 73 65 7d 20 5c 0a 53 51  g database} \.SQ
4900: 4c 49 54 45 5f 50 45 52 4d 20 20 20 20 20 20 20  LITE_PERM       
4910: 7b 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69  {access permissi
4920: 6f 6e 20 64 65 6e 69 65 64 7d 20 5c 0a 53 51 4c  on denied} \.SQL
4930: 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20 20 7b  ITE_ABORT      {
4940: 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74  callback request
4950: 65 64 20 71 75 65 72 79 20 61 62 6f 72 74 7d 20  ed query abort} 
4960: 5c 0a 53 51 4c 49 54 45 5f 42 55 53 59 20 20 20  \.SQLITE_BUSY   
4970: 20 20 20 20 7b 64 61 74 61 62 61 73 65 20 69 73      {database is
4980: 20 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54   locked} \.SQLIT
4990: 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 7b 64 61  E_LOCKED     {da
49a0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
49b0: 6c 6f 63 6b 65 64 7d 20 5c 0a 53 51 4c 49 54 45  locked} \.SQLITE
49c0: 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 7b 6f 75 74  _NOMEM      {out
49d0: 20 6f 66 20 6d 65 6d 6f 72 79 7d 20 5c 0a 53 51   of memory} \.SQ
49e0: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20  LITE_READONLY   
49f0: 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74  {attempt to writ
4a00: 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74  e a readonly dat
4a10: 61 62 61 73 65 7d 20 5c 0a 53 51 4c 49 54 45 5f  abase} \.SQLITE_
4a20: 49 4e 54 45 52 52 55 50 54 20 20 7b 69 6e 74 65  INTERRUPT  {inte
4a30: 72 72 75 70 74 65 64 7d 20 5c 0a 53 51 4c 49 54  rrupted} \.SQLIT
4a40: 45 5f 49 4f 45 52 52 20 20 20 20 20 20 7b 64 69  E_IOERR      {di
4a50: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 20 5c 0a  sk I/O error} \.
4a60: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 20  SQLITE_CORRUPT  
4a70: 20 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b    {database disk
4a80: 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72   image is malfor
4a90: 6d 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 55  med} \.SQLITE_FU
4aa0: 4c 4c 20 20 20 20 20 20 20 7b 64 61 74 61 62 61  LL       {databa
4ab0: 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75  se or disk is fu
4ac0: 6c 6c 7d 20 5c 0a 53 51 4c 49 54 45 5f 43 41 4e  ll} \.SQLITE_CAN
4ad0: 54 4f 50 45 4e 20 20 20 7b 75 6e 61 62 6c 65 20  TOPEN   {unable 
4ae0: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
4af0: 20 66 69 6c 65 7d 20 5c 0a 53 51 4c 49 54 45 5f   file} \.SQLITE_
4b00: 45 4d 50 54 59 20 20 20 20 20 20 7b 74 61 62 6c  EMPTY      {tabl
4b10: 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61  e contains no da
4b20: 74 61 7d 20 5c 0a 53 51 4c 49 54 45 5f 53 43 48  ta} \.SQLITE_SCH
4b30: 45 4d 41 20 20 20 20 20 7b 64 61 74 61 62 61 73  EMA     {databas
4b40: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
4b50: 6e 67 65 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 43  nged} \.SQLITE_C
4b60: 4f 4e 53 54 52 41 49 4e 54 20 7b 63 6f 6e 73 74  ONSTRAINT {const
4b70: 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 20 5c 0a  raint failed} \.
4b80: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
4b90: 20 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d    {datatype mism
4ba0: 61 74 63 68 7d 20 5c 0a 53 51 4c 49 54 45 5f 4d  atch} \.SQLITE_M
4bb0: 49 53 55 53 45 20 20 20 20 20 7b 6c 69 62 72 61  ISUSE     {libra
4bc0: 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65  ry routine calle
4bd0: 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63  d out of sequenc
4be0: 65 7d 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 4c 46  e} \.SQLITE_NOLF
4bf0: 53 20 20 20 20 20 20 7b 6c 61 72 67 65 20 66 69  S      {large fi
4c00: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 64 69  le support is di
4c10: 73 61 62 6c 65 64 7d 20 5c 0a 53 51 4c 49 54 45  sabled} \.SQLITE
4c20: 5f 41 55 54 48 20 20 20 20 20 20 20 7b 61 75 74  _AUTH       {aut
4c30: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
4c40: 64 7d 20 5c 0a 53 51 4c 49 54 45 5f 46 4f 52 4d  d} \.SQLITE_FORM
4c50: 41 54 20 20 20 20 20 7b 61 75 78 69 6c 69 61 72  AT     {auxiliar
4c60: 79 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  y database forma
4c70: 74 20 65 72 72 6f 72 7d 20 5c 0a 53 51 4c 49 54  t error} \.SQLIT
4c80: 45 5f 52 41 4e 47 45 20 20 20 20 20 20 7b 62 69  E_RANGE      {bi
4c90: 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64  nd or column ind
4ca0: 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d  ex out of range}
4cb0: 20 5c 0a 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42   \.SQLITE_NOTADB
4cc0: 20 20 20 20 20 7b 66 69 6c 65 20 69 73 20 65 6e       {file is en
4cd0: 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f  crypted or is no
4ce0: 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 5c 0a  t a database} \.
4cf0: 75 6e 6b 6e 6f 77 6e 65 72 72 6f 72 20 20 20 20  unknownerror    
4d00: 20 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72    {unknown error
4d10: 7d 20 5c 0a 5d 0a 0a 73 65 74 20 74 65 73 74 5f  } \.]..set test_
4d20: 6e 75 6d 62 65 72 20 31 0a 66 6f 72 65 61 63 68  number 1.foreach
4d30: 20 7b 63 6f 64 65 20 65 6e 67 6c 69 73 68 7d 20   {code english} 
4d40: 24 63 6f 64 65 32 65 6e 67 6c 69 73 68 20 7b 0a  $code2english {.
4d50: 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63    do_test capi3c
4d60: 2d 39 2e 24 74 65 73 74 5f 6e 75 6d 62 65 72 20  -9.$test_number 
4d70: 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72  "sqlite3_test_er
4d80: 72 73 74 72 20 24 63 6f 64 65 22 20 24 65 6e 67  rstr $code" $eng
4d90: 6c 69 73 68 0a 20 20 69 6e 63 72 20 74 65 73 74  lish.  incr test
4da0: 5f 6e 75 6d 62 65 72 0a 7d 0a 0a 23 20 54 65 73  _number.}..# Tes
4db0: 74 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  t the error mess
4dc0: 61 67 65 20 77 68 65 6e 20 61 20 22 72 65 61 6c  age when a "real
4dd0: 22 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 20  " out of memory 
4de0: 6f 63 63 75 72 73 2e 0a 69 66 20 7b 20 5b 70 65  occurs..if { [pe
4df0: 72 6d 75 74 61 74 69 6f 6e 5d 20 21 3d 20 22 6e  rmutation] != "n
4e00: 6f 66 61 75 6c 74 73 69 6d 22 20 7d 20 7b 0a 69  ofaultsim" } {.i
4e10: 66 63 61 70 61 62 6c 65 20 6d 65 6d 64 65 62 75  fcapable memdebu
4e20: 67 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  g {.  do_test ca
4e30: 70 69 33 63 2d 31 30 2d 31 20 7b 0a 20 20 20 20  pi3c-10-1 {.    
4e40: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4e50: 64 62 0a 20 20 20 20 73 65 74 20 44 42 20 5b 73  db.    set DB [s
4e60: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4e70: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20  n_pointer db].  
4e80: 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 64 65 62    sqlite3_memdeb
4e90: 75 67 5f 66 61 69 6c 20 30 0a 20 20 20 20 63 61  ug_fail 0.    ca
4ea0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73  tchsql {.      s
4eb0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
4ec0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
4ed0: 7d 0a 20 20 7d 20 7b 31 20 7b 6f 75 74 20 6f 66  }.  } {1 {out of
4ee0: 20 6d 65 6d 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74   memory}}.  do_t
4ef0: 65 73 74 20 63 61 70 69 33 63 2d 31 30 2d 32 20  est capi3c-10-2 
4f00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72  {.    sqlite3_er
4f10: 72 6d 73 67 20 24 3a 3a 44 42 0a 20 20 7d 20 7b  rmsg $::DB.  } {
4f20: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 0a 20  out of memory}. 
4f30: 20 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31   ifcapable {utf1
4f40: 36 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  6} {.    do_test
4f50: 20 63 61 70 69 33 63 2d 31 30 2d 33 20 7b 0a 20   capi3c-10-3 {. 
4f60: 20 20 20 20 20 75 74 66 38 20 5b 73 71 6c 69 74       utf8 [sqlit
4f70: 65 33 5f 65 72 72 6d 73 67 31 36 20 24 3a 3a 44  e3_errmsg16 $::D
4f80: 42 5d 0a 20 20 20 20 7d 20 7b 6f 75 74 20 6f 66  B].    } {out of
4f90: 20 6d 65 6d 6f 72 79 7d 0a 20 20 7d 0a 20 20 64   memory}.  }.  d
4fa0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
4fb0: 33 5f 6d 65 6d 64 65 62 75 67 5f 66 61 69 6c 20  3_memdebug_fail 
4fc0: 2d 31 0a 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  -1.}.}..# The fo
4fd0: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 2d 20  llowing tests - 
4fe0: 63 61 70 69 33 63 2d 31 31 2e 2a 20 2d 20 74 65  capi3c-11.* - te
4ff0: 73 74 20 74 68 61 74 20 61 20 43 4f 4d 4d 49 54  st that a COMMIT
5000: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 0a 23 20 73   or ROLLBACK.# s
5010: 74 61 74 65 6d 65 6e 74 20 69 73 73 75 65 64 20  tatement issued 
5020: 77 68 69 6c 65 20 74 68 65 72 65 20 61 72 65 20  while there are 
5030: 73 74 69 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e  still outstandin
5040: 67 20 56 4d 73 20 74 68 61 74 20 61 72 65 20 70  g VMs that are p
5050: 61 72 74 20 6f 66 0a 23 20 74 68 65 20 74 72 61  art of.# the tra
5060: 6e 73 61 63 74 69 6f 6e 20 66 61 69 6c 73 2e 0a  nsaction fails..
5070: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
5080: 64 62 0a 73 65 74 20 44 42 20 5b 73 71 6c 69 74  db.set DB [sqlit
5090: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
50a0: 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69 74 65  inter db].sqlite
50b0: 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66  _register_test_f
50c0: 75 6e 63 74 69 6f 6e 20 24 44 42 20 66 75 6e 63  unction $DB func
50d0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
50e0: 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.1 {.  execsql
50f0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
5100: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5110: 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53  1(a, b);.    INS
5120: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
5130: 45 53 28 31 2c 20 27 69 6e 74 27 29 3b 0a 20 20  ES(1, 'int');.  
5140: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
5150: 20 56 41 4c 55 45 53 28 32 2c 20 27 6e 6f 74 61   VALUES(2, 'nota
5160: 74 79 70 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  type');.  }.} {}
5170: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
5180: 31 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  11.1.1 {.  sqlit
5190: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
51a0: 74 20 24 44 42 0a 7d 20 30 0a 64 6f 5f 74 65 73  t $DB.} 0.do_tes
51b0: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 20 7b 0a  t capi3c-11.2 {.
51c0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
51d0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
51e0: 44 42 20 22 53 45 4c 45 43 54 20 66 75 6e 63 28  DB "SELECT func(
51f0: 62 2c 20 61 29 20 46 52 4f 4d 20 74 31 22 20 2d  b, a) FROM t1" -
5200: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
5210: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
5220: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 0a 23 20 41  SQLITE_ROW}..# A
5230: 73 20 6f 66 20 33 2e 36 2e 35 20 61 20 43 4f 4d  s of 3.6.5 a COM
5240: 4d 49 54 20 69 73 20 4f 4b 20 64 75 72 69 6e 67  MIT is OK during
5250: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
5260: 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 20  s still running 
5270: 2d 0a 23 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  -.# as long as i
5280: 74 20 69 73 20 61 20 72 65 61 64 2d 6f 6e 6c 79  t is a read-only
5290: 20 71 75 65 72 79 20 61 6e 64 20 6e 6f 74 20 61   query and not a
52a0: 6e 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  n incremental BL
52b0: 4f 42 20 77 72 69 74 65 2e 0a 23 0a 64 6f 5f 74  OB write..#.do_t
52c0: 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e 31  est capi3-11.3.1
52d0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
52e0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
52f0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5300: 20 63 61 70 69 33 2d 31 31 2e 33 2e 32 20 7b 0a   capi3-11.3.2 {.
5310: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
5320: 65 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 7d  ed_errcode $DB.}
5330: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
5340: 74 65 73 74 20 63 61 70 69 33 2d 31 31 2e 33 2e  test capi3-11.3.
5350: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  3 {.  sqlite3_ge
5360: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42  t_autocommit $DB
5370: 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 63 61 70  .} 1.do_test cap
5380: 69 33 2d 31 31 2e 33 2e 34 20 7b 0a 20 20 64 62  i3-11.3.4 {.  db
5390: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 6c 6f   eval {PRAGMA lo
53a0: 63 6b 5f 73 74 61 74 75 73 7d 0a 7d 20 7b 6d 61  ck_status}.} {ma
53b0: 69 6e 20 73 68 61 72 65 64 20 74 65 6d 70 20 63  in shared temp c
53c0: 6c 6f 73 65 64 7d 0a 0a 64 6f 5f 74 65 73 74 20  losed}..do_test 
53d0: 63 61 70 69 33 63 2d 31 31 2e 34 20 7b 0a 20 20  capi3c-11.4 {.  
53e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
53f0: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5400: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5410: 33 63 2d 31 31 2e 35 20 7b 0a 20 20 73 71 6c 69  3c-11.5 {.  sqli
5420: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
5430: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  MT.} {SQLITE_ERR
5440: 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  OR}.do_test capi
5450: 33 63 2d 31 31 2e 36 20 7b 0a 20 20 63 61 74 63  3c-11.6 {.  catc
5460: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
5470: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
5480: 0a 7d 20 7b 30 20 7b 31 20 69 6e 74 20 32 20 6e  .} {0 {1 int 2 n
5490: 6f 74 61 74 79 70 65 7d 7d 0a 64 6f 5f 74 65 73  otatype}}.do_tes
54a0: 74 20 63 61 70 69 33 63 2d 31 31 2e 37 20 7b 0a  t capi3c-11.7 {.
54b0: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75    sqlite3_get_au
54c0: 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31  tocommit $DB.} 1
54d0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
54e0: 31 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.8 {.  execsql
54f0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
5500: 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20 49  BLE t2(a);.    I
5510: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
5520: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53  LUES(1);.    INS
5530: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
5540: 45 53 28 32 29 3b 0a 20 20 20 20 42 45 47 49 4e  ES(2);.    BEGIN
5550: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5560: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 29 3b 0a  O t2 VALUES(3);.
5570: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
5580: 20 63 61 70 69 33 63 2d 31 31 2e 38 2e 31 20 7b   capi3c-11.8.1 {
5590: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  .  sqlite3_get_a
55a0: 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a 7d 20  utocommit $DB.} 
55b0: 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  0.do_test capi3c
55c0: 2d 31 31 2e 39 20 7b 0a 20 20 73 65 74 20 53 54  -11.9 {.  set ST
55d0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
55e0: 61 72 65 5f 76 32 20 24 44 42 20 22 53 45 4c 45  are_v2 $DB "SELE
55f0: 43 54 20 61 20 46 52 4f 4d 20 74 32 22 20 2d 31  CT a FROM t2" -1
5600: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
5610: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53  _step $STMT.} {S
5620: 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65  QLITE_ROW}.do_te
5630: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 39 2e 31  st capi3c-11.9.1
5640: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
5650: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 24 44 42 0a  _autocommit $DB.
5660: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  } 0.do_test capi
5670: 33 63 2d 31 31 2e 39 2e 32 20 7b 0a 20 20 63 61  3c-11.9.2 {.  ca
5680: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c  tchsql {.    ROL
5690: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 30 20  LBACK;.  }.} {0 
56a0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  {}}.do_test capi
56b0: 33 63 2d 31 31 2e 39 2e 33 20 7b 0a 20 20 73 71  3c-11.9.3 {.  sq
56c0: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
56d0: 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f  mmit $DB.} 1.do_
56e0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
56f0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  0 {.  sqlite3_st
5700: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5710: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
5720: 63 61 70 69 33 63 2d 31 31 2e 31 31 20 7b 0a 20  capi3c-11.11 {. 
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 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  TMT.} {SQLITE_DO
5750: 4e 45 7d 0a 69 66 63 61 70 61 62 6c 65 20 21 61  NE}.ifcapable !a
5760: 75 74 6f 72 65 73 65 74 20 7b 0a 20 20 64 6f 5f  utoreset {.  do_
5770: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31  test capi3c-11.1
5780: 32 61 72 6d 6f 72 20 7b 0a 20 20 20 20 73 71 6c  2armor {.    sql
5790: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
57a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
57b0: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
57c0: 54 45 5f 4d 49 53 55 53 45 7d 0a 7d 20 65 6c 73  TE_MISUSE}.} els
57d0: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  e {.  do_test ca
57e0: 70 69 33 63 2d 31 31 2e 31 32 20 7b 0a 20 20 20  pi3c-11.12 {.   
57f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
5800: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
5810: 73 74 65 70 20 24 53 54 4d 54 0a 20 20 7d 20 7b  step $STMT.  } {
5820: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 7d 0a 64 6f  SQLITE_ROW}.}.do
5830: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
5840: 31 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  13 {.  sqlite3_f
5850: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
5860: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
5870: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 34  est capi3c-11.14
5880: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5890: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
58a0: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d   t2;.  }.} {1 2}
58b0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
58c0: 31 31 2e 31 34 2e 31 20 7b 0a 20 20 73 71 6c 69  11.14.1 {.  sqli
58d0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
58e0: 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f 5f 74 65  it $DB.} 1.do_te
58f0: 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 35 20  st capi3c-11.15 
5900: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
5910: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5920: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f  .} {1 {cannot ro
5930: 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
5940: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
5950: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  e}}.do_test capi
5960: 33 63 2d 31 31 2e 31 35 2e 31 20 7b 0a 20 20 73  3c-11.15.1 {.  s
5970: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
5980: 6f 6d 6d 69 74 20 24 44 42 0a 7d 20 31 0a 64 6f  ommit $DB.} 1.do
5990: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e  _test capi3c-11.
59a0: 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  16 {.  execsql {
59b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
59c0: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
59d0: 32 7d 0a 0a 23 20 53 61 6e 69 74 79 20 63 68 65  2}..# Sanity che
59e0: 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 69 6e 69  ck on the defini
59f0: 74 69 6f 6e 20 6f 66 20 27 6f 75 74 73 74 61 6e  tion of 'outstan
5a00: 64 69 6e 67 20 56 4d 27 2e 20 54 68 69 73 20 6d  ding VM'. This m
5a10: 65 61 6e 73 20 61 6e 79 20 56 4d 0a 23 20 74 68  eans any VM.# th
5a20: 61 74 20 68 61 73 20 68 61 64 20 73 71 6c 69 74  at has had sqlit
5a30: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 65 64  e3_step() called
5a40: 20 6d 6f 72 65 20 72 65 63 65 6e 74 6c 79 20 74   more recently t
5a50: 68 61 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  han sqlite3_fina
5a60: 6c 69 7a 65 28 29 20 6f 72 0a 23 20 73 71 6c 69  lize() or.# sqli
5a70: 74 65 33 5f 72 65 73 65 74 28 29 2e 20 53 6f 20  te3_reset(). So 
5a80: 61 20 56 4d 20 74 68 61 74 20 68 61 73 20 6a 75  a VM that has ju
5a90: 73 74 20 62 65 65 6e 20 70 72 65 70 61 72 65 64  st been prepared
5aa0: 20 6f 72 20 72 65 73 65 74 20 64 6f 65 73 20 6e   or reset does n
5ab0: 6f 74 0a 23 20 63 6f 75 6e 74 20 61 73 20 61 6e  ot.# count as an
5ac0: 20 61 63 74 69 76 65 20 56 4d 2e 0a 64 6f 5f 74   active VM..do_t
5ad0: 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 31 37  est capi3c-11.17
5ae0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5af0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 7d 20     BEGIN;.  }.} 
5b00: 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  {}.do_test capi3
5b10: 63 2d 31 31 2e 31 38 20 7b 0a 20 20 73 65 74 20  c-11.18 {.  set 
5b20: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
5b30: 65 70 61 72 65 5f 76 32 20 24 44 42 20 22 53 45  epare_v2 $DB "SE
5b40: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5b50: 2d 31 20 54 41 49 4c 5d 0a 20 20 63 61 74 63 68  -1 TAIL].  catch
5b60: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
5b70: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5b80: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 31  o_test capi3c-11
5b90: 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .19 {.  sqlite3_
5ba0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51  step $STMT.} {SQ
5bb0: 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73  LITE_ROW}.do_tes
5bc0: 74 20 63 61 70 69 33 63 2d 31 31 2e 32 30 20 7b  t capi3c-11.20 {
5bd0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5be0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 4f 4d    BEGIN;.    COM
5bf0: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  MIT;.  }.} {0 {}
5c00: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5c10: 2d 31 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74  -11.20 {.  sqlit
5c20: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
5c30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5c40: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31  COMMIT;.  }.} {1
5c50: 20 7b 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   {cannot commit 
5c60: 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
5c70: 20 69 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f   is active}}.do_
5c80: 74 65 73 74 20 63 61 70 69 33 63 2d 31 31 2e 32  test capi3c-11.2
5c90: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  1 {.  sqlite3_fi
5ca0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b  nalize $STMT.} {
5cb0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 20 54 68  SQLITE_OK}..# Th
5cc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
5cd0: 73 20 2d 20 63 61 70 69 33 63 2d 31 32 2e 2a 20  s - capi3c-12.* 
5ce0: 2d 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 73  - check that its
5cf0: 20 4f 6b 20 74 6f 20 73 74 61 72 74 20 61 0a 23   Ok to start a.#
5d00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
5d10: 6c 65 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  le other VMs are
5d20: 20 61 63 74 69 76 65 2c 20 61 6e 64 20 74 68 61   active, and tha
5d30: 74 20 69 74 73 20 4f 6b 20 74 6f 20 65 78 65 63  t its Ok to exec
5d40: 75 74 65 0a 23 20 61 74 6f 6d 69 63 20 75 70 64  ute.# atomic upd
5d50: 61 74 65 73 20 69 6e 20 74 68 65 20 73 61 6d 65  ates in the same
5d60: 20 73 69 74 75 61 74 69 6f 6e 20 0a 23 0a 64 6f   situation .#.do
5d70: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5d80: 31 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b  1 {.  set STMT [
5d90: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5da0: 76 32 20 24 44 42 20 22 53 45 4c 45 43 54 20 61  v2 $DB "SELECT a
5db0: 20 46 52 4f 4d 20 74 32 22 20 2d 31 20 54 41 49   FROM t2" -1 TAI
5dc0: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
5dd0: 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  p $STMT.} {SQLIT
5de0: 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 63  E_ROW}.do_test c
5df0: 61 70 69 33 63 2d 31 32 2e 32 20 7b 0a 20 20 63  api3c-12.2 {.  c
5e00: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
5e10: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5e20: 55 45 53 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20  UES(3, NULL);.  
5e30: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5e40: 73 74 20 63 61 70 69 33 63 2d 31 32 2e 33 20 7b  st capi3c-12.3 {
5e50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5e60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5e70: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a   VALUES(4);.  }.
5e80: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
5e90: 20 63 61 70 69 33 63 2d 31 32 2e 34 20 7b 0a 20   capi3c-12.4 {. 
5ea0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5eb0: 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52  BEGIN;.    INSER
5ec0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5ed0: 28 34 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  (4, NULL);.  }.}
5ee0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5ef0: 63 61 70 69 33 63 2d 31 32 2e 35 20 7b 0a 20 20  capi3c-12.5 {.  
5f00: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
5f10: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57  MT.} {SQLITE_ROW
5f20: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
5f30: 2d 31 32 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69  -12.5.1 {.  sqli
5f40: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d  te3_step $STMT.}
5f50: 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f   {SQLITE_ROW}.do
5f60: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 32 2e  _test capi3c-12.
5f70: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  6 {.  sqlite3_st
5f80: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
5f90: 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74  TE_DONE}.do_test
5fa0: 20 63 61 70 69 33 63 2d 31 32 2e 37 20 7b 0a 20   capi3c-12.7 {. 
5fb0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5fc0: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
5fd0: 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 63 61  E_OK}.do_test ca
5fe0: 70 69 33 63 2d 31 32 2e 38 20 7b 0a 20 20 65 78  pi3c-12.8 {.  ex
5ff0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d  ecsql {.    COMM
6000: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  IT;.    SELECT a
6010: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
6020: 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 54 65 73  {1 2 3 4}..# Tes
6030: 74 20 63 61 73 65 73 20 63 61 70 69 33 63 2d 31  t cases capi3c-1
6040: 33 2e 2a 20 74 65 73 74 20 74 68 65 20 73 71 6c  3.* test the sql
6050: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
6060: 6e 67 73 28 29 20 61 6e 64 20 0a 23 20 73 71 6c  ngs() and .# sql
6070: 69 74 65 33 5f 73 6c 65 65 70 20 41 50 49 73 2e  ite3_sleep APIs.
6080: 0a 23 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .#.if {[llength 
6090: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73  [info commands s
60a0: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
60b0: 64 69 6e 67 73 5d 5d 3e 30 7d 20 7b 0a 20 20 64  dings]]>0} {.  d
60c0: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 33  o_test capi3c-13
60d0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
60e0: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
60f0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
6100: 20 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c     set STMT [sql
6110: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
6120: 24 44 42 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $DB "INSERT INTO
6130: 20 74 31 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29   t1 VALUES(?, ?)
6140: 22 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  " -1 TAIL].    s
6150: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6160: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f  T.  } {SQLITE_DO
6170: 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  NE}.  do_test ca
6180: 70 69 33 63 2d 31 33 2e 32 20 7b 0a 20 20 20 20  pi3c-13.2 {.    
6190: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
61a0: 54 4d 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  TMT.    sqlite3_
61b0: 62 69 6e 64 5f 74 65 78 74 20 24 53 54 4d 54 20  bind_text $STMT 
61c0: 31 20 68 65 6c 6c 6f 20 35 0a 20 20 20 20 73 71  1 hello 5.    sq
61d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
61e0: 24 53 54 4d 54 20 32 20 77 6f 72 6c 64 20 35 0a  $STMT 2 world 5.
61f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6200: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
6210: 54 45 5f 44 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  TE_DONE}.  do_te
6220: 73 74 20 63 61 70 69 33 63 2d 31 33 2e 33 20 7b  st capi3c-13.3 {
6230: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
6240: 65 74 20 24 53 54 4d 54 0a 20 20 20 20 73 71 6c  et $STMT.    sql
6250: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
6260: 6e 67 73 20 24 53 54 4d 54 0a 20 20 20 20 73 71  ngs $STMT.    sq
6270: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
6280: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e  .  } {SQLITE_DON
6290: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  E}.  do_test cap
62a0: 69 33 63 2d 31 33 2d 34 20 7b 0a 20 20 20 20 73  i3c-13-4 {.    s
62b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
62c0: 24 53 54 4d 54 0a 20 20 20 20 65 78 65 63 73 71  $STMT.    execsq
62d0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
62e0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
62f0: 7d 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 68 65 6c  }.  } {{} {} hel
6300: 6c 6f 20 77 6f 72 6c 64 20 7b 7d 20 7b 7d 7d 0a  lo world {} {}}.
6310: 7d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b  }.if {[llength [
6320: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 73 71  info commands sq
6330: 6c 69 74 65 33 5f 73 6c 65 65 70 5d 5d 3e 30 7d  lite3_sleep]]>0}
6340: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70   {.  do_test cap
6350: 69 33 63 2d 31 33 2d 35 20 7b 0a 20 20 20 20 73  i3c-13-5 {.    s
6360: 65 74 20 6d 73 20 5b 73 71 6c 69 74 65 33 5f 73  et ms [sqlite3_s
6370: 6c 65 65 70 20 38 30 5d 0a 20 20 20 20 65 78 70  leep 80].    exp
6380: 72 20 7b 24 6d 73 3d 3d 38 30 20 7c 7c 20 24 6d  r {$ms==80 || $m
6390: 73 3d 3d 31 30 30 30 7d 0a 20 20 7d 20 7b 31 7d  s==1000}.  } {1}
63a0: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 32  .}..# Ticket #12
63b0: 31 39 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 62  19:  Make sure b
63c0: 69 6e 64 69 6e 67 20 41 50 49 73 20 63 61 6e 20  inding APIs can 
63d0: 68 61 6e 64 6c 65 20 61 20 4e 55 4c 4c 20 70 6f  handle a NULL po
63e0: 69 6e 74 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  inter..#.do_test
63f0: 20 63 61 70 69 33 63 2d 31 34 2e 31 20 7b 0a 20   capi3c-14.1 {. 
6400: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
6410: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6420: 74 20 30 20 31 20 68 65 6c 6c 6f 20 35 7d 20 6d  t 0 1 hello 5} m
6430: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
6440: 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54   $msg.} {1 SQLIT
6450: 45 5f 4d 49 53 55 53 45 7d 0a 0a 23 20 54 69 63  E_MISUSE}..# Tic
6460: 6b 65 74 20 23 31 36 35 30 3a 20 20 48 6f 6e 6f  ket #1650:  Hono
6470: 72 20 74 68 65 20 6e 42 79 74 65 73 20 70 61 72  r the nBytes par
6480: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
6490: 33 5f 70 72 65 70 61 72 65 2e 0a 23 0a 64 6f 5f  3_prepare..#.do_
64a0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 35 2e 31  test capi3c-15.1
64b0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 20 7b 53 45   {.  set sql {SE
64c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
64d0: 20 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74    set nbytes [st
64e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c  ring length $sql
64f0: 5d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b  ].  append sql {
6500: 20 57 48 45 52 45 20 61 3d 3d 31 7d 0a 20 20 73   WHERE a==1}.  s
6510: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
6520: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
6530: 24 73 71 6c 20 24 6e 62 79 74 65 73 20 54 41 49  $sql $nbytes TAI
6540: 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  L].  sqlite3_ste
6550: 70 20 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65  p $STMT.  sqlite
6560: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54  3_column_int $ST
6570: 4d 54 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  MT 0.} {1}.do_te
6580: 73 74 20 63 61 70 69 33 63 2d 31 35 2e 32 20 7b  st capi3c-15.2 {
6590: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
65a0: 24 53 54 4d 54 0a 20 20 73 71 6c 69 74 65 33 5f  $STMT.  sqlite3_
65b0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
65c0: 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   0.} {2}.do_test
65d0: 20 63 61 70 69 33 63 2d 31 35 2e 33 20 7b 0a 20   capi3c-15.3 {. 
65e0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
65f0: 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  e $STMT.} {SQLIT
6600: 45 5f 4f 4b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  E_OK}..# Make su
6610: 72 65 20 63 6f 64 65 20 69 73 20 61 6c 77 61 79  re code is alway
6620: 73 20 67 65 6e 65 72 61 74 65 64 20 65 76 65 6e  s generated even
6630: 20 69 66 20 61 6e 20 49 46 20 45 58 49 53 54 53   if an IF EXISTS
6640: 20 6f 72 20 0a 23 20 49 46 20 4e 4f 54 20 45 58   or .# IF NOT EX
6650: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
6660: 72 65 73 65 6e 74 20 74 68 61 74 20 74 68 65 20  resent that the 
6670: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 6f  table does not o
6680: 72 0a 23 20 64 6f 65 73 20 65 78 69 73 74 73 2e  r.# does exists.
6690: 20 20 54 68 61 74 20 77 61 79 20 77 65 20 77 69    That way we wi
66a0: 6c 6c 20 61 6c 77 61 79 73 20 68 61 76 65 20 61  ll always have a
66b0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
66c0: 65 6e 74 0a 23 20 74 6f 20 65 78 70 69 72 65 20  ent.# to expire 
66d0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
66e0: 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74 65  changes..#.do_te
66f0: 73 74 20 63 61 70 69 33 63 2d 31 36 2e 31 20 7b  st capi3c-16.1 {
6700: 0a 20 20 73 65 74 20 73 71 6c 20 7b 44 52 4f 50  .  set sql {DROP
6710: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
6720: 20 74 33 7d 0a 20 20 73 65 74 20 53 54 4d 54 20   t3}.  set STMT 
6730: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
6740: 5f 76 32 20 24 44 42 20 24 73 71 6c 20 2d 31 20  _v2 $DB $sql -1 
6750: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
6760: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
6770: 20 65 78 70 72 20 7b 24 53 54 4d 54 21 3d 22 22   expr {$STMT!=""
6780: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6790: 63 61 70 69 33 63 2d 31 36 2e 32 20 7b 0a 20 20  capi3c-16.2 {.  
67a0: 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20  set sql {CREATE 
67b0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
67c0: 53 54 53 20 74 31 28 78 2c 79 29 7d 0a 20 20 73  STS t1(x,y)}.  s
67d0: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
67e0: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
67f0: 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20  $sql -1 TAIL].  
6800: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6810: 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b 24   $STMT.  expr {$
6820: 53 54 4d 54 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a  STMT!=""}.} {1}.
6830: 0a 23 20 42 75 74 20 73 74 69 6c 6c 20 77 65 20  .# But still we 
6840: 64 6f 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 20  do not generate 
6850: 63 6f 64 65 20 69 66 20 74 68 65 72 65 20 69 73  code if there is
6860: 20 6e 6f 20 53 51 4c 0a 23 0a 64 6f 5f 74 65 73   no SQL.#.do_tes
6870: 74 20 63 61 70 69 33 63 2d 31 36 2e 33 20 7b 0a  t capi3c-16.3 {.
6880: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
6890: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
68a0: 44 42 20 7b 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  DB {} -1 TAIL]. 
68b0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
68c0: 65 20 24 53 54 4d 54 0a 20 20 65 78 70 72 20 7b  e $STMT.  expr {
68d0: 24 53 54 4d 54 3d 3d 22 22 7d 0a 7d 20 7b 31 7d  $STMT==""}.} {1}
68e0: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
68f0: 31 36 2e 34 20 7b 0a 20 20 73 65 74 20 53 54 4d  16.4 {.  set STM
6900: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
6910: 72 65 5f 76 32 20 24 44 42 20 7b 3b 7d 20 2d 31  re_v2 $DB {;} -1
6920: 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33   TAIL].  sqlite3
6930: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
6940: 20 20 65 78 70 72 20 7b 24 53 54 4d 54 3d 3d 22    expr {$STMT=="
6950: 22 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b  "}.} {1}..# Tick
6960: 65 74 20 23 32 31 35 34 2e 0a 23 0a 64 6f 5f 74  et #2154..#.do_t
6970: 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 20  est capi3c-17.1 
6980: 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71  {.  set STMT [sq
6990: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
69a0: 20 24 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78   $DB {SELECT max
69b0: 28 61 29 20 46 52 4f 4d 20 74 32 7d 20 2d 31 20  (a) FROM t2} -1 
69c0: 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f  TAIL].  sqlite3_
69d0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
69e0: 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20  ITE_ROW.do_test 
69f0: 63 61 70 69 33 63 2d 31 37 2e 32 20 7b 0a 20 20  capi3c-17.2 {.  
6a00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6a10: 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64  nt $STMT 0.} 4.d
6a20: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37  o_test capi3c-17
6a30: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  .3 {.  sqlite3_s
6a40: 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49  tep $STMT.} SQLI
6a50: 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20  TE_DONE.do_test 
6a60: 63 61 70 69 33 63 2d 31 37 2e 34 20 7b 0a 20 20  capi3c-17.4 {.  
6a70: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6a80: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6a90: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f  REATE INDEX i2 O
6aa0: 4e 20 74 32 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t2(a)}.  sqlit
6ab0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6ac0: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6ad0: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 35 20 7b  st capi3c-17.5 {
6ae0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .  sqlite3_colum
6af0: 6e 5f 69 6e 74 20 24 53 54 4d 54 20 30 0a 7d 20  n_int $STMT 0.} 
6b00: 34 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  4.do_test capi3c
6b10: 2d 31 37 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -17.6 {.  sqlite
6b20: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53  3_step $STMT.} S
6b30: 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65  QLITE_DONE.do_te
6b40: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 37 20 7b  st capi3c-17.7 {
6b50: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
6b60: 20 24 53 54 4d 54 0a 20 20 64 62 20 65 76 61 6c   $STMT.  db eval
6b70: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
6b80: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
6b90: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52  $STMT.} SQLITE_R
6ba0: 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  OW.do_test capi3
6bb0: 63 2d 31 37 2e 38 20 7b 0a 20 20 73 71 6c 69 74  c-17.8 {.  sqlit
6bc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53  e3_column_int $S
6bd0: 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f 74 65 73  TMT 0.} 4.do_tes
6be0: 74 20 63 61 70 69 33 63 2d 31 37 2e 39 20 7b 0a  t capi3c-17.9 {.
6bf0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6c00: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f  STMT.} SQLITE_DO
6c10: 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  NE.do_test capi3
6c20: 63 2d 31 37 2e 31 30 20 7b 0a 20 20 73 71 6c 69  c-17.10 {.  sqli
6c30: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54  te3_finalize $ST
6c40: 4d 54 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73  MT.  set STMT [s
6c50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6c60: 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 62 20  2 $DB {SELECT b 
6c70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
6c80: 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  ?} -1 TAIL].  sq
6c90: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24  lite3_bind_int $
6ca0: 53 54 4d 54 20 31 20 32 0a 20 20 64 62 20 65 76  STMT 1 2.  db ev
6cb0: 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  al {.    DELETE 
6cc0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53  FROM t1;.    INS
6cd0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6ce0: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
6cf0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
6d00: 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29 3b  VALUES(2,'two');
6d10: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6d20: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 27 74 68   t1 VALUES(3,'th
6d30: 72 65 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ree');.    INSER
6d40: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6d50: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
6d60: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6d70: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f  STMT.} SQLITE_RO
6d80: 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  W.do_test capi3c
6d90: 2d 31 37 2e 31 31 20 7b 0a 20 20 73 71 6c 69 74  -17.11 {.  sqlit
6da0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 24  e3_column_text $
6db0: 53 54 4d 54 20 30 0a 7d 20 74 77 6f 0a 64 6f 5f  STMT 0.} two.do_
6dc0: 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31  test capi3c-17.1
6dd0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  2 {.  sqlite3_st
6de0: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
6df0: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63  E_DONE.do_test c
6e00: 61 70 69 33 63 2d 31 37 2e 31 33 20 7b 0a 20 20  api3c-17.13 {.  
6e10: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 53  sqlite3_reset $S
6e20: 54 4d 54 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  TMT.  db eval {C
6e30: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
6e40: 4e 20 74 31 28 61 29 7d 0a 20 20 73 71 6c 69 74  N t1(a)}.  sqlit
6e50: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20  e3_step $STMT.} 
6e60: 53 51 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65  SQLITE_ROW.do_te
6e70: 73 74 20 63 61 70 69 33 63 2d 31 37 2e 31 34 20  st capi3c-17.14 
6e80: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  {.  sqlite3_colu
6e90: 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a  mn_text $STMT 0.
6ea0: 7d 20 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61  } two.do_test ca
6eb0: 70 69 33 63 2d 31 37 2e 31 35 20 7b 0a 20 20 73  pi3c-17.15 {.  s
6ec0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
6ed0: 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a  T.} SQLITE_DONE.
6ee0: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
6ef0: 37 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  7.16 {.  sqlite3
6f00: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
6f10: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 49 4e 44  b eval {DROP IND
6f20: 45 58 20 69 31 7d 0a 20 20 73 71 6c 69 74 65 33  EX i1}.  sqlite3
6f30: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
6f40: 4c 49 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74  LITE_ROW.do_test
6f50: 20 63 61 70 69 33 63 2d 31 37 2e 31 37 20 7b 0a   capi3c-17.17 {.
6f60: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
6f70: 5f 74 65 78 74 20 24 53 54 4d 54 20 30 0a 7d 20  _text $STMT 0.} 
6f80: 74 77 6f 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  two.do_test capi
6f90: 33 63 2d 31 37 2e 31 38 20 7b 0a 20 20 73 71 6c  3c-17.18 {.  sql
6fa0: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
6fb0: 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f  } SQLITE_DONE.do
6fc0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 37 2e  _test capi3c-17.
6fd0: 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  99 {.  sqlite3_f
6fe0: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
6ff0: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 4f 6e 20  SQLITE_OK..# On 
7000: 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  the mailing list
7010: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 70   it has been rep
7020: 6f 72 74 65 64 20 74 68 61 74 20 66 69 6e 61 6c  orted that final
7030: 69 7a 69 6e 67 20 61 66 74 65 72 0a 23 20 61 6e  izing after.# an
7040: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 74   SQLITE_BUSY ret
7050: 75 72 6e 20 6c 65 61 64 73 20 74 6f 20 61 20 73  urn leads to a s
7060: 65 67 66 61 75 6c 74 2e 20 20 48 65 72 65 20 77  egfault.  Here w
7070: 65 20 74 65 73 74 20 74 68 61 74 20 63 61 73 65  e test that case
7080: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ..#.do_test capi
7090: 33 63 2d 31 38 2e 31 20 7b 0a 20 20 73 71 6c 69  3c-18.1 {.  sqli
70a0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
70b0: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
70c0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
70d0: 44 42 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61  DB {SELECT max(a
70e0: 29 20 46 52 4f 4d 20 74 31 7d 20 2d 31 20 54 41  ) FROM t1} -1 TA
70f0: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7100: 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54  ep $STMT.} SQLIT
7110: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61  E_ROW.do_test ca
7120: 70 69 33 63 2d 31 38 2e 32 20 7b 0a 20 20 73 71  pi3c-18.2 {.  sq
7130: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
7140: 20 24 53 54 4d 54 20 30 0a 7d 20 34 0a 64 6f 5f   $STMT 0.} 4.do_
7150: 74 65 73 74 20 63 61 70 69 33 63 2d 31 38 2e 33  test capi3c-18.3
7160: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
7170: 65 74 20 24 53 54 4d 54 0a 20 20 64 62 32 20 65  et $STMT.  db2 e
7180: 76 61 6c 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  val {BEGIN EXCLU
7190: 53 49 56 45 7d 0a 20 20 73 71 6c 69 74 65 33 5f  SIVE}.  sqlite3_
71a0: 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51 4c  step $STMT.} SQL
71b0: 49 54 45 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74  ITE_BUSY.do_test
71c0: 20 63 61 70 69 33 63 2d 31 38 2e 34 20 7b 0a 20   capi3c-18.4 {. 
71d0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
71e0: 65 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  e $STMT.} SQLITE
71f0: 5f 42 55 53 59 0a 64 6f 5f 74 65 73 74 20 63 61  _BUSY.do_test ca
7200: 70 69 33 63 2d 31 38 2e 35 20 7b 0a 20 20 64 62  pi3c-18.5 {.  db
7210: 32 20 65 76 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a  2 eval {COMMIT}.
7220: 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d    db2 close.} {}
7230: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 31 35 38  ..# Ticket #2158
7240: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
7250: 74 65 70 28 29 20 77 69 6c 6c 20 73 74 69 6c 6c  tep() will still
7260: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 53   return SQLITE_S
7270: 43 48 45 4d 41 0a 23 20 69 66 20 74 68 65 20 64  CHEMA.# if the d
7280: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
7290: 68 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20  hanges in a way 
72a0: 74 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 73  that makes the s
72b0: 74 61 74 65 6d 65 6e 74 0a 23 20 6e 6f 20 6c 6f  tatement.# no lo
72c0: 6e 67 65 72 20 76 61 6c 69 64 2e 0a 23 0a 64 6f  nger valid..#.do
72d0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e  _test capi3c-19.
72e0: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
72f0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7300: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 20  E t3(x,y);.     
7310: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
7320: 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a  ALUES(1,2);.  }.
7330: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7340: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 24  te3_prepare_v2 $
7350: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
7360: 4d 20 74 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20  M t3} -1 TAIL]. 
7370: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
7380: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 52 4f 57  TMT.} SQLITE_ROW
7390: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
73a0: 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.2 {.  sqlite3
73b0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d  _column_int $STM
73c0: 54 20 30 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20  T 0.} 1.do_test 
73d0: 63 61 70 69 33 63 2d 31 39 2e 33 20 7b 0a 20 20  capi3c-19.3 {.  
73e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
73f0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  MT.} SQLITE_DONE
7400: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7410: 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.4 {.  sqlite3
7420: 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20 20 64  _reset $STMT.  d
7430: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42  b eval {DROP TAB
7440: 4c 45 20 74 33 7d 0a 20 20 73 71 6c 69 74 65 33  LE t3}.  sqlite3
7450: 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 53 51  _step $STMT.} SQ
7460: 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65  LITE_ERROR.do_te
7470: 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34 2e 31  st capi3c-19.4.1
7480: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72   {.  sqlite3_err
7490: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 20 73 75  msg $DB.} {no su
74a0: 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 0a 69 66  ch table: t3}.if
74b0: 63 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74  capable deprecat
74c0: 65 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ed {.  do_test c
74d0: 61 70 69 33 63 2d 31 39 2e 34 2e 32 20 7b 0a 20  api3c-19.4.2 {. 
74e0: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72     sqlite3_expir
74f0: 65 64 20 24 53 54 4d 54 0a 20 20 7d 20 31 0a 7d  ed $STMT.  } 1.}
7500: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
7510: 31 39 2e 34 2e 33 20 7b 0a 20 20 73 71 6c 69 74  19.4.3 {.  sqlit
7520: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
7530: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
7540: 74 33 7d 0a 69 66 63 61 70 61 62 6c 65 20 64 65  t3}.ifcapable de
7550: 70 72 65 63 61 74 65 64 20 7b 0a 20 20 64 6f 5f  precated {.  do_
7560: 74 65 73 74 20 63 61 70 69 33 63 2d 31 39 2e 34  test capi3c-19.4
7570: 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .4 {.    sqlite3
7580: 5f 65 78 70 69 72 65 64 20 30 0a 20 20 7d 20 31  _expired 0.  } 1
7590: 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .}.do_test capi3
75a0: 63 2d 31 39 2e 35 20 7b 0a 20 20 73 71 6c 69 74  c-19.5 {.  sqlit
75b0: 65 33 5f 72 65 73 65 74 20 24 53 54 4d 54 0a 20  e3_reset $STMT. 
75c0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
75d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
75e0: 78 2c 79 29 3b 0a 20 20 20 20 20 49 4e 53 45 52  x,y);.     INSER
75f0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
7600: 28 31 2c 32 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  (1,2);.  }.  sql
7610: 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a  ite3_step $STMT.
7620: 7d 20 53 51 4c 49 54 45 5f 52 4f 57 0a 69 66 63  } SQLITE_ROW.ifc
7630: 61 70 61 62 6c 65 20 64 65 70 72 65 63 61 74 65  apable deprecate
7640: 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  d {.  do_test ca
7650: 70 69 33 63 2d 31 39 2e 35 2e 32 20 7b 0a 20 20  pi3c-19.5.2 {.  
7660: 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65    sqlite3_expire
7670: 64 20 24 53 54 4d 54 0a 20 20 7d 20 30 0a 7d 0a  d $STMT.  } 0.}.
7680: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 31  do_test capi3c-1
7690: 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  9.6 {.  sqlite3_
76a0: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 53 54 4d 54  column_int $STMT
76b0: 20 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 63   1.} 2.do_test c
76c0: 61 70 69 33 63 2d 31 39 2e 39 39 20 7b 0a 20 20  api3c-19.99 {.  
76d0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
76e0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
76f0: 4f 4b 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  OK..# Make sure 
7700: 61 20 63 68 61 6e 67 65 20 69 6e 20 61 20 73 65  a change in a se
7710: 70 61 72 61 74 65 20 64 61 74 61 62 61 73 65 20  parate database 
7720: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 65 73 20  connection does 
7730: 6e 6f 74 0a 23 20 63 61 75 73 65 20 61 6e 20 53  not.# cause an S
7740: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 72 65 74  QLITE_SCHEMA ret
7750: 75 72 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63  urn..#.do_test c
7760: 61 70 69 33 63 2d 32 30 2e 31 20 7b 0a 20 20 73  api3c-20.1 {.  s
7770: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
7780: 5f 70 72 65 70 61 72 65 5f 76 32 20 24 44 42 20  _prepare_v2 $DB 
7790: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
77a0: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  3} -1 TAIL].  sq
77b0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
77c0: 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 43 52  b.  db2 eval {CR
77d0: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 78 29  EATE TABLE t4(x)
77e0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
77f0: 20 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f   $STMT.} SQLITE_
7800: 52 4f 57 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ROW.do_test capi
7810: 33 63 2d 32 30 2e 32 20 7b 0a 20 20 73 71 6c 69  3c-20.2 {.  sqli
7820: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24  te3_column_int $
7830: 53 54 4d 54 20 31 0a 7d 20 32 0a 64 6f 5f 74 65  STMT 1.} 2.do_te
7840: 73 74 20 63 61 70 69 33 63 2d 32 30 2e 33 20 7b  st capi3c-20.3 {
7850: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
7860: 24 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 44  $STMT.} SQLITE_D
7870: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ONE.do_test capi
7880: 33 63 2d 32 30 2e 34 20 7b 0a 20 20 64 62 32 20  3c-20.4 {.  db2 
7890: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
78a0: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d  finalize $STMT.}
78b0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 54 65   SQLITE_OK..# Te
78c0: 73 74 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f  st that sqlite3_
78d0: 73 74 65 70 28 29 20 73 65 74 73 20 74 68 65 20  step() sets the 
78e0: 64 61 74 61 62 61 73 65 20 65 72 72 6f 72 20 63  database error c
78f0: 6f 64 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23  ode correctly..#
7900: 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 34 39   See ticket #249
7910: 37 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70  7..#.ifcapable p
7920: 72 6f 67 72 65 73 73 20 7b 0a 20 20 64 6f 5f 74  rogress {.  do_t
7930: 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e 31 20  est capi3c-21.1 
7940: 7b 0a 20 20 20 20 73 65 74 20 53 54 4d 54 20 5b  {.    set STMT [
7950: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
7960: 76 32 20 24 44 42 20 7b 53 45 4c 45 43 54 20 2a  v2 $DB {SELECT *
7970: 20 46 52 4f 4d 20 74 33 7d 20 2d 31 20 54 41 49   FROM t3} -1 TAI
7980: 4c 5d 0a 20 20 20 20 64 62 20 70 72 6f 67 72 65  L].    db progre
7990: 73 73 20 35 20 22 65 78 70 72 20 31 22 0a 20 20  ss 5 "expr 1".  
79a0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
79b0: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
79c0: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
79d0: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
79e0: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
79f0: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
7a00: 20 24 44 42 0a 20 20 7d 20 7b 53 51 4c 49 54 45   $DB.  } {SQLITE
7a10: 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20 64 6f  _INTERRUPT}.  do
7a20: 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 31 2e  _test capi3c-21.
7a30: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  3 {.    sqlite3_
7a40: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
7a50: 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52   } {SQLITE_INTER
7a60: 52 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20  RUPT}.  do_test 
7a70: 63 61 70 69 33 63 2d 32 31 2e 34 20 7b 0a 20 20  capi3c-21.4 {.  
7a80: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7a90: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
7aa0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
7ab0: 33 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20  3} -1 TAIL].    
7ac0: 64 62 20 70 72 6f 67 72 65 73 73 20 35 20 22 65  db progress 5 "e
7ad0: 78 70 72 20 31 22 0a 20 20 20 20 73 71 6c 69 74  xpr 1".    sqlit
7ae0: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
7af0: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
7b00: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33  .  do_test capi3
7b10: 63 2d 32 31 2e 35 20 7b 0a 20 20 20 20 73 71 6c  c-21.5 {.    sql
7b20: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 24 44 42  ite3_errcode $DB
7b30: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
7b40: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  OR}.  do_test ca
7b50: 70 69 33 63 2d 32 31 2e 36 20 7b 0a 20 20 20 20  pi3c-21.6 {.    
7b60: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7b70: 20 24 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49   $STMT.  } {SQLI
7b80: 54 45 5f 49 4e 54 45 52 52 55 50 54 7d 0a 20 20  TE_INTERRUPT}.  
7b90: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
7ba0: 31 2e 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.7 {.    sqlite
7bb0: 33 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  3_errcode $DB.  
7bc0: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7bd0: 55 50 54 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  UPT}.  do_test c
7be0: 61 70 69 33 63 2d 32 31 2e 38 20 7b 0a 20 20 20  api3c-21.8 {.   
7bf0: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
7c00: 64 5f 65 72 72 63 6f 64 65 20 24 44 42 0a 20 20  d_errcode $DB.  
7c10: 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  } {SQLITE_INTERR
7c20: 55 50 54 7d 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73  UPT}.}..# Make s
7c30: 75 72 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ure sqlite3_resu
7c40: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 29 20  lt_error_code() 
7c50: 72 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72  returns the corr
7c60: 65 63 74 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  ect error code..
7c70: 23 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 39  # See ticket #29
7c80: 34 30 0a 23 0a 64 6f 5f 74 65 73 74 20 63 61 70  40.#.do_test cap
7c90: 69 33 63 2d 32 32 2e 31 20 7b 0a 20 20 64 62 20  i3c-22.1 {.  db 
7ca0: 70 72 6f 67 72 65 73 73 20 30 20 7b 7d 0a 20 20  progress 0 {}.  
7cb0: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
7cc0: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
7cd0: 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65 72 72  {SELECT test_err
7ce0: 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67 65 27  or('the message'
7cf0: 2c 33 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20  ,3)} -1 TAIL].  
7d00: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54  sqlite3_step $ST
7d10: 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 50 45 52  MT.} {SQLITE_PER
7d20: 4d 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  M}.sqlite3_final
7d30: 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f 74 65 73  ize $STMT.do_tes
7d40: 74 20 63 61 70 69 33 63 2d 32 32 2e 32 20 7b 0a  t capi3c-22.2 {.
7d50: 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69    set STMT [sqli
7d60: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64  te3_prepare_v2 d
7d70: 62 20 7b 53 45 4c 45 43 54 20 74 65 73 74 5f 65  b {SELECT test_e
7d80: 72 72 6f 72 28 27 74 68 65 20 6d 65 73 73 61 67  rror('the messag
7d90: 65 27 2c 34 29 7d 20 2d 31 20 54 41 49 4c 5d 0a  e',4)} -1 TAIL].
7da0: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
7db0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 41  STMT.} {SQLITE_A
7dc0: 42 4f 52 54 7d 0a 73 71 6c 69 74 65 33 5f 66 69  BORT}.sqlite3_fi
7dd0: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 64 6f 5f  nalize $STMT.do_
7de0: 74 65 73 74 20 63 61 70 69 33 63 2d 32 32 2e 33  test capi3c-22.3
7df0: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
7e00: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
7e10: 32 20 64 62 20 7b 53 45 4c 45 43 54 20 74 65 73  2 db {SELECT tes
7e20: 74 5f 65 72 72 6f 72 28 27 74 68 65 20 6d 65 73  t_error('the mes
7e30: 73 61 67 65 27 2c 31 36 29 7d 20 2d 31 20 54 41  sage',16)} -1 TA
7e40: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  IL].  sqlite3_st
7e50: 65 70 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ep $STMT.} {SQLI
7e60: 54 45 5f 45 4d 50 54 59 7d 0a 73 71 6c 69 74 65  TE_EMPTY}.sqlite
7e70: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
7e80: 0a 0a 23 20 46 6f 72 20 61 20 6d 75 6c 74 69 2d  ..# For a multi-
7e90: 63 6f 6c 75 6d 6e 20 72 65 73 75 6c 74 20 73 65  column result se
7ea0: 74 20 77 68 65 72 65 20 74 68 65 20 73 61 6d 65  t where the same
7eb0: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 69 73   table column is
7ec0: 20 72 65 70 65 61 74 65 64 0a 23 20 69 6e 20 6d   repeated.# in m
7ed0: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 20  ultiple columns 
7ee0: 6f 66 20 74 68 65 20 6f 75 74 70 75 74 2c 20 76  of the output, v
7ef0: 65 72 69 66 79 20 74 68 61 74 20 64 6f 69 6e 67  erify that doing
7f00: 20 61 20 55 54 46 2d 38 20 74 6f 20 55 54 46 2d   a UTF-8 to UTF-
7f10: 31 36 0a 23 20 63 6f 6e 76 65 72 73 69 6f 6e 20  16.# conversion 
7f20: 28 6f 72 20 76 69 63 65 20 76 65 72 73 61 29 20  (or vice versa) 
7f30: 6f 6e 20 6f 6e 65 20 63 6f 6c 75 6d 6e 20 64 6f  on one column do
7f40: 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  es not change th
7f50: 65 20 76 61 6c 75 65 20 6f 66 0a 23 20 74 68 65  e value of.# the
7f60: 20 73 65 63 6f 6e 64 2e 0a 23 0a 69 66 63 61 70   second..#.ifcap
7f70: 61 62 6c 65 20 75 74 66 31 36 20 7b 0a 20 20 64  able utf16 {.  d
7f80: 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32 33  o_test capi3c-23
7f90: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 53 54 4d  .1 {.    set STM
7fa0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
7fb0: 72 65 5f 76 32 20 64 62 20 7b 53 45 4c 45 43 54  re_v2 db {SELECT
7fc0: 20 62 2c 62 2c 62 2c 62 20 46 52 4f 4d 20 74 31   b,b,b,b FROM t1
7fd0: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73  } -1 TAIL].    s
7fe0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d  qlite3_step $STM
7ff0: 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 52 4f  T.  } {SQLITE_RO
8000: 57 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  W}.  do_test cap
8010: 69 33 63 2d 32 33 2e 32 20 7b 0a 20 20 20 20 73  i3c-23.2 {.    s
8020: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8030: 78 74 31 36 20 24 53 54 4d 54 20 30 0a 20 20 20  xt16 $STMT 0.   
8040: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8050: 74 65 78 74 20 24 53 54 4d 54 20 31 0a 20 20 7d  text $STMT 1.  }
8060: 20 7b 6f 6e 65 7d 0a 20 20 64 6f 5f 74 65 73 74   {one}.  do_test
8070: 20 63 61 70 69 33 63 2d 32 33 2e 33 20 7b 0a 20   capi3c-23.3 {. 
8080: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
8090: 6e 5f 74 65 78 74 31 36 20 24 53 54 4d 54 20 32  n_text16 $STMT 2
80a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .    sqlite3_col
80b0: 75 6d 6e 5f 74 65 78 74 20 24 53 54 4d 54 20 33  umn_text $STMT 3
80c0: 0a 20 20 7d 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c  .  } {one}.  sql
80d0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
80e0: 54 4d 54 0a 20 20 64 6f 5f 74 65 73 74 20 63 61  TMT.  do_test ca
80f0: 70 69 33 63 2d 32 33 2e 34 20 7b 0a 20 20 20 20  pi3c-23.4 {.    
8100: 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65  set STMT [sqlite
8110: 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20  3_prepare_v2 db 
8120: 7b 53 45 4c 45 43 54 20 62 7c 7c 27 78 27 2c 62  {SELECT b||'x',b
8130: 2c 62 2c 62 20 46 52 4f 4d 20 74 31 7d 20 2d 31  ,b,b FROM t1} -1
8140: 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c 69 74   TAIL].    sqlit
8150: 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20 20  e3_step $STMT.  
8160: 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 20  } {SQLITE_ROW}. 
8170: 20 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d   do_test capi3c-
8180: 32 33 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  23.5 {.    sqlit
8190: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
81a0: 20 24 53 54 4d 54 20 30 0a 20 20 20 20 73 71 6c   $STMT 0.    sql
81b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
81c0: 20 24 53 54 4d 54 20 31 0a 20 20 7d 20 7b 6f 6e   $STMT 1.  } {on
81d0: 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 70  e}.  do_test cap
81e0: 69 33 63 2d 32 33 2e 36 20 7b 0a 20 20 20 20 73  i3c-23.6 {.    s
81f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8200: 78 74 31 36 20 24 53 54 4d 54 20 32 0a 20 20 20  xt16 $STMT 2.   
8210: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8220: 74 65 78 74 20 24 53 54 4d 54 20 33 0a 20 20 7d  text $STMT 3.  }
8230: 20 7b 6f 6e 65 7d 0a 20 20 73 71 6c 69 74 65 33   {one}.  sqlite3
8240: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
8250: 7d 0a 0a 23 20 54 65 73 74 20 64 65 63 6c 74 79  }..# Test declty
8260: 70 65 20 6f 6e 20 73 6f 6d 65 20 53 45 4c 45 43  pe on some SELEC
8270: 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
8280: 74 20 63 6f 6e 74 61 69 6e 20 73 75 62 2d 73 65  t contain sub-se
8290: 6c 65 63 74 73 2e 0a 23 0a 70 72 6f 63 20 64 65  lects..#.proc de
82a0: 63 6c 74 79 70 65 20 7b 7a 53 71 6c 7d 20 7b 0a  cltype {zSql} {.
82b0: 20 20 73 65 74 20 72 65 74 20 5b 6c 69 73 74 5d    set ret [list]
82c0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
82d0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
82e0: 64 62 20 24 7a 53 71 6c 20 2d 31 20 54 41 49 4c  db $zSql -1 TAIL
82f0: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
8300: 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65 33  } {$i < [sqlite3
8310: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53  _column_count $S
8320: 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  TMT]} {incr i} {
8330: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 74  .    lappend ret
8340: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
8350: 5f 64 65 63 6c 74 79 70 65 20 24 53 54 4d 54 20  _decltype $STMT 
8360: 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  $i].  }.  sqlite
8370: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
8380: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 74 0a 7d  .  return $ret.}
8390: 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d  .do_test capi3c-
83a0: 32 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  24.1 {.  execsql
83b0: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
83c0: 74 35 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20  t5(a INTEGER, b 
83d0: 53 54 52 49 4e 47 2c 20 63 20 44 41 54 45 54 49  STRING, c DATETI
83e0: 4d 45 29 20 7d 0a 20 20 64 65 63 6c 74 79 70 65  ME) }.  decltype
83f0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
8400: 74 35 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 20 53  t5}.} {INTEGER S
8410: 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45 7d 0a  TRING DATETIME}.
8420: 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63 2d 32  do_test capi3c-2
8430: 34 2e 32 20 7b 0a 20 20 64 65 63 6c 74 79 70 65  4.2 {.  decltype
8440: 20 7b 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54   {SELECT (SELECT
8450: 20 63 29 20 46 52 4f 4d 20 74 35 7d 0a 7d 20 7b   c) FROM t5}.} {
8460: 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74 65 73  DATETIME}.do_tes
8470: 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20 7b 0a  t capi3c-24.3 {.
8480: 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45 4c 45    decltype {SELE
8490: 43 54 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  CT (SELECT * FRO
84a0: 4d 20 28 53 45 4c 45 43 54 20 63 29 29 20 46 52  M (SELECT c)) FR
84b0: 4f 4d 20 74 35 7d 0a 7d 20 7b 44 41 54 45 54 49  OM t5}.} {DATETI
84c0: 4d 45 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69  ME}.do_test capi
84d0: 33 63 2d 32 34 2e 34 20 7b 0a 20 20 64 65 63 6c  3c-24.4 {.  decl
84e0: 74 79 70 65 20 7b 53 45 4c 45 43 54 20 2a 20 46  type {SELECT * F
84f0: 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52  ROM (SELECT * FR
8500: 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59 20 63  OM t5 ORDER BY c
8510: 20 4c 49 4d 49 54 20 31 29 20 4f 52 44 45 52 20   LIMIT 1) ORDER 
8520: 42 59 20 62 7d 0a 7d 20 7b 49 4e 54 45 47 45 52  BY b}.} {INTEGER
8530: 20 53 54 52 49 4e 47 20 44 41 54 45 54 49 4d 45   STRING DATETIME
8540: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 70 69 33 63  }.do_test capi3c
8550: 2d 32 34 2e 35 20 7b 0a 20 20 64 65 63 6c 74 79  -24.5 {.  declty
8560: 70 65 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  pe {.    SELECT 
8570: 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28  (SELECT x FROM (
8580: 53 45 4c 45 43 54 20 63 20 41 53 20 78 29 29 20  SELECT c AS x)) 
8590: 0a 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43  .    FROM (SELEC
85a0: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
85b0: 52 20 42 59 20 63 20 4c 49 4d 49 54 20 31 29 20  R BY c LIMIT 1) 
85c0: 4f 52 44 45 52 20 42 59 20 62 0a 20 20 7d 0a 7d  ORDER BY b.  }.}
85d0: 20 7b 44 41 54 45 54 49 4d 45 7d 0a 64 6f 5f 74   {DATETIME}.do_t
85e0: 65 73 74 20 63 61 70 69 33 63 2d 32 34 2e 33 20  est capi3c-24.3 
85f0: 7b 0a 20 20 64 65 63 6c 74 79 70 65 20 7b 53 45  {.  decltype {SE
8600: 4c 45 43 54 20 28 53 45 4c 45 43 54 20 78 20 46  LECT (SELECT x F
8610: 52 4f 4d 20 28 53 45 4c 45 43 54 20 74 35 2e 61  ROM (SELECT t5.a
8620: 20 41 53 20 78 29 29 20 46 52 4f 4d 20 74 35 7d   AS x)) FROM t5}
8630: 0a 7d 20 7b 49 4e 54 45 47 45 52 7d 0a 0a 0a 23  .} {INTEGER}...#
8640: 20 46 75 72 74 68 65 72 20 74 65 73 74 73 20 6f   Further tests o
8650: 66 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  f sqlite3_column
8660: 5f 64 65 63 6c 74 79 70 65 28 29 3a 0a 23 0a 64  _decltype():.#.d
8670: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
8680: 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  5.0 {.  CREATE T
8690: 41 42 4c 45 20 74 31 31 28 61 20 56 41 52 43 48  ABLE t11(a VARCH
86a0: 41 52 28 31 30 29 2c 20 62 20 49 4e 54 45 47 45  AR(10), b INTEGE
86b0: 52 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  R);.  CREATE TAB
86c0: 4c 45 20 74 31 32 28 61 20 56 41 52 43 48 41 52  LE t12(a VARCHAR
86d0: 28 31 35 29 2c 20 62 20 46 4c 4f 41 54 29 3b 0a  (15), b FLOAT);.
86e0: 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73  }..foreach {tn s
86f0: 71 6c 7d 20 7b 0a 20 20 31 20 22 53 45 4c 45 43  ql} {.  1 "SELEC
8700: 54 20 2a 20 46 52 4f 4d 20 74 31 31 20 55 4e 49  T * FROM t11 UNI
8710: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 2a 20  ON ALL SELECT * 
8720: 46 52 4f 4d 20 74 31 32 22 0a 20 20 32 20 22 53  FROM t12".  2 "S
8730: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
8740: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20   UNION SELECT * 
8750: 46 52 4f 4d 20 74 31 32 22 0a 20 20 33 20 22 53  FROM t12".  3 "S
8760: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
8770: 20 45 58 43 45 50 54 20 53 45 4c 45 43 54 20 2a   EXCEPT SELECT *
8780: 20 46 52 4f 4d 20 74 31 32 22 0a 20 20 34 20 22   FROM t12".  4 "
8790: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
87a0: 31 20 49 4e 54 45 52 53 45 43 54 20 53 45 4c 45  1 INTERSECT SELE
87b0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 32 22 0a 0a  CT * FROM t12"..
87c0: 20 20 35 20 22 53 45 4c 45 43 54 20 2a 20 46 52    5 "SELECT * FR
87d0: 4f 4d 20 74 31 31 20 55 4e 49 4f 4e 20 41 4c 4c  OM t11 UNION ALL
87e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
87f0: 31 32 20 4f 52 44 45 52 20 42 59 20 31 22 0a 20  12 ORDER BY 1". 
8800: 20 36 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f   6 "SELECT * FRO
8810: 4d 20 74 31 31 20 55 4e 49 4f 4e 20 53 45 4c 45  M t11 UNION SELE
8820: 43 54 20 2a 20 46 52 4f 4d 20 74 31 32 20 4f 52  CT * FROM t12 OR
8830: 44 45 52 20 42 59 20 31 22 0a 20 20 37 20 22 53  DER BY 1".  7 "S
8840: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 31  ELECT * FROM t11
8850: 20 45 58 43 45 50 54 20 53 45 4c 45 43 54 20 2a   EXCEPT SELECT *
8860: 20 46 52 4f 4d 20 74 31 32 20 4f 52 44 45 52 20   FROM t12 ORDER 
8870: 42 59 20 31 22 0a 20 20 38 20 22 53 45 4c 45 43  BY 1".  8 "SELEC
8880: 54 20 2a 20 46 52 4f 4d 20 74 31 31 20 49 4e 54  T * FROM t11 INT
8890: 45 52 53 45 43 54 20 53 45 4c 45 43 54 20 2a 20  ERSECT SELECT * 
88a0: 46 52 4f 4d 20 74 31 32 20 4f 52 44 45 52 20 42  FROM t12 ORDER B
88b0: 59 20 31 22 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65  Y 1".} {.  do_te
88c0: 73 74 20 32 35 2e 24 74 6e 20 7b 20 64 65 63 6c  st 25.$tn { decl
88d0: 74 79 70 65 20 24 73 71 6c 20 7d 20 7b 56 41 52  type $sql } {VAR
88e0: 43 48 41 52 28 31 30 29 20 49 4e 54 45 47 45 52  CHAR(10) INTEGER
88f0: 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }.}..finish_test
8900: 0a                                               .