/ Hex Artifact Content
Login

Artifact 941a424e7722dd8994c2d503b28d00e6a8f87f23:


0000: 23 20 32 30 30 33 20 53 65 70 74 65 6d 62 65 72  # 2003 September
0010: 20 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   6.#.# 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 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74  s of this script
01c0: 20 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c   testing the sql
01d0: 69 74 65 5f 62 69 6e 64 20 41 50 49 2e 0a 23 0a  ite_bind API..#.
01e0: 23 20 24 49 64 3a 20 62 69 6e 64 2e 74 65 73 74  # $Id: bind.test
01f0: 2c 76 20 31 2e 33 38 20 32 30 30 36 2f 30 36 2f  ,v 1.38 2006/06/
0200: 32 37 20 32 30 3a 30 36 3a 34 35 20 64 72 68 20  27 20:06:45 drh 
0210: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0220: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0230: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0240: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0250: 72 2e 74 63 6c 0a 0a 70 72 6f 63 20 73 71 6c 69  r.tcl..proc sqli
0260: 74 65 5f 73 74 65 70 20 7b 73 74 6d 74 20 4e 20  te_step {stmt N 
0270: 56 41 4c 53 20 43 4f 4c 53 7d 20 7b 0a 20 20 75  VALS COLS} {.  u
0280: 70 76 61 72 20 56 41 4c 53 20 76 61 6c 73 0a 20  pvar VALS vals. 
0290: 20 75 70 76 61 72 20 43 4f 4c 53 20 63 6f 6c 73   upvar COLS cols
02a0: 0a 20 20 73 65 74 20 76 61 6c 73 20 5b 6c 69 73  .  set vals [lis
02b0: 74 5d 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c  t].  set cols [l
02c0: 69 73 74 5d 0a 0a 20 20 73 65 74 20 72 63 20 5b  ist]..  set rc [
02d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 73 74  sqlite3_step $st
02e0: 6d 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  mt].  for {set i
02f0: 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74   0} {$i < [sqlit
0300: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20  e3_column_count 
0310: 24 73 74 6d 74 5d 7d 20 7b 69 6e 63 72 20 69 7d  $stmt]} {incr i}
0320: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63   {.    lappend c
0330: 6f 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  ols [sqlite3_col
0340: 75 6d 6e 5f 6e 61 6d 65 20 24 73 74 6d 74 20 24  umn_name $stmt $
0350: 69 5d 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65  i].  }.  for {se
0360: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71  t i 0} {$i < [sq
0370: 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
0380: 20 24 73 74 6d 74 5d 7d 20 7b 69 6e 63 72 20 69   $stmt]} {incr i
0390: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
03a0: 76 61 6c 73 20 5b 73 71 6c 69 74 65 33 5f 63 6f  vals [sqlite3_co
03b0: 6c 75 6d 6e 5f 74 65 78 74 20 24 73 74 6d 74 20  lumn_text $stmt 
03c0: 24 69 5d 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  $i].  }..  retur
03d0: 6e 20 24 72 63 0a 7d 0a 0a 64 6f 5f 74 65 73 74  n $rc.}..do_test
03e0: 20 62 69 6e 64 2d 31 2e 31 20 7b 0a 20 20 73 65   bind-1.1 {.  se
03f0: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t DB [sqlite3_co
0400: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
0410: 20 64 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b   db].  execsql {
0420: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0430: 61 2c 62 2c 63 29 3b 7d 0a 20 20 73 65 74 20 56  a,b,c);}.  set V
0440: 4d 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  M [sqlite3_prepa
0450: 72 65 20 24 44 42 20 7b 49 4e 53 45 52 54 20 49  re $DB {INSERT I
0460: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3a 31  NTO t1 VALUES(:1
0470: 2c 3f 2c 3a 61 62 63 29 7d 20 2d 31 20 54 41 49  ,?,:abc)} -1 TAI
0480: 4c 5d 0a 20 20 73 65 74 20 54 41 49 4c 0a 7d 20  L].  set TAIL.} 
0490: 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  {}.do_test bind-
04a0: 31 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  1.1.1 {.  sqlite
04b0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
04c0: 5f 63 6f 75 6e 74 20 24 56 4d 0a 7d 20 33 0a 64  _count $VM.} 3.d
04d0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e 31 2e  o_test bind-1.1.
04e0: 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  2 {.  sqlite3_bi
04f0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
0500: 65 20 24 56 4d 20 31 0a 7d 20 7b 3a 31 7d 0a 64  e $VM 1.} {:1}.d
0510: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e 31 2e  o_test bind-1.1.
0520: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  3 {.  sqlite3_bi
0530: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
0540: 65 20 24 56 4d 20 32 0a 7d 20 7b 7d 0a 64 6f 5f  e $VM 2.} {}.do_
0550: 74 65 73 74 20 62 69 6e 64 2d 31 2e 31 2e 34 20  test bind-1.1.4 
0560: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0570: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20  _parameter_name 
0580: 24 56 4d 20 33 0a 7d 20 7b 3a 61 62 63 7d 0a 64  $VM 3.} {:abc}.d
0590: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e 32 20  o_test bind-1.2 
05a0: 7b 0a 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20  {.  sqlite_step 
05b0: 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c  $VM N VALUES COL
05c0: 4e 41 4d 45 53 0a 7d 20 7b 53 51 4c 49 54 45 5f  NAMES.} {SQLITE_
05d0: 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73 74 20 62 69  DONE}.do_test bi
05e0: 6e 64 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  nd-1.3 {.  execs
05f0: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
0600: 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  , * FROM t1}.} {
0610: 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  1 {} {} {}}.do_t
0620: 65 73 74 20 62 69 6e 64 2d 31 2e 34 20 7b 0a 20  est bind-1.4 {. 
0630: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
0640: 56 4d 0a 20 20 73 71 6c 69 74 65 5f 62 69 6e 64  VM.  sqlite_bind
0650: 20 24 56 4d 20 31 20 7b 74 65 73 74 20 76 61 6c   $VM 1 {test val
0660: 75 65 20 31 7d 20 6e 6f 72 6d 61 6c 0a 20 20 73  ue 1} normal.  s
0670: 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20 4e  qlite_step $VM N
0680: 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53   VALUES COLNAMES
0690: 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64  .} SQLITE_DONE.d
06a0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e 35 20  o_test bind-1.5 
06b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
06c0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
06d0: 4d 20 74 31 7d 0a 7d 20 7b 31 20 7b 7d 20 7b 7d  M t1}.} {1 {} {}
06e0: 20 7b 7d 20 32 20 7b 74 65 73 74 20 76 61 6c 75   {} 2 {test valu
06f0: 65 20 31 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  e 1} {} {}}.do_t
0700: 65 73 74 20 62 69 6e 64 2d 31 2e 36 20 7b 0a 20  est bind-1.6 {. 
0710: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
0720: 56 4d 0a 20 20 73 71 6c 69 74 65 5f 62 69 6e 64  VM.  sqlite_bind
0730: 20 24 56 4d 20 33 20 7b 27 74 65 73 74 20 76 61   $VM 3 {'test va
0740: 6c 75 65 20 32 27 7d 20 6e 6f 72 6d 61 6c 0a 20  lue 2'} normal. 
0750: 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d   sqlite_step $VM
0760: 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d   N VALUES COLNAM
0770: 45 53 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  ES.} SQLITE_DONE
0780: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e  .do_test bind-1.
0790: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
07a0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
07b0: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 7b 7d 20  ROM t1}.} {1 {} 
07c0: 7b 7d 20 7b 7d 20 32 20 7b 74 65 73 74 20 76 61  {} {} 2 {test va
07d0: 6c 75 65 20 31 7d 20 7b 7d 20 7b 7d 20 33 20 7b  lue 1} {} {} 3 {
07e0: 74 65 73 74 20 76 61 6c 75 65 20 31 7d 20 7b 7d  test value 1} {}
07f0: 20 7b 27 74 65 73 74 20 76 61 6c 75 65 20 32 27   {'test value 2'
0800: 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  }}.do_test bind-
0810: 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.8 {.  sqlite3_
0820: 72 65 73 65 74 20 24 56 4d 0a 20 20 73 65 74 20  reset $VM.  set 
0830: 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69  sqlite_static_bi
0840: 6e 64 5f 76 61 6c 75 65 20 31 32 33 0a 20 20 73  nd_value 123.  s
0850: 71 6c 69 74 65 5f 62 69 6e 64 20 24 56 4d 20 31  qlite_bind $VM 1
0860: 20 7b 7d 20 73 74 61 74 69 63 0a 20 20 73 71 6c   {} static.  sql
0870: 69 74 65 5f 62 69 6e 64 20 24 56 4d 20 32 20 7b  ite_bind $VM 2 {
0880: 61 62 63 64 65 66 67 7d 20 6e 6f 72 6d 61 6c 0a  abcdefg} normal.
0890: 20 20 73 71 6c 69 74 65 5f 62 69 6e 64 20 24 56    sqlite_bind $V
08a0: 4d 20 33 20 7b 7d 20 6e 75 6c 6c 0a 20 20 65 78  M 3 {} null.  ex
08b0: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
08c0: 4f 4d 20 74 31 7d 0a 20 20 73 71 6c 69 74 65 5f  OM t1}.  sqlite_
08d0: 73 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45  step $VM N VALUE
08e0: 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 65 78 65  S COLNAMES.  exe
08f0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
0900: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d  id, * FROM t1}.}
0910: 20 7b 31 20 31 32 33 20 61 62 63 64 65 66 67 20   {1 123 abcdefg 
0920: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {}}.do_test bind
0930: 2d 31 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.9 {.  sqlite3
0940: 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 73 71 6c  _reset $VM.  sql
0950: 69 74 65 5f 62 69 6e 64 20 24 56 4d 20 31 20 7b  ite_bind $VM 1 {
0960: 34 35 36 7d 20 6e 6f 72 6d 61 6c 0a 20 20 73 71  456} normal.  sq
0970: 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20  lite_step $VM N 
0980: 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a  VALUES COLNAMES.
0990: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
09a0: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
09b0: 74 31 7d 0a 7d 20 7b 31 20 31 32 33 20 61 62 63  t1}.} {1 123 abc
09c0: 64 65 66 67 20 7b 7d 20 32 20 34 35 36 20 61 62  defg {} 2 456 ab
09d0: 63 64 65 66 67 20 7b 7d 7d 0a 0a 64 6f 5f 74 65  cdefg {}}..do_te
09e0: 73 74 20 62 69 6e 64 2d 31 2e 39 39 20 7b 0a 20  st bind-1.99 {. 
09f0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0a00: 65 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 4f  e $VM.} SQLITE_O
0a10: 4b 0a 0a 23 20 50 72 65 70 61 72 65 20 74 68 65  K..# Prepare the
0a20: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 64 69   statement in di
0a30: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
0a40: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
0a50: 72 20 6f 72 20 6e 6f 74 0a 23 20 74 68 65 20 24  r or not.# the $
0a60: 76 61 72 20 70 72 6f 63 65 73 73 69 6e 67 20 69  var processing i
0a70: 73 20 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 20  s compiled into 
0a80: 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 23 0a 69  the library..#.i
0a90: 66 63 61 70 61 62 6c 65 20 7b 74 63 6c 76 61 72  fcapable {tclvar
0aa0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69  } {.  do_test bi
0ab0: 6e 64 2d 32 2e 31 20 7b 0a 20 20 20 20 65 78 65  nd-2.1 {.    exe
0ac0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c  csql {.      DEL
0ad0: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  ETE FROM t1;.   
0ae0: 20 7d 0a 20 20 20 20 73 65 74 20 56 4d 20 5b 73   }.    set VM [s
0af0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
0b00: 44 42 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  DB {INSERT INTO 
0b10: 74 31 20 56 41 4c 55 45 53 28 24 6f 6e 65 2c 24  t1 VALUES($one,$
0b20: 3a 3a 74 77 6f 2c 24 78 28 2d 7a 2d 29 29 7d 5c  ::two,$x(-z-))}\
0b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 20  .            -1 
0b40: 54 58 5d 0a 20 20 20 20 73 65 74 20 54 58 0a 20  TX].    set TX. 
0b50: 20 7d 20 7b 7d 0a 20 20 73 65 74 20 76 31 20 7b   } {}.  set v1 {
0b60: 24 6f 6e 65 7d 0a 20 20 73 65 74 20 76 32 20 7b  $one}.  set v2 {
0b70: 24 3a 3a 74 77 6f 7d 0a 20 20 73 65 74 20 76 33  $::two}.  set v3
0b80: 20 7b 24 78 28 2d 7a 2d 29 7d 0a 7d 0a 69 66 63   {$x(-z-)}.}.ifc
0b90: 61 70 61 62 6c 65 20 7b 21 74 63 6c 76 61 72 7d  apable {!tclvar}
0ba0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e   {.  do_test bin
0bb0: 64 2d 32 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  d-2.1 {.    exec
0bc0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
0bd0: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
0be0: 7d 0a 20 20 20 20 73 65 74 20 56 4d 20 5b 73 71  }.    set VM [sq
0bf0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
0c00: 42 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  B {INSERT INTO t
0c10: 31 20 56 41 4c 55 45 53 28 3a 6f 6e 65 2c 3a 74  1 VALUES(:one,:t
0c20: 77 6f 2c 3a 5f 29 7d 20 2d 31 20 54 58 5d 0a 20  wo,:_)} -1 TX]. 
0c30: 20 20 20 73 65 74 20 54 58 0a 20 20 7d 20 7b 7d     set TX.  } {}
0c40: 0a 20 20 73 65 74 20 76 31 20 7b 3a 6f 6e 65 7d  .  set v1 {:one}
0c50: 0a 20 20 73 65 74 20 76 32 20 7b 3a 74 77 6f 7d  .  set v2 {:two}
0c60: 0a 20 20 73 65 74 20 76 33 20 7b 3a 5f 7d 0a 7d  .  set v3 {:_}.}
0c70: 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32  ..do_test bind-2
0c80: 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .1.1 {.  sqlite3
0c90: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
0ca0: 63 6f 75 6e 74 20 24 56 4d 0a 7d 20 33 0a 64 6f  count $VM.} 3.do
0cb0: 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 32  _test bind-2.1.2
0cc0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
0cd0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
0ce0: 20 24 56 4d 20 31 0a 7d 20 24 76 31 0a 64 6f 5f   $VM 1.} $v1.do_
0cf0: 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 33 20  test bind-2.1.3 
0d00: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0d10: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20  _parameter_name 
0d20: 24 56 4d 20 32 0a 7d 20 24 76 32 0a 64 6f 5f 74  $VM 2.} $v2.do_t
0d30: 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 34 20 7b  est bind-2.1.4 {
0d40: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
0d50: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 24  parameter_name $
0d60: 56 4d 20 33 0a 7d 20 24 76 33 0a 64 6f 5f 74 65  VM 3.} $v3.do_te
0d70: 73 74 20 62 69 6e 64 2d 32 2e 31 2e 35 20 7b 0a  st bind-2.1.5 {.
0d80: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
0d90: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 24  arameter_index $
0da0: 56 4d 20 24 76 31 0a 7d 20 31 0a 64 6f 5f 74 65  VM $v1.} 1.do_te
0db0: 73 74 20 62 69 6e 64 2d 32 2e 31 2e 36 20 7b 0a  st bind-2.1.6 {.
0dc0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
0dd0: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 24  arameter_index $
0de0: 56 4d 20 24 76 32 0a 7d 20 32 0a 64 6f 5f 74 65  VM $v2.} 2.do_te
0df0: 73 74 20 62 69 6e 64 2d 32 2e 31 2e 37 20 7b 0a  st bind-2.1.7 {.
0e00: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
0e10: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 24  arameter_index $
0e20: 56 4d 20 24 76 33 0a 7d 20 33 0a 64 6f 5f 74 65  VM $v3.} 3.do_te
0e30: 73 74 20 62 69 6e 64 2d 32 2e 31 2e 38 20 7b 0a  st bind-2.1.8 {.
0e40: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
0e50: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 24  arameter_index $
0e60: 56 4d 20 7b 3a 68 69 7d 0a 7d 20 30 0a 0a 23 20  VM {:hi}.} 0..# 
0e70: 33 32 20 62 69 74 20 49 6e 74 65 67 65 72 73 0a  32 bit Integers.
0e80: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 32  do_test bind-2.2
0e90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
0ea0: 64 5f 69 6e 74 20 24 56 4d 20 31 20 31 32 33 0a  d_int $VM 1 123.
0eb0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
0ec0: 6e 74 20 24 56 4d 20 32 20 34 35 36 0a 20 20 73  nt $VM 2 456.  s
0ed0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20  qlite3_bind_int 
0ee0: 24 56 4d 20 33 20 37 38 39 0a 20 20 73 71 6c 69  $VM 3 789.  sqli
0ef0: 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41  te_step $VM N VA
0f00: 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20  LUES COLNAMES.  
0f10: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56  sqlite3_reset $V
0f20: 4d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  M.  execsql {SEL
0f30: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
0f40: 4d 20 74 31 7d 0a 7d 20 7b 31 20 31 32 33 20 34  M t1}.} {1 123 4
0f50: 35 36 20 37 38 39 7d 0a 64 6f 5f 74 65 73 74 20  56 789}.do_test 
0f60: 62 69 6e 64 2d 32 2e 33 20 7b 0a 20 20 73 71 6c  bind-2.3 {.  sql
0f70: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56  ite3_bind_int $V
0f80: 4d 20 32 20 2d 32 30 30 30 30 30 30 30 30 30 0a  M 2 -2000000000.
0f90: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
0fa0: 6e 74 20 24 56 4d 20 33 20 32 30 30 30 30 30 30  nt $VM 3 2000000
0fb0: 30 30 30 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  000.  sqlite_ste
0fc0: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
0fd0: 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65  OLNAMES.  sqlite
0fe0: 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78  3_reset $VM.  ex
0ff0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
1000: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
1010: 7d 20 7b 31 20 31 32 33 20 34 35 36 20 37 38 39  } {1 123 456 789
1020: 20 32 20 31 32 33 20 2d 32 30 30 30 30 30 30 30   2 123 -20000000
1030: 30 30 20 32 30 30 30 30 30 30 30 30 30 7d 0a 64  00 2000000000}.d
1040: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 34 20  o_test bind-2.4 
1050: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1060: 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20 74  ECT typeof(a), t
1070: 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65 6f 66  ypeof(b), typeof
1080: 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  (c) FROM t1}.} {
1090: 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72 20  integer integer 
10a0: 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72 20  integer integer 
10b0: 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72 7d  integer integer}
10c0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e  .do_test bind-2.
10d0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
10e0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
10f0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  t1;.  }.} {}..# 
1100: 36 34 20 62 69 74 20 49 6e 74 65 67 65 72 73 0a  64 bit Integers.
1110: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 33 2e 31  do_test bind-3.1
1120: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
1130: 64 5f 69 6e 74 36 34 20 24 56 4d 20 31 20 33 32  d_int64 $VM 1 32
1140: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
1150: 69 6e 74 36 34 20 24 56 4d 20 32 20 2d 32 30 30  int64 $VM 2 -200
1160: 30 30 30 30 30 30 30 30 30 30 0a 20 20 73 71 6c  0000000000.  sql
1170: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
1180: 24 56 4d 20 33 20 32 30 30 30 30 30 30 30 30 30  $VM 3 2000000000
1190: 30 30 30 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  000.  sqlite_ste
11a0: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
11b0: 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65  OLNAMES.  sqlite
11c0: 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78  3_reset $VM.  ex
11d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
11e0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
11f0: 7d 20 7b 31 20 33 32 20 2d 32 30 30 30 30 30 30  } {1 32 -2000000
1200: 30 30 30 30 30 30 20 32 30 30 30 30 30 30 30 30  000000 200000000
1210: 30 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 69  0000}.do_test bi
1220: 6e 64 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73  nd-3.2 {.  execs
1230: 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f  ql {SELECT typeo
1240: 66 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c  f(a), typeof(b),
1250: 20 74 79 70 65 6f 66 28 63 29 20 46 52 4f 4d 20   typeof(c) FROM 
1260: 74 31 7d 0a 7d 20 7b 69 6e 74 65 67 65 72 20 69  t1}.} {integer i
1270: 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72 7d 0a  nteger integer}.
1280: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 33 2e 33  do_test bind-3.3
1290: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
12a0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
12b0: 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 44  1;.  }.} {}..# D
12c0: 6f 75 62 6c 65 73 0a 64 6f 5f 74 65 73 74 20 62  oubles.do_test b
12d0: 69 6e 64 2d 34 2e 31 20 7b 0a 20 20 73 71 6c 69  ind-4.1 {.  sqli
12e0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20  te3_bind_double 
12f0: 24 56 4d 20 31 20 31 32 33 34 2e 31 32 33 34 0a  $VM 1 1234.1234.
1300: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64    sqlite3_bind_d
1310: 6f 75 62 6c 65 20 24 56 4d 20 32 20 30 2e 30 30  ouble $VM 2 0.00
1320: 30 30 31 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  001.  sqlite3_bi
1330: 6e 64 5f 64 6f 75 62 6c 65 20 24 56 4d 20 33 20  nd_double $VM 3 
1340: 31 32 33 34 35 36 37 38 39 0a 20 20 73 71 6c 69  123456789.  sqli
1350: 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41  te_step $VM N VA
1360: 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20  LUES COLNAMES.  
1370: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56  sqlite3_reset $V
1380: 4d 0a 20 20 73 65 74 20 78 20 5b 65 78 65 63 73  M.  set x [execs
1390: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
13a0: 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 5d 0a 20 20  , * FROM t1}].  
13b0: 72 65 67 73 75 62 20 7b 31 65 2d 30 30 35 7d 20  regsub {1e-005} 
13c0: 24 78 20 7b 31 65 2d 30 35 7d 20 79 0a 20 20 73  $x {1e-05} y.  s
13d0: 65 74 20 79 0a 7d 20 7b 31 20 31 32 33 34 2e 31  et y.} {1 1234.1
13e0: 32 33 34 20 31 65 2d 30 35 20 31 32 33 34 35 36  234 1e-05 123456
13f0: 37 38 39 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 62  789.0}.do_test b
1400: 69 6e 64 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  ind-4.2 {.  exec
1410: 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65  sql {SELECT type
1420: 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29  of(a), typeof(b)
1430: 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52 4f 4d  , typeof(c) FROM
1440: 20 74 31 7d 0a 7d 20 7b 72 65 61 6c 20 72 65 61   t1}.} {real rea
1450: 6c 20 72 65 61 6c 7d 0a 64 6f 5f 74 65 73 74 20  l real}.do_test 
1460: 62 69 6e 64 2d 34 2e 33 20 7b 0a 20 20 65 78 65  bind-4.3 {.  exe
1470: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
1480: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  E FROM t1;.  }.}
1490: 20 7b 7d 0a 0a 23 20 4e 55 4c 4c 0a 64 6f 5f 74   {}..# NULL.do_t
14a0: 65 73 74 20 62 69 6e 64 2d 35 2e 31 20 7b 0a 20  est bind-5.1 {. 
14b0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
14c0: 6c 6c 20 24 56 4d 20 31 0a 20 20 73 71 6c 69 74  ll $VM 1.  sqlit
14d0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d  e3_bind_null $VM
14e0: 20 32 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   2.  sqlite3_bin
14f0: 64 5f 6e 75 6c 6c 20 24 56 4d 20 33 20 0a 20 20  d_null $VM 3 .  
1500: 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20  sqlite_step $VM 
1510: 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45  N VALUES COLNAME
1520: 53 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  S.  sqlite3_rese
1530: 74 20 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20  t $VM.  execsql 
1540: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a  {SELECT rowid, *
1550: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 7b   FROM t1}.} {1 {
1560: 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {} {}}.do_test
1570: 20 62 69 6e 64 2d 35 2e 32 20 7b 0a 20 20 65 78   bind-5.2 {.  ex
1580: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79  ecsql {SELECT ty
1590: 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28  peof(a), typeof(
15a0: 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52  b), typeof(c) FR
15b0: 4f 4d 20 74 31 7d 0a 7d 20 7b 6e 75 6c 6c 20 6e  OM t1}.} {null n
15c0: 75 6c 6c 20 6e 75 6c 6c 7d 0a 64 6f 5f 74 65 73  ull null}.do_tes
15d0: 74 20 62 69 6e 64 2d 35 2e 33 20 7b 0a 20 20 65  t bind-5.3 {.  e
15e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
15f0: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  ETE FROM t1;.  }
1600: 0a 7d 20 7b 7d 0a 0a 23 20 55 54 46 2d 38 20 74  .} {}..# UTF-8 t
1610: 65 78 74 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  ext.do_test bind
1620: 2d 36 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  -6.1 {.  sqlite3
1630: 5f 62 69 6e 64 5f 74 65 78 74 20 24 56 4d 20 31  _bind_text $VM 1
1640: 20 68 65 6c 6c 6f 74 68 65 72 65 20 35 0a 20 20   hellothere 5.  
1650: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
1660: 74 20 24 56 4d 20 32 20 22 2e 2e 22 20 31 0a 20  t $VM 2 ".." 1. 
1670: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
1680: 78 74 20 24 56 4d 20 33 20 77 6f 72 6c 64 20 2d  xt $VM 3 world -
1690: 31 0a 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20  1.  sqlite_step 
16a0: 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c  $VM N VALUES COL
16b0: 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65 33 5f  NAMES.  sqlite3_
16c0: 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78 65 63  reset $VM.  exec
16d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
16e0: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20  d, * FROM t1}.} 
16f0: 7b 31 20 68 65 6c 6c 6f 20 2e 20 77 6f 72 6c 64  {1 hello . world
1700: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 36  }.do_test bind-6
1710: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1720: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29  SELECT typeof(a)
1730: 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70  , typeof(b), typ
1740: 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a  eof(c) FROM t1}.
1750: 7d 20 7b 74 65 78 74 20 74 65 78 74 20 74 65 78  } {text text tex
1760: 74 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  t}.do_test bind-
1770: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.3 {.  execsql 
1780: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
1790: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  M t1;.  }.} {}..
17a0: 23 20 55 54 46 2d 31 36 20 74 65 78 74 0a 69 66  # UTF-16 text.if
17b0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
17c0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e 64  {.  do_test bind
17d0: 2d 37 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  -7.1 {.    sqlit
17e0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 24  e3_bind_text16 $
17f0: 56 4d 20 31 20 5b 65 6e 63 6f 64 69 6e 67 20 63  VM 1 [encoding c
1800: 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f 64 65  onvertto unicode
1810: 20 68 65 6c 6c 6f 74 68 65 72 65 5d 20 31 30 0a   hellothere] 10.
1820: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1830: 5f 74 65 78 74 31 36 20 24 56 4d 20 32 20 5b 65  _text16 $VM 2 [e
1840: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 74  ncoding convertt
1850: 6f 20 75 6e 69 63 6f 64 65 20 22 22 5d 20 30 0a  o unicode ""] 0.
1860: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1870: 5f 74 65 78 74 31 36 20 24 56 4d 20 33 20 5b 65  _text16 $VM 3 [e
1880: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 74  ncoding convertt
1890: 6f 20 75 6e 69 63 6f 64 65 20 77 6f 72 6c 64 5d  o unicode world]
18a0: 20 31 30 0a 20 20 20 20 73 71 6c 69 74 65 5f 73   10.    sqlite_s
18b0: 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53  tep $VM N VALUES
18c0: 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 20 20 73 71   COLNAMES.    sq
18d0: 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56 4d 0a  lite3_reset $VM.
18e0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
18f0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
1900: 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 20 68 65 6c  M t1}.  } {1 hel
1910: 6c 6f 20 7b 7d 20 77 6f 72 6c 64 7d 0a 20 20 64  lo {} world}.  d
1920: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 37 2e 32 20  o_test bind-7.2 
1930: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
1940: 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c  ELECT typeof(a),
1950: 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65   typeof(b), type
1960: 6f 66 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a 20  of(c) FROM t1}. 
1970: 20 7d 20 7b 74 65 78 74 20 74 65 78 74 20 74 65   } {text text te
1980: 78 74 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 69  xt}.}.do_test bi
1990: 6e 64 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73  nd-7.3 {.  execs
19a0: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
19b0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
19c0: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 74  }..# Test that t
19d0: 68 65 20 27 6f 75 74 20 6f 66 20 72 61 6e 67 65  he 'out of range
19e0: 27 20 65 72 72 6f 72 20 77 6f 72 6b 73 2e 0a 64  ' error works..d
19f0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 20  o_test bind-8.1 
1a00: 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69  {.  catch { sqli
1a10: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56  te3_bind_null $V
1a20: 4d 20 30 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  M 0 }.} {1}.do_t
1a30: 65 73 74 20 62 69 6e 64 2d 38 2e 32 20 7b 0a 20  est bind-8.2 {. 
1a40: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20   sqlite3_errmsg 
1a50: 24 44 42 0a 7d 20 7b 62 69 6e 64 20 6f 72 20 63  $DB.} {bind or c
1a60: 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20  olumn index out 
1a70: 6f 66 20 72 61 6e 67 65 7d 0a 69 66 63 61 70 61  of range}.ifcapa
1a80: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
1a90: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 33  do_test bind-8.3
1aa0: 20 7b 0a 20 20 20 20 65 6e 63 6f 64 69 6e 67 20   {.    encoding 
1ab0: 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75 6e 69 63  convertfrom unic
1ac0: 6f 64 65 20 5b 73 71 6c 69 74 65 33 5f 65 72 72  ode [sqlite3_err
1ad0: 6d 73 67 31 36 20 24 44 42 5d 0a 20 20 7d 20 7b  msg16 $DB].  } {
1ae0: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
1af0: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
1b00: 65 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  e}.}.do_test bin
1b10: 64 2d 38 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  d-8.4 {.  sqlite
1b20: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20  3_bind_null $VM 
1b30: 31 20 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72  1 .  sqlite3_err
1b40: 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 74 20 61  msg $DB.} {not a
1b50: 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74 65 73 74  n error}.do_test
1b60: 20 62 69 6e 64 2d 38 2e 35 20 7b 0a 20 20 63 61   bind-8.5 {.  ca
1b70: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69  tch { sqlite3_bi
1b80: 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 34 20 7d 0a  nd_null $VM 4 }.
1b90: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69  } {1}.do_test bi
1ba0: 6e 64 2d 38 2e 36 20 7b 0a 20 20 73 71 6c 69 74  nd-8.6 {.  sqlit
1bb0: 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d 20  e3_errmsg $DB.} 
1bc0: 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20  {bind or column 
1bd0: 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e  index out of ran
1be0: 67 65 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  ge}.ifcapable {u
1bf0: 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  tf16} {.  do_tes
1c00: 74 20 62 69 6e 64 2d 38 2e 37 20 7b 0a 20 20 20  t bind-8.7 {.   
1c10: 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72   encoding conver
1c20: 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20 5b 73  tfrom unicode [s
1c30: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 20  qlite3_errmsg16 
1c40: 24 44 42 5d 0a 20 20 7d 20 7b 62 69 6e 64 20 6f  $DB].  } {bind o
1c50: 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f  r column index o
1c60: 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a 7d 0a 0a  ut of range}.}..
1c70: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 38  do_test bind-8.8
1c80: 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c   {.  catch { sql
1c90: 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 24  ite3_bind_blob $
1ca0: 56 4d 20 30 20 22 61 62 63 22 20 33 20 7d 0a 7d  VM 0 "abc" 3 }.}
1cb0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e   {1}.do_test bin
1cc0: 64 2d 38 2e 39 20 7b 0a 20 20 63 61 74 63 68 20  d-8.9 {.  catch 
1cd0: 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  { sqlite3_bind_b
1ce0: 6c 6f 62 20 24 56 4d 20 34 20 22 61 62 63 22 20  lob $VM 4 "abc" 
1cf0: 33 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  3 }.} {1}.do_tes
1d00: 74 20 62 69 6e 64 2d 38 2e 31 30 20 7b 0a 20 20  t bind-8.10 {.  
1d10: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
1d20: 62 69 6e 64 5f 74 65 78 74 20 24 56 4d 20 30 20  bind_text $VM 0 
1d30: 22 61 62 63 22 20 33 20 7d 0a 7d 20 7b 31 7d 0a  "abc" 3 }.} {1}.
1d40: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
1d50: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69  } {.  do_test bi
1d60: 6e 64 2d 38 2e 31 31 20 7b 0a 20 20 20 20 63 61  nd-8.11 {.    ca
1d70: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69  tch { sqlite3_bi
1d80: 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 34 20  nd_text16 $VM 4 
1d90: 22 61 62 63 22 20 32 20 7d 0a 20 20 7d 20 7b 31  "abc" 2 }.  } {1
1da0: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  }.}.do_test bind
1db0: 2d 38 2e 31 32 20 7b 0a 20 20 63 61 74 63 68 20  -8.12 {.  catch 
1dc0: 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  { sqlite3_bind_i
1dd0: 6e 74 20 24 56 4d 20 30 20 35 20 7d 0a 7d 20 7b  nt $VM 0 5 }.} {
1de0: 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  1}.do_test bind-
1df0: 38 2e 31 33 20 7b 0a 20 20 63 61 74 63 68 20 7b  8.13 {.  catch {
1e00: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
1e10: 74 20 24 56 4d 20 34 20 35 20 7d 0a 7d 20 7b 31  t $VM 4 5 }.} {1
1e20: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38  }.do_test bind-8
1e30: 2e 31 34 20 7b 0a 20 20 63 61 74 63 68 20 7b 20  .14 {.  catch { 
1e40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
1e50: 62 6c 65 20 24 56 4d 20 30 20 35 2e 30 20 7d 0a  ble $VM 0 5.0 }.
1e60: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69  } {1}.do_test bi
1e70: 6e 64 2d 38 2e 31 35 20 7b 0a 20 20 63 61 74 63  nd-8.15 {.  catc
1e80: 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  h { sqlite3_bind
1e90: 5f 64 6f 75 62 6c 65 20 24 56 4d 20 34 20 36 2e  _double $VM 4 6.
1ea0: 30 20 7d 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 74 65  0 }.} {1}..do_te
1eb0: 73 74 20 62 69 6e 64 2d 38 2e 39 39 20 7b 0a 20  st bind-8.99 {. 
1ec0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1ed0: 65 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 4f  e $VM.} SQLITE_O
1ee0: 4b 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  K..do_test bind-
1ef0: 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.1 {.  execsql 
1f00: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1f10: 4c 45 20 74 32 28 61 2c 62 2c 63 2c 64 2c 65 2c  LE t2(a,b,c,d,e,
1f20: 66 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 72 63  f);.  }.  set rc
1f30: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73 71   [catch {.    sq
1f40: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
1f50: 42 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  B {.      INSERT
1f60: 20 49 4e 54 4f 20 74 32 28 61 29 20 56 41 4c 55   INTO t2(a) VALU
1f70: 45 53 28 3f 30 29 0a 20 20 20 20 7d 20 2d 31 20  ES(?0).    } -1 
1f80: 54 41 49 4c 0a 20 20 7d 20 6d 73 67 5d 0a 20 20  TAIL.  } msg].  
1f90: 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a  lappend rc $msg.
1fa0: 7d 20 7b 31 20 7b 28 31 29 20 76 61 72 69 61 62  } {1 {(1) variab
1fb0: 6c 65 20 6e 75 6d 62 65 72 20 6d 75 73 74 20 62  le number must b
1fc0: 65 20 62 65 74 77 65 65 6e 20 3f 31 20 61 6e 64  e between ?1 and
1fd0: 20 3f 39 39 39 7d 7d 0a 64 6f 5f 74 65 73 74 20   ?999}}.do_test 
1fe0: 62 69 6e 64 2d 39 2e 32 20 7b 0a 20 20 73 65 74  bind-9.2 {.  set
1ff0: 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20   rc [catch {.   
2000: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2010: 20 24 44 42 20 7b 0a 20 20 20 20 20 20 49 4e 53   $DB {.      INS
2020: 45 52 54 20 49 4e 54 4f 20 74 32 28 61 29 20 56  ERT INTO t2(a) V
2030: 41 4c 55 45 53 28 3f 31 30 30 30 29 0a 20 20 20  ALUES(?1000).   
2040: 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 7d 20 6d   } -1 TAIL.  } m
2050: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
2060: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 28 31 29 20   $msg.} {1 {(1) 
2070: 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
2080: 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20  must be between 
2090: 3f 31 20 61 6e 64 20 3f 39 39 39 7d 7d 0a 64 6f  ?1 and ?999}}.do
20a0: 5f 74 65 73 74 20 62 69 6e 64 2d 39 2e 33 20 7b  _test bind-9.3 {
20b0: 0a 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20 20  .  set VM [.    
20c0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
20d0: 24 44 42 20 7b 0a 20 20 20 20 20 20 49 4e 53 45  $DB {.      INSE
20e0: 52 54 20 49 4e 54 4f 20 74 32 28 61 2c 62 29 20  RT INTO t2(a,b) 
20f0: 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39 39 29 0a  VALUES(?1,?999).
2100: 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20      } -1 TAIL.  
2110: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ].  sqlite3_bind
2120: 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
2130: 20 24 56 4d 0a 7d 20 7b 39 39 39 7d 0a 63 61 74   $VM.} {999}.cat
2140: 63 68 20 7b 73 71 6c 69 74 65 33 5f 66 69 6e 61  ch {sqlite3_fina
2150: 6c 69 7a 65 20 24 56 4d 7d 0a 64 6f 5f 74 65 73  lize $VM}.do_tes
2160: 74 20 62 69 6e 64 2d 39 2e 34 20 7b 0a 20 20 73  t bind-9.4 {.  s
2170: 65 74 20 56 4d 20 5b 0a 20 20 20 20 73 71 6c 69  et VM [.    sqli
2180: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
2190: 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  {.      INSERT I
21a0: 4e 54 4f 20 74 32 28 61 2c 62 2c 63 2c 64 29 20  NTO t2(a,b,c,d) 
21b0: 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39 39 2c 3f  VALUES(?1,?999,?
21c0: 2c 3f 29 0a 20 20 20 20 7d 20 2d 31 20 54 41 49  ,?).    } -1 TAI
21d0: 4c 0a 20 20 5d 0a 20 20 73 71 6c 69 74 65 33 5f  L.  ].  sqlite3_
21e0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
21f0: 6f 75 6e 74 20 24 56 4d 0a 7d 20 7b 31 30 30 31  ount $VM.} {1001
2200: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 39  }.do_test bind-9
2210: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .5 {.  sqlite3_b
2220: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 31 20 31 0a  ind_int $VM 1 1.
2230: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
2240: 6e 74 20 24 56 4d 20 39 39 39 20 39 39 39 0a 20  nt $VM 999 999. 
2250: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
2260: 74 20 24 56 4d 20 31 30 30 30 20 31 30 30 30 0a  t $VM 1000 1000.
2270: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
2280: 6e 74 20 24 56 4d 20 31 30 30 31 20 31 30 30 31  nt $VM 1001 1001
2290: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
22a0: 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e  $VM.} SQLITE_DON
22b0: 45 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 39  E.do_test bind-9
22c0: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .6 {.  sqlite3_f
22d0: 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d 20 53 51  inalize $VM.} SQ
22e0: 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74 65 73 74 20  LITE_OK.do_test 
22f0: 62 69 6e 64 2d 39 2e 37 20 7b 0a 20 20 65 78 65  bind-9.7 {.  exe
2300: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2310: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 39 39 39  ROM t2}.} {1 999
2320: 20 31 30 30 30 20 31 30 30 31 20 7b 7d 20 7b 7d   1000 1001 {} {}
2330: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 74 63  }..ifcapable {tc
2340: 6c 76 61 72 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  lvar} {.  do_tes
2350: 74 20 62 69 6e 64 2d 31 30 2e 31 20 7b 0a 20 20  t bind-10.1 {.  
2360: 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20 20 20    set VM [.     
2370: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2380: 20 24 44 42 20 7b 0a 20 20 20 20 20 20 20 20 49   $DB {.        I
2390: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61 2c  NSERT INTO t2(a,
23a0: 62 2c 63 2c 64 2c 65 2c 66 29 20 56 41 4c 55 45  b,c,d,e,f) VALUE
23b0: 53 28 3a 61 62 63 2c 24 61 62 63 2c 3a 61 62 63  S(:abc,$abc,:abc
23c0: 2c 24 61 62 2c 24 61 62 63 2c 3a 61 62 63 29 0a  ,$ab,$abc,:abc).
23d0: 20 20 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a        } -1 TAIL.
23e0: 20 20 20 20 5d 0a 20 20 20 20 73 71 6c 69 74 65      ].    sqlite
23f0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2400: 5f 63 6f 75 6e 74 20 24 56 4d 0a 20 20 7d 20 33  _count $VM.  } 3
2410: 0a 20 20 73 65 74 20 76 31 20 7b 24 61 62 63 7d  .  set v1 {$abc}
2420: 0a 20 20 73 65 74 20 76 32 20 7b 24 61 62 7d 0a  .  set v2 {$ab}.
2430: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 74 63  }.ifcapable {!tc
2440: 6c 76 61 72 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  lvar} {.  do_tes
2450: 74 20 62 69 6e 64 2d 31 30 2e 31 20 7b 0a 20 20  t bind-10.1 {.  
2460: 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20 20 20    set VM [.     
2470: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2480: 20 24 44 42 20 7b 0a 20 20 20 20 20 20 20 20 49   $DB {.        I
2490: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61 2c  NSERT INTO t2(a,
24a0: 62 2c 63 2c 64 2c 65 2c 66 29 20 56 41 4c 55 45  b,c,d,e,f) VALUE
24b0: 53 28 3a 61 62 63 2c 3a 78 79 7a 2c 3a 61 62 63  S(:abc,:xyz,:abc
24c0: 2c 3a 78 79 2c 3a 78 79 7a 2c 3a 61 62 63 29 0a  ,:xy,:xyz,:abc).
24d0: 20 20 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a        } -1 TAIL.
24e0: 20 20 20 20 5d 0a 20 20 20 20 73 71 6c 69 74 65      ].    sqlite
24f0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2500: 5f 63 6f 75 6e 74 20 24 56 4d 0a 20 20 7d 20 33  _count $VM.  } 3
2510: 0a 20 20 73 65 74 20 76 31 20 7b 3a 78 79 7a 7d  .  set v1 {:xyz}
2520: 0a 20 20 73 65 74 20 76 32 20 7b 3a 78 79 7d 0a  .  set v2 {:xy}.
2530: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  }.do_test bind-1
2540: 30 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.2 {.  sqlite3_
2550: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
2560: 6e 64 65 78 20 24 56 4d 20 3a 61 62 63 0a 7d 20  ndex $VM :abc.} 
2570: 31 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  1.do_test bind-1
2580: 30 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.3 {.  sqlite3_
2590: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
25a0: 6e 64 65 78 20 24 56 4d 20 24 76 31 0a 7d 20 32  ndex $VM $v1.} 2
25b0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
25c0: 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .4 {.  sqlite3_b
25d0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
25e0: 64 65 78 20 24 56 4d 20 24 76 32 0a 7d 20 33 0a  dex $VM $v2.} 3.
25f0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e  do_test bind-10.
2600: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  5 {.  sqlite3_bi
2610: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
2620: 65 20 24 56 4d 20 31 0a 7d 20 3a 61 62 63 0a 64  e $VM 1.} :abc.d
2630: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 36  o_test bind-10.6
2640: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
2650: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
2660: 20 24 56 4d 20 32 0a 7d 20 24 76 31 0a 64 6f 5f   $VM 2.} $v1.do_
2670: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 37 20 7b  test bind-10.7 {
2680: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2690: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 24  parameter_name $
26a0: 56 4d 20 33 0a 7d 20 24 76 32 0a 64 6f 5f 74 65  VM 3.} $v2.do_te
26b0: 73 74 20 62 69 6e 64 2d 31 30 2e 37 2e 31 20 7b  st bind-10.7.1 {
26c0: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
26d0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 30  parameter_name 0
26e0: 20 31 20 20 20 3b 23 20 49 67 6e 6f 72 65 20 69   1   ;# Ignore i
26f0: 66 20 56 4d 20 69 73 20 4e 55 4c 4c 0a 7d 20 7b  f VM is NULL.} {
2700: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  }.do_test bind-1
2710: 30 2e 37 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  0.7.2 {.  sqlite
2720: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2730: 5f 6e 61 6d 65 20 24 56 4d 20 30 20 3b 23 20 49  _name $VM 0 ;# I
2740: 67 6e 6f 72 65 20 69 66 20 69 6e 64 65 78 20 74  gnore if index t
2750: 6f 6f 20 73 6d 61 6c 6c 0a 7d 20 7b 7d 0a 64 6f  oo small.} {}.do
2760: 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 37 2e  _test bind-10.7.
2770: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  3 {.  sqlite3_bi
2780: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
2790: 65 20 24 56 4d 20 34 20 3b 23 20 49 67 6e 6f 72  e $VM 4 ;# Ignor
27a0: 65 20 69 66 20 69 6e 64 65 78 20 69 73 20 74 6f  e if index is to
27b0: 6f 20 62 69 67 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  o big.} {}.do_te
27c0: 73 74 20 62 69 6e 64 2d 31 30 2e 38 20 7b 0a 20  st bind-10.8 {. 
27d0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
27e0: 74 20 24 56 4d 20 31 20 31 0a 20 20 73 71 6c 69  t $VM 1 1.  sqli
27f0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
2800: 20 32 20 32 0a 20 20 73 71 6c 69 74 65 33 5f 62   2 2.  sqlite3_b
2810: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 33 20 33 0a  ind_int $VM 3 3.
2820: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
2830: 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  VM.} SQLITE_DONE
2840: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
2850: 2e 38 2e 31 20 7b 0a 20 20 23 20 42 69 6e 64 69  .8.1 {.  # Bindi
2860: 6e 67 20 61 74 74 65 6d 70 74 73 20 61 66 74 65  ng attempts afte
2870: 72 20 70 72 6f 67 72 61 6d 20 73 74 61 72 74 20  r program start 
2880: 73 68 6f 75 6c 64 20 66 61 69 6c 0a 20 20 73 65  should fail.  se
2890: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20  t rc [catch {.  
28a0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
28b0: 6e 74 20 24 56 4d 20 31 20 31 0a 20 20 7d 20 6d  nt $VM 1 1.  } m
28c0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
28d0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 7d 7d 0a 64   $msg.} {1 {}}.d
28e0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 39  o_test bind-10.9
28f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
2900: 61 6c 69 7a 65 20 24 56 4d 0a 7d 20 53 51 4c 49  alize $VM.} SQLI
2910: 54 45 5f 4f 4b 0a 64 6f 5f 74 65 73 74 20 62 69  TE_OK.do_test bi
2920: 6e 64 2d 31 30 2e 31 30 20 7b 0a 20 20 65 78 65  nd-10.10 {.  exe
2930: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2940: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 39 39 39  ROM t2}.} {1 999
2950: 20 31 30 30 30 20 31 30 30 31 20 7b 7d 20 7b 7d   1000 1001 {} {}
2960: 20 31 20 32 20 31 20 33 20 32 20 31 7d 0a 0a 23   1 2 1 3 2 1}..#
2970: 20 54 69 63 6b 65 74 20 23 39 31 38 0a 23 0a 64   Ticket #918.#.d
2980: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 31  o_test bind-10.1
2990: 31 20 7b 0a 20 20 23 20 63 61 74 63 68 20 7b 73  1 {.  # catch {s
29a0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
29b0: 24 56 4d 7d 0a 20 20 73 65 74 20 56 4d 20 5b 0a  $VM}.  set VM [.
29c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70      sqlite3_prep
29d0: 61 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20  are $DB {.      
29e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61  INSERT INTO t2(a
29f0: 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 56 41 4c 55  ,b,c,d,e,f) VALU
2a00: 45 53 28 3a 61 62 63 2c 3f 2c 3f 34 2c 3a 70 71  ES(:abc,?,?4,:pq
2a10: 72 2c 3a 61 62 63 2c 3f 34 29 0a 20 20 20 20 7d  r,:abc,?4).    }
2a20: 20 2d 31 20 54 41 49 4c 0a 20 20 5d 0a 20 20 73   -1 TAIL.  ].  s
2a30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
2a40: 6d 65 74 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a  meter_count $VM.
2a50: 7d 20 35 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  } 5.do_test bind
2a60: 2d 31 30 2e 31 31 2e 31 20 7b 0a 20 20 73 71 6c  -10.11.1 {.  sql
2a70: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2a80: 74 65 72 5f 69 6e 64 65 78 20 30 20 3a 78 79 7a  ter_index 0 :xyz
2a90: 20 20 3b 23 20 69 67 6e 6f 72 65 20 4e 55 4c 4c    ;# ignore NULL
2aa0: 20 56 4d 20 61 72 67 75 6d 65 6e 74 73 0a 7d 20   VM arguments.} 
2ab0: 30 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  0.do_test bind-1
2ac0: 30 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.12 {.  sqlite3
2ad0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2ae0: 69 6e 64 65 78 20 24 56 4d 20 3a 78 79 7a 0a 7d  index $VM :xyz.}
2af0: 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d   0.do_test bind-
2b00: 31 30 2e 31 33 20 7b 0a 20 20 73 71 6c 69 74 65  10.13 {.  sqlite
2b10: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2b20: 5f 69 6e 64 65 78 20 24 56 4d 20 7b 7d 0a 7d 20  _index $VM {}.} 
2b30: 30 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  0.do_test bind-1
2b40: 30 2e 31 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.14 {.  sqlite3
2b50: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2b60: 69 6e 64 65 78 20 24 56 4d 20 3a 70 71 72 0a 7d  index $VM :pqr.}
2b70: 20 35 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d   5.do_test bind-
2b80: 31 30 2e 31 35 20 7b 0a 20 20 73 71 6c 69 74 65  10.15 {.  sqlite
2b90: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2ba0: 5f 69 6e 64 65 78 20 24 56 4d 20 3f 34 0a 7d 20  _index $VM ?4.} 
2bb0: 34 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  4.do_test bind-1
2bc0: 30 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.16 {.  sqlite3
2bd0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2be0: 6e 61 6d 65 20 24 56 4d 20 31 0a 7d 20 3a 61 62  name $VM 1.} :ab
2bf0: 63 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  c.do_test bind-1
2c00: 30 2e 31 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.17 {.  sqlite3
2c10: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2c20: 6e 61 6d 65 20 24 56 4d 20 32 0a 7d 20 7b 7d 0a  name $VM 2.} {}.
2c30: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e  do_test bind-10.
2c40: 31 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  18 {.  sqlite3_b
2c50: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
2c60: 6d 65 20 24 56 4d 20 33 0a 7d 20 7b 7d 0a 64 6f  me $VM 3.} {}.do
2c70: 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 39  _test bind-10.19
2c80: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
2c90: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
2ca0: 20 24 56 4d 20 34 0a 7d 20 7b 3f 34 7d 0a 64 6f   $VM 4.} {?4}.do
2cb0: 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 32 30  _test bind-10.20
2cc0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
2cd0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
2ce0: 20 24 56 4d 20 35 0a 7d 20 3a 70 71 72 0a 63 61   $VM 5.} :pqr.ca
2cf0: 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 66 69 6e  tch {sqlite3_fin
2d00: 61 6c 69 7a 65 20 24 56 4d 7d 0a 0a 23 20 4d 61  alize $VM}..# Ma
2d10: 6b 65 20 73 75 72 65 20 77 65 20 63 61 74 63 68  ke sure we catch
2d20: 20 61 6e 20 75 6e 74 65 72 6d 69 6e 61 74 65 64   an unterminated
2d30: 20 22 28 22 20 69 6e 20 61 20 54 63 6c 2d 73 74   "(" in a Tcl-st
2d40: 79 6c 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  yle variable nam
2d50: 65 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 63  e.#.ifcapable tc
2d60: 6c 76 61 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74  lvar {.  do_test
2d70: 20 62 69 6e 64 2d 31 31 2e 31 20 7b 0a 20 20 20   bind-11.1 {.   
2d80: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
2d90: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
2da0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
2db0: 65 3d 24 61 62 63 28 31 32 33 20 61 6e 64 20 73  e=$abc(123 and s
2dc0: 71 6c 20 4e 4f 54 20 4e 55 4c 4c 3b 7d 0a 20 20  ql NOT NULL;}.  
2dd0: 7d 20 7b 31 20 7b 75 6e 72 65 63 6f 67 6e 69 7a  } {1 {unrecogniz
2de0: 65 64 20 74 6f 6b 65 6e 3a 20 22 24 61 62 63 28  ed token: "$abc(
2df0: 31 32 33 22 7d 7d 0a 7d 0a 0a 69 66 20 7b 5b 65  123"}}.}..if {[e
2e00: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65  xecsql {pragma e
2e10: 6e 63 6f 64 69 6e 67 7d 5d 3d 3d 22 55 54 46 2d  ncoding}]=="UTF-
2e20: 38 22 7d 20 7b 0a 20 20 23 20 54 65 73 74 20 74  8"} {.  # Test t
2e30: 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 62 69  he ability to bi
2e40: 6e 64 20 74 65 78 74 20 74 68 61 74 20 63 6f 6e  nd text that con
2e50: 74 61 69 6e 73 20 65 6d 62 65 64 64 65 64 20 27  tains embedded '
2e60: 5c 30 30 30 27 20 63 68 61 72 61 63 74 65 72 73  \000' characters
2e70: 2e 0a 20 20 23 20 4d 61 6b 65 20 73 75 72 65 20  ..  # Make sure 
2e80: 77 65 20 63 61 6e 20 72 65 63 6f 76 65 72 20 74  we can recover t
2e90: 68 65 20 65 6e 74 69 72 65 20 69 6e 70 75 74 20  he entire input 
2ea0: 73 74 72 69 6e 67 2e 0a 20 20 23 0a 20 20 64 6f  string..  #.  do
2eb0: 5f 74 65 73 74 20 62 69 6e 64 2d 31 32 2e 31 20  _test bind-12.1 
2ec0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
2ed0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
2ee0: 4c 45 20 74 33 28 78 20 42 4c 4f 42 29 3b 0a 20  LE t3(x BLOB);. 
2ef0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 56 4d 20     }.    set VM 
2f00: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
2f10: 20 24 44 42 20 7b 49 4e 53 45 52 54 20 49 4e 54   $DB {INSERT INT
2f20: 4f 20 74 33 20 56 41 4c 55 45 53 28 3f 29 7d 20  O t3 VALUES(?)} 
2f30: 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 73 71 6c  -1 TAIL].    sql
2f40: 69 74 65 5f 62 69 6e 64 20 20 24 56 4d 20 31 20  ite_bind  $VM 1 
2f50: 6e 6f 74 2d 75 73 65 64 20 62 6c 6f 62 31 30 0a  not-used blob10.
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
2f70: 20 24 56 4d 0a 20 20 20 20 73 71 6c 69 74 65 33   $VM.    sqlite3
2f80: 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 20 20  _finalize $VM.  
2f90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2fa0: 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28    SELECT typeof(
2fb0: 78 29 2c 20 6c 65 6e 67 74 68 28 78 29 2c 20 71  x), length(x), q
2fc0: 75 6f 74 65 28 78 29 2c 0a 20 20 20 20 20 20 20  uote(x),.       
2fd0: 20 20 20 20 20 20 6c 65 6e 67 74 68 28 63 61 73        length(cas
2fe0: 74 28 78 20 41 53 20 42 4c 4f 42 29 29 2c 20 71  t(x AS BLOB)), q
2ff0: 75 6f 74 65 28 63 61 73 74 28 78 20 41 53 20 42  uote(cast(x AS B
3000: 4c 4f 42 29 29 20 46 52 4f 4d 20 74 33 0a 20 20  LOB)) FROM t3.  
3010: 20 20 7d 0a 20 20 7d 20 7b 74 65 78 74 20 33 20    }.  } {text 3 
3020: 27 61 62 63 27 20 31 30 20 58 27 36 31 36 32 36  'abc' 10 X'61626
3030: 33 30 30 37 38 37 39 37 41 30 30 37 30 37 31 27  30078797A007071'
3040: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e 64  }.  do_test bind
3050: 2d 31 32 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -12.2 {.    sqli
3060: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3070: 69 6f 6e 20 24 44 42 0a 20 20 20 20 65 78 65 63  ion $DB.    exec
3080: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
3090: 43 54 20 71 75 6f 74 65 28 63 61 73 74 28 78 5f  CT quote(cast(x_
30a0: 63 6f 61 6c 65 73 63 65 28 78 29 20 41 53 20 62  coalesce(x) AS b
30b0: 6c 6f 62 29 29 20 46 52 4f 4d 20 74 33 0a 20 20  lob)) FROM t3.  
30c0: 20 20 7d 0a 20 20 7d 20 7b 58 27 36 31 36 32 36    }.  } {X'61626
30d0: 33 30 30 37 38 37 39 37 41 30 30 37 30 37 31 27  30078797A007071'
30e0: 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20  }.}..# Test the 
30f0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 73 71 6c  operation of sql
3100: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
3110: 6e 67 73 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69  ngs.#.do_test bi
3120: 6e 64 2d 31 33 2e 31 20 7b 0a 20 20 73 65 74 20  nd-13.1 {.  set 
3130: 56 4d 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  VM [sqlite3_prep
3140: 61 72 65 20 24 44 42 20 7b 53 45 4c 45 43 54 20  are $DB {SELECT 
3150: 3f 2c 3f 2c 3f 7d 20 2d 31 20 54 41 49 4c 5d 0a  ?,?,?} -1 TAIL].
3160: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
3170: 56 4d 0a 20 20 6c 69 73 74 20 5b 73 71 6c 69 74  VM.  list [sqlit
3180: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24  e3_column_type $
3190: 56 4d 20 30 5d 20 5b 73 71 6c 69 74 65 33 5f 63  VM 0] [sqlite3_c
31a0: 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 56 4d 20 31  olumn_type $VM 1
31b0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] \.            
31c0: 20 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75     [sqlite3_colu
31d0: 6d 6e 5f 74 79 70 65 20 24 56 4d 20 32 5d 0a 7d  mn_type $VM 2].}
31e0: 20 7b 4e 55 4c 4c 20 4e 55 4c 4c 20 4e 55 4c 4c   {NULL NULL NULL
31f0: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  }.do_test bind-1
3200: 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.2 {.  sqlite3_
3210: 72 65 73 65 74 20 24 56 4d 0a 20 20 73 71 6c 69  reset $VM.  sqli
3220: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
3230: 20 31 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 62   1 1.  sqlite3_b
3240: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 32 20 32 0a  ind_int $VM 2 2.
3250: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
3260: 6e 74 20 24 56 4d 20 33 20 33 0a 20 20 73 71 6c  nt $VM 3 3.  sql
3270: 69 74 65 33 5f 73 74 65 70 20 24 56 4d 0a 20 20  ite3_step $VM.  
3280: 6c 69 73 74 20 5b 73 71 6c 69 74 65 33 5f 63 6f  list [sqlite3_co
3290: 6c 75 6d 6e 5f 74 79 70 65 20 24 56 4d 20 30 5d  lumn_type $VM 0]
32a0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
32b0: 5f 74 79 70 65 20 24 56 4d 20 31 5d 20 5c 0a 20  _type $VM 1] \. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
32d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
32e0: 70 65 20 24 56 4d 20 32 5d 0a 7d 20 7b 49 4e 54  pe $VM 2].} {INT
32f0: 45 47 45 52 20 49 4e 54 45 47 45 52 20 49 4e 54  EGER INTEGER INT
3300: 45 47 45 52 7d 0a 64 6f 5f 74 65 73 74 20 62 69  EGER}.do_test bi
3310: 6e 64 2d 31 33 2e 33 20 7b 0a 20 20 73 71 6c 69  nd-13.3 {.  sqli
3320: 74 65 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20  te3_reset $VM.  
3330: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 56 4d  sqlite3_step $VM
3340: 0a 20 20 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  .  list [sqlite3
3350: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 56 4d  _column_type $VM
3360: 20 30 5d 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   0] [sqlite3_col
3370: 75 6d 6e 5f 74 79 70 65 20 24 56 4d 20 31 5d 20  umn_type $VM 1] 
3380: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
3390: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
33a0: 5f 74 79 70 65 20 24 56 4d 20 32 5d 0a 7d 20 7b  _type $VM 2].} {
33b0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
33c0: 49 4e 54 45 47 45 52 7d 0a 64 6f 5f 74 65 73 74  INTEGER}.do_test
33d0: 20 62 69 6e 64 2d 31 33 2e 34 20 7b 0a 20 20 73   bind-13.4 {.  s
33e0: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56 4d  qlite3_reset $VM
33f0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  .  sqlite3_clear
3400: 5f 62 69 6e 64 69 6e 67 73 20 24 56 4d 0a 20 20  _bindings $VM.  
3410: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 56 4d  sqlite3_step $VM
3420: 0a 20 20 6c 69 73 74 20 5b 73 71 6c 69 74 65 33  .  list [sqlite3
3430: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 24 56 4d  _column_type $VM
3440: 20 30 5d 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c   0] [sqlite3_col
3450: 75 6d 6e 5f 74 79 70 65 20 24 56 4d 20 31 5d 20  umn_type $VM 1] 
3460: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
3470: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
3480: 5f 74 79 70 65 20 24 56 4d 20 32 5d 0a 7d 20 7b  _type $VM 2].} {
3490: 4e 55 4c 4c 20 4e 55 4c 4c 20 4e 55 4c 4c 7d 0a  NULL NULL NULL}.
34a0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
34b0: 20 24 56 4d 0a 0a 66 69 6e 69 73 68 5f 74 65 73   $VM..finish_tes
34c0: 74 0a                                            t.