/ Hex Artifact Content
Login

Artifact bf1a99cb5471c8ec9958f7af0c8608d824535558:


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 31 20 32 30 30 35 2f 30 33 2f  ,v 1.31 2005/03/
0200: 32 30 20 32 33 3a 31 38 3a 35 38 20 64 72 68 20  20 23:18:58 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 73 65 74 20 78 20 5b 65 78 65  $VM.  set x [exe
1390: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
13a0: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 5d 0a  id, * FROM t1}].
13b0: 20 20 72 65 67 73 75 62 20 7b 31 65 2d 30 30 35    regsub {1e-005
13c0: 7d 20 24 78 20 7b 31 65 2d 30 35 7d 20 79 0a 20  } $x {1e-05} y. 
13d0: 20 73 65 74 20 79 0a 7d 20 7b 31 20 31 32 33 34   set y.} {1 1234
13e0: 2e 31 32 33 34 20 31 65 2d 30 35 20 31 32 33 34  .1234 1e-05 1234
13f0: 35 36 37 38 39 2e 30 7d 0a 64 6f 5f 74 65 73 74  56789.0}.do_test
1400: 20 62 69 6e 64 2d 34 2e 32 20 7b 0a 20 20 65 78   bind-4.2 {.  ex
1410: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79  ecsql {SELECT ty
1420: 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28  peof(a), typeof(
1430: 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52  b), typeof(c) FR
1440: 4f 4d 20 74 31 7d 0a 7d 20 7b 72 65 61 6c 20 72  OM t1}.} {real r
1450: 65 61 6c 20 72 65 61 6c 7d 0a 64 6f 5f 74 65 73  eal real}.do_tes
1460: 74 20 62 69 6e 64 2d 34 2e 33 20 7b 0a 20 20 65  t bind-4.3 {.  e
1470: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
1480: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  ETE FROM t1;.  }
1490: 0a 7d 20 7b 7d 0a 0a 23 20 4e 55 4c 4c 0a 64 6f  .} {}..# NULL.do
14a0: 5f 74 65 73 74 20 62 69 6e 64 2d 35 2e 31 20 7b  _test bind-5.1 {
14b0: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
14c0: 6e 75 6c 6c 20 24 56 4d 20 31 0a 20 20 73 71 6c  null $VM 1.  sql
14d0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24  ite3_bind_null $
14e0: 56 4d 20 32 0a 20 20 73 71 6c 69 74 65 33 5f 62  VM 2.  sqlite3_b
14f0: 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 33 20 0a  ind_null $VM 3 .
1500: 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56    sqlite_step $V
1510: 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41  M N VALUES COLNA
1520: 4d 45 53 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  MES.  sqlite3_re
1530: 73 65 74 20 24 56 4d 0a 20 20 65 78 65 63 73 71  set $VM.  execsq
1540: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
1550: 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31   * FROM t1}.} {1
1560: 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65   {} {} {}}.do_te
1570: 73 74 20 62 69 6e 64 2d 35 2e 32 20 7b 0a 20 20  st bind-5.2 {.  
1580: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1590: 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f  typeof(a), typeo
15a0: 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20  f(b), typeof(c) 
15b0: 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 6e 75 6c 6c  FROM t1}.} {null
15c0: 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 0a 64 6f 5f 74   null null}.do_t
15d0: 65 73 74 20 62 69 6e 64 2d 35 2e 33 20 7b 0a 20  est bind-5.3 {. 
15e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
15f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20  ELETE FROM t1;. 
1600: 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 55 54 46 2d 38   }.} {}..# UTF-8
1610: 20 74 65 78 74 0a 64 6f 5f 74 65 73 74 20 62 69   text.do_test bi
1620: 6e 64 2d 36 2e 31 20 7b 0a 20 20 73 71 6c 69 74  nd-6.1 {.  sqlit
1630: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56 4d  e3_bind_text $VM
1640: 20 31 20 68 65 6c 6c 6f 74 68 65 72 65 20 35 0a   1 hellothere 5.
1650: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
1660: 65 78 74 20 24 56 4d 20 32 20 22 2e 2e 22 20 31  ext $VM 2 ".." 1
1670: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
1680: 74 65 78 74 20 24 56 4d 20 33 20 77 6f 72 6c 64  text $VM 3 world
1690: 20 2d 31 0a 20 20 73 71 6c 69 74 65 5f 73 74 65   -1.  sqlite_ste
16a0: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
16b0: 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65  OLNAMES.  sqlite
16c0: 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78  3_reset $VM.  ex
16d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
16e0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
16f0: 7d 20 7b 31 20 68 65 6c 6c 6f 20 2e 20 77 6f 72  } {1 hello . wor
1700: 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  ld}.do_test bind
1710: 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.2 {.  execsql
1720: 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28   {SELECT typeof(
1730: 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74  a), typeof(b), t
1740: 79 70 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31  ypeof(c) FROM t1
1750: 7d 0a 7d 20 7b 74 65 78 74 20 74 65 78 74 20 74  }.} {text text t
1760: 65 78 74 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  ext}.do_test bin
1770: 64 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  d-6.3 {.  execsq
1780: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
1790: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  ROM t1;.  }.} {}
17a0: 0a 0a 23 20 55 54 46 2d 31 36 20 74 65 78 74 0a  ..# UTF-16 text.
17b0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
17c0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69  } {.  do_test bi
17d0: 6e 64 2d 37 2e 31 20 7b 0a 20 20 20 20 73 71 6c  nd-7.1 {.    sql
17e0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
17f0: 20 24 56 4d 20 31 20 5b 65 6e 63 6f 64 69 6e 67   $VM 1 [encoding
1800: 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69 63 6f   convertto unico
1810: 64 65 20 68 65 6c 6c 6f 74 68 65 72 65 5d 20 31  de hellothere] 1
1820: 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  0.    sqlite3_bi
1830: 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 32 20  nd_text16 $VM 2 
1840: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
1850: 74 74 6f 20 75 6e 69 63 6f 64 65 20 22 22 5d 20  tto unicode ""] 
1860: 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  0.    sqlite3_bi
1870: 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 33 20  nd_text16 $VM 3 
1880: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
1890: 74 74 6f 20 75 6e 69 63 6f 64 65 20 77 6f 72 6c  tto unicode worl
18a0: 64 5d 20 31 30 0a 20 20 20 20 73 71 6c 69 74 65  d] 10.    sqlite
18b0: 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55  _step $VM N VALU
18c0: 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 20 20  ES COLNAMES.    
18d0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56  sqlite3_reset $V
18e0: 4d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  M.    execsql {S
18f0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
1900: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 20 68  ROM t1}.  } {1 h
1910: 65 6c 6c 6f 20 7b 7d 20 77 6f 72 6c 64 7d 0a 20  ello {} world}. 
1920: 20 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 37 2e   do_test bind-7.
1930: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
1940: 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61  {SELECT typeof(a
1950: 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79  ), typeof(b), ty
1960: 70 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31 7d  peof(c) FROM t1}
1970: 0a 20 20 7d 20 7b 74 65 78 74 20 74 65 78 74 20  .  } {text text 
1980: 74 65 78 74 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  text}.}.do_test 
1990: 62 69 6e 64 2d 37 2e 33 20 7b 0a 20 20 65 78 65  bind-7.3 {.  exe
19a0: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
19b0: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  E FROM t1;.  }.}
19c0: 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74   {}..# Test that
19d0: 20 74 68 65 20 27 6f 75 74 20 6f 66 20 72 61 6e   the 'out of ran
19e0: 67 65 27 20 65 72 72 6f 72 20 77 6f 72 6b 73 2e  ge' error works.
19f0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e  .do_test bind-8.
1a00: 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71  1 {.  catch { sq
1a10: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20  lite3_bind_null 
1a20: 24 56 4d 20 30 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  $VM 0 }.} {1}.do
1a30: 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 32 20 7b  _test bind-8.2 {
1a40: 0a 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  .  sqlite3_errms
1a50: 67 20 24 44 42 0a 7d 20 7b 62 69 6e 64 20 6f 72  g $DB.} {bind or
1a60: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75   column index ou
1a70: 74 20 6f 66 20 72 61 6e 67 65 7d 0a 69 66 63 61  t of range}.ifca
1a80: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
1a90: 20 20 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38    do_test bind-8
1aa0: 2e 33 20 7b 0a 20 20 20 20 65 6e 63 6f 64 69 6e  .3 {.    encodin
1ab0: 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d 20 75 6e  g convertfrom un
1ac0: 69 63 6f 64 65 20 5b 73 71 6c 69 74 65 33 5f 65  icode [sqlite3_e
1ad0: 72 72 6d 73 67 31 36 20 24 44 42 5d 0a 20 20 7d  rrmsg16 $DB].  }
1ae0: 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e   {bind or column
1af0: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
1b00: 6e 67 65 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62  nge}.}.do_test b
1b10: 69 6e 64 2d 38 2e 34 20 7b 0a 20 20 73 71 6c 69  ind-8.4 {.  sqli
1b20: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56  te3_bind_null $V
1b30: 4d 20 31 20 0a 20 20 73 71 6c 69 74 65 33 5f 65  M 1 .  sqlite3_e
1b40: 72 72 6d 73 67 20 24 44 42 0a 7d 20 7b 6e 6f 74  rrmsg $DB.} {not
1b50: 20 61 6e 20 65 72 72 6f 72 7d 0a 64 6f 5f 74 65   an error}.do_te
1b60: 73 74 20 62 69 6e 64 2d 38 2e 35 20 7b 0a 20 20  st bind-8.5 {.  
1b70: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
1b80: 62 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 34 20  bind_null $VM 4 
1b90: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
1ba0: 62 69 6e 64 2d 38 2e 36 20 7b 0a 20 20 73 71 6c  bind-8.6 {.  sql
1bb0: 69 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a  ite3_errmsg $DB.
1bc0: 7d 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d  } {bind or colum
1bd0: 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72  n index out of r
1be0: 61 6e 67 65 7d 0a 69 66 63 61 70 61 62 6c 65 20  ange}.ifcapable 
1bf0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74  {utf16} {.  do_t
1c00: 65 73 74 20 62 69 6e 64 2d 38 2e 37 20 7b 0a 20  est bind-8.7 {. 
1c10: 20 20 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76     encoding conv
1c20: 65 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20  ertfrom unicode 
1c30: 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  [sqlite3_errmsg1
1c40: 36 20 24 44 42 5d 0a 20 20 7d 20 7b 62 69 6e 64  6 $DB].  } {bind
1c50: 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   or column index
1c60: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a 7d   out of range}.}
1c70: 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38  ..do_test bind-8
1c80: 2e 38 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73  .8 {.  catch { s
1c90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
1ca0: 20 24 56 4d 20 30 20 22 61 62 63 22 20 33 20 7d   $VM 0 "abc" 3 }
1cb0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {1}.do_test b
1cc0: 69 6e 64 2d 38 2e 39 20 7b 0a 20 20 63 61 74 63  ind-8.9 {.  catc
1cd0: 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  h { sqlite3_bind
1ce0: 5f 62 6c 6f 62 20 24 56 4d 20 34 20 22 61 62 63  _blob $VM 4 "abc
1cf0: 22 20 33 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  " 3 }.} {1}.do_t
1d00: 65 73 74 20 62 69 6e 64 2d 38 2e 31 30 20 7b 0a  est bind-8.10 {.
1d10: 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65    catch { sqlite
1d20: 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56 4d 20  3_bind_text $VM 
1d30: 30 20 22 61 62 63 22 20 33 20 7d 0a 7d 20 7b 31  0 "abc" 3 }.} {1
1d40: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66  }.ifcapable {utf
1d50: 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  16} {.  do_test 
1d60: 62 69 6e 64 2d 38 2e 31 31 20 7b 0a 20 20 20 20  bind-8.11 {.    
1d70: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
1d80: 62 69 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20  bind_text16 $VM 
1d90: 34 20 22 61 62 63 22 20 32 20 7d 0a 20 20 7d 20  4 "abc" 2 }.  } 
1da0: 7b 31 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 69  {1}.}.do_test bi
1db0: 6e 64 2d 38 2e 31 32 20 7b 0a 20 20 63 61 74 63  nd-8.12 {.  catc
1dc0: 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  h { sqlite3_bind
1dd0: 5f 69 6e 74 20 24 56 4d 20 30 20 35 20 7d 0a 7d  _int $VM 0 5 }.}
1de0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e   {1}.do_test bin
1df0: 64 2d 38 2e 31 33 20 7b 0a 20 20 63 61 74 63 68  d-8.13 {.  catch
1e00: 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   { sqlite3_bind_
1e10: 69 6e 74 20 24 56 4d 20 34 20 35 20 7d 0a 7d 20  int $VM 4 5 }.} 
1e20: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {1}.do_test bind
1e30: 2d 38 2e 31 34 20 7b 0a 20 20 63 61 74 63 68 20  -8.14 {.  catch 
1e40: 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  { sqlite3_bind_d
1e50: 6f 75 62 6c 65 20 24 56 4d 20 30 20 35 2e 30 20  ouble $VM 0 5.0 
1e60: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
1e70: 62 69 6e 64 2d 38 2e 31 35 20 7b 0a 20 20 63 61  bind-8.15 {.  ca
1e80: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62 69  tch { sqlite3_bi
1e90: 6e 64 5f 64 6f 75 62 6c 65 20 24 56 4d 20 34 20  nd_double $VM 4 
1ea0: 36 2e 30 20 7d 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f  6.0 }.} {1}..do_
1eb0: 74 65 73 74 20 62 69 6e 64 2d 38 2e 39 39 20 7b  test bind-8.99 {
1ec0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1ed0: 69 7a 65 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45  ize $VM.} SQLITE
1ee0: 5f 4f 4b 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e  _OK..do_test bin
1ef0: 64 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  d-9.1 {.  execsq
1f00: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1f10: 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 2c 64 2c  ABLE t2(a,b,c,d,
1f20: 65 2c 66 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20  e,f);.  }.  set 
1f30: 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20  rc [catch {.    
1f40: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
1f50: 24 44 42 20 7b 0a 20 20 20 20 20 20 49 4e 53 45  $DB {.      INSE
1f60: 52 54 20 49 4e 54 4f 20 74 32 28 61 29 20 56 41  RT INTO t2(a) VA
1f70: 4c 55 45 53 28 3f 30 29 0a 20 20 20 20 7d 20 2d  LUES(?0).    } -
1f80: 31 20 54 41 49 4c 0a 20 20 7d 20 6d 73 67 5d 0a  1 TAIL.  } msg].
1f90: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
1fa0: 67 0a 7d 20 7b 31 20 7b 28 31 29 20 76 61 72 69  g.} {1 {(1) vari
1fb0: 61 62 6c 65 20 6e 75 6d 62 65 72 20 6d 75 73 74  able number must
1fc0: 20 62 65 20 62 65 74 77 65 65 6e 20 3f 31 20 61   be between ?1 a
1fd0: 6e 64 20 3f 39 39 39 7d 7d 0a 64 6f 5f 74 65 73  nd ?999}}.do_tes
1fe0: 74 20 62 69 6e 64 2d 39 2e 32 20 7b 0a 20 20 73  t bind-9.2 {.  s
1ff0: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20  et rc [catch {. 
2000: 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61     sqlite3_prepa
2010: 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20 49  re $DB {.      I
2020: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61 29  NSERT INTO t2(a)
2030: 20 56 41 4c 55 45 53 28 3f 31 30 30 30 29 0a 20   VALUES(?1000). 
2040: 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 7d     } -1 TAIL.  }
2050: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
2060: 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 28 31  rc $msg.} {1 {(1
2070: 29 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  ) variable numbe
2080: 72 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65  r must be betwee
2090: 6e 20 3f 31 20 61 6e 64 20 3f 39 39 39 7d 7d 0a  n ?1 and ?999}}.
20a0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 39 2e 33  do_test bind-9.3
20b0: 20 7b 0a 20 20 73 65 74 20 56 4d 20 5b 0a 20 20   {.  set VM [.  
20c0: 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
20d0: 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20 49 4e  e $DB {.      IN
20e0: 53 45 52 54 20 49 4e 54 4f 20 74 32 28 61 2c 62  SERT INTO t2(a,b
20f0: 29 20 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39 39  ) VALUES(?1,?999
2100: 29 0a 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a  ).    } -1 TAIL.
2110: 20 20 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62 69    ].  sqlite3_bi
2120: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
2130: 6e 74 20 24 56 4d 0a 7d 20 7b 39 39 39 7d 0a 63  nt $VM.} {999}.c
2140: 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 66 69  atch {sqlite3_fi
2150: 6e 61 6c 69 7a 65 20 24 56 4d 7d 0a 64 6f 5f 74  nalize $VM}.do_t
2160: 65 73 74 20 62 69 6e 64 2d 39 2e 34 20 7b 0a 20  est bind-9.4 {. 
2170: 20 73 65 74 20 56 4d 20 5b 0a 20 20 20 20 73 71   set VM [.    sq
2180: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
2190: 42 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  B {.      INSERT
21a0: 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 2c 64   INTO t2(a,b,c,d
21b0: 29 20 56 41 4c 55 45 53 28 3f 31 2c 3f 39 39 39  ) VALUES(?1,?999
21c0: 2c 3f 2c 3f 29 0a 20 20 20 20 7d 20 2d 31 20 54  ,?,?).    } -1 T
21d0: 41 49 4c 0a 20 20 5d 0a 20 20 73 71 6c 69 74 65  AIL.  ].  sqlite
21e0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
21f0: 5f 63 6f 75 6e 74 20 24 56 4d 0a 7d 20 7b 31 30  _count $VM.} {10
2200: 30 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  01}.do_test bind
2210: 2d 39 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  -9.5 {.  sqlite3
2220: 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d 20 31 20  _bind_int $VM 1 
2230: 31 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  1.  sqlite3_bind
2240: 5f 69 6e 74 20 24 56 4d 20 39 39 39 20 39 39 39  _int $VM 999 999
2250: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2260: 69 6e 74 20 24 56 4d 20 31 30 30 30 20 31 30 30  int $VM 1000 100
2270: 30 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  0.  sqlite3_bind
2280: 5f 69 6e 74 20 24 56 4d 20 31 30 30 31 20 31 30  _int $VM 1001 10
2290: 30 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  01.  sqlite3_ste
22a0: 70 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 44  p $VM.} SQLITE_D
22b0: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  ONE.do_test bind
22c0: 2d 39 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  -9.6 {.  sqlite3
22d0: 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d 20  _finalize $VM.} 
22e0: 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74 65 73  SQLITE_OK.do_tes
22f0: 74 20 62 69 6e 64 2d 39 2e 37 20 7b 0a 20 20 65  t bind-9.7 {.  e
2300: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2310: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 39   FROM t2}.} {1 9
2320: 39 39 20 31 30 30 30 20 31 30 30 31 20 7b 7d 20  99 1000 1001 {} 
2330: 7b 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b  {}}..ifcapable {
2340: 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64 6f 5f 74  tclvar} {.  do_t
2350: 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 20 7b 0a  est bind-10.1 {.
2360: 20 20 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20      set VM [.   
2370: 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61     sqlite3_prepa
2380: 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20 20  re $DB {.       
2390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28   INSERT INTO t2(
23a0: 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 56 41 4c  a,b,c,d,e,f) VAL
23b0: 55 45 53 28 3a 61 62 63 2c 24 61 62 63 2c 3a 61  UES(:abc,$abc,:a
23c0: 62 63 2c 24 61 62 2c 24 61 62 63 2c 3a 61 62 63  bc,$ab,$abc,:abc
23d0: 29 0a 20 20 20 20 20 20 7d 20 2d 31 20 54 41 49  ).      } -1 TAI
23e0: 4c 0a 20 20 20 20 5d 0a 20 20 20 20 73 71 6c 69  L.    ].    sqli
23f0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2400: 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a 20 20 7d  er_count $VM.  }
2410: 20 33 0a 20 20 73 65 74 20 76 31 20 7b 24 61 62   3.  set v1 {$ab
2420: 63 7d 0a 20 20 73 65 74 20 76 32 20 7b 24 61 62  c}.  set v2 {$ab
2430: 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  }.}.ifcapable {!
2440: 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64 6f 5f 74  tclvar} {.  do_t
2450: 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 20 7b 0a  est bind-10.1 {.
2460: 20 20 20 20 73 65 74 20 56 4d 20 5b 0a 20 20 20      set VM [.   
2470: 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61     sqlite3_prepa
2480: 72 65 20 24 44 42 20 7b 0a 20 20 20 20 20 20 20  re $DB {.       
2490: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28   INSERT INTO t2(
24a0: 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 56 41 4c  a,b,c,d,e,f) VAL
24b0: 55 45 53 28 3a 61 62 63 2c 3a 78 79 7a 2c 3a 61  UES(:abc,:xyz,:a
24c0: 62 63 2c 3a 78 79 2c 3a 78 79 7a 2c 3a 61 62 63  bc,:xy,:xyz,:abc
24d0: 29 0a 20 20 20 20 20 20 7d 20 2d 31 20 54 41 49  ).      } -1 TAI
24e0: 4c 0a 20 20 20 20 5d 0a 20 20 20 20 73 71 6c 69  L.    ].    sqli
24f0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2500: 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a 20 20 7d  er_count $VM.  }
2510: 20 33 0a 20 20 73 65 74 20 76 31 20 7b 3a 78 79   3.  set v1 {:xy
2520: 7a 7d 0a 20 20 73 65 74 20 76 32 20 7b 3a 78 79  z}.  set v2 {:xy
2530: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  }.}.do_test bind
2540: 2d 31 30 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65  -10.2 {.  sqlite
2550: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
2560: 5f 69 6e 64 65 78 20 24 56 4d 20 3a 61 62 63 0a  _index $VM :abc.
2570: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  } 1.do_test bind
2580: 2d 31 30 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -10.3 {.  sqlite
2590: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
25a0: 5f 69 6e 64 65 78 20 24 56 4d 20 24 76 31 0a 7d  _index $VM $v1.}
25b0: 20 32 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d   2.do_test bind-
25c0: 31 30 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  10.4 {.  sqlite3
25d0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
25e0: 69 6e 64 65 78 20 24 56 4d 20 24 76 32 0a 7d 20  index $VM $v2.} 
25f0: 33 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  3.do_test bind-1
2600: 30 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  0.5 {.  sqlite3_
2610: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
2620: 61 6d 65 20 24 56 4d 20 31 0a 7d 20 3a 61 62 63  ame $VM 1.} :abc
2630: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
2640: 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .6 {.  sqlite3_b
2650: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
2660: 6d 65 20 24 56 4d 20 32 0a 7d 20 24 76 31 0a 64  me $VM 2.} $v1.d
2670: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 37  o_test bind-10.7
2680: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
2690: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
26a0: 20 24 56 4d 20 33 0a 7d 20 24 76 32 0a 64 6f 5f   $VM 3.} $v2.do_
26b0: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 37 2e 31  test bind-10.7.1
26c0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
26d0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
26e0: 20 30 20 31 20 20 20 3b 23 20 49 67 6e 6f 72 65   0 1   ;# Ignore
26f0: 20 69 66 20 56 4d 20 69 73 20 4e 55 4c 4c 0a 7d   if VM is NULL.}
2700: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64   {}.do_test bind
2710: 2d 31 30 2e 37 2e 32 20 7b 0a 20 20 73 71 6c 69  -10.7.2 {.  sqli
2720: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
2730: 65 72 5f 6e 61 6d 65 20 24 56 4d 20 30 20 3b 23  er_name $VM 0 ;#
2740: 20 49 67 6e 6f 72 65 20 69 66 20 69 6e 64 65 78   Ignore if index
2750: 20 74 6f 6f 20 73 6d 61 6c 6c 0a 7d 20 7b 7d 0a   too small.} {}.
2760: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30 2e  do_test bind-10.
2770: 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  7.3 {.  sqlite3_
2780: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
2790: 61 6d 65 20 24 56 4d 20 34 20 3b 23 20 49 67 6e  ame $VM 4 ;# Ign
27a0: 6f 72 65 20 69 66 20 69 6e 64 65 78 20 69 73 20  ore if index is 
27b0: 74 6f 6f 20 62 69 67 0a 7d 20 7b 7d 0a 64 6f 5f  too big.} {}.do_
27c0: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 38 20 7b  test bind-10.8 {
27d0: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
27e0: 69 6e 74 20 24 56 4d 20 31 20 31 0a 20 20 73 71  int $VM 1 1.  sq
27f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24  lite3_bind_int $
2800: 56 4d 20 32 20 32 0a 20 20 73 71 6c 69 74 65 33  VM 2 2.  sqlite3
2810: 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d 20 33 20  _bind_int $VM 3 
2820: 33 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  3.  sqlite3_step
2830: 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 44 4f   $VM.} SQLITE_DO
2840: 4e 45 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  NE.do_test bind-
2850: 31 30 2e 38 2e 31 20 7b 0a 20 20 23 20 42 69 6e  10.8.1 {.  # Bin
2860: 64 69 6e 67 20 61 74 74 65 6d 70 74 73 20 61 66  ding attempts af
2870: 74 65 72 20 70 72 6f 67 72 61 6d 20 73 74 61 72  ter program star
2880: 74 20 73 68 6f 75 6c 64 20 66 61 69 6c 0a 20 20  t should fail.  
2890: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
28a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
28b0: 5f 69 6e 74 20 24 56 4d 20 31 20 31 0a 20 20 7d  _int $VM 1 1.  }
28c0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
28d0: 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 7d 7d  rc $msg.} {1 {}}
28e0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
28f0: 2e 39 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .9 {.  sqlite3_f
2900: 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d 20 53 51  inalize $VM.} SQ
2910: 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74 65 73 74 20  LITE_OK.do_test 
2920: 62 69 6e 64 2d 31 30 2e 31 30 20 7b 0a 20 20 65  bind-10.10 {.  e
2930: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2940: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 39   FROM t2}.} {1 9
2950: 39 39 20 31 30 30 30 20 31 30 30 31 20 7b 7d 20  99 1000 1001 {} 
2960: 7b 7d 20 31 20 32 20 31 20 33 20 32 20 31 7d 0a  {} 1 2 1 3 2 1}.
2970: 0a 23 20 54 69 63 6b 65 74 20 23 39 31 38 0a 23  .# Ticket #918.#
2980: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 30  .do_test bind-10
2990: 2e 31 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 73  .11 {.  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 66 69 6e 69 73 68  123"}}.}..finish
2e00: 5f 74 65 73 74 0a                                _test.