1# 2# 2001 September 15 3# 4# The author disclaims copyright to this source code. In place of 5# a legal notice, here is a blessing: 6# 7# May you do good and not evil. 8# May you find forgiveness for yourself and forgive others. 9# May you share freely, never taking more than you give. 10# 11#*********************************************************************** 12# This file implements regression tests for SQLite library. The 13# focus of this file is exercising the code in main.c. 14# 15# $Id: main.test,v 1.14 2003/05/04 17:58:27 drh Exp $ 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20# Tests of the sqlite_complete() function. 21# 22do_test main-1.1 { 23 db complete {This is a test} 24} {0} 25do_test main-1.2 { 26 db complete { 27 } 28} {1} 29do_test main-1.3 { 30 db complete { 31 -- a comment ; 32 } 33} {1} 34do_test main-1.4 { 35 db complete { 36 -- a comment ; 37 ; 38 } 39} {1} 40do_test main-1.5 { 41 db complete {DROP TABLE 'xyz;} 42} {0} 43do_test main-1.6 { 44 db complete {DROP TABLE 'xyz';} 45} {1} 46do_test main-1.7 { 47 db complete {DROP TABLE "xyz;} 48} {0} 49do_test main-1.8 { 50 db complete {DROP TABLE "xyz';} 51} {0} 52do_test main-1.9 { 53 db complete {DROP TABLE "xyz";} 54} {1} 55do_test main-1.10 { 56 db complete {DROP TABLE xyz; hi} 57} {0} 58do_test main-1.11 { 59 db complete {DROP TABLE xyz; } 60} {1} 61do_test main-1.12 { 62 db complete {DROP TABLE xyz; -- hi } 63} {1} 64do_test main-1.13 { 65 db complete {DROP TABLE xyz; -- hi 66 } 67} {1} 68do_test main-1.14 { 69 db complete {SELECT a-b FROM t1; } 70} {1} 71do_test main-1.15 { 72 db complete {SELECT a-b FROM t1 } 73} {0} 74do_test main-1.16 { 75 db complete { 76 CREATE TABLE abc(x,y); 77 } 78} {1} 79do_test main-1.17 { 80 db complete { 81 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; 82 } 83} {0} 84do_test main-1.18 { 85 db complete { 86 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END; 87 } 88} {1} 89do_test main-1.19 { 90 db complete { 91 CREATE TRIGGER xyz AFTER DELETE abc BEGIN 92 UPDATE pqr; 93 unknown command; 94 } 95} {0} 96do_test main-1.20 { 97 db complete { 98 CREATE TRIGGER xyz AFTER DELETE backend BEGIN 99 UPDATE pqr; 100 } 101} {0} 102do_test main-1.21 { 103 db complete { 104 CREATE TRIGGER xyz AFTER DELETE end BEGIN 105 SELECT a, b FROM end; 106 } 107} {0} 108do_test main-1.22 { 109 db complete { 110 CREATE TRIGGER xyz AFTER DELETE end BEGIN 111 SELECT a, b FROM end; 112 END; 113 } 114} {1} 115do_test main-1.23 { 116 db complete { 117 CREATE TRIGGER xyz AFTER DELETE end BEGIN 118 SELECT a, b FROM end; 119 END; 120 SELECT a, b FROM end; 121 } 122} {1} 123do_test main-1.24 { 124 db complete { 125 CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN 126 UPDATE pqr; 127 } 128} {0} 129do_test main-1.25 { 130 db complete { 131 CREATE TRIGGER xyz AFTER DELETE backend BEGIN 132 UPDATE pqr SET a=[;end;];;; 133 } 134} {0} 135do_test main-1.26 { 136 db complete { 137 CREATE -- a comment 138 TRIGGER xyz AFTER DELETE backend BEGIN 139 UPDATE pqr SET a=5; 140 } 141} {0} 142do_test main-1.27.1 { 143 db complete { 144 CREATE -- a comment 145 TRIGGERX xyz AFTER DELETE backend BEGIN 146 UPDATE pqr SET a=5; 147 } 148} {1} 149do_test main-1.27.2 { 150 db complete { 151 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN 152 UPDATE pqr SET a=5; 153 } 154} {0} 155do_test main-1.27.3 { 156 db complete { 157 /* */ EXPLAIN -- A comment 158 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN 159 UPDATE pqr SET a=5; 160 } 161} {0} 162do_test main-1.27.4 { 163 db complete { 164 BOGUS token 165 CREATE TRIGGER xyz AFTER DELETE backend BEGIN 166 UPDATE pqr SET a=5; 167 } 168} {1} 169do_test main-1.27.5 { 170 db complete { 171 EXPLAIN 172 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN 173 UPDATE pqr SET a=5; 174 } 175} {0} 176do_test main-1.28 { 177 db complete { 178 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN 179 UPDATE pqr SET a=5; 180 } 181} {0} 182do_test main-1.29 { 183 db complete { 184 CREATE TRIGGER xyz AFTER DELETE backend BEGIN 185 UPDATE pqr SET a=5; 186 EXPLAIN select * from xyz; 187 } 188} {0} 189do_test main-1.30 { 190 db complete { 191 CREATE TABLE /* In comment ; */ 192 } 193} {0} 194do_test main-1.31 { 195 db complete { 196 CREATE TABLE /* In comment ; */ hi; 197 } 198} {1} 199do_test main-1.31 { 200 db complete { 201 CREATE TABLE /* In comment ; */; 202 } 203} {1} 204do_test main-1.32 { 205 db complete { 206 stuff; 207 /* 208 CREATE TABLE 209 multiple lines 210 of text 211 */ 212 } 213} {1} 214do_test main-1.33 { 215 db complete { 216 /* 217 CREATE TABLE 218 multiple lines 219 of text; 220 } 221} {0} 222do_test main-1.34 { 223 db complete { 224 /* 225 CREATE TABLE 226 multiple lines "*/ 227 of text; 228 } 229} {1} 230do_test main-1.35 { 231 db complete {hi /**/ there;} 232} {1} 233do_test main-1.36 { 234 db complete {hi there/***/;} 235} {1} 236 237 238# Try to open a database with a corrupt database file. 239# 240do_test main-2.0 { 241 catch {db close} 242 file delete -force test.db 243 set fd [open test.db w] 244 puts $fd hi! 245 close $fd 246 set v [catch {sqlite db test.db} msg] 247 if {$v} {lappend v $msg} {lappend v {}} 248} {0 {}} 249 250# Here are some tests for tokenize.c. 251# 252do_test main-3.1 { 253 catch {db close} 254 foreach f [glob -nocomplain testdb/*] {file delete -force $f} 255 file delete -force testdb 256 sqlite db testdb 257 set v [catch {execsql {SELECT * from T1 where x!!5}} msg] 258 lappend v $msg 259} {1 {unrecognized token: "!!"}} 260do_test main-3.2 { 261 catch {db close} 262 foreach f [glob -nocomplain testdb/*] {file delete -force $f} 263 file delete -force testdb 264 sqlite db testdb 265 set v [catch {execsql {SELECT * from T1 where @x}} msg] 266 lappend v $msg 267} {1 {unrecognized token: "@"}} 268 269do_test main-3.3 { 270 catch {db close} 271 foreach f [glob -nocomplain testdb/*] {file delete -force $f} 272 file delete -force testdb 273 sqlite db testdb 274 execsql { 275 create table T1(X REAL); 276 insert into T1 values(0.5); 277 insert into T1 values(0.5e2); 278 insert into T1 values(0.5e-002); 279 insert into T1 values(5e-002); 280 insert into T1 values(-5.0e-2); 281 insert into T1 values(-5.1e-2); 282 insert into T1 values(0.5e2); 283 insert into T1 values(0.5E+02); 284 insert into T1 values(5E+02); 285 insert into T1 values(5.0E+03); 286 select x*10 from T1 order by x*5; 287 } 288} {-0.51 -0.5 0.05 0.5 5 500 500 500 5000 50000} 289do_test main-3.4 { 290 set v [catch {execsql {create bogus}} msg] 291 lappend v $msg 292} {1 {near "bogus": syntax error}} 293do_test main-3.5 { 294 set v [catch {execsql {create}} msg] 295 lappend v $msg 296} {1 {near "create": syntax error}} 297 298finish_test 299