Home | History | Annotate | Download | only in test
      1 # 2004 November 12
      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 script is testing the AUTOINCREMENT features.
     13 #
     14 # $Id: autoinc.test,v 1.14 2009/06/23 20:28:54 drh Exp $
     15 #
     16 
     17 set testdir [file dirname $argv0]
     18 source $testdir/tester.tcl
     19 
     20 # If the library is not compiled with autoincrement support then
     21 # skip all tests in this file.
     22 #
     23 ifcapable {!autoinc} {
     24   finish_test
     25   return
     26 }
     27 
     28 sqlite3_db_config_lookaside db 0 0 0
     29 
     30 # The database is initially empty.
     31 #
     32 do_test autoinc-1.1 {
     33   execsql {
     34     SELECT name FROM sqlite_master WHERE type='table';
     35   }
     36 } {}
     37 
     38 # Add a table with the AUTOINCREMENT feature.  Verify that the
     39 # SQLITE_SEQUENCE table gets created.
     40 #
     41 do_test autoinc-1.2 {
     42   execsql {
     43     CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
     44     SELECT name FROM sqlite_master WHERE type='table';
     45   }
     46 } {t1 sqlite_sequence}
     47 
     48 # The SQLITE_SEQUENCE table is initially empty
     49 #
     50 do_test autoinc-1.3 {
     51   execsql {
     52     SELECT * FROM sqlite_sequence;
     53   }
     54 } {}
     55 do_test autoinc-1.3.1 {
     56   catchsql {
     57     CREATE INDEX seqidx ON sqlite_sequence(name)
     58   }
     59 } {1 {table sqlite_sequence may not be indexed}}
     60 
     61 # Close and reopen the database.  Verify that everything is still there.
     62 #
     63 do_test autoinc-1.4 {
     64   db close
     65   sqlite3 db test.db
     66   execsql {
     67     SELECT * FROM sqlite_sequence;
     68   }
     69 } {}
     70 
     71 # We are not allowed to drop the sqlite_sequence table.
     72 #
     73 do_test autoinc-1.5 {
     74   catchsql {DROP TABLE sqlite_sequence}
     75 } {1 {table sqlite_sequence may not be dropped}}
     76 do_test autoinc-1.6 {
     77   execsql {SELECT name FROM sqlite_master WHERE type='table'}
     78 } {t1 sqlite_sequence}
     79 
     80 # Insert an entries into the t1 table and make sure the largest key
     81 # is always recorded in the sqlite_sequence table.
     82 #
     83 do_test autoinc-2.1 {
     84   execsql {
     85     SELECT * FROM sqlite_sequence
     86   }
     87 } {}
     88 do_test autoinc-2.2 {
     89   execsql {
     90     INSERT INTO t1 VALUES(12,34);
     91     SELECT * FROM sqlite_sequence;
     92   }
     93 } {t1 12}
     94 do_test autoinc-2.3 {
     95   execsql {
     96     INSERT INTO t1 VALUES(1,23);
     97     SELECT * FROM sqlite_sequence;
     98   }
     99 } {t1 12}
    100 do_test autoinc-2.4 {
    101   execsql {
    102     INSERT INTO t1 VALUES(123,456);
    103     SELECT * FROM sqlite_sequence;
    104   }
    105 } {t1 123}
    106 do_test autoinc-2.5 {
    107   execsql {
    108     INSERT INTO t1 VALUES(NULL,567);
    109     SELECT * FROM sqlite_sequence;
    110   }
    111 } {t1 124}
    112 do_test autoinc-2.6 {
    113   execsql {
    114     DELETE FROM t1 WHERE y=567;
    115     SELECT * FROM sqlite_sequence;
    116   }
    117 } {t1 124}
    118 do_test autoinc-2.7 {
    119   execsql {
    120     INSERT INTO t1 VALUES(NULL,567);
    121     SELECT * FROM sqlite_sequence;
    122   }
    123 } {t1 125}
    124 do_test autoinc-2.8 {
    125   execsql {
    126     DELETE FROM t1;
    127     SELECT * FROM sqlite_sequence;
    128   }
    129 } {t1 125}
    130 do_test autoinc-2.9 {
    131   execsql {
    132     INSERT INTO t1 VALUES(12,34);
    133     SELECT * FROM sqlite_sequence;
    134   }
    135 } {t1 125}
    136 do_test autoinc-2.10 {
    137   execsql {
    138     INSERT INTO t1 VALUES(125,456);
    139     SELECT * FROM sqlite_sequence;
    140   }
    141 } {t1 125}
    142 do_test autoinc-2.11 {
    143   execsql {
    144     INSERT INTO t1 VALUES(-1234567,-1);
    145     SELECT * FROM sqlite_sequence;
    146   }
    147 } {t1 125}
    148 do_test autoinc-2.12 {
    149   execsql {
    150     INSERT INTO t1 VALUES(234,5678);
    151     SELECT * FROM sqlite_sequence;
    152   }
    153 } {t1 234}
    154 do_test autoinc-2.13 {
    155   execsql {
    156     DELETE FROM t1;
    157     INSERT INTO t1 VALUES(NULL,1);
    158     SELECT * FROM sqlite_sequence;
    159   }
    160 } {t1 235}
    161 do_test autoinc-2.14 {
    162   execsql {
    163     SELECT * FROM t1;
    164   }
    165 } {235 1}
    166 
    167 # Manually change the autoincrement values in sqlite_sequence.
    168 #
    169 do_test autoinc-2.20 {
    170   execsql {
    171     UPDATE sqlite_sequence SET seq=1234 WHERE name='t1';
    172     INSERT INTO t1 VALUES(NULL,2);
    173     SELECT * FROM t1;
    174   }
    175 } {235 1 1235 2}
    176 do_test autoinc-2.21 {
    177   execsql {
    178     SELECT * FROM sqlite_sequence;
    179   }
    180 } {t1 1235}
    181 do_test autoinc-2.22 {
    182   execsql {
    183     UPDATE sqlite_sequence SET seq=NULL WHERE name='t1';
    184     INSERT INTO t1 VALUES(NULL,3);
    185     SELECT * FROM t1;
    186   }
    187 } {235 1 1235 2 1236 3}
    188 do_test autoinc-2.23 {
    189   execsql {
    190     SELECT * FROM sqlite_sequence;
    191   }
    192 } {t1 1236}
    193 do_test autoinc-2.24 {
    194   execsql {
    195     UPDATE sqlite_sequence SET seq='a-string' WHERE name='t1';
    196     INSERT INTO t1 VALUES(NULL,4);
    197     SELECT * FROM t1;
    198   }
    199 } {235 1 1235 2 1236 3 1237 4}
    200 do_test autoinc-2.25 {
    201   execsql {
    202     SELECT * FROM sqlite_sequence;
    203   }
    204 } {t1 1237}
    205 do_test autoinc-2.26 {
    206   execsql {
    207     DELETE FROM sqlite_sequence WHERE name='t1';
    208     INSERT INTO t1 VALUES(NULL,5);
    209     SELECT * FROM t1;
    210   }
    211 } {235 1 1235 2 1236 3 1237 4 1238 5}
    212 do_test autoinc-2.27 {
    213   execsql {
    214     SELECT * FROM sqlite_sequence;
    215   }
    216 } {t1 1238}
    217 do_test autoinc-2.28 {
    218   execsql {
    219     UPDATE sqlite_sequence SET seq='12345678901234567890'
    220       WHERE name='t1';
    221     INSERT INTO t1 VALUES(NULL,6);
    222     SELECT * FROM t1;
    223   }
    224 } {235 1 1235 2 1236 3 1237 4 1238 5 1239 6}
    225 do_test autoinc-2.29 {
    226   execsql {
    227     SELECT * FROM sqlite_sequence;
    228   }
    229 } {t1 1239}
    230 
    231 # Test multi-row inserts
    232 #
    233 do_test autoinc-2.50 {
    234   execsql {
    235     DELETE FROM t1 WHERE y>=3;
    236     INSERT INTO t1 SELECT NULL, y+2 FROM t1;
    237     SELECT * FROM t1;
    238   }
    239 } {235 1 1235 2 1240 3 1241 4}
    240 do_test autoinc-2.51 {
    241   execsql {
    242     SELECT * FROM sqlite_sequence
    243   }
    244 } {t1 1241}
    245 
    246 ifcapable tempdb {
    247   do_test autoinc-2.52 {
    248     execsql {
    249       CREATE TEMP TABLE t2 AS SELECT y FROM t1;
    250     }
    251     execsql {
    252       INSERT INTO t1 SELECT NULL, y+4 FROM t2;
    253       SELECT * FROM t1;
    254     }
    255   } {235 1 1235 2 1240 3 1241 4 1242 5 1243 6 1244 7 1245 8}
    256   do_test autoinc-2.53 {
    257     execsql {
    258       SELECT * FROM sqlite_sequence
    259     }
    260   } {t1 1245}
    261   do_test autoinc-2.54 {
    262     execsql {
    263       DELETE FROM t1;
    264       INSERT INTO t1 SELECT NULL, y FROM t2;
    265       SELECT * FROM t1;
    266     }
    267   } {1246 1 1247 2 1248 3 1249 4}
    268   do_test autoinc-2.55 {
    269     execsql {
    270       SELECT * FROM sqlite_sequence
    271     }
    272   } {t1 1249}
    273 }
    274 
    275 # Create multiple AUTOINCREMENT tables.  Make sure all sequences are
    276 # tracked separately and do not interfere with one another.
    277 #
    278 do_test autoinc-2.70 {
    279   catchsql {
    280     DROP TABLE t2;
    281   }
    282   execsql {
    283     CREATE TABLE t2(d, e INTEGER PRIMARY KEY AUTOINCREMENT, f);
    284     INSERT INTO t2(d) VALUES(1);
    285     SELECT * FROM sqlite_sequence;
    286   }
    287 } [ifcapable tempdb {list t1 1249 t2 1} else {list t1 1241 t2 1}]
    288 do_test autoinc-2.71 {
    289   execsql {
    290     INSERT INTO t2(d) VALUES(2);
    291     SELECT * FROM sqlite_sequence;
    292   }
    293 } [ifcapable tempdb {list t1 1249 t2 2} else {list t1 1241 t2 2}]
    294 do_test autoinc-2.72 {
    295   execsql {
    296     INSERT INTO t1(x) VALUES(10000);
    297     SELECT * FROM sqlite_sequence;
    298   }
    299 } {t1 10000 t2 2}
    300 do_test autoinc-2.73 {
    301   execsql {
    302     CREATE TABLE t3(g INTEGER PRIMARY KEY AUTOINCREMENT, h);
    303     INSERT INTO t3(h) VALUES(1);
    304     SELECT * FROM sqlite_sequence;
    305   }
    306 } {t1 10000 t2 2 t3 1}
    307 do_test autoinc-2.74 {
    308   execsql {
    309     INSERT INTO t2(d,e) VALUES(3,100);
    310     SELECT * FROM sqlite_sequence;
    311   }
    312 } {t1 10000 t2 100 t3 1}
    313 
    314 
    315 # When a table with an AUTOINCREMENT is deleted, the corresponding entry
    316 # in the SQLITE_SEQUENCE table should also be deleted.  But the SQLITE_SEQUENCE
    317 # table itself should remain behind.
    318 #
    319 do_test autoinc-3.1 {
    320   execsql {SELECT name FROM sqlite_sequence}
    321 } {t1 t2 t3}
    322 do_test autoinc-3.2 {
    323   execsql {
    324     DROP TABLE t1;
    325     SELECT name FROM sqlite_sequence;
    326   }
    327 } {t2 t3}
    328 do_test autoinc-3.3 {
    329   execsql {
    330     DROP TABLE t3;
    331     SELECT name FROM sqlite_sequence;
    332   }
    333 } {t2}
    334 do_test autoinc-3.4 {
    335   execsql {
    336     DROP TABLE t2;
    337     SELECT name FROM sqlite_sequence;
    338   }
    339 } {}
    340 
    341 # AUTOINCREMENT on TEMP tables.
    342 #
    343 ifcapable tempdb {
    344   do_test autoinc-4.1 {
    345     execsql {
    346       SELECT 1, name FROM sqlite_master WHERE type='table';
    347       SELECT 2, name FROM sqlite_temp_master WHERE type='table';
    348     }
    349   } {1 sqlite_sequence}
    350   do_test autoinc-4.2 {
    351     execsql {
    352       CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
    353       CREATE TEMP TABLE t3(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
    354       SELECT 1, name FROM sqlite_master WHERE type='table';
    355       SELECT 2, name FROM sqlite_temp_master WHERE type='table';
    356     }
    357   } {1 sqlite_sequence 1 t1 2 t3 2 sqlite_sequence}
    358   do_test autoinc-4.3 {
    359     execsql {
    360       SELECT 1, * FROM main.sqlite_sequence;
    361       SELECT 2, * FROM temp.sqlite_sequence;
    362     }
    363   } {}
    364   do_test autoinc-4.4 {
    365     execsql {
    366       INSERT INTO t1 VALUES(10,1);
    367       INSERT INTO t3 VALUES(20,2);
    368       INSERT INTO t1 VALUES(NULL,3);
    369       INSERT INTO t3 VALUES(NULL,4);
    370     }
    371   } {}
    372   
    373   ifcapable compound {
    374   do_test autoinc-4.4.1 {
    375     execsql {
    376       SELECT * FROM t1 UNION ALL SELECT * FROM t3;
    377     }
    378   } {10 1 11 3 20 2 21 4}
    379   } ;# ifcapable compound
    380   
    381   do_test autoinc-4.5 {
    382     execsql {
    383       SELECT 1, * FROM main.sqlite_sequence;
    384       SELECT 2, * FROM temp.sqlite_sequence;
    385     }
    386   } {1 t1 11 2 t3 21}
    387   do_test autoinc-4.6 {
    388     execsql {
    389       INSERT INTO t1 SELECT * FROM t3;
    390       SELECT 1, * FROM main.sqlite_sequence;
    391       SELECT 2, * FROM temp.sqlite_sequence;
    392     }
    393   } {1 t1 21 2 t3 21}
    394   do_test autoinc-4.7 {
    395     execsql {
    396       INSERT INTO t3 SELECT x+100, y  FROM t1;
    397       SELECT 1, * FROM main.sqlite_sequence;
    398       SELECT 2, * FROM temp.sqlite_sequence;
    399     }
    400   } {1 t1 21 2 t3 121}
    401   do_test autoinc-4.8 {
    402     execsql {
    403       DROP TABLE t3;
    404       SELECT 1, * FROM main.sqlite_sequence;
    405       SELECT 2, * FROM temp.sqlite_sequence;
    406     }
    407   } {1 t1 21}
    408   do_test autoinc-4.9 {
    409     execsql {
    410       CREATE TEMP TABLE t2(p INTEGER PRIMARY KEY AUTOINCREMENT, q);
    411       INSERT INTO t2 SELECT * FROM t1;
    412       DROP TABLE t1;
    413       SELECT 1, * FROM main.sqlite_sequence;
    414       SELECT 2, * FROM temp.sqlite_sequence;
    415     }
    416   } {2 t2 21}
    417   do_test autoinc-4.10 {
    418     execsql {
    419       DROP TABLE t2;
    420       SELECT 1, * FROM main.sqlite_sequence;
    421       SELECT 2, * FROM temp.sqlite_sequence;
    422     }
    423   } {}
    424 }
    425 
    426 # Make sure AUTOINCREMENT works on ATTACH-ed tables.
    427 #
    428 ifcapable tempdb&&attach {
    429   do_test autoinc-5.1 {
    430     file delete -force test2.db
    431     file delete -force test2.db-journal
    432     sqlite3 db2 test2.db
    433     execsql {
    434       CREATE TABLE t4(m INTEGER PRIMARY KEY AUTOINCREMENT, n);
    435       CREATE TABLE t5(o, p INTEGER PRIMARY KEY AUTOINCREMENT);
    436     } db2;
    437     execsql {
    438       ATTACH 'test2.db' as aux;
    439       SELECT 1, * FROM main.sqlite_sequence;
    440       SELECT 2, * FROM temp.sqlite_sequence;
    441       SELECT 3, * FROM aux.sqlite_sequence;
    442     }
    443   } {}
    444   do_test autoinc-5.2 {
    445     execsql {
    446       INSERT INTO t4 VALUES(NULL,1);
    447       SELECT 1, * FROM main.sqlite_sequence;
    448       SELECT 2, * FROM temp.sqlite_sequence;
    449       SELECT 3, * FROM aux.sqlite_sequence;
    450     }
    451   } {3 t4 1}
    452   do_test autoinc-5.3 {
    453     execsql {
    454       INSERT INTO t5 VALUES(100,200);
    455       SELECT * FROM sqlite_sequence
    456     } db2
    457   } {t4 1 t5 200}
    458   do_test autoinc-5.4 {
    459     execsql {
    460       SELECT 1, * FROM main.sqlite_sequence;
    461       SELECT 2, * FROM temp.sqlite_sequence;
    462       SELECT 3, * FROM aux.sqlite_sequence;
    463     }
    464   } {3 t4 1 3 t5 200}
    465 }
    466 
    467 # Requirement REQ00310:  Make sure an insert fails if the sequence is
    468 # already at its maximum value.
    469 #
    470 ifcapable {rowid32} {
    471   do_test autoinc-6.1 {
    472     execsql {
    473       CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w);
    474       INSERT INTO t6 VALUES(2147483647,1);
    475       SELECT seq FROM main.sqlite_sequence WHERE name='t6';
    476     }
    477   } 2147483647
    478 }
    479 ifcapable {!rowid32} {
    480   do_test autoinc-6.1 {
    481     execsql {
    482       CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w);
    483       INSERT INTO t6 VALUES(9223372036854775807,1);
    484       SELECT seq FROM main.sqlite_sequence WHERE name='t6';
    485     }
    486   } 9223372036854775807
    487 }
    488 do_test autoinc-6.2 {
    489   catchsql {
    490     INSERT INTO t6 VALUES(NULL,1);
    491   }
    492 } {1 {database or disk is full}}
    493 
    494 # Allow the AUTOINCREMENT keyword inside the parentheses
    495 # on a separate PRIMARY KEY designation.
    496 #
    497 do_test autoinc-7.1 {
    498   execsql {
    499     CREATE TABLE t7(x INTEGER, y REAL, PRIMARY KEY(x AUTOINCREMENT));
    500     INSERT INTO t7(y) VALUES(123);
    501     INSERT INTO t7(y) VALUES(234);
    502     DELETE FROM t7;
    503     INSERT INTO t7(y) VALUES(345);
    504     SELECT * FROM t7;
    505   }
    506 } {3 345.0}
    507 
    508 # Test that if the AUTOINCREMENT is applied to a non integer primary key
    509 # the error message is sensible.
    510 do_test autoinc-7.2 {
    511   catchsql {
    512     CREATE TABLE t8(x TEXT PRIMARY KEY AUTOINCREMENT);
    513   }
    514 } {1 {AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY}}
    515 
    516 
    517 # Ticket #1283.  Make sure that preparing but never running a statement
    518 # that creates the sqlite_sequence table does not mess up the database.
    519 #
    520 do_test autoinc-8.1 {
    521   catch {db2 close}
    522   catch {db close}
    523   file delete -force test.db
    524   sqlite3 db test.db
    525   set DB [sqlite3_connection_pointer db]
    526   set STMT [sqlite3_prepare $DB {
    527      CREATE TABLE t1(
    528        x INTEGER PRIMARY KEY AUTOINCREMENT
    529      )
    530   } -1 TAIL]
    531   sqlite3_finalize $STMT
    532   set STMT [sqlite3_prepare $DB {
    533      CREATE TABLE t1(
    534        x INTEGER PRIMARY KEY AUTOINCREMENT
    535      )
    536   } -1 TAIL]
    537   sqlite3_step $STMT
    538   sqlite3_finalize $STMT
    539   execsql {
    540     INSERT INTO t1 VALUES(NULL);
    541     SELECT * FROM t1;
    542   }
    543 } {1}
    544 
    545 # Ticket #3148
    546 # Make sure the sqlite_sequence table is not damaged when doing
    547 # an empty insert - an INSERT INTO ... SELECT ... where the SELECT
    548 # clause returns an empty set.
    549 #
    550 do_test autoinc-9.1 {
    551   db eval {
    552     CREATE TABLE t2(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
    553     INSERT INTO t2 VALUES(NULL, 1);
    554     CREATE TABLE t3(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
    555     INSERT INTO t3 SELECT * FROM t2 WHERE y>1;
    556 
    557     SELECT * FROM sqlite_sequence WHERE name='t3';
    558   }
    559 } {t3 0}
    560 
    561 ifcapable trigger {
    562   catchsql { pragma recursive_triggers = off } 
    563   
    564   # Ticket #3928.  Make sure that triggers to not make extra slots in
    565   # the SQLITE_SEQUENCE table.
    566   #
    567   do_test autoinc-3928.1 {
    568     db eval {
    569       CREATE TABLE t3928(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
    570       CREATE TRIGGER t3928r1 BEFORE INSERT ON t3928 BEGIN
    571         INSERT INTO t3928(b) VALUES('before1');
    572         INSERT INTO t3928(b) VALUES('before2');
    573       END;
    574       CREATE TRIGGER t3928r2 AFTER INSERT ON t3928 BEGIN
    575         INSERT INTO t3928(b) VALUES('after1');
    576         INSERT INTO t3928(b) VALUES('after2');
    577       END;
    578       INSERT INTO t3928(b) VALUES('test');
    579       SELECT * FROM t3928 ORDER BY a;
    580     }
    581   } {1 before1 2 after1 3 after2 4 before2 5 after1 6 after2 7 test 8 before1 9 before2 10 after1 11 before1 12 before2 13 after2}
    582   do_test autoinc-3928.2 {
    583     db eval {
    584       SELECT * FROM sqlite_sequence WHERE name='t3928'
    585     }
    586   } {t3928 13}
    587 
    588   do_test autoinc-3928.3 {
    589     db eval {
    590       DROP TRIGGER t3928r1;
    591       DROP TRIGGER t3928r2;
    592       CREATE TRIGGER t3928r3 BEFORE UPDATE ON t3928 
    593         WHEN typeof(new.b)=='integer' BEGIN
    594            INSERT INTO t3928(b) VALUES('before-int-' || new.b);
    595       END;
    596       CREATE TRIGGER t3928r4 AFTER UPDATE ON t3928 
    597         WHEN typeof(new.b)=='integer' BEGIN
    598            INSERT INTO t3928(b) VALUES('after-int-' || new.b);
    599       END;
    600       DELETE FROM t3928 WHERE a!=1;
    601       UPDATE t3928 SET b=456 WHERE a=1;
    602       SELECT * FROM t3928 ORDER BY a;
    603     }
    604   } {1 456 14 before-int-456 15 after-int-456}
    605   do_test autoinc-3928.4 {
    606     db eval {
    607       SELECT * FROM sqlite_sequence WHERE name='t3928'
    608     }
    609   } {t3928 15}
    610   
    611   do_test autoinc-3928.5 {
    612     db eval {
    613       CREATE TABLE t3928b(x);
    614       INSERT INTO t3928b VALUES(100);
    615       INSERT INTO t3928b VALUES(200);
    616       INSERT INTO t3928b VALUES(300);
    617       DELETE FROM t3928;
    618       CREATE TABLE t3928c(y INTEGER PRIMARY KEY AUTOINCREMENT, z);
    619       CREATE TRIGGER t3928br1 BEFORE DELETE ON t3928b BEGIN
    620         INSERT INTO t3928(b) VALUES('before-del-'||old.x);
    621         INSERT INTO t3928c(z) VALUES('before-del-'||old.x);
    622       END;
    623       CREATE TRIGGER t3928br2 AFTER DELETE ON t3928b BEGIN
    624         INSERT INTO t3928(b) VALUES('after-del-'||old.x);
    625         INSERT INTO t3928c(z) VALUES('after-del-'||old.x);
    626       END;
    627       DELETE FROM t3928b;
    628       SELECT * FROM t3928 ORDER BY a;
    629     }
    630   } {16 before-del-100 17 after-del-100 18 before-del-200 19 after-del-200 20 before-del-300 21 after-del-300}
    631   do_test autoinc-3928.6 {
    632     db eval {
    633       SELECT * FROM t3928c ORDER BY y;
    634     }
    635   } {1 before-del-100 2 after-del-100 3 before-del-200 4 after-del-200 5 before-del-300 6 after-del-300}
    636   do_test autoinc-3928.7 {
    637     db eval {
    638       SELECT * FROM sqlite_sequence WHERE name LIKE 't3928%' ORDER BY name;
    639     }
    640   } {t3928 21 t3928c 6}
    641   
    642   # Ticket [a696379c1f0886615541a48b35bd8181a80e88f8]
    643   do_test autoinc-a69637.1 {
    644     db eval {
    645       CREATE TABLE ta69637_1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
    646       CREATE TABLE ta69637_2(z);
    647       CREATE TRIGGER ra69637_1 AFTER INSERT ON ta69637_2 BEGIN
    648         INSERT INTO ta69637_1(y) VALUES(new.z+1);
    649       END;
    650       INSERT INTO ta69637_2 VALUES(123);
    651       SELECT * FROM ta69637_1;
    652     }
    653   } {1 124}
    654   do_test autoinc-a69637.2 {
    655     db eval {
    656       CREATE VIEW va69637_2 AS SELECT * FROM ta69637_2;
    657       CREATE TRIGGER ra69637_2 INSTEAD OF INSERT ON va69637_2 BEGIN
    658         INSERT INTO ta69637_1(y) VALUES(new.z+10000);
    659       END;
    660       INSERT INTO va69637_2 VALUES(123);
    661       SELECT * FROM ta69637_1;
    662     }
    663   } {1 124 2 10123}
    664 }
    665 
    666 
    667 
    668 finish_test
    669