Home | History | Annotate | Download | only in test
      1 # 2010 July 29
      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 #
     12 
     13 set testdir [file dirname $argv0]
     14 source $testdir/tester.tcl
     15 source $testdir/malloc_common.tcl
     16 
     17 foreach f [glob -nocomplain test.db*mj*] { file delete -force $f }
     18 file delete -force test.db2
     19 
     20 do_test tkt-f3e5abed55-1.1 {
     21   execsql {
     22     ATTACH 'test.db2' AS aux;
     23     CREATE TABLE main.t1(a, b);
     24     CREATE TABLE aux.t2(c, d);
     25   }
     26 } {}
     27 
     28 do_test tkt-f3e5abed55-1.2 {
     29   glob -nocomplain test.db*mj*
     30 } {}
     31 
     32 do_test tkt-f3e5abed55-1.3 {
     33   sqlite3 db2 test.db
     34   execsql { BEGIN; SELECT * FROM t1 } db2
     35 } {}
     36 
     37 do_test tkt-f3e5abed55-1.4 {
     38   execsql {
     39     BEGIN;
     40       INSERT INTO t1 VALUES(1, 2);
     41       INSERT INTO t2 VALUES(1, 2);
     42   }
     43   catchsql COMMIT
     44 } {1 {database is locked}}
     45 
     46 do_test tkt-f3e5abed55-1.5 {
     47   execsql COMMIT db2
     48   execsql COMMIT
     49 } {}
     50 
     51 do_test tkt-f3e5abed55-1.6 {
     52   glob -nocomplain test.db*mj*
     53 } {}
     54 foreach f [glob -nocomplain test.db*mj*] { file delete -force $f }
     55 db close
     56 db2 close
     57 
     58 
     59 
     60 # Set up a testvfs so that the next time SQLite tries to delete the
     61 # file "test.db-journal", a snapshot of the current file-system contents
     62 # is taken.
     63 #
     64 # This test will not work with an in-memory journal.
     65 #
     66 if {[permutation]!="inmemory_journal"} {
     67   testvfs tvfs -default 1
     68   tvfs script xDelete
     69   tvfs filter xDelete
     70   proc xDelete {method file args} {
     71     if {[file tail $file] == "test.db-journal"} {
     72       faultsim_save
     73       tvfs filter {}
     74     }
     75     return "SQLITE_OK"
     76   }
     77   
     78   sqlite3 db  test.db
     79   sqlite3 db2 test.db
     80   do_test tkt-f3e5abed55-2.1 {
     81     execsql {
     82       ATTACH 'test.db2' AS aux;
     83       BEGIN;
     84         INSERT INTO t1 VALUES(3, 4);
     85         INSERT INTO t2 VALUES(3, 4);
     86     }
     87   } {}
     88   do_test tkt-f3e5abed55-2.2 {
     89     execsql { BEGIN; SELECT * FROM t1 } db2
     90   } {1 2}
     91   do_test tkt-f3e5abed55-2.3 {
     92     catchsql COMMIT
     93   } {1 {database is locked}}
     94   
     95   do_test tkt-f3e5abed55-2.4 {
     96     execsql COMMIT db2
     97     execsql {
     98       COMMIT;
     99       SELECT * FROM t1;
    100       SELECT * FROM t2;
    101     }
    102   } {1 2 3 4 1 2 3 4}
    103   do_test tkt-f3e5abed55-2.5 {
    104     db close
    105     db2 close
    106     faultsim_restore_and_reopen
    107     execsql {
    108       ATTACH 'test.db2' AS aux;
    109       SELECT * FROM t1;
    110       SELECT * FROM t2;
    111     }
    112   } {1 2 3 4 1 2 3 4}
    113 }
    114 
    115 
    116 finish_test
    117 
    118