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