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