/ Hex Artifact Content
Login

Artifact 556b447a05be0e0963f4311e95ab1632b11c9eaa:


0000: 23 20 32 30 30 39 20 41 70 72 69 6c 20 32 30 0a  # 2009 April 20.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   you 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 2a 2a 0a 23 0a 23 20 54 65 73 74 20 63  *****.#.# Test c
0170: 61 73 65 73 20 69 6e 73 70 69 72 65 64 20 62 79  ases inspired by
0180: 20 74 69 63 6b 65 74 20 23 33 38 31 31 2e 20 20   ticket #3811.  
0190: 54 65 73 74 73 20 74 6f 20 6d 61 6b 65 20 73 75  Tests to make su
01a0: 72 65 20 74 68 61 74 0a 23 20 74 68 65 20 6a 6f  re that.# the jo
01b0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 63 61 6e 20 6f  urnal_mode can o
01c0: 6e 6c 79 20 62 65 20 63 68 61 6e 67 65 64 20 61  nly be changed a
01d0: 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69  t appropriate ti
01e0: 6d 65 73 20 61 6e 64 20 74 68 61 74 0a 23 20 61  mes and that.# a
01f0: 6c 6c 20 72 65 70 6f 72 74 65 64 20 63 68 61 6e  ll reported chan
0200: 67 65 73 20 61 72 65 20 65 66 66 65 63 74 69 76  ges are effectiv
0210: 65 2e 0a 23 0a 23 20 24 49 64 3a 20 6a 72 6e 6c  e..#.# $Id: jrnl
0220: 6d 6f 64 65 33 2e 74 65 73 74 2c 76 20 31 2e 35  mode3.test,v 1.5
0230: 20 32 30 30 39 2f 30 34 2f 32 30 20 31 37 3a 34   2009/04/20 17:4
0240: 33 3a 30 33 20 64 72 68 20 45 78 70 20 24 0a 0a  3:03 drh Exp $..
0250: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0260: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0270: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0280: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66  r/tester.tcl..if
0290: 63 61 70 61 62 6c 65 20 7b 21 70 61 67 65 72 5f  capable {!pager_
02a0: 70 72 61 67 6d 61 73 7d 20 7b 0a 20 20 66 69 6e  pragmas} {.  fin
02b0: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
02c0: 6e 0a 7d 0a 0a 23 0a 23 20 56 65 72 69 66 79 20  n.}..#.# Verify 
02d0: 74 68 61 74 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  that journal_mod
02e0: 65 3d 4f 46 46 20 77 6f 72 6b 73 20 61 73 20 6c  e=OFF works as l
02f0: 6f 6e 67 20 61 73 20 69 74 20 6f 63 63 75 72 73  ong as it occurs
0300: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
0310: 74 0a 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  t.# transaction,
0320: 20 65 76 65 6e 20 69 66 20 6c 6f 63 6b 69 6e 67   even if locking
0330: 5f 6d 6f 64 65 3d 45 58 43 4c 55 53 49 56 45 20  _mode=EXCLUSIVE 
0340: 69 73 20 65 6e 61 62 6c 65 64 2e 20 20 54 68 65  is enabled.  The
0350: 20 62 65 68 61 76 69 6f 72 20 69 66 0a 23 20 6a   behavior if.# j
0360: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 63  ournal_mode is c
0370: 68 61 6e 67 65 64 20 61 66 74 65 72 20 74 68 65  hanged after the
0380: 20 66 69 72 73 74 20 74 72 61 6e 73 61 63 74 69   first transacti
0390: 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20  on is undefined 
03a0: 61 6e 64 20 68 65 6e 63 65 0a 23 20 75 6e 74 65  and hence.# unte
03b0: 73 74 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  sted..#.do_test 
03c0: 6a 72 6e 6c 6d 6f 64 65 33 2d 31 2e 31 20 7b 0a  jrnlmode3-1.1 {.
03d0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
03e0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
03f0: 6f 64 65 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41  ode=OFF;.    PRA
0400: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
0410: 3d 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  =EXCLUSIVE;.    
0420: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0430: 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  x);.    INSERT I
0440: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 29  NTO t1 VALUES(1)
0450: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0460: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 6f  ROM t1;.  }.} {o
0470: 66 66 20 65 78 63 6c 75 73 69 76 65 20 31 7d 0a  ff exclusive 1}.
0480: 64 6f 5f 74 65 73 74 20 6a 72 6e 6c 6d 6f 64 65  do_test jrnlmode
0490: 33 2d 31 2e 32 20 7b 0a 20 20 64 62 20 65 76 61  3-1.2 {.  db eva
04a0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
04b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
04c0: 31 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20  1 VALUES(2);.   
04d0: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53   ROLLBACK;.    S
04e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
04f0: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 64 62 20 63  .  }.} {1}..db c
0500: 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65  lose.forcedelete
0510: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
0520: 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33  -journal.sqlite3
0530: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 64 6f 5f   db test.db..do_
0540: 74 65 73 74 20 6a 72 6e 6c 6d 6f 64 65 33 2d 32  test jrnlmode3-2
0550: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
0560: 0a 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b  .    PRAGMA lock
0570: 69 6e 67 5f 6d 6f 64 65 3d 45 58 43 4c 55 53 49  ing_mode=EXCLUSI
0580: 56 45 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6a  VE;.    PRAGMA j
0590: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 4f 46 46 3b  ournal_mode=OFF;
05a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
05b0: 45 20 74 31 28 78 29 3b 0a 20 20 20 20 49 4e 53  E t1(x);.    INS
05c0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
05d0: 45 53 28 31 29 3b 0a 20 20 20 20 53 45 4c 45 43  ES(1);.    SELEC
05e0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
05f0: 0a 7d 20 7b 65 78 63 6c 75 73 69 76 65 20 6f 66  .} {exclusive of
0600: 66 20 31 7d 0a 64 6f 5f 74 65 73 74 20 6a 72 6e  f 1}.do_test jrn
0610: 6c 6d 6f 64 65 33 2d 32 2e 32 20 7b 0a 20 20 64  lmode3-2.2 {.  d
0620: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 42 45 47  b eval {.    BEG
0630: 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  IN;.    INSERT I
0640: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 29  NTO t1 VALUES(2)
0650: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
0660: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0670: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  M t1;.  }.} {1}.
0680: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 74 6f  .# Test cases to
0690: 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65 20   verify that we 
06a0: 63 61 6e 20 6d 6f 76 65 20 66 72 6f 6d 20 61 6e  can move from an
06b0: 79 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 23  y journal_mode.#
06c0: 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 2c 20 61   to any other, a
06d0: 73 20 6c 6f 6e 67 20 61 73 20 77 65 20 61 72 65  s long as we are
06e0: 20 6e 6f 74 20 69 6e 20 61 20 74 72 61 6e 73 61   not in a transa
06f0: 63 74 69 6f 6e 2e 20 20 56 65 72 69 66 79 0a 23  ction.  Verify.#
0700: 20 74 68 61 74 20 77 65 20 63 61 6e 6e 6f 74 20   that we cannot 
0710: 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 5f 6d  change journal_m
0720: 6f 64 65 20 77 68 69 6c 65 20 61 20 74 72 61 6e  ode while a tran
0730: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
0740: 65 2e 0a 23 0a 73 65 74 20 61 6c 6c 5f 6a 6f 75  e..#.set all_jou
0750: 72 6e 61 6c 5f 6d 6f 64 65 73 20 7b 64 65 6c 65  rnal_modes {dele
0760: 74 65 20 70 65 72 73 69 73 74 20 74 72 75 6e 63  te persist trunc
0770: 61 74 65 20 6d 65 6d 6f 72 79 20 6f 66 66 7d 0a  ate memory off}.
0780: 73 65 74 20 63 6e 74 20 30 0a 66 6f 72 65 61 63  set cnt 0.foreac
0790: 68 20 66 72 6f 6d 6a 6d 6f 64 65 20 24 61 6c 6c  h fromjmode $all
07a0: 5f 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 73 20 7b  _journal_modes {
07b0: 0a 20 20 66 6f 72 65 61 63 68 20 74 6f 6a 6d 6f  .  foreach tojmo
07c0: 64 65 20 24 61 6c 6c 5f 6a 6f 75 72 6e 61 6c 5f  de $all_journal_
07d0: 6d 6f 64 65 73 20 7b 0a 0a 20 20 20 20 23 20 53  modes {..    # S
07e0: 6b 69 70 20 74 68 65 20 6e 6f 2d 63 68 61 6e 67  kip the no-chang
07f0: 65 20 63 61 73 65 73 0a 20 20 20 20 69 66 20 7b  e cases.    if {
0800: 24 66 72 6f 6d 6a 6d 6f 64 65 3d 3d 24 74 6f 6a  $fromjmode==$toj
0810: 6d 6f 64 65 7d 20 63 6f 6e 74 69 6e 75 65 0a 20  mode} continue. 
0820: 20 20 20 69 6e 63 72 20 63 6e 74 0a 0a 20 20 20     incr cnt..   
0830: 20 23 20 53 74 61 72 74 20 77 69 74 68 20 61 20   # Start with a 
0840: 66 72 65 73 68 20 64 61 74 61 62 61 73 65 20 63  fresh database c
0850: 6f 6e 6e 65 63 74 69 6f 6e 20 61 6e 20 65 6d 70  onnection an emp
0860: 74 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ty database file
0870: 2e 0a 20 20 20 20 23 0a 20 20 20 20 64 62 20 63  ..    #.    db c
0880: 6c 6f 73 65 0a 20 20 20 20 66 6f 72 63 65 64 65  lose.    forcede
0890: 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73  lete test.db tes
08a0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20  t.db-journal.   
08b0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
08c0: 2e 64 62 0a 0a 20 20 20 20 23 20 49 6e 69 74 69  .db..    # Initi
08d0: 61 6c 69 7a 65 20 74 68 65 20 6a 6f 75 72 6e 61  alize the journa
08e0: 6c 20 6d 6f 64 65 2e 0a 20 20 20 20 23 0a 20 20  l mode..    #.  
08f0: 20 20 64 6f 5f 74 65 73 74 20 6a 72 6e 6c 6d 6f    do_test jrnlmo
0900: 64 65 33 2d 33 2e 24 63 6e 74 2e 31 2d 28 24 66  de3-3.$cnt.1-($f
0910: 72 6f 6d 6a 6d 6f 64 65 2d 74 6f 2d 24 74 6f 6a  romjmode-to-$toj
0920: 6d 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 64 62  mode) {.      db
0930: 20 65 76 61 6c 20 22 50 52 41 47 4d 41 20 6a 6f   eval "PRAGMA jo
0940: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 24 66 72  urnal_mode = $fr
0950: 6f 6d 6a 6d 6f 64 65 3b 22 0a 20 20 20 20 7d 20  omjmode;".    } 
0960: 24 66 72 6f 6d 6a 6d 6f 64 65 0a 0a 20 20 20 20  $fromjmode..    
0970: 23 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68  # Verify that th
0980: 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61  e initial journa
0990: 6c 20 6d 6f 64 65 20 74 61 6b 65 73 2e 0a 20 20  l mode takes..  
09a0: 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20    #.    do_test 
09b0: 6a 72 6e 6c 6d 6f 64 65 33 2d 33 2e 24 63 6e 74  jrnlmode3-3.$cnt
09c0: 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  .2 {.      db ev
09d0: 61 6c 20 7b 50 52 41 47 4d 41 20 6d 61 69 6e 2e  al {PRAGMA main.
09e0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 7d 0a 20 20  journal_mode}.  
09f0: 20 20 7d 20 24 66 72 6f 6d 6a 6d 6f 64 65 0a 0a    } $fromjmode..
0a00: 20 20 20 20 23 20 53 74 61 72 74 20 61 20 74 72      # Start a tr
0a10: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 74 72  ansaction and tr
0a20: 79 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  y to change the 
0a30: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 77 69 74  journal mode wit
0a40: 68 69 6e 0a 20 20 20 20 23 20 74 68 65 20 74 72  hin.    # the tr
0a50: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73  ansaction.  This
0a60: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2e 0a 20 20   should fail..  
0a70: 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20    #.    do_test 
0a80: 6a 72 6e 6c 6d 6f 64 65 33 2d 33 2e 24 63 6e 74  jrnlmode3-3.$cnt
0a90: 2e 33 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  .3 {.      db ev
0aa0: 61 6c 20 7b 0a 20 20 20 20 20 20 20 20 43 52 45  al {.        CRE
0ab0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
0ac0: 0a 20 20 20 20 20 20 20 20 42 45 47 49 4e 3b 0a  .        BEGIN;.
0ad0: 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49          INSERT I
0ae0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 63  NTO t1 VALUES($c
0af0: 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nt);.      }.   
0b00: 20 20 20 64 62 20 65 76 61 6c 20 22 50 52 41 47     db eval "PRAG
0b10: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
0b20: 24 74 6f 6a 6d 6f 64 65 22 0a 20 20 20 20 7d 20  $tojmode".    } 
0b30: 24 66 72 6f 6d 6a 6d 6f 64 65 0a 0a 20 20 20 20  $fromjmode..    
0b40: 23 20 52 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  # Rollback the t
0b50: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 0a 20 20  ransaction.  .  
0b60: 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20    #.    do_test 
0b70: 6a 72 6e 6c 6d 6f 64 65 33 2d 33 2e 24 63 6e 74  jrnlmode3-3.$cnt
0b80: 2e 34 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  .4 {.      db ev
0b90: 61 6c 20 7b 0a 20 20 20 20 20 20 20 20 52 4f 4c  al {.        ROL
0ba0: 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 20 20 53  LBACK;.        S
0bb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
0bc0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
0bd0: 7d 0a 0a 20 20 20 20 23 20 4e 6f 77 20 63 68 61  }..    # Now cha
0be0: 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
0bf0: 6d 6f 64 65 20 61 67 61 69 6e 2e 20 20 54 68 69  mode again.  Thi
0c00: 73 20 74 69 6d 65 20 74 68 65 20 6e 65 77 20 6d  s time the new m
0c10: 6f 64 65 0a 20 20 20 20 23 20 73 68 6f 75 6c 64  ode.    # should
0c20: 20 74 61 6b 65 2e 0a 20 20 20 20 23 0a 20 20 20   take..    #.   
0c30: 20 64 6f 5f 74 65 73 74 20 6a 72 6e 6c 6d 6f 64   do_test jrnlmod
0c40: 65 33 2d 33 2e 24 63 6e 74 2e 35 20 7b 0a 20 20  e3-3.$cnt.5 {.  
0c50: 20 20 20 20 64 62 20 65 76 61 6c 20 22 50 52 41      db eval "PRA
0c60: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
0c70: 3d 24 74 6f 6a 6d 6f 64 65 22 0a 20 20 20 20 7d  =$tojmode".    }
0c80: 20 24 74 6f 6a 6d 6f 64 65 0a 0a 20 20 20 20 23   $tojmode..    #
0c90: 20 44 6f 20 61 20 74 68 65 20 74 72 61 6e 73 61   Do a the transa
0ca0: 63 74 69 6f 6e 2e 20 20 56 65 72 69 66 79 20 74  ction.  Verify t
0cb0: 68 61 74 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  hat the rollback
0cc0: 20 6f 63 63 75 72 72 65 64 0a 20 20 20 20 23 20   occurred.    # 
0cd0: 69 66 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 21  if journal_mode!
0ce0: 3d 4f 46 46 2e 0a 20 20 20 20 23 0a 20 20 20 20  =OFF..    #.    
0cf0: 64 6f 5f 74 65 73 74 20 6a 72 6e 6c 6d 6f 64 65  do_test jrnlmode
0d00: 33 2d 33 2e 24 63 6e 74 2e 36 20 7b 0a 20 20 20  3-3.$cnt.6 {.   
0d10: 20 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20     db eval {.   
0d20: 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
0d30: 49 46 20 45 58 49 53 54 53 20 74 31 3b 0a 20 20  IF EXISTS t1;.  
0d40: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
0d50: 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20 20 20  LE t1(x);.      
0d60: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 20    BEGIN;.       
0d70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0d80: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 20  VALUES(1);.     
0d90: 20 7d 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c   }.      db eval
0da0: 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 20 20 20   ROLLBACK.      
0db0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20  db eval {.      
0dc0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0dd0: 74 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t1;.      }.    
0de0: 7d 20 7b 7d 0a 20 20 7d 0a 7d 0a 0a 66 69 6e 69  } {}.  }.}..fini
0df0: 73 68 5f 74 65 73 74 0a                          sh_test.