19ab724f1Sdrh# 2011 Feb 04 29ab724f1Sdrh# 39ab724f1Sdrh# The author disclaims copyright to this source code. In place of 49ab724f1Sdrh# a legal notice, here is a blessing: 59ab724f1Sdrh# 69ab724f1Sdrh# May you do good and not evil. 79ab724f1Sdrh# May you find forgiveness for yourself and forgive others. 89ab724f1Sdrh# May you share freely, never taking more than you give. 99ab724f1Sdrh# 109ab724f1Sdrh#*********************************************************************** 119ab724f1Sdrh# This file implements regression tests for SQLite library. 129ab724f1Sdrh# 139ab724f1Sdrh# This file test deferred foreign key constraint processing to make 149ab724f1Sdrh# sure that when a statement not within BEGIN...END fails a constraint, 159ab724f1Sdrh# that statement doesn't hold the transaction open thus allowing 169ab724f1Sdrh# a subsequent statement to fail a deferred constraint with impunity. 179ab724f1Sdrh# 189ab724f1Sdrh 199ab724f1Sdrhset testdir [file dirname $argv0] 209ab724f1Sdrhsource $testdir/tester.tcl 219ab724f1Sdrh 229ab724f1Sdrhifcapable {!foreignkey||!trigger} { 239ab724f1Sdrh finish_test 249ab724f1Sdrh return 259ab724f1Sdrh} 269ab724f1Sdrh 279ab724f1Sdrh# Create a table and some data to work with. 289ab724f1Sdrh# 299ab724f1Sdrhdo_test fkey4-1.1 { 309ab724f1Sdrh execsql { 319ab724f1Sdrh PRAGMA foreign_keys = ON; 329ab724f1Sdrh CREATE TABLE t1(a PRIMARY KEY, b); 339ab724f1Sdrh CREATE TABLE t2(c REFERENCES t1 DEFERRABLE INITIALLY DEFERRED, d); 349ab724f1Sdrh INSERT INTO t1 VALUES(1,2); 359ab724f1Sdrh INSERT INTO t2 VALUES(1,3); 369ab724f1Sdrh } 379ab724f1Sdrh} {} 389ab724f1Sdrh 399ab724f1Sdrhdo_test fkey4-1.2 { 409ab724f1Sdrh set ::DB [sqlite3_connection_pointer db] 419ab724f1Sdrh set ::SQL {INSERT INTO t2 VALUES(2,4)} 429ab724f1Sdrh set ::STMT1 [sqlite3_prepare_v2 $::DB $::SQL -1 TAIL] 439ab724f1Sdrh sqlite3_step $::STMT1 449ab724f1Sdrh} {SQLITE_CONSTRAINT} 45*433dccfbSdrhverify_ex_errcode fkey4-1.2b SQLITE_CONSTRAINT_FOREIGNKEY 469ab724f1Sdrhdo_test fkey4-1.3 { 479ab724f1Sdrh set ::STMT2 [sqlite3_prepare_v2 $::DB $::SQL -1 TAIL] 489ab724f1Sdrh sqlite3_step $::STMT2 499ab724f1Sdrh} {SQLITE_CONSTRAINT} 50*433dccfbSdrhverify_ex_errcode fkey4-1.3b SQLITE_CONSTRAINT_FOREIGNKEY 519ab724f1Sdrhdo_test fkey4-1.4 { 529ab724f1Sdrh db eval {SELECT * FROM t2} 539ab724f1Sdrh} {1 3} 549ab724f1Sdrhsqlite3_finalize $::STMT1 559ab724f1Sdrhsqlite3_finalize $::STMT2 569ab724f1Sdrh 579ab724f1Sdrhfinish_test 58