Annotation of embedaddon/sqlite3/test/misc1.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.
! 12: #
! 13: # This file implements tests for miscellanous features that were
! 14: # left out of other test files.
! 15: #
! 16: # $Id: misc1.test,v 1.42 2007/11/05 14:58:23 drh Exp $
! 17:
! 18: set testdir [file dirname $argv0]
! 19: source $testdir/tester.tcl
! 20:
! 21: # Mimic the SQLite 2 collation type NUMERIC.
! 22: db collate numeric numeric_collate
! 23: proc numeric_collate {lhs rhs} {
! 24: if {$lhs == $rhs} {return 0}
! 25: return [expr ($lhs>$rhs)?1:-1]
! 26: }
! 27:
! 28: # Mimic the SQLite 2 collation type TEXT.
! 29: db collate text text_collate
! 30: proc numeric_collate {lhs rhs} {
! 31: return [string compare $lhs $rhs]
! 32: }
! 33:
! 34: # Test the creation and use of tables that have a large number
! 35: # of columns.
! 36: #
! 37: do_test misc1-1.1 {
! 38: set cmd "CREATE TABLE manycol(x0 text"
! 39: for {set i 1} {$i<=99} {incr i} {
! 40: append cmd ",x$i text"
! 41: }
! 42: append cmd ")";
! 43: execsql $cmd
! 44: set cmd "INSERT INTO manycol VALUES(0"
! 45: for {set i 1} {$i<=99} {incr i} {
! 46: append cmd ",$i"
! 47: }
! 48: append cmd ")";
! 49: execsql $cmd
! 50: execsql "SELECT x99 FROM manycol"
! 51: } 99
! 52: do_test misc1-1.2 {
! 53: execsql {SELECT x0, x10, x25, x50, x75 FROM manycol}
! 54: } {0 10 25 50 75}
! 55: do_test misc1-1.3.1 {
! 56: for {set j 100} {$j<=1000} {incr j 100} {
! 57: set cmd "INSERT INTO manycol VALUES($j"
! 58: for {set i 1} {$i<=99} {incr i} {
! 59: append cmd ",[expr {$i+$j}]"
! 60: }
! 61: append cmd ")"
! 62: execsql $cmd
! 63: }
! 64: execsql {SELECT x50 FROM manycol ORDER BY x80+0}
! 65: } {50 150 250 350 450 550 650 750 850 950 1050}
! 66: do_test misc1-1.3.2 {
! 67: execsql {SELECT x50 FROM manycol ORDER BY x80}
! 68: } {1050 150 250 350 450 550 650 750 50 850 950}
! 69: do_test misc1-1.4 {
! 70: execsql {SELECT x75 FROM manycol WHERE x50=350}
! 71: } 375
! 72: do_test misc1-1.5 {
! 73: execsql {SELECT x50 FROM manycol WHERE x99=599}
! 74: } 550
! 75: do_test misc1-1.6 {
! 76: execsql {CREATE INDEX manycol_idx1 ON manycol(x99)}
! 77: execsql {SELECT x50 FROM manycol WHERE x99=899}
! 78: } 850
! 79: do_test misc1-1.7 {
! 80: execsql {SELECT count(*) FROM manycol}
! 81: } 11
! 82: do_test misc1-1.8 {
! 83: execsql {DELETE FROM manycol WHERE x98=1234}
! 84: execsql {SELECT count(*) FROM manycol}
! 85: } 11
! 86: do_test misc1-1.9 {
! 87: execsql {DELETE FROM manycol WHERE x98=998}
! 88: execsql {SELECT count(*) FROM manycol}
! 89: } 10
! 90: do_test misc1-1.10 {
! 91: execsql {DELETE FROM manycol WHERE x99=500}
! 92: execsql {SELECT count(*) FROM manycol}
! 93: } 10
! 94: do_test misc1-1.11 {
! 95: execsql {DELETE FROM manycol WHERE x99=599}
! 96: execsql {SELECT count(*) FROM manycol}
! 97: } 9
! 98:
! 99: # Check GROUP BY expressions that name two or more columns.
! 100: #
! 101: do_test misc1-2.1 {
! 102: execsql {
! 103: BEGIN TRANSACTION;
! 104: CREATE TABLE agger(one text, two text, three text, four text);
! 105: INSERT INTO agger VALUES(1, 'one', 'hello', 'yes');
! 106: INSERT INTO agger VALUES(2, 'two', 'howdy', 'no');
! 107: INSERT INTO agger VALUES(3, 'thr', 'howareya', 'yes');
! 108: INSERT INTO agger VALUES(4, 'two', 'lothere', 'yes');
! 109: INSERT INTO agger VALUES(5, 'one', 'atcha', 'yes');
! 110: INSERT INTO agger VALUES(6, 'two', 'hello', 'no');
! 111: COMMIT
! 112: }
! 113: execsql {SELECT count(*) FROM agger}
! 114: } 6
! 115: do_test misc1-2.2 {
! 116: execsql {SELECT sum(one), two, four FROM agger
! 117: GROUP BY two, four ORDER BY sum(one) desc}
! 118: } {8 two no 6 one yes 4 two yes 3 thr yes}
! 119: do_test misc1-2.3 {
! 120: execsql {SELECT sum((one)), (two), (four) FROM agger
! 121: GROUP BY (two), (four) ORDER BY sum(one) desc}
! 122: } {8 two no 6 one yes 4 two yes 3 thr yes}
! 123:
! 124: # Here's a test for a bug found by Joel Lucsy. The code below
! 125: # was causing an assertion failure.
! 126: #
! 127: do_test misc1-3.1 {
! 128: set r [execsql {
! 129: CREATE TABLE t1(a);
! 130: INSERT INTO t1 VALUES('hi');
! 131: PRAGMA full_column_names=on;
! 132: SELECT rowid, * FROM t1;
! 133: }]
! 134: lindex $r 1
! 135: } {hi}
! 136:
! 137: # Here's a test for yet another bug found by Joel Lucsy. The code
! 138: # below was causing an assertion failure.
! 139: #
! 140: do_test misc1-4.1 {
! 141: execsql {
! 142: BEGIN;
! 143: CREATE TABLE t2(a);
! 144: INSERT INTO t2 VALUES('This is a long string to use up a lot of disk -');
! 145: UPDATE t2 SET a=a||a||a||a;
! 146: INSERT INTO t2 SELECT '1 - ' || a FROM t2;
! 147: INSERT INTO t2 SELECT '2 - ' || a FROM t2;
! 148: INSERT INTO t2 SELECT '3 - ' || a FROM t2;
! 149: INSERT INTO t2 SELECT '4 - ' || a FROM t2;
! 150: INSERT INTO t2 SELECT '5 - ' || a FROM t2;
! 151: INSERT INTO t2 SELECT '6 - ' || a FROM t2;
! 152: COMMIT;
! 153: SELECT count(*) FROM t2;
! 154: }
! 155: } {64}
! 156:
! 157: # Make sure we actually see a semicolon or end-of-file in the SQL input
! 158: # before executing a command. Thus if "WHERE" is misspelled on an UPDATE,
! 159: # the user won't accidently update every record.
! 160: #
! 161: do_test misc1-5.1 {
! 162: catchsql {
! 163: CREATE TABLE t3(a,b);
! 164: INSERT INTO t3 VALUES(1,2);
! 165: INSERT INTO t3 VALUES(3,4);
! 166: UPDATE t3 SET a=0 WHEREwww b=2;
! 167: }
! 168: } {1 {near "WHEREwww": syntax error}}
! 169: do_test misc1-5.2 {
! 170: execsql {
! 171: SELECT * FROM t3 ORDER BY a;
! 172: }
! 173: } {1 2 3 4}
! 174:
! 175: # Certain keywords (especially non-standard keywords like "REPLACE") can
! 176: # also be used as identifiers. The way this works in the parser is that
! 177: # the parser first detects a syntax error, the error handling routine
! 178: # sees that the special keyword caused the error, then replaces the keyword
! 179: # with "ID" and tries again.
! 180: #
! 181: # Check the operation of this logic.
! 182: #
! 183: do_test misc1-6.1 {
! 184: catchsql {
! 185: CREATE TABLE t4(
! 186: abort, asc, begin, cluster, conflict, copy, delimiters, desc, end,
! 187: explain, fail, ignore, key, offset, pragma, replace, temp,
! 188: vacuum, view
! 189: );
! 190: }
! 191: } {0 {}}
! 192: do_test misc1-6.2 {
! 193: catchsql {
! 194: INSERT INTO t4
! 195: VALUES(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);
! 196: }
! 197: } {0 {}}
! 198: do_test misc1-6.3 {
! 199: execsql {
! 200: SELECT * FROM t4
! 201: }
! 202: } {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19}
! 203: do_test misc1-6.4 {
! 204: execsql {
! 205: SELECT abort+asc,max(key,pragma,temp) FROM t4
! 206: }
! 207: } {3 17}
! 208:
! 209: # Test for multi-column primary keys, and for multiple primary keys.
! 210: #
! 211: do_test misc1-7.1 {
! 212: catchsql {
! 213: CREATE TABLE error1(
! 214: a TYPE PRIMARY KEY,
! 215: b TYPE PRIMARY KEY
! 216: );
! 217: }
! 218: } {1 {table "error1" has more than one primary key}}
! 219: do_test misc1-7.2 {
! 220: catchsql {
! 221: CREATE TABLE error1(
! 222: a INTEGER PRIMARY KEY,
! 223: b TYPE PRIMARY KEY
! 224: );
! 225: }
! 226: } {1 {table "error1" has more than one primary key}}
! 227: do_test misc1-7.3 {
! 228: execsql {
! 229: CREATE TABLE t5(a,b,c,PRIMARY KEY(a,b));
! 230: INSERT INTO t5 VALUES(1,2,3);
! 231: SELECT * FROM t5 ORDER BY a;
! 232: }
! 233: } {1 2 3}
! 234: do_test misc1-7.4 {
! 235: catchsql {
! 236: INSERT INTO t5 VALUES(1,2,4);
! 237: }
! 238: } {1 {columns a, b are not unique}}
! 239: do_test misc1-7.5 {
! 240: catchsql {
! 241: INSERT INTO t5 VALUES(0,2,4);
! 242: }
! 243: } {0 {}}
! 244: do_test misc1-7.6 {
! 245: execsql {
! 246: SELECT * FROM t5 ORDER BY a;
! 247: }
! 248: } {0 2 4 1 2 3}
! 249:
! 250: do_test misc1-8.1 {
! 251: catchsql {
! 252: SELECT *;
! 253: }
! 254: } {1 {no tables specified}}
! 255: do_test misc1-8.2 {
! 256: catchsql {
! 257: SELECT t1.*;
! 258: }
! 259: } {1 {no such table: t1}}
! 260:
! 261: execsql {
! 262: DROP TABLE t1;
! 263: DROP TABLE t2;
! 264: DROP TABLE t3;
! 265: DROP TABLE t4;
! 266: }
! 267:
! 268: # 64-bit integers are represented exactly.
! 269: #
! 270: do_test misc1-9.1 {
! 271: catchsql {
! 272: CREATE TABLE t1(a unique not null, b unique not null);
! 273: INSERT INTO t1 VALUES('a',1234567890123456789);
! 274: INSERT INTO t1 VALUES('b',1234567891123456789);
! 275: INSERT INTO t1 VALUES('c',1234567892123456789);
! 276: SELECT * FROM t1;
! 277: }
! 278: } {0 {a 1234567890123456789 b 1234567891123456789 c 1234567892123456789}}
! 279:
! 280: # A WHERE clause is not allowed to contain more than 99 terms. Check to
! 281: # make sure this limit is enforced.
! 282: #
! 283: # 2005-07-16: There is no longer a limit on the number of terms in a
! 284: # WHERE clause. But keep these tests just so that we have some tests
! 285: # that use a large number of terms in the WHERE clause.
! 286: #
! 287: do_test misc1-10.0 {
! 288: execsql {SELECT count(*) FROM manycol}
! 289: } {9}
! 290: do_test misc1-10.1 {
! 291: set ::where {WHERE x0>=0}
! 292: for {set i 1} {$i<=99} {incr i} {
! 293: append ::where " AND x$i<>0"
! 294: }
! 295: catchsql "SELECT count(*) FROM manycol $::where"
! 296: } {0 9}
! 297: do_test misc1-10.2 {
! 298: catchsql "SELECT count(*) FROM manycol $::where AND rowid>0"
! 299: } {0 9}
! 300: do_test misc1-10.3 {
! 301: regsub "x0>=0" $::where "x0=0" ::where
! 302: catchsql "DELETE FROM manycol $::where"
! 303: } {0 {}}
! 304: do_test misc1-10.4 {
! 305: execsql {SELECT count(*) FROM manycol}
! 306: } {8}
! 307: do_test misc1-10.5 {
! 308: catchsql "DELETE FROM manycol $::where AND rowid>0"
! 309: } {0 {}}
! 310: do_test misc1-10.6 {
! 311: execsql {SELECT x1 FROM manycol WHERE x0=100}
! 312: } {101}
! 313: do_test misc1-10.7 {
! 314: regsub "x0=0" $::where "x0=100" ::where
! 315: catchsql "UPDATE manycol SET x1=x1+1 $::where"
! 316: } {0 {}}
! 317: do_test misc1-10.8 {
! 318: execsql {SELECT x1 FROM manycol WHERE x0=100}
! 319: } {102}
! 320: do_test misc1-10.9 {
! 321: catchsql "UPDATE manycol SET x1=x1+1 $::where AND rowid>0"
! 322: } {0 {}}
! 323: do_test misc1-10.10 {
! 324: execsql {SELECT x1 FROM manycol WHERE x0=100}
! 325: } {103}
! 326:
! 327: # Make sure the initialization works even if a database is opened while
! 328: # another process has the database locked.
! 329: #
! 330: # Update for v3: The BEGIN doesn't lock the database so the schema is read
! 331: # and the SELECT returns successfully.
! 332: do_test misc1-11.1 {
! 333: execsql {BEGIN}
! 334: execsql {UPDATE t1 SET a=0 WHERE 0}
! 335: sqlite3 db2 test.db
! 336: set rc [catch {db2 eval {SELECT count(*) FROM t1}} msg]
! 337: lappend rc $msg
! 338: # v2 result: {1 {database is locked}}
! 339: } {0 3}
! 340: do_test misc1-11.2 {
! 341: execsql {COMMIT}
! 342: set rc [catch {db2 eval {SELECT count(*) FROM t1}} msg]
! 343: db2 close
! 344: lappend rc $msg
! 345: } {0 3}
! 346:
! 347: # Make sure string comparisons really do compare strings in format4+.
! 348: # Similar tests in the format3.test file show that for format3 and earlier
! 349: # all comparisions where numeric if either operand looked like a number.
! 350: #
! 351: do_test misc1-12.1 {
! 352: execsql {SELECT '0'=='0.0'}
! 353: } {0}
! 354: do_test misc1-12.2 {
! 355: execsql {SELECT '0'==0.0}
! 356: } {0}
! 357: do_test misc1-12.3 {
! 358: execsql {SELECT '12345678901234567890'=='12345678901234567891'}
! 359: } {0}
! 360: do_test misc1-12.4 {
! 361: execsql {
! 362: CREATE TABLE t6(a INT UNIQUE, b TEXT UNIQUE);
! 363: INSERT INTO t6 VALUES('0','0.0');
! 364: SELECT * FROM t6;
! 365: }
! 366: } {0 0.0}
! 367: ifcapable conflict {
! 368: do_test misc1-12.5 {
! 369: execsql {
! 370: INSERT OR IGNORE INTO t6 VALUES(0.0,'x');
! 371: SELECT * FROM t6;
! 372: }
! 373: } {0 0.0}
! 374: do_test misc1-12.6 {
! 375: execsql {
! 376: INSERT OR IGNORE INTO t6 VALUES('y',0);
! 377: SELECT * FROM t6;
! 378: }
! 379: } {0 0.0 y 0}
! 380: }
! 381: do_test misc1-12.7 {
! 382: execsql {
! 383: CREATE TABLE t7(x INTEGER, y TEXT, z);
! 384: INSERT INTO t7 VALUES(0,0,1);
! 385: INSERT INTO t7 VALUES(0.0,0,2);
! 386: INSERT INTO t7 VALUES(0,0.0,3);
! 387: INSERT INTO t7 VALUES(0.0,0.0,4);
! 388: SELECT DISTINCT x, y FROM t7 ORDER BY z;
! 389: }
! 390: } {0 0 0 0.0}
! 391: do_test misc1-12.8 {
! 392: execsql {
! 393: SELECT min(z), max(z), count(z) FROM t7 GROUP BY x ORDER BY 1;
! 394: }
! 395: } {1 4 4}
! 396: do_test misc1-12.9 {
! 397: execsql {
! 398: SELECT min(z), max(z), count(z) FROM t7 GROUP BY y ORDER BY 1;
! 399: }
! 400: } {1 2 2 3 4 2}
! 401:
! 402: # This used to be an error. But we changed the code so that arbitrary
! 403: # identifiers can be used as a collating sequence. Collation is by text
! 404: # if the identifier contains "text", "blob", or "clob" and is numeric
! 405: # otherwise.
! 406: #
! 407: # Update: In v3, it is an error again.
! 408: #
! 409: #do_test misc1-12.10 {
! 410: # catchsql {
! 411: # SELECT * FROM t6 ORDER BY a COLLATE unknown;
! 412: # }
! 413: #} {0 {0 0 y 0}}
! 414: do_test misc1-12.11 {
! 415: execsql {
! 416: CREATE TABLE t8(x TEXT COLLATE numeric, y INTEGER COLLATE text, z);
! 417: INSERT INTO t8 VALUES(0,0,1);
! 418: INSERT INTO t8 VALUES(0.0,0,2);
! 419: INSERT INTO t8 VALUES(0,0.0,3);
! 420: INSERT INTO t8 VALUES(0.0,0.0,4);
! 421: SELECT DISTINCT x, y FROM t8 ORDER BY z;
! 422: }
! 423: } {0 0 0.0 0}
! 424: do_test misc1-12.12 {
! 425: execsql {
! 426: SELECT min(z), max(z), count(z) FROM t8 GROUP BY x ORDER BY 1;
! 427: }
! 428: } {1 3 2 2 4 2}
! 429: do_test misc1-12.13 {
! 430: execsql {
! 431: SELECT min(z), max(z), count(z) FROM t8 GROUP BY y ORDER BY 1;
! 432: }
! 433: } {1 4 4}
! 434:
! 435: # There was a problem with realloc() in the OP_MemStore operation of
! 436: # the VDBE. A buffer was being reallocated but some pointers into
! 437: # the old copy of the buffer were not being moved over to the new copy.
! 438: # The following code tests for the problem.
! 439: #
! 440: ifcapable subquery {
! 441: do_test misc1-13.1 {
! 442: execsql {
! 443: CREATE TABLE t9(x,y);
! 444: INSERT INTO t9 VALUES('one',1);
! 445: INSERT INTO t9 VALUES('two',2);
! 446: INSERT INTO t9 VALUES('three',3);
! 447: INSERT INTO t9 VALUES('four',4);
! 448: INSERT INTO t9 VALUES('five',5);
! 449: INSERT INTO t9 VALUES('six',6);
! 450: INSERT INTO t9 VALUES('seven',7);
! 451: INSERT INTO t9 VALUES('eight',8);
! 452: INSERT INTO t9 VALUES('nine',9);
! 453: INSERT INTO t9 VALUES('ten',10);
! 454: INSERT INTO t9 VALUES('eleven',11);
! 455: SELECT y FROM t9
! 456: WHERE x=(SELECT x FROM t9 WHERE y=1)
! 457: OR x=(SELECT x FROM t9 WHERE y=2)
! 458: OR x=(SELECT x FROM t9 WHERE y=3)
! 459: OR x=(SELECT x FROM t9 WHERE y=4)
! 460: OR x=(SELECT x FROM t9 WHERE y=5)
! 461: OR x=(SELECT x FROM t9 WHERE y=6)
! 462: OR x=(SELECT x FROM t9 WHERE y=7)
! 463: OR x=(SELECT x FROM t9 WHERE y=8)
! 464: OR x=(SELECT x FROM t9 WHERE y=9)
! 465: OR x=(SELECT x FROM t9 WHERE y=10)
! 466: OR x=(SELECT x FROM t9 WHERE y=11)
! 467: OR x=(SELECT x FROM t9 WHERE y=12)
! 468: OR x=(SELECT x FROM t9 WHERE y=13)
! 469: OR x=(SELECT x FROM t9 WHERE y=14)
! 470: ;
! 471: }
! 472: } {1 2 3 4 5 6 7 8 9 10 11}
! 473: }
! 474:
! 475: # Make sure a database connection still works after changing the
! 476: # working directory.
! 477: #
! 478: do_test misc1-14.1 {
! 479: file mkdir tempdir
! 480: cd tempdir
! 481: execsql {BEGIN}
! 482: file exists ./test.db-journal
! 483: } {0}
! 484: do_test misc1-14.2a {
! 485: execsql {UPDATE t1 SET a=a||'x' WHERE 0}
! 486: file exists ../test.db-journal
! 487: } {0}
! 488: do_test misc1-14.2b {
! 489: execsql {UPDATE t1 SET a=a||'y' WHERE 1}
! 490: file exists ../test.db-journal
! 491: } {1}
! 492: do_test misc1-14.3 {
! 493: cd ..
! 494: forcedelete tempdir
! 495: execsql {COMMIT}
! 496: file exists ./test.db-journal
! 497: } {0}
! 498:
! 499: # A failed create table should not leave the table in the internal
! 500: # data structures. Ticket #238.
! 501: #
! 502: do_test misc1-15.1.1 {
! 503: catchsql {
! 504: CREATE TABLE t10 AS SELECT c1;
! 505: }
! 506: } {1 {no such column: c1}}
! 507: do_test misc1-15.1.2 {
! 508: catchsql {
! 509: CREATE TABLE t10 AS SELECT t9.c1;
! 510: }
! 511: } {1 {no such column: t9.c1}}
! 512: do_test misc1-15.1.3 {
! 513: catchsql {
! 514: CREATE TABLE t10 AS SELECT main.t9.c1;
! 515: }
! 516: } {1 {no such column: main.t9.c1}}
! 517: do_test misc1-15.2 {
! 518: catchsql {
! 519: CREATE TABLE t10 AS SELECT 1;
! 520: }
! 521: # The bug in ticket #238 causes the statement above to fail with
! 522: # the error "table t10 alread exists"
! 523: } {0 {}}
! 524:
! 525: # Test for memory leaks when a CREATE TABLE containing a primary key
! 526: # fails. Ticket #249.
! 527: #
! 528: do_test misc1-16.1 {
! 529: catchsql {SELECT name FROM sqlite_master LIMIT 1}
! 530: catchsql {
! 531: CREATE TABLE test(a integer, primary key(a));
! 532: }
! 533: } {0 {}}
! 534: do_test misc1-16.2 {
! 535: catchsql {
! 536: CREATE TABLE test(a integer, primary key(a));
! 537: }
! 538: } {1 {table test already exists}}
! 539: do_test misc1-16.3 {
! 540: catchsql {
! 541: CREATE TABLE test2(a text primary key, b text, primary key(a,b));
! 542: }
! 543: } {1 {table "test2" has more than one primary key}}
! 544: do_test misc1-16.4 {
! 545: execsql {
! 546: INSERT INTO test VALUES(1);
! 547: SELECT rowid, a FROM test;
! 548: }
! 549: } {1 1}
! 550: do_test misc1-16.5 {
! 551: execsql {
! 552: INSERT INTO test VALUES(5);
! 553: SELECT rowid, a FROM test;
! 554: }
! 555: } {1 1 5 5}
! 556: do_test misc1-16.6 {
! 557: execsql {
! 558: INSERT INTO test VALUES(NULL);
! 559: SELECT rowid, a FROM test;
! 560: }
! 561: } {1 1 5 5 6 6}
! 562:
! 563: ifcapable trigger&&tempdb {
! 564: # Ticket #333: Temp triggers that modify persistent tables.
! 565: #
! 566: do_test misc1-17.1 {
! 567: execsql {
! 568: BEGIN;
! 569: CREATE TABLE RealTable(TestID INTEGER PRIMARY KEY, TestString TEXT);
! 570: CREATE TEMP TABLE TempTable(TestID INTEGER PRIMARY KEY, TestString TEXT);
! 571: CREATE TEMP TRIGGER trigTest_1 AFTER UPDATE ON TempTable BEGIN
! 572: INSERT INTO RealTable(TestString)
! 573: SELECT new.TestString FROM TempTable LIMIT 1;
! 574: END;
! 575: INSERT INTO TempTable(TestString) VALUES ('1');
! 576: INSERT INTO TempTable(TestString) VALUES ('2');
! 577: UPDATE TempTable SET TestString = TestString + 1 WHERE TestID=1 OR TestId=2;
! 578: COMMIT;
! 579: SELECT TestString FROM RealTable ORDER BY 1;
! 580: }
! 581: } {2 3}
! 582: }
! 583:
! 584: do_test misc1-18.1 {
! 585: set n [sqlite3_sleep 100]
! 586: expr {$n>=100}
! 587: } {1}
! 588:
! 589: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>