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