blob: a581facd197c69445d3572f1bcdd0f370a7496bf [file] [log] [blame]
drhb19a2bc2001-09-16 00:13:26 +00001# 2001 September 15
drhcc85b412000-06-07 15:11:27 +00002#
drhb19a2bc2001-09-16 00:13:26 +00003# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
drhcc85b412000-06-07 15:11:27 +00005#
drhb19a2bc2001-09-16 00:13:26 +00006# 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.
drhcc85b412000-06-07 15:11:27 +00009#
10#***********************************************************************
11# This file implements regression tests for SQLite library. The
12# focus of this file is exercising the code in main.c.
13#
drhccae6022005-02-26 17:31:26 +000014# $Id: main.test,v 1.20 2005/02/26 17:31:28 drh Exp $
drhcc85b412000-06-07 15:11:27 +000015
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18
drhccae6022005-02-26 17:31:26 +000019# Only do the next group of tests if the sqlite3_complete API is available
20#
21ifcapable {complete} {
22
drhcc85b412000-06-07 15:11:27 +000023# 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 {
29 db complete {
30 }
drh524a5bf2003-04-26 02:31:54 +000031} {1}
drhcc85b412000-06-07 15:11:27 +000032do_test main-1.3 {
33 db complete {
34 -- a comment ;
35 }
drh524a5bf2003-04-26 02:31:54 +000036} {1}
drhcc85b412000-06-07 15:11:27 +000037do_test main-1.4 {
38 db complete {
39 -- a comment ;
40 ;
41 }
42} {1}
drh8c82b352000-12-10 18:23:50 +000043do_test main-1.5 {
44 db complete {DROP TABLE 'xyz;}
45} {0}
46do_test main-1.6 {
47 db complete {DROP TABLE 'xyz';}
48} {1}
49do_test main-1.7 {
50 db complete {DROP TABLE "xyz;}
51} {0}
52do_test main-1.8 {
53 db complete {DROP TABLE "xyz';}
54} {0}
55do_test main-1.9 {
56 db complete {DROP TABLE "xyz";}
57} {1}
58do_test main-1.10 {
59 db complete {DROP TABLE xyz; hi}
60} {0}
61do_test main-1.11 {
62 db complete {DROP TABLE xyz; }
63} {1}
64do_test main-1.12 {
65 db complete {DROP TABLE xyz; -- hi }
66} {1}
67do_test main-1.13 {
68 db complete {DROP TABLE xyz; -- hi
69 }
70} {1}
drhc4a3c772001-04-04 11:48:57 +000071do_test main-1.14 {
72 db complete {SELECT a-b FROM t1; }
73} {1}
74do_test main-1.15 {
drh48e5aa22005-01-11 17:46:41 +000075 db complete {SELECT a/e FROM t1 }
drhc4a3c772001-04-04 11:48:57 +000076} {0}
drhce9079c2002-05-15 14:17:44 +000077do_test main-1.16 {
78 db complete {
79 CREATE TABLE abc(x,y);
80 }
81} {1}
drh798da522004-11-04 04:42:28 +000082ifcapable {trigger} {
83 do_test main-1.17 {
drh6bf89572004-11-03 16:27:01 +000084 db complete {
drh798da522004-11-04 04:42:28 +000085 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
86 }
87 } {0}
88 do_test main-1.18 {
89 db complete {
90 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
91 }
92 } {1}
93 do_test main-1.19 {
94 db complete {
95 CREATE TRIGGER xyz AFTER DELETE abc BEGIN
96 UPDATE pqr;
97 unknown command;
98 }
99 } {0}
100 do_test main-1.20 {
101 db complete {
102 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
103 UPDATE pqr;
104 }
105 } {0}
106 do_test main-1.21 {
107 db complete {
108 CREATE TRIGGER xyz AFTER DELETE end BEGIN
109 SELECT a, b FROM end;
110 }
111 } {0}
112 do_test main-1.22 {
113 db complete {
114 CREATE TRIGGER xyz AFTER DELETE end BEGIN
115 SELECT a, b FROM end;
116 END;
117 }
118 } {1}
119 do_test main-1.23 {
120 db complete {
121 CREATE TRIGGER xyz AFTER DELETE end BEGIN
122 SELECT a, b FROM end;
123 END;
124 SELECT a, b FROM end;
125 }
126 } {1}
127 do_test main-1.24 {
128 db complete {
129 CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
130 UPDATE pqr;
131 }
132 } {0}
133 do_test main-1.25 {
134 db complete {
135 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
136 UPDATE pqr SET a=[;end;];;;
137 }
138 } {0}
139 do_test main-1.26 {
140 db complete {
141 CREATE -- a comment
142 TRIGGER xyz AFTER DELETE backend BEGIN
143 UPDATE pqr SET a=5;
144 }
145 } {0}
146 do_test main-1.27.1 {
147 db complete {
148 CREATE -- a comment
149 TRIGGERX xyz AFTER DELETE backend BEGIN
150 UPDATE pqr SET a=5;
151 }
152 } {1}
153 do_test main-1.27.2 {
154 db complete {
drh6bf89572004-11-03 16:27:01 +0000155 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN
156 UPDATE pqr SET a=5;
157 }
158 } {0}
drh798da522004-11-04 04:42:28 +0000159 ifcapable {explain} {
160 do_test main-1.27.3 {
161 db complete {
162 /* */ EXPLAIN -- A comment
163 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN
164 UPDATE pqr SET a=5;
165 }
166 } {0}
drh7ad43342003-05-04 17:58:25 +0000167 }
drh798da522004-11-04 04:42:28 +0000168 do_test main-1.27.4 {
drh6bf89572004-11-03 16:27:01 +0000169 db complete {
drh798da522004-11-04 04:42:28 +0000170 BOGUS token
171 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
172 UPDATE pqr SET a=5;
173 }
174 } {1}
175 ifcapable {explain} {
176 do_test main-1.27.5 {
177 db complete {
178 EXPLAIN
179 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
180 UPDATE pqr SET a=5;
181 }
182 } {0}
183 }
184 do_test main-1.28 {
185 db complete {
drh48e5aa22005-01-11 17:46:41 +0000186 CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
drh6bf89572004-11-03 16:27:01 +0000187 UPDATE pqr SET a=5;
188 }
189 } {0}
drh798da522004-11-04 04:42:28 +0000190 do_test main-1.29 {
191 db complete {
192 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
193 UPDATE pqr SET a=5;
194 EXPLAIN select * from xyz;
195 }
196 } {0}
drh6bf89572004-11-03 16:27:01 +0000197}
drh524a5bf2003-04-26 02:31:54 +0000198do_test main-1.30 {
199 db complete {
200 CREATE TABLE /* In comment ; */
201 }
202} {0}
203do_test main-1.31 {
204 db complete {
205 CREATE TABLE /* In comment ; */ hi;
206 }
207} {1}
drh7ad43342003-05-04 17:58:25 +0000208do_test main-1.31 {
209 db complete {
210 CREATE TABLE /* In comment ; */;
211 }
212} {1}
drh524a5bf2003-04-26 02:31:54 +0000213do_test main-1.32 {
214 db complete {
215 stuff;
216 /*
217 CREATE TABLE
218 multiple lines
219 of text
220 */
221 }
222} {1}
223do_test main-1.33 {
224 db complete {
225 /*
226 CREATE TABLE
227 multiple lines
228 of text;
229 }
230} {0}
231do_test main-1.34 {
232 db complete {
233 /*
234 CREATE TABLE
235 multiple lines "*/
236 of text;
237 }
238} {1}
239do_test main-1.35 {
240 db complete {hi /**/ there;}
241} {1}
drh7ad43342003-05-04 17:58:25 +0000242do_test main-1.36 {
243 db complete {hi there/***/;}
244} {1}
drhce9079c2002-05-15 14:17:44 +0000245
drhccae6022005-02-26 17:31:26 +0000246} ;# end ifcapable {complete}
247
drhcc85b412000-06-07 15:11:27 +0000248
drh3fc190c2001-09-14 03:24:23 +0000249# Try to open a database with a corrupt database file.
drhcc85b412000-06-07 15:11:27 +0000250#
251do_test main-2.0 {
252 catch {db close}
drh3fc190c2001-09-14 03:24:23 +0000253 file delete -force test.db
254 set fd [open test.db w]
drhcc85b412000-06-07 15:11:27 +0000255 puts $fd hi!
256 close $fd
drhef4ac8f2004-06-19 00:16:31 +0000257 set v [catch {sqlite3 db test.db} msg]
drhc22bd472002-05-10 13:14:07 +0000258 if {$v} {lappend v $msg} {lappend v {}}
drhcc85b412000-06-07 15:11:27 +0000259} {0 {}}
260
drhc837e702000-06-08 16:26:24 +0000261# Here are some tests for tokenize.c.
262#
263do_test main-3.1 {
264 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000265 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000266 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000267 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000268 set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
269 lappend v $msg
270} {1 {unrecognized token: "!!"}}
271do_test main-3.2 {
272 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000273 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000274 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000275 sqlite3 db testdb
drhbf4133c2001-10-13 02:59:08 +0000276 set v [catch {execsql {SELECT * from T1 where @x}} msg]
drhc837e702000-06-08 16:26:24 +0000277 lappend v $msg
drhbf4133c2001-10-13 02:59:08 +0000278} {1 {unrecognized token: "@"}}
drhc837e702000-06-08 16:26:24 +0000279
280do_test main-3.3 {
281 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000282 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000283 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000284 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000285 execsql {
drh48e5aa22005-01-11 17:46:41 +0000286 create table T1(X REAL); /* C-style comments allowed */
drhbb07e9a2003-04-16 02:17:35 +0000287 insert into T1 values(0.5);
drhc837e702000-06-08 16:26:24 +0000288 insert into T1 values(0.5e2);
289 insert into T1 values(0.5e-002);
290 insert into T1 values(5e-002);
291 insert into T1 values(-5.0e-2);
292 insert into T1 values(-5.1e-2);
drhbb07e9a2003-04-16 02:17:35 +0000293 insert into T1 values(0.5e2);
294 insert into T1 values(0.5E+02);
drhc837e702000-06-08 16:26:24 +0000295 insert into T1 values(5E+02);
drhbb07e9a2003-04-16 02:17:35 +0000296 insert into T1 values(5.0E+03);
drhc837e702000-06-08 16:26:24 +0000297 select x*10 from T1 order by x*5;
298 }
drh92febd92004-08-20 18:34:20 +0000299} {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
drhc837e702000-06-08 16:26:24 +0000300do_test main-3.4 {
301 set v [catch {execsql {create bogus}} msg]
302 lappend v $msg
303} {1 {near "bogus": syntax error}}
304do_test main-3.5 {
305 set v [catch {execsql {create}} msg]
306 lappend v $msg
307} {1 {near "create": syntax error}}
308
drhcc85b412000-06-07 15:11:27 +0000309finish_test