persistentstorage/sqlite3api/TEST/TclScript/lock3.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2001 September 15
       
     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.  The
       
    12 # focus of this script is database locks and the operation of the
       
    13 # DEFERRED, IMMEDIATE, and EXCLUSIVE keywords as modifiers to the
       
    14 # BEGIN command.
       
    15 #
       
    16 # $Id: lock3.test,v 1.1 2004/10/05 02:41:43 drh Exp $
       
    17 
       
    18 
       
    19 set testdir [file dirname $argv0]
       
    20 source $testdir/tester.tcl
       
    21 
       
    22 # Establish two connections to the same database.  Put some
       
    23 # sample data into the database.
       
    24 #
       
    25 do_test lock3-1.1 {
       
    26   sqlite3 db2 test.db
       
    27   execsql {
       
    28     CREATE TABLE t1(a);
       
    29     INSERT INTO t1 VALUES(1);
       
    30   }
       
    31   execsql {
       
    32     SELECT * FROM t1
       
    33   } db2
       
    34 } 1
       
    35 
       
    36 # Get a deferred lock on the database using one connection.  The
       
    37 # other connection should still be able to write.
       
    38 #
       
    39 do_test lock3-2.1 {
       
    40   execsql {BEGIN DEFERRED TRANSACTION}
       
    41   execsql {INSERT INTO t1 VALUES(2)} db2
       
    42   execsql {END TRANSACTION}
       
    43   execsql {SELECT * FROM t1}
       
    44 } {1 2}
       
    45 
       
    46 # Get an immediate lock on the database using one connection.  The
       
    47 # other connection should be able to read the database but not write
       
    48 # it.
       
    49 #
       
    50 do_test lock3-3.1 {
       
    51   execsql {BEGIN IMMEDIATE TRANSACTION}
       
    52   catchsql {SELECT * FROM t1} db2
       
    53 } {0 {1 2}}
       
    54 do_test lock3-3.2 {
       
    55   catchsql {INSERT INTO t1 VALUES(3)} db2
       
    56 } {1 {database is locked}}
       
    57 do_test lock3-3.3 {
       
    58   execsql {END TRANSACTION}
       
    59 } {}
       
    60 
       
    61 
       
    62 # Get an exclusive lock on the database using one connection.  The
       
    63 # other connection should be unable to read or write the database.
       
    64 #
       
    65 do_test lock3-4.1 {
       
    66   execsql {BEGIN EXCLUSIVE TRANSACTION}
       
    67   catchsql {SELECT * FROM t1} db2
       
    68 } {1 {database is locked}}
       
    69 do_test lock3-4.2 {
       
    70   catchsql {INSERT INTO t1 VALUES(3)} db2
       
    71 } {1 {database is locked}}
       
    72 do_test lock3-4.3 {
       
    73   execsql {END TRANSACTION}
       
    74 } {}
       
    75 
       
    76 catch {db2 close}
       
    77 
       
    78 finish_test