# 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for foreign keys. # set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable {!foreignkey} { finish_test return } # Create a table and some data to work with. # do_test fkey3-1.1 { execsql { PRAGMA foreign_keys=ON; CREATE TABLE t1(x INTEGER PRIMARY KEY); INSERT INTO t1 VALUES(100); INSERT INTO t1 VALUES(101); CREATE TABLE t2(y INTEGER REFERENCES t1 (x)); INSERT INTO t2 VALUES(100); INSERT INTO t2 VALUES(101); SELECT 1, x FROM t1; SELECT 2, y FROM t2; } } {1 100 1 101 2 100 2 101} do_test fkey3-1.2 { catchsql { DELETE FROM t1 WHERE x=100; } } {1 {foreign key constraint failed}} do_test fkey3-1.3 { catchsql { DROP TABLE t1; } } {1 {foreign key constraint failed}} do_test fkey3-1.4 { execsql { DROP TABLE t2; } } {} do_test fkey3-1.5 { execsql { DROP TABLE t1; } } {} do_test fkey3-2.1 { execsql { PRAGMA foreign_keys=ON; CREATE TABLE t1(x INTEGER PRIMARY KEY); INSERT INTO t1 VALUES(100); INSERT INTO t1 VALUES(101); CREATE TABLE t2(y INTEGER PRIMARY KEY REFERENCES t1 (x) ON UPDATE SET NULL); } execsql { INSERT INTO t2 VALUES(100); INSERT INTO t2 VALUES(101); SELECT 1, x FROM t1; SELECT 2, y FROM t2; } } {1 100 1 101 2 100 2 101} finish_test