/ Hex Artifact Content
Login

Artifact 4022fe03ae6e830583672caa101f046438a0473c:


0000: 23 20 32 30 31 30 20 41 70 72 69 6c 20 31 39 0a  # 2010 April 19.
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 20 54 68 69 73 20 66 69 6c  *****.# This fil
0170: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67  e implements reg
0180: 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f  ression tests fo
0190: 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  r SQLite library
01a0: 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f  .  The.# focus o
01b0: 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74  f this file is t
01c0: 65 73 74 69 6e 67 20 74 68 65 20 6f 70 65 72 61  esting the opera
01d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
01e0: 61 72 79 20 69 6e 0a 23 20 22 50 52 41 47 4d 41  ary in.# "PRAGMA
01f0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
0200: 4c 22 20 6d 6f 64 65 2e 0a 23 0a 0a 73 65 74 20  L" mode..#..set 
0210: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0220: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0230: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0240: 73 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20  ster.tcl.source 
0250: 24 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f  $testdir/malloc_
0260: 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 23 20 49 66  common.tcl..# If
0270: 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73   the library was
0280: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 6f 75   compiled withou
0290: 74 20 57 41 4c 20 73 75 70 70 6f 72 74 2c 20 63  t WAL support, c
02a0: 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 0a 23  heck that the .#
02b0: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
02c0: 5f 6d 6f 64 65 3d 57 41 4c 22 20 74 72 65 61 74  _mode=WAL" treat
02d0: 73 20 22 57 41 4c 22 20 61 73 20 61 6e 20 75 6e  s "WAL" as an un
02e0: 72 65 63 6f 67 6e 69 7a 65 64 20 6d 6f 64 65 2e  recognized mode.
02f0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 21 77 61  .#.ifcapable !wa
0300: 6c 20 7b 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77  l {..  do_test w
0310: 61 6c 6d 6f 64 65 2d 30 2e 31 20 7b 0a 20 20 20  almode-0.1 {.   
0320: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
0330: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  A journal_mode =
0340: 20 77 61 6c 20 7d 0a 20 20 7d 20 7b 64 65 6c 65   wal }.  } {dele
0350: 74 65 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 61  te}.  do_test wa
0360: 6c 6d 6f 64 65 2d 30 2e 32 20 7b 0a 20 20 20 20  lmode-0.2 {.    
0370: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
0380: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
0390: 64 65 20 3d 20 77 61 6c 20 7d 0a 20 20 7d 20 7b  de = wal }.  } {
03a0: 64 65 6c 65 74 65 7d 0a 20 20 64 6f 5f 74 65 73  delete}.  do_tes
03b0: 74 20 77 61 6c 6d 6f 64 65 2d 30 2e 33 20 7b 0a  t walmode-0.3 {.
03c0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52      execsql { PR
03d0: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
03e0: 6c 5f 6d 6f 64 65 20 7d 0a 20 20 7d 20 7b 64 65  l_mode }.  } {de
03f0: 6c 65 74 65 7d 0a 0a 20 20 66 69 6e 69 73 68 5f  lete}..  finish_
0400: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
0410: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
0420: 2d 31 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c  -1.1 {.  set sql
0430: 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 30  ite_sync_count 0
0440: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41  .  execsql { PRA
0450: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20  GMA page_size = 
0460: 31 30 32 34 20 7d 0a 20 20 65 78 65 63 73 71 6c  1024 }.  execsql
0470: 20 7b 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61   { PRAGMA journa
0480: 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d 0a 7d  l_mode = wal }.}
0490: 20 7b 77 61 6c 7d 0a 64 6f 5f 74 65 73 74 20 77   {wal}.do_test w
04a0: 61 6c 6d 6f 64 65 2d 31 2e 32 20 7b 0a 20 20 66  almode-1.2 {.  f
04b0: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
04c0: 0a 7d 20 7b 31 30 32 34 7d 0a 0a 73 65 74 20 65  .} {1024}..set e
04d0: 78 70 65 63 74 65 64 5f 73 79 6e 63 5f 63 6f 75  xpected_sync_cou
04e0: 6e 74 20 33 0a 69 66 20 7b 24 3a 3a 74 63 6c 5f  nt 3.if {$::tcl_
04f0: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72  platform(platfor
0500: 6d 29 21 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b  m)!="windows"} {
0510: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 64 69 72  .  ifcapable dir
0520: 73 79 6e 63 20 7b 0a 20 20 20 20 69 6e 63 72 20  sync {.    incr 
0530: 65 78 70 65 63 74 65 64 5f 73 79 6e 63 5f 63 6f  expected_sync_co
0540: 75 6e 74 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73  unt.  }.}.do_tes
0550: 74 20 77 61 6c 6d 6f 64 65 2d 31 2e 33 20 7b 0a  t walmode-1.3 {.
0560: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 73 79 6e    set sqlite_syn
0570: 63 5f 63 6f 75 6e 74 0a 7d 20 24 65 78 70 65 63  c_count.} $expec
0580: 74 65 64 5f 73 79 6e 63 5f 63 6f 75 6e 74 0a 0a  ted_sync_count..
0590: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
05a0: 31 2e 34 20 7b 0a 20 20 66 69 6c 65 20 65 78 69  1.4 {.  file exi
05b0: 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a  sts test.db-wal.
05c0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 77 61  } {0}.do_test wa
05d0: 6c 6d 6f 64 65 2d 31 2e 35 20 7b 0a 20 20 65 78  lmode-1.5 {.  ex
05e0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54  ecsql { CREATE T
05f0: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 20 7d 0a  ABLE t1(a, b) }.
0600: 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74    file size test
0610: 2e 64 62 0a 7d 20 7b 31 30 32 34 7d 0a 64 6f 5f  .db.} {1024}.do_
0620: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 31 2e 36  test walmode-1.6
0630: 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73 74 73   {.  file exists
0640: 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a 7d 20 7b   test.db-wal.} {
0650: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  1}.do_test walmo
0660: 64 65 2d 31 2e 37 20 7b 0a 20 20 64 62 20 63 6c  de-1.7 {.  db cl
0670: 6f 73 65 0a 20 20 66 69 6c 65 20 65 78 69 73 74  ose.  file exist
0680: 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a 7d 20  s test.db-wal.} 
0690: 7b 30 7d 0a 0a 23 20 54 68 65 72 65 20 69 73 20  {0}..# There is 
06a0: 6e 6f 77 20 61 20 64 61 74 61 62 61 73 65 20 66  now a database f
06b0: 69 6c 65 20 77 69 74 68 20 74 68 65 20 72 65 61  ile with the rea
06c0: 64 20 61 6e 64 20 77 72 69 74 65 20 76 65 72 73  d and write vers
06d0: 69 6f 6e 73 20 73 65 74 20 74 6f 20 32 0a 23 20  ions set to 2.# 
06e0: 69 6e 20 74 68 65 20 66 69 6c 65 20 73 79 73 74  in the file syst
06f0: 65 6d 2e 20 54 68 69 73 20 66 69 6c 65 20 73 68  em. This file sh
0700: 6f 75 6c 64 20 64 65 66 61 75 6c 74 20 74 6f 20  ould default to 
0710: 57 41 4c 20 6d 6f 64 65 2e 0a 23 0a 64 6f 5f 74  WAL mode..#.do_t
0720: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 32 2e 31 20  est walmode-2.1 
0730: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  {.  sqlite3 db t
0740: 65 73 74 2e 64 62 0a 20 20 66 69 6c 65 20 65 78  est.db.  file ex
0750: 69 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c  ists test.db-wal
0760: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 77  .} {0}.do_test w
0770: 61 6c 6d 6f 64 65 2d 32 2e 32 20 7b 0a 20 20 65  almode-2.2 {.  e
0780: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
0790: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
07a0: 73 74 65 72 20 7d 0a 20 20 66 69 6c 65 20 65 78  ster }.  file ex
07b0: 69 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c  ists test.db-wal
07c0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 77  .} {1}.do_test w
07d0: 61 6c 6d 6f 64 65 2d 32 2e 33 20 7b 0a 20 20 64  almode-2.3 {.  d
07e0: 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 65  b close.  file e
07f0: 78 69 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61  xists test.db-wa
0800: 6c 0a 7d 20 7b 30 7d 0a 0a 23 20 49 66 20 74 68  l.} {0}..# If th
0810: 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65 6e  e first statemen
0820: 74 20 65 78 65 63 75 74 65 64 20 69 73 20 22 50  t executed is "P
0830: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
0840: 64 65 20 3d 20 77 61 6c 22 2c 20 61 6e 64 0a 23  de = wal", and.#
0850: 20 74 68 65 20 66 69 6c 65 20 69 73 20 61 6c 72   the file is alr
0860: 65 61 64 79 20 63 6f 6e 66 69 67 75 72 65 64 20  eady configured 
0870: 66 6f 72 20 57 41 4c 20 28 72 65 61 64 20 61 6e  for WAL (read an
0880: 64 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e 73  d write versions
0890: 20 73 65 74 0a 23 20 74 6f 20 32 29 2c 20 74 68   set.# to 2), th
08a0: 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20  en there should 
08b0: 62 65 20 6e 6f 20 6e 65 65 64 20 74 6f 20 77 72  be no need to wr
08c0: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
08d0: 2e 20 54 68 65 20 0a 23 20 73 74 61 74 65 6d 65  . The .# stateme
08e0: 6e 74 20 73 68 6f 75 6c 64 20 63 61 75 73 65 20  nt should cause 
08f0: 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 63 6f  the client to co
0900: 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 6c 6f 67  nnect to the log
0910: 20 66 69 6c 65 2e 0a 23 0a 73 65 74 20 73 71 6c   file..#.set sql
0920: 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 30  ite_sync_count 0
0930: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
0940: 2d 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.1 {.  sqlite3
0950: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0960: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6a  ecsql { PRAGMA j
0970: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61  ournal_mode = wa
0980: 6c 20 7d 0a 7d 20 7b 77 61 6c 7d 0a 64 6f 5f 74  l }.} {wal}.do_t
0990: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 33 2e 32 20  est walmode-3.2 
09a0: 7b 0a 20 20 6c 69 73 74 20 24 73 71 6c 69 74 65  {.  list $sqlite
09b0: 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 5b 66 69 6c  _sync_count [fil
09c0: 65 20 65 78 69 73 74 73 20 74 65 73 74 2e 64 62  e exists test.db
09d0: 2d 77 61 6c 5d 20 5b 66 69 6c 65 20 73 69 7a 65  -wal] [file size
09e0: 20 74 65 73 74 2e 64 62 2d 77 61 6c 5d 0a 7d 20   test.db-wal].} 
09f0: 7b 30 20 31 20 30 7d 0a 0a 23 20 54 65 73 74 20  {0 1 0}..# Test 
0a00: 74 68 61 74 20 63 68 61 6e 67 69 6e 67 20 62 61  that changing ba
0a10: 63 6b 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  ck to journal_mo
0a20: 64 65 3d 70 65 72 73 69 73 74 20 77 6f 72 6b 73  de=persist works
0a30: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d  ..#.do_test walm
0a40: 6f 64 65 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  ode-4.1 {.  exec
0a50: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0a60: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  O t1 VALUES(1, 2
0a70: 29 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  ) }.  execsql { 
0a80: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
0a90: 6f 64 65 20 3d 20 70 65 72 73 69 73 74 20 7d 0a  ode = persist }.
0aa0: 7d 20 7b 70 65 72 73 69 73 74 7d 0a 64 6f 5f 74  } {persist}.do_t
0ab0: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 32 20  est walmode-4.2 
0ac0: 7b 0a 20 20 6c 69 73 74 20 5b 66 69 6c 65 20 65  {.  list [file e
0ad0: 78 69 73 74 73 20 74 65 73 74 2e 64 62 2d 6a 6f  xists test.db-jo
0ae0: 75 72 6e 61 6c 5d 20 5b 66 69 6c 65 20 65 78 69  urnal] [file exi
0af0: 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 5d  sts test.db-wal]
0b00: 0a 7d 20 7b 31 20 30 7d 0a 64 6f 5f 74 65 73 74  .} {1 0}.do_test
0b10: 20 77 61 6c 6d 6f 64 65 2d 34 2e 33 20 7b 0a 20   walmode-4.3 {. 
0b20: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0b30: 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 20  T * FROM t1 }.} 
0b40: 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 61  {1 2}.do_test wa
0b50: 6c 6d 6f 64 65 2d 34 2e 34 20 7b 0a 20 20 64 62  lmode-4.4 {.  db
0b60: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0b70: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0b80: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
0b90: 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 20 7b 31 20   FROM t1 }.} {1 
0ba0: 32 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  2}.do_test walmo
0bb0: 64 65 2d 34 2e 35 20 7b 0a 20 20 6c 69 73 74 20  de-4.5 {.  list 
0bc0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 74 65 73  [file exists tes
0bd0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 5d 20 5b 66  t.db-journal] [f
0be0: 69 6c 65 20 65 78 69 73 74 73 20 74 65 73 74 2e  ile exists test.
0bf0: 64 62 2d 77 61 6c 5d 0a 7d 20 7b 31 20 30 7d 0a  db-wal].} {1 0}.
0c00: 0a 23 20 54 65 73 74 20 74 68 61 74 20 6e 6f 74  .# Test that not
0c10: 68 69 6e 67 20 67 6f 65 73 20 77 72 6f 6e 67 20  hing goes wrong 
0c20: 69 66 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  if a connection 
0c30: 69 73 20 70 72 65 76 65 6e 74 65 64 20 66 72 6f  is prevented fro
0c40: 6d 20 63 68 61 6e 67 69 6e 67 0a 23 20 66 72 6f  m changing.# fro
0c50: 6d 20 57 41 4c 20 74 6f 20 72 6f 6c 6c 62 61 63  m WAL to rollbac
0c60: 6b 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 61  k mode because a
0c70: 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69   second connecti
0c80: 6f 6e 20 68 61 73 20 74 68 65 20 64 61 74 61 62  on has the datab
0c90: 61 73 65 0a 23 20 6f 70 65 6e 2e 20 4f 72 20 66  ase.# open. Or f
0ca0: 72 6f 6d 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 20  rom rollback to 
0cb0: 57 41 4c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  WAL..#.do_test w
0cc0: 61 6c 6d 6f 64 65 2d 34 2e 36 20 7b 0a 20 20 73  almode-4.6 {.  s
0cd0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
0ce0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50  db.  execsql { P
0cf0: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
0d00: 61 6c 5f 6d 6f 64 65 20 7d 20 64 62 32 0a 7d 20  al_mode } db2.} 
0d10: 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 74 65 73 74  {delete}.do_test
0d20: 20 77 61 6c 6d 6f 64 65 2d 34 2e 37 20 7b 0a 20   walmode-4.7 {. 
0d30: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
0d40: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
0d50: 6f 64 65 20 3d 20 77 61 6c 20 7d 20 64 62 0a 7d  ode = wal } db.}
0d60: 20 7b 77 61 6c 7d 0a 64 6f 5f 74 65 73 74 20 77   {wal}.do_test w
0d70: 61 6c 6d 6f 64 65 2d 34 2e 38 20 7b 0a 20 20 65  almode-4.8 {.  e
0d80: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
0d90: 2a 20 46 52 4f 4d 20 74 31 20 7d 20 64 62 32 0a  * FROM t1 } db2.
0da0: 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20  } {1 2}.do_test 
0db0: 77 61 6c 6d 6f 64 65 2d 34 2e 39 20 7b 0a 20 20  walmode-4.9 {.  
0dc0: 63 61 74 63 68 73 71 6c 20 7b 20 50 52 41 47 4d  catchsql { PRAGM
0dd0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  A journal_mode =
0de0: 20 64 65 6c 65 74 65 20 7d 20 64 62 0a 7d 20 7b   delete } db.} {
0df0: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c  1 {database is l
0e00: 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  ocked}}.do_test 
0e10: 77 61 6c 6d 6f 64 65 2d 34 2e 31 30 20 7b 0a 20  walmode-4.10 {. 
0e20: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
0e30: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
0e40: 6f 64 65 20 7d 20 64 62 0a 7d 20 7b 77 61 6c 7d  ode } db.} {wal}
0e50: 0a 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64  ..do_test walmod
0e60: 65 2d 34 2e 31 31 20 7b 0a 20 20 64 62 32 20 63  e-4.11 {.  db2 c
0e70: 6c 6f 73 65 0a 20 20 65 78 65 63 73 71 6c 20 7b  lose.  execsql {
0e80: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
0e90: 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65 20 7d 20  mode = delete } 
0ea0: 64 62 0a 7d 20 7b 64 65 6c 65 74 65 7d 0a 64 6f  db.} {delete}.do
0eb0: 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e  _test walmode-4.
0ec0: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
0ed0: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
0ee0: 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 64 62 0a 7d  rnal_mode } db.}
0ef0: 20 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 74 65 73   {delete}.do_tes
0f00: 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 31 33 20 7b  t walmode-4.13 {
0f10: 0a 20 20 6c 69 73 74 20 5b 66 69 6c 65 20 65 78  .  list [file ex
0f20: 69 73 74 73 20 74 65 73 74 2e 64 62 2d 6a 6f 75  ists test.db-jou
0f30: 72 6e 61 6c 5d 20 5b 66 69 6c 65 20 65 78 69 73  rnal] [file exis
0f40: 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 5d 0a  ts test.db-wal].
0f50: 7d 20 7b 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20  } {0 0}.do_test 
0f60: 77 61 6c 6d 6f 64 65 2d 34 2e 31 34 20 7b 0a 20  walmode-4.14 {. 
0f70: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
0f80: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0f90: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
0fa0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0fb0: 74 31 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31  t1;.  } db2.} {1
0fc0: 20 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 61 6c   2}..do_test wal
0fd0: 6d 6f 64 65 2d 34 2e 31 36 20 7b 20 65 78 65 63  mode-4.16 { exec
0fe0: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  sql { PRAGMA mai
0ff0: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d  n.journal_mode }
1000: 20 64 62 20 20 7d 20 7b 64 65 6c 65 74 65 7d 0a   db  } {delete}.
1010: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
1020: 34 2e 31 37 20 7b 20 65 78 65 63 73 71 6c 20 7b  4.17 { execsql {
1030: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
1040: 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 64 62 32 20  rnal_mode } db2 
1050: 7d 20 7b 64 65 6c 65 74 65 7d 0a 0a 64 6f 5f 74  } {delete}..do_t
1060: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 31 37  est walmode-4.17
1070: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   {.  catchsql { 
1080: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
1090: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d  nal_mode = wal }
10a0: 20 64 62 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61   db.} {1 {databa
10b0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64  se is locked}}.d
10c0: 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34  o_test walmode-4
10d0: 2e 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .18 {.  execsql 
10e0: 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f  { PRAGMA main.jo
10f0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 64 62 0a  urnal_mode } db.
1100: 7d 20 7b 64 65 6c 65 74 65 7d 0a 63 61 74 63 68  } {delete}.catch
1110: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 63 61   { db close }.ca
1120: 74 63 68 20 7b 20 64 62 32 20 63 6c 6f 73 65 20  tch { db2 close 
1130: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 69  }..# Test that i
1140: 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
1150: 65 20 74 6f 20 63 68 61 6e 67 65 20 61 20 74 65  e to change a te
1160: 6d 70 6f 72 61 72 79 20 6f 72 20 69 6e 2d 6d 65  mporary or in-me
1170: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 23 20  mory database.# 
1180: 74 6f 20 57 41 4c 20 6d 6f 64 65 2e 20 57 41 4c  to WAL mode. WAL
1190: 20 6d 6f 64 65 20 69 73 20 66 6f 72 20 70 65 72   mode is for per
11a0: 73 69 73 74 65 6e 74 20 66 69 6c 65 2d 62 61 63  sistent file-bac
11b0: 6b 65 64 20 64 61 74 61 62 61 73 65 73 20 6f 6e  ked databases on
11c0: 6c 79 2e 0a 23 0a 23 20 20 20 77 61 6c 6d 6f 64  ly..#.#   walmod
11d0: 65 2d 35 2e 31 2e 2a 3a 20 54 72 79 20 74 6f 20  e-5.1.*: Try to 
11e0: 73 65 74 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  set journal_mode
11f0: 3d 57 41 4c 20 6f 6e 20 5b 73 71 6c 69 74 65 33  =WAL on [sqlite3
1200: 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 5d 20 64 61   db :memory:] da
1210: 74 61 62 61 73 65 2e 0a 23 20 20 20 77 61 6c 6d  tabase..#   walm
1220: 6f 64 65 2d 35 2e 32 2e 2a 3a 20 54 72 79 20 74  ode-5.2.*: Try t
1230: 6f 20 73 65 74 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  o set journal_mo
1240: 64 65 3d 57 41 4c 20 6f 6e 20 5b 73 71 6c 69 74  de=WAL on [sqlit
1250: 65 33 20 64 62 20 22 22 5d 20 64 61 74 61 62 61  e3 db ""] databa
1260: 73 65 2e 0a 23 20 20 20 77 61 6c 6d 6f 64 65 2d  se..#   walmode-
1270: 35 2e 33 2e 2a 3a 20 54 72 79 20 74 6f 20 73 65  5.3.*: Try to se
1280: 74 20 74 65 6d 70 2e 6a 6f 75 72 6e 61 6c 5f 6d  t temp.journal_m
1290: 6f 64 65 3d 57 41 4c 2e 0a 23 0a 64 6f 5f 74 65  ode=WAL..#.do_te
12a0: 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 31 2e 31  st walmode-5.1.1
12b0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   {.  sqlite3 db 
12c0: 3a 6d 65 6d 6f 72 79 3a 0a 20 20 65 78 65 63 73  :memory:.  execs
12d0: 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e  ql { PRAGMA main
12e0: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 0a  .journal_mode }.
12f0: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 64 6f 5f 74 65  } {memory}.do_te
1300: 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 31 2e 32  st walmode-5.1.2
1310: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50   {.  execsql { P
1320: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
1330: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d 0a  al_mode = wal }.
1340: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 64 6f 5f 74 65  } {memory}.do_te
1350: 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 31 2e 33  st walmode-5.1.3
1360: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1370: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
1380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1390: 61 2c 20 62 29 3b 0a 20 20 20 20 20 20 49 4e 53  a, b);.      INS
13a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
13b0: 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 43 4f  ES(1, 2);.    CO
13c0: 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54  MMIT;.    SELECT
13d0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
13e0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
13f0: 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20  nal_mode;.  }.} 
1400: 7b 31 20 32 20 6d 65 6d 6f 72 79 7d 0a 64 6f 5f  {1 2 memory}.do_
1410: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 31  test walmode-5.1
1420: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
1430: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
1440: 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20  rnal_mode = wal 
1450: 7d 0a 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 64 6f 5f  }.} {memory}.do_
1460: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 31  test walmode-5.1
1470: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
1480: 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54   .    INSERT INT
1490: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 34  O t1 VALUES(3, 4
14a0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
14b0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 50 52 41  FROM t1;.    PRA
14c0: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
14d0: 5f 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20 7b 31 20  _mode;.  }.} {1 
14e0: 32 20 33 20 34 20 6d 65 6d 6f 72 79 7d 0a 0a 69  2 3 4 memory}..i
14f0: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3e 3d  f {$TEMP_STORE>=
1500: 32 7d 20 7b 0a 20 20 73 65 74 20 74 65 6d 70 4a  2} {.  set tempJ
1510: 72 6e 6c 4d 6f 64 65 20 6d 65 6d 6f 72 79 0a 7d  rnlMode memory.}
1520: 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20 74 65   else {.  set te
1530: 6d 70 4a 72 6e 6c 4d 6f 64 65 20 64 65 6c 65 74  mpJrnlMode delet
1540: 65 0a 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d  e.}.do_test walm
1550: 6f 64 65 2d 35 2e 32 2e 31 20 7b 0a 20 20 73 71  ode-5.2.1 {.  sq
1560: 6c 69 74 65 33 20 64 62 20 22 22 0a 20 20 65 78  lite3 db "".  ex
1570: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d  ecsql { PRAGMA m
1580: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
1590: 20 7d 0a 7d 20 24 74 65 6d 70 4a 72 6e 6c 4d 6f   }.} $tempJrnlMo
15a0: 64 65 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  de.do_test walmo
15b0: 64 65 2d 35 2e 32 2e 32 20 7b 0a 20 20 65 78 65  de-5.2.2 {.  exe
15c0: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61  csql { PRAGMA ma
15d0: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  in.journal_mode 
15e0: 3d 20 77 61 6c 20 7d 0a 7d 20 24 74 65 6d 70 4a  = wal }.} $tempJ
15f0: 72 6e 6c 4d 6f 64 65 0a 64 6f 5f 74 65 73 74 20  rnlMode.do_test 
1600: 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e 33 20 7b 0a  walmode-5.2.3 {.
1610: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1620: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52 45  BEGIN;.      CRE
1630: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
1640: 62 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  b);.      INSERT
1650: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1660: 31 2c 20 32 29 3b 0a 20 20 20 20 43 4f 4d 4d 49  1, 2);.    COMMI
1670: 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  T;.    SELECT * 
1680: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 50 52 41  FROM t1;.    PRA
1690: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
16a0: 5f 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  _mode;.  }.} [li
16b0: 73 74 20 31 20 32 20 24 74 65 6d 70 4a 72 6e 6c  st 1 2 $tempJrnl
16c0: 4d 6f 64 65 5d 0a 64 6f 5f 74 65 73 74 20 77 61  Mode].do_test wa
16d0: 6c 6d 6f 64 65 2d 35 2e 32 2e 34 20 7b 0a 20 20  lmode-5.2.4 {.  
16e0: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
16f0: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
1700: 64 65 20 3d 20 77 61 6c 20 7d 0a 7d 20 24 74 65  de = wal }.} $te
1710: 6d 70 4a 72 6e 6c 4d 6f 64 65 0a 64 6f 5f 74 65  mpJrnlMode.do_te
1720: 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e 35  st walmode-5.2.5
1730: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
1740: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1750: 74 31 20 56 41 4c 55 45 53 28 33 2c 20 34 29 3b  t1 VALUES(3, 4);
1760: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1770: 4f 4d 20 74 31 3b 0a 20 20 20 20 50 52 41 47 4d  OM t1;.    PRAGM
1780: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
1790: 6f 64 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ode;.  }.} [list
17a0: 20 31 20 32 20 33 20 34 20 24 74 65 6d 70 4a 72   1 2 3 4 $tempJr
17b0: 6e 6c 4d 6f 64 65 5d 0a 0a 64 6f 5f 74 65 73 74  nlMode]..do_test
17c0: 20 77 61 6c 6d 6f 64 65 2d 35 2e 33 2e 31 20 7b   walmode-5.3.1 {
17d0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
17e0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
17f0: 7b 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 6a 6f  { PRAGMA temp.jo
1800: 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 0a 7d 20 24  urnal_mode }.} $
1810: 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65 0a 64 6f 5f  tempJrnlMode.do_
1820: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 33  test walmode-5.3
1830: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1840: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 6a 6f 75   PRAGMA temp.jou
1850: 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20  rnal_mode = wal 
1860: 7d 0a 7d 20 24 74 65 6d 70 4a 72 6e 6c 4d 6f 64  }.} $tempJrnlMod
1870: 65 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64  e.do_test walmod
1880: 65 2d 35 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63  e-5.3.3 {.  exec
1890: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
18a0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
18b0: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  MP TABLE t1(a, b
18c0: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
18d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
18e0: 2c 20 32 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  , 2);.    COMMIT
18f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1900: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 50 52 41 47  ROM t1;.    PRAG
1910: 4d 41 20 74 65 6d 70 2e 6a 6f 75 72 6e 61 6c 5f  MA temp.journal_
1920: 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  mode;.  }.} [lis
1930: 74 20 31 20 32 20 24 74 65 6d 70 4a 72 6e 6c 4d  t 1 2 $tempJrnlM
1940: 6f 64 65 5d 0a 64 6f 5f 74 65 73 74 20 77 61 6c  ode].do_test wal
1950: 6d 6f 64 65 2d 35 2e 33 2e 34 20 7b 0a 20 20 65  mode-5.3.4 {.  e
1960: 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20  xecsql { PRAGMA 
1970: 74 65 6d 70 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  temp.journal_mod
1980: 65 20 3d 20 77 61 6c 20 7d 0a 7d 20 24 74 65 6d  e = wal }.} $tem
1990: 70 4a 72 6e 6c 4d 6f 64 65 0a 64 6f 5f 74 65 73  pJrnlMode.do_tes
19a0: 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 33 2e 35 20  t walmode-5.3.5 
19b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20  {.  execsql { . 
19c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
19d0: 31 20 56 41 4c 55 45 53 28 33 2c 20 34 29 3b 0a  1 VALUES(3, 4);.
19e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
19f0: 4d 20 74 31 3b 0a 20 20 20 20 50 52 41 47 4d 41  M t1;.    PRAGMA
1a00: 20 74 65 6d 70 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   temp.journal_mo
1a10: 64 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  de;.  }.} [list 
1a20: 31 20 32 20 33 20 34 20 24 74 65 6d 70 4a 72 6e  1 2 3 4 $tempJrn
1a30: 6c 4d 6f 64 65 5d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d  lMode]...#------
1a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a80: 2d 2d 2d 0a 23 20 54 65 73 74 20 63 68 61 6e 67  ---.# Test chang
1a90: 69 6e 67 20 74 6f 20 57 41 4c 20 6d 6f 64 65 20  ing to WAL mode 
1aa0: 66 72 6f 6d 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  from journal_mod
1ab0: 65 3d 6f 66 66 20 6f 72 20 6a 6f 75 72 6e 61 6c  e=off or journal
1ac0: 5f 6d 6f 64 65 3d 6d 65 6d 6f 72 79 0a 23 0a 66  _mode=memory.#.f
1ad0: 6f 72 65 61 63 68 20 7b 74 6e 20 6d 6f 64 65 7d  oreach {tn mode}
1ae0: 20 7b 0a 20 20 31 20 6f 66 66 0a 20 20 32 20 6d   {.  1 off.  2 m
1af0: 65 6d 6f 72 79 0a 20 20 33 20 70 65 72 73 69 73  emory.  3 persis
1b00: 74 0a 20 20 34 20 64 65 6c 65 74 65 0a 20 20 35  t.  4 delete.  5
1b10: 20 74 72 75 6e 63 61 74 65 0a 7d 20 7b 0a 20 20   truncate.} {.  
1b20: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
1b30: 36 2e 24 74 6e 20 7b 0a 20 20 20 20 66 61 75 6c  6.$tn {.    faul
1b40: 74 73 69 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f  tsim_delete_and_
1b50: 72 65 6f 70 65 6e 0a 20 20 20 20 65 78 65 63 73  reopen.    execs
1b60: 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d  ql ".      PRAGM
1b70: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  A journal_mode =
1b80: 20 24 6d 6f 64 65 3b 0a 20 20 20 20 20 20 50 52   $mode;.      PR
1b90: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
1ba0: 65 20 3d 20 77 61 6c 3b 0a 20 20 20 20 22 0a 20  e = wal;.    ". 
1bb0: 20 7d 20 5b 6c 69 73 74 20 24 6d 6f 64 65 20 77   } [list $mode w
1bc0: 61 6c 5d 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a  al].}.db close..
1bd0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
1be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
1c20: 74 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  t the effect of 
1c30: 61 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61  a "PRAGMA journa
1c40: 6c 5f 6d 6f 64 65 22 20 63 6f 6d 6d 61 6e 64 20  l_mode" command 
1c50: 62 65 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  being the first 
1c60: 0a 23 20 74 68 69 6e 67 20 65 78 65 63 75 74 65  .# thing execute
1c70: 64 20 62 79 20 61 20 6e 65 77 20 63 6f 6e 6e 65  d by a new conne
1c80: 63 74 69 6f 6e 2e 20 54 68 69 73 20 6d 65 61 6e  ction. This mean
1c90: 73 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d  s that the schem
1ca0: 61 20 69 73 20 6e 6f 74 0a 23 20 6c 6f 61 64 65  a is not.# loade
1cb0: 64 20 77 68 65 6e 20 73 71 6c 69 74 65 33 5f 70  d when sqlite3_p
1cc0: 72 65 70 61 72 65 5f 76 32 28 29 20 69 73 20 63  repare_v2() is c
1cd0: 61 6c 6c 65 64 20 74 6f 20 63 6f 6d 70 69 6c 65  alled to compile
1ce0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 0a   the statement..
1cf0: 23 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64  #.do_test walmod
1d00: 65 2d 37 2e 30 20 7b 0a 20 20 66 6f 72 63 65 64  e-7.0 {.  forced
1d10: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20  elete test.db.  
1d20: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
1d30: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
1d40: 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61     PRAGMA journa
1d50: 6c 5f 6d 6f 64 65 20 3d 20 57 41 4c 3b 0a 20 20  l_mode = WAL;.  
1d60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1d70: 31 28 61 2c 20 62 29 3b 0a 20 20 7d 0a 7d 20 7b  1(a, b);.  }.} {
1d80: 77 61 6c 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e  wal}.foreach {tn
1d90: 20 73 71 6c 20 72 65 73 75 6c 74 7d 20 7b 0a 20   sql result} {. 
1da0: 20 31 20 20 22 50 52 41 47 4d 41 20 6a 6f 75 72   1  "PRAGMA jour
1db0: 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20 20 20 20  nal_mode"       
1dc0: 20 20 20 20 20 20 20 20 20 77 61 6c 0a 20 20 32           wal.  2
1dd0: 20 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a    "PRAGMA main.j
1de0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20  ournal_mode"    
1df0: 20 20 20 20 20 20 20 77 61 6c 0a 20 20 33 20 20         wal.  3  
1e00: 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  "PRAGMA journal_
1e10: 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65 22 20 20  mode = delete"  
1e20: 20 20 20 20 20 64 65 6c 65 74 65 0a 20 20 34 20       delete.  4 
1e30: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
1e40: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
1e50: 20 20 20 20 20 20 64 65 6c 65 74 65 0a 20 20 35        delete.  5
1e60: 20 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a    "PRAGMA main.j
1e70: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20  ournal_mode"    
1e80: 20 20 20 20 20 20 20 64 65 6c 65 74 65 0a 20 20         delete.  
1e90: 36 20 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e  6  "PRAGMA journ
1ea0: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 22 20 20  al_mode = wal"  
1eb0: 20 20 20 20 20 20 20 20 77 61 6c 0a 20 20 37 20          wal.  7 
1ec0: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
1ed0: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
1ee0: 20 20 20 20 20 20 77 61 6c 0a 20 20 38 20 20 22        wal.  8  "
1ef0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
1f00: 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20 20 20 20  nal_mode"       
1f10: 20 20 20 20 77 61 6c 0a 0a 20 20 39 20 20 22 50      wal..  9  "P
1f20: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
1f30: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20  de"             
1f40: 20 20 20 77 61 6c 0a 20 31 30 20 20 22 50 52 41     wal. 10  "PRA
1f50: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
1f60: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
1f70: 20 77 61 6c 0a 20 31 31 20 20 22 50 52 41 47 4d   wal. 11  "PRAGM
1f80: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
1f90: 6f 64 65 20 3d 20 64 65 6c 65 74 65 22 20 20 64  ode = delete"  d
1fa0: 65 6c 65 74 65 0a 20 31 32 20 20 22 50 52 41 47  elete. 12  "PRAG
1fb0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  MA journal_mode"
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 64 65 6c 65 74 65 0a 20 31 33 20 20 22 50 52 41  delete. 13  "PRA
1fe0: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
1ff0: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
2000: 20 64 65 6c 65 74 65 0a 20 31 34 20 20 22 50 52   delete. 14  "PR
2010: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
2020: 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 22 20 20 20  l_mode = wal"   
2030: 20 20 77 61 6c 0a 20 31 35 20 20 22 50 52 41 47    wal. 15  "PRAG
2040: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  MA journal_mode"
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 77 61 6c 0a 20 31 36 20 20 22 50 52 41 47 4d 41  wal. 16  "PRAGMA
2070: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
2080: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 77 61  de"           wa
2090: 6c 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  l.} {.  do_test 
20a0: 77 61 6c 6d 6f 64 65 2d 37 2e 24 74 6e 20 7b 20  walmode-7.$tn { 
20b0: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
20c0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
20d0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
20e0: 20 24 73 71 6c 0a 20 20 7d 20 24 72 65 73 75 6c   $sql.  } $resul
20f0: 74 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 0a 23 2d  t.}.db close..#-
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2140: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
2150: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 61 20  the effect of a 
2160: 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  "PRAGMA journal_
2170: 6d 6f 64 65 22 20 63 6f 6d 6d 61 6e 64 20 6f 6e  mode" command on
2180: 20 61 6e 20 61 74 74 61 63 68 65 64 20 0a 23 20   an attached .# 
2190: 64 61 74 61 62 61 73 65 2e 0a 23 0a 66 61 75 6c  database..#.faul
21a0: 74 73 69 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f  tsim_delete_and_
21b0: 72 65 6f 70 65 6e 0a 64 6f 5f 65 78 65 63 73 71  reopen.do_execsq
21c0: 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38  l_test walmode-8
21d0: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
21e0: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20  BLE t1(a, b);.  
21f0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
2200: 6f 64 65 20 3d 20 57 41 4c 3b 0a 20 20 41 54 54  ode = WAL;.  ATT
2210: 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20 41  ACH 'test.db2' A
2220: 53 20 74 77 6f 3b 0a 20 20 43 52 45 41 54 45 20  S two;.  CREATE 
2230: 54 41 42 4c 45 20 74 77 6f 2e 74 32 28 61 2c 20  TABLE two.t2(a, 
2240: 62 29 3b 0a 7d 20 7b 77 61 6c 7d 0a 64 6f 5f 65  b);.} {wal}.do_e
2250: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d  xecsql_test walm
2260: 6f 64 65 2d 38 2e 32 20 7b 20 50 52 41 47 4d 41  ode-8.2 { PRAGMA
2270: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
2280: 64 65 20 7d 20 20 20 20 20 20 20 20 20 7b 77 61  de }         {wa
2290: 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  l}.do_execsql_te
22a0: 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 33 20 7b  st walmode-8.3 {
22b0: 20 50 52 41 47 4d 41 20 74 77 6f 2e 6a 6f 75 72   PRAGMA two.jour
22c0: 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20  nal_mode  }     
22d0: 20 20 20 20 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f      {delete}.do_
22e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c  execsql_test wal
22f0: 6d 6f 64 65 2d 38 2e 34 20 7b 20 50 52 41 47 4d  mode-8.4 { PRAGM
2300: 41 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f  A two.journal_mo
2310: 64 65 20 3d 20 44 45 4c 45 54 45 20 7d 20 7b 64  de = DELETE } {d
2320: 65 6c 65 74 65 7d 0a 0a 64 62 20 63 6c 6f 73 65  elete}..db close
2330: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
2340: 2e 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .db.do_execsql_t
2350: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 35 20  est walmode-8.5 
2360: 20 7b 20 41 54 54 41 43 48 20 27 74 65 73 74 2e   { ATTACH 'test.
2370: 64 62 32 27 20 41 53 20 74 77 6f 20 7d 20 20 20  db2' AS two }   
2380: 20 20 20 20 20 20 20 7b 7d 0a 64 6f 5f 65 78 65         {}.do_exe
2390: 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64  csql_test walmod
23a0: 65 2d 38 2e 36 20 20 7b 20 50 52 41 47 4d 41 20  e-8.6  { PRAGMA 
23b0: 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  main.journal_mod
23c0: 65 20 7d 20 20 20 20 20 20 20 20 20 20 7b 77 61  e }          {wa
23d0: 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  l}.do_execsql_te
23e0: 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 37 20 20  st walmode-8.7  
23f0: 7b 20 50 52 41 47 4d 41 20 74 77 6f 2e 6a 6f 75  { PRAGMA two.jou
2400: 72 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20  rnal_mode  }    
2410: 20 20 20 20 20 20 7b 64 65 6c 65 74 65 7d 0a 64        {delete}.d
2420: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77  o_execsql_test w
2430: 61 6c 6d 6f 64 65 2d 38 2e 38 20 20 7b 20 49 4e  almode-8.8  { IN
2440: 53 45 52 54 20 49 4e 54 4f 20 74 77 6f 2e 74 32  SERT INTO two.t2
2450: 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20   DEFAULT VALUES 
2460: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
2470: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 39  test walmode-8.9
2480: 20 20 7b 20 50 52 41 47 4d 41 20 74 77 6f 2e 6a    { PRAGMA two.j
2490: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20  ournal_mode  }  
24a0: 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 7d          {delete}
24b0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
24c0: 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 30 20 7b 20   walmode-8.10 { 
24d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 44  INSERT INTO t1 D
24e0: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 7d 20  EFAULT VALUES } 
24f0: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
2500: 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 31 20  st walmode-8.11 
2510: 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f  { PRAGMA main.jo
2520: 75 72 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20  urnal_mode  }   
2530: 20 20 20 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65        {wal}.do_e
2540: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d  xecsql_test walm
2550: 6f 64 65 2d 38 2e 31 32 20 7b 20 50 52 41 47 4d  ode-8.12 { PRAGM
2560: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 20  A journal_mode  
2570: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  }              {
2580: 77 61 6c 7d 0a 0a 23 20 43 68 61 6e 67 65 20 74  wal}..# Change t
2590: 6f 20 57 41 4c 20 6d 6f 64 65 20 6f 6e 20 74 65  o WAL mode on te
25a0: 73 74 32 2e 64 62 20 61 6e 64 20 6d 61 6b 65 20  st2.db and make 
25b0: 73 75 72 65 20 28 69 6e 20 74 68 65 20 74 65 73  sure (in the tes
25c0: 74 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 29 0a  ts that follow).
25d0: 23 20 74 68 61 74 20 74 68 69 73 20 6d 6f 64 65  # that this mode
25e0: 20 63 68 61 6e 67 65 20 70 65 72 73 69 73 74 73   change persists
25f0: 2e 20 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  . .do_test walmo
2600: 64 65 2d 38 2e 78 31 20 7b 0a 20 20 65 78 65 63  de-8.x1 {.  exec
2610: 73 71 6c 20 7b 0a 20 20 20 20 20 50 52 41 47 4d  sql {.     PRAGM
2620: 41 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f  A two.journal_mo
2630: 64 65 3d 57 41 4c 3b 0a 20 20 20 20 20 50 52 41  de=WAL;.     PRA
2640: 47 4d 41 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f  GMA two.journal_
2650: 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20 7b 77 61 6c  mode;.  }.} {wal
2660: 20 77 61 6c 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a   wal}..db close.
2670: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
2680: 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  db.do_execsql_te
2690: 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 33 20  st walmode-8.13 
26a0: 7b 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  { PRAGMA journal
26b0: 5f 6d 6f 64 65 20 3d 20 57 41 4c 20 7d 20 20 20  _mode = WAL }   
26c0: 20 20 20 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65        {wal}.do_e
26d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d  xecsql_test walm
26e0: 6f 64 65 2d 38 2e 31 34 20 7b 20 41 54 54 41 43  ode-8.14 { ATTAC
26f0: 48 20 27 74 65 73 74 2e 64 62 32 27 20 41 53 20  H 'test.db2' AS 
2700: 74 77 6f 20 20 7d 20 20 20 20 20 20 20 20 20 7b  two  }         {
2710: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
2720: 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 35 20 7b  t walmode-8.15 {
2730: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
2740: 72 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20  rnal_mode  }    
2750: 20 20 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78       {wal}.do_ex
2760: 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f  ecsql_test walmo
2770: 64 65 2d 38 2e 31 36 20 7b 20 50 52 41 47 4d 41  de-8.16 { PRAGMA
2780: 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   two.journal_mod
2790: 65 20 20 20 7d 20 20 20 20 20 20 20 20 20 7b 77  e   }         {w
27a0: 61 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  al}.do_execsql_t
27b0: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 37  est walmode-8.17
27c0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
27d0: 77 6f 2e 74 32 20 44 45 46 41 55 4c 54 20 56 41  wo.t2 DEFAULT VA
27e0: 4c 55 45 53 20 7d 20 7b 7d 0a 64 6f 5f 65 78 65  LUES } {}.do_exe
27f0: 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64  csql_test walmod
2800: 65 2d 38 2e 31 38 20 7b 20 50 52 41 47 4d 41 20  e-8.18 { PRAGMA 
2810: 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  two.journal_mode
2820: 20 20 20 7d 20 20 20 20 20 20 20 20 20 7b 77 61     }         {wa
2830: 6c 7d 0a 20 0a 73 71 6c 69 74 65 33 20 64 62 32  l}. .sqlite3 db2
2840: 20 74 65 73 74 2e 64 62 32 0a 64 6f 5f 74 65 73   test.db2.do_tes
2850: 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 39 20 7b  t walmode-8.19 {
2860: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
2870: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
2880: 6f 64 65 20 7d 20 64 62 32 20 7d 20 20 7b 77 61  ode } db2 }  {wa
2890: 6c 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a 64 6f  l}.db2 close..do
28a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61  _execsql_test wa
28b0: 6c 6d 6f 64 65 2d 38 2e 32 30 20 7b 20 50 52 41  lmode-8.20 { PRA
28c0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
28d0: 20 3d 20 44 45 4c 45 54 45 20 7d 20 7b 64 65 6c   = DELETE } {del
28e0: 65 74 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ete}.do_execsql_
28f0: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 32  test walmode-8.2
2900: 31 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e  1 { PRAGMA main.
2910: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 20  journal_mode }  
2920: 20 20 20 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 65     {delete}.do_e
2930: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d  xecsql_test walm
2940: 6f 64 65 2d 38 2e 32 32 20 7b 20 50 52 41 47 4d  ode-8.22 { PRAGM
2950: 41 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f  A two.journal_mo
2960: 64 65 20 7d 20 20 20 20 20 20 7b 64 65 6c 65 74  de }      {delet
2970: 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  e}.do_execsql_te
2980: 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 32 31 20  st walmode-8.21 
2990: 7b 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  { PRAGMA journal
29a0: 5f 6d 6f 64 65 20 3d 20 57 41 4c 20 7d 20 20 20  _mode = WAL }   
29b0: 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63 73 71   {wal}.do_execsq
29c0: 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38  l_test walmode-8
29d0: 2e 32 31 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  .21 { PRAGMA mai
29e0: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d  n.journal_mode }
29f0: 20 20 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78       {wal}.do_ex
2a00: 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f  ecsql_test walmo
2a10: 64 65 2d 38 2e 32 32 20 7b 20 50 52 41 47 4d 41  de-8.22 { PRAGMA
2a20: 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   two.journal_mod
2a30: 65 20 7d 20 20 20 20 20 20 7b 77 61 6c 7d 0a 0a  e }      {wal}..
2a40: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.