Home | History | Annotate | Download | only in test
      1 # 2011 Feb 04
      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 test deferred foreign key constraint processing to make
     14 # sure that when a statement not within BEGIN...END fails a constraint,
     15 # that statement doesn't hold the transaction open thus allowing
     16 # a subsequent statement to fail a deferred constraint with impunity.
     17 #
     18 
     19 set testdir [file dirname $argv0]
     20 source $testdir/tester.tcl
     21 
     22 ifcapable {!foreignkey||!trigger} {
     23   finish_test
     24   return
     25 }
     26 
     27 # Create a table and some data to work with.
     28 #
     29 do_test fkey4-1.1 {
     30   execsql {
     31     PRAGMA foreign_keys = ON;
     32     CREATE TABLE t1(a PRIMARY KEY, b);
     33     CREATE TABLE t2(c REFERENCES t1 DEFERRABLE INITIALLY DEFERRED, d);
     34     INSERT INTO t1 VALUES(1,2);
     35     INSERT INTO t2 VALUES(1,3);
     36   }
     37 } {}
     38 
     39 do_test fkey4-1.2 {
     40   set ::DB [sqlite3_connection_pointer db]
     41   set ::SQL {INSERT INTO t2 VALUES(2,4)}
     42   set ::STMT1 [sqlite3_prepare_v2 $::DB $::SQL -1 TAIL]
     43   sqlite3_step $::STMT1
     44 } {SQLITE_CONSTRAINT}
     45 do_test fkey4-1.3 {
     46   set ::STMT2 [sqlite3_prepare_v2 $::DB $::SQL -1 TAIL]
     47   sqlite3_step $::STMT2
     48 } {SQLITE_CONSTRAINT}
     49 do_test fkey4-1.4 {
     50   db eval {SELECT * FROM t2}
     51 } {1 3}
     52 sqlite3_finalize $::STMT1
     53 sqlite3_finalize $::STMT2
     54 
     55 finish_test
     56