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