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