Annotation of embedaddon/sqlite3/test/misc1.test, revision 1.1.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>