/ Hex Artifact Content
Login

Artifact aa45339b4afa435dde5d88e71a95459cc221a3f4:


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: 69 66 20 7b 20 21 5b 77 61 6c 5f 69 73 5f 6f 6b  if { ![wal_is_ok
0420: 5d 20 26 26 20 21 5b 70 61 74 68 5f 69 73 5f 64  ] && ![path_is_d
0430: 6f 73 20 22 2e 22 5d 7d 20 7b 0a 20 20 64 6f 5f  os "."]} {.  do_
0440: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 30 2e 31  test walmode-0.1
0450: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0460: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
0470: 6d 6f 64 65 20 3d 20 77 61 6c 20 7d 0a 20 20 7d  mode = wal }.  }
0480: 20 7b 64 65 6c 65 74 65 7d 0a 20 20 64 6f 5f 74   {delete}.  do_t
0490: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 30 2e 32 20  est walmode-0.2 
04a0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
04b0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
04c0: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d  nal_mode = wal }
04d0: 0a 20 20 7d 20 7b 64 65 6c 65 74 65 7d 0a 20 20  .  } {delete}.  
04e0: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
04f0: 30 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  0.3 {.    execsq
0500: 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e  l { PRAGMA main.
0510: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 0a 20  journal_mode }. 
0520: 20 7d 20 7b 64 65 6c 65 74 65 7d 0a 0a 20 20 66   } {delete}..  f
0530: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0540: 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  urn.}..do_test w
0550: 61 6c 6d 6f 64 65 2d 31 2e 31 20 7b 0a 20 20 73  almode-1.1 {.  s
0560: 65 74 20 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63  et sqlite_sync_c
0570: 6f 75 6e 74 20 30 0a 20 20 65 78 65 63 73 71 6c  ount 0.  execsql
0580: 20 7b 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73   { PRAGMA page_s
0590: 69 7a 65 20 3d 20 31 30 32 34 20 7d 0a 20 20 65  ize = 1024 }.  e
05a0: 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20  xecsql { PRAGMA 
05b0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77  journal_mode = w
05c0: 61 6c 20 7d 0a 7d 20 7b 77 61 6c 7d 0a 64 6f 5f  al }.} {wal}.do_
05d0: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 31 2e 32  test walmode-1.2
05e0: 20 7b 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 74   {.  file size t
05f0: 65 73 74 2e 64 62 0a 7d 20 7b 31 30 32 34 7d 0a  est.db.} {1024}.
0600: 0a 23 20 44 65 74 65 72 6d 69 6e 65 20 68 6f 77  .# Determine how
0610: 20 6d 61 6e 79 20 73 79 6e 63 28 29 20 63 61 6c   many sync() cal
0620: 6c 73 20 74 6f 20 65 78 70 65 63 74 20 66 72 6f  ls to expect fro
0630: 6d 20 74 68 65 20 22 6a 6f 75 72 6e 61 6c 5f 6d  m the "journal_m
0640: 6f 64 65 3d 57 41 4c 22 20 0a 23 20 63 6f 6d 6d  ode=WAL" .# comm
0650: 61 6e 64 20 61 62 6f 76 65 2e 20 4e 6f 74 65 20  and above. Note 
0660: 74 68 61 74 20 69 66 20 44 45 46 41 55 4c 54 5f  that if DEFAULT_
0670: 57 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 20  WAL_SAFETYLEVEL 
0680: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 0a  is defined, the.
0690: 23 20 73 61 66 65 74 79 2d 6c 65 76 65 6c 20 6d  # safety-level m
06a0: 61 79 20 68 61 76 65 20 62 65 65 6e 20 6d 6f 64  ay have been mod
06b0: 69 66 69 65 64 20 77 68 69 6c 65 20 63 6f 6d 70  ified while comp
06c0: 69 6c 69 6e 67 20 74 68 65 20 22 6a 6f 75 72 6e  iling the "journ
06d0: 61 6c 5f 6d 6f 64 65 3d 57 41 4c 22 0a 23 20 73  al_mode=WAL".# s
06e0: 74 61 74 65 6d 65 6e 74 2e 0a 73 77 69 74 63 68  tatement..switch
06f0: 20 2d 2d 20 5b 64 62 20 65 76 61 6c 20 7b 50 52   -- [db eval {PR
0700: 41 47 4d 41 20 6d 61 69 6e 2e 73 79 6e 63 68 72  AGMA main.synchr
0710: 6f 6e 6f 75 73 7d 5d 20 7b 0a 20 20 30 20 20 20  onous}] {.  0   
0720: 20 20 20 20 20 7b 20 73 65 74 20 65 78 70 65 63       { set expec
0730: 74 65 64 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 30  ted_sync_count 0
0740: 20 7d 0a 20 20 31 20 20 20 20 20 20 20 20 7b 20   }.  1        { 
0750: 73 65 74 20 65 78 70 65 63 74 65 64 5f 73 79 6e  set expected_syn
0760: 63 5f 63 6f 75 6e 74 20 32 20 7d 0a 20 20 64 65  c_count 2 }.  de
0770: 66 61 75 6c 74 20 20 7b 20 73 65 74 20 65 78 70  fault  { set exp
0780: 65 63 74 65 64 5f 73 79 6e 63 5f 63 6f 75 6e 74  ected_sync_count
0790: 20 33 20 7d 0a 7d 0a 69 66 20 7b 24 3a 3a 74 63   3 }.}.if {$::tc
07a0: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
07b0: 6f 72 6d 29 21 3d 22 77 69 6e 64 6f 77 73 22 7d  orm)!="windows"}
07c0: 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20 64   {.  ifcapable d
07d0: 69 72 73 79 6e 63 20 7b 0a 20 20 20 20 69 6e 63  irsync {.    inc
07e0: 72 20 65 78 70 65 63 74 65 64 5f 73 79 6e 63 5f  r expected_sync_
07f0: 63 6f 75 6e 74 0a 20 20 7d 0a 7d 0a 64 6f 5f 74  count.  }.}.do_t
0800: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 31 2e 33 20  est walmode-1.3 
0810: 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 73  {.  set sqlite_s
0820: 79 6e 63 5f 63 6f 75 6e 74 0a 7d 20 24 65 78 70  ync_count.} $exp
0830: 65 63 74 65 64 5f 73 79 6e 63 5f 63 6f 75 6e 74  ected_sync_count
0840: 0a 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64  ..do_test walmod
0850: 65 2d 31 2e 34 20 7b 0a 20 20 66 69 6c 65 20 65  e-1.4 {.  file e
0860: 78 69 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61  xists test.db-wa
0870: 6c 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  l.} {0}.do_test 
0880: 77 61 6c 6d 6f 64 65 2d 31 2e 35 20 7b 0a 20 20  walmode-1.5 {.  
0890: 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45  execsql { CREATE
08a0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 20   TABLE t1(a, b) 
08b0: 7d 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65  }.  file size te
08c0: 73 74 2e 64 62 0a 7d 20 7b 31 30 32 34 7d 0a 64  st.db.} {1024}.d
08d0: 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 31  o_test walmode-1
08e0: 2e 36 20 7b 0a 20 20 66 69 6c 65 20 65 78 69 73  .6 {.  file exis
08f0: 74 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a 7d  ts test.db-wal.}
0900: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c   {1}.do_test wal
0910: 6d 6f 64 65 2d 31 2e 37 20 7b 0a 20 20 69 66 63  mode-1.7 {.  ifc
0920: 61 70 61 62 6c 65 20 65 6e 61 62 6c 65 5f 70 65  apable enable_pe
0930: 72 73 69 73 74 5f 77 61 6c 20 7b 0a 20 20 20 20  rsist_wal {.    
0940: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 70 65 72  file_control_per
0950: 73 69 73 74 5f 77 61 6c 20 64 62 20 30 0a 20 20  sist_wal db 0.  
0960: 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  }.  db close.  f
0970: 69 6c 65 20 65 78 69 73 74 73 20 74 65 73 74 2e  ile exists test.
0980: 64 62 2d 77 61 6c 0a 7d 20 7b 30 7d 0a 0a 23 20  db-wal.} {0}..# 
0990: 54 68 65 72 65 20 69 73 20 6e 6f 77 20 61 20 64  There is now a d
09a0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74  atabase file wit
09b0: 68 20 74 68 65 20 72 65 61 64 20 61 6e 64 20 77  h the read and w
09c0: 72 69 74 65 20 76 65 72 73 69 6f 6e 73 20 73 65  rite versions se
09d0: 74 20 74 6f 20 32 0a 23 20 69 6e 20 74 68 65 20  t to 2.# in the 
09e0: 66 69 6c 65 20 73 79 73 74 65 6d 2e 20 54 68 69  file system. Thi
09f0: 73 20 66 69 6c 65 20 73 68 6f 75 6c 64 20 64 65  s file should de
0a00: 66 61 75 6c 74 20 74 6f 20 57 41 4c 20 6d 6f 64  fault to WAL mod
0a10: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 61 6c  e..#.do_test wal
0a20: 6d 6f 64 65 2d 32 2e 31 20 7b 0a 20 20 73 71 6c  mode-2.1 {.  sql
0a30: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
0a40: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 74 65    file exists te
0a50: 73 74 2e 64 62 2d 77 61 6c 0a 7d 20 7b 30 7d 0a  st.db-wal.} {0}.
0a60: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
0a70: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
0a80: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0a90: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a  sqlite_master }.
0aa0: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 74 65    file exists te
0ab0: 73 74 2e 64 62 2d 77 61 6c 0a 7d 20 7b 31 7d 0a  st.db-wal.} {1}.
0ac0: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
0ad0: 32 2e 33 20 7b 0a 20 20 69 66 63 61 70 61 62 6c  2.3 {.  ifcapabl
0ae0: 65 20 65 6e 61 62 6c 65 5f 70 65 72 73 69 73 74  e enable_persist
0af0: 5f 77 61 6c 20 7b 0a 20 20 20 20 66 69 6c 65 5f  _wal {.    file_
0b00: 63 6f 6e 74 72 6f 6c 5f 70 65 72 73 69 73 74 5f  control_persist_
0b10: 77 61 6c 20 64 62 20 30 0a 20 20 7d 0a 20 20 64  wal db 0.  }.  d
0b20: 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 65  b close.  file e
0b30: 78 69 73 74 73 20 74 65 73 74 2e 64 62 2d 77 61  xists test.db-wa
0b40: 6c 0a 7d 20 7b 30 7d 0a 0a 23 20 49 66 20 74 68  l.} {0}..# If th
0b50: 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65 6e  e first statemen
0b60: 74 20 65 78 65 63 75 74 65 64 20 69 73 20 22 50  t executed is "P
0b70: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
0b80: 64 65 20 3d 20 77 61 6c 22 2c 20 61 6e 64 0a 23  de = wal", and.#
0b90: 20 74 68 65 20 66 69 6c 65 20 69 73 20 61 6c 72   the file is alr
0ba0: 65 61 64 79 20 63 6f 6e 66 69 67 75 72 65 64 20  eady configured 
0bb0: 66 6f 72 20 57 41 4c 20 28 72 65 61 64 20 61 6e  for WAL (read an
0bc0: 64 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e 73  d write versions
0bd0: 20 73 65 74 0a 23 20 74 6f 20 32 29 2c 20 74 68   set.# to 2), th
0be0: 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20  en there should 
0bf0: 62 65 20 6e 6f 20 6e 65 65 64 20 74 6f 20 77 72  be no need to wr
0c00: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
0c10: 2e 20 54 68 65 20 0a 23 20 73 74 61 74 65 6d 65  . The .# stateme
0c20: 6e 74 20 73 68 6f 75 6c 64 20 63 61 75 73 65 20  nt should cause 
0c30: 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 63 6f  the client to co
0c40: 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 6c 6f 67  nnect to the log
0c50: 20 66 69 6c 65 2e 0a 23 0a 73 65 74 20 73 71 6c   file..#.set sql
0c60: 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 30  ite_sync_count 0
0c70: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
0c80: 2d 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.1 {.  sqlite3
0c90: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0ca0: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6a  ecsql { PRAGMA j
0cb0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61  ournal_mode = wa
0cc0: 6c 20 7d 0a 7d 20 7b 77 61 6c 7d 0a 64 6f 5f 74  l }.} {wal}.do_t
0cd0: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 33 2e 32 20  est walmode-3.2 
0ce0: 7b 0a 20 20 6c 69 73 74 20 24 73 71 6c 69 74 65  {.  list $sqlite
0cf0: 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 5b 66 69 6c  _sync_count [fil
0d00: 65 20 65 78 69 73 74 73 20 74 65 73 74 2e 64 62  e exists test.db
0d10: 2d 77 61 6c 5d 20 5b 66 69 6c 65 20 73 69 7a 65  -wal] [file size
0d20: 20 74 65 73 74 2e 64 62 2d 77 61 6c 5d 0a 7d 20   test.db-wal].} 
0d30: 7b 30 20 31 20 30 7d 0a 0a 23 20 54 65 73 74 20  {0 1 0}..# Test 
0d40: 74 68 61 74 20 63 68 61 6e 67 69 6e 67 20 62 61  that changing ba
0d50: 63 6b 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  ck to journal_mo
0d60: 64 65 3d 70 65 72 73 69 73 74 20 77 6f 72 6b 73  de=persist works
0d70: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d  ..#.do_test walm
0d80: 6f 64 65 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  ode-4.1 {.  exec
0d90: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0da0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  O t1 VALUES(1, 2
0db0: 29 20 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20  ) }.  ifcapable 
0dc0: 65 6e 61 62 6c 65 5f 70 65 72 73 69 73 74 5f 77  enable_persist_w
0dd0: 61 6c 20 7b 0a 20 20 20 20 66 69 6c 65 5f 63 6f  al {.    file_co
0de0: 6e 74 72 6f 6c 5f 70 65 72 73 69 73 74 5f 77 61  ntrol_persist_wa
0df0: 6c 20 64 62 20 30 0a 20 20 7d 0a 20 20 65 78 65  l db 0.  }.  exe
0e00: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6a 6f  csql { PRAGMA jo
0e10: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 70 65 72  urnal_mode = per
0e20: 73 69 73 74 20 7d 0a 7d 20 7b 70 65 72 73 69 73  sist }.} {persis
0e30: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  t}.do_test walmo
0e40: 64 65 2d 34 2e 32 20 7b 0a 20 20 6c 69 73 74 20  de-4.2 {.  list 
0e50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 74 65 73  [file exists tes
0e60: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 5d 20 5b 66  t.db-journal] [f
0e70: 69 6c 65 20 65 78 69 73 74 73 20 74 65 73 74 2e  ile exists test.
0e80: 64 62 2d 77 61 6c 5d 0a 7d 20 7b 31 20 30 7d 0a  db-wal].} {1 0}.
0e90: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
0ea0: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
0eb0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0ec0: 74 31 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f  t1 }.} {1 2}.do_
0ed0: 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 34  test walmode-4.4
0ee0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
0ef0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
0f00: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53  db.  execsql { S
0f10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0f20: 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73  }.} {1 2}.do_tes
0f30: 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 35 20 7b 0a  t walmode-4.5 {.
0f40: 20 20 6c 69 73 74 20 5b 66 69 6c 65 20 65 78 69    list [file exi
0f50: 73 74 73 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  sts test.db-jour
0f60: 6e 61 6c 5d 20 5b 66 69 6c 65 20 65 78 69 73 74  nal] [file exist
0f70: 73 20 74 65 73 74 2e 64 62 2d 77 61 6c 5d 0a 7d  s test.db-wal].}
0f80: 20 7b 31 20 30 7d 0a 0a 23 20 54 65 73 74 20 74   {1 0}..# Test t
0f90: 68 61 74 20 6e 6f 74 68 69 6e 67 20 67 6f 65 73  hat nothing goes
0fa0: 20 77 72 6f 6e 67 20 69 66 20 61 20 63 6f 6e 6e   wrong if a conn
0fb0: 65 63 74 69 6f 6e 20 69 73 20 70 72 65 76 65 6e  ection is preven
0fc0: 74 65 64 20 66 72 6f 6d 20 63 68 61 6e 67 69 6e  ted from changin
0fd0: 67 0a 23 20 66 72 6f 6d 20 57 41 4c 20 74 6f 20  g.# from WAL to 
0fe0: 72 6f 6c 6c 62 61 63 6b 20 6d 6f 64 65 20 62 65  rollback mode be
0ff0: 63 61 75 73 65 20 61 20 73 65 63 6f 6e 64 20 63  cause a second c
1000: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 74 68  onnection has th
1010: 65 20 64 61 74 61 62 61 73 65 0a 23 20 6f 70 65  e database.# ope
1020: 6e 2e 20 4f 72 20 66 72 6f 6d 20 72 6f 6c 6c 62  n. Or from rollb
1030: 61 63 6b 20 74 6f 20 57 41 4c 2e 0a 23 0a 64 6f  ack to WAL..#.do
1040: 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e  _test walmode-4.
1050: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  6 {.  sqlite3 db
1060: 32 20 74 65 73 74 2e 64 62 0a 20 20 69 66 63 61  2 test.db.  ifca
1070: 70 61 62 6c 65 20 65 6e 61 62 6c 65 5f 70 65 72  pable enable_per
1080: 73 69 73 74 5f 77 61 6c 20 7b 0a 20 20 20 20 66  sist_wal {.    f
1090: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 70 65 72 73  ile_control_pers
10a0: 69 73 74 5f 77 61 6c 20 64 62 32 20 30 0a 20 20  ist_wal db2 0.  
10b0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  }.  execsql { PR
10c0: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
10d0: 6c 5f 6d 6f 64 65 20 7d 20 64 62 32 0a 7d 20 7b  l_mode } db2.} {
10e0: 64 65 6c 65 74 65 7d 0a 64 6f 5f 74 65 73 74 20  delete}.do_test 
10f0: 77 61 6c 6d 6f 64 65 2d 34 2e 37 20 7b 0a 20 20  walmode-4.7 {.  
1100: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
1110: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
1120: 64 65 20 3d 20 77 61 6c 20 7d 20 64 62 0a 7d 20  de = wal } db.} 
1130: 7b 77 61 6c 7d 0a 64 6f 5f 74 65 73 74 20 77 61  {wal}.do_test wa
1140: 6c 6d 6f 64 65 2d 34 2e 38 20 7b 0a 20 20 65 78  lmode-4.8 {.  ex
1150: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
1160: 20 46 52 4f 4d 20 74 31 20 7d 20 64 62 32 0a 7d   FROM t1 } db2.}
1170: 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77   {1 2}.do_test w
1180: 61 6c 6d 6f 64 65 2d 34 2e 39 20 7b 0a 20 20 63  almode-4.9 {.  c
1190: 61 74 63 68 73 71 6c 20 7b 20 50 52 41 47 4d 41  atchsql { PRAGMA
11a0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20   journal_mode = 
11b0: 64 65 6c 65 74 65 20 7d 20 64 62 0a 7d 20 7b 31  delete } db.} {1
11c0: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
11d0: 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  cked}}.do_test w
11e0: 61 6c 6d 6f 64 65 2d 34 2e 31 30 20 7b 0a 20 20  almode-4.10 {.  
11f0: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
1200: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
1210: 64 65 20 7d 20 64 62 0a 7d 20 7b 77 61 6c 7d 0a  de } db.} {wal}.
1220: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
1230: 2d 34 2e 31 31 20 7b 0a 20 20 64 62 32 20 63 6c  -4.11 {.  db2 cl
1240: 6f 73 65 0a 20 20 69 66 63 61 70 61 62 6c 65 20  ose.  ifcapable 
1250: 65 6e 61 62 6c 65 5f 70 65 72 73 69 73 74 5f 77  enable_persist_w
1260: 61 6c 20 7b 0a 20 20 20 20 66 69 6c 65 5f 63 6f  al {.    file_co
1270: 6e 74 72 6f 6c 5f 70 65 72 73 69 73 74 5f 77 61  ntrol_persist_wa
1280: 6c 20 64 62 20 30 0a 20 20 7d 0a 20 20 65 78 65  l db 0.  }.  exe
1290: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6a 6f  csql { PRAGMA jo
12a0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c  urnal_mode = del
12b0: 65 74 65 20 7d 20 64 62 0a 7d 20 7b 64 65 6c 65  ete } db.} {dele
12c0: 74 65 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d  te}.do_test walm
12d0: 6f 64 65 2d 34 2e 31 32 20 7b 0a 20 20 65 78 65  ode-4.12 {.  exe
12e0: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61  csql { PRAGMA ma
12f0: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  in.journal_mode 
1300: 7d 20 64 62 0a 7d 20 7b 64 65 6c 65 74 65 7d 0a  } db.} {delete}.
1310: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
1320: 34 2e 31 33 20 7b 0a 20 20 6c 69 73 74 20 5b 66  4.13 {.  list [f
1330: 69 6c 65 20 65 78 69 73 74 73 20 74 65 73 74 2e  ile exists test.
1340: 64 62 2d 6a 6f 75 72 6e 61 6c 5d 20 5b 66 69 6c  db-journal] [fil
1350: 65 20 65 78 69 73 74 73 20 74 65 73 74 2e 64 62  e exists test.db
1360: 2d 77 61 6c 5d 0a 7d 20 7b 30 20 30 7d 0a 64 6f  -wal].} {0 0}.do
1370: 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e  _test walmode-4.
1380: 31 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  14 {.  sqlite3 d
1390: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  b2 test.db.  exe
13a0: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
13b0: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
13c0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 20 64 62   FROM t1;.  } db
13d0: 32 0a 7d 20 7b 31 20 32 7d 0a 0a 64 6f 5f 74 65  2.} {1 2}..do_te
13e0: 73 74 20 77 61 6c 6d 6f 64 65 2d 34 2e 31 36 20  st walmode-4.16 
13f0: 7b 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47  { execsql { PRAG
1400: 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f  MA main.journal_
1410: 6d 6f 64 65 20 7d 20 64 62 20 20 7d 20 7b 64 65  mode } db  } {de
1420: 6c 65 74 65 7d 0a 64 6f 5f 74 65 73 74 20 77 61  lete}.do_test wa
1430: 6c 6d 6f 64 65 2d 34 2e 31 37 20 7b 20 65 78 65  lmode-4.17 { exe
1440: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61  csql { PRAGMA ma
1450: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  in.journal_mode 
1460: 7d 20 64 62 32 20 7d 20 7b 64 65 6c 65 74 65 7d  } db2 } {delete}
1470: 0a 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64  ..do_test walmod
1480: 65 2d 34 2e 31 37 20 7b 0a 20 20 63 61 74 63 68  e-4.17 {.  catch
1490: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  sql { PRAGMA mai
14a0: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  n.journal_mode =
14b0: 20 77 61 6c 20 7d 20 64 62 0a 7d 20 7b 31 20 7b   wal } db.} {1 {
14c0: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
14d0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c  ed}}.do_test wal
14e0: 6d 6f 64 65 2d 34 2e 31 38 20 7b 0a 20 20 65 78  mode-4.18 {.  ex
14f0: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d  ecsql { PRAGMA m
1500: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
1510: 20 7d 20 64 62 0a 7d 20 7b 64 65 6c 65 74 65 7d   } db.} {delete}
1520: 0a 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73  .catch { db clos
1530: 65 20 7d 0a 63 61 74 63 68 20 7b 20 64 62 32 20  e }.catch { db2 
1540: 63 6c 6f 73 65 20 7d 0a 0a 23 20 54 65 73 74 20  close }..# Test 
1550: 74 68 61 74 20 69 74 20 69 73 20 6e 6f 74 20 70  that it is not p
1560: 6f 73 73 69 62 6c 65 20 74 6f 20 63 68 61 6e 67  ossible to chang
1570: 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 6f 72  e a temporary or
1580: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
1590: 61 73 65 0a 23 20 74 6f 20 57 41 4c 20 6d 6f 64  ase.# to WAL mod
15a0: 65 2e 20 57 41 4c 20 6d 6f 64 65 20 69 73 20 66  e. WAL mode is f
15b0: 6f 72 20 70 65 72 73 69 73 74 65 6e 74 20 66 69  or persistent fi
15c0: 6c 65 2d 62 61 63 6b 65 64 20 64 61 74 61 62 61  le-backed databa
15d0: 73 65 73 20 6f 6e 6c 79 2e 0a 23 0a 23 20 20 20  ses only..#.#   
15e0: 77 61 6c 6d 6f 64 65 2d 35 2e 31 2e 2a 3a 20 54  walmode-5.1.*: T
15f0: 72 79 20 74 6f 20 73 65 74 20 6a 6f 75 72 6e 61  ry to set journa
1600: 6c 5f 6d 6f 64 65 3d 57 41 4c 20 6f 6e 20 5b 73  l_mode=WAL on [s
1610: 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72  qlite3 db :memor
1620: 79 3a 5d 20 64 61 74 61 62 61 73 65 2e 0a 23 20  y:] database..# 
1630: 20 20 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e 2a 3a    walmode-5.2.*:
1640: 20 54 72 79 20 74 6f 20 73 65 74 20 6a 6f 75 72   Try to set jour
1650: 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 6f 6e 20  nal_mode=WAL on 
1660: 5b 73 71 6c 69 74 65 33 20 64 62 20 22 22 5d 20  [sqlite3 db ""] 
1670: 64 61 74 61 62 61 73 65 2e 0a 23 20 20 20 77 61  database..#   wa
1680: 6c 6d 6f 64 65 2d 35 2e 33 2e 2a 3a 20 54 72 79  lmode-5.3.*: Try
1690: 20 74 6f 20 73 65 74 20 74 65 6d 70 2e 6a 6f 75   to set temp.jou
16a0: 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 2e 0a 23  rnal_mode=WAL..#
16b0: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
16c0: 2d 35 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -5.1.1 {.  sqlit
16d0: 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20  e3 db :memory:. 
16e0: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
16f0: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
1700: 6f 64 65 20 7d 0a 7d 20 7b 6d 65 6d 6f 72 79 7d  ode }.} {memory}
1710: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
1720: 2d 35 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -5.1.2 {.  execs
1730: 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e  ql { PRAGMA main
1740: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20  .journal_mode = 
1750: 77 61 6c 20 7d 0a 7d 20 7b 6d 65 6d 6f 72 79 7d  wal }.} {memory}
1760: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
1770: 2d 35 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  -5.1.3 {.  execs
1780: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
1790: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
17a0: 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20  LE t1(a, b);.   
17b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
17c0: 31 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a  1 VALUES(1, 2);.
17d0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
17e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
17f0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69  ;.    PRAGMA mai
1800: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a  n.journal_mode;.
1810: 20 20 7d 0a 7d 20 7b 31 20 32 20 6d 65 6d 6f 72    }.} {1 2 memor
1820: 79 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  y}.do_test walmo
1830: 64 65 2d 35 2e 31 2e 34 20 7b 0a 20 20 65 78 65  de-5.1.4 {.  exe
1840: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61  csql { PRAGMA ma
1850: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  in.journal_mode 
1860: 3d 20 77 61 6c 20 7d 0a 7d 20 7b 6d 65 6d 6f 72  = wal }.} {memor
1870: 79 7d 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  y}.do_test walmo
1880: 64 65 2d 35 2e 31 2e 35 20 7b 0a 20 20 65 78 65  de-5.1.5 {.  exe
1890: 63 73 71 6c 20 7b 20 0a 20 20 20 20 49 4e 53 45  csql { .    INSE
18a0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
18b0: 53 28 33 2c 20 34 29 3b 0a 20 20 20 20 53 45 4c  S(3, 4);.    SEL
18c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
18d0: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a     PRAGMA main.j
18e0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d  ournal_mode;.  }
18f0: 0a 7d 20 7b 31 20 32 20 33 20 34 20 6d 65 6d 6f  .} {1 2 3 4 memo
1900: 72 79 7d 0a 0a 69 66 20 7b 24 54 45 4d 50 5f 53  ry}..if {$TEMP_S
1910: 54 4f 52 45 3e 3d 32 7d 20 7b 0a 20 20 73 65 74  TORE>=2} {.  set
1920: 20 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65 20 6d 65   tempJrnlMode me
1930: 6d 6f 72 79 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  mory.} else {.  
1940: 73 65 74 20 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65  set tempJrnlMode
1950: 20 64 65 6c 65 74 65 0a 7d 0a 64 6f 5f 74 65 73   delete.}.do_tes
1960: 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e 31 20  t walmode-5.2.1 
1970: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 22  {.  sqlite3 db "
1980: 22 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  ".  execsql { PR
1990: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
19a0: 6c 5f 6d 6f 64 65 20 7d 0a 7d 20 24 74 65 6d 70  l_mode }.} $temp
19b0: 4a 72 6e 6c 4d 6f 64 65 0a 64 6f 5f 74 65 73 74  JrnlMode.do_test
19c0: 20 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e 32 20 7b   walmode-5.2.2 {
19d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41  .  execsql { PRA
19e0: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
19f0: 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d 0a 7d 20  _mode = wal }.} 
1a00: 24 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65 0a 64 6f  $tempJrnlMode.do
1a10: 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e  _test walmode-5.
1a20: 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.3 {.  execsql 
1a30: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
1a40: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1a50: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 20 20  t1(a, b);.      
1a60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1a70: 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 20  ALUES(1, 2);.   
1a80: 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c   COMMIT;.    SEL
1a90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
1aa0: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a     PRAGMA main.j
1ab0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d  ournal_mode;.  }
1ac0: 0a 7d 20 5b 6c 69 73 74 20 31 20 32 20 24 74 65  .} [list 1 2 $te
1ad0: 6d 70 4a 72 6e 6c 4d 6f 64 65 5d 0a 64 6f 5f 74  mpJrnlMode].do_t
1ae0: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 32 2e  est walmode-5.2.
1af0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 {.  execsql { 
1b00: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
1b10: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d  nal_mode = wal }
1b20: 0a 7d 20 24 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65  .} $tempJrnlMode
1b30: 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  .do_test walmode
1b40: 2d 35 2e 32 2e 35 20 7b 0a 20 20 65 78 65 63 73  -5.2.5 {.  execs
1b50: 71 6c 20 7b 20 0a 20 20 20 20 49 4e 53 45 52 54  ql { .    INSERT
1b60: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1b70: 33 2c 20 34 29 3b 0a 20 20 20 20 53 45 4c 45 43  3, 4);.    SELEC
1b80: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  T * FROM t1;.   
1b90: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
1ba0: 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d 0a 7d  rnal_mode;.  }.}
1bb0: 20 5b 6c 69 73 74 20 31 20 32 20 33 20 34 20 24   [list 1 2 3 4 $
1bc0: 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65 5d 0a 0a 64  tempJrnlMode]..d
1bd0: 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 35  o_test walmode-5
1be0: 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .3.1 {.  sqlite3
1bf0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
1c00: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 74  ecsql { PRAGMA t
1c10: 65 6d 70 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  emp.journal_mode
1c20: 20 7d 0a 7d 20 24 74 65 6d 70 4a 72 6e 6c 4d 6f   }.} $tempJrnlMo
1c30: 64 65 0a 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f  de.do_test walmo
1c40: 64 65 2d 35 2e 33 2e 32 20 7b 0a 20 20 65 78 65  de-5.3.2 {.  exe
1c50: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 74 65  csql { PRAGMA te
1c60: 6d 70 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  mp.journal_mode 
1c70: 3d 20 77 61 6c 20 7d 0a 7d 20 24 74 65 6d 70 4a  = wal }.} $tempJ
1c80: 72 6e 6c 4d 6f 64 65 0a 64 6f 5f 74 65 73 74 20  rnlMode.do_test 
1c90: 77 61 6c 6d 6f 64 65 2d 35 2e 33 2e 33 20 7b 0a  walmode-5.3.3 {.
1ca0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1cb0: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52 45  BEGIN;.      CRE
1cc0: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
1cd0: 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 20 20 49  1(a, b);.      I
1ce0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1cf0: 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20  LUES(1, 2);.    
1d00: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
1d10: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
1d20: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 6a 6f    PRAGMA temp.jo
1d30: 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d 0a  urnal_mode;.  }.
1d40: 7d 20 5b 6c 69 73 74 20 31 20 32 20 24 74 65 6d  } [list 1 2 $tem
1d50: 70 4a 72 6e 6c 4d 6f 64 65 5d 0a 64 6f 5f 74 65  pJrnlMode].do_te
1d60: 73 74 20 77 61 6c 6d 6f 64 65 2d 35 2e 33 2e 34  st walmode-5.3.4
1d70: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50   {.  execsql { P
1d80: 52 41 47 4d 41 20 74 65 6d 70 2e 6a 6f 75 72 6e  RAGMA temp.journ
1d90: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 20 7d 0a  al_mode = wal }.
1da0: 7d 20 24 74 65 6d 70 4a 72 6e 6c 4d 6f 64 65 0a  } $tempJrnlMode.
1db0: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
1dc0: 35 2e 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  5.3.5 {.  execsq
1dd0: 6c 20 7b 20 0a 20 20 20 20 49 4e 53 45 52 54 20  l { .    INSERT 
1de0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
1df0: 2c 20 34 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  , 4);.    SELECT
1e00: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
1e10: 50 52 41 47 4d 41 20 74 65 6d 70 2e 6a 6f 75 72  PRAGMA temp.jour
1e20: 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 7d 0a 7d 20  nal_mode;.  }.} 
1e30: 5b 6c 69 73 74 20 31 20 32 20 33 20 34 20 24 74  [list 1 2 3 4 $t
1e40: 65 6d 70 4a 72 6e 6c 4d 6f 64 65 5d 0a 0a 0a 23  empJrnlMode]...#
1e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
1ea0: 20 63 68 61 6e 67 69 6e 67 20 74 6f 20 57 41 4c   changing to WAL
1eb0: 20 6d 6f 64 65 20 66 72 6f 6d 20 6a 6f 75 72 6e   mode from journ
1ec0: 61 6c 5f 6d 6f 64 65 3d 6f 66 66 20 6f 72 20 6a  al_mode=off or j
1ed0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 6d 65 6d 6f  ournal_mode=memo
1ee0: 72 79 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 6e  ry.#.foreach {tn
1ef0: 20 6d 6f 64 65 7d 20 7b 0a 20 20 31 20 6f 66 66   mode} {.  1 off
1f00: 0a 20 20 32 20 6d 65 6d 6f 72 79 0a 20 20 33 20  .  2 memory.  3 
1f10: 70 65 72 73 69 73 74 0a 20 20 34 20 64 65 6c 65  persist.  4 dele
1f20: 74 65 0a 20 20 35 20 74 72 75 6e 63 61 74 65 0a  te.  5 truncate.
1f30: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 61  } {.  do_test wa
1f40: 6c 6d 6f 64 65 2d 36 2e 24 74 6e 20 7b 0a 20 20  lmode-6.$tn {.  
1f50: 20 20 66 61 75 6c 74 73 69 6d 5f 64 65 6c 65 74    faultsim_delet
1f60: 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 20 20 20  e_and_reopen.   
1f70: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20   execsql ".     
1f80: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
1f90: 6d 6f 64 65 20 3d 20 24 6d 6f 64 65 3b 0a 20 20  mode = $mode;.  
1fa0: 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e      PRAGMA journ
1fb0: 61 6c 5f 6d 6f 64 65 20 3d 20 77 61 6c 3b 0a 20  al_mode = wal;. 
1fc0: 20 20 20 22 0a 20 20 7d 20 5b 6c 69 73 74 20 24     ".  } [list $
1fd0: 6d 6f 64 65 20 77 61 6c 5d 0a 7d 0a 64 62 20 63  mode wal].}.db c
1fe0: 6c 6f 73 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  lose..#---------
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2030: 0a 23 20 54 65 73 74 20 74 68 65 20 65 66 66 65  .# Test the effe
2040: 63 74 20 6f 66 20 61 20 22 50 52 41 47 4d 41 20  ct of a "PRAGMA 
2050: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 63 6f  journal_mode" co
2060: 6d 6d 61 6e 64 20 62 65 69 6e 67 20 74 68 65 20  mmand being the 
2070: 66 69 72 73 74 20 0a 23 20 74 68 69 6e 67 20 65  first .# thing e
2080: 78 65 63 75 74 65 64 20 62 79 20 61 20 6e 65 77  xecuted by a new
2090: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 54 68 69   connection. Thi
20a0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  s means that the
20b0: 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 0a 23   schema is not.#
20c0: 20 6c 6f 61 64 65 64 20 77 68 65 6e 20 73 71 6c   loaded when sql
20d0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
20e0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
20f0: 6f 6d 70 69 6c 65 20 74 68 65 20 73 74 61 74 65  ompile the state
2100: 6d 65 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ment..#.do_test 
2110: 77 61 6c 6d 6f 64 65 2d 37 2e 30 20 7b 0a 20 20  walmode-7.0 {.  
2120: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
2130: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
2140: 20 74 65 73 74 2e 64 62 0a 20 20 69 66 63 61 70   test.db.  ifcap
2150: 61 62 6c 65 20 65 6e 61 62 6c 65 5f 70 65 72 73  able enable_pers
2160: 69 73 74 5f 77 61 6c 20 7b 0a 20 20 20 20 66 69  ist_wal {.    fi
2170: 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 70 65 72 73 69  le_control_persi
2180: 73 74 5f 77 61 6c 20 64 62 20 30 0a 20 20 7d 0a  st_wal db 0.  }.
2190: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
21a0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
21b0: 6f 64 65 20 3d 20 57 41 4c 3b 0a 20 20 20 20 43  ode = WAL;.    C
21c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
21d0: 2c 20 62 29 3b 0a 20 20 7d 0a 7d 20 7b 77 61 6c  , b);.  }.} {wal
21e0: 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73 71  }.foreach {tn sq
21f0: 6c 20 72 65 73 75 6c 74 7d 20 7b 0a 20 20 31 20  l result} {.  1 
2200: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
2210: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
2220: 20 20 20 20 20 20 77 61 6c 0a 20 20 32 20 20 22        wal.  2  "
2230: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
2240: 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20 20 20 20  nal_mode"       
2250: 20 20 20 20 77 61 6c 0a 20 20 33 20 20 22 50 52      wal.  3  "PR
2260: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
2270: 65 20 3d 20 64 65 6c 65 74 65 22 20 20 20 20 20  e = delete"     
2280: 20 20 64 65 6c 65 74 65 0a 20 20 34 20 20 22 50    delete.  4  "P
2290: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
22a0: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20  de"             
22b0: 20 20 20 64 65 6c 65 74 65 0a 20 20 35 20 20 22     delete.  5  "
22c0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
22d0: 6e 61 6c 5f 6d 6f 64 65 22 20 20 20 20 20 20 20  nal_mode"       
22e0: 20 20 20 20 64 65 6c 65 74 65 0a 20 20 36 20 20      delete.  6  
22f0: 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  "PRAGMA journal_
2300: 6d 6f 64 65 20 3d 20 77 61 6c 22 20 20 20 20 20  mode = wal"     
2310: 20 20 20 20 20 77 61 6c 0a 20 20 37 20 20 22 50       wal.  7  "P
2320: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
2330: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20  de"             
2340: 20 20 20 77 61 6c 0a 20 20 38 20 20 22 50 52 41     wal.  8  "PRA
2350: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
2360: 5f 6d 6f 64 65 22 20 20 20 20 20 20 20 20 20 20  _mode"          
2370: 20 77 61 6c 0a 0a 20 20 39 20 20 22 50 52 41 47   wal..  9  "PRAG
2380: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  MA journal_mode"
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a0: 77 61 6c 0a 20 31 30 20 20 22 50 52 41 47 4d 41  wal. 10  "PRAGMA
23b0: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
23c0: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 77 61  de"           wa
23d0: 6c 0a 20 31 31 20 20 22 50 52 41 47 4d 41 20 6d  l. 11  "PRAGMA m
23e0: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
23f0: 20 3d 20 64 65 6c 65 74 65 22 20 20 64 65 6c 65   = delete"  dele
2400: 74 65 0a 20 31 32 20 20 22 50 52 41 47 4d 41 20  te. 12  "PRAGMA 
2410: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 20 20  journal_mode"   
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c               del
2430: 65 74 65 0a 20 31 33 20 20 22 50 52 41 47 4d 41  ete. 13  "PRAGMA
2440: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
2450: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 64 65  de"           de
2460: 6c 65 74 65 0a 20 31 34 20 20 22 50 52 41 47 4d  lete. 14  "PRAGM
2470: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
2480: 6f 64 65 20 3d 20 77 61 6c 22 20 20 20 20 20 77  ode = wal"     w
2490: 61 6c 0a 20 31 35 20 20 22 50 52 41 47 4d 41 20  al. 15  "PRAGMA 
24a0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 20 20  journal_mode"   
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c               wal
24c0: 0a 20 31 36 20 20 22 50 52 41 47 4d 41 20 6d 61  . 16  "PRAGMA ma
24d0: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  in.journal_mode"
24e0: 20 20 20 20 20 20 20 20 20 20 20 77 61 6c 0a 7d             wal.}
24f0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 61 6c   {.  do_test wal
2500: 6d 6f 64 65 2d 37 2e 24 74 6e 20 7b 20 0a 20 20  mode-7.$tn { .  
2510: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73    db close.    s
2520: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2530: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 24 73  b.    execsql $s
2540: 71 6c 0a 20 20 7d 20 24 72 65 73 75 6c 74 0a 7d  ql.  } $result.}
2550: 0a 64 62 20 63 6c 6f 73 65 0a 0a 23 2d 2d 2d 2d  .db close..#----
2560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25a0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68 65  -----.# Test the
25b0: 20 65 66 66 65 63 74 20 6f 66 20 61 20 22 50 52   effect of a "PR
25c0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
25d0: 65 22 20 63 6f 6d 6d 61 6e 64 20 6f 6e 20 61 6e  e" command on an
25e0: 20 61 74 74 61 63 68 65 64 20 0a 23 20 64 61 74   attached .# dat
25f0: 61 62 61 73 65 2e 0a 23 0a 66 61 75 6c 74 73 69  abase..#.faultsi
2600: 6d 5f 64 65 6c 65 74 65 5f 61 6e 64 5f 72 65 6f  m_delete_and_reo
2610: 70 65 6e 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  pen.do_execsql_t
2620: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 20  est walmode-8.1 
2630: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
2640: 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 50 52 41   t1(a, b);.  PRA
2650: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
2660: 20 3d 20 57 41 4c 3b 0a 20 20 41 54 54 41 43 48   = WAL;.  ATTACH
2670: 20 27 74 65 73 74 2e 64 62 32 27 20 41 53 20 74   'test.db2' AS t
2680: 77 6f 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  wo;.  CREATE TAB
2690: 4c 45 20 74 77 6f 2e 74 32 28 61 2c 20 62 29 3b  LE two.t2(a, b);
26a0: 0a 7d 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63  .} {wal}.do_exec
26b0: 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  sql_test walmode
26c0: 2d 38 2e 32 20 7b 20 50 52 41 47 4d 41 20 6d 61  -8.2 { PRAGMA ma
26d0: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  in.journal_mode 
26e0: 7d 20 20 20 20 20 20 20 20 20 7b 77 61 6c 7d 0a  }         {wal}.
26f0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2700: 77 61 6c 6d 6f 64 65 2d 38 2e 33 20 7b 20 50 52  walmode-8.3 { PR
2710: 41 47 4d 41 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c  AGMA two.journal
2720: 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20 20 20 20  _mode  }        
2730: 20 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 65 78 65   {delete}.do_exe
2740: 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64  csql_test walmod
2750: 65 2d 38 2e 34 20 7b 20 50 52 41 47 4d 41 20 74  e-8.4 { PRAGMA t
2760: 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  wo.journal_mode 
2770: 3d 20 44 45 4c 45 54 45 20 7d 20 7b 64 65 6c 65  = DELETE } {dele
2780: 74 65 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 73 71  te}..db close.sq
2790: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
27a0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
27b0: 20 77 61 6c 6d 6f 64 65 2d 38 2e 35 20 20 7b 20   walmode-8.5  { 
27c0: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 32  ATTACH 'test.db2
27d0: 27 20 41 53 20 74 77 6f 20 7d 20 20 20 20 20 20  ' AS two }      
27e0: 20 20 20 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71      {}.do_execsq
27f0: 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38  l_test walmode-8
2800: 2e 36 20 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  .6  { PRAGMA mai
2810: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d  n.journal_mode }
2820: 20 20 20 20 20 20 20 20 20 20 7b 77 61 6c 7d 0a            {wal}.
2830: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2840: 77 61 6c 6d 6f 64 65 2d 38 2e 37 20 20 7b 20 50  walmode-8.7  { P
2850: 52 41 47 4d 41 20 74 77 6f 2e 6a 6f 75 72 6e 61  RAGMA two.journa
2860: 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20 20 20  l_mode  }       
2870: 20 20 20 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 65     {delete}.do_e
2880: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d  xecsql_test walm
2890: 6f 64 65 2d 38 2e 38 20 20 7b 20 49 4e 53 45 52  ode-8.8  { INSER
28a0: 54 20 49 4e 54 4f 20 74 77 6f 2e 74 32 20 44 45  T INTO two.t2 DE
28b0: 46 41 55 4c 54 20 56 41 4c 55 45 53 20 7d 20 7b  FAULT VALUES } {
28c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
28d0: 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 39 20 20 7b  t walmode-8.9  {
28e0: 20 50 52 41 47 4d 41 20 74 77 6f 2e 6a 6f 75 72   PRAGMA two.jour
28f0: 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20  nal_mode  }     
2900: 20 20 20 20 20 7b 64 65 6c 65 74 65 7d 0a 64 6f       {delete}.do
2910: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 61  _execsql_test wa
2920: 6c 6d 6f 64 65 2d 38 2e 31 30 20 7b 20 49 4e 53  lmode-8.10 { INS
2930: 45 52 54 20 49 4e 54 4f 20 74 31 20 44 45 46 41  ERT INTO t1 DEFA
2940: 55 4c 54 20 56 41 4c 55 45 53 20 7d 20 7b 7d 0a  ULT VALUES } {}.
2950: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2960: 77 61 6c 6d 6f 64 65 2d 38 2e 31 31 20 7b 20 50  walmode-8.11 { P
2970: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
2980: 61 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20 20  al_mode  }      
2990: 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63     {wal}.do_exec
29a0: 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  sql_test walmode
29b0: 2d 38 2e 31 32 20 7b 20 50 52 41 47 4d 41 20 6a  -8.12 { PRAGMA j
29c0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 20 7d 20 20  ournal_mode  }  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 77 61 6c              {wal
29e0: 7d 0a 0a 23 20 43 68 61 6e 67 65 20 74 6f 20 57  }..# Change to W
29f0: 41 4c 20 6d 6f 64 65 20 6f 6e 20 74 65 73 74 32  AL mode on test2
2a00: 2e 64 62 20 61 6e 64 20 6d 61 6b 65 20 73 75 72  .db and make sur
2a10: 65 20 28 69 6e 20 74 68 65 20 74 65 73 74 73 20  e (in the tests 
2a20: 74 68 61 74 20 66 6f 6c 6c 6f 77 29 0a 23 20 74  that follow).# t
2a30: 68 61 74 20 74 68 69 73 20 6d 6f 64 65 20 63 68  hat this mode ch
2a40: 61 6e 67 65 20 70 65 72 73 69 73 74 73 2e 20 0a  ange persists. .
2a50: 64 6f 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  do_test walmode-
2a60: 38 2e 78 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  8.x1 {.  execsql
2a70: 20 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 74   {.     PRAGMA t
2a80: 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  wo.journal_mode=
2a90: 57 41 4c 3b 0a 20 20 20 20 20 50 52 41 47 4d 41  WAL;.     PRAGMA
2aa0: 20 74 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   two.journal_mod
2ab0: 65 3b 0a 20 20 7d 0a 7d 20 7b 77 61 6c 20 77 61  e;.  }.} {wal wa
2ac0: 6c 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  l}..db close.sql
2ad0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
2ae0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2af0: 77 61 6c 6d 6f 64 65 2d 38 2e 31 33 20 7b 20 50  walmode-8.13 { P
2b00: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
2b10: 64 65 20 3d 20 57 41 4c 20 7d 20 20 20 20 20 20  de = WAL }      
2b20: 20 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63     {wal}.do_exec
2b30: 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  sql_test walmode
2b40: 2d 38 2e 31 34 20 7b 20 41 54 54 41 43 48 20 27  -8.14 { ATTACH '
2b50: 74 65 73 74 2e 64 62 32 27 20 41 53 20 74 77 6f  test.db2' AS two
2b60: 20 20 7d 20 20 20 20 20 20 20 20 20 7b 7d 0a 64    }         {}.d
2b70: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77  o_execsql_test w
2b80: 61 6c 6d 6f 64 65 2d 38 2e 31 35 20 7b 20 50 52  almode-8.15 { PR
2b90: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
2ba0: 6c 5f 6d 6f 64 65 20 20 7d 20 20 20 20 20 20 20  l_mode  }       
2bb0: 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63 73    {wal}.do_execs
2bc0: 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  ql_test walmode-
2bd0: 38 2e 31 36 20 7b 20 50 52 41 47 4d 41 20 74 77  8.16 { PRAGMA tw
2be0: 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 20  o.journal_mode  
2bf0: 20 7d 20 20 20 20 20 20 20 20 20 7b 77 61 6c 7d   }         {wal}
2c00: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2c10: 20 77 61 6c 6d 6f 64 65 2d 38 2e 31 37 20 7b 20   walmode-8.17 { 
2c20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 77 6f 2e  INSERT INTO two.
2c30: 74 32 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  t2 DEFAULT VALUE
2c40: 53 20 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  S } {}.do_execsq
2c50: 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38  l_test walmode-8
2c60: 2e 31 38 20 7b 20 50 52 41 47 4d 41 20 74 77 6f  .18 { PRAGMA two
2c70: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 20 20  .journal_mode   
2c80: 7d 20 20 20 20 20 20 20 20 20 7b 77 61 6c 7d 0a  }         {wal}.
2c90: 20 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65   .sqlite3 db2 te
2ca0: 73 74 2e 64 62 32 0a 64 6f 5f 74 65 73 74 20 77  st.db2.do_test w
2cb0: 61 6c 6d 6f 64 65 2d 38 2e 31 39 20 7b 20 65 78  almode-8.19 { ex
2cc0: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d  ecsql { PRAGMA m
2cd0: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
2ce0: 20 7d 20 64 62 32 20 7d 20 20 7b 77 61 6c 7d 0a   } db2 }  {wal}.
2cf0: 64 62 32 20 63 6c 6f 73 65 0a 0a 64 6f 5f 65 78  db2 close..do_ex
2d00: 65 63 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f  ecsql_test walmo
2d10: 64 65 2d 38 2e 32 30 20 7b 20 50 52 41 47 4d 41  de-8.20 { PRAGMA
2d20: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20   journal_mode = 
2d30: 44 45 4c 45 54 45 20 7d 20 7b 64 65 6c 65 74 65  DELETE } {delete
2d40: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
2d50: 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 32 31 20 7b  t walmode-8.21 {
2d60: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75   PRAGMA main.jou
2d70: 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 20 20 20 20  rnal_mode }     
2d80: 7b 64 65 6c 65 74 65 7d 0a 64 6f 5f 65 78 65 63  {delete}.do_exec
2d90: 73 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65  sql_test walmode
2da0: 2d 38 2e 32 32 20 7b 20 50 52 41 47 4d 41 20 74  -8.22 { PRAGMA t
2db0: 77 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  wo.journal_mode 
2dc0: 7d 20 20 20 20 20 20 7b 64 65 6c 65 74 65 7d 0a  }      {delete}.
2dd0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2de0: 77 61 6c 6d 6f 64 65 2d 38 2e 32 31 20 7b 20 50  walmode-8.21 { P
2df0: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
2e00: 64 65 20 3d 20 57 41 4c 20 7d 20 20 20 20 7b 77  de = WAL }    {w
2e10: 61 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  al}.do_execsql_t
2e20: 65 73 74 20 77 61 6c 6d 6f 64 65 2d 38 2e 32 31  est walmode-8.21
2e30: 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a   { PRAGMA main.j
2e40: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d 20 20 20  ournal_mode }   
2e50: 20 20 7b 77 61 6c 7d 0a 64 6f 5f 65 78 65 63 73    {wal}.do_execs
2e60: 71 6c 5f 74 65 73 74 20 77 61 6c 6d 6f 64 65 2d  ql_test walmode-
2e70: 38 2e 32 32 20 7b 20 50 52 41 47 4d 41 20 74 77  8.22 { PRAGMA tw
2e80: 6f 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7d  o.journal_mode }
2e90: 20 20 20 20 20 20 7b 77 61 6c 7d 0a 0a 66 69 6e        {wal}..fin
2ea0: 69 73 68 5f 74 65 73 74 0a                       ish_test.