AryaWu/sqlite
0
1# 2001 September 152#3# The author disclaims copyright to this source code. In place of4# 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. The12# 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 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18 19# Only do the next group of tests if the sqlite3_complete API is available20#21ifcapable {complete} {22 23# Tests of the sqlite_complete() function.24#25do_test main-1.1 {26 db complete {This is a test}27} {0}28do_test main-1.2.0 {29 db complete {30 }31} {0}32do_test main-1.2.1 {33 db complete {}34} {0}35do_test main-1.3.0 {36 db complete {37 -- a comment ;38 }39} {0}40do_test main-1.3.1 {41 db complete {42 /* a comment ; */43 }44} {0}45do_test main-1.4.0 {46 db complete {47 -- a comment ;48 ;49 }50} {1}51do_test main-1.4.1 {52 db complete {53 /* a comment ; */54 ;55 }56} {1}57do_test main-1.4.2 {58 db complete {59 /* a comment ; */ ;60 }61} {1}62do_test main-1.5 {63 db complete {DROP TABLE 'xyz;}64} {0}65do_test main-1.6 {66 db complete {DROP TABLE 'xyz';}67} {1}68do_test main-1.7 {69 db complete {DROP TABLE "xyz;}70} {0}71do_test main-1.8 {72 db complete {DROP TABLE "xyz';}73} {0}74do_test main-1.9 {75 db complete {DROP TABLE "xyz";}76} {1}77do_test main-1.10 {78 db complete {DROP TABLE xyz; hi}79} {0}80do_test main-1.11 {81 db complete {DROP TABLE xyz; }82} {1}83do_test main-1.12 {84 db complete {DROP TABLE xyz; -- hi }85} {1}86do_test main-1.13 {87 db complete {DROP TABLE xyz; -- hi88 }89} {1}90do_test main-1.14 {91 db complete {SELECT a-b FROM t1; }92} {1}93do_test main-1.15 {94 db complete {SELECT a/e FROM t1 }95} {0}96do_test main-1.16 {97 db complete {98 CREATE TABLE abc(x,y);99 }100} {1}101ifcapable {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 BEGIN125 UPDATE pqr;126 unknown command;127 }128 } {0}129 do_test main-1.20 {130 db complete {131 CREATE TRIGGER xyz AFTER DELETE backend BEGIN132 UPDATE pqr;133 }134 } {0}135 do_test main-1.21 {136 db complete {137 CREATE TRIGGER xyz AFTER DELETE end BEGIN138 SELECT a, b FROM end;139 }140 } {0}141 do_test main-1.22 {142 db complete {143 CREATE TRIGGER xyz AFTER DELETE end BEGIN144 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 BEGIN151 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;] BEGIN159 UPDATE pqr;160 }161 } {0}162 do_test main-1.25 {163 db complete {164 CREATE TRIGGER xyz AFTER DELETE backend BEGIN165 UPDATE cantor SET a=[;end;];;;166 }167 } {0}168 do_test main-1.26 {169 db complete {170 CREATE -- a comment171 TRIGGER exy AFTER DELETE backend BEGIN172 UPDATE pqr SET a=5;173 }174 } {0}175 do_test main-1.27.1 {176 db complete {177 CREATE -- a comment178 TRIGGERX tangentxx AFTER DELETE backend BEGIN179 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 BEGIN185 UPDATE pqr SET a=5;186 }187 } {0}188 ifcapable {explain} {189 do_test main-1.27.3 {190 db complete {191 /* */ EXPLAIN -- A comment192 CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN193 UPDATE pqr SET a=5;194 }195 } {0}196 }197 do_test main-1.27.4 {198 db complete {199 BOGUS token200 CREATE TRIGGER xyz AFTER DELETE backend BEGIN201 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 BEGIN209 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 BEGIN216 UPDATE pqr SET a=5;217 }218 } {0}219 do_test main-1.29 {220 db complete {221 CREATE TRIGGER xyz AFTER DELETE backend BEGIN222 UPDATE pqr SET a=5;223 EXPLAIN select * from xyz;224 }225 } {0}226 227} ;# end ifcapable {complete}228 229}230do_test main-1.30 {231 db complete {232 CREATE TABLE /* In comment ; */233 }234} {0}235do_test main-1.31 {236 db complete {237 CREATE TABLE /* In comment ; */ hi;238 }239} {1}240do_test main-1.31 {241 db complete {242 CREATE TABLE /* In comment ; */;243 }244} {1}245do_test main-1.32 {246 db complete {247 stuff;248 /*249 CREATE TABLE250 multiple lines251 of text252 */253 }254} {1}255do_test main-1.33 {256 db complete {257 /*258 CREATE TABLE259 multiple lines260 of text;261 }262} {0}263do_test main-1.34 {264 db complete {265 /*266 CREATE TABLE267 multiple lines "*/268 of text;269 }270} {1}271do_test main-1.35 {272 db complete {hi /**/ there;}273} {1}274do_test main-1.36 {275 db complete {hi there/***/;}276} {1}277do_test main-1.37 {278 db complete {hi there/**}279} {0}280do_test main-1.38 {281 db complete {hi [there}282} {0}283 284ifcapable {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#301if {[permutation] == ""} {302 do_test main-2.0 {303 catch {db close}304 forcedelete test.db305 set fd [open test.db w]306 puts $fd hi!307 close $fd308 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#315do_test main-3.1 {316 catch {db close}317 foreach f [glob -nocomplain testdb/*] {forcedelete $f}318 forcedelete testdb319 sqlite3 db testdb320 set v [catch {execsql {SELECT * from T1 where x!!5}} msg]321 lappend v $msg322} {1 {unrecognized token: "!"}}323do_test main-3.2 {324 catch {db close}325 foreach f [glob -nocomplain testdb/*] {forcedelete $f}326 forcedelete testdb327 sqlite3 db testdb328 set v [catch {execsql {SELECT * from T1 where ^x}} msg]329 lappend v $msg330} {1 {unrecognized token: "^"}}331do_test main-3.2.2 {332 catchsql {select 'abc}333} {1 {unrecognized token: "'abc"}}334do_test main-3.2.3 {335 catchsql {select "abc}336} {1 {unrecognized token: ""abc"}}337do_test main-3.2.4 {338 catchsql {select [abc}339} {1 {unrecognized token: "[abc"}}340do_test main-3.2.5 {341 catchsql {select x'4869}342} {1 {unrecognized token: "x'4869"}}343do_test main-3.2.6 {344 catchsql {select x'4869'}345} {0 Hi}346do_test main-3.2.7 {347 catchsql {select x'48695'}348} {1 {unrecognized token: "x'48695'"}}349do_test main-3.2.8 {350 catchsql {select x'486x'}351} {1 {unrecognized token: "x'486x'"}}352do_test main-3.2.9 {353 catchsql {select $abc(}354} {1 {unrecognized token: "$abc("}}355do_test main-3.2.10 {356 catchsql {select $abc(x}357} {1 {unrecognized token: "$abc(x"}}358set xyz 123359do_test main-3.2.11 {360 catchsql {select $::xyz}361} {0 123}362namespace eval ::testnamespace {363 variable xyz 321364}365do_test main-3.2.12 {366 catchsql {select $testnamespace::xyz}367} {0 321}368do_test main-3.2.13 {369 catchsql {select $(abc)}370} {1 {unrecognized token: "$"}}371do_test main-3.2.14 {372 set hi\u1234x 987373 db eval "select \$hi\u1234x"374} {987}375do_test main-3.2.15 {376 catchsql "select 456\u1234"377} [list 1 "unrecognized token: \"456\u1234\""]378do_test main-3.2.16 {379 catchsql {select cast(3.14e+4 AS integer)}380} {0 31400}381do_test main-3.2.17 {382 catchsql {select cast(3.14e+04 AS integer)}383} {0 31400}384do_test main-3.2.18 {385 catchsql {select cast(3.14e+004 AS integer)}386} {0 31400}387do_test main-3.2.19 {388 catchsql {select cast(3.14e4 AS integer)}389} {0 31400}390do_test main-3.2.20 {391 catchsql {select cast(3.14e04 AS integer)}392} {0 31400}393do_test main-3.2.21 {394 catchsql {select cast(3.14e004 AS integer)}395} {0 31400}396do_test main-3.2.16 {397 catchsql {select cast(3.14E+4 AS integer)}398} {0 31400}399do_test main-3.2.17 {400 catchsql {select cast(3.14E+04 AS integer)}401} {0 31400}402do_test main-3.2.18 {403 catchsql {select cast(3.14E+004 AS integer)}404} {0 31400}405do_test main-3.2.19 {406 catchsql {select cast(3.14E4 AS integer)}407} {0 31400}408do_test main-3.2.20 {409 catchsql {select cast(3.14E04 AS integer)}410} {0 31400}411do_test main-3.2.21 {412 catchsql {select cast(3.14E004 AS integer)}413} {0 31400}414do_test main-3.2.22 {415 catchsql {select cast(3.14e-4 * 1e8 AS integer)}416} {0 31400}417do_test main-3.2.23 {418 catchsql {select cast(3.14E-04 * 1E08 AS integer)}419} {0 31400}420do_test main-3.2.24 {421 catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}422} {0 31400}423do_test main-3.2.25 {424 catchsql {select 123/*abc}425} {0 123}426do_test main-3.2.26 {427 catchsql {select 123/***abc}428} {0 123}429do_test main-3.2.27 {430 catchsql {select 123/*/*2}431} {0 123}432do_test main-3.2.28 {433 catchsql {select 123/**/*2}434} {0 246}435do_test main-3.2.29 {436 catchsql {select 123/}437} {1 {incomplete input}}438do_test main-3.2.30 {439 catchsql {select 123--5}440} {0 123}441 442 443do_test main-3.3 {444 catch {db close}445 foreach f [glob -nocomplain testdb/*] {forcedelete $f}446 forcedelete testdb447 sqlite3 db testdb448 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}463do_test main-3.4 {464 set v [catch {execsql {create bogus}} msg]465 lappend v $msg466} {1 {near "bogus": syntax error}}467do_test main-3.5 {468 set v [catch {execsql {create}} msg]469 lappend v $msg470} {1 {incomplete input}}471do_test main-3.6 {472 catchsql {SELECT 'abc' + #9}473} {1 {near "#9": syntax error}}474 475# Print the version number so that it can be picked up by releasetest.tcl.476#477puts [db one {SELECT 'VERSION: ' ||478 sqlite_version() || ' ' ||479 sqlite_source_id();}]480 481finish_test482 