/ Hex Artifact Content
Login

Artifact a88917a3d2865f31006e2acb2fd7534dcd15140d:


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 39 20 32 30 30 35 2f 30 31 2f  ,v 1.29 2005/01/
0200: 32 39 20 30 39 3a 30 30 3a 34 39 20 64 61 6e 69  29 09:00:49 dani
0210: 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 23 0a  elk1977 Exp $.#.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 70  ir/tester.tcl..p
0260: 72 6f 63 20 73 71 6c 69 74 65 5f 73 74 65 70 20  roc sqlite_step 
0270: 7b 73 74 6d 74 20 4e 20 56 41 4c 53 20 43 4f 4c  {stmt N VALS COL
0280: 53 7d 20 7b 0a 20 20 75 70 76 61 72 20 56 41 4c  S} {.  upvar VAL
0290: 53 20 76 61 6c 73 0a 20 20 75 70 76 61 72 20 43  S vals.  upvar C
02a0: 4f 4c 53 20 63 6f 6c 73 0a 20 20 73 65 74 20 76  OLS cols.  set v
02b0: 61 6c 73 20 5b 6c 69 73 74 5d 0a 20 20 73 65 74  als [list].  set
02c0: 20 63 6f 6c 73 20 5b 6c 69 73 74 5d 0a 0a 20 20   cols [list]..  
02d0: 73 65 74 20 72 63 20 5b 73 71 6c 69 74 65 33 5f  set rc [sqlite3_
02e0: 73 74 65 70 20 24 73 74 6d 74 5d 0a 20 20 66 6f  step $stmt].  fo
02f0: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
0300: 3c 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  < [sqlite3_colum
0310: 6e 5f 63 6f 75 6e 74 20 24 73 74 6d 74 5d 7d 20  n_count $stmt]} 
0320: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c  {incr i} {.    l
0330: 61 70 70 65 6e 64 20 63 6f 6c 73 20 5b 73 71 6c  append cols [sql
0340: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
0350: 20 24 73 74 6d 74 20 24 69 5d 0a 20 20 7d 0a 20   $stmt $i].  }. 
0360: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
0370: 24 69 20 3c 20 5b 73 71 6c 69 74 65 33 5f 64 61  $i < [sqlite3_da
0380: 74 61 5f 63 6f 75 6e 74 20 24 73 74 6d 74 5d 7d  ta_count $stmt]}
0390: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
03a0: 6c 61 70 70 65 6e 64 20 76 61 6c 73 20 5b 73 71  lappend vals [sq
03b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
03c0: 74 20 24 73 74 6d 74 20 24 69 5d 0a 20 20 7d 0a  t $stmt $i].  }.
03d0: 0a 20 20 72 65 74 75 72 6e 20 24 72 63 0a 7d 0a  .  return $rc.}.
03e0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e  .do_test bind-1.
03f0: 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  1 {.  db close. 
0400: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
0410: 20 64 62 20 74 65 73 74 2e 64 62 5d 0a 20 20 65   db test.db].  e
0420: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
0430: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 7d  ABLE t1(a,b,c);}
0440: 0a 20 20 73 65 74 20 56 4d 20 5b 73 71 6c 69 74  .  set VM [sqlit
0450: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
0460: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0470: 41 4c 55 45 53 28 3a 31 2c 3f 2c 3a 61 62 63 29  ALUES(:1,?,:abc)
0480: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 65 74  } -1 TAIL].  set
0490: 20 54 41 49 4c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65   TAIL.} {}.do_te
04a0: 73 74 20 62 69 6e 64 2d 31 2e 31 2e 31 20 7b 0a  st bind-1.1.1 {.
04b0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
04c0: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 24  arameter_count $
04d0: 56 4d 0a 7d 20 33 0a 64 6f 5f 74 65 73 74 20 62  VM.} 3.do_test b
04e0: 69 6e 64 2d 31 2e 31 2e 32 20 7b 0a 20 20 73 71  ind-1.1.2 {.  sq
04f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
0500: 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 31 0a  eter_name $VM 1.
0510: 7d 20 7b 3a 31 7d 0a 64 6f 5f 74 65 73 74 20 62  } {:1}.do_test b
0520: 69 6e 64 2d 31 2e 31 2e 33 20 7b 0a 20 20 73 71  ind-1.1.3 {.  sq
0530: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
0540: 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 32 0a  eter_name $VM 2.
0550: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  } {}.do_test bin
0560: 64 2d 31 2e 31 2e 34 20 7b 0a 20 20 73 71 6c 69  d-1.1.4 {.  sqli
0570: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
0580: 65 72 5f 6e 61 6d 65 20 24 56 4d 20 33 0a 7d 20  er_name $VM 3.} 
0590: 7b 3a 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 62  {:abc}.do_test b
05a0: 69 6e 64 2d 31 2e 32 20 7b 0a 20 20 73 71 6c 69  ind-1.2 {.  sqli
05b0: 74 65 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41  te_step $VM N VA
05c0: 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 7d 20  LUES COLNAMES.} 
05d0: 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f  {SQLITE_DONE}.do
05e0: 5f 74 65 73 74 20 62 69 6e 64 2d 31 2e 33 20 7b  _test bind-1.3 {
05f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0600: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
0610: 20 74 31 7d 0a 7d 20 7b 31 20 7b 7d 20 7b 7d 20   t1}.} {1 {} {} 
0620: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {}}.do_test bind
0630: 2d 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.4 {.  sqlite3
0640: 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 73 71 6c  _reset $VM.  sql
0650: 69 74 65 5f 62 69 6e 64 20 24 56 4d 20 31 20 7b  ite_bind $VM 1 {
0660: 74 65 73 74 20 76 61 6c 75 65 20 31 7d 20 6e 6f  test value 1} no
0670: 72 6d 61 6c 0a 20 20 73 71 6c 69 74 65 5f 73 74  rmal.  sqlite_st
0680: 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20  ep $VM N VALUES 
0690: 43 4f 4c 4e 41 4d 45 53 0a 7d 20 53 51 4c 49 54  COLNAMES.} SQLIT
06a0: 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 62  E_DONE.do_test b
06b0: 69 6e 64 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63  ind-1.5 {.  exec
06c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
06d0: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20  d, * FROM t1}.} 
06e0: 7b 31 20 7b 7d 20 7b 7d 20 7b 7d 20 32 20 7b 74  {1 {} {} {} 2 {t
06f0: 65 73 74 20 76 61 6c 75 65 20 31 7d 20 7b 7d 20  est value 1} {} 
0700: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {}}.do_test bind
0710: 2d 31 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  -1.6 {.  sqlite3
0720: 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 73 71 6c  _reset $VM.  sql
0730: 69 74 65 5f 62 69 6e 64 20 24 56 4d 20 33 20 7b  ite_bind $VM 3 {
0740: 27 74 65 73 74 20 76 61 6c 75 65 20 32 27 7d 20  'test value 2'} 
0750: 6e 6f 72 6d 61 6c 0a 20 20 73 71 6c 69 74 65 5f  normal.  sqlite_
0760: 73 74 65 70 20 24 56 4d 20 4e 20 56 41 4c 55 45  step $VM N VALUE
0770: 53 20 43 4f 4c 4e 41 4d 45 53 0a 7d 20 53 51 4c  S COLNAMES.} SQL
0780: 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74 65 73 74  ITE_DONE.do_test
0790: 20 62 69 6e 64 2d 31 2e 37 20 7b 0a 20 20 65 78   bind-1.7 {.  ex
07a0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
07b0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
07c0: 7d 20 7b 31 20 7b 7d 20 7b 7d 20 7b 7d 20 32 20  } {1 {} {} {} 2 
07d0: 7b 74 65 73 74 20 76 61 6c 75 65 20 31 7d 20 7b  {test value 1} {
07e0: 7d 20 7b 7d 20 33 20 7b 74 65 73 74 20 76 61 6c  } {} 3 {test val
07f0: 75 65 20 31 7d 20 7b 7d 20 7b 27 74 65 73 74 20  ue 1} {} {'test 
0800: 76 61 6c 75 65 20 32 27 7d 7d 0a 64 6f 5f 74 65  value 2'}}.do_te
0810: 73 74 20 62 69 6e 64 2d 31 2e 38 20 7b 0a 20 20  st bind-1.8 {.  
0820: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56  sqlite3_reset $V
0830: 4d 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 73  M.  set sqlite_s
0840: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
0850: 20 31 32 33 0a 20 20 73 71 6c 69 74 65 5f 62 69   123.  sqlite_bi
0860: 6e 64 20 24 56 4d 20 31 20 7b 7d 20 73 74 61 74  nd $VM 1 {} stat
0870: 69 63 0a 20 20 73 71 6c 69 74 65 5f 62 69 6e 64  ic.  sqlite_bind
0880: 20 24 56 4d 20 32 20 7b 61 62 63 64 65 66 67 7d   $VM 2 {abcdefg}
0890: 20 6e 6f 72 6d 61 6c 0a 20 20 73 71 6c 69 74 65   normal.  sqlite
08a0: 5f 62 69 6e 64 20 24 56 4d 20 33 20 7b 7d 20 6e  _bind $VM 3 {} n
08b0: 75 6c 6c 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  ull.  execsql {D
08c0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 7d 0a 20  ELETE FROM t1}. 
08d0: 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d   sqlite_step $VM
08e0: 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d   N VALUES COLNAM
08f0: 45 53 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  ES.  execsql {SE
0900: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
0910: 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 31 32 33 20  OM t1}.} {1 123 
0920: 61 62 63 64 65 66 67 20 7b 7d 7d 0a 64 6f 5f 74  abcdefg {}}.do_t
0930: 65 73 74 20 62 69 6e 64 2d 31 2e 39 20 7b 0a 20  est bind-1.9 {. 
0940: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24   sqlite3_reset $
0950: 56 4d 0a 20 20 73 71 6c 69 74 65 5f 62 69 6e 64  VM.  sqlite_bind
0960: 20 24 56 4d 20 31 20 7b 34 35 36 7d 20 6e 6f 72   $VM 1 {456} nor
0970: 6d 61 6c 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  mal.  sqlite_ste
0980: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
0990: 4f 4c 4e 41 4d 45 53 0a 20 20 65 78 65 63 73 71  OLNAMES.  execsq
09a0: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
09b0: 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31   * FROM t1}.} {1
09c0: 20 31 32 33 20 61 62 63 64 65 66 67 20 7b 7d 20   123 abcdefg {} 
09d0: 32 20 34 35 36 20 61 62 63 64 65 66 67 20 7b 7d  2 456 abcdefg {}
09e0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  }..do_test bind-
09f0: 31 2e 39 39 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.99 {.  sqlite3
0a00: 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 0a 7d 20  _finalize $VM.} 
0a10: 53 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 50 72 65  SQLITE_OK..# Pre
0a20: 70 61 72 65 20 74 68 65 20 73 74 61 74 65 6d 65  pare the stateme
0a30: 6e 74 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20  nt in different 
0a40: 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  ways depending o
0a50: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
0a60: 0a 23 20 74 68 65 20 24 76 61 72 20 70 72 6f 63  .# the $var proc
0a70: 65 73 73 69 6e 67 20 69 73 20 63 6f 6d 70 69 6c  essing is compil
0a80: 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 69 62 72  ed into the libr
0a90: 61 72 79 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  ary..#.ifcapable
0aa0: 20 7b 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64 6f   {tclvar} {.  do
0ab0: 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 20 7b  _test bind-2.1 {
0ac0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
0ad0: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
0ae0: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   t1;.    }.    s
0af0: 65 74 20 56 4d 20 5b 73 71 6c 69 74 65 33 5f 70  et VM [sqlite3_p
0b00: 72 65 70 61 72 65 20 24 44 42 20 7b 49 4e 53 45  repare $DB {INSE
0b10: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0b20: 53 28 24 6f 6e 65 2c 24 3a 3a 74 77 6f 2c 24 7b  S($one,$::two,${
0b30: 78 7b 79 7d 7a 7d 29 7d 5c 0a 20 20 20 20 20 20  x{y}z})}\.      
0b40: 20 20 20 20 20 20 2d 31 20 54 58 5d 0a 20 20 20        -1 TX].   
0b50: 20 73 65 74 20 54 58 0a 20 20 7d 20 7b 7d 0a 20   set TX.  } {}. 
0b60: 20 73 65 74 20 76 31 20 7b 24 6f 6e 65 7d 0a 20   set v1 {$one}. 
0b70: 20 73 65 74 20 76 32 20 7b 24 3a 3a 74 77 6f 7d   set v2 {$::two}
0b80: 0a 20 20 73 65 74 20 76 33 20 7b 24 7b 78 7b 79  .  set v3 {${x{y
0b90: 7d 7a 7d 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65  }z}}.}.ifcapable
0ba0: 20 7b 21 74 63 6c 76 61 72 7d 20 7b 0a 20 20 64   {!tclvar} {.  d
0bb0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 20  o_test bind-2.1 
0bc0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
0bd0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
0be0: 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  M t1;.    }.    
0bf0: 73 65 74 20 56 4d 20 5b 73 71 6c 69 74 65 33 5f  set VM [sqlite3_
0c00: 70 72 65 70 61 72 65 20 24 44 42 20 7b 49 4e 53  prepare $DB {INS
0c10: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0c20: 45 53 28 3a 6f 6e 65 2c 3a 74 77 6f 2c 3a 5f 29  ES(:one,:two,:_)
0c30: 7d 20 2d 31 20 54 58 5d 0a 20 20 20 20 73 65 74  } -1 TX].    set
0c40: 20 54 58 0a 20 20 7d 20 7b 7d 0a 20 20 73 65 74   TX.  } {}.  set
0c50: 20 76 31 20 7b 3a 6f 6e 65 7d 0a 20 20 73 65 74   v1 {:one}.  set
0c60: 20 76 32 20 7b 3a 74 77 6f 7d 0a 20 20 73 65 74   v2 {:two}.  set
0c70: 20 76 33 20 7b 3a 5f 7d 0a 7d 0a 0a 64 6f 5f 74   v3 {:_}.}..do_t
0c80: 65 73 74 20 62 69 6e 64 2d 32 2e 31 2e 31 20 7b  est bind-2.1.1 {
0c90: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
0ca0: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20  parameter_count 
0cb0: 24 56 4d 0a 7d 20 33 0a 64 6f 5f 74 65 73 74 20  $VM.} 3.do_test 
0cc0: 62 69 6e 64 2d 32 2e 31 2e 32 20 7b 0a 20 20 73  bind-2.1.2 {.  s
0cd0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
0ce0: 6d 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 31  meter_name $VM 1
0cf0: 0a 7d 20 24 76 31 0a 64 6f 5f 74 65 73 74 20 62  .} $v1.do_test b
0d00: 69 6e 64 2d 32 2e 31 2e 33 20 7b 0a 20 20 73 71  ind-2.1.3 {.  sq
0d10: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
0d20: 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 32 0a  eter_name $VM 2.
0d30: 7d 20 24 76 32 0a 64 6f 5f 74 65 73 74 20 62 69  } $v2.do_test bi
0d40: 6e 64 2d 32 2e 31 2e 34 20 7b 0a 20 20 73 71 6c  nd-2.1.4 {.  sql
0d50: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
0d60: 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 33 0a 7d  ter_name $VM 3.}
0d70: 20 24 76 33 0a 64 6f 5f 74 65 73 74 20 62 69 6e   $v3.do_test bin
0d80: 64 2d 32 2e 31 2e 35 20 7b 0a 20 20 73 71 6c 69  d-2.1.5 {.  sqli
0d90: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
0da0: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 24 76 31  er_index $VM $v1
0db0: 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 1.do_test bin
0dc0: 64 2d 32 2e 31 2e 36 20 7b 0a 20 20 73 71 6c 69  d-2.1.6 {.  sqli
0dd0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
0de0: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 24 76 32  er_index $VM $v2
0df0: 0a 7d 20 32 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 2.do_test bin
0e00: 64 2d 32 2e 31 2e 37 20 7b 0a 20 20 73 71 6c 69  d-2.1.7 {.  sqli
0e10: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
0e20: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 24 76 33  er_index $VM $v3
0e30: 0a 7d 20 33 0a 64 6f 5f 74 65 73 74 20 62 69 6e  .} 3.do_test bin
0e40: 64 2d 32 2e 31 2e 38 20 7b 0a 20 20 73 71 6c 69  d-2.1.8 {.  sqli
0e50: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
0e60: 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 7b 3a 68  er_index $VM {:h
0e70: 69 7d 0a 7d 20 30 0a 0a 23 20 33 32 20 62 69 74  i}.} 0..# 32 bit
0e80: 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73   Integers.do_tes
0e90: 74 20 62 69 6e 64 2d 32 2e 32 20 7b 0a 20 20 73  t bind-2.2 {.  s
0ea0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20  qlite3_bind_int 
0eb0: 24 56 4d 20 31 20 31 32 33 0a 20 20 73 71 6c 69  $VM 1 123.  sqli
0ec0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
0ed0: 20 32 20 34 35 36 0a 20 20 73 71 6c 69 74 65 33   2 456.  sqlite3
0ee0: 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d 20 33 20  _bind_int $VM 3 
0ef0: 37 38 39 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  789.  sqlite_ste
0f00: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
0f10: 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65  OLNAMES.  sqlite
0f20: 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78  3_reset $VM.  ex
0f30: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
0f40: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
0f50: 7d 20 7b 31 20 31 32 33 20 34 35 36 20 37 38 39  } {1 123 456 789
0f60: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 32  }.do_test bind-2
0f70: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62  .3 {.  sqlite3_b
0f80: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 32 20 2d 32  ind_int $VM 2 -2
0f90: 30 30 30 30 30 30 30 30 30 0a 20 20 73 71 6c 69  000000000.  sqli
0fa0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
0fb0: 20 33 20 32 30 30 30 30 30 30 30 30 30 0a 20 20   3 2000000000.  
0fc0: 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20  sqlite_step $VM 
0fd0: 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45  N VALUES COLNAME
0fe0: 53 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  S.  sqlite3_rese
0ff0: 74 20 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20  t $VM.  execsql 
1000: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a  {SELECT rowid, *
1010: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 31   FROM t1}.} {1 1
1020: 32 33 20 34 35 36 20 37 38 39 20 32 20 31 32 33  23 456 789 2 123
1030: 20 2d 32 30 30 30 30 30 30 30 30 30 20 32 30 30   -2000000000 200
1040: 30 30 30 30 30 30 30 7d 0a 64 6f 5f 74 65 73 74  0000000}.do_test
1050: 20 62 69 6e 64 2d 32 2e 34 20 7b 0a 20 20 65 78   bind-2.4 {.  ex
1060: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79  ecsql {SELECT ty
1070: 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28  peof(a), typeof(
1080: 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52  b), typeof(c) FR
1090: 4f 4d 20 74 31 7d 0a 7d 20 7b 69 6e 74 65 67 65  OM t1}.} {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 20 69 6e 74 65 67 65 72 7d 0a 64 6f 5f 74 65  r integer}.do_te
10d0: 73 74 20 62 69 6e 64 2d 32 2e 35 20 7b 0a 20 20  st bind-2.5 {.  
10e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
10f0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
1100: 7d 0a 7d 20 7b 7d 0a 0a 23 20 36 34 20 62 69 74  }.} {}..# 64 bit
1110: 20 49 6e 74 65 67 65 72 73 0a 64 6f 5f 74 65 73   Integers.do_tes
1120: 74 20 62 69 6e 64 2d 33 2e 31 20 7b 0a 20 20 73  t bind-3.1 {.  s
1130: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
1140: 34 20 24 56 4d 20 31 20 33 32 0a 20 20 73 71 6c  4 $VM 1 32.  sql
1150: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
1160: 24 56 4d 20 32 20 2d 32 30 30 30 30 30 30 30 30  $VM 2 -200000000
1170: 30 30 30 30 0a 20 20 73 71 6c 69 74 65 33 5f 62  0000.  sqlite3_b
1180: 69 6e 64 5f 69 6e 74 36 34 20 24 56 4d 20 33 20  ind_int64 $VM 3 
1190: 32 30 30 30 30 30 30 30 30 30 30 30 30 0a 20 20  2000000000000.  
11a0: 73 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20  sqlite_step $VM 
11b0: 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45  N VALUES COLNAME
11c0: 53 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  S.  sqlite3_rese
11d0: 74 20 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20  t $VM.  execsql 
11e0: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a  {SELECT rowid, *
11f0: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 33   FROM t1}.} {1 3
1200: 32 20 2d 32 30 30 30 30 30 30 30 30 30 30 30 30  2 -2000000000000
1210: 20 32 30 30 30 30 30 30 30 30 30 30 30 30 7d 0a   2000000000000}.
1220: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 33 2e 32  do_test bind-3.2
1230: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1240: 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20  LECT typeof(a), 
1250: 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65 6f  typeof(b), typeo
1260: 66 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20  f(c) FROM t1}.} 
1270: 7b 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72  {integer integer
1280: 20 69 6e 74 65 67 65 72 7d 0a 64 6f 5f 74 65 73   integer}.do_tes
1290: 74 20 62 69 6e 64 2d 33 2e 33 20 7b 0a 20 20 65  t bind-3.3 {.  e
12a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
12b0: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  ETE FROM t1;.  }
12c0: 0a 7d 20 7b 7d 0a 0a 23 20 44 6f 75 62 6c 65 73  .} {}..# Doubles
12d0: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 34 2e  .do_test bind-4.
12e0: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  1 {.  sqlite3_bi
12f0: 6e 64 5f 64 6f 75 62 6c 65 20 24 56 4d 20 31 20  nd_double $VM 1 
1300: 31 32 33 34 2e 31 32 33 34 0a 20 20 73 71 6c 69  1234.1234.  sqli
1310: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20  te3_bind_double 
1320: 24 56 4d 20 32 20 30 2e 30 30 30 30 31 0a 20 20  $VM 2 0.00001.  
1330: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
1340: 62 6c 65 20 24 56 4d 20 33 20 31 32 33 34 35 36  ble $VM 3 123456
1350: 37 38 39 0a 20 20 73 71 6c 69 74 65 5f 73 74 65  789.  sqlite_ste
1360: 70 20 24 56 4d 20 4e 20 56 41 4c 55 45 53 20 43  p $VM N VALUES C
1370: 4f 4c 4e 41 4d 45 53 0a 20 20 73 71 6c 69 74 65  OLNAMES.  sqlite
1380: 33 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 65 78  3_reset $VM.  ex
1390: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
13a0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d 0a  wid, * FROM t1}.
13b0: 7d 20 7b 31 20 31 32 33 34 2e 31 32 33 34 20 31  } {1 1234.1234 1
13c0: 65 2d 30 35 20 31 32 33 34 35 36 37 38 39 2e 30  e-05 123456789.0
13d0: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 34  }.do_test bind-4
13e0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
13f0: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29  SELECT typeof(a)
1400: 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70  , typeof(b), typ
1410: 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31 7d 0a  eof(c) FROM t1}.
1420: 7d 20 7b 72 65 61 6c 20 72 65 61 6c 20 72 65 61  } {real real rea
1430: 6c 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  l}.do_test bind-
1440: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
1450: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
1460: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  M t1;.  }.} {}..
1470: 23 20 4e 55 4c 4c 0a 64 6f 5f 74 65 73 74 20 62  # NULL.do_test b
1480: 69 6e 64 2d 35 2e 31 20 7b 0a 20 20 73 71 6c 69  ind-5.1 {.  sqli
1490: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 56  te3_bind_null $V
14a0: 4d 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  M 1.  sqlite3_bi
14b0: 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 32 0a 20 20  nd_null $VM 2.  
14c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
14d0: 6c 20 24 56 4d 20 33 20 0a 20 20 73 71 6c 69 74  l $VM 3 .  sqlit
14e0: 65 5f 73 74 65 70 20 24 56 4d 20 4e 20 56 41 4c  e_step $VM N VAL
14f0: 55 45 53 20 43 4f 4c 4e 41 4d 45 53 0a 20 20 73  UES COLNAMES.  s
1500: 71 6c 69 74 65 33 5f 72 65 73 65 74 20 24 56 4d  qlite3_reset $VM
1510: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1520: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
1530: 20 74 31 7d 0a 7d 20 7b 31 20 7b 7d 20 7b 7d 20   t1}.} {1 {} {} 
1540: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  {}}.do_test bind
1550: 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.2 {.  execsql
1560: 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28   {SELECT typeof(
1570: 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 74  a), typeof(b), t
1580: 79 70 65 6f 66 28 63 29 20 46 52 4f 4d 20 74 31  ypeof(c) FROM t1
1590: 7d 0a 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20 6e  }.} {null null n
15a0: 75 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  ull}.do_test bin
15b0: 64 2d 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  d-5.3 {.  execsq
15c0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
15d0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  ROM t1;.  }.} {}
15e0: 0a 0a 23 20 55 54 46 2d 38 20 74 65 78 74 0a 64  ..# UTF-8 text.d
15f0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 36 2e 31 20  o_test bind-6.1 
1600: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  {.  sqlite3_bind
1610: 5f 74 65 78 74 20 24 56 4d 20 31 20 68 65 6c 6c  _text $VM 1 hell
1620: 6f 74 68 65 72 65 20 35 0a 20 20 73 71 6c 69 74  othere 5.  sqlit
1630: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56 4d  e3_bind_text $VM
1640: 20 32 20 22 2e 2e 22 20 31 0a 20 20 73 71 6c 69   2 ".." 1.  sqli
1650: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 56  te3_bind_text $V
1660: 4d 20 33 20 77 6f 72 6c 64 20 2d 31 0a 20 20 73  M 3 world -1.  s
1670: 71 6c 69 74 65 5f 73 74 65 70 20 24 56 4d 20 4e  qlite_step $VM N
1680: 20 56 41 4c 55 45 53 20 43 4f 4c 4e 41 4d 45 53   VALUES COLNAMES
1690: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
16a0: 20 24 56 4d 0a 20 20 65 78 65 63 73 71 6c 20 7b   $VM.  execsql {
16b0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
16c0: 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 68 65  FROM t1}.} {1 he
16d0: 6c 6c 6f 20 2e 20 77 6f 72 6c 64 7d 0a 64 6f 5f  llo . world}.do_
16e0: 74 65 73 74 20 62 69 6e 64 2d 36 2e 32 20 7b 0a  test bind-6.2 {.
16f0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1700: 54 20 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70  T typeof(a), typ
1710: 65 6f 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63  eof(b), typeof(c
1720: 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 74 65  ) FROM t1}.} {te
1730: 78 74 20 74 65 78 74 20 74 65 78 74 7d 0a 64 6f  xt text text}.do
1740: 5f 74 65 73 74 20 62 69 6e 64 2d 36 2e 33 20 7b  _test bind-6.3 {
1750: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1760: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
1770: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 55 54 46  .  }.} {}..# UTF
1780: 2d 31 36 20 74 65 78 74 0a 69 66 63 61 70 61 62  -16 text.ifcapab
1790: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64  le {utf16} {.  d
17a0: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 37 2e 31 20  o_test bind-7.1 
17b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  {.    sqlite3_bi
17c0: 6e 64 5f 74 65 78 74 31 36 20 24 56 4d 20 31 20  nd_text16 $VM 1 
17d0: 5b 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  [encoding conver
17e0: 74 74 6f 20 75 6e 69 63 6f 64 65 20 68 65 6c 6c  tto unicode hell
17f0: 6f 74 68 65 72 65 5d 20 31 30 0a 20 20 20 20 73  othere] 10.    s
1800: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
1810: 31 36 20 24 56 4d 20 32 20 5b 65 6e 63 6f 64 69  16 $VM 2 [encodi
1820: 6e 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69  ng convertto uni
1830: 63 6f 64 65 20 22 22 5d 20 30 0a 20 20 20 20 73  code ""] 0.    s
1840: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
1850: 31 36 20 24 56 4d 20 33 20 5b 65 6e 63 6f 64 69  16 $VM 3 [encodi
1860: 6e 67 20 63 6f 6e 76 65 72 74 74 6f 20 75 6e 69  ng convertto uni
1870: 63 6f 64 65 20 77 6f 72 6c 64 5d 20 31 30 0a 20  code world] 10. 
1880: 20 20 20 73 71 6c 69 74 65 5f 73 74 65 70 20 24     sqlite_step $
1890: 56 4d 20 4e 20 56 41 4c 55 45 53 20 43 4f 4c 4e  VM N VALUES COLN
18a0: 41 4d 45 53 0a 20 20 20 20 73 71 6c 69 74 65 33  AMES.    sqlite3
18b0: 5f 72 65 73 65 74 20 24 56 4d 0a 20 20 20 20 65  _reset $VM.    e
18c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
18d0: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 7d  owid, * FROM t1}
18e0: 0a 20 20 7d 20 7b 31 20 68 65 6c 6c 6f 20 7b 7d  .  } {1 hello {}
18f0: 20 77 6f 72 6c 64 7d 0a 20 20 64 6f 5f 74 65 73   world}.  do_tes
1900: 74 20 62 69 6e 64 2d 37 2e 32 20 7b 0a 20 20 20  t bind-7.2 {.   
1910: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1920: 20 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65   typeof(a), type
1930: 6f 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29  of(b), typeof(c)
1940: 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 74   FROM t1}.  } {t
1950: 65 78 74 20 74 65 78 74 20 74 65 78 74 7d 0a 7d  ext text text}.}
1960: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 37 2e  .do_test bind-7.
1970: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1980: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1990: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  t1;.  }.} {}..# 
19a0: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 27 6f  Test that the 'o
19b0: 75 74 20 6f 66 20 72 61 6e 67 65 27 20 65 72 72  ut of range' err
19c0: 6f 72 20 77 6f 72 6b 73 2e 0a 64 6f 5f 74 65 73  or works..do_tes
19d0: 74 20 62 69 6e 64 2d 38 2e 31 20 7b 0a 20 20 63  t bind-8.1 {.  c
19e0: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 62  atch { sqlite3_b
19f0: 69 6e 64 5f 6e 75 6c 6c 20 24 56 4d 20 30 20 7d  ind_null $VM 0 }
1a00: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {1}.do_test b
1a10: 69 6e 64 2d 38 2e 32 20 7b 0a 20 20 73 71 6c 69  ind-8.2 {.  sqli
1a20: 74 65 33 5f 65 72 72 6d 73 67 20 24 44 42 0a 7d  te3_errmsg $DB.}
1a30: 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e   {bind or column
1a40: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
1a50: 6e 67 65 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b  nge}.ifcapable {
1a60: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
1a70: 73 74 20 62 69 6e 64 2d 38 2e 33 20 7b 0a 20 20  st bind-8.3 {.  
1a80: 20 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65    encoding conve
1a90: 72 74 66 72 6f 6d 20 75 6e 69 63 6f 64 65 20 5b  rtfrom unicode [
1aa0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
1ab0: 20 24 44 42 5d 0a 20 20 7d 20 7b 62 69 6e 64 20   $DB].  } {bind 
1ac0: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
1ad0: 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a 7d 0a  out of range}.}.
1ae0: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 34  do_test bind-8.4
1af0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
1b00: 64 5f 6e 75 6c 6c 20 24 56 4d 20 31 20 0a 20 20  d_null $VM 1 .  
1b10: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 24  sqlite3_errmsg $
1b20: 44 42 0a 7d 20 7b 6e 6f 74 20 61 6e 20 65 72 72  DB.} {not an err
1b30: 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64  or}.do_test bind
1b40: 2d 38 2e 35 20 7b 0a 20 20 63 61 74 63 68 20 7b  -8.5 {.  catch {
1b50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
1b60: 6c 6c 20 24 56 4d 20 34 20 7d 0a 7d 20 7b 31 7d  ll $VM 4 }.} {1}
1b70: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e  .do_test bind-8.
1b80: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 72  6 {.  sqlite3_er
1b90: 72 6d 73 67 20 24 44 42 0a 7d 20 7b 62 69 6e 64  rmsg $DB.} {bind
1ba0: 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   or column index
1bb0: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 7d 0a 69   out of range}.i
1bc0: 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d  fcapable {utf16}
1bd0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e   {.  do_test bin
1be0: 64 2d 38 2e 37 20 7b 0a 20 20 20 20 65 6e 63 6f  d-8.7 {.    enco
1bf0: 64 69 6e 67 20 63 6f 6e 76 65 72 74 66 72 6f 6d  ding convertfrom
1c00: 20 75 6e 69 63 6f 64 65 20 5b 73 71 6c 69 74 65   unicode [sqlite
1c10: 33 5f 65 72 72 6d 73 67 31 36 20 24 44 42 5d 0a  3_errmsg16 $DB].
1c20: 20 20 7d 20 7b 62 69 6e 64 20 6f 72 20 63 6f 6c    } {bind or col
1c30: 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66  umn index out of
1c40: 20 72 61 6e 67 65 7d 0a 7d 0a 0a 64 6f 5f 74 65   range}.}..do_te
1c50: 73 74 20 62 69 6e 64 2d 38 2e 38 20 7b 0a 20 20  st bind-8.8 {.  
1c60: 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f  catch { sqlite3_
1c70: 62 69 6e 64 5f 62 6c 6f 62 20 24 56 4d 20 30 20  bind_blob $VM 0 
1c80: 22 61 62 63 22 20 33 20 7d 0a 7d 20 7b 31 7d 0a  "abc" 3 }.} {1}.
1c90: 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 39  do_test bind-8.9
1ca0: 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c   {.  catch { sql
1cb0: 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 24  ite3_bind_blob $
1cc0: 56 4d 20 34 20 22 61 62 63 22 20 33 20 7d 0a 7d  VM 4 "abc" 3 }.}
1cd0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e   {1}.do_test bin
1ce0: 64 2d 38 2e 31 30 20 7b 0a 20 20 63 61 74 63 68  d-8.10 {.  catch
1cf0: 20 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   { sqlite3_bind_
1d00: 74 65 78 74 20 24 56 4d 20 30 20 22 61 62 63 22  text $VM 0 "abc"
1d10: 20 33 20 7d 0a 7d 20 7b 31 7d 0a 69 66 63 61 70   3 }.} {1}.ifcap
1d20: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
1d30: 20 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e   do_test bind-8.
1d40: 31 31 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  11 {.    catch {
1d50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
1d60: 78 74 31 36 20 24 56 4d 20 34 20 22 61 62 63 22  xt16 $VM 4 "abc"
1d70: 20 32 20 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 64   2 }.  } {1}.}.d
1d80: 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 32  o_test bind-8.12
1d90: 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c   {.  catch { sql
1da0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56  ite3_bind_int $V
1db0: 4d 20 30 20 35 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  M 0 5 }.} {1}.do
1dc0: 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 33 20  _test bind-8.13 
1dd0: 7b 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69  {.  catch { sqli
1de0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
1df0: 20 34 20 35 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f   4 5 }.} {1}.do_
1e00: 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 34 20 7b  test bind-8.14 {
1e10: 0a 20 20 63 61 74 63 68 20 7b 20 73 71 6c 69 74  .  catch { sqlit
1e20: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 24  e3_bind_double $
1e30: 56 4d 20 30 20 35 2e 30 20 7d 0a 7d 20 7b 31 7d  VM 0 5.0 }.} {1}
1e40: 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 38 2e  .do_test bind-8.
1e50: 31 35 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 73  15 {.  catch { s
1e60: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
1e70: 6c 65 20 24 56 4d 20 34 20 36 2e 30 20 7d 0a 7d  le $VM 4 6.0 }.}
1e80: 20 7b 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69   {1}..do_test bi
1e90: 6e 64 2d 38 2e 39 39 20 7b 0a 20 20 73 71 6c 69  nd-8.99 {.  sqli
1ea0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d  te3_finalize $VM
1eb0: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 0a 64 6f  .} SQLITE_OK..do
1ec0: 5f 74 65 73 74 20 62 69 6e 64 2d 39 2e 31 20 7b  _test bind-9.1 {
1ed0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1ee0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
1ef0: 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 3b 0a 20  (a,b,c,d,e,f);. 
1f00: 20 7d 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   }.  set rc [cat
1f10: 63 68 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ch {.    sqlite3
1f20: 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20  _prepare $DB {. 
1f30: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1f40: 20 74 32 28 61 29 20 56 41 4c 55 45 53 28 3f 30   t2(a) VALUES(?0
1f50: 29 0a 20 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a  ).    } -1 TAIL.
1f60: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65    } msg].  lappe
1f70: 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20  nd rc $msg.} {1 
1f80: 7b 28 31 29 20 76 61 72 69 61 62 6c 65 20 6e 75  {(1) variable nu
1f90: 6d 62 65 72 20 6d 75 73 74 20 62 65 20 62 65 74  mber must be bet
1fa0: 77 65 65 6e 20 3f 31 20 61 6e 64 20 3f 39 39 39  ween ?1 and ?999
1fb0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  }}.do_test bind-
1fc0: 39 2e 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  9.2 {.  set rc [
1fd0: 63 61 74 63 68 20 7b 0a 20 20 20 20 73 71 6c 69  catch {.    sqli
1fe0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
1ff0: 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  {.      INSERT I
2000: 4e 54 4f 20 74 32 28 61 29 20 56 41 4c 55 45 53  NTO t2(a) VALUES
2010: 28 3f 31 30 30 30 29 0a 20 20 20 20 7d 20 2d 31  (?1000).    } -1
2020: 20 54 41 49 4c 0a 20 20 7d 20 6d 73 67 5d 0a 20   TAIL.  } msg]. 
2030: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
2040: 0a 7d 20 7b 31 20 7b 28 31 29 20 76 61 72 69 61  .} {1 {(1) varia
2050: 62 6c 65 20 6e 75 6d 62 65 72 20 6d 75 73 74 20  ble number must 
2060: 62 65 20 62 65 74 77 65 65 6e 20 3f 31 20 61 6e  be between ?1 an
2070: 64 20 3f 39 39 39 7d 7d 0a 64 6f 5f 74 65 73 74  d ?999}}.do_test
2080: 20 62 69 6e 64 2d 39 2e 33 20 7b 0a 20 20 73 65   bind-9.3 {.  se
2090: 74 20 56 4d 20 5b 0a 20 20 20 20 73 71 6c 69 74  t VM [.    sqlit
20a0: 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20 7b  e3_prepare $DB {
20b0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
20c0: 54 4f 20 74 32 28 61 2c 62 29 20 56 41 4c 55 45  TO t2(a,b) VALUE
20d0: 53 28 3f 31 2c 3f 39 39 39 29 0a 20 20 20 20 7d  S(?1,?999).    }
20e0: 20 2d 31 20 54 41 49 4c 0a 20 20 5d 0a 20 20 73   -1 TAIL.  ].  s
20f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
2100: 6d 65 74 65 72 5f 63 6f 75 6e 74 20 24 56 4d 0a  meter_count $VM.
2110: 7d 20 7b 39 39 39 7d 0a 63 61 74 63 68 20 7b 73  } {999}.catch {s
2120: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
2130: 24 56 4d 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e  $VM}.do_test bin
2140: 64 2d 39 2e 34 20 7b 0a 20 20 73 65 74 20 56 4d  d-9.4 {.  set VM
2150: 20 5b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   [.    sqlite3_p
2160: 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20 20  repare $DB {.   
2170: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2180: 32 28 61 2c 62 2c 63 2c 64 29 20 56 41 4c 55 45  2(a,b,c,d) VALUE
2190: 53 28 3f 31 2c 3f 39 39 39 2c 3f 2c 3f 29 0a 20  S(?1,?999,?,?). 
21a0: 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 5d     } -1 TAIL.  ]
21b0: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
21c0: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20  parameter_count 
21d0: 24 56 4d 0a 7d 20 7b 31 30 30 31 7d 0a 64 6f 5f  $VM.} {1001}.do_
21e0: 74 65 73 74 20 62 69 6e 64 2d 39 2e 35 20 7b 0a  test bind-9.5 {.
21f0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
2200: 6e 74 20 24 56 4d 20 31 20 31 0a 20 20 73 71 6c  nt $VM 1 1.  sql
2210: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56  ite3_bind_int $V
2220: 4d 20 39 39 39 20 39 39 39 0a 20 20 73 71 6c 69  M 999 999.  sqli
2230: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
2240: 20 31 30 30 30 20 31 30 30 30 0a 20 20 73 71 6c   1000 1000.  sql
2250: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56  ite3_bind_int $V
2260: 4d 20 31 30 30 31 20 31 30 30 31 0a 20 20 73 71  M 1001 1001.  sq
2270: 6c 69 74 65 33 5f 73 74 65 70 20 24 56 4d 0a 7d  lite3_step $VM.}
2280: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f   SQLITE_DONE.do_
2290: 74 65 73 74 20 62 69 6e 64 2d 39 2e 36 20 7b 0a  test bind-9.6 {.
22a0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
22b0: 7a 65 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f  ze $VM.} SQLITE_
22c0: 4f 4b 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d  OK.do_test bind-
22d0: 39 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.7 {.  execsql 
22e0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
22f0: 32 7d 0a 7d 20 7b 31 20 39 39 39 20 31 30 30 30  2}.} {1 999 1000
2300: 20 31 30 30 31 20 7b 7d 20 7b 7d 7d 0a 0a 69 66   1001 {} {}}..if
2310: 63 61 70 61 62 6c 65 20 7b 74 63 6c 76 61 72 7d  capable {tclvar}
2320: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e   {.  do_test bin
2330: 64 2d 31 30 2e 31 20 7b 0a 20 20 20 20 73 65 74  d-10.1 {.    set
2340: 20 56 4d 20 5b 0a 20 20 20 20 20 20 73 71 6c 69   VM [.      sqli
2350: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
2360: 7b 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54  {.        INSERT
2370: 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 2c 64   INTO t2(a,b,c,d
2380: 2c 65 2c 66 29 20 56 41 4c 55 45 53 28 3a 61 62  ,e,f) VALUES(:ab
2390: 63 2c 24 61 62 63 2c 3a 61 62 63 2c 24 61 62 2c  c,$abc,:abc,$ab,
23a0: 24 61 62 63 2c 3a 61 62 63 29 0a 20 20 20 20 20  $abc,:abc).     
23b0: 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 20 20 5d   } -1 TAIL.    ]
23c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
23d0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
23e0: 74 20 24 56 4d 0a 20 20 7d 20 33 0a 20 20 73 65  t $VM.  } 3.  se
23f0: 74 20 76 31 20 7b 24 61 62 63 7d 0a 20 20 73 65  t v1 {$abc}.  se
2400: 74 20 76 32 20 7b 24 61 62 7d 0a 7d 0a 69 66 63  t v2 {$ab}.}.ifc
2410: 61 70 61 62 6c 65 20 7b 21 74 63 6c 76 61 72 7d  apable {!tclvar}
2420: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 6e   {.  do_test bin
2430: 64 2d 31 30 2e 31 20 7b 0a 20 20 20 20 73 65 74  d-10.1 {.    set
2440: 20 56 4d 20 5b 0a 20 20 20 20 20 20 73 71 6c 69   VM [.      sqli
2450: 74 65 33 5f 70 72 65 70 61 72 65 20 24 44 42 20  te3_prepare $DB 
2460: 7b 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54  {.        INSERT
2470: 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 2c 64   INTO t2(a,b,c,d
2480: 2c 65 2c 66 29 20 56 41 4c 55 45 53 28 3a 61 62  ,e,f) VALUES(:ab
2490: 63 2c 3a 78 79 7a 2c 3a 61 62 63 2c 3a 78 79 2c  c,:xyz,:abc,:xy,
24a0: 3a 78 79 7a 2c 3a 61 62 63 29 0a 20 20 20 20 20  :xyz,:abc).     
24b0: 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 20 20 5d   } -1 TAIL.    ]
24c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
24d0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
24e0: 74 20 24 56 4d 0a 20 20 7d 20 33 0a 20 20 73 65  t $VM.  } 3.  se
24f0: 74 20 76 31 20 7b 3a 78 79 7a 7d 0a 20 20 73 65  t v1 {:xyz}.  se
2500: 74 20 76 32 20 7b 3a 78 79 7d 0a 7d 0a 64 6f 5f  t v2 {:xy}.}.do_
2510: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 32 20 7b  test bind-10.2 {
2520: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2530: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20  parameter_index 
2540: 24 56 4d 20 3a 61 62 63 0a 7d 20 31 0a 64 6f 5f  $VM :abc.} 1.do_
2550: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 33 20 7b  test bind-10.3 {
2560: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2570: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20  parameter_index 
2580: 24 56 4d 20 24 76 31 0a 7d 20 32 0a 64 6f 5f 74  $VM $v1.} 2.do_t
2590: 65 73 74 20 62 69 6e 64 2d 31 30 2e 34 20 7b 0a  est bind-10.4 {.
25a0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
25b0: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 24  arameter_index $
25c0: 56 4d 20 24 76 32 0a 7d 20 33 0a 64 6f 5f 74 65  VM $v2.} 3.do_te
25d0: 73 74 20 62 69 6e 64 2d 31 30 2e 35 20 7b 0a 20  st bind-10.5 {. 
25e0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
25f0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d  rameter_name $VM
2600: 20 31 0a 7d 20 3a 61 62 63 0a 64 6f 5f 74 65 73   1.} :abc.do_tes
2610: 74 20 62 69 6e 64 2d 31 30 2e 36 20 7b 0a 20 20  t bind-10.6 {.  
2620: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
2630: 61 6d 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20  ameter_name $VM 
2640: 32 0a 7d 20 24 76 31 0a 64 6f 5f 74 65 73 74 20  2.} $v1.do_test 
2650: 62 69 6e 64 2d 31 30 2e 37 20 7b 0a 20 20 73 71  bind-10.7 {.  sq
2660: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
2670: 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 33 0a  eter_name $VM 3.
2680: 7d 20 24 76 32 0a 64 6f 5f 74 65 73 74 20 62 69  } $v2.do_test bi
2690: 6e 64 2d 31 30 2e 37 2e 31 20 7b 0a 20 20 73 71  nd-10.7.1 {.  sq
26a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
26b0: 65 74 65 72 5f 6e 61 6d 65 20 30 20 31 20 20 20  eter_name 0 1   
26c0: 3b 23 20 49 67 6e 6f 72 65 20 69 66 20 56 4d 20  ;# Ignore if VM 
26d0: 69 73 20 4e 55 4c 4c 0a 7d 20 7b 7d 0a 64 6f 5f  is NULL.} {}.do_
26e0: 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 37 2e 32  test bind-10.7.2
26f0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e   {.  sqlite3_bin
2700: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
2710: 20 24 56 4d 20 30 20 3b 23 20 49 67 6e 6f 72 65   $VM 0 ;# Ignore
2720: 20 69 66 20 69 6e 64 65 78 20 74 6f 6f 20 73 6d   if index too sm
2730: 61 6c 6c 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  all.} {}.do_test
2740: 20 62 69 6e 64 2d 31 30 2e 37 2e 33 20 7b 0a 20   bind-10.7.3 {. 
2750: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
2760: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 24 56 4d  rameter_name $VM
2770: 20 34 20 3b 23 20 49 67 6e 6f 72 65 20 69 66 20   4 ;# Ignore if 
2780: 69 6e 64 65 78 20 69 73 20 74 6f 6f 20 62 69 67  index is too big
2790: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69  .} {}.do_test bi
27a0: 6e 64 2d 31 30 2e 38 20 7b 0a 20 20 73 71 6c 69  nd-10.8 {.  sqli
27b0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56 4d  te3_bind_int $VM
27c0: 20 31 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 62   1 1.  sqlite3_b
27d0: 69 6e 64 5f 69 6e 74 20 24 56 4d 20 32 20 32 0a  ind_int $VM 2 2.
27e0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
27f0: 6e 74 20 24 56 4d 20 33 20 33 0a 20 20 73 71 6c  nt $VM 3 3.  sql
2800: 69 74 65 33 5f 73 74 65 70 20 24 56 4d 0a 7d 20  ite3_step $VM.} 
2810: 53 51 4c 49 54 45 5f 44 4f 4e 45 0a 64 6f 5f 74  SQLITE_DONE.do_t
2820: 65 73 74 20 62 69 6e 64 2d 31 30 2e 38 2e 31 20  est bind-10.8.1 
2830: 7b 0a 20 20 23 20 42 69 6e 64 69 6e 67 20 61 74  {.  # Binding at
2840: 74 65 6d 70 74 73 20 61 66 74 65 72 20 70 72 6f  tempts after pro
2850: 67 72 61 6d 20 73 74 61 72 74 20 73 68 6f 75 6c  gram start shoul
2860: 64 20 66 61 69 6c 0a 20 20 73 65 74 20 72 63 20  d fail.  set rc 
2870: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73 71 6c  [catch {.    sql
2880: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 24 56  ite3_bind_int $V
2890: 4d 20 31 20 31 0a 20 20 7d 20 6d 73 67 5d 0a 20  M 1 1.  } msg]. 
28a0: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
28b0: 0a 7d 20 7b 31 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {1 {}}.do_tes
28c0: 74 20 62 69 6e 64 2d 31 30 2e 39 20 7b 0a 20 20  t bind-10.9 {.  
28d0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
28e0: 20 24 56 4d 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b   $VM.} SQLITE_OK
28f0: 0a 62 72 65 61 6b 70 6f 69 6e 74 0a 64 6f 5f 74  .breakpoint.do_t
2900: 65 73 74 20 62 69 6e 64 2d 31 30 2e 31 30 20 7b  est bind-10.10 {
2910: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2920: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
2930: 7b 31 20 39 39 39 20 31 30 30 30 20 31 30 30 31  {1 999 1000 1001
2940: 20 7b 7d 20 7b 7d 20 31 20 32 20 31 20 33 20 32   {} {} 1 2 1 3 2
2950: 20 31 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 39   1}..# Ticket #9
2960: 31 38 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69 6e  18.#.do_test bin
2970: 64 2d 31 30 2e 31 31 20 7b 0a 20 20 63 61 74 63  d-10.11 {.  catc
2980: 68 20 7b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  h {sqlite3_final
2990: 69 7a 65 20 24 56 4d 7d 0a 20 20 73 65 74 20 56  ize $VM}.  set V
29a0: 4d 20 5b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  M [.    sqlite3_
29b0: 70 72 65 70 61 72 65 20 24 44 42 20 7b 0a 20 20  prepare $DB {.  
29c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
29d0: 74 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20  t2(a,b,c,d,e,f) 
29e0: 56 41 4c 55 45 53 28 3a 61 62 63 2c 3f 2c 3f 34  VALUES(:abc,?,?4
29f0: 2c 3a 70 71 72 2c 3a 61 62 63 2c 3f 34 29 0a 20  ,:pqr,:abc,?4). 
2a00: 20 20 20 7d 20 2d 31 20 54 41 49 4c 0a 20 20 5d     } -1 TAIL.  ]
2a10: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2a20: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20  parameter_count 
2a30: 24 56 4d 0a 7d 20 35 0a 64 6f 5f 74 65 73 74 20  $VM.} 5.do_test 
2a40: 62 69 6e 64 2d 31 30 2e 31 31 2e 31 20 7b 0a 20  bind-10.11.1 {. 
2a50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
2a60: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 30 20  rameter_index 0 
2a70: 3a 78 79 7a 20 20 3b 23 20 69 67 6e 6f 72 65 20  :xyz  ;# ignore 
2a80: 4e 55 4c 4c 20 56 4d 20 61 72 67 75 6d 65 6e 74  NULL VM argument
2a90: 73 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69  s.} 0.do_test bi
2aa0: 6e 64 2d 31 30 2e 31 32 20 7b 0a 20 20 73 71 6c  nd-10.12 {.  sql
2ab0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2ac0: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3a 78  ter_index $VM :x
2ad0: 79 7a 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62  yz.} 0.do_test b
2ae0: 69 6e 64 2d 31 30 2e 31 33 20 7b 0a 20 20 73 71  ind-10.13 {.  sq
2af0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
2b00: 65 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 7b  eter_index $VM {
2b10: 7d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62 69  }.} 0.do_test bi
2b20: 6e 64 2d 31 30 2e 31 34 20 7b 0a 20 20 73 71 6c  nd-10.14 {.  sql
2b30: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2b40: 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3a 70  ter_index $VM :p
2b50: 71 72 0a 7d 20 35 0a 64 6f 5f 74 65 73 74 20 62  qr.} 5.do_test b
2b60: 69 6e 64 2d 31 30 2e 31 35 20 7b 0a 20 20 73 71  ind-10.15 {.  sq
2b70: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
2b80: 65 74 65 72 5f 69 6e 64 65 78 20 24 56 4d 20 3f  eter_index $VM ?
2b90: 34 0a 7d 20 34 0a 64 6f 5f 74 65 73 74 20 62 69  4.} 4.do_test bi
2ba0: 6e 64 2d 31 30 2e 31 36 20 7b 0a 20 20 73 71 6c  nd-10.16 {.  sql
2bb0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2bc0: 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 31 0a 7d  ter_name $VM 1.}
2bd0: 20 3a 61 62 63 0a 64 6f 5f 74 65 73 74 20 62 69   :abc.do_test bi
2be0: 6e 64 2d 31 30 2e 31 37 20 7b 0a 20 20 73 71 6c  nd-10.17 {.  sql
2bf0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2c00: 74 65 72 5f 6e 61 6d 65 20 24 56 4d 20 32 0a 7d  ter_name $VM 2.}
2c10: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64   {}.do_test bind
2c20: 2d 31 30 2e 31 38 20 7b 0a 20 20 73 71 6c 69 74  -10.18 {.  sqlit
2c30: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
2c40: 72 5f 6e 61 6d 65 20 24 56 4d 20 33 0a 7d 20 7b  r_name $VM 3.} {
2c50: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  }.do_test bind-1
2c60: 30 2e 31 39 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.19 {.  sqlite3
2c70: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2c80: 6e 61 6d 65 20 24 56 4d 20 34 0a 7d 20 7b 3f 34  name $VM 4.} {?4
2c90: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 6e 64 2d 31  }.do_test bind-1
2ca0: 30 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74 65 33  0.20 {.  sqlite3
2cb0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
2cc0: 6e 61 6d 65 20 24 56 4d 20 35 0a 7d 20 3a 70 71  name $VM 5.} :pq
2cd0: 72 0a 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33  r.catch {sqlite3
2ce0: 5f 66 69 6e 61 6c 69 7a 65 20 24 56 4d 7d 0a 0a  _finalize $VM}..
2cf0: 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 63  # Make sure we c
2d00: 61 74 63 68 20 61 6e 20 75 6e 74 65 72 6d 69 6e  atch an untermin
2d10: 61 74 65 64 20 22 28 22 20 69 6e 20 61 20 54 63  ated "(" in a Tc
2d20: 6c 2d 73 74 79 6c 65 20 76 61 72 69 61 62 6c 65  l-style variable
2d30: 20 6e 61 6d 65 0a 23 0a 69 66 63 61 70 61 62 6c   name.#.ifcapabl
2d40: 65 20 74 63 6c 76 61 72 20 7b 0a 20 20 64 6f 5f  e tclvar {.  do_
2d50: 74 65 73 74 20 62 69 6e 64 2d 31 31 2e 31 20 7b  test bind-11.1 {
2d60: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 53  .    catchsql {S
2d70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
2d80: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
2d90: 20 6e 61 6d 65 3d 24 61 62 63 28 31 32 33 20 61   name=$abc(123 a
2da0: 6e 64 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 3b  nd sql NOT NULL;
2db0: 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e 72 65 63 6f  }.  } {1 {unreco
2dc0: 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 3a 20 22 24  gnized token: "$
2dd0: 61 62 63 28 31 32 33 22 7d 7d 0a 7d 0a 0a 66 69  abc(123"}}.}..fi
2de0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.