xref: /sqlite-3.40.0/test/main.test (revision 4dcbdbff)
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.20 2005/02/26 17:31:28 drh Exp $
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18
19# Only do the next group of tests if the sqlite3_complete API is available
20#
21ifcapable {complete} {
22
23# 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  }
31} {1}
32do_test main-1.3 {
33  db complete {
34     -- a comment ;
35  }
36} {1}
37do_test main-1.4 {
38  db complete {
39     -- a comment ;
40     ;
41  }
42} {1}
43do_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}
71do_test main-1.14 {
72  db complete {SELECT a-b FROM t1; }
73} {1}
74do_test main-1.15 {
75  db complete {SELECT a/e FROM t1 }
76} {0}
77do_test main-1.16 {
78  db complete {
79    CREATE TABLE abc(x,y);
80  }
81} {1}
82ifcapable {trigger} {
83  do_test main-1.17 {
84    db complete {
85      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 {
155      CREATE/**/TRIGGER xyz AFTER DELETE backend BEGIN
156         UPDATE pqr SET a=5;
157    }
158  } {0}
159  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}
167  }
168  do_test main-1.27.4 {
169    db complete {
170      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 {
186      CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
187         UPDATE pqr SET a=5;
188    }
189  } {0}
190  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}
197}
198do_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}
208do_test main-1.31 {
209  db complete {
210     CREATE TABLE /* In comment ; */;
211  }
212} {1}
213do_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}
242do_test main-1.36 {
243  db complete {hi there/***/;}
244} {1}
245
246} ;# end ifcapable {complete}
247
248
249# Try to open a database with a corrupt database file.
250#
251do_test main-2.0 {
252  catch {db close}
253  file delete -force test.db
254  set fd [open test.db w]
255  puts $fd hi!
256  close $fd
257  set v [catch {sqlite3 db test.db} msg]
258  if {$v} {lappend v $msg} {lappend v {}}
259} {0 {}}
260
261# Here are some tests for tokenize.c.
262#
263do_test main-3.1 {
264  catch {db close}
265  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
266  file delete -force testdb
267  sqlite3 db testdb
268  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}
273  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
274  file delete -force testdb
275  sqlite3 db testdb
276  set v [catch {execsql {SELECT * from T1 where @x}} msg]
277  lappend v $msg
278} {1 {unrecognized token: "@"}}
279
280do_test main-3.3 {
281  catch {db close}
282  foreach f [glob -nocomplain testdb/*] {file delete -force $f}
283  file delete -force testdb
284  sqlite3 db testdb
285  execsql {
286    create table T1(X REAL);  /* C-style comments allowed */
287    insert into T1 values(0.5);
288    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);
293    insert into T1 values(0.5e2);
294    insert into T1 values(0.5E+02);
295    insert into T1 values(5E+02);
296    insert into T1 values(5.0E+03);
297    select x*10 from T1 order by x*5;
298  }
299} {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
300do_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
309finish_test
310