xref: /sqlite-3.40.0/test/main.test (revision 6116ee4e)
1b19a2bc6Sdrh# 2001 September 15
2cc85b411Sdrh#
3b19a2bc6Sdrh# The author disclaims copyright to this source code.  In place of
4b19a2bc6Sdrh# a legal notice, here is a blessing:
5cc85b411Sdrh#
6b19a2bc6Sdrh#    May you do good and not evil.
7b19a2bc6Sdrh#    May you find forgiveness for yourself and forgive others.
8b19a2bc6Sdrh#    May you share freely, never taking more than you give.
9cc85b411Sdrh#
10cc85b411Sdrh#***********************************************************************
11cc85b411Sdrh# This file implements regression tests for SQLite library.  The
12cc85b411Sdrh# focus of this file is exercising the code in main.c.
13cc85b411Sdrh#
141691cd4bSdrh# $Id: main.test,v 1.32 2009/04/28 04:51:29 drh Exp $
15cc85b411Sdrh
16cc85b411Sdrhset testdir [file dirname $argv0]
17cc85b411Sdrhsource $testdir/tester.tcl
18cc85b411Sdrh
19ccae6026Sdrh# Only do the next group of tests if the sqlite3_complete API is available
20ccae6026Sdrh#
21ccae6026Sdrhifcapable {complete} {
22ccae6026Sdrh
23cc85b411Sdrh# Tests of the sqlite_complete() function.
24cc85b411Sdrh#
25cc85b411Sdrhdo_test main-1.1 {
26cc85b411Sdrh  db complete {This is a test}
27cc85b411Sdrh} {0}
28c7d526e9Sshanehdo_test main-1.2.0 {
29cc85b411Sdrh  db complete {
30cc85b411Sdrh  }
31c7d526e9Sshaneh} {0}
32c7d526e9Sshanehdo_test main-1.2.1 {
33c7d526e9Sshaneh  db complete {}
34c7d526e9Sshaneh} {0}
35c7d526e9Sshanehdo_test main-1.3.0 {
36cc85b411Sdrh  db complete {
37cc85b411Sdrh     -- a comment ;
38cc85b411Sdrh  }
39c7d526e9Sshaneh} {0}
40c7d526e9Sshanehdo_test main-1.3.1 {
41c7d526e9Sshaneh  db complete {
42c7d526e9Sshaneh     /* a comment ; */
43c7d526e9Sshaneh  }
44c7d526e9Sshaneh} {0}
45c7d526e9Sshanehdo_test main-1.4.0 {
46cc85b411Sdrh  db complete {
47cc85b411Sdrh     -- a comment ;
48cc85b411Sdrh     ;
49cc85b411Sdrh  }
50cc85b411Sdrh} {1}
51c7d526e9Sshanehdo_test main-1.4.1 {
52c7d526e9Sshaneh  db complete {
53c7d526e9Sshaneh     /* a comment ; */
54c7d526e9Sshaneh     ;
55c7d526e9Sshaneh  }
56c7d526e9Sshaneh} {1}
57c7d526e9Sshanehdo_test main-1.4.2 {
58c7d526e9Sshaneh  db complete {
59c7d526e9Sshaneh     /* a comment ; */ ;
60c7d526e9Sshaneh  }
61c7d526e9Sshaneh} {1}
628c82b350Sdrhdo_test main-1.5 {
638c82b350Sdrh  db complete {DROP TABLE 'xyz;}
648c82b350Sdrh} {0}
658c82b350Sdrhdo_test main-1.6 {
668c82b350Sdrh  db complete {DROP TABLE 'xyz';}
678c82b350Sdrh} {1}
688c82b350Sdrhdo_test main-1.7 {
698c82b350Sdrh  db complete {DROP TABLE "xyz;}
708c82b350Sdrh} {0}
718c82b350Sdrhdo_test main-1.8 {
728c82b350Sdrh  db complete {DROP TABLE "xyz';}
738c82b350Sdrh} {0}
748c82b350Sdrhdo_test main-1.9 {
758c82b350Sdrh  db complete {DROP TABLE "xyz";}
768c82b350Sdrh} {1}
778c82b350Sdrhdo_test main-1.10 {
788c82b350Sdrh  db complete {DROP TABLE xyz; hi}
798c82b350Sdrh} {0}
808c82b350Sdrhdo_test main-1.11 {
818c82b350Sdrh  db complete {DROP TABLE xyz; }
828c82b350Sdrh} {1}
838c82b350Sdrhdo_test main-1.12 {
848c82b350Sdrh  db complete {DROP TABLE xyz; -- hi }
858c82b350Sdrh} {1}
868c82b350Sdrhdo_test main-1.13 {
878c82b350Sdrh  db complete {DROP TABLE xyz; -- hi
888c82b350Sdrh  }
898c82b350Sdrh} {1}
90c4a3c779Sdrhdo_test main-1.14 {
91c4a3c779Sdrh  db complete {SELECT a-b FROM t1; }
92c4a3c779Sdrh} {1}
93c4a3c779Sdrhdo_test main-1.15 {
9448e5aa27Sdrh  db complete {SELECT a/e FROM t1 }
95c4a3c779Sdrh} {0}
96ce9079c8Sdrhdo_test main-1.16 {
97ce9079c8Sdrh  db complete {
98ce9079c8Sdrh    CREATE TABLE abc(x,y);
99ce9079c8Sdrh  }
100ce9079c8Sdrh} {1}
101798da52cSdrhifcapable {trigger} {
102ce9079c8Sdrh  do_test main-1.17 {
103ce9079c8Sdrh    db complete {
104ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
105ce9079c8Sdrh    }
106ce9079c8Sdrh  } {0}
1071691cd4bSdrh  do_test main-1.17.2 {
1081691cd4bSdrh    db complete {
1091691cd4bSdrh      EXPLAIN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
1101691cd4bSdrh    }
1111691cd4bSdrh  } {0}
1121691cd4bSdrh  do_test main-1.17.3 {
1131691cd4bSdrh    db complete {
1141691cd4bSdrh      EXPLAIN QUERY PLAN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
1151691cd4bSdrh    }
1161691cd4bSdrh  } {0}
117ce9079c8Sdrh  do_test main-1.18 {
118ce9079c8Sdrh    db complete {
119ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
120ce9079c8Sdrh    }
121ce9079c8Sdrh  } {1}
122ce9079c8Sdrh  do_test main-1.19 {
123ce9079c8Sdrh    db complete {
124ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE abc BEGIN
125ce9079c8Sdrh         UPDATE pqr;
126ce9079c8Sdrh         unknown command;
127ce9079c8Sdrh    }
128ce9079c8Sdrh  } {0}
129ce9079c8Sdrh  do_test main-1.20 {
130ce9079c8Sdrh    db complete {
131ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
132ce9079c8Sdrh         UPDATE pqr;
133ce9079c8Sdrh    }
134ce9079c8Sdrh  } {0}
135ce9079c8Sdrh  do_test main-1.21 {
136ce9079c8Sdrh    db complete {
137ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE end BEGIN
138ce9079c8Sdrh         SELECT a, b FROM end;
139ce9079c8Sdrh    }
140ce9079c8Sdrh  } {0}
141ce9079c8Sdrh  do_test main-1.22 {
142ce9079c8Sdrh    db complete {
143ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE end BEGIN
144ce9079c8Sdrh         SELECT a, b FROM end;
145ce9079c8Sdrh      END;
146ce9079c8Sdrh    }
147ce9079c8Sdrh  } {1}
148ce9079c8Sdrh  do_test main-1.23 {
149ce9079c8Sdrh    db complete {
150ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE end BEGIN
151ce9079c8Sdrh         SELECT a, b FROM end;
152ce9079c8Sdrh      END;
153ce9079c8Sdrh      SELECT a, b FROM end;
154ce9079c8Sdrh    }
155ce9079c8Sdrh  } {1}
156ce9079c8Sdrh  do_test main-1.24 {
157ce9079c8Sdrh    db complete {
158ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
159ce9079c8Sdrh         UPDATE pqr;
160ce9079c8Sdrh    }
161ce9079c8Sdrh  } {0}
162ce9079c8Sdrh  do_test main-1.25 {
163ce9079c8Sdrh    db complete {
164ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
1654b2f9368Sdrh         UPDATE cantor SET a=[;end;];;;
166ce9079c8Sdrh    }
167ce9079c8Sdrh  } {0}
168ce9079c8Sdrh  do_test main-1.26 {
169ce9079c8Sdrh    db complete {
170ce9079c8Sdrh      CREATE -- a comment
1714b2f9368Sdrh      TRIGGER exy AFTER DELETE backend BEGIN
172ce9079c8Sdrh         UPDATE pqr SET a=5;
173ce9079c8Sdrh    }
174ce9079c8Sdrh  } {0}
1757ad4334aSdrh  do_test main-1.27.1 {
176ce9079c8Sdrh    db complete {
177ce9079c8Sdrh      CREATE -- a comment
1784b2f9368Sdrh      TRIGGERX tangentxx AFTER DELETE backend BEGIN
179ce9079c8Sdrh         UPDATE pqr SET a=5;
180ce9079c8Sdrh    }
181ce9079c8Sdrh  } {1}
1827ad4334aSdrh  do_test main-1.27.2 {
1837ad4334aSdrh    db complete {
1844b2f9368Sdrh      CREATE/**/TRIGGER tiger00 AFTER DELETE backend BEGIN
1857ad4334aSdrh         UPDATE pqr SET a=5;
1867ad4334aSdrh    }
1877ad4334aSdrh  } {0}
1886bf89570Sdrh  ifcapable {explain} {
1897ad4334aSdrh    do_test main-1.27.3 {
1907ad4334aSdrh      db complete {
1917ad4334aSdrh        /* */ EXPLAIN -- A comment
1924b2f9368Sdrh        CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN
1937ad4334aSdrh           UPDATE pqr SET a=5;
1947ad4334aSdrh      }
1957ad4334aSdrh    } {0}
1966bf89570Sdrh  }
1977ad4334aSdrh  do_test main-1.27.4 {
1987ad4334aSdrh    db complete {
1997ad4334aSdrh      BOGUS token
2007ad4334aSdrh      CREATE  TRIGGER xyz AFTER DELETE backend BEGIN
2017ad4334aSdrh         UPDATE pqr SET a=5;
2027ad4334aSdrh    }
2037ad4334aSdrh  } {1}
2046bf89570Sdrh  ifcapable {explain} {
2057ad4334aSdrh    do_test main-1.27.5 {
2067ad4334aSdrh      db complete {
2077ad4334aSdrh        EXPLAIN
2087ad4334aSdrh        CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
2097ad4334aSdrh           UPDATE pqr SET a=5;
2107ad4334aSdrh      }
2117ad4334aSdrh    } {0}
2126bf89570Sdrh  }
213ce9079c8Sdrh  do_test main-1.28 {
214ce9079c8Sdrh    db complete {
21548e5aa27Sdrh      CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
216ce9079c8Sdrh         UPDATE pqr SET a=5;
217ce9079c8Sdrh    }
2187ad4334aSdrh  } {0}
219ce9079c8Sdrh  do_test main-1.29 {
220ce9079c8Sdrh    db complete {
221ce9079c8Sdrh      CREATE TRIGGER xyz AFTER DELETE backend BEGIN
222ce9079c8Sdrh         UPDATE pqr SET a=5;
223ce9079c8Sdrh         EXPLAIN select * from xyz;
224ce9079c8Sdrh    }
225ce9079c8Sdrh  } {0}
2264b2f9368Sdrh
2274b2f9368Sdrh} ;# end ifcapable {complete}
2284b2f9368Sdrh
229798da52cSdrh}
230524a5bf5Sdrhdo_test main-1.30 {
231524a5bf5Sdrh  db complete {
232524a5bf5Sdrh     CREATE TABLE /* In comment ; */
233524a5bf5Sdrh  }
234524a5bf5Sdrh} {0}
235524a5bf5Sdrhdo_test main-1.31 {
236524a5bf5Sdrh  db complete {
237524a5bf5Sdrh     CREATE TABLE /* In comment ; */ hi;
238524a5bf5Sdrh  }
239524a5bf5Sdrh} {1}
2407ad4334aSdrhdo_test main-1.31 {
2417ad4334aSdrh  db complete {
2427ad4334aSdrh     CREATE TABLE /* In comment ; */;
2437ad4334aSdrh  }
2447ad4334aSdrh} {1}
245524a5bf5Sdrhdo_test main-1.32 {
246524a5bf5Sdrh  db complete {
247524a5bf5Sdrh     stuff;
248524a5bf5Sdrh     /*
249524a5bf5Sdrh       CREATE TABLE
250524a5bf5Sdrh       multiple lines
251524a5bf5Sdrh       of text
252524a5bf5Sdrh     */
253524a5bf5Sdrh  }
254524a5bf5Sdrh} {1}
255524a5bf5Sdrhdo_test main-1.33 {
256524a5bf5Sdrh  db complete {
257524a5bf5Sdrh     /*
258524a5bf5Sdrh       CREATE TABLE
259524a5bf5Sdrh       multiple lines
260524a5bf5Sdrh       of text;
261524a5bf5Sdrh  }
262524a5bf5Sdrh} {0}
263524a5bf5Sdrhdo_test main-1.34 {
264524a5bf5Sdrh  db complete {
265524a5bf5Sdrh     /*
266524a5bf5Sdrh       CREATE TABLE
267524a5bf5Sdrh       multiple lines "*/
268524a5bf5Sdrh       of text;
269524a5bf5Sdrh  }
270524a5bf5Sdrh} {1}
271524a5bf5Sdrhdo_test main-1.35 {
272524a5bf5Sdrh  db complete {hi /**/ there;}
273524a5bf5Sdrh} {1}
2747ad4334aSdrhdo_test main-1.36 {
2757ad4334aSdrh  db complete {hi there/***/;}
2767ad4334aSdrh} {1}
2774b2f9368Sdrhdo_test main-1.37 {
2784b2f9368Sdrh  db complete {hi there/**}
2794b2f9368Sdrh} {0}
2804b2f9368Sdrhdo_test main-1.38 {
2814b2f9368Sdrh  db complete {hi [there}
2824b2f9368Sdrh} {0}
283ce9079c8Sdrh
2844b2f9368Sdrhifcapable {trigger} {
2854b2f9368Sdrh  # Characters less than \040 can never be part of an identifier.
2864b2f9368Sdrh  # Characters greater than \u177 are always identifier characters.
2874b2f9368Sdrh  do_test main-1.100 {
2884b2f9368Sdrh    db complete "create \037\036\035\034trigger\001\002;"
2894b2f9368Sdrh  } {1}
2904b2f9368Sdrh  do_test main-1.101 {
2914b2f9368Sdrh    db complete "create trigger\200;"
2924b2f9368Sdrh  } {1}
2934b2f9368Sdrh  do_test main-1.102 {
2944b2f9368Sdrh    db complete "create \200trigger;"
2954b2f9368Sdrh  } {1}
2964b2f9368Sdrh}
297ccae6026Sdrh
298cc85b411Sdrh
2993fc190ccSdrh# Try to open a database with a corrupt database file.
300cc85b411Sdrh#
301cb354603Sdanif {[permutation] == ""} {
302cc85b411Sdrh  do_test main-2.0 {
303cc85b411Sdrh    catch {db close}
304fda06befSmistachkin    forcedelete test.db
3053fc190ccSdrh    set fd [open test.db w]
306cc85b411Sdrh    puts $fd hi!
307cc85b411Sdrh    close $fd
308ef4ac8f9Sdrh    set v [catch {sqlite3 db test.db} msg]
309c22bd47dSdrh    if {$v} {lappend v $msg} {lappend v {}}
310cc85b411Sdrh  } {0 {}}
311cb354603Sdan}
312cc85b411Sdrh
313c837e709Sdrh# Here are some tests for tokenize.c.
314c837e709Sdrh#
315c837e709Sdrhdo_test main-3.1 {
316c837e709Sdrh  catch {db close}
317fda06befSmistachkin  foreach f [glob -nocomplain testdb/*] {forcedelete $f}
318fda06befSmistachkin  forcedelete testdb
319ef4ac8f9Sdrh  sqlite3 db testdb
320c837e709Sdrh  set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
321c837e709Sdrh  lappend v $msg
322b2bddbbcSdrh} {1 {unrecognized token: "!"}}
323c837e709Sdrhdo_test main-3.2 {
324c837e709Sdrh  catch {db close}
325fda06befSmistachkin  foreach f [glob -nocomplain testdb/*] {forcedelete $f}
326fda06befSmistachkin  forcedelete testdb
327ef4ac8f9Sdrh  sqlite3 db testdb
3280b2a5eeaSdrh  set v [catch {execsql {SELECT * from T1 where ^x}} msg]
329c837e709Sdrh  lappend v $msg
3300b2a5eeaSdrh} {1 {unrecognized token: "^"}}
331eef8b558Sdrhdo_test main-3.2.2 {
332eef8b558Sdrh  catchsql {select 'abc}
333eef8b558Sdrh} {1 {unrecognized token: "'abc"}}
334eef8b558Sdrhdo_test main-3.2.3 {
335eef8b558Sdrh  catchsql {select "abc}
336eef8b558Sdrh} {1 {unrecognized token: ""abc"}}
3374b2f9368Sdrhdo_test main-3.2.4 {
3384b2f9368Sdrh  catchsql {select [abc}
3394b2f9368Sdrh} {1 {unrecognized token: "[abc"}}
3404b2f9368Sdrhdo_test main-3.2.5 {
3414b2f9368Sdrh  catchsql {select x'4869}
3424b2f9368Sdrh} {1 {unrecognized token: "x'4869"}}
3434b2f9368Sdrhdo_test main-3.2.6 {
3444b2f9368Sdrh  catchsql {select x'4869'}
3454b2f9368Sdrh} {0 Hi}
3464b2f9368Sdrhdo_test main-3.2.7 {
3474b2f9368Sdrh  catchsql {select x'48695'}
3484b2f9368Sdrh} {1 {unrecognized token: "x'48695'"}}
3494b2f9368Sdrhdo_test main-3.2.8 {
3504b2f9368Sdrh  catchsql {select x'486x'}
3514b2f9368Sdrh} {1 {unrecognized token: "x'486x'"}}
3524b2f9368Sdrhdo_test main-3.2.9 {
3534b2f9368Sdrh  catchsql {select $abc(}
3544b2f9368Sdrh} {1 {unrecognized token: "$abc("}}
3554b2f9368Sdrhdo_test main-3.2.10 {
3564b2f9368Sdrh  catchsql {select $abc(x}
3574b2f9368Sdrh} {1 {unrecognized token: "$abc(x"}}
3584b2f9368Sdrhset xyz 123
3594b2f9368Sdrhdo_test main-3.2.11 {
3604b2f9368Sdrh  catchsql {select $::xyz}
3614b2f9368Sdrh} {0 123}
3624b2f9368Sdrhnamespace eval ::testnamespace {
3634b2f9368Sdrh  variable xyz 321
3644b2f9368Sdrh}
3654b2f9368Sdrhdo_test main-3.2.12 {
3664b2f9368Sdrh  catchsql {select $testnamespace::xyz}
3674b2f9368Sdrh} {0 321}
3684b2f9368Sdrhdo_test main-3.2.13 {
3694b2f9368Sdrh  catchsql {select $(abc)}
3704b2f9368Sdrh} {1 {unrecognized token: "$"}}
3714b2f9368Sdrhdo_test main-3.2.14 {
3724b2f9368Sdrh  set hi\u1234x 987
3734b2f9368Sdrh  db eval "select \$hi\u1234x"
3744b2f9368Sdrh} {987}
3754b2f9368Sdrhdo_test main-3.2.15 {
3764b2f9368Sdrh  catchsql "select 456\u1234"
3774b2f9368Sdrh} [list 1 "unrecognized token: \"456\u1234\""]
3784b2f9368Sdrhdo_test main-3.2.16 {
3794b2f9368Sdrh  catchsql {select cast(3.14e+4 AS integer)}
3804b2f9368Sdrh} {0 31400}
3814b2f9368Sdrhdo_test main-3.2.17 {
3824b2f9368Sdrh  catchsql {select cast(3.14e+04 AS integer)}
3834b2f9368Sdrh} {0 31400}
3844b2f9368Sdrhdo_test main-3.2.18 {
3854b2f9368Sdrh  catchsql {select cast(3.14e+004 AS integer)}
3864b2f9368Sdrh} {0 31400}
3874b2f9368Sdrhdo_test main-3.2.19 {
3884b2f9368Sdrh  catchsql {select cast(3.14e4 AS integer)}
3894b2f9368Sdrh} {0 31400}
3904b2f9368Sdrhdo_test main-3.2.20 {
3914b2f9368Sdrh  catchsql {select cast(3.14e04 AS integer)}
3924b2f9368Sdrh} {0 31400}
3934b2f9368Sdrhdo_test main-3.2.21 {
3944b2f9368Sdrh  catchsql {select cast(3.14e004 AS integer)}
3954b2f9368Sdrh} {0 31400}
3964b2f9368Sdrhdo_test main-3.2.16 {
3974b2f9368Sdrh  catchsql {select cast(3.14E+4 AS integer)}
3984b2f9368Sdrh} {0 31400}
3994b2f9368Sdrhdo_test main-3.2.17 {
4004b2f9368Sdrh  catchsql {select cast(3.14E+04 AS integer)}
4014b2f9368Sdrh} {0 31400}
4024b2f9368Sdrhdo_test main-3.2.18 {
4034b2f9368Sdrh  catchsql {select cast(3.14E+004 AS integer)}
4044b2f9368Sdrh} {0 31400}
4054b2f9368Sdrhdo_test main-3.2.19 {
4064b2f9368Sdrh  catchsql {select cast(3.14E4 AS integer)}
4074b2f9368Sdrh} {0 31400}
4084b2f9368Sdrhdo_test main-3.2.20 {
4094b2f9368Sdrh  catchsql {select cast(3.14E04 AS integer)}
4104b2f9368Sdrh} {0 31400}
4114b2f9368Sdrhdo_test main-3.2.21 {
4124b2f9368Sdrh  catchsql {select cast(3.14E004 AS integer)}
4134b2f9368Sdrh} {0 31400}
4144b2f9368Sdrhdo_test main-3.2.22 {
4154b2f9368Sdrh  catchsql {select cast(3.14e-4 * 1e8 AS integer)}
4164b2f9368Sdrh} {0 31400}
4174b2f9368Sdrhdo_test main-3.2.23 {
4184b2f9368Sdrh  catchsql {select cast(3.14E-04 * 1E08 AS integer)}
4194b2f9368Sdrh} {0 31400}
4204b2f9368Sdrhdo_test main-3.2.24 {
4214b2f9368Sdrh  catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}
4224b2f9368Sdrh} {0 31400}
4234b2f9368Sdrhdo_test main-3.2.25 {
4244b2f9368Sdrh  catchsql {select 123/*abc}
4254b2f9368Sdrh} {0 123}
4264b2f9368Sdrhdo_test main-3.2.26 {
4274b2f9368Sdrh  catchsql {select 123/***abc}
4284b2f9368Sdrh} {0 123}
4294b2f9368Sdrhdo_test main-3.2.27 {
4304b2f9368Sdrh  catchsql {select 123/*/*2}
4314b2f9368Sdrh} {0 123}
4324b2f9368Sdrhdo_test main-3.2.28 {
4334b2f9368Sdrh  catchsql {select 123/**/*2}
4344b2f9368Sdrh} {0 246}
4354b2f9368Sdrhdo_test main-3.2.29 {
4364b2f9368Sdrh  catchsql {select 123/}
437*6116ee4eSdrh} {1 {incomplete input}}
4384b2f9368Sdrhdo_test main-3.2.30 {
4394b2f9368Sdrh  catchsql {select 123--5}
4404b2f9368Sdrh} {0 123}
4414b2f9368Sdrh
442c837e709Sdrh
443c837e709Sdrhdo_test main-3.3 {
444c837e709Sdrh  catch {db close}
445fda06befSmistachkin  foreach f [glob -nocomplain testdb/*] {forcedelete $f}
446fda06befSmistachkin  forcedelete testdb
447ef4ac8f9Sdrh  sqlite3 db testdb
448c837e709Sdrh  execsql {
44948e5aa27Sdrh    create table T1(X REAL);  /* C-style comments allowed */
450bb07e9a3Sdrh    insert into T1 values(0.5);
451c837e709Sdrh    insert into T1 values(0.5e2);
452c837e709Sdrh    insert into T1 values(0.5e-002);
453c837e709Sdrh    insert into T1 values(5e-002);
454c837e709Sdrh    insert into T1 values(-5.0e-2);
455c837e709Sdrh    insert into T1 values(-5.1e-2);
456bb07e9a3Sdrh    insert into T1 values(0.5e2);
457bb07e9a3Sdrh    insert into T1 values(0.5E+02);
458c837e709Sdrh    insert into T1 values(5E+02);
459bb07e9a3Sdrh    insert into T1 values(5.0E+03);
460c837e709Sdrh    select x*10 from T1 order by x*5;
461c837e709Sdrh  }
4628a51256cSdrh} {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
463c837e709Sdrhdo_test main-3.4 {
464c837e709Sdrh  set v [catch {execsql {create bogus}} msg]
465c837e709Sdrh  lappend v $msg
466c837e709Sdrh} {1 {near "bogus": syntax error}}
467c837e709Sdrhdo_test main-3.5 {
468c837e709Sdrh  set v [catch {execsql {create}} msg]
469c837e709Sdrh  lappend v $msg
470*6116ee4eSdrh} {1 {incomplete input}}
471bb7ac00bSdrhdo_test main-3.6 {
472bb7ac00bSdrh  catchsql {SELECT 'abc' + #9}
473bb7ac00bSdrh} {1 {near "#9": syntax error}}
474bb7ac00bSdrh
475ca0c8971Sdanielk1977# The following test-case tests the linked list code used to manage
476ca0c8971Sdanielk1977# sqlite3_vfs structures.
477695ba06fSdrhif {$::tcl_platform(platform)=="unix"
4786f050aa2Sdanielk1977     && [info command sqlite3async_initialize]!=""} {
4794753889cSdrh  ifcapable threadsafe {
480ca0c8971Sdanielk1977    do_test main-4.1 {
481ca0c8971Sdanielk1977      sqlite3_crash_enable 1
482ca0c8971Sdanielk1977      sqlite3_crash_enable 0
483ca0c8971Sdanielk1977
4846f050aa2Sdanielk1977      sqlite3async_initialize "" 1
4856f050aa2Sdanielk1977      sqlite3async_shutdown
486ca0c8971Sdanielk1977
487ca0c8971Sdanielk1977      sqlite3_crash_enable 1
4886f050aa2Sdanielk1977      sqlite3async_initialize "" 1
489ca0c8971Sdanielk1977      sqlite3_crash_enable 0
4906f050aa2Sdanielk1977      sqlite3async_shutdown
491ca0c8971Sdanielk1977
492ca0c8971Sdanielk1977      sqlite3_crash_enable 1
4936f050aa2Sdanielk1977      sqlite3async_initialize "" 1
4946f050aa2Sdanielk1977      sqlite3async_shutdown
495ca0c8971Sdanielk1977      sqlite3_crash_enable 0
496ca0c8971Sdanielk1977
4976f050aa2Sdanielk1977      sqlite3async_initialize "" 1
498ca0c8971Sdanielk1977      sqlite3_crash_enable 1
499ca0c8971Sdanielk1977      sqlite3_crash_enable 0
5006f050aa2Sdanielk1977      sqlite3async_shutdown
501ca0c8971Sdanielk1977
5026f050aa2Sdanielk1977      sqlite3async_initialize "" 1
503ca0c8971Sdanielk1977      sqlite3_crash_enable 1
5046f050aa2Sdanielk1977      sqlite3async_shutdown
505ca0c8971Sdanielk1977      sqlite3_crash_enable 0
506ca0c8971Sdanielk1977    } {}
507ca0c8971Sdanielk1977    do_test main-4.2 {
508ca0c8971Sdanielk1977      set rc [catch {sqlite3 db test.db -vfs crash} msg]
509ca0c8971Sdanielk1977      list $rc $msg
510ca0c8971Sdanielk1977    } {1 {no such vfs: crash}}
511ca0c8971Sdanielk1977    do_test main-4.3 {
512ca0c8971Sdanielk1977      set rc [catch {sqlite3 db test.db -vfs async} msg]
513ca0c8971Sdanielk1977      list $rc $msg
514ca0c8971Sdanielk1977    } {1 {no such vfs: async}}
5154753889cSdrh  }
5164753889cSdrh}
5175bfff9d2Sdrh
5185bfff9d2Sdrh# Print the version number so that it can be picked up by releasetest.tcl.
5195bfff9d2Sdrh#
5205bfff9d2Sdrhputs [db one {SELECT 'VERSION: ' ||
5215bfff9d2Sdrh                  sqlite_version() || ' ' ||
5225bfff9d2Sdrh                  sqlite_source_id();}]
523edb31cd1Sdrh
524edb31cd1Sdrh# Do deliberate failures if the TEST_FAILURE environment variable is set.
525edb31cd1Sdrh# This is done to verify that failure notifications are detected by the
526edb31cd1Sdrh# releasetest.tcl script, or possibly by other scripts involved in automatic
527edb31cd1Sdrh# testing.
528edb31cd1Sdrh#
529edb31cd1Sdrhif {[info exists ::env(TEST_FAILURE)]} {
530edb31cd1Sdrh  set res 123
531edb31cd1Sdrh  if {$::env(TEST_FAILURE)==0} {set res 234}
532edb31cd1Sdrh  do_test main-99.1 {
533edb31cd1Sdrh     bad_behavior $::env(TEST_FAILURE)
534edb31cd1Sdrh     set x 123
535edb31cd1Sdrh  } $res
536edb31cd1Sdrh}
537c837e709Sdrh
538cc85b411Sdrhfinish_test
539