File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / shared4.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>