persistentstorage/sqlite3api/TEST/TclScript/shared3.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2005 January 19
       
     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 # $Id: shared3.test,v 1.4 2008/08/20 14:49:25 danielk1977 Exp $
       
    13 
       
    14 set testdir [file dirname $argv0]
       
    15 source $testdir/tester.tcl
       
    16 db close
       
    17 
       
    18 ifcapable !shared_cache {
       
    19   finish_test
       
    20   return
       
    21 }
       
    22 set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
       
    23 
       
    24 # Ticket #1824
       
    25 #
       
    26 do_test shared3-1.1 {
       
    27   file delete -force test.db test.db-journal
       
    28   sqlite3 db1 test.db
       
    29   db1 eval {
       
    30     PRAGMA encoding=UTF16;
       
    31     CREATE TABLE t1(x,y);
       
    32     INSERT INTO t1 VALUES('abc','This is a test string');
       
    33   }
       
    34   db1 close
       
    35   sqlite3 db1 test.db
       
    36   db1 eval {SELECT * FROM t1}
       
    37 } {abc {This is a test string}}
       
    38 do_test shared3-1.2 {
       
    39   sqlite3 db2 test.db
       
    40   db2 eval {SELECT y FROM t1 WHERE x='abc'}
       
    41 } {{This is a test string}}
       
    42 
       
    43 db1 close
       
    44 db2 close
       
    45 
       
    46 do_test shared3-2.1 {
       
    47   sqlite3 db1 test.db
       
    48   execsql {
       
    49     PRAGMA main.cache_size = 10;
       
    50   } db1
       
    51 } {}
       
    52 do_test shared3-2.2 {
       
    53   execsql { PRAGMA main.cache_size } db1
       
    54 } {10}
       
    55 do_test shared3-2.3 {
       
    56   sqlite3 db2 test.db
       
    57   execsql { PRAGMA main.cache_size } db1
       
    58 } {10}
       
    59 do_test shared3-2.4 {
       
    60   execsql { PRAGMA main.cache_size } db2
       
    61 } {10}
       
    62 do_test shared3-2.5 {
       
    63   execsql { PRAGMA main.cache_size } db1
       
    64 } {10}
       
    65 
       
    66 # The cache-size should now be 10 pages. However at one point there was
       
    67 # a bug that caused the cache size to return to the default value when
       
    68 # a second connection was opened on the shared-cache (as happened in
       
    69 # test case shared3-2.3 above). The goal of the following tests is to
       
    70 # ensure that the cache-size really is 10 pages.
       
    71 #
       
    72 if {$::tcl_platform(platform)=="unix"} {
       
    73   set alternative_name ./test.db
       
    74 } else {
       
    75   set alternative_name TEST.DB
       
    76 }
       
    77 do_test shared3-2.6 {
       
    78   sqlite3 db3 $alternative_name
       
    79   catchsql {select count(*) from sqlite_master} db3
       
    80 } {0 1}
       
    81 do_test shared3-2.7 {
       
    82   execsql {
       
    83     BEGIN;
       
    84     INSERT INTO t1 VALUES(10, randomblob(5000))
       
    85   } db1
       
    86   catchsql {select count(*) from sqlite_master} db3
       
    87 } {0 1}
       
    88 do_test shared3-2.8 {
       
    89   db3 close
       
    90   execsql {
       
    91     INSERT INTO t1 VALUES(10, randomblob(10000))
       
    92   } db1
       
    93   sqlite3 db3 $alternative_name
       
    94 
       
    95   # If the pager-cache is really still limited to 10 pages, then the INSERT
       
    96   # statement above should have caused the pager to grab an exclusive lock
       
    97   # on the database file so that the cache could be spilled.
       
    98   #
       
    99   catchsql {select count(*) from sqlite_master} db3
       
   100 } {1 {database is locked}}
       
   101 
       
   102 db1 close
       
   103 db2 close
       
   104 db3 close
       
   105 
       
   106 sqlite3_enable_shared_cache $::enable_shared_cache
       
   107 finish_test