Fix a case where a corrupt stat4 record could go unrecognized due to integer overflow.
[sqlite.git] / test / tkt-b1d3a2e531.test
blob745bbe86647b1107fefd34857b4cedba0a285dda
1 # 2011 August 22
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # This file implements tests for foreign keys. Specifically, it tests
14 # that ticket b1d3a2e531 has been fixed.
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
20 ifcapable {!foreignkey||!trigger} {
21   finish_test
22   return
24 set testprefix tkt-b1d3a2e531
26 do_execsql_test 1.0 { PRAGMA foreign_keys = ON }
28 do_execsql_test 1.1 {
29   CREATE TABLE pp(x PRIMARY KEY);
30   CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED);
31   INSERT INTO pp VALUES('abc');
32   INSERT INTO cc VALUES('abc');
34 do_execsql_test 1.2 {
35   BEGIN;
36     DROP TABLE pp;
37     DROP TABLE cc;
38   COMMIT;
40 do_execsql_test 1.3 {
41   CREATE TABLE pp(x PRIMARY KEY);
42   CREATE TABLE cc(y REFERENCES pp DEFERRABLE INITIALLY DEFERRED);
43   INSERT INTO pp VALUES('abc');
44   INSERT INTO cc VALUES('abc');
46 do_execsql_test 1.4 {
47   BEGIN;
48     DROP TABLE cc;
49     DROP TABLE pp;
50   COMMIT;
53 do_execsql_test 2.1 {
54   CREATE TABLE pp(x PRIMARY KEY);
55   CREATE TABLE cc(
56     y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED
57   );
58   INSERT INTO pp VALUES(5);
59   INSERT INTO cc VALUES(5);
61 do_execsql_test 2.2 {
62   BEGIN;
63     DROP TABLE pp;
64     DROP TABLE cc;
65   COMMIT;
67 do_execsql_test 2.3 {
68   CREATE TABLE pp(x PRIMARY KEY);
69   CREATE TABLE cc(
70     y INTEGER PRIMARY KEY REFERENCES pp DEFERRABLE INITIALLY DEFERRED
71   );
72   INSERT INTO pp VALUES(5);
73   INSERT INTO cc VALUES(5);
75 do_execsql_test 2.4 {
76   BEGIN;
77     DROP TABLE cc;
78     DROP TABLE pp;
79   COMMIT;
82 do_execsql_test 3.1 {
83   CREATE TABLE pp1(x PRIMARY KEY);
84   CREATE TABLE cc1(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED);
86   CREATE TABLE pp2(x PRIMARY KEY);
87   CREATE TABLE cc2(y REFERENCES pp1 DEFERRABLE INITIALLY DEFERRED);
89   INSERT INTO pp1 VALUES(2200);
90   INSERT INTO cc1 VALUES(NULL);
92   INSERT INTO pp2 VALUES(2200);
93   INSERT INTO cc2 VALUES(2200);
95 do_catchsql_test 3.2 {
96   BEGIN;
97     DELETE FROM pp2;
98     DROP TABLE pp1;
99     DROP TABLE cc1;
100   COMMIT;
101 } {1 {FOREIGN KEY constraint failed}}
102 do_catchsql_test 3.3 {
103     DROP TABLE cc2;
104   COMMIT;
105 } {0 {}}
109 finish_test