1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/main.test Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,487 @@
1.4 +# 2001 September 15
1.5 +#
1.6 +# The author disclaims copyright to this source code. In place of
1.7 +# a legal notice, here is a blessing:
1.8 +#
1.9 +# May you do good and not evil.
1.10 +# May you find forgiveness for yourself and forgive others.
1.11 +# May you share freely, never taking more than you give.
1.12 +#
1.13 +#***********************************************************************
1.14 +# This file implements regression tests for SQLite library. The
1.15 +# focus of this file is exercising the code in main.c.
1.16 +#
1.17 +# $Id: main.test,v 1.29 2008/07/12 14:52:20 drh Exp $
1.18 +
1.19 +set testdir [file dirname $argv0]
1.20 +source $testdir/tester.tcl
1.21 +
1.22 +# Only do the next group of tests if the sqlite3_complete API is available
1.23 +#
1.24 +ifcapable {complete} {
1.25 +
1.26 +# Tests of the sqlite_complete() function.
1.27 +#
1.28 +do_test main-1.1 {
1.29 + db complete {This is a test}
1.30 +} {0}
1.31 +do_test main-1.2 {
1.32 + db complete {
1.33 + }
1.34 +} {1}
1.35 +do_test main-1.3 {
1.36 + db complete {
1.37 + -- a comment ;
1.38 + }
1.39 +} {1}
1.40 +do_test main-1.4 {
1.41 + db complete {
1.42 + -- a comment ;
1.43 + ;
1.44 + }
1.45 +} {1}
1.46 +do_test main-1.5 {
1.47 + db complete {DROP TABLE 'xyz;}
1.48 +} {0}
1.49 +do_test main-1.6 {
1.50 + db complete {DROP TABLE 'xyz';}
1.51 +} {1}
1.52 +do_test main-1.7 {
1.53 + db complete {DROP TABLE "xyz;}
1.54 +} {0}
1.55 +do_test main-1.8 {
1.56 + db complete {DROP TABLE "xyz';}
1.57 +} {0}
1.58 +do_test main-1.9 {
1.59 + db complete {DROP TABLE "xyz";}
1.60 +} {1}
1.61 +do_test main-1.10 {
1.62 + db complete {DROP TABLE xyz; hi}
1.63 +} {0}
1.64 +do_test main-1.11 {
1.65 + db complete {DROP TABLE xyz; }
1.66 +} {1}
1.67 +do_test main-1.12 {
1.68 + db complete {DROP TABLE xyz; -- hi }
1.69 +} {1}
1.70 +do_test main-1.13 {
1.71 + db complete {DROP TABLE xyz; -- hi
1.72 + }
1.73 +} {1}
1.74 +do_test main-1.14 {
1.75 + db complete {SELECT a-b FROM t1; }
1.76 +} {1}
1.77 +do_test main-1.15 {
1.78 + db complete {SELECT a/e FROM t1 }
1.79 +} {0}
1.80 +do_test main-1.16 {
1.81 + db complete {
1.82 + CREATE TABLE abc(x,y);
1.83 + }
1.84 +} {1}
1.85 +ifcapable {trigger} {
1.86 + do_test main-1.17 {
1.87 + db complete {
1.88 + CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
1.89 + }
1.90 + } {0}
1.91 + do_test main-1.18 {
1.92 + db complete {
1.93 + CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
1.94 + }
1.95 + } {1}
1.96 + do_test main-1.19 {
1.97 + db complete {
1.98 + CREATE TRIGGER xyz AFTER DELETE abc BEGIN
1.99 + UPDATE pqr;
1.100 + unknown command;
1.101 + }
1.102 + } {0}
1.103 + do_test main-1.20 {
1.104 + db complete {
1.105 + CREATE TRIGGER xyz AFTER DELETE backend BEGIN
1.106 + UPDATE pqr;
1.107 + }
1.108 + } {0}
1.109 + do_test main-1.21 {
1.110 + db complete {
1.111 + CREATE TRIGGER xyz AFTER DELETE end BEGIN
1.112 + SELECT a, b FROM end;
1.113 + }
1.114 + } {0}
1.115 + do_test main-1.22 {
1.116 + db complete {
1.117 + CREATE TRIGGER xyz AFTER DELETE end BEGIN
1.118 + SELECT a, b FROM end;
1.119 + END;
1.120 + }
1.121 + } {1}
1.122 + do_test main-1.23 {
1.123 + db complete {
1.124 + CREATE TRIGGER xyz AFTER DELETE end BEGIN
1.125 + SELECT a, b FROM end;
1.126 + END;
1.127 + SELECT a, b FROM end;
1.128 + }
1.129 + } {1}
1.130 + do_test main-1.24 {
1.131 + db complete {
1.132 + CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
1.133 + UPDATE pqr;
1.134 + }
1.135 + } {0}
1.136 + do_test main-1.25 {
1.137 + db complete {
1.138 + CREATE TRIGGER xyz AFTER DELETE backend BEGIN
1.139 + UPDATE cantor SET a=[;end;];;;
1.140 + }
1.141 + } {0}
1.142 + do_test main-1.26 {
1.143 + db complete {
1.144 + CREATE -- a comment
1.145 + TRIGGER exy AFTER DELETE backend BEGIN
1.146 + UPDATE pqr SET a=5;
1.147 + }
1.148 + } {0}
1.149 + do_test main-1.27.1 {
1.150 + db complete {
1.151 + CREATE -- a comment
1.152 + TRIGGERX tangentxx AFTER DELETE backend BEGIN
1.153 + UPDATE pqr SET a=5;
1.154 + }
1.155 + } {1}
1.156 + do_test main-1.27.2 {
1.157 + db complete {
1.158 + CREATE/**/TRIGGER tiger00 AFTER DELETE backend BEGIN
1.159 + UPDATE pqr SET a=5;
1.160 + }
1.161 + } {0}
1.162 + ifcapable {explain} {
1.163 + do_test main-1.27.3 {
1.164 + db complete {
1.165 + /* */ EXPLAIN -- A comment
1.166 + CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN
1.167 + UPDATE pqr SET a=5;
1.168 + }
1.169 + } {0}
1.170 + }
1.171 + do_test main-1.27.4 {
1.172 + db complete {
1.173 + BOGUS token
1.174 + CREATE TRIGGER xyz AFTER DELETE backend BEGIN
1.175 + UPDATE pqr SET a=5;
1.176 + }
1.177 + } {1}
1.178 + ifcapable {explain} {
1.179 + do_test main-1.27.5 {
1.180 + db complete {
1.181 + EXPLAIN
1.182 + CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
1.183 + UPDATE pqr SET a=5;
1.184 + }
1.185 + } {0}
1.186 + }
1.187 + do_test main-1.28 {
1.188 + db complete {
1.189 + CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
1.190 + UPDATE pqr SET a=5;
1.191 + }
1.192 + } {0}
1.193 + do_test main-1.29 {
1.194 + db complete {
1.195 + CREATE TRIGGER xyz AFTER DELETE backend BEGIN
1.196 + UPDATE pqr SET a=5;
1.197 + EXPLAIN select * from xyz;
1.198 + }
1.199 + } {0}
1.200 +
1.201 +} ;# end ifcapable {complete}
1.202 +
1.203 +}
1.204 +do_test main-1.30 {
1.205 + db complete {
1.206 + CREATE TABLE /* In comment ; */
1.207 + }
1.208 +} {0}
1.209 +do_test main-1.31 {
1.210 + db complete {
1.211 + CREATE TABLE /* In comment ; */ hi;
1.212 + }
1.213 +} {1}
1.214 +do_test main-1.31 {
1.215 + db complete {
1.216 + CREATE TABLE /* In comment ; */;
1.217 + }
1.218 +} {1}
1.219 +do_test main-1.32 {
1.220 + db complete {
1.221 + stuff;
1.222 + /*
1.223 + CREATE TABLE
1.224 + multiple lines
1.225 + of text
1.226 + */
1.227 + }
1.228 +} {1}
1.229 +do_test main-1.33 {
1.230 + db complete {
1.231 + /*
1.232 + CREATE TABLE
1.233 + multiple lines
1.234 + of text;
1.235 + }
1.236 +} {0}
1.237 +do_test main-1.34 {
1.238 + db complete {
1.239 + /*
1.240 + CREATE TABLE
1.241 + multiple lines "*/
1.242 + of text;
1.243 + }
1.244 +} {1}
1.245 +do_test main-1.35 {
1.246 + db complete {hi /**/ there;}
1.247 +} {1}
1.248 +do_test main-1.36 {
1.249 + db complete {hi there/***/;}
1.250 +} {1}
1.251 +do_test main-1.37 {
1.252 + db complete {hi there/**}
1.253 +} {0}
1.254 +do_test main-1.38 {
1.255 + db complete {hi [there}
1.256 +} {0}
1.257 +
1.258 +ifcapable {trigger} {
1.259 + # Characters less than \040 can never be part of an identifier.
1.260 + # Characters greater than \u177 are always identifier characters.
1.261 + do_test main-1.100 {
1.262 + db complete "create \037\036\035\034trigger\001\002;"
1.263 + } {1}
1.264 + do_test main-1.101 {
1.265 + db complete "create trigger\200;"
1.266 + } {1}
1.267 + do_test main-1.102 {
1.268 + db complete "create \200trigger;"
1.269 + } {1}
1.270 +}
1.271 +
1.272 +
1.273 +# Try to open a database with a corrupt database file.
1.274 +#
1.275 +do_test main-2.0 {
1.276 + catch {db close}
1.277 + file delete -force test.db
1.278 + set fd [open test.db w]
1.279 + puts $fd hi!
1.280 + close $fd
1.281 + set v [catch {sqlite3 db test.db} msg]
1.282 + if {$v} {lappend v $msg} {lappend v {}}
1.283 +} {0 {}}
1.284 +
1.285 +# Here are some tests for tokenize.c.
1.286 +#
1.287 +do_test main-3.1 {
1.288 + catch {db close}
1.289 + foreach f [glob -nocomplain testdb/*] {file delete -force $f}
1.290 + file delete -force testdb
1.291 + sqlite3 db testdb
1.292 + set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
1.293 + lappend v $msg
1.294 +} {1 {unrecognized token: "!!"}}
1.295 +do_test main-3.2 {
1.296 + catch {db close}
1.297 + foreach f [glob -nocomplain testdb/*] {file delete -force $f}
1.298 + file delete -force testdb
1.299 + sqlite3 db testdb
1.300 + set v [catch {execsql {SELECT * from T1 where ^x}} msg]
1.301 + lappend v $msg
1.302 +} {1 {unrecognized token: "^"}}
1.303 +do_test main-3.2.2 {
1.304 + catchsql {select 'abc}
1.305 +} {1 {unrecognized token: "'abc"}}
1.306 +do_test main-3.2.3 {
1.307 + catchsql {select "abc}
1.308 +} {1 {unrecognized token: ""abc"}}
1.309 +do_test main-3.2.4 {
1.310 + catchsql {select [abc}
1.311 +} {1 {unrecognized token: "[abc"}}
1.312 +do_test main-3.2.5 {
1.313 + catchsql {select x'4869}
1.314 +} {1 {unrecognized token: "x'4869"}}
1.315 +do_test main-3.2.6 {
1.316 + catchsql {select x'4869'}
1.317 +} {0 Hi}
1.318 +do_test main-3.2.7 {
1.319 + catchsql {select x'48695'}
1.320 +} {1 {unrecognized token: "x'48695'"}}
1.321 +do_test main-3.2.8 {
1.322 + catchsql {select x'486x'}
1.323 +} {1 {unrecognized token: "x'486x'"}}
1.324 +do_test main-3.2.9 {
1.325 + catchsql {select $abc(}
1.326 +} {1 {unrecognized token: "$abc("}}
1.327 +do_test main-3.2.10 {
1.328 + catchsql {select $abc(x}
1.329 +} {1 {unrecognized token: "$abc(x"}}
1.330 +set xyz 123
1.331 +do_test main-3.2.11 {
1.332 + catchsql {select $::xyz}
1.333 +} {0 123}
1.334 +namespace eval ::testnamespace {
1.335 + variable xyz 321
1.336 +}
1.337 +do_test main-3.2.12 {
1.338 + catchsql {select $testnamespace::xyz}
1.339 +} {0 321}
1.340 +do_test main-3.2.13 {
1.341 + catchsql {select $(abc)}
1.342 +} {1 {unrecognized token: "$"}}
1.343 +do_test main-3.2.14 {
1.344 + set hi\u1234x 987
1.345 + db eval "select \$hi\u1234x"
1.346 +} {987}
1.347 +do_test main-3.2.15 {
1.348 + catchsql "select 456\u1234"
1.349 +} [list 1 "unrecognized token: \"456\u1234\""]
1.350 +do_test main-3.2.16 {
1.351 + catchsql {select cast(3.14e+4 AS integer)}
1.352 +} {0 31400}
1.353 +do_test main-3.2.17 {
1.354 + catchsql {select cast(3.14e+04 AS integer)}
1.355 +} {0 31400}
1.356 +do_test main-3.2.18 {
1.357 + catchsql {select cast(3.14e+004 AS integer)}
1.358 +} {0 31400}
1.359 +do_test main-3.2.19 {
1.360 + catchsql {select cast(3.14e4 AS integer)}
1.361 +} {0 31400}
1.362 +do_test main-3.2.20 {
1.363 + catchsql {select cast(3.14e04 AS integer)}
1.364 +} {0 31400}
1.365 +do_test main-3.2.21 {
1.366 + catchsql {select cast(3.14e004 AS integer)}
1.367 +} {0 31400}
1.368 +do_test main-3.2.16 {
1.369 + catchsql {select cast(3.14E+4 AS integer)}
1.370 +} {0 31400}
1.371 +do_test main-3.2.17 {
1.372 + catchsql {select cast(3.14E+04 AS integer)}
1.373 +} {0 31400}
1.374 +do_test main-3.2.18 {
1.375 + catchsql {select cast(3.14E+004 AS integer)}
1.376 +} {0 31400}
1.377 +do_test main-3.2.19 {
1.378 + catchsql {select cast(3.14E4 AS integer)}
1.379 +} {0 31400}
1.380 +do_test main-3.2.20 {
1.381 + catchsql {select cast(3.14E04 AS integer)}
1.382 +} {0 31400}
1.383 +do_test main-3.2.21 {
1.384 + catchsql {select cast(3.14E004 AS integer)}
1.385 +} {0 31400}
1.386 +do_test main-3.2.22 {
1.387 + catchsql {select cast(3.14e-4 * 1e8 AS integer)}
1.388 +} {0 31400}
1.389 +do_test main-3.2.23 {
1.390 + catchsql {select cast(3.14E-04 * 1E08 AS integer)}
1.391 +} {0 31400}
1.392 +do_test main-3.2.24 {
1.393 + catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}
1.394 +} {0 31400}
1.395 +do_test main-3.2.25 {
1.396 + catchsql {select 123/*abc}
1.397 +} {0 123}
1.398 +do_test main-3.2.26 {
1.399 + catchsql {select 123/***abc}
1.400 +} {0 123}
1.401 +do_test main-3.2.27 {
1.402 + catchsql {select 123/*/*2}
1.403 +} {0 123}
1.404 +do_test main-3.2.28 {
1.405 + catchsql {select 123/**/*2}
1.406 +} {0 246}
1.407 +do_test main-3.2.29 {
1.408 + catchsql {select 123/}
1.409 +} {1 {near "/": syntax error}}
1.410 +do_test main-3.2.30 {
1.411 + catchsql {select 123--5}
1.412 +} {0 123}
1.413 +
1.414 +
1.415 +do_test main-3.3 {
1.416 + catch {db close}
1.417 + foreach f [glob -nocomplain testdb/*] {file delete -force $f}
1.418 + file delete -force testdb
1.419 + sqlite3 db testdb
1.420 + execsql {
1.421 + create table T1(X REAL); /* C-style comments allowed */
1.422 + insert into T1 values(0.5);
1.423 + insert into T1 values(0.5e2);
1.424 + insert into T1 values(0.5e-002);
1.425 + insert into T1 values(5e-002);
1.426 + insert into T1 values(-5.0e-2);
1.427 + insert into T1 values(-5.1e-2);
1.428 + insert into T1 values(0.5e2);
1.429 + insert into T1 values(0.5E+02);
1.430 + insert into T1 values(5E+02);
1.431 + insert into T1 values(5.0E+03);
1.432 + select x*10 from T1 order by x*5;
1.433 + }
1.434 +} {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
1.435 +do_test main-3.4 {
1.436 + set v [catch {execsql {create bogus}} msg]
1.437 + lappend v $msg
1.438 +} {1 {near "bogus": syntax error}}
1.439 +do_test main-3.5 {
1.440 + set v [catch {execsql {create}} msg]
1.441 + lappend v $msg
1.442 +} {1 {near "create": syntax error}}
1.443 +do_test main-3.6 {
1.444 + catchsql {SELECT 'abc' + #9}
1.445 +} {1 {near "#9": syntax error}}
1.446 +
1.447 +# The following test-case tests the linked list code used to manage
1.448 +# sqlite3_vfs structures.
1.449 +if {$::tcl_platform(platform)=="unix"} {
1.450 + ifcapable threadsafe {
1.451 + do_test main-4.1 {
1.452 +
1.453 + sqlite3_crash_enable 1
1.454 + sqlite3_crash_enable 0
1.455 +
1.456 + sqlite3async_enable 1
1.457 + sqlite3async_enable 0
1.458 +
1.459 + sqlite3_crash_enable 1
1.460 + sqlite3async_enable 1
1.461 + sqlite3_crash_enable 0
1.462 + sqlite3async_enable 0
1.463 +
1.464 + sqlite3_crash_enable 1
1.465 + sqlite3async_enable 1
1.466 + sqlite3async_enable 0
1.467 + sqlite3_crash_enable 0
1.468 +
1.469 + sqlite3async_enable 1
1.470 + sqlite3_crash_enable 1
1.471 + sqlite3_crash_enable 0
1.472 + sqlite3async_enable 0
1.473 +
1.474 + sqlite3async_enable 1
1.475 + sqlite3_crash_enable 1
1.476 + sqlite3async_enable 0
1.477 + sqlite3_crash_enable 0
1.478 + } {}
1.479 + do_test main-4.2 {
1.480 + set rc [catch {sqlite3 db test.db -vfs crash} msg]
1.481 + list $rc $msg
1.482 + } {1 {no such vfs: crash}}
1.483 + do_test main-4.3 {
1.484 + set rc [catch {sqlite3 db test.db -vfs async} msg]
1.485 + list $rc $msg
1.486 + } {1 {no such vfs: async}}
1.487 + }
1.488 +}
1.489 +
1.490 +finish_test