os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/shared3.test
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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