Annotation of embedaddon/sqlite3/test/main.test, revision 1.1
1.1 ! misho 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.32 2009/04/28 04:51:29 drh Exp $
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18:
! 19: # Only do the next group of tests if the sqlite3_complete API is available
! 20: #
! 21: ifcapable {complete} {
! 22:
! 23: # Tests of the sqlite_complete() function.
! 24: #
! 25: do_test main-1.1 {
! 26: db complete {This is a test}
! 27: } {0}
! 28: do_test main-1.2.0 {
! 29: db complete {
! 30: }
! 31: } {0}
! 32: do_test main-1.2.1 {
! 33: db complete {}
! 34: } {0}
! 35: do_test main-1.3.0 {
! 36: db complete {
! 37: -- a comment ;
! 38: }
! 39: } {0}
! 40: do_test main-1.3.1 {
! 41: db complete {
! 42: /* a comment ; */
! 43: }
! 44: } {0}
! 45: do_test main-1.4.0 {
! 46: db complete {
! 47: -- a comment ;
! 48: ;
! 49: }
! 50: } {1}
! 51: do_test main-1.4.1 {
! 52: db complete {
! 53: /* a comment ; */
! 54: ;
! 55: }
! 56: } {1}
! 57: do_test main-1.4.2 {
! 58: db complete {
! 59: /* a comment ; */ ;
! 60: }
! 61: } {1}
! 62: do_test main-1.5 {
! 63: db complete {DROP TABLE 'xyz;}
! 64: } {0}
! 65: do_test main-1.6 {
! 66: db complete {DROP TABLE 'xyz';}
! 67: } {1}
! 68: do_test main-1.7 {
! 69: db complete {DROP TABLE "xyz;}
! 70: } {0}
! 71: do_test main-1.8 {
! 72: db complete {DROP TABLE "xyz';}
! 73: } {0}
! 74: do_test main-1.9 {
! 75: db complete {DROP TABLE "xyz";}
! 76: } {1}
! 77: do_test main-1.10 {
! 78: db complete {DROP TABLE xyz; hi}
! 79: } {0}
! 80: do_test main-1.11 {
! 81: db complete {DROP TABLE xyz; }
! 82: } {1}
! 83: do_test main-1.12 {
! 84: db complete {DROP TABLE xyz; -- hi }
! 85: } {1}
! 86: do_test main-1.13 {
! 87: db complete {DROP TABLE xyz; -- hi
! 88: }
! 89: } {1}
! 90: do_test main-1.14 {
! 91: db complete {SELECT a-b FROM t1; }
! 92: } {1}
! 93: do_test main-1.15 {
! 94: db complete {SELECT a/e FROM t1 }
! 95: } {0}
! 96: do_test main-1.16 {
! 97: db complete {
! 98: CREATE TABLE abc(x,y);
! 99: }
! 100: } {1}
! 101: ifcapable {trigger} {
! 102: do_test main-1.17 {
! 103: db complete {
! 104: CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
! 105: }
! 106: } {0}
! 107: do_test main-1.17.2 {
! 108: db complete {
! 109: EXPLAIN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
! 110: }
! 111: } {0}
! 112: do_test main-1.17.3 {
! 113: db complete {
! 114: EXPLAIN QUERY PLAN CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr;
! 115: }
! 116: } {0}
! 117: do_test main-1.18 {
! 118: db complete {
! 119: CREATE TRIGGER xyz AFTER DELETE abc BEGIN UPDATE pqr; END;
! 120: }
! 121: } {1}
! 122: do_test main-1.19 {
! 123: db complete {
! 124: CREATE TRIGGER xyz AFTER DELETE abc BEGIN
! 125: UPDATE pqr;
! 126: unknown command;
! 127: }
! 128: } {0}
! 129: do_test main-1.20 {
! 130: db complete {
! 131: CREATE TRIGGER xyz AFTER DELETE backend BEGIN
! 132: UPDATE pqr;
! 133: }
! 134: } {0}
! 135: do_test main-1.21 {
! 136: db complete {
! 137: CREATE TRIGGER xyz AFTER DELETE end BEGIN
! 138: SELECT a, b FROM end;
! 139: }
! 140: } {0}
! 141: do_test main-1.22 {
! 142: db complete {
! 143: CREATE TRIGGER xyz AFTER DELETE end BEGIN
! 144: SELECT a, b FROM end;
! 145: END;
! 146: }
! 147: } {1}
! 148: do_test main-1.23 {
! 149: db complete {
! 150: CREATE TRIGGER xyz AFTER DELETE end BEGIN
! 151: SELECT a, b FROM end;
! 152: END;
! 153: SELECT a, b FROM end;
! 154: }
! 155: } {1}
! 156: do_test main-1.24 {
! 157: db complete {
! 158: CREATE TRIGGER xyz AFTER DELETE [;end;] BEGIN
! 159: UPDATE pqr;
! 160: }
! 161: } {0}
! 162: do_test main-1.25 {
! 163: db complete {
! 164: CREATE TRIGGER xyz AFTER DELETE backend BEGIN
! 165: UPDATE cantor SET a=[;end;];;;
! 166: }
! 167: } {0}
! 168: do_test main-1.26 {
! 169: db complete {
! 170: CREATE -- a comment
! 171: TRIGGER exy AFTER DELETE backend BEGIN
! 172: UPDATE pqr SET a=5;
! 173: }
! 174: } {0}
! 175: do_test main-1.27.1 {
! 176: db complete {
! 177: CREATE -- a comment
! 178: TRIGGERX tangentxx AFTER DELETE backend BEGIN
! 179: UPDATE pqr SET a=5;
! 180: }
! 181: } {1}
! 182: do_test main-1.27.2 {
! 183: db complete {
! 184: CREATE/**/TRIGGER tiger00 AFTER DELETE backend BEGIN
! 185: UPDATE pqr SET a=5;
! 186: }
! 187: } {0}
! 188: ifcapable {explain} {
! 189: do_test main-1.27.3 {
! 190: db complete {
! 191: /* */ EXPLAIN -- A comment
! 192: CREATE/**/TRIGGER ezxyz12 AFTER DELETE backend BEGIN
! 193: UPDATE pqr SET a=5;
! 194: }
! 195: } {0}
! 196: }
! 197: do_test main-1.27.4 {
! 198: db complete {
! 199: BOGUS token
! 200: CREATE TRIGGER xyz AFTER DELETE backend BEGIN
! 201: UPDATE pqr SET a=5;
! 202: }
! 203: } {1}
! 204: ifcapable {explain} {
! 205: do_test main-1.27.5 {
! 206: db complete {
! 207: EXPLAIN
! 208: CREATE TEMP TRIGGER xyz AFTER DELETE backend BEGIN
! 209: UPDATE pqr SET a=5;
! 210: }
! 211: } {0}
! 212: }
! 213: do_test main-1.28 {
! 214: db complete {
! 215: CREATE TEMPORARY TRIGGER xyz AFTER DELETE backend BEGIN
! 216: UPDATE pqr SET a=5;
! 217: }
! 218: } {0}
! 219: do_test main-1.29 {
! 220: db complete {
! 221: CREATE TRIGGER xyz AFTER DELETE backend BEGIN
! 222: UPDATE pqr SET a=5;
! 223: EXPLAIN select * from xyz;
! 224: }
! 225: } {0}
! 226:
! 227: } ;# end ifcapable {complete}
! 228:
! 229: }
! 230: do_test main-1.30 {
! 231: db complete {
! 232: CREATE TABLE /* In comment ; */
! 233: }
! 234: } {0}
! 235: do_test main-1.31 {
! 236: db complete {
! 237: CREATE TABLE /* In comment ; */ hi;
! 238: }
! 239: } {1}
! 240: do_test main-1.31 {
! 241: db complete {
! 242: CREATE TABLE /* In comment ; */;
! 243: }
! 244: } {1}
! 245: do_test main-1.32 {
! 246: db complete {
! 247: stuff;
! 248: /*
! 249: CREATE TABLE
! 250: multiple lines
! 251: of text
! 252: */
! 253: }
! 254: } {1}
! 255: do_test main-1.33 {
! 256: db complete {
! 257: /*
! 258: CREATE TABLE
! 259: multiple lines
! 260: of text;
! 261: }
! 262: } {0}
! 263: do_test main-1.34 {
! 264: db complete {
! 265: /*
! 266: CREATE TABLE
! 267: multiple lines "*/
! 268: of text;
! 269: }
! 270: } {1}
! 271: do_test main-1.35 {
! 272: db complete {hi /**/ there;}
! 273: } {1}
! 274: do_test main-1.36 {
! 275: db complete {hi there/***/;}
! 276: } {1}
! 277: do_test main-1.37 {
! 278: db complete {hi there/**}
! 279: } {0}
! 280: do_test main-1.38 {
! 281: db complete {hi [there}
! 282: } {0}
! 283:
! 284: ifcapable {trigger} {
! 285: # Characters less than \040 can never be part of an identifier.
! 286: # Characters greater than \u177 are always identifier characters.
! 287: do_test main-1.100 {
! 288: db complete "create \037\036\035\034trigger\001\002;"
! 289: } {1}
! 290: do_test main-1.101 {
! 291: db complete "create trigger\200;"
! 292: } {1}
! 293: do_test main-1.102 {
! 294: db complete "create \200trigger;"
! 295: } {1}
! 296: }
! 297:
! 298:
! 299: # Try to open a database with a corrupt database file.
! 300: #
! 301: if {[permutation] == ""} {
! 302: do_test main-2.0 {
! 303: catch {db close}
! 304: forcedelete test.db
! 305: set fd [open test.db w]
! 306: puts $fd hi!
! 307: close $fd
! 308: set v [catch {sqlite3 db test.db} msg]
! 309: if {$v} {lappend v $msg} {lappend v {}}
! 310: } {0 {}}
! 311: }
! 312:
! 313: # Here are some tests for tokenize.c.
! 314: #
! 315: do_test main-3.1 {
! 316: catch {db close}
! 317: foreach f [glob -nocomplain testdb/*] {forcedelete $f}
! 318: forcedelete testdb
! 319: sqlite3 db testdb
! 320: set v [catch {execsql {SELECT * from T1 where x!!5}} msg]
! 321: lappend v $msg
! 322: } {1 {unrecognized token: "!!"}}
! 323: do_test main-3.2 {
! 324: catch {db close}
! 325: foreach f [glob -nocomplain testdb/*] {forcedelete $f}
! 326: forcedelete testdb
! 327: sqlite3 db testdb
! 328: set v [catch {execsql {SELECT * from T1 where ^x}} msg]
! 329: lappend v $msg
! 330: } {1 {unrecognized token: "^"}}
! 331: do_test main-3.2.2 {
! 332: catchsql {select 'abc}
! 333: } {1 {unrecognized token: "'abc"}}
! 334: do_test main-3.2.3 {
! 335: catchsql {select "abc}
! 336: } {1 {unrecognized token: ""abc"}}
! 337: do_test main-3.2.4 {
! 338: catchsql {select [abc}
! 339: } {1 {unrecognized token: "[abc"}}
! 340: do_test main-3.2.5 {
! 341: catchsql {select x'4869}
! 342: } {1 {unrecognized token: "x'4869"}}
! 343: do_test main-3.2.6 {
! 344: catchsql {select x'4869'}
! 345: } {0 Hi}
! 346: do_test main-3.2.7 {
! 347: catchsql {select x'48695'}
! 348: } {1 {unrecognized token: "x'48695'"}}
! 349: do_test main-3.2.8 {
! 350: catchsql {select x'486x'}
! 351: } {1 {unrecognized token: "x'486x'"}}
! 352: do_test main-3.2.9 {
! 353: catchsql {select $abc(}
! 354: } {1 {unrecognized token: "$abc("}}
! 355: do_test main-3.2.10 {
! 356: catchsql {select $abc(x}
! 357: } {1 {unrecognized token: "$abc(x"}}
! 358: set xyz 123
! 359: do_test main-3.2.11 {
! 360: catchsql {select $::xyz}
! 361: } {0 123}
! 362: namespace eval ::testnamespace {
! 363: variable xyz 321
! 364: }
! 365: do_test main-3.2.12 {
! 366: catchsql {select $testnamespace::xyz}
! 367: } {0 321}
! 368: do_test main-3.2.13 {
! 369: catchsql {select $(abc)}
! 370: } {1 {unrecognized token: "$"}}
! 371: do_test main-3.2.14 {
! 372: set hi\u1234x 987
! 373: db eval "select \$hi\u1234x"
! 374: } {987}
! 375: do_test main-3.2.15 {
! 376: catchsql "select 456\u1234"
! 377: } [list 1 "unrecognized token: \"456\u1234\""]
! 378: do_test main-3.2.16 {
! 379: catchsql {select cast(3.14e+4 AS integer)}
! 380: } {0 31400}
! 381: do_test main-3.2.17 {
! 382: catchsql {select cast(3.14e+04 AS integer)}
! 383: } {0 31400}
! 384: do_test main-3.2.18 {
! 385: catchsql {select cast(3.14e+004 AS integer)}
! 386: } {0 31400}
! 387: do_test main-3.2.19 {
! 388: catchsql {select cast(3.14e4 AS integer)}
! 389: } {0 31400}
! 390: do_test main-3.2.20 {
! 391: catchsql {select cast(3.14e04 AS integer)}
! 392: } {0 31400}
! 393: do_test main-3.2.21 {
! 394: catchsql {select cast(3.14e004 AS integer)}
! 395: } {0 31400}
! 396: do_test main-3.2.16 {
! 397: catchsql {select cast(3.14E+4 AS integer)}
! 398: } {0 31400}
! 399: do_test main-3.2.17 {
! 400: catchsql {select cast(3.14E+04 AS integer)}
! 401: } {0 31400}
! 402: do_test main-3.2.18 {
! 403: catchsql {select cast(3.14E+004 AS integer)}
! 404: } {0 31400}
! 405: do_test main-3.2.19 {
! 406: catchsql {select cast(3.14E4 AS integer)}
! 407: } {0 31400}
! 408: do_test main-3.2.20 {
! 409: catchsql {select cast(3.14E04 AS integer)}
! 410: } {0 31400}
! 411: do_test main-3.2.21 {
! 412: catchsql {select cast(3.14E004 AS integer)}
! 413: } {0 31400}
! 414: do_test main-3.2.22 {
! 415: catchsql {select cast(3.14e-4 * 1e8 AS integer)}
! 416: } {0 31400}
! 417: do_test main-3.2.23 {
! 418: catchsql {select cast(3.14E-04 * 1E08 AS integer)}
! 419: } {0 31400}
! 420: do_test main-3.2.24 {
! 421: catchsql {select cast(3.14e-004 * 01.0E+8 AS integer)}
! 422: } {0 31400}
! 423: do_test main-3.2.25 {
! 424: catchsql {select 123/*abc}
! 425: } {0 123}
! 426: do_test main-3.2.26 {
! 427: catchsql {select 123/***abc}
! 428: } {0 123}
! 429: do_test main-3.2.27 {
! 430: catchsql {select 123/*/*2}
! 431: } {0 123}
! 432: do_test main-3.2.28 {
! 433: catchsql {select 123/**/*2}
! 434: } {0 246}
! 435: do_test main-3.2.29 {
! 436: catchsql {select 123/}
! 437: } {1 {near "/": syntax error}}
! 438: do_test main-3.2.30 {
! 439: catchsql {select 123--5}
! 440: } {0 123}
! 441:
! 442:
! 443: do_test main-3.3 {
! 444: catch {db close}
! 445: foreach f [glob -nocomplain testdb/*] {forcedelete $f}
! 446: forcedelete testdb
! 447: sqlite3 db testdb
! 448: execsql {
! 449: create table T1(X REAL); /* C-style comments allowed */
! 450: insert into T1 values(0.5);
! 451: insert into T1 values(0.5e2);
! 452: insert into T1 values(0.5e-002);
! 453: insert into T1 values(5e-002);
! 454: insert into T1 values(-5.0e-2);
! 455: insert into T1 values(-5.1e-2);
! 456: insert into T1 values(0.5e2);
! 457: insert into T1 values(0.5E+02);
! 458: insert into T1 values(5E+02);
! 459: insert into T1 values(5.0E+03);
! 460: select x*10 from T1 order by x*5;
! 461: }
! 462: } {-0.51 -0.5 0.05 0.5 5.0 500.0 500.0 500.0 5000.0 50000.0}
! 463: do_test main-3.4 {
! 464: set v [catch {execsql {create bogus}} msg]
! 465: lappend v $msg
! 466: } {1 {near "bogus": syntax error}}
! 467: do_test main-3.5 {
! 468: set v [catch {execsql {create}} msg]
! 469: lappend v $msg
! 470: } {1 {near "create": syntax error}}
! 471: do_test main-3.6 {
! 472: catchsql {SELECT 'abc' + #9}
! 473: } {1 {near "#9": syntax error}}
! 474:
! 475: # The following test-case tests the linked list code used to manage
! 476: # sqlite3_vfs structures.
! 477: if {$::tcl_platform(platform)=="unix"
! 478: && [info command sqlite3async_initialize]!=""} {
! 479: ifcapable threadsafe {
! 480: do_test main-4.1 {
! 481: sqlite3_crash_enable 1
! 482: sqlite3_crash_enable 0
! 483:
! 484: sqlite3async_initialize "" 1
! 485: sqlite3async_shutdown
! 486:
! 487: sqlite3_crash_enable 1
! 488: sqlite3async_initialize "" 1
! 489: sqlite3_crash_enable 0
! 490: sqlite3async_shutdown
! 491:
! 492: sqlite3_crash_enable 1
! 493: sqlite3async_initialize "" 1
! 494: sqlite3async_shutdown
! 495: sqlite3_crash_enable 0
! 496:
! 497: sqlite3async_initialize "" 1
! 498: sqlite3_crash_enable 1
! 499: sqlite3_crash_enable 0
! 500: sqlite3async_shutdown
! 501:
! 502: sqlite3async_initialize "" 1
! 503: sqlite3_crash_enable 1
! 504: sqlite3async_shutdown
! 505: sqlite3_crash_enable 0
! 506: } {}
! 507: do_test main-4.2 {
! 508: set rc [catch {sqlite3 db test.db -vfs crash} msg]
! 509: list $rc $msg
! 510: } {1 {no such vfs: crash}}
! 511: do_test main-4.3 {
! 512: set rc [catch {sqlite3 db test.db -vfs async} msg]
! 513: list $rc $msg
! 514: } {1 {no such vfs: async}}
! 515: }
! 516: }
! 517:
! 518: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>