wasCSharpSQLite – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 # 2001 September 15
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 file is exercising the code in main.c.
13 #
14 # $Id: main.test,v 1.32 2009/04/28 04:51:29 drh Exp $
15  
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18  
19 # Only do the next group of tests if the sqlite3_complete API is available
20 #
21 ifcapable {complete} {
22  
23 # Tests of the sqlite_complete() function.
24 #
25 do_test main-1.1 {
26 db complete {This is a test}
27 } {0}
28 do_test main-1.2.0 {
29 db complete {
30 }
31 } {0}
32 do_test main-1.2.1 {
33 db complete {}
34 } {0}
35 do_test main-1.3.0 {
36 db complete {
37 -- a comment ;
38 }
39 } {0}
40 do_test main-1.3.1 {
41 db complete {
42 /* a comment ; */
43 }
44 } {0}
45 do_test main-1.4.0 {
46 db complete {
47 -- a comment ;
48 ;
49 }
50 } {1}
51 do_test main-1.4.1 {
52 db complete {
53 /* a comment ; */
54 ;
55 }
56 } {1}
57 do_test main-1.4.2 {
58 db complete {
59 /* a comment ; */ ;
60 }
61 } {1}
62 do_test main-1.5 {
63 db complete {DROP TABLE 'xyz;}
64 } {0}
65 do_test main-1.6 {
66 db complete {DROP TABLE 'xyz';}
67 } {1}
68 do_test main-1.7 {
69 db complete {DROP TABLE "xyz;}
70 } {0}
71 do_test main-1.8 {
72 db complete {DROP TABLE "xyz';}
73 } {0}
74 do_test main-1.9 {
75 db complete {DROP TABLE "xyz";}
76 } {1}
77 do_test main-1.10 {
78 db complete {DROP TABLE xyz; hi}
79 } {0}
80 do_test main-1.11 {
81 db complete {DROP TABLE xyz; }
82 } {1}
83 do_test main-1.12 {
84 db complete {DROP TABLE xyz; -- hi }
85 } {1}
86 do_test main-1.13 {
87 db complete {DROP TABLE xyz; -- hi
88 }
89 } {1}
90 do_test main-1.14 {
91 db complete {SELECT a-b FROM t1; }
92 } {1}
93 do_test main-1.15 {
94 db complete {SELECT a/e FROM t1 }
95 } {0}
96 do_test main-1.16 {
97 db complete {
98 CREATE TABLE abc(x,y);
99 }
100 } {1}
101 ifcapable {trigger} {
102 do_test main-1.17 {
103 db complete {
104 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
105 }
106 } {0}
107 do_test main-1.17.2 {
108 db complete {
109 EXPLAIN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
110 }
111 } {0}
112 do_test main-1.17.3 {
113 db complete {
114 EXPLAIN QUERY PLAN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
115 }
116 } {0}
117 do_test main-1.18 {
118 db complete {
119 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
120 }
121 } {1}
122 do_test main-1.19 {
123 db complete {
124 CREATE TRIGGER xyz AFTER DELETE abc BEGIN
125 UPDATE pqr;
126 unknown command;
127 }
128 } {0}
129 do_test main-1.20 {
130 db complete {
131 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
132 UPDATE pqr;
133 }
134 } {0}
135 do_test main-1.21 {
136 db complete {
137 CREATE TRIGGER xyz AFTER DELETE end BEGIN
138 SELECT a, b FROM end;
139 }
140 } {0}
141 do_test main-1.22 {
142 db complete {
143 CREATE TRIGGER xyz AFTER DELETE end BEGIN
144 SELECT a, b FROM end;
145 END;
146 }
147 } {1}
148 do_test main-1.23 {
149 db complete {
150 CREATE TRIGGER xyz AFTER DELETE end BEGIN
151 SELECT a, b FROM end;
152 END;
153 SELECT a, b FROM end;
154 }
155 } {1}
156 do_test main-1.24 {
157 db complete {
158 CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
159 UPDATE pqr;
160 }
161 } {0}
162 do_test main-1.25 {
163 db complete {
164 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
165 UPDATE cantor SET a=[;end;];;;
166 }
167 } {0}
168 do_test main-1.26 {
169 db complete {
170 CREATE -- a comment
171 TRIGGER exy AFTER DELETE backend BEGIN
172 UPDATE pqr SET a=5;
173 }
174 } {0}
175 do_test main-1.27.1 {
176 db complete {
177 CREATE -- a comment
178 TRIGGERX tangentxx AFTER DELETE backend BEGIN
179 UPDATE pqr SET a=5;
180 }
181 } {1}
182 do_test main-1.27.2 {
183 db complete {
184 CREATE/**/TRIGGER tiger00 AFTER DELETE backend BEGIN
185 UPDATE pqr SET a=5;
186 }
187 } {0}
188 ifcapable {explain} {
189 do_test main-1.27.3 {
190 db complete {
191 /* */ EXPLAIN -- A comment
192 CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN
193 UPDATE pqr SET a=5;
194 }
195 } {0}
196 }
197 do_test main-1.27.4 {
198 db complete {
199 BOGUS token
200 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
201 UPDATE pqr SET a=5;
202 }
203 } {1}
204 ifcapable {explain} {
205 do_test main-1.27.5 {
206 db complete {
207 EXPLAIN
208 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
209 UPDATE pqr SET a=5;
210 }
211 } {0}
212 }
213 do_test main-1.28 {
214 db complete {
215 CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
216 UPDATE pqr SET a=5;
217 }
218 } {0}
219 do_test main-1.29 {
220 db complete {
221 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
222 UPDATE pqr SET a=5;
223 EXPLAIN select * from xyz;
224 }
225 } {0}
226  
227 } ;# end ifcapable {complete}
228  
229 }
230 do_test main-1.30 {
231 db complete {
232 CREATE TABLE /* In comment ; */
233 }
234 } {0}
235 do_test main-1.31 {
236 db complete {
237 CREATE TABLE /* In comment ; */ hi;
238 }
239 } {1}
240 do_test main-1.31 {
241 db complete {
242 CREATE TABLE /* In comment ; */;
243 }
244 } {1}
245 do_test main-1.32 {
246 db complete {
247 stuff;
248 /*
249 CREATE TABLE
250 multiple lines
251 of text
252 */
253 }
254 } {1}
255 do_test main-1.33 {
256 db complete {
257 /*
258 CREATE TABLE
259 multiple lines
260 of text;
261 }
262 } {0}
263 do_test main-1.34 {
264 db complete {
265 /*
266 CREATE TABLE
267 multiple lines "*/
268 of text;
269 }
270 } {1}
271 do_test main-1.35 {
272 db complete {hi /**/ there;}
273 } {1}
274 do_test main-1.36 {
275 db complete {hi there/***/;}
276 } {1}
277 do_test main-1.37 {
278 db complete {hi there/**}
279 } {0}
280 do_test main-1.38 {
281 db complete {hi [there}
282 } {0}
283  
284 ifcapable {trigger} {
285 # Characters less than \040 can never be part of an identifier.
286 # Characters greater than \u177 are always identifier characters.
287 do_test main-1.100 {
288 db complete "create \037\036\035\034trigger\001\002;"
289 } {1}
290 do_test main-1.101 {
291 db complete "create trigger\200;"
292 } {1}
293 do_test main-1.102 {
294 db complete "create \200trigger;"
295 } {1}
296 }
297  
298  
299 # Try to open a database with a corrupt database file.
300 #
301 if {[permutation] == ""} {
302 do_test main-2.0 {
303 catch {db close}
304 file delete -force test.db
305 set fd [open test.db w]
306 puts $fd hi!
307 close $fd
308 set v [catch {sqlite3 db test.db} msg]
309 if {$v} {lappend v $msg} {lappend v {}}
310 } {0 {}}
311 }
312  
313 # Here are some tests for tokenize.c.
314 #
315 do_test main-3.1 {
316 catch {db close}
317 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
318 file delete -force testdb
319 sqlite3 db testdb
320 set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
321 lappend v $msg
322 } {1 {unrecognized token: "!!"}}
323 do_test main-3.2 {
324 catch {db close}
325 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
326 file delete -force testdb
327 sqlite3 db testdb
328 set v [catch {execsql {SELECT * from T1 where ^x}} msg]
329 lappend v $msg
330 } {1 {unrecognized token: "^"}}
331 do_test main-3.2.2 {
332 catchsql {select 'abc}
333 } {1 {unrecognized token: "'abc"}}
334 do_test main-3.2.3 {
335 catchsql {select "abc}
336 } {1 {unrecognized token: ""abc"}}
337 do_test main-3.2.4 {
338 catchsql {select [abc}
339 } {1 {unrecognized token: "[abc"}}
340 do_test main-3.2.5 {
341 catchsql {select x'4869}
342 } {1 {unrecognized token: "x'4869"}}
343 do_test main-3.2.6 {
344 catchsql {select x'4869'}
345 } {0 Hi}
346 do_test main-3.2.7 {
347 catchsql {select x'48695'}
348 } {1 {unrecognized token: "x'48695'"}}
349 do_test main-3.2.8 {
350 catchsql {select x'486x'}
351 } {1 {unrecognized token: "x'486x'"}}
352 do_test main-3.2.9 {
353 catchsql {select $abc(}
354 } {1 {unrecognized token: "$abc("}}
355 do_test main-3.2.10 {
356 catchsql {select $abc(x}
357 } {1 {unrecognized token: "$abc(x"}}
358 set xyz 123
359 do_test main-3.2.11 {
360 catchsql {select $::xyz}
361 } {0 123}
362 namespace eval ::testnamespace {
363 variable xyz 321
364 }
365 do_test main-3.2.12 {
366 catchsql {select $testnamespace::xyz}
367 } {0 321}
368 do_test main-3.2.13 {
369 catchsql {select $(abc)}
370 } {1 {unrecognized token: "$"}}
371 do_test main-3.2.14 {
372 set hi\u1234x 987
373 db eval "select \$hi\u1234x"
374 } {987}
375 do_test main-3.2.15 {
376 catchsql "select 456\u1234"
377 } [list 1 "unrecognized token: \"456\u1234\""]
378 do_test main-3.2.16 {
379 catchsql {select cast(3.14e+4 AS integer)}
380 } {0 31400}
381 do_test main-3.2.17 {
382 catchsql {select cast(3.14e+04 AS integer)}
383 } {0 31400}
384 do_test main-3.2.18 {
385 catchsql {select cast(3.14e+004 AS integer)}
386 } {0 31400}
387 do_test main-3.2.19 {
388 catchsql {select cast(3.14e4 AS integer)}
389 } {0 31400}
390 do_test main-3.2.20 {
391 catchsql {select cast(3.14e04 AS integer)}
392 } {0 31400}
393 do_test main-3.2.21 {
394 catchsql {select cast(3.14e004 AS integer)}
395 } {0 31400}
396 do_test main-3.2.16 {
397 catchsql {select cast(3.14E+4 AS integer)}
398 } {0 31400}
399 do_test main-3.2.17 {
400 catchsql {select cast(3.14E+04 AS integer)}
401 } {0 31400}
402 do_test main-3.2.18 {
403 catchsql {select cast(3.14E+004 AS integer)}
404 } {0 31400}
405 do_test main-3.2.19 {
406 catchsql {select cast(3.14E4 AS integer)}
407 } {0 31400}
408 do_test main-3.2.20 {
409 catchsql {select cast(3.14E04 AS integer)}
410 } {0 31400}
411 do_test main-3.2.21 {
412 catchsql {select cast(3.14E004 AS integer)}
413 } {0 31400}
414 do_test main-3.2.22 {
415 catchsql {select cast(3.14e-4 * 1e8 AS integer)}
416 } {0 31400}
417 do_test main-3.2.23 {
418 catchsql {select cast(3.14E-04 * 1E08 AS integer)}
419 } {0 31400}
420 do_test main-3.2.24 {
421 catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}
422 } {0 31400}
423 do_test main-3.2.25 {
424 catchsql {select 123/*abc}
425 } {0 123}
426 do_test main-3.2.26 {
427 catchsql {select 123/***abc}
428 } {0 123}
429 do_test main-3.2.27 {
430 catchsql {select 123/*/*2}
431 } {0 123}
432 do_test main-3.2.28 {
433 catchsql {select 123/**/*2}
434 } {0 246}
435 do_test main-3.2.29 {
436 catchsql {select 123/}
437 } {1 {near "/": syntax error}}
438 do_test main-3.2.30 {
439 catchsql {select 123--5}
440 } {0 123}
441  
442  
443 do_test main-3.3 {
444 catch {db close}
445 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
446 file delete -force testdb
447 sqlite3 db testdb
448 execsql {
449 create table T1(X REAL); /* C-style comments allowed */
450 insert into T1 values(0.5);
451 insert into T1 values(0.5e2);
452 insert into T1 values(0.5e-002);
453 insert into T1 values(5e-002);
454 insert into T1 values(-5.0e-2);
455 insert into T1 values(-5.1e-2);
456 insert into T1 values(0.5e2);
457 insert into T1 values(0.5E+02);
458 insert into T1 values(5E+02);
459 insert into T1 values(5.0E+03);
460 select x*10 from T1 order by x*5;
461 }
462 } {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
463 do_test main-3.4 {
464 set v [catch {execsql {create bogus}} msg]
465 lappend v $msg
466 } {1 {near "bogus": syntax error}}
467 do_test main-3.5 {
468 set v [catch {execsql {create}} msg]
469 lappend v $msg
470 } {1 {near "create": syntax error}}
471 do_test main-3.6 {
472 catchsql {SELECT 'abc' + #9}
473 } {1 {near "#9": syntax error}}
474  
475 # The following test-case tests the linked list code used to manage
476 # sqlite3_vfs structures.
477 if {$::tcl_platform(platform)=="unix"
478 && [info command sqlite3async_initialize]!=""} {
479 ifcapable threadsafe {
480 do_test main-4.1 {
481 sqlite3_crash_enable 1
482 sqlite3_crash_enable 0
483  
484 sqlite3async_initialize "" 1
485 sqlite3async_shutdown
486  
487 sqlite3_crash_enable 1
488 sqlite3async_initialize "" 1
489 sqlite3_crash_enable 0
490 sqlite3async_shutdown
491  
492 sqlite3_crash_enable 1
493 sqlite3async_initialize "" 1
494 sqlite3async_shutdown
495 sqlite3_crash_enable 0
496  
497 sqlite3async_initialize "" 1
498 sqlite3_crash_enable 1
499 sqlite3_crash_enable 0
500 sqlite3async_shutdown
501  
502 sqlite3async_initialize "" 1
503 sqlite3_crash_enable 1
504 sqlite3async_shutdown
505 sqlite3_crash_enable 0
506 } {}
507 do_test main-4.2 {
508 set rc [catch {sqlite3 db test.db -vfs crash} msg]
509 list $rc $msg
510 } {1 {no such vfs: crash}}
511 do_test main-4.3 {
512 set rc [catch {sqlite3 db test.db -vfs async} msg]
513 list $rc $msg
514 } {1 {no such vfs: async}}
515 }
516 }
517  
518 finish_test