/ Hex Artifact Content
Login

Artifact 578c6526f9e7298a8993815336d676a12684b0cd:


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 32 36 20 32 30 30 35 2f 30 31 2f  ,v 1.26 2005/01/
0200: 31 32 20 30 30 3a 30 38 3a 32 35 20 64 72 68 20  12 00:08:25 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 64 62   bind-1.1 {.  db
03f0: 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 44 42 20   close.  set DB 
0400: 5b 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  [sqlite3 db test
0410: 2e 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 7b 78 7b 79 7d 7a 7d 29 7d  ::two,${x{y}z})}
0b30: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 31  \.            -1
0b40: 20 54 58 5d 0a 20 20 20 20 73 65 74 20 54 58 0a   TX].    set TX.
0b50: 20 20 7d 20 7b 7d 0a 20 20 73 65 74 20 76 31 20    } {}.  set v1 
0b60: 7b 24 6f 6e 65 7d 0a 20 20 73 65 74 20 76 32 20  {$one}.  set v2 
0b70: 7b 24 3a 3a 74 77 6f 7d 0a 20 20 73 65 74 20 76  {$::two}.  set v
0b80: 33 20 7b 24 7b 78 7b 79 7d 7a 7d 7d 0a 7d 0a 69  3 {${x{y}z}}.}.i
0b90: 66 63 61 70 61 62 6c 65 20 7b 21 74 63 6c 76 61  fcapable {!tclva
0ba0: 72 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62  r} {.  do_test b
0bb0: 69 6e 64 2d 32 2e 31 20 7b 0a 20 20 20 20 65 78  ind-2.1 {.    ex
0bc0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45  ecsql {.      DE
0bd0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
0be0: 20 20 7d 0a 20 20 20 20 73 65 74 20 56 4d 20 5b    }.    set VM [
0bf0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
0c00: 24 44 42 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  $DB {INSERT INTO
0c10: 20 74 31 20 56 41 4c 55 45 53 28 3a 6f 6e 65 2c   t1 VALUES(:one,
0c20: 3a 74 77 6f 2c 3a 5f 29 7d 20 2d 31 20 54 58 5d  :two,:_)} -1 TX]
0c30: 0a 20 20 20 20 73 65 74 20 54 58 0a 20 20 7d 20  .    set TX.  } 
0c40: 7b 7d 0a 20 20 73 65 74 20 76 31 20 7b 3a 6f 6e  {}.  set v1 {:on
0c50: 65 7d 0a 20 20 73 65 74 20 76 32 20 7b 3a 74 77  e}.  set v2 {:tw
0c60: 6f 7d 0a 20 20 73 65 74 20 76 33 20 7b 3a 5f 7d  o}.  set v3 {:_}
0c70: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  .}..do_test bind
0c80: 2d 32 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -2.1.1 {.  sqlit
0c90: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
0ca0: 72 5f 63 6f 75 6e 74 20 24 56 4d 0a 7d 20 33 0a  r_count $VM.} 3.
0cb0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31  do_test bind-2.1
0cc0: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .2 {.  sqlite3_b
0cd0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
0ce0: 6d 65 20 24 56 4d 20 31 0a 7d 20 24 76 31 0a 64  me $VM 1.} $v1.d
0cf0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e  o_test bind-2.1.
0d00: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  3 {.  sqlite3_bi
0d10: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
0d20: 65 20 24 56 4d 20 32 0a 7d 20 24 76 32 0a 64 6f  e $VM 2.} $v2.do
0d30: 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 34  _test bind-2.1.4
0d40: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
0d50: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
0d60: 20 24 56 4d 20 33 0a 7d 20 24 76 33 0a 64 6f 5f   $VM 3.} $v3.do_
0d70: 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 35 20  test bind-2.1.5 
0d80: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0d90: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
0da0: 20 24 56 4d 20 24 76 31 0a 7d 20 31 0a 64 6f 5f   $VM $v1.} 1.do_
0db0: 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 36 20  test bind-2.1.6 
0dc0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0dd0: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
0de0: 20 24 56 4d 20 24 76 32 0a 7d 20 32 0a 64 6f 5f   $VM $v2.} 2.do_
0df0: 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 37 20  test bind-2.1.7 
0e00: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0e10: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
0e20: 20 24 56 4d 20 24 76 33 0a 7d 20 33 0a 64 6f 5f   $VM $v3.} 3.do_
0e30: 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 38 20  test bind-2.1.8 
0e40: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
0e50: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
0e60: 20 24 56 4d 20 7b 3a 68 69 7d 0a 7d 20 30 0a 0a   $VM {:hi}.} 0..
0e70: 23 20 33 32 20 62 69 74 20 49 6e 74 65 67 65 72  # 32 bit Integer
0e80: 73 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32  s.do_test bind-2
0e90: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .2 {.  sqlite3_b
0ea0: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 31 20 31 32  ind_int $VM 1 12
0eb0: 33 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  3.  sqlite3_bind
0ec0: 5f 69 6e 74 20 24 56 4d 20 32 20 34 35 36 0a 20  _int $VM 2 456. 
0ed0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
0ee0: 74 20 24 56 4d 20 33 20 37 38 39 0a 20 20 73 71  t $VM 3 789.  sq
0ef0: 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20  lite_step $VM N 
0f00: 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a  VALUES COLNAMES.
0f10: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
0f20: 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  $VM.  execsql {S
0f30: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
0f40: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 31 32 33  ROM t1}.} {1 123
0f50: 20 34 35 36 20 37 38 39 7d 0a 64 6f 5f 74 65 73   456 789}.do_tes
0f60: 74 20 62 69 6e 64 2d 32 2e 33 20 7b 0a 20 20 73  t bind-2.3 {.  s
0f70: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20  qlite3_bind_int 
0f80: 24 56 4d 20 32 20 2d 32 30 30 30 30 30 30 30 30  $VM 2 -200000000
0f90: 30 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  0.  sqlite3_bind
0fa0: 5f 69 6e 74 20 24 56 4d 20 33 20 32 30 30 30 30  _int $VM 3 20000
0fb0: 30 30 30 30 30 0a 20 20 73 71 6c 69 74 65 5f 73  00000.  sqlite_s
0fc0: 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53  tep $VM N VALUES
0fd0: 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69   COLNAMES.  sqli
0fe0: 74 65 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20  te3_reset $VM.  
0ff0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1000: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
1010: 7d 0a 7d 20 7b 31 20 31 32 33 20 34 35 36 20 37  }.} {1 123 456 7
1020: 38 39 20 32 20 31 32 33 20 2d 32 30 30 30 30 30  89 2 123 -200000
1030: 30 30 30 30 20 32 30 30 30 30 30 30 30 30 30 7d  0000 2000000000}
1040: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e  .do_test bind-2.
1050: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
1060: 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c  ELECT typeof(a),
1070: 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65   typeof(b), type
1080: 6f 66 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a 7d  of(c) FROM t1}.}
1090: 20 7b 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65   {integer intege
10a0: 72 20 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65  r integer intege
10b0: 72 20 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65  r integer intege
10c0: 72 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  r}.do_test bind-
10d0: 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.5 {.  execsql 
10e0: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
10f0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  M t1;.  }.} {}..
1100: 23 20 36 34 20 62 69 74 20 49 6e 74 65 67 65 72  # 64 bit Integer
1110: 73 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 33  s.do_test bind-3
1120: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .1 {.  sqlite3_b
1130: 69 6e 64 5f 69 6e 74 36 34 20 24 56 4d 20 31 20  ind_int64 $VM 1 
1140: 33 32 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  32.  sqlite3_bin
1150: 64 5f 69 6e 74 36 34 20 24 56 4d 20 32 20 2d 32  d_int64 $VM 2 -2
1160: 30 30 30 30 30 30 30 30 30 30 30 30 0a 20 20 73  000000000000.  s
1170: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
1180: 34 20 24 56 4d 20 33 20 32 30 30 30 30 30 30 30  4 $VM 3 20000000
1190: 30 30 30 30 30 0a 20 20 73 71 6c 69 74 65 5f 73  00000.  sqlite_s
11a0: 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53  tep $VM N VALUES
11b0: 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69   COLNAMES.  sqli
11c0: 74 65 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20  te3_reset $VM.  
11d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
11e0: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
11f0: 7d 0a 7d 20 7b 31 20 33 32 20 2d 32 30 30 30 30  }.} {1 32 -20000
1200: 30 30 30 30 30 30 30 30 20 32 30 30 30 30 30 30  00000000 2000000
1210: 30 30 30 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20  000000}.do_test 
1220: 62 69 6e 64 2d 33 2e 32 20 7b 0a 20 20 65 78 65  bind-3.2 {.  exe
1230: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70  csql {SELECT typ
1240: 65 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28 62  eof(a), typeof(b
1250: 29 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52 4f  ), typeof(c) FRO
1260: 4d 20 74 31 7d 0a 7d 20 7b 69 6e 74 65 67 65 72  M t1}.} {integer
1270: 20 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72   integer integer
1280: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 33  }.do_test bind-3
1290: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
12a0: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
12b0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23   t1;.  }.} {}..#
12c0: 20 44 6f 75 62 6c 65 73 0a 64 6f 5f 74 65 73 74   Doubles.do_test
12d0: 20 62 69 6e 64 2d 34 2e 31 20 7b 0a 20 20 73 71   bind-4.1 {.  sq
12e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
12f0: 65 20 24 56 4d 20 31 20 31 32 33 34 2e 31 32 33  e $VM 1 1234.123
1300: 34 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  4.  sqlite3_bind
1310: 5f 64 6f 75 62 6c 65 20 24 56 4d 20 32 20 30 2e  _double $VM 2 0.
1320: 30 30 30 30 31 0a 20 20 73 71 6c 69 74 65 33 5f  00001.  sqlite3_
1330: 62 69 6e 64 5f 64 6f 75 62 6c 65 20 24 56 4d 20  bind_double $VM 
1340: 33 20 31 32 33 34 35 36 37 38 39 0a 20 20 73 71  3 123456789.  sq
1350: 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20  lite_step $VM N 
1360: 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a  VALUES COLNAMES.
1370: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20    sqlite3_reset 
1380: 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  $VM.  execsql {S
1390: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
13a0: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 31 32 33  ROM t1}.} {1 123
13b0: 34 2e 31 32 33 34 20 31 65 2d 30 35 20 31 32 33  4.1234 1e-05 123
13c0: 34 35 36 37 38 39 2e 30 7d 0a 64 6f 5f 74 65 73  456789.0}.do_tes
13d0: 74 20 62 69 6e 64 2d 34 2e 32 20 7b 0a 20 20 65  t bind-4.2 {.  e
13e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
13f0: 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f 66  ypeof(a), typeof
1400: 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20 46  (b), typeof(c) F
1410: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 72 65 61 6c 20  ROM t1}.} {real 
1420: 72 65 61 6c 20 72 65 61 6c 7d 0a 64 6f 5f 74 65  real real}.do_te
1430: 73 74 20 62 69 6e 64 2d 34 2e 33 20 7b 0a 20 20  st bind-4.3 {.  
1440: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
1450: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
1460: 7d 0a 7d 20 7b 7d 0a 0a 23 20 4e 55 4c 4c 0a 64  }.} {}..# NULL.d
1470: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 35 2e 31 20  o_test bind-5.1 
1480: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
1490: 5f 6e 75 6c 6c 20 24 56 4d 20 31 0a 20 20 73 71  _null $VM 1.  sq
14a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20  lite3_bind_null 
14b0: 24 56 4d 20 32 0a 20 20 73 71 6c 69 74 65 33 5f  $VM 2.  sqlite3_
14c0: 62 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 33 20  bind_null $VM 3 
14d0: 0a 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24  .  sqlite_step $
14e0: 56 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e  VM N VALUES COLN
14f0: 41 4d 45 53 0a 20 20 73 71 6c 69 74 65 33 5f 72  AMES.  sqlite3_r
1500: 65 73 65 74 20 24 56 4d 0a 20 20 65 78 65 63 73  eset $VM.  execs
1510: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
1520: 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  , * FROM t1}.} {
1530: 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  1 {} {} {}}.do_t
1540: 65 73 74 20 62 69 6e 64 2d 35 2e 32 20 7b 0a 20  est bind-5.2 {. 
1550: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1560: 20 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65   typeof(a), type
1570: 6f 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29  of(b), typeof(c)
1580: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 6e 75 6c   FROM t1}.} {nul
1590: 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 0a 64 6f 5f  l null null}.do_
15a0: 74 65 73 74 20 62 69 6e 64 2d 35 2e 33 20 7b 0a  test bind-5.3 {.
15b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
15c0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a  DELETE FROM t1;.
15d0: 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 55 54 46 2d    }.} {}..# UTF-
15e0: 38 20 74 65 78 74 0a 64 6f 5f 74 65 73 74 20 62  8 text.do_test b
15f0: 69 6e 64 2d 36 2e 31 20 7b 0a 20 20 73 71 6c 69  ind-6.1 {.  sqli
1600: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56  te3_bind_text $V
1610: 4d 20 31 20 68 65 6c 6c 6f 74 68 65 72 65 20 35  M 1 hellothere 5
1620: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
1630: 74 65 78 74 20 24 56 4d 20 32 20 22 2e 2e 22 20  text $VM 2 ".." 
1640: 31 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  1.  sqlite3_bind
1650: 5f 74 65 78 74 20 24 56 4d 20 33 20 77 6f 72 6c  _text $VM 3 worl
1660: 64 20 2d 31 0a 20 20 73 71 6c 69 74 65 5f 73 74  d -1.  sqlite_st
1670: 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20  ep $VM N VALUES 
1680: 43 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74  COLNAMES.  sqlit
1690: 65 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65  e3_reset $VM.  e
16a0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
16b0: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d  owid, * FROM t1}
16c0: 0a 7d 20 7b 31 20 68 65 6c 6c 6f 20 2e 20 77 6f  .} {1 hello . wo
16d0: 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  rld}.do_test bin
16e0: 64 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  d-6.2 {.  execsq
16f0: 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66  l {SELECT typeof
1700: 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20  (a), typeof(b), 
1710: 74 79 70 65 6f 66 28 63 29 20 46 52 4f 4d 20 74  typeof(c) FROM t
1720: 31 7d 0a 7d 20 7b 74 65 78 74 20 74 65 78 74 20  1}.} {text text 
1730: 74 65 78 74 7d 0a 64 6f 5f 74 65 73 74 20 62 69  text}.do_test bi
1740: 6e 64 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73  nd-6.3 {.  execs
1750: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
1760: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
1770: 7d 0a 0a 23 20 55 54 46 2d 31 36 20 74 65 78 74  }..# UTF-16 text
1780: 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31  .ifcapable {utf1
1790: 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62  6} {.  do_test b
17a0: 69 6e 64 2d 37 2e 31 20 7b 0a 20 20 20 20 73 71  ind-7.1 {.    sq
17b0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
17c0: 36 20 24 56 4d 20 31 20 5b 65 6e 63 6f 64 69 6e  6 $VM 1 [encodin
17d0: 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63  g convertto unic
17e0: 6f 64 65 20 68 65 6c 6c 6f 74 68 65 72 65 5d 20  ode hellothere] 
17f0: 31 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  10.    sqlite3_b
1800: 69 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 32  ind_text16 $VM 2
1810: 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65   [encoding conve
1820: 72 74 74 6f 20 75 6e 69 63 6f 64 65 20 22 22 5d  rtto unicode ""]
1830: 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   0.    sqlite3_b
1840: 69 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 33  ind_text16 $VM 3
1850: 20 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65   [encoding conve
1860: 72 74 74 6f 20 75 6e 69 63 6f 64 65 20 77 6f 72  rtto unicode wor
1870: 6c 64 5d 20 31 30 0a 20 20 20 20 73 71 6c 69 74  ld] 10.    sqlit
1880: 65 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41 4c  e_step $VM N VAL
1890: 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 20  UES COLNAMES.   
18a0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
18b0: 56 4d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  VM.    execsql {
18c0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
18d0: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 20  FROM t1}.  } {1 
18e0: 68 65 6c 6c 6f 20 7b 7d 20 77 6f 72 6c 64 7d 0a  hello {} world}.
18f0: 20 20 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 37    do_test bind-7
1900: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
1910: 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28   {SELECT typeof(
1920: 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74  a), typeof(b), t
1930: 79 70 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31  ypeof(c) FROM t1
1940: 7d 0a 20 20 7d 20 7b 74 65 78 74 20 74 65 78 74  }.  } {text text
1950: 20 74 65 78 74 7d 0a 7d 0a 64 6f 5f 74 65 73 74   text}.}.do_test
1960: 20 62 69 6e 64 2d 37 2e 33 20 7b 0a 20 20 65 78   bind-7.3 {.  ex
1970: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45  ecsql {.    DELE
1980: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a  TE FROM t1;.  }.
1990: 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74 68 61  } {}..# Test tha
19a0: 74 20 74 68 65 20 27 6f 75 74 20 6f 66 20 72 61  t the 'out of ra
19b0: 6e 67 65 27 20 65 72 72 6f 72 20 77 6f 72 6b 73  nge' error works
19c0: 2e 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38  ..do_test bind-8
19d0: 2e 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73  .1 {.  catch { s
19e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
19f0: 20 24 56 4d 20 30 20 7d 0a 7d 20 7b 31 7d 0a 64   $VM 0 }.} {1}.d
1a00: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 32 20  o_test bind-8.2 
1a10: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  {.  sqlite3_errm
1a20: 73 67 20 24 44 42 0a 7d 20 7b 62 69 6e 64 20 6f  sg $DB.} {bind o
1a30: 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f  r column index o
1a40: 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a 69 66 63  ut of range}.ifc
1a50: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
1a60: 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  .  do_test bind-
1a70: 38 2e 33 20 7b 0a 20 20 20 20 65 6e 63 6f 64 69  8.3 {.    encodi
1a80: 6e 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75  ng convertfrom u
1a90: 6e 69 63 6f 64 65 20 5b 73 71 6c 69 74 65 33 5f  nicode [sqlite3_
1aa0: 65 72 72 6d 73 67 31 36 20 24 44 42 5d 0a 20 20  errmsg16 $DB].  
1ab0: 7d 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d  } {bind or colum
1ac0: 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72  n index out of r
1ad0: 61 6e 67 65 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  ange}.}.do_test 
1ae0: 62 69 6e 64 2d 38 2e 34 20 7b 0a 20 20 73 71 6c  bind-8.4 {.  sql
1af0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24  ite3_bind_null $
1b00: 56 4d 20 31 20 0a 20 20 73 71 6c 69 74 65 33 5f  VM 1 .  sqlite3_
1b10: 65 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f  errmsg $DB.} {no
1b20: 74 20 61 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74  t an error}.do_t
1b30: 65 73 74 20 62 69 6e 64 2d 38 2e 35 20 7b 0a 20  est bind-8.5 {. 
1b40: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
1b50: 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 34  _bind_null $VM 4
1b60: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
1b70: 20 62 69 6e 64 2d 38 2e 36 20 7b 0a 20 20 73 71   bind-8.6 {.  sq
1b80: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42  lite3_errmsg $DB
1b90: 0a 7d 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75  .} {bind or colu
1ba0: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
1bb0: 72 61 6e 67 65 7d 0a 69 66 63 61 70 61 62 6c 65  range}.ifcapable
1bc0: 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f   {utf16} {.  do_
1bd0: 74 65 73 74 20 62 69 6e 64 2d 38 2e 37 20 7b 0a  test bind-8.7 {.
1be0: 20 20 20 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e      encoding con
1bf0: 76 65 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65  vertfrom unicode
1c00: 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   [sqlite3_errmsg
1c10: 31 36 20 24 44 42 5d 0a 20 20 7d 20 7b 62 69 6e  16 $DB].  } {bin
1c20: 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  d or column inde
1c30: 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a  x out of range}.
1c40: 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  }..do_test bind-
1c50: 38 2e 38 20 7b 0a 20 20 63 61 74 63 68 20 7b 20  8.8 {.  catch { 
1c60: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
1c70: 62 20 24 56 4d 20 30 20 22 61 62 63 22 20 33 20  b $VM 0 "abc" 3 
1c80: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
1c90: 62 69 6e 64 2d 38 2e 39 20 7b 0a 20 20 63 61 74  bind-8.9 {.  cat
1ca0: 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e  ch { sqlite3_bin
1cb0: 64 5f 62 6c 6f 62 20 24 56 4d 20 34 20 22 61 62  d_blob $VM 4 "ab
1cc0: 63 22 20 33 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  c" 3 }.} {1}.do_
1cd0: 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 30 20 7b  test bind-8.10 {
1ce0: 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74  .  catch { sqlit
1cf0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56 4d  e3_bind_text $VM
1d00: 20 30 20 22 61 62 63 22 20 33 20 7d 0a 7d 20 7b   0 "abc" 3 }.} {
1d10: 31 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  1}.ifcapable {ut
1d20: 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  f16} {.  do_test
1d30: 20 62 69 6e 64 2d 38 2e 31 31 20 7b 0a 20 20 20   bind-8.11 {.   
1d40: 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33   catch { sqlite3
1d50: 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 24 56 4d  _bind_text16 $VM
1d60: 20 34 20 22 61 62 63 22 20 32 20 7d 0a 20 20 7d   4 "abc" 2 }.  }
1d70: 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62   {1}.}.do_test b
1d80: 69 6e 64 2d 38 2e 31 32 20 7b 0a 20 20 63 61 74  ind-8.12 {.  cat
1d90: 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e  ch { sqlite3_bin
1da0: 64 5f 69 6e 74 20 24 56 4d 20 30 20 35 20 7d 0a  d_int $VM 0 5 }.
1db0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69  } {1}.do_test bi
1dc0: 6e 64 2d 38 2e 31 33 20 7b 0a 20 20 63 61 74 63  nd-8.13 {.  catc
1dd0: 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  h { sqlite3_bind
1de0: 5f 69 6e 74 20 24 56 4d 20 34 20 35 20 7d 0a 7d  _int $VM 4 5 }.}
1df0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e   {1}.do_test bin
1e00: 64 2d 38 2e 31 34 20 7b 0a 20 20 63 61 74 63 68  d-8.14 {.  catch
1e10: 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   { sqlite3_bind_
1e20: 64 6f 75 62 6c 65 20 24 56 4d 20 30 20 35 2e 30  double $VM 0 5.0
1e30: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
1e40: 20 62 69 6e 64 2d 38 2e 31 35 20 7b 0a 20 20 63   bind-8.15 {.  c
1e50: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62  atch { sqlite3_b
1e60: 69 6e 64 5f 64 6f 75 62 6c 65 20 24 56 4d 20 34  ind_double $VM 4
1e70: 20 36 2e 30 20 7d 0a 7d 20 7b 31 7d 0a 0a 64 6f   6.0 }.} {1}..do
1e80: 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 39 39 20  _test bind-8.99 
1e90: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
1ea0: 6c 69 7a 65 20 24 56 4d 0a 7d 20 53 51 4c 49 54  lize $VM.} SQLIT
1eb0: 45 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 62 69  E_OK..do_test bi
1ec0: 6e 64 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  nd-9.1 {.  execs
1ed0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1ee0: 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 2c 64  TABLE t2(a,b,c,d
1ef0: 2c 65 2c 66 29 3b 0a 20 20 7d 0a 20 20 73 65 74  ,e,f);.  }.  set
1f00: 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20   rc [catch {.   
1f10: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1f20: 20 24 44 42 20 7b 0a 20 20 20 20 20 20 49 4e 53   $DB {.      INS
1f30: 45 52 54 20 49 4e 54 4f 20 74 32 28 61 29 20 56  ERT INTO t2(a) V
1f40: 41 4c 55 45 53 28 3f 30 29 0a 20 20 20 20 7d 20  ALUES(?0).    } 
1f50: 2d 31 20 54 41 49 4c 0a 20 20 7d 20 6d 73 67 5d  -1 TAIL.  } msg]
1f60: 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d  .  lappend rc $m
1f70: 73 67 0a 7d 20 7b 31 20 7b 28 31 29 20 76 61 72  sg.} {1 {(1) var
1f80: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 6d 75 73  iable number mus
1f90: 74 20 62 65 20 62 65 74 77 65 65 6e 20 3f 31 20  t be between ?1 
1fa0: 61 6e 64 20 3f 39 39 39 7d 7d 0a 64 6f 5f 74 65  and ?999}}.do_te
1fb0: 73 74 20 62 69 6e 64 2d 39 2e 32 20 7b 0a 20 20  st bind-9.2 {.  
1fc0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
1fd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70      sqlite3_prep
1fe0: 61 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20  are $DB {.      
1ff0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61  INSERT INTO t2(a
2000: 29 20 56 41 4c 55 45 53 28 3f 31 30 30 30 29 0a  ) VALUES(?1000).
2010: 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20      } -1 TAIL.  
2020: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
2030: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 28   rc $msg.} {1 {(
2040: 31 29 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  1) variable numb
2050: 65 72 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  er must be betwe
2060: 65 6e 20 3f 31 20 61 6e 64 20 3f 39 39 39 7d 7d  en ?1 and ?999}}
2070: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 39 2e  .do_test bind-9.
2080: 33 20 7b 0a 20 20 73 65 74 20 56 4d 20 5b 0a 20  3 {.  set VM [. 
2090: 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61     sqlite3_prepa
20a0: 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20 49  re $DB {.      I
20b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61 2c  NSERT INTO t2(a,
20c0: 62 29 20 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39  b) VALUES(?1,?99
20d0: 39 29 0a 20 20 20 20 7d 20 2d 31 20 54 41 49 4c  9).    } -1 TAIL
20e0: 0a 20 20 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62  .  ].  sqlite3_b
20f0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f  ind_parameter_co
2100: 75 6e 74 20 24 56 4d 0a 7d 20 7b 39 39 39 7d 0a  unt $VM.} {999}.
2110: 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 66  catch {sqlite3_f
2120: 69 6e 61 6c 69 7a 65 20 24 56 4d 7d 0a 64 6f 5f  inalize $VM}.do_
2130: 74 65 73 74 20 62 69 6e 64 2d 39 2e 34 20 7b 0a  test bind-9.4 {.
2140: 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20 20 73    set VM [.    s
2150: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
2160: 44 42 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52  DB {.      INSER
2170: 54 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 2c  T INTO t2(a,b,c,
2180: 64 29 20 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39  d) VALUES(?1,?99
2190: 39 2c 3f 2c 3f 29 0a 20 20 20 20 7d 20 2d 31 20  9,?,?).    } -1 
21a0: 54 41 49 4c 0a 20 20 5d 0a 20 20 73 71 6c 69 74  TAIL.  ].  sqlit
21b0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
21c0: 72 5f 63 6f 75 6e 74 20 24 56 4d 0a 7d 20 7b 31  r_count $VM.} {1
21d0: 30 30 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  001}.do_test bin
21e0: 64 2d 39 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65  d-9.5 {.  sqlite
21f0: 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d 20 31  3_bind_int $VM 1
2200: 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   1.  sqlite3_bin
2210: 64 5f 69 6e 74 20 24 56 4d 20 39 39 39 20 39 39  d_int $VM 999 99
2220: 39 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  9.  sqlite3_bind
2230: 5f 69 6e 74 20 24 56 4d 20 31 30 30 30 20 31 30  _int $VM 1000 10
2240: 30 30 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  00.  sqlite3_bin
2250: 64 5f 69 6e 74 20 24 56 4d 20 31 30 30 31 20 31  d_int $VM 1001 1
2260: 30 30 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  001.  sqlite3_st
2270: 65 70 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f  ep $VM.} SQLITE_
2280: 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 62 69 6e  DONE.do_test bin
2290: 64 2d 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  d-9.6 {.  sqlite
22a0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d  3_finalize $VM.}
22b0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74 65   SQLITE_OK.do_te
22c0: 73 74 20 62 69 6e 64 2d 39 2e 37 20 7b 0a 20 20  st bind-9.7 {.  
22d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
22e0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
22f0: 39 39 39 20 31 30 30 30 20 31 30 30 31 20 7b 7d  999 1000 1001 {}
2300: 20 7b 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20   {}}..ifcapable 
2310: 7b 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64 6f 5f  {tclvar} {.  do_
2320: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 20 7b  test bind-10.1 {
2330: 0a 20 20 20 20 63 61 74 63 68 20 7b 73 71 6c 69  .    catch {sqli
2340: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d  te3_finalize $VM
2350: 7d 0a 20 20 20 20 73 65 74 20 56 4d 20 5b 0a 20  }.    set VM [. 
2360: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65       sqlite3_pre
2370: 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20  pare $DB {.     
2380: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2390: 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 56  2(a,b,c,d,e,f) V
23a0: 41 4c 55 45 53 28 3a 61 62 63 2c 24 61 62 63 2c  ALUES(:abc,$abc,
23b0: 3a 61 62 63 2c 24 61 62 2c 24 61 62 63 2c 3a 61  :abc,$ab,$abc,:a
23c0: 62 63 29 0a 20 20 20 20 20 20 7d 20 2d 31 20 54  bc).      } -1 T
23d0: 41 49 4c 0a 20 20 20 20 5d 0a 20 20 20 20 73 71  AIL.    ].    sq
23e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
23f0: 65 74 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a 20  eter_count $VM. 
2400: 20 7d 20 33 0a 20 20 73 65 74 20 76 31 20 7b 24   } 3.  set v1 {$
2410: 61 62 63 7d 0a 20 20 73 65 74 20 76 32 20 7b 24  abc}.  set v2 {$
2420: 61 62 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20  ab}.}.ifcapable 
2430: 7b 21 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64 6f  {!tclvar} {.  do
2440: 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 20  _test bind-10.1 
2450: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 73 71 6c  {.    catch {sql
2460: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56  ite3_finalize $V
2470: 4d 7d 0a 20 20 20 20 73 65 74 20 56 4d 20 5b 0a  M}.    set VM [.
2480: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72        sqlite3_pr
2490: 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20 20  epare $DB {.    
24a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
24b0: 74 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20  t2(a,b,c,d,e,f) 
24c0: 56 41 4c 55 45 53 28 3a 61 62 63 2c 3a 78 79 7a  VALUES(:abc,:xyz
24d0: 2c 3a 61 62 63 2c 3a 78 79 2c 3a 78 79 7a 2c 3a  ,:abc,:xy,:xyz,:
24e0: 61 62 63 29 0a 20 20 20 20 20 20 7d 20 2d 31 20  abc).      } -1 
24f0: 54 41 49 4c 0a 20 20 20 20 5d 0a 20 20 20 20 73  TAIL.    ].    s
2500: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
2510: 6d 65 74 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a  meter_count $VM.
2520: 20 20 7d 20 33 0a 20 20 73 65 74 20 76 31 20 7b    } 3.  set v1 {
2530: 3a 78 79 7a 7d 0a 20 20 73 65 74 20 76 32 20 7b  :xyz}.  set v2 {
2540: 3a 78 79 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62  :xy}.}.do_test b
2550: 69 6e 64 2d 31 30 2e 32 20 7b 0a 20 20 73 71 6c  ind-10.2 {.  sql
2560: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2570: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3a 61  ter_index $VM :a
2580: 62 63 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 62  bc.} 1.do_test b
2590: 69 6e 64 2d 31 30 2e 33 20 7b 0a 20 20 73 71 6c  ind-10.3 {.  sql
25a0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
25b0: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 24 76  ter_index $VM $v
25c0: 31 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 62 69  1.} 2.do_test bi
25d0: 6e 64 2d 31 30 2e 34 20 7b 0a 20 20 73 71 6c 69  nd-10.4 {.  sqli
25e0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
25f0: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 24 76 32  er_index $VM $v2
2600: 0a 7d 20 33 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 3.do_test bin
2610: 64 2d 31 30 2e 35 20 7b 0a 20 20 73 71 6c 69 74  d-10.5 {.  sqlit
2620: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
2630: 72 5f 6e 61 6d 65 20 24 56 4d 20 31 0a 7d 20 3a  r_name $VM 1.} :
2640: 61 62 63 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  abc.do_test bind
2650: 2d 31 30 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -10.6 {.  sqlite
2660: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2670: 5f 6e 61 6d 65 20 24 56 4d 20 32 0a 7d 20 24 76  _name $VM 2.} $v
2680: 31 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  1.do_test bind-1
2690: 30 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.7 {.  sqlite3_
26a0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
26b0: 61 6d 65 20 24 56 4d 20 33 0a 7d 20 24 76 32 0a  ame $VM 3.} $v2.
26c0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e  do_test bind-10.
26d0: 37 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  7.1 {.  sqlite3_
26e0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
26f0: 61 6d 65 20 30 20 31 20 20 20 3b 23 20 49 67 6e  ame 0 1   ;# Ign
2700: 6f 72 65 20 69 66 20 56 4d 20 69 73 20 4e 55 4c  ore if VM is NUL
2710: 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62  L.} {}.do_test b
2720: 69 6e 64 2d 31 30 2e 37 2e 32 20 7b 0a 20 20 73  ind-10.7.2 {.  s
2730: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
2740: 6d 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 30  meter_name $VM 0
2750: 20 3b 23 20 49 67 6e 6f 72 65 20 69 66 20 69 6e   ;# Ignore if in
2760: 64 65 78 20 74 6f 6f 20 73 6d 61 6c 6c 0a 7d 20  dex too small.} 
2770: 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  {}.do_test bind-
2780: 31 30 2e 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74  10.7.3 {.  sqlit
2790: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
27a0: 72 5f 6e 61 6d 65 20 24 56 4d 20 34 20 3b 23 20  r_name $VM 4 ;# 
27b0: 49 67 6e 6f 72 65 20 69 66 20 69 6e 64 65 78 20  Ignore if index 
27c0: 69 73 20 74 6f 6f 20 62 69 67 0a 7d 20 7b 7d 0a  is too big.} {}.
27d0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e  do_test bind-10.
27e0: 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  8 {.  sqlite3_bi
27f0: 6e 64 5f 69 6e 74 20 24 56 4d 20 31 20 31 0a 20  nd_int $VM 1 1. 
2800: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
2810: 74 20 24 56 4d 20 32 20 32 0a 20 20 73 71 6c 69  t $VM 2 2.  sqli
2820: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
2830: 20 33 20 33 0a 20 20 73 71 6c 69 74 65 33 5f 73   3 3.  sqlite3_s
2840: 74 65 70 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45  tep $VM.} SQLITE
2850: 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 62 69  _DONE.do_test bi
2860: 6e 64 2d 31 30 2e 38 2e 31 20 7b 0a 20 20 23 20  nd-10.8.1 {.  # 
2870: 42 69 6e 64 69 6e 67 20 61 74 74 65 6d 70 74 73  Binding attempts
2880: 20 61 66 74 65 72 20 70 72 6f 67 72 61 6d 20 73   after program s
2890: 74 61 72 74 20 73 68 6f 75 6c 64 20 66 61 69 6c  tart should fail
28a0: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
28b0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   {.    sqlite3_b
28c0: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 31 20 31 0a  ind_int $VM 1 1.
28d0: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65    } msg].  lappe
28e0: 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20  nd rc $msg.} {1 
28f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {}}.do_test bind
2900: 2d 31 30 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65  -10.9 {.  sqlite
2910: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d  3_finalize $VM.}
2920: 20 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74 65   SQLITE_OK.do_te
2930: 73 74 20 62 69 6e 64 2d 31 30 2e 31 30 20 7b 0a  st bind-10.10 {.
2940: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2950: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
2960: 31 20 39 39 39 20 31 30 30 30 20 31 30 30 31 20  1 999 1000 1001 
2970: 7b 7d 20 7b 7d 20 31 20 32 20 31 20 33 20 32 20  {} {} 1 2 1 3 2 
2980: 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 39 31  1}..# Ticket #91
2990: 38 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  8.#.do_test bind
29a0: 2d 31 30 2e 31 31 20 7b 0a 20 20 63 61 74 63 68  -10.11 {.  catch
29b0: 20 7b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69   {sqlite3_finali
29c0: 7a 65 20 24 56 4d 7d 0a 20 20 73 65 74 20 56 4d  ze $VM}.  set VM
29d0: 20 5b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   [.    sqlite3_p
29e0: 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20  repare $DB {.   
29f0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2a00: 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 56  2(a,b,c,d,e,f) V
2a10: 41 4c 55 45 53 28 3a 61 62 63 2c 3f 2c 3f 34 2c  ALUES(:abc,?,?4,
2a20: 3a 70 71 72 2c 3a 61 62 63 2c 3f 34 29 0a 20 20  :pqr,:abc,?4).  
2a30: 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 5d 0a    } -1 TAIL.  ].
2a40: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
2a50: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 24  arameter_count $
2a60: 56 4d 0a 7d 20 35 0a 64 6f 5f 74 65 73 74 20 62  VM.} 5.do_test b
2a70: 69 6e 64 2d 31 30 2e 31 31 2e 31 20 7b 0a 20 20  ind-10.11.1 {.  
2a80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
2a90: 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 30 20 3a  ameter_index 0 :
2aa0: 78 79 7a 20 20 3b 23 20 69 67 6e 6f 72 65 20 4e  xyz  ;# ignore N
2ab0: 55 4c 4c 20 56 4d 20 61 72 67 75 6d 65 6e 74 73  ULL VM arguments
2ac0: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 0.do_test bin
2ad0: 64 2d 31 30 2e 31 32 20 7b 0a 20 20 73 71 6c 69  d-10.12 {.  sqli
2ae0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2af0: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3a 78 79  er_index $VM :xy
2b00: 7a 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69  z.} 0.do_test bi
2b10: 6e 64 2d 31 30 2e 31 33 20 7b 0a 20 20 73 71 6c  nd-10.13 {.  sql
2b20: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2b30: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 7b 7d  ter_index $VM {}
2b40: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 0.do_test bin
2b50: 64 2d 31 30 2e 31 34 20 7b 0a 20 20 73 71 6c 69  d-10.14 {.  sqli
2b60: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2b70: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3a 70 71  er_index $VM :pq
2b80: 72 0a 7d 20 35 0a 64 6f 5f 74 65 73 74 20 62 69  r.} 5.do_test bi
2b90: 6e 64 2d 31 30 2e 31 35 20 7b 0a 20 20 73 71 6c  nd-10.15 {.  sql
2ba0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2bb0: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3f 34  ter_index $VM ?4
2bc0: 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 4.do_test bin
2bd0: 64 2d 31 30 2e 31 36 20 7b 0a 20 20 73 71 6c 69  d-10.16 {.  sqli
2be0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2bf0: 65 72 5f 6e 61 6d 65 20 24 56 4d 20 31 0a 7d 20  er_name $VM 1.} 
2c00: 3a 61 62 63 0a 64 6f 5f 74 65 73 74 20 62 69 6e  :abc.do_test bin
2c10: 64 2d 31 30 2e 31 36 20 7b 0a 20 20 73 71 6c 69  d-10.16 {.  sqli
2c20: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2c30: 65 72 5f 6e 61 6d 65 20 24 56 4d 20 32 0a 7d 20  er_name $VM 2.} 
2c40: 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  {}.do_test bind-
2c50: 31 30 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65  10.16 {.  sqlite
2c60: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2c70: 5f 6e 61 6d 65 20 24 56 4d 20 33 0a 7d 20 7b 7d  _name $VM 3.} {}
2c80: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
2c90: 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .16 {.  sqlite3_
2ca0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
2cb0: 61 6d 65 20 24 56 4d 20 34 0a 7d 20 7b 3f 34 7d  ame $VM 4.} {?4}
2cc0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
2cd0: 2e 31 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .16 {.  sqlite3_
2ce0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
2cf0: 61 6d 65 20 24 56 4d 20 35 0a 7d 20 3a 70 71 72  ame $VM 5.} :pqr
2d00: 0a 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f  .catch {sqlite3_
2d10: 66 69 6e 61 6c 69 7a 65 20 24 56 4d 7d 0a 0a 23  finalize $VM}..#
2d20: 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 63 61   Make sure we ca
2d30: 74 63 68 20 61 6e 20 75 6e 74 65 72 6d 69 6e 61  tch an untermina
2d40: 74 65 64 20 22 28 22 20 69 6e 20 61 20 54 63 6c  ted "(" in a Tcl
2d50: 2d 73 74 79 6c 65 20 76 61 72 69 61 62 6c 65 20  -style variable 
2d60: 6e 61 6d 65 0a 23 0a 64 6f 5f 74 65 73 74 20 62  name.#.do_test b
2d70: 69 6e 64 2d 31 31 2e 31 20 7b 0a 20 20 63 61 74  ind-11.1 {.  cat
2d80: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
2d90: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
2da0: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 24 61  er WHERE name=$a
2db0: 62 63 28 31 32 33 20 61 6e 64 20 73 71 6c 20 4e  bc(123 and sql N
2dc0: 4f 54 20 4e 55 4c 4c 3b 7d 0a 7d 20 7b 31 20 7b  OT NULL;}.} {1 {
2dd0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b  unrecognized tok
2de0: 65 6e 3a 20 22 24 61 62 63 28 31 32 33 22 7d 7d  en: "$abc(123"}}
2df0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.