blob: eab2764fe6eeb930e278ed82f21b2d60d79098b7 [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#
drh6bf89572004-11-03 16:27:01 +000014# $Id: main.test,v 1.17 2004/11/03 16:27:02 drh Exp $
drhcc85b412000-06-07 15:11:27 +000015
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 }
drh524a5bf2003-04-26 02:31:54 +000027} {1}
drhcc85b412000-06-07 15:11:27 +000028do_test main-1.3 {
29 db complete {
30 -- a comment ;
31 }
drh524a5bf2003-04-26 02:31:54 +000032} {1}
drhcc85b412000-06-07 15:11:27 +000033do_test main-1.4 {
34 db complete {
35 -- a comment ;
36 ;
37 }
38} {1}
drh8c82b352000-12-10 18:23:50 +000039do_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}
drhc4a3c772001-04-04 11:48:57 +000067do_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}
drhce9079c2002-05-15 14:17:44 +000073do_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}
drh7ad43342003-05-04 17:58:25 +0000141do_test main-1.27.1 {
drhce9079c2002-05-15 14:17:44 +0000142 db complete {
143 CREATE -- a comment
144 TRIGGERX xyz AFTER DELETE backend BEGIN
145 UPDATE pqr SET a=5;
146 }
147} {1}
drh7ad43342003-05-04 17:58:25 +0000148do_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}
drh6bf89572004-11-03 16:27:01 +0000154ifcapable {explain} {
155 do_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}
162}
drh7ad43342003-05-04 17:58:25 +0000163do_test main-1.27.4 {
164 db complete {
165 BOGUS token
166 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
167 UPDATE pqr SET a=5;
168 }
169} {1}
drh6bf89572004-11-03 16:27:01 +0000170ifcapable {explain} {
171 do_test main-1.27.5 {
172 db complete {
173 EXPLAIN
174 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
175 UPDATE pqr SET a=5;
176 }
177 } {0}
178}
drhce9079c2002-05-15 14:17:44 +0000179do_test main-1.28 {
180 db complete {
181 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
182 UPDATE pqr SET a=5;
183 }
drh7ad43342003-05-04 17:58:25 +0000184} {0}
drhce9079c2002-05-15 14:17:44 +0000185do_test main-1.29 {
186 db complete {
187 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
188 UPDATE pqr SET a=5;
189 EXPLAIN select * from xyz;
190 }
191} {0}
drh524a5bf2003-04-26 02:31:54 +0000192do_test main-1.30 {
193 db complete {
194 CREATE TABLE /* In comment ; */
195 }
196} {0}
197do_test main-1.31 {
198 db complete {
199 CREATE TABLE /* In comment ; */ hi;
200 }
201} {1}
drh7ad43342003-05-04 17:58:25 +0000202do_test main-1.31 {
203 db complete {
204 CREATE TABLE /* In comment ; */;
205 }
206} {1}
drh524a5bf2003-04-26 02:31:54 +0000207do_test main-1.32 {
208 db complete {
209 stuff;
210 /*
211 CREATE TABLE
212 multiple lines
213 of text
214 */
215 }
216} {1}
217do_test main-1.33 {
218 db complete {
219 /*
220 CREATE TABLE
221 multiple lines
222 of text;
223 }
224} {0}
225do_test main-1.34 {
226 db complete {
227 /*
228 CREATE TABLE
229 multiple lines "*/
230 of text;
231 }
232} {1}
233do_test main-1.35 {
234 db complete {hi /**/ there;}
235} {1}
drh7ad43342003-05-04 17:58:25 +0000236do_test main-1.36 {
237 db complete {hi there/***/;}
238} {1}
drhce9079c2002-05-15 14:17:44 +0000239
drhcc85b412000-06-07 15:11:27 +0000240
drh3fc190c2001-09-14 03:24:23 +0000241# Try to open a database with a corrupt database file.
drhcc85b412000-06-07 15:11:27 +0000242#
243do_test main-2.0 {
244 catch {db close}
drh3fc190c2001-09-14 03:24:23 +0000245 file delete -force test.db
246 set fd [open test.db w]
drhcc85b412000-06-07 15:11:27 +0000247 puts $fd hi!
248 close $fd
drhef4ac8f2004-06-19 00:16:31 +0000249 set v [catch {sqlite3 db test.db} msg]
drhc22bd472002-05-10 13:14:07 +0000250 if {$v} {lappend v $msg} {lappend v {}}
drhcc85b412000-06-07 15:11:27 +0000251} {0 {}}
252
drhc837e702000-06-08 16:26:24 +0000253# Here are some tests for tokenize.c.
254#
255do_test main-3.1 {
256 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000257 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000258 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000259 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000260 set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
261 lappend v $msg
262} {1 {unrecognized token: "!!"}}
263do_test main-3.2 {
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
drhbf4133c2001-10-13 02:59:08 +0000268 set v [catch {execsql {SELECT * from T1 where @x}} msg]
drhc837e702000-06-08 16:26:24 +0000269 lappend v $msg
drhbf4133c2001-10-13 02:59:08 +0000270} {1 {unrecognized token: "@"}}
drhc837e702000-06-08 16:26:24 +0000271
272do_test main-3.3 {
273 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000274 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000275 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000276 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000277 execsql {
278 create table T1(X REAL);
drhbb07e9a2003-04-16 02:17:35 +0000279 insert into T1 values(0.5);
drhc837e702000-06-08 16:26:24 +0000280 insert into T1 values(0.5e2);
281 insert into T1 values(0.5e-002);
282 insert into T1 values(5e-002);
283 insert into T1 values(-5.0e-2);
284 insert into T1 values(-5.1e-2);
drhbb07e9a2003-04-16 02:17:35 +0000285 insert into T1 values(0.5e2);
286 insert into T1 values(0.5E+02);
drhc837e702000-06-08 16:26:24 +0000287 insert into T1 values(5E+02);
drhbb07e9a2003-04-16 02:17:35 +0000288 insert into T1 values(5.0E+03);
drhc837e702000-06-08 16:26:24 +0000289 select x*10 from T1 order by x*5;
290 }
drh92febd92004-08-20 18:34:20 +0000291} {-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 +0000292do_test main-3.4 {
293 set v [catch {execsql {create bogus}} msg]
294 lappend v $msg
295} {1 {near "bogus": syntax error}}
296do_test main-3.5 {
297 set v [catch {execsql {create}} msg]
298 lappend v $msg
299} {1 {near "create": syntax error}}
300
drhcc85b412000-06-07 15:11:27 +0000301finish_test