/ Hex Artifact Content
Login

Artifact e0b12cd467137e50259df3b4f837507e82aaa07c35941c88664dc8ed1d089c44:


0000: 23 20 32 30 31 37 20 4d 61 79 20 32 36 0a 23 0a  # 2017 May 26.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 0a 23 20 4d 69 73 63 65 6c 6c 61  ***.#.# Miscella
0170: 6e 65 6f 75 73 20 74 65 73 74 73 20 66 6f 72 20  neous tests for 
0180: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 73 74 61  transactions sta
0190: 72 74 65 64 20 77 69 74 68 20 42 45 47 49 4e 20  rted with BEGIN 
01a0: 43 4f 4e 43 55 52 52 45 4e 54 2e 20 0a 23 0a 0a  CONCURRENT. .#..
01b0: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
01c0: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
01d0: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
01e0: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 6f 75  r/tester.tcl.sou
01f0: 72 63 65 20 24 74 65 73 74 64 69 72 2f 6c 6f 63  rce $testdir/loc
0200: 6b 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 73 6f 75  k_common.tcl.sou
0210: 72 63 65 20 24 74 65 73 74 64 69 72 2f 77 61 6c  rce $testdir/wal
0220: 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 73 65 74 20  _common.tcl.set 
0230: 3a 3a 74 65 73 74 70 72 65 66 69 78 20 63 6f 6e  ::testprefix con
0240: 63 75 72 72 65 6e 74 34 0a 0a 69 66 63 61 70 61  current4..ifcapa
0250: 62 6c 65 20 21 63 6f 6e 63 75 72 72 65 6e 74 20  ble !concurrent 
0260: 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a  {.  finish_test.
0270: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 65    return.}..do_e
0280: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20  xecsql_test 1.0 
0290: 7b 0a 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e  {.  PRAGMA journ
02a0: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 3b 0a 20  al_mode = wal;. 
02b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
02c0: 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (x PRIMARY KEY, 
02d0: 79 20 55 4e 49 51 55 45 29 3b 0a 20 20 57 49 54  y UNIQUE);.  WIT
02e0: 48 20 73 28 69 29 20 41 53 20 28 53 45 4c 45 43  H s(i) AS (SELEC
02f0: 54 20 31 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  T 1 UNION ALL SE
0300: 4c 45 43 54 20 69 2b 31 20 46 52 4f 4d 20 73 20  LECT i+1 FROM s 
0310: 57 48 45 52 45 20 69 3c 31 30 30 29 0a 20 20 49  WHERE i<100).  I
0320: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0330: 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  LECT randomblob(
0340: 34 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  400), randomblob
0350: 28 34 30 30 29 20 46 52 4f 4d 20 73 3b 0a 20 20  (400) FROM s;.  
0360: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
0370: 48 45 52 45 20 72 6f 77 69 64 3c 32 3b 0a 7d 20  HERE rowid<2;.} 
0380: 7b 77 61 6c 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  {wal}..do_execsq
0390: 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20 42  l_test 1.1 {.  B
03a0: 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 3b  EGIN CONCURRENT;
03b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
03c0: 20 74 31 28 72 6f 77 69 64 2c 20 78 2c 20 79 29   t1(rowid, x, y)
03d0: 20 56 41 4c 55 45 53 28 31 30 30 30 2c 20 72 61   VALUES(1000, ra
03e0: 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 30 29 2c 20  ndomblob(3000), 
03f0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 30 29  randomblob(3000)
0400: 29 3b 0a 20 20 20 20 53 41 56 45 50 4f 49 4e 54  );.    SAVEPOINT
0410: 20 61 62 63 3b 0a 20 20 20 20 44 45 4c 45 54 45   abc;.    DELETE
0420: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72   FROM t1 WHERE r
0430: 6f 77 69 64 20 3d 20 31 30 30 30 3b 0a 7d 0a 0a  owid = 1000;.}..
0440: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0450: 31 2e 32 20 7b 20 52 4f 4c 4c 42 41 43 4b 20 54  1.2 { ROLLBACK T
0460: 4f 20 61 62 63 20 7d 0a 64 6f 5f 65 78 65 63 73  O abc }.do_execs
0470: 71 6c 5f 74 65 73 74 20 31 2e 33 20 7b 20 43 4f  ql_test 1.3 { CO
0480: 4d 4d 49 54 20 7d 0a 64 6f 5f 65 78 65 63 73 71  MMIT }.do_execsq
0490: 6c 5f 74 65 73 74 20 31 2e 34 20 7b 20 50 52 41  l_test 1.4 { PRA
04a0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
04b0: 65 63 6b 20 7d 20 7b 6f 6b 7d 0a 0a 64 6f 5f 6d  eck } {ok}..do_m
04c0: 75 6c 74 69 63 6c 69 65 6e 74 5f 74 65 73 74 20  ulticlient_test 
04d0: 74 6e 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 32  tn {.  do_test 2
04e0: 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 73 71 6c  .$tn.1 {.    sql
04f0: 31 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  1 {.      PRAGMA
0500: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20   journal_mode = 
0510: 77 61 6c 3b 0a 20 20 20 20 20 20 43 52 45 41 54  wal;.      CREAT
0520: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
0530: 3b 0a 20 20 20 20 20 20 57 49 54 48 20 73 28 69  ;.      WITH s(i
0540: 29 20 41 53 20 28 53 45 4c 45 43 54 20 31 20 55  ) AS (SELECT 1 U
0550: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
0560: 69 2b 31 20 46 52 4f 4d 20 73 20 57 48 45 52 45  i+1 FROM s WHERE
0570: 20 69 3c 31 30 30 29 0a 20 20 20 20 20 20 20 20   i<100).        
0580: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
0590: 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62  ELECT randomblob
05a0: 28 34 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (400), randomblo
05b0: 62 28 34 30 30 29 20 46 52 4f 4d 20 73 3b 0a 0a  b(400) FROM s;..
05c0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
05d0: 4c 45 20 74 32 28 61 2c 20 62 29 3b 0a 20 20 20  LE t2(a, b);.   
05e0: 20 20 20 57 49 54 48 20 73 28 69 29 20 41 53 20     WITH s(i) AS 
05f0: 28 53 45 4c 45 43 54 20 31 20 55 4e 49 4f 4e 20  (SELECT 1 UNION 
0600: 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31 20 46  ALL SELECT i+1 F
0610: 52 4f 4d 20 73 20 57 48 45 52 45 20 69 3c 31 30  ROM s WHERE i<10
0620: 30 29 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52  0).        INSER
0630: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
0640: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 29   randomblob(400)
0650: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30  , randomblob(400
0660: 29 20 46 52 4f 4d 20 73 3b 0a 20 20 20 20 7d 0a  ) FROM s;.    }.
0670: 0a 20 20 20 20 73 71 6c 31 20 7b 0a 20 20 20 20  .    sql1 {.    
0680: 20 20 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45    BEGIN CONCURRE
0690: 4e 54 3b 0a 20 20 20 20 20 20 20 20 49 4e 53 45  NT;.        INSE
06a0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
06b0: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30  S(randomblob(300
06c0: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  0), randomblob(3
06d0: 30 30 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  000));.    }.  }
06e0: 20 7b 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 32   {}..  do_test 2
06f0: 2e 24 74 6e 2e 32 20 7b 0a 20 20 20 20 73 71 6c  .$tn.2 {.    sql
0700: 32 20 7b 0a 20 20 20 20 20 20 57 49 54 48 20 73  2 {.      WITH s
0710: 28 69 29 20 41 53 20 28 53 45 4c 45 43 54 20 31  (i) AS (SELECT 1
0720: 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
0730: 54 20 69 2b 31 20 46 52 4f 4d 20 73 20 57 48 45  T i+1 FROM s WHE
0740: 52 45 20 69 3c 31 30 29 0a 20 20 20 20 20 20 20  RE i<10).       
0750: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0760: 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f  SELECT randomblo
0770: 62 28 34 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c  b(400), randombl
0780: 6f 62 28 34 30 30 29 20 46 52 4f 4d 20 73 3b 0a  ob(400) FROM s;.
0790: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 32 20 7b      }.    sql2 {
07a0: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
07b0: 4f 4d 20 74 32 20 57 48 45 52 45 20 72 6f 77 69  OM t2 WHERE rowi
07c0: 64 3c 31 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  d<10;.    }.  } 
07d0: 7b 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 32 2e  {}..  do_test 2.
07e0: 24 74 6e 2e 33 20 7b 0a 20 20 20 20 73 71 6c 31  $tn.3 {.    sql1
07f0: 20 7b 0a 20 20 20 20 20 20 43 4f 4d 4d 49 54 3b   {.      COMMIT;
0800: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e  .      PRAGMA in
0810: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20  tegrity_check;. 
0820: 20 20 20 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 20 20     }.  } {ok}.  
0830: 64 6f 5f 74 65 73 74 20 32 2e 24 74 6e 2e 34 20  do_test 2.$tn.4 
0840: 7b 0a 20 20 20 20 73 71 6c 32 20 7b 0a 20 20 20  {.    sql2 {.   
0850: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
0860: 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20 7d  ity_check;.    }
0870: 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 72 65 73  .  } {ok}.}..res
0880: 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c  et_db.do_execsql
0890: 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20 50 52  _test 3.1 {.  PR
08a0: 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d  AGMA page_size =
08b0: 20 31 30 32 34 3b 0a 20 20 50 52 41 47 4d 41 20   1024;.  PRAGMA 
08c0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77  journal_mode = w
08d0: 61 6c 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  al;.  CREATE TAB
08e0: 4c 45 20 74 32 28 78 29 3b 0a 20 20 49 4e 53 45  LE t2(x);.  INSE
08f0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
0900: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30  S(randomblob(500
0910: 30 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  0));.  CREATE TA
0920: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
0930: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29   PRIMARY KEY, b)
0940: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0950: 74 31 20 56 41 4c 55 45 53 28 32 35 2c 20 72 61  t1 VALUES(25, ra
0960: 6e 64 6f 6d 62 6c 6f 62 28 31 30 34 29 29 3b 0a  ndomblob(104));.
0970: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32    DELETE FROM t2
0980: 3b 0a 7d 20 7b 77 61 6c 7d 0a 0a 64 6f 5f 65 78  ;.} {wal}..do_ex
0990: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 32 20 7b  ecsql_test 3.2 {
09a0: 0a 20 20 42 45 47 49 4e 20 43 4f 4e 43 55 52 52  .  BEGIN CONCURR
09b0: 45 4e 54 3b 0a 20 20 20 20 52 45 50 4c 41 43 45  ENT;.    REPLACE
09c0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
09d0: 32 35 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  25, randomblob(1
09e0: 31 31 37 29 29 3b 0a 20 20 43 4f 4d 4d 49 54 3b  117));.  COMMIT;
09f0: 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  .} {}..#--------
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 0a 23 20 54 65 73 74 20 74 68 65 20 65 66 66  -.# Test the eff
0a50: 65 63 74 20 6f 66 20 42 45 47 49 4e 20 43 4f 4e  ect of BEGIN CON
0a60: 43 55 52 52 45 4e 54 20 74 72 61 6e 73 61 63 74  CURRENT transact
0a70: 69 6f 6e 73 20 74 68 61 74 20 63 6f 6e 73 69 73  ions that consis
0a80: 74 20 65 6e 74 69 72 65 6c 79 0a 23 20 6f 66 20  t entirely.# of 
0a90: 72 65 61 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d  read-only statem
0aa0: 65 6e 74 73 2e 0a 23 0a 72 65 73 65 74 5f 64 62  ents..#.reset_db
0ab0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0ac0: 20 34 2e 30 20 7b 0a 20 20 50 52 41 47 4d 41 20   4.0 {.  PRAGMA 
0ad0: 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34  page_size = 1024
0ae0: 3b 0a 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e  ;.  PRAGMA journ
0af0: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 3b 0a 20  al_mode = wal;. 
0b00: 20 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45   .  CREATE TABLE
0b10: 20 74 34 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53   t4(a, b);.  INS
0b20: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
0b30: 45 53 28 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45  ES(1, 2);.  INSE
0b40: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
0b50: 53 28 33 2c 20 34 29 3b 0a 7d 20 7b 77 61 6c 7d  S(3, 4);.} {wal}
0b60: 0a 20 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74  . .sqlite3 db2 t
0b70: 65 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20 34  est.db.do_test 4
0b80: 2e 31 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  .1.1 {.  db eval
0b90: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 43 4f 4e   {.    BEGIN CON
0ba0: 43 55 52 52 45 4e 54 3b 0a 20 20 20 20 20 20 49  CURRENT;.      I
0bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
0bc0: 4c 55 45 53 28 35 2c 20 36 29 3b 0a 20 20 7d 0a  LUES(5, 6);.  }.
0bd0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20  .  db2 eval {.  
0be0: 20 20 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45    BEGIN CONCURRE
0bf0: 4e 54 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  NT;.      SELECT
0c00: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20   * FROM t4;.    
0c10: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
0c20: 7b 31 20 32 20 33 20 34 7d 0a 0a 64 6f 5f 74 65  {1 2 3 4}..do_te
0c30: 73 74 20 34 2e 31 2e 32 20 7b 0a 20 20 64 62 20  st 4.1.2 {.  db 
0c40: 65 76 61 6c 20 7b 20 43 4f 4d 4d 49 54 20 7d 0a  eval { COMMIT }.
0c50: 20 20 64 62 32 20 65 76 61 6c 20 7b 20 53 45 4c    db2 eval { SEL
0c60: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20 7d 0a  ECT * FROM t4 }.
0c70: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 7d 0a  } {1 2 3 4 5 6}.
0c80: 0a 64 6f 5f 74 65 73 74 20 34 2e 32 2e 31 20 7b  .do_test 4.2.1 {
0c90: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
0ca0: 20 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e   BEGIN CONCURREN
0cb0: 54 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  T;.      INSERT 
0cc0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 37  INTO t4 VALUES(7
0cd0: 2c 20 38 29 3b 0a 20 20 7d 0a 0a 20 20 64 62 32  , 8);.  }..  db2
0ce0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 42 45 47 49   eval {.    BEGI
0cf0: 4e 20 43 4f 4e 43 55 52 52 45 4e 54 3b 0a 20 20  N CONCURRENT;.  
0d00: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0d10: 4d 20 74 34 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  M t4;.    COMMIT
0d20: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  ;.  }.} {1 2 3 4
0d30: 20 35 20 36 7d 0a 0a 64 6f 5f 74 65 73 74 20 34   5 6}..do_test 4
0d40: 2e 32 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  .2.2 {.  db eval
0d50: 20 7b 20 43 4f 4d 4d 49 54 20 7d 0a 20 20 64 62   { COMMIT }.  db
0d60: 32 20 65 76 61 6c 20 7b 20 53 45 4c 45 43 54 20  2 eval { SELECT 
0d70: 2a 20 46 52 4f 4d 20 74 34 20 7d 0a 7d 20 7b 31  * FROM t4 }.} {1
0d80: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 7d 0a   2 3 4 5 6 7 8}.
0d90: 0a 64 6f 5f 74 65 73 74 20 34 2e 33 20 7b 0a 20  .do_test 4.3 {. 
0da0: 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20   db2 eval {.    
0db0: 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54  BEGIN CONCURRENT
0dc0: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
0dd0: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 0a 20   FROM t4;.  }.. 
0de0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 42   db eval {.    B
0df0: 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 3b  EGIN CONCURRENT;
0e00: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
0e10: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 39 2c 20  TO t4 VALUES(9, 
0e20: 31 30 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  10);.    COMMIT;
0e30: 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  .  }.  db2 eval 
0e40: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
0e50: 52 4f 4d 20 74 34 3b 0a 20 20 20 20 43 4f 4d 4d  ROM t4;.    COMM
0e60: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  IT;.  }.} {1 2 3
0e70: 20 34 20 35 20 36 20 37 20 38 7d 0a 0a 73 65 74   4 5 6 7 8}..set
0e80: 20 73 7a 20 5b 66 69 6c 65 20 73 69 7a 65 20 74   sz [file size t
0e90: 65 73 74 2e 64 62 2d 77 61 6c 5d 0a 64 6f 5f 74  est.db-wal].do_t
0ea0: 65 73 74 20 34 2e 34 2e 31 20 7b 0a 20 20 64 62  est 4.4.1 {.  db
0eb0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 42 45 47 49   eval {.    BEGI
0ec0: 4e 20 43 4f 4e 43 55 52 52 45 4e 54 3b 0a 20 20  N CONCURRENT;.  
0ed0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0ee0: 4d 20 74 34 3b 0a 20 20 20 20 20 20 53 45 4c 45  M t4;.      SELE
0ef0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
0f00: 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 0a 20 20  _master;.  }..  
0f10: 64 62 20 65 76 61 6c 20 43 4f 4d 4d 49 54 0a 20  db eval COMMIT. 
0f20: 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e   file size test.
0f30: 64 62 2d 77 61 6c 0a 7d 20 24 73 7a 0a 64 6f 5f  db-wal.} $sz.do_
0f40: 74 65 73 74 20 34 2e 34 2e 32 20 7b 0a 20 20 64  test 4.4.2 {.  d
0f50: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 42 45 47  b eval {.    BEG
0f60: 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 3b 0a 20  IN CONCURRENT;. 
0f70: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
0f80: 4f 4d 20 74 34 3b 0a 20 20 20 20 20 20 53 45 4c  OM t4;.      SEL
0f90: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0fa0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 52 4f  e_master;.    RO
0fb0: 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 20 20 66 69  LLBACK;.  }.  fi
0fc0: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 2d  le size test.db-
0fd0: 77 61 6c 0a 7d 20 24 73 7a 0a 0a 66 69 6e 69 73  wal.} $sz..finis
0fe0: 68 5f 74 65 73 74 0a 0a                          h_test..