wasCSharpSQLite – Blame information for rev 4

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 # 2003 September 6
2 #
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
5 #
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
9 #
10 #***********************************************************************
11 # This file implements regression tests for SQLite library. The
12 # focus of this script testing the sqlite_bind API.
13 #
14 # $Id: bind.test,v 1.48 2009/07/22 07:27:57 danielk1977 Exp $
15 #
16  
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
19  
20 proc sqlite_step {stmt N VALS COLS} {
21 upvar VALS vals
22 upvar COLS cols
23 set vals [list]
24 set cols [list]
25  
26 set rc [sqlite3_step $stmt]
27 for {set i 0} {$i < [sqlite3_column_count $stmt]} {incr i} {
28 lappend cols [sqlite3_column_name $stmt $i]
29 }
30 for {set i 0} {$i < [sqlite3_data_count $stmt]} {incr i} {
31 lappend vals [sqlite3_column_text $stmt $i]
32 }
33  
34 return $rc
35 }
36  
37 do_test bind-1.1 {
38 set DB [sqlite3_connection_pointer db]
39 execsql {CREATE TABLE t1(a,b,c);}
40 set VM [sqlite3_prepare $DB {INSERT INTO t1 VALUES(:1,?,:abc)} -1 TAIL]
41 set TAIL
42 } {}
43 do_test bind-1.1.1 {
44 sqlite3_bind_parameter_count $VM
45 } 3
46 do_test bind-1.1.2 {
47 sqlite3_bind_parameter_name $VM 1
48 } {:1}
49 do_test bind-1.1.3 {
50 sqlite3_bind_parameter_name $VM 2
51 } {}
52 do_test bind-1.1.4 {
53 sqlite3_bind_parameter_name $VM 3
54 } {:abc}
55 do_test bind-1.2 {
56 sqlite_step $VM N VALUES COLNAMES
57 } {SQLITE_DONE}
58 do_test bind-1.3 {
59 execsql {SELECT rowid, * FROM t1}
60 } {1 {} {} {}}
61 do_test bind-1.4 {
62 sqlite3_reset $VM
63 sqlite_bind $VM 1 {test value 1} normal
64 sqlite_step $VM N VALUES COLNAMES
65 } SQLITE_DONE
66 do_test bind-1.5 {
67 execsql {SELECT rowid, * FROM t1}
68 } {1 {} {} {} 2 {test value 1} {} {}}
69 do_test bind-1.6 {
70 sqlite3_reset $VM
71 sqlite_bind $VM 3 {'test value 2'} normal
72 sqlite_step $VM N VALUES COLNAMES
73 } SQLITE_DONE
74 do_test bind-1.7 {
75 execsql {SELECT rowid, * FROM t1}
76 } {1 {} {} {} 2 {test value 1} {} {} 3 {test value 1} {} {'test value 2'}}
77 do_test bind-1.8 {
78 sqlite3_reset $VM
79 set sqlite_static_bind_value 123
80 sqlite_bind $VM 1 {} static
81 sqlite_bind $VM 2 {abcdefg} normal
82 sqlite_bind $VM 3 {} null
83 execsql {DELETE FROM t1}
84 sqlite_step $VM N VALUES COLNAMES
85 execsql {SELECT rowid, * FROM t1}
86 } {1 123 abcdefg {}}
87 do_test bind-1.9 {
88 sqlite3_reset $VM
89 sqlite_bind $VM 1 {456} normal
90 sqlite_step $VM N VALUES COLNAMES
91 execsql {SELECT rowid, * FROM t1}
92 } {1 123 abcdefg {} 2 456 abcdefg {}}
93  
94 do_test bind-1.10 {
95 set rc [catch {
96 sqlite3_prepare db {INSERT INTO t1 VALUES($abc:123,?,:abc)} -1 TAIL
97 } msg]
98 lappend rc $msg
99 } {1 {(1) near ":123": syntax error}}
100 do_test bind-1.11 {
101 set rc [catch {
102 sqlite3_prepare db {INSERT INTO t1 VALUES(@abc:xyz,?,:abc)} -1 TAIL
103 } msg]
104 lappend rc $msg
105 } {1 {(1) near ":xyz": syntax error}}
106  
107 do_test bind-1.99 {
108 sqlite3_finalize $VM
109 } SQLITE_OK
110  
111 # Prepare the statement in different ways depending on whether or not
112 # the $var processing is compiled into the library.
113 #
114 ifcapable {tclvar} {
115 do_test bind-2.1 {
116 execsql {
117 DELETE FROM t1;
118 }
119 set VM [sqlite3_prepare $DB {INSERT INTO t1 VALUES($one,$::two,$x(-z-))}\
120 -1 TX]
121 set TX
122 } {}
123 set v1 {$one}
124 set v2 {$::two}
125 set v3 {$x(-z-)}
126 }
127 ifcapable {!tclvar} {
128 do_test bind-2.1 {
129 execsql {
130 DELETE FROM t1;
131 }
132 set VM [sqlite3_prepare $DB {INSERT INTO t1 VALUES(:one,:two,:_)} -1 TX]
133 set TX
134 } {}
135 set v1 {:one}
136 set v2 {:two}
137 set v3 {:_}
138 }
139  
140 do_test bind-2.1.1 {
141 sqlite3_bind_parameter_count $VM
142 } 3
143 do_test bind-2.1.2 {
144 sqlite3_bind_parameter_name $VM 1
145 } $v1
146 do_test bind-2.1.3 {
147 sqlite3_bind_parameter_name $VM 2
148 } $v2
149 do_test bind-2.1.4 {
150 sqlite3_bind_parameter_name $VM 3
151 } $v3
152 do_test bind-2.1.5 {
153 sqlite3_bind_parameter_index $VM $v1
154 } 1
155 do_test bind-2.1.6 {
156 sqlite3_bind_parameter_index $VM $v2
157 } 2
158 do_test bind-2.1.7 {
159 sqlite3_bind_parameter_index $VM $v3
160 } 3
161 do_test bind-2.1.8 {
162 sqlite3_bind_parameter_index $VM {:hi}
163 } 0
164  
165 # 32 bit Integers
166 do_test bind-2.2 {
167 sqlite3_bind_int $VM 1 123
168 sqlite3_bind_int $VM 2 456
169 sqlite3_bind_int $VM 3 789
170 sqlite_step $VM N VALUES COLNAMES
171 sqlite3_reset $VM
172 execsql {SELECT rowid, * FROM t1}
173 } {1 123 456 789}
174 do_test bind-2.3 {
175 sqlite3_bind_int $VM 2 -2000000000
176 sqlite3_bind_int $VM 3 2000000000
177 sqlite_step $VM N VALUES COLNAMES
178 sqlite3_reset $VM
179 execsql {SELECT rowid, * FROM t1}
180 } {1 123 456 789 2 123 -2000000000 2000000000}
181 do_test bind-2.4 {
182 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
183 } {integer integer integer integer integer integer}
184 do_test bind-2.5 {
185 execsql {
186 DELETE FROM t1;
187 }
188 } {}
189  
190 # 64 bit Integers
191 do_test bind-3.1 {
192 sqlite3_bind_int64 $VM 1 32
193 sqlite3_bind_int64 $VM 2 -2000000000000
194 sqlite3_bind_int64 $VM 3 2000000000000
195 sqlite_step $VM N VALUES COLNAMES
196 sqlite3_reset $VM
197 execsql {SELECT rowid, * FROM t1}
198 } {1 32 -2000000000000 2000000000000}
199 do_test bind-3.2 {
200 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
201 } {integer integer integer}
202 do_test bind-3.3 {
203 execsql {
204 DELETE FROM t1;
205 }
206 } {}
207  
208 # Doubles
209 do_test bind-4.1 {
210 sqlite3_bind_double $VM 1 1234.1234
211 sqlite3_bind_double $VM 2 0.00001
212 sqlite3_bind_double $VM 3 123456789
213 sqlite_step $VM N VALUES COLNAMES
214 sqlite3_reset $VM
215 set x [execsql {SELECT rowid, * FROM t1}]
216 regsub {1e-005} $x {1e-05} y
217 set y
218 } {1 1234.1234 1e-05 123456789.0}
219 do_test bind-4.2 {
220 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
221 } {real real real}
222 do_test bind-4.3 {
223 execsql {
224 DELETE FROM t1;
225 }
226 } {}
227 do_test bind-4.4 {
228 sqlite3_bind_double $VM 1 NaN
229 sqlite3_bind_double $VM 2 1e300
230 sqlite3_bind_double $VM 3 -1e-300
231 sqlite_step $VM N VALUES COLNAMES
232 sqlite3_reset $VM
233 set x [execsql {SELECT rowid, * FROM t1}]
234 regsub {1e-005} $x {1e-05} y
235 set y
236 } {1 {} 1e+300 -1e-300}
237 do_test bind-4.5 {
238 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
239 } {null real real}
240 do_test bind-4.6 {
241 execsql {
242 DELETE FROM t1;
243 }
244 } {}
245  
246 # NULL
247 do_test bind-5.1 {
248 sqlite3_bind_null $VM 1
249 sqlite3_bind_null $VM 2
250 sqlite3_bind_null $VM 3
251 sqlite_step $VM N VALUES COLNAMES
252 sqlite3_reset $VM
253 execsql {SELECT rowid, * FROM t1}
254 } {1 {} {} {}}
255 do_test bind-5.2 {
256 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
257 } {null null null}
258 do_test bind-5.3 {
259 execsql {
260 DELETE FROM t1;
261 }
262 } {}
263  
264 # UTF-8 text
265 do_test bind-6.1 {
266 sqlite3_bind_text $VM 1 hellothere 5
267 sqlite3_bind_text $VM 2 ".." 1
268 sqlite3_bind_text $VM 3 world\000 -1
269 sqlite_step $VM N VALUES COLNAMES
270 sqlite3_reset $VM
271 execsql {SELECT rowid, * FROM t1}
272 } {1 hello . world}
273 do_test bind-6.2 {
274 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
275 } {text text text}
276 do_test bind-6.3 {
277 execsql {
278 DELETE FROM t1;
279 }
280 } {}
281  
282 # Make sure zeros in a string work.
283 #
284 do_test bind-6.4 {
285 db eval {DELETE FROM t1}
286 sqlite3_bind_text $VM 1 hello\000there\000 12
287 sqlite3_bind_text $VM 2 hello\000there\000 11
288 sqlite3_bind_text $VM 3 hello\000there\000 -1
289 sqlite_step $VM N VALUES COLNAMES
290 sqlite3_reset $VM
291 execsql {SELECT * FROM t1}
292 } {hello hello hello}
293 set enc [db eval {PRAGMA encoding}]
294 if {$enc=="UTF-8" || $enc==""} {
295 do_test bind-6.5 {
296 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
297 } {68656C6C6F00746865726500 68656C6C6F007468657265 68656C6C6F}
298 } elseif {$enc=="UTF-16le"} {
299 do_test bind-6.5 {
300 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
301 } {680065006C006C006F000000740068006500720065000000 680065006C006C006F00000074006800650072006500 680065006C006C006F00}
302 } elseif {$enc=="UTF-16be"} {
303 do_test bind-6.5 {
304 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
305 } {00680065006C006C006F0000007400680065007200650000 00680065006C006C006F000000740068006500720065 00680065006C006C006F}
306 } else {
307 do_test bind-6.5 {
308 set "Unknown database encoding: $::enc"
309 } {}
310 }
311 do_test bind-6.6 {
312 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
313 } {text text text}
314 do_test bind-6.7 {
315 execsql {
316 DELETE FROM t1;
317 }
318 } {}
319  
320 # UTF-16 text
321 ifcapable {utf16} {
322 do_test bind-7.1 {
323 sqlite3_bind_text16 $VM 1 [encoding convertto unicode hellothere] 10
324 sqlite3_bind_text16 $VM 2 [encoding convertto unicode ""] 0
325 sqlite3_bind_text16 $VM 3 [encoding convertto unicode world] 10
326 sqlite_step $VM N VALUES COLNAMES
327 sqlite3_reset $VM
328 execsql {SELECT rowid, * FROM t1}
329 } {1 hello {} world}
330 do_test bind-7.2 {
331 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
332 } {text text text}
333 do_test bind-7.3 {
334 db eval {DELETE FROM t1}
335 sqlite3_bind_text16 $VM 1 [encoding convertto unicode hi\000yall\000] 16
336 sqlite3_bind_text16 $VM 2 [encoding convertto unicode hi\000yall\000] 14
337 sqlite3_bind_text16 $VM 3 [encoding convertto unicode hi\000yall\000] -1
338 sqlite_step $VM N VALUES COLNAMES
339 sqlite3_reset $VM
340 execsql {SELECT * FROM t1}
341 } {hi hi hi}
342 if {$enc=="UTF-8"} {
343 do_test bind-7.4 {
344 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
345 } {68690079616C6C00 68690079616C6C 6869}
346 } elseif {$enc=="UTF-16le"} {
347 do_test bind-7.4 {
348 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
349 } {680069000000790061006C006C000000 680069000000790061006C006C00 68006900}
350 } elseif {$enc=="UTF-16be"} {
351 do_test bind-7.4 {
352 execsql {SELECT hex(a), hex(b), hex(c) FROM t1}
353 } {00680069000000790061006C006C0000 00680069000000790061006C006C 00680069}
354 }
355 do_test bind-7.5 {
356 execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
357 } {text text text}
358 }
359 do_test bind-7.99 {
360 execsql {DELETE FROM t1;}
361 } {}
362  
363 # Test that the 'out of range' error works.
364 do_test bind-8.1 {
365 catch { sqlite3_bind_null $VM 0 }
366 } {1}
367 do_test bind-8.2 {
368 sqlite3_errmsg $DB
369 } {bind or column index out of range}
370 ifcapable {utf16} {
371 do_test bind-8.3 {
372 encoding convertfrom unicode [sqlite3_errmsg16 $DB]
373 } {bind or column index out of range}
374 }
375 do_test bind-8.4 {
376 sqlite3_bind_null $VM 1
377 sqlite3_errmsg $DB
378 } {not an error}
379 do_test bind-8.5 {
380 catch { sqlite3_bind_null $VM 4 }
381 } {1}
382 do_test bind-8.6 {
383 sqlite3_errmsg $DB
384 } {bind or column index out of range}
385 ifcapable {utf16} {
386 do_test bind-8.7 {
387 encoding convertfrom unicode [sqlite3_errmsg16 $DB]
388 } {bind or column index out of range}
389 }
390  
391 do_test bind-8.8 {
392 catch { sqlite3_bind_blob $VM 0 "abc" 3 }
393 } {1}
394 do_test bind-8.9 {
395 catch { sqlite3_bind_blob $VM 4 "abc" 3 }
396 } {1}
397 do_test bind-8.10 {
398 catch { sqlite3_bind_text $VM 0 "abc" 3 }
399 } {1}
400 ifcapable {utf16} {
401 do_test bind-8.11 {
402 catch { sqlite3_bind_text16 $VM 4 "abc" 2 }
403 } {1}
404 }
405 do_test bind-8.12 {
406 catch { sqlite3_bind_int $VM 0 5 }
407 } {1}
408 do_test bind-8.13 {
409 catch { sqlite3_bind_int $VM 4 5 }
410 } {1}
411 do_test bind-8.14 {
412 catch { sqlite3_bind_double $VM 0 5.0 }
413 } {1}
414 do_test bind-8.15 {
415 catch { sqlite3_bind_double $VM 4 6.0 }
416 } {1}
417  
418 do_test bind-8.99 {
419 sqlite3_finalize $VM
420 } SQLITE_OK
421  
422 set iMaxVar $SQLITE_MAX_VARIABLE_NUMBER
423 set zError "(1) variable number must be between ?1 and ?$iMaxVar"
424 do_test bind-9.1 {
425 execsql {
426 CREATE TABLE t2(a,b,c,d,e,f);
427 }
428 set rc [catch {
429 sqlite3_prepare $DB {
430 INSERT INTO t2(a) VALUES(?0)
431 } -1 TAIL
432 } msg]
433 lappend rc $msg
434 } [list 1 $zError]
435 do_test bind-9.2 {
436 set rc [catch {
437 sqlite3_prepare $DB "INSERT INTO t2(a) VALUES(?[expr $iMaxVar+1])" -1 TAIL
438 } msg]
439 lappend rc $msg
440 } [list 1 $zError]
441 do_test bind-9.3.1 {
442 set VM [
443 sqlite3_prepare $DB "
444 INSERT INTO t2(a,b) VALUES(?1,?$iMaxVar)
445 " -1 TAIL
446 ]
447 sqlite3_bind_parameter_count $VM
448 } $iMaxVar
449 catch {sqlite3_finalize $VM}
450 do_test bind-9.3.2 {
451 set VM [
452 sqlite3_prepare $DB "
453 INSERT INTO t2(a,b) VALUES(?2,?[expr $iMaxVar - 1])
454 " -1 TAIL
455 ]
456 sqlite3_bind_parameter_count $VM
457 } [expr {$iMaxVar - 1}]
458 catch {sqlite3_finalize $VM}
459 do_test bind-9.4 {
460 set VM [
461 sqlite3_prepare $DB "
462 INSERT INTO t2(a,b,c,d) VALUES(?1,?[expr $iMaxVar - 2],?,?)
463 " -1 TAIL
464 ]
465 sqlite3_bind_parameter_count $VM
466 } $iMaxVar
467 do_test bind-9.5 {
468 sqlite3_bind_int $VM 1 1
469 sqlite3_bind_int $VM [expr $iMaxVar - 2] 999
470 sqlite3_bind_int $VM [expr $iMaxVar - 1] 1000
471 sqlite3_bind_int $VM $iMaxVar 1001
472 sqlite3_step $VM
473 } SQLITE_DONE
474 do_test bind-9.6 {
475 sqlite3_finalize $VM
476 } SQLITE_OK
477 do_test bind-9.7 {
478 execsql {SELECT * FROM t2}
479 } {1 999 1000 1001 {} {}}
480  
481 ifcapable {tclvar} {
482 do_test bind-10.1 {
483 set VM [
484 sqlite3_prepare $DB {
485 INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,$abc,:abc,$ab,$abc,:abc)
486 } -1 TAIL
487 ]
488 sqlite3_bind_parameter_count $VM
489 } 3
490 set v1 {$abc}
491 set v2 {$ab}
492 }
493 ifcapable {!tclvar} {
494 do_test bind-10.1 {
495 set VM [
496 sqlite3_prepare $DB {
497 INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,:xyz,:abc,:xy,:xyz,:abc)
498 } -1 TAIL
499 ]
500 sqlite3_bind_parameter_count $VM
501 } 3
502 set v1 {:xyz}
503 set v2 {:xy}
504 }
505 do_test bind-10.2 {
506 sqlite3_bind_parameter_index $VM :abc
507 } 1
508 do_test bind-10.3 {
509 sqlite3_bind_parameter_index $VM $v1
510 } 2
511 do_test bind-10.4 {
512 sqlite3_bind_parameter_index $VM $v2
513 } 3
514 do_test bind-10.5 {
515 sqlite3_bind_parameter_name $VM 1
516 } :abc
517 do_test bind-10.6 {
518 sqlite3_bind_parameter_name $VM 2
519 } $v1
520 do_test bind-10.7 {
521 sqlite3_bind_parameter_name $VM 3
522 } $v2
523 do_test bind-10.7.1 {
524 sqlite3_bind_parameter_name 0 1 ;# Ignore if VM is NULL
525 } {}
526 do_test bind-10.7.2 {
527 sqlite3_bind_parameter_name $VM 0 ;# Ignore if index too small
528 } {}
529 do_test bind-10.7.3 {
530 sqlite3_bind_parameter_name $VM 4 ;# Ignore if index is too big
531 } {}
532 do_test bind-10.8 {
533 sqlite3_bind_int $VM 1 1
534 sqlite3_bind_int $VM 2 2
535 sqlite3_bind_int $VM 3 3
536 sqlite3_step $VM
537 } SQLITE_DONE
538 do_test bind-10.8.1 {
539 # Binding attempts after program start should fail
540 set rc [catch {
541 sqlite3_bind_int $VM 1 1
542 } msg]
543 lappend rc $msg
544 } {1 {}}
545 do_test bind-10.9 {
546 sqlite3_finalize $VM
547 } SQLITE_OK
548 do_test bind-10.10 {
549 execsql {SELECT * FROM t2}
550 } {1 999 1000 1001 {} {} 1 2 1 3 2 1}
551  
552 # Ticket #918
553 #
554 do_test bind-10.11 {
555 # catch {sqlite3_finalize $VM}
556 set VM [
557 sqlite3_prepare $DB {
558 INSERT INTO t2(a,b,c,d,e,f) VALUES(:abc,?,?4,:pqr,:abc,?4)
559 } -1 TAIL
560 ]
561 sqlite3_bind_parameter_count $VM
562 } 5
563 do_test bind-10.11.1 {
564 sqlite3_bind_parameter_index 0 :xyz ;# ignore NULL VM arguments
565 } 0
566 do_test bind-10.12 {
567 sqlite3_bind_parameter_index $VM :xyz
568 } 0
569 do_test bind-10.13 {
570 sqlite3_bind_parameter_index $VM {}
571 } 0
572 do_test bind-10.14 {
573 sqlite3_bind_parameter_index $VM :pqr
574 } 5
575 do_test bind-10.15 {
576 sqlite3_bind_parameter_index $VM ?4
577 } 4
578 do_test bind-10.16 {
579 sqlite3_bind_parameter_name $VM 1
580 } :abc
581 do_test bind-10.17 {
582 sqlite3_bind_parameter_name $VM 2
583 } {}
584 do_test bind-10.18 {
585 sqlite3_bind_parameter_name $VM 3
586 } {}
587 do_test bind-10.19 {
588 sqlite3_bind_parameter_name $VM 4
589 } {?4}
590 do_test bind-10.20 {
591 sqlite3_bind_parameter_name $VM 5
592 } :pqr
593 catch {sqlite3_finalize $VM}
594  
595 # Make sure we catch an unterminated "(" in a Tcl-style variable name
596 #
597 ifcapable tclvar {
598 do_test bind-11.1 {
599 catchsql {SELECT * FROM sqlite_master WHERE name=$abc(123 and sql NOT NULL;}
600 } {1 {unrecognized token: "$abc(123"}}
601 }
602  
603 if {[execsql {pragma encoding}]=="UTF-8"} {
604 # Test the ability to bind text that contains embedded '\000' characters.
605 # Make sure we can recover the entire input string.
606 #
607 do_test bind-12.1 {
608 execsql {
609 CREATE TABLE t3(x BLOB);
610 }
611 set VM [sqlite3_prepare $DB {INSERT INTO t3 VALUES(?)} -1 TAIL]
612 sqlite_bind $VM 1 not-used blob10
613 sqlite3_step $VM
614 sqlite3_finalize $VM
615 execsql {
616 SELECT typeof(x), length(x), quote(x),
617 length(cast(x AS BLOB)), quote(cast(x AS BLOB)) FROM t3
618 }
619 } {text 3 'abc' 10 X'6162630078797A007071'}
620 do_test bind-12.2 {
621 sqlite3_create_function $DB
622 execsql {
623 SELECT quote(cast(x_coalesce(x) AS blob)) FROM t3
624 }
625 } {X'6162630078797A007071'}
626 }
627  
628 # Test the operation of sqlite3_clear_bindings
629 #
630 do_test bind-13.1 {
631 set VM [sqlite3_prepare $DB {SELECT ?,?,?} -1 TAIL]
632 sqlite3_step $VM
633 list [sqlite3_column_type $VM 0] [sqlite3_column_type $VM 1] \
634 [sqlite3_column_type $VM 2]
635 } {NULL NULL NULL}
636 do_test bind-13.2 {
637 sqlite3_reset $VM
638 sqlite3_bind_int $VM 1 1
639 sqlite3_bind_int $VM 2 2
640 sqlite3_bind_int $VM 3 3
641 sqlite3_step $VM
642 list [sqlite3_column_type $VM 0] [sqlite3_column_type $VM 1] \
643 [sqlite3_column_type $VM 2]
644 } {INTEGER INTEGER INTEGER}
645 do_test bind-13.3 {
646 sqlite3_reset $VM
647 sqlite3_step $VM
648 list [sqlite3_column_type $VM 0] [sqlite3_column_type $VM 1] \
649 [sqlite3_column_type $VM 2]
650 } {INTEGER INTEGER INTEGER}
651 do_test bind-13.4 {
652 sqlite3_reset $VM
653 sqlite3_clear_bindings $VM
654 sqlite3_step $VM
655 list [sqlite3_column_type $VM 0] [sqlite3_column_type $VM 1] \
656 [sqlite3_column_type $VM 2]
657 } {NULL NULL NULL}
658 sqlite3_finalize $VM
659  
660 #--------------------------------------------------------------------
661 # These tests attempt to reproduce bug #3463.
662 #
663 proc param_names {db zSql} {
664 set ret [list]
665 set VM [sqlite3_prepare db $zSql -1 TAIL]
666 for {set ii 1} {$ii <= [sqlite3_bind_parameter_count $VM]} {incr ii} {
667 lappend ret [sqlite3_bind_parameter_name $VM $ii]
668 }
669 sqlite3_finalize $VM
670 set ret
671 }
672  
673 do_test bind-14.1 {
674 param_names db { SELECT @a, @b }
675 } {@a @b}
676 do_test bind-14.2 {
677 param_names db { SELECT NULL FROM (SELECT NULL) WHERE @a = @b }
678 } {@a @b}
679 do_test bind-14.3 {
680 param_names db { SELECT @a FROM (SELECT NULL) WHERE 1 = @b }
681 } {@a @b}
682 do_test bind-14.4 {
683 param_names db { SELECT @a, @b FROM (SELECT NULL) }
684 } {@a @b}
685  
686 #--------------------------------------------------------------------------
687 # Tests of the OP_Variable opcode where P3>1
688 #
689 do_test bind-15.1 {
690 db eval {CREATE TABLE t4(a,b,c,d,e,f,g,h);}
691 set VM [sqlite3_prepare db {
692 INSERT INTO t4(a,b,c,d,f,g,h,e) VALUES(?,?,?,?,?,?,?,?)
693 } -1 TAIL]
694 sqlite3_bind_int $VM 1 1
695 sqlite3_bind_int $VM 2 2
696 sqlite3_bind_int $VM 3 3
697 sqlite3_bind_int $VM 4 4
698 sqlite3_bind_int $VM 5 5
699 sqlite3_bind_int $VM 6 6
700 sqlite3_bind_int $VM 7 7
701 sqlite3_bind_int $VM 8 8
702 sqlite3_step $VM
703 sqlite3_finalize $VM
704 db eval {SELECT * FROM t4}
705 } {1 2 3 4 8 5 6 7}
706 do_test bind-15.2 {
707 db eval {DELETE FROM t4}
708 set VM [sqlite3_prepare db {
709 INSERT INTO t4(a,b,c,d,e,f,g,h) VALUES(?,?,?,?,?,?,?,?)
710 } -1 TAIL]
711 sqlite3_bind_int $VM 1 1
712 sqlite3_bind_int $VM 2 2
713 sqlite3_bind_int $VM 3 3
714 sqlite3_bind_int $VM 4 4
715 sqlite3_bind_int $VM 5 5
716 sqlite3_bind_int $VM 6 6
717 sqlite3_bind_int $VM 7 7
718 sqlite3_bind_int $VM 8 8
719 sqlite3_step $VM
720 sqlite3_finalize $VM
721 db eval {SELECT * FROM t4}
722 } {1 2 3 4 5 6 7 8}
723 do_test bind-15.3 {
724 db eval {DELETE FROM t4}
725 set VM [sqlite3_prepare db {
726 INSERT INTO t4(h,g,f,e,d,c,b,a) VALUES(?,?,?,?,?,?,?,?)
727 } -1 TAIL]
728 sqlite3_bind_int $VM 1 1
729 sqlite3_bind_int $VM 2 2
730 sqlite3_bind_int $VM 3 3
731 sqlite3_bind_int $VM 4 4
732 sqlite3_bind_int $VM 5 5
733 sqlite3_bind_int $VM 6 6
734 sqlite3_bind_int $VM 7 7
735 sqlite3_bind_int $VM 8 8
736 sqlite3_step $VM
737 sqlite3_finalize $VM
738 db eval {SELECT * FROM t4}
739 } {8 7 6 5 4 3 2 1}
740 do_test bind-15.4 {
741 db eval {DELETE FROM t4}
742 set VM [sqlite3_prepare db {
743 INSERT INTO t4(a,b,c,d,e,f,g,h) VALUES(?,?,?,?4,?,?6,?,?)
744 } -1 TAIL]
745 sqlite3_bind_int $VM 1 1
746 sqlite3_bind_int $VM 2 2
747 sqlite3_bind_int $VM 3 3
748 sqlite3_bind_int $VM 4 4
749 sqlite3_bind_int $VM 5 5
750 sqlite3_bind_int $VM 6 6
751 sqlite3_bind_int $VM 7 7
752 sqlite3_bind_int $VM 8 8
753 sqlite3_step $VM
754 sqlite3_finalize $VM
755 db eval {SELECT * FROM t4}
756 } {1 2 3 4 5 6 7 8}
757  
758 finish_test