blob: 26f8381c84f6f7bb3b32acdfd56e476772ded6c6 [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#
drh48e5aa22005-01-11 17:46:41 +000014# $Id: main.test,v 1.19 2005/01/11 17:46:42 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 {
drh48e5aa22005-01-11 17:46:41 +000071 db complete {SELECT a/e FROM t1 }
drhc4a3c772001-04-04 11:48:57 +000072} {0}
drhce9079c2002-05-15 14:17:44 +000073do_test main-1.16 {
74 db complete {
75 CREATE TABLE abc(x,y);
76 }
77} {1}
drh798da522004-11-04 04:42:28 +000078ifcapable {trigger} {
79 do_test main-1.17 {
drh6bf89572004-11-03 16:27:01 +000080 db complete {
drh798da522004-11-04 04:42:28 +000081 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
82 }
83 } {0}
84 do_test main-1.18 {
85 db complete {
86 CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
87 }
88 } {1}
89 do_test main-1.19 {
90 db complete {
91 CREATE TRIGGER xyz AFTER DELETE abc BEGIN
92 UPDATE pqr;
93 unknown command;
94 }
95 } {0}
96 do_test main-1.20 {
97 db complete {
98 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
99 UPDATE pqr;
100 }
101 } {0}
102 do_test main-1.21 {
103 db complete {
104 CREATE TRIGGER xyz AFTER DELETE end BEGIN
105 SELECT a, b FROM end;
106 }
107 } {0}
108 do_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}
115 do_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}
123 do_test main-1.24 {
124 db complete {
125 CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
126 UPDATE pqr;
127 }
128 } {0}
129 do_test main-1.25 {
130 db complete {
131 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
132 UPDATE pqr SET a=[;end;];;;
133 }
134 } {0}
135 do_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}
142 do_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}
149 do_test main-1.27.2 {
150 db complete {
drh6bf89572004-11-03 16:27:01 +0000151 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN
152 UPDATE pqr SET a=5;
153 }
154 } {0}
drh798da522004-11-04 04:42:28 +0000155 ifcapable {explain} {
156 do_test main-1.27.3 {
157 db complete {
158 /* */ EXPLAIN -- A comment
159 CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN
160 UPDATE pqr SET a=5;
161 }
162 } {0}
drh7ad43342003-05-04 17:58:25 +0000163 }
drh798da522004-11-04 04:42:28 +0000164 do_test main-1.27.4 {
drh6bf89572004-11-03 16:27:01 +0000165 db complete {
drh798da522004-11-04 04:42:28 +0000166 BOGUS token
167 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
168 UPDATE pqr SET a=5;
169 }
170 } {1}
171 ifcapable {explain} {
172 do_test main-1.27.5 {
173 db complete {
174 EXPLAIN
175 CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
176 UPDATE pqr SET a=5;
177 }
178 } {0}
179 }
180 do_test main-1.28 {
181 db complete {
drh48e5aa22005-01-11 17:46:41 +0000182 CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
drh6bf89572004-11-03 16:27:01 +0000183 UPDATE pqr SET a=5;
184 }
185 } {0}
drh798da522004-11-04 04:42:28 +0000186 do_test main-1.29 {
187 db complete {
188 CREATE TRIGGER xyz AFTER DELETE backend BEGIN
189 UPDATE pqr SET a=5;
190 EXPLAIN select * from xyz;
191 }
192 } {0}
drh6bf89572004-11-03 16:27:01 +0000193}
drh524a5bf2003-04-26 02:31:54 +0000194do_test main-1.30 {
195 db complete {
196 CREATE TABLE /* In comment ; */
197 }
198} {0}
199do_test main-1.31 {
200 db complete {
201 CREATE TABLE /* In comment ; */ hi;
202 }
203} {1}
drh7ad43342003-05-04 17:58:25 +0000204do_test main-1.31 {
205 db complete {
206 CREATE TABLE /* In comment ; */;
207 }
208} {1}
drh524a5bf2003-04-26 02:31:54 +0000209do_test main-1.32 {
210 db complete {
211 stuff;
212 /*
213 CREATE TABLE
214 multiple lines
215 of text
216 */
217 }
218} {1}
219do_test main-1.33 {
220 db complete {
221 /*
222 CREATE TABLE
223 multiple lines
224 of text;
225 }
226} {0}
227do_test main-1.34 {
228 db complete {
229 /*
230 CREATE TABLE
231 multiple lines "*/
232 of text;
233 }
234} {1}
235do_test main-1.35 {
236 db complete {hi /**/ there;}
237} {1}
drh7ad43342003-05-04 17:58:25 +0000238do_test main-1.36 {
239 db complete {hi there/***/;}
240} {1}
drhce9079c2002-05-15 14:17:44 +0000241
drhcc85b412000-06-07 15:11:27 +0000242
drh3fc190c2001-09-14 03:24:23 +0000243# Try to open a database with a corrupt database file.
drhcc85b412000-06-07 15:11:27 +0000244#
245do_test main-2.0 {
246 catch {db close}
drh3fc190c2001-09-14 03:24:23 +0000247 file delete -force test.db
248 set fd [open test.db w]
drhcc85b412000-06-07 15:11:27 +0000249 puts $fd hi!
250 close $fd
drhef4ac8f2004-06-19 00:16:31 +0000251 set v [catch {sqlite3 db test.db} msg]
drhc22bd472002-05-10 13:14:07 +0000252 if {$v} {lappend v $msg} {lappend v {}}
drhcc85b412000-06-07 15:11:27 +0000253} {0 {}}
254
drhc837e702000-06-08 16:26:24 +0000255# Here are some tests for tokenize.c.
256#
257do_test main-3.1 {
258 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000259 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000260 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000261 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000262 set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
263 lappend v $msg
264} {1 {unrecognized token: "!!"}}
265do_test main-3.2 {
266 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000267 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000268 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000269 sqlite3 db testdb
drhbf4133c2001-10-13 02:59:08 +0000270 set v [catch {execsql {SELECT * from T1 where @x}} msg]
drhc837e702000-06-08 16:26:24 +0000271 lappend v $msg
drhbf4133c2001-10-13 02:59:08 +0000272} {1 {unrecognized token: "@"}}
drhc837e702000-06-08 16:26:24 +0000273
274do_test main-3.3 {
275 catch {db close}
drh3494ffe2001-03-20 12:55:13 +0000276 foreach f [glob -nocomplain testdb/*] {file delete -force $f}
drhc837e702000-06-08 16:26:24 +0000277 file delete -force testdb
drhef4ac8f2004-06-19 00:16:31 +0000278 sqlite3 db testdb
drhc837e702000-06-08 16:26:24 +0000279 execsql {
drh48e5aa22005-01-11 17:46:41 +0000280 create table T1(X REAL); /* C-style comments allowed */
drhbb07e9a2003-04-16 02:17:35 +0000281 insert into T1 values(0.5);
drhc837e702000-06-08 16:26:24 +0000282 insert into T1 values(0.5e2);
283 insert into T1 values(0.5e-002);
284 insert into T1 values(5e-002);
285 insert into T1 values(-5.0e-2);
286 insert into T1 values(-5.1e-2);
drhbb07e9a2003-04-16 02:17:35 +0000287 insert into T1 values(0.5e2);
288 insert into T1 values(0.5E+02);
drhc837e702000-06-08 16:26:24 +0000289 insert into T1 values(5E+02);
drhbb07e9a2003-04-16 02:17:35 +0000290 insert into T1 values(5.0E+03);
drhc837e702000-06-08 16:26:24 +0000291 select x*10 from T1 order by x*5;
292 }
drh92febd92004-08-20 18:34:20 +0000293} {-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 +0000294do_test main-3.4 {
295 set v [catch {execsql {create bogus}} msg]
296 lappend v $msg
297} {1 {near "bogus": syntax error}}
298do_test main-3.5 {
299 set v [catch {execsql {create}} msg]
300 lappend v $msg
301} {1 {near "create": syntax error}}
302
drhcc85b412000-06-07 15:11:27 +0000303finish_test