gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/shared4.test (about)

     1  # 2008 July 14
     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  # Test the btree mutex protocol for shared cache mode.
    13  #
    14  # $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $
    15  
    16  set testdir [file dirname $argv0]
    17  source $testdir/tester.tcl
    18  db close
    19  
    20  # This script is only valid if we are running shared-cache mode in a
    21  # threadsafe-capable database engine.
    22  #
    23  ifcapable !shared_cache||!compound {
    24    finish_test
    25    return
    26  }
    27  set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
    28  
    29  # Prepare multiple databases in shared cache mode.
    30  #
    31  do_test shared4-1.1 {
    32    forcedelete test1.db test1.db-journal
    33    forcedelete test2.db test2.db-journal
    34    forcedelete test3.db test3.db-journal
    35    forcedelete test4.db test4.db-journal
    36    sqlite3 db1 test1.db
    37    sqlite3 db2 test2.db
    38    sqlite3 db3 test3.db
    39    sqlite3 db4 test4.db
    40    db1 eval {
    41      CREATE TABLE t1(a);
    42      INSERT INTO t1 VALUES(111);
    43    }
    44    db2 eval {
    45      CREATE TABLE t2(b);
    46      INSERT INTO t2 VALUES(222);
    47    }
    48    db3 eval {
    49      CREATE TABLE t3(c);
    50      INSERT INTO t3 VALUES(333);
    51    }
    52    db4 eval {
    53      CREATE TABLE t4(d);
    54      INSERT INTO t4 VALUES(444);
    55    }
    56    db1 eval {
    57      ATTACH DATABASE 'test2.db' AS two;
    58      ATTACH DATABASE 'test3.db' AS three;
    59      ATTACH DATABASE 'test4.db' AS four;
    60    }
    61    db2 eval {
    62      ATTACH DATABASE 'test4.db' AS four;
    63      ATTACH DATABASE 'test3.db' AS three;
    64      ATTACH DATABASE 'test1.db' AS one;
    65    }
    66    db3 eval {
    67      ATTACH DATABASE 'test1.db' AS one;
    68      ATTACH DATABASE 'test2.db' AS two;
    69      ATTACH DATABASE 'test4.db' AS four;
    70    }
    71    db4 eval {
    72      ATTACH DATABASE 'test3.db' AS three;
    73      ATTACH DATABASE 'test2.db' AS two;
    74      ATTACH DATABASE 'test1.db' AS one;
    75    }
    76    db1 eval {
    77       SELECT a FROM t1 UNION ALL
    78       SELECT b FROM t2 UNION ALL
    79       SELECT c FROM t3 UNION ALL
    80       SELECT d FROM t4;
    81    }
    82  } {111 222 333 444}
    83  do_test shared4-1.2 {
    84    db2 eval {
    85       SELECT a FROM t1 UNION ALL
    86       SELECT b FROM t2 UNION ALL
    87       SELECT d FROM t4 UNION ALL
    88       SELECT c FROM t3;
    89    }
    90  } {111 222 444 333}
    91  do_test shared4-1.3 {
    92    db3 eval {
    93       SELECT a FROM t1 UNION ALL
    94       SELECT c FROM t3 UNION ALL
    95       SELECT b FROM t2 UNION ALL
    96       SELECT d FROM t4;
    97    }
    98  } {111 333 222 444}
    99  do_test shared4-1.4 {
   100    db4 eval {
   101       SELECT a FROM t1 UNION ALL
   102       SELECT c FROM t3 UNION ALL
   103       SELECT d FROM t4 UNION ALL
   104       SELECT b FROM t2;
   105    }
   106  } {111 333 444 222}
   107  do_test shared4-1.5 {
   108    db3 eval {
   109       SELECT a FROM t1 UNION ALL
   110       SELECT d FROM t4 UNION ALL
   111       SELECT b FROM t2 UNION ALL
   112       SELECT c FROM t3;
   113    }
   114  } {111 444 222 333}
   115  do_test shared4-1.6 {
   116    db4 eval {
   117       SELECT a FROM t1 UNION ALL
   118       SELECT d FROM t4 UNION ALL
   119       SELECT c FROM t3 UNION ALL
   120       SELECT b FROM t2;
   121    }
   122  } {111 444 333 222}
   123  do_test shared4-1.7 {
   124    db1 eval {
   125       SELECT b FROM t2 UNION ALL
   126       SELECT a FROM t1 UNION ALL
   127       SELECT c FROM t3 UNION ALL
   128       SELECT d FROM t4;
   129    }
   130  } {222 111 333 444}
   131  do_test shared4-1.8 {
   132    db2 eval {
   133       SELECT b FROM t2 UNION ALL
   134       SELECT a FROM t1 UNION ALL
   135       SELECT d FROM t4 UNION ALL
   136       SELECT c FROM t3;
   137    }
   138  } {222 111 444 333}
   139  do_test shared4-1.9 {
   140    db3 eval {
   141       SELECT b FROM t2 UNION ALL
   142       SELECT c FROM t3 UNION ALL
   143       SELECT a FROM t1 UNION ALL
   144       SELECT d FROM t4;
   145    }
   146  } {222 333 111 444}
   147  do_test shared4-1.10 {
   148    db4 eval {
   149       SELECT b FROM t2 UNION ALL
   150       SELECT c FROM t3 UNION ALL
   151       SELECT d FROM t4 UNION ALL
   152       SELECT a FROM t1;
   153    }
   154  } {222 333 444 111}
   155  do_test shared4-1.11 {
   156    db1 eval {
   157       SELECT c FROM t3 UNION ALL
   158       SELECT a FROM t1 UNION ALL
   159       SELECT b FROM t2 UNION ALL
   160       SELECT d FROM t4;
   161    }
   162  } {333 111 222 444}
   163  do_test shared4-1.12 {
   164    db2 eval {
   165       SELECT c FROM t3 UNION ALL
   166       SELECT a FROM t1 UNION ALL
   167       SELECT d FROM t4 UNION ALL
   168       SELECT b FROM t2;
   169    }
   170  } {333 111 444 222}
   171  
   172  do_test shared4-2.1 {
   173    db1 eval {
   174      UPDATE t1 SET a=a+1000;
   175      UPDATE t2 SET b=b+2000;
   176      UPDATE t3 SET c=c+3000;
   177      UPDATE t4 SET d=d+4000;
   178    }
   179    db2 eval {
   180      UPDATE t1 SET a=a+10000;
   181      UPDATE t2 SET b=b+20000;
   182      UPDATE t3 SET c=c+30000;
   183      UPDATE t4 SET d=d+40000;
   184    }
   185    db3 eval {
   186      UPDATE t1 SET a=a+100000;
   187      UPDATE t2 SET b=b+200000;
   188      UPDATE t3 SET c=c+300000;
   189      UPDATE t4 SET d=d+400000;
   190    }
   191    db4 eval {
   192      UPDATE t1 SET a=a+1000000;
   193      UPDATE t2 SET b=b+2000000;
   194      UPDATE t3 SET c=c+3000000;
   195      UPDATE t4 SET d=d+4000000;
   196    }
   197    db1 eval {
   198       SELECT a FROM t1 UNION ALL
   199       SELECT b FROM t2 UNION ALL
   200       SELECT c FROM t3 UNION ALL
   201       SELECT d FROM t4;
   202    }
   203  } {1111111 2222222 3333333 4444444}
   204  do_test shared4-2.2 {
   205    db2 eval {
   206       SELECT a FROM t1 UNION ALL
   207       SELECT b FROM t2 UNION ALL
   208       SELECT d FROM t4 UNION ALL
   209       SELECT c FROM t3;
   210    }
   211  } {1111111 2222222 4444444 3333333}
   212  do_test shared4-2.3 {
   213    db3 eval {
   214       SELECT a FROM t1 UNION ALL
   215       SELECT c FROM t3 UNION ALL
   216       SELECT b FROM t2 UNION ALL
   217       SELECT d FROM t4;
   218    }
   219  } {1111111 3333333 2222222 4444444}
   220  do_test shared4-2.4 {
   221    db4 eval {
   222       SELECT a FROM t1 UNION ALL
   223       SELECT c FROM t3 UNION ALL
   224       SELECT d FROM t4 UNION ALL
   225       SELECT b FROM t2;
   226    }
   227  } {1111111 3333333 4444444 2222222}
   228  
   229  
   230  db1 close
   231  db2 close
   232  db3 close
   233  db4 close
   234  
   235  sqlite3_enable_shared_cache $::enable_shared_cache
   236  finish_test