Home | History | Annotate | Download | only in test
      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 
     94   # If the pager-cache is really still limited to 10 pages, then the INSERT
     95   # statement above should have caused the pager to grab an exclusive lock
     96   # on the database file so that the cache could be spilled.
     97   #
     98   catch { sqlite3 db3 $alternative_name }
     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
    108