/ Hex Artifact Content
Login

Artifact 7a8a50c8ed72dfcf4db9ebae977f7a63184639d8:


0000: 23 20 32 30 31 30 20 4f 63 74 6f 62 65 72 20 32  # 2010 October 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an 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 2a 2a 0a 23 0a 0a 73 65 74 20 74  *******.#..set t
0170: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0180: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0190: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
01a0: 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24  ter.tcl.source $
01b0: 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f 63  testdir/malloc_c
01c0: 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 73 65 74 20 67  ommon.tcl..set g
01d0: 5f 63 68 75 6e 6b 5f 73 69 7a 65 20 5b 20 65 78  _chunk_size [ ex
01e0: 70 72 20 28 24 3a 3a 53 51 4c 49 54 45 5f 4d 41  pr ($::SQLITE_MA
01f0: 58 5f 50 41 47 45 5f 53 49 5a 45 2a 31 36 33 38  X_PAGE_SIZE*1638
0200: 34 29 20 5d 0a 73 65 74 20 67 5f 6d 61 78 5f 63  4) ].set g_max_c
0210: 68 75 6e 6b 73 20 33 32 0a 0a 23 20 54 68 69 73  hunks 32..# This
0220: 20 68 61 6e 64 6c 65 73 20 61 70 70 65 6e 64 69   handles appendi
0230: 6e 67 20 74 68 65 20 63 68 75 6e 6b 20 6e 75 6d  ng the chunk num
0240: 62 65 72 0a 23 20 74 6f 20 74 68 65 20 65 6e 64  ber.# to the end
0250: 20 6f 66 20 74 68 65 20 66 69 6c 65 6e 61 6d 65   of the filename
0260: 2e 20 20 69 66 20 0a 23 20 53 51 4c 49 54 45 5f  .  if .# SQLITE_
0270: 4d 55 4c 54 49 50 4c 45 58 5f 45 58 54 5f 4f 56  MULTIPLEX_EXT_OV
0280: 57 52 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  WR is defined, t
0290: 68 65 6e 0a 23 20 69 74 20 6f 76 65 72 77 72 69  hen.# it overwri
02a0: 74 65 73 20 74 68 65 20 6c 61 73 74 20 32 20 62  tes the last 2 b
02b0: 79 74 65 73 20 6f 66 20 74 68 65 20 0a 23 20 66  ytes of the .# f
02c0: 69 6c 65 20 6e 61 6d 65 20 77 69 74 68 20 74 68  ile name with th
02d0: 65 20 63 68 75 6e 6b 20 6e 75 6d 62 65 72 2e 0a  e chunk number..
02e0: 70 72 6f 63 20 6d 75 6c 74 69 70 6c 65 78 5f 6e  proc multiplex_n
02f0: 61 6d 65 20 7b 6e 61 6d 65 20 63 68 75 6e 6b 7d  ame {name chunk}
0300: 20 7b 0a 20 20 69 66 20 7b 24 63 68 75 6e 6b 3d   {.  if {$chunk=
0310: 3d 30 7d 20 7b 20 72 65 74 75 72 6e 20 24 6e 61  =0} { return $na
0320: 6d 65 20 7d 0a 20 20 73 65 74 20 6e 75 6d 20 5b  me }.  set num [
0330: 66 6f 72 6d 61 74 20 22 25 30 32 64 22 20 24 63  format "%02d" $c
0340: 68 75 6e 6b 5d 0a 20 20 69 66 63 61 70 61 62 6c  hunk].  ifcapabl
0350: 65 20 7b 6d 75 6c 74 69 70 6c 65 78 5f 65 78 74  e {multiplex_ext
0360: 5f 6f 76 65 72 77 72 69 74 65 7d 20 7b 0a 20 20  _overwrite} {.  
0370: 20 20 73 65 74 20 6e 61 6d 65 20 5b 73 74 72 69    set name [stri
0380: 6e 67 20 72 61 6e 67 65 20 24 6e 61 6d 65 20 30  ng range $name 0
0390: 20 5b 65 78 70 72 20 5b 73 74 72 69 6e 67 20 6c   [expr [string l
03a0: 65 6e 67 74 68 20 24 6e 61 6d 65 5d 2d 32 2d 31  ength $name]-2-1
03b0: 5d 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  ]].  }.  return 
03c0: 24 6e 61 6d 65 24 6e 75 6d 0a 7d 0a 0a 23 20 54  $name$num.}..# T
03d0: 68 69 73 20 73 61 76 65 73 20 6f 66 66 20 74 68  his saves off th
03e0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64  e parameters and
03f0: 20 63 61 6c 6c 73 20 74 68 65 20 0a 23 20 75 6e   calls the .# un
0400: 64 65 72 6c 79 69 6e 67 20 73 71 6c 69 74 65 33  derlying sqlite3
0410: 5f 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72  _multiplex_contr
0420: 6f 6c 28 29 20 41 50 49 2e 0a 70 72 6f 63 20 6d  ol() API..proc m
0430: 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 7b 64 62  ultiplex_set {db
0440: 20 6e 61 6d 65 20 63 68 75 6e 6b 5f 73 69 7a 65   name chunk_size
0450: 20 6d 61 78 5f 63 68 75 6e 6b 73 7d 20 7b 0a 20   max_chunks} {. 
0460: 20 67 6c 6f 62 61 6c 20 67 5f 63 68 75 6e 6b 5f   global g_chunk_
0470: 73 69 7a 65 0a 20 20 67 6c 6f 62 61 6c 20 67 5f  size.  global g_
0480: 6d 61 78 5f 63 68 75 6e 6b 73 0a 20 20 73 65 74  max_chunks.  set
0490: 20 67 5f 63 68 75 6e 6b 5f 73 69 7a 65 20 5b 20   g_chunk_size [ 
04a0: 65 78 70 72 20 28 28 24 63 68 75 6e 6b 5f 73 69  expr (($chunk_si
04b0: 7a 65 2b 28 24 3a 3a 53 51 4c 49 54 45 5f 4d 41  ze+($::SQLITE_MA
04c0: 58 5f 50 41 47 45 5f 53 49 5a 45 2d 31 29 29 20  X_PAGE_SIZE-1)) 
04d0: 26 20 7e 28 24 3a 3a 53 51 4c 49 54 45 5f 4d 41  & ~($::SQLITE_MA
04e0: 58 5f 50 41 47 45 5f 53 49 5a 45 2d 31 29 29 20  X_PAGE_SIZE-1)) 
04f0: 5d 0a 20 20 73 65 74 20 67 5f 6d 61 78 5f 63 68  ].  set g_max_ch
0500: 75 6e 6b 73 20 24 6d 61 78 5f 63 68 75 6e 6b 73  unks $max_chunks
0510: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
0520: 20 7b 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70   {sqlite3_multip
0530: 6c 65 78 5f 63 6f 6e 74 72 6f 6c 20 24 64 62 20  lex_control $db 
0540: 24 6e 61 6d 65 20 63 68 75 6e 6b 5f 73 69 7a 65  $name chunk_size
0550: 20 24 63 68 75 6e 6b 5f 73 69 7a 65 7d 20 6d 73   $chunk_size} ms
0560: 67 5d 0a 20 20 69 66 20 7b 20 24 72 63 3d 3d 30  g].  if { $rc==0
0570: 20 7d 20 7b 20 0a 20 20 20 20 73 65 74 20 72 63   } { .    set rc
0580: 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33   [catch {sqlite3
0590: 5f 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72  _multiplex_contr
05a0: 6f 6c 20 24 64 62 20 24 6e 61 6d 65 20 6d 61 78  ol $db $name max
05b0: 5f 63 68 75 6e 6b 73 20 24 6d 61 78 5f 63 68 75  _chunks $max_chu
05c0: 6e 6b 73 7d 20 6d 73 67 5d 0a 20 20 7d 0a 20 20  nks} msg].  }.  
05d0: 6c 69 73 74 20 24 6d 73 67 0a 7d 0a 0a 23 20 54  list $msg.}..# T
05e0: 68 69 73 20 61 74 74 65 6d 70 74 73 20 74 6f 20  his attempts to 
05f0: 64 65 6c 65 74 65 20 74 68 65 20 62 61 73 65 20  delete the base 
0600: 66 69 6c 65 20 61 6e 64 20 0a 23 20 61 6e 64 20  file and .# and 
0610: 66 69 6c 65 73 20 77 69 74 68 20 74 68 65 20 63  files with the c
0620: 68 75 6e 6b 20 65 78 74 65 6e 73 69 6f 6e 2e 0a  hunk extension..
0630: 70 72 6f 63 20 6d 75 6c 74 69 70 6c 65 78 5f 64  proc multiplex_d
0640: 65 6c 65 74 65 20 7b 6e 61 6d 65 7d 20 7b 0a 20  elete {name} {. 
0650: 20 67 6c 6f 62 61 6c 20 67 5f 6d 61 78 5f 63 68   global g_max_ch
0660: 75 6e 6b 73 0a 20 20 66 6f 72 20 7b 73 65 74 20  unks.  for {set 
0670: 69 20 30 7d 20 7b 24 69 3c 24 67 5f 6d 61 78 5f  i 0} {$i<$g_max_
0680: 63 68 75 6e 6b 73 7d 20 7b 69 6e 63 72 20 69 7d  chunks} {incr i}
0690: 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65   {.    forcedele
06a0: 74 65 20 5b 6d 75 6c 74 69 70 6c 65 78 5f 6e 61  te [multiplex_na
06b0: 6d 65 20 24 6e 61 6d 65 20 24 69 5d 0a 20 20 20  me $name $i].   
06c0: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 5b 6d 75   forcedelete [mu
06d0: 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 24 6e 61  ltiplex_name $na
06e0: 6d 65 2d 6a 6f 75 72 6e 61 6c 20 24 69 5d 0a 20  me-journal $i]. 
06f0: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 5b     forcedelete [
0700: 6d 75 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 24  multiplex_name $
0710: 6e 61 6d 65 2d 77 61 6c 20 24 69 5d 0a 20 20 7d  name-wal $i].  }
0720: 0a 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 0a 6d 75  .}..db close..mu
0730: 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65 20 74  ltiplex_delete t
0740: 65 73 74 2e 64 62 0a 6d 75 6c 74 69 70 6c 65 78  est.db.multiplex
0750: 5f 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  _delete test2.db
0760: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
0770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20  ------------.#  
07b0: 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 2e 2a   multiplex-1.1.*
07c0: 3a 20 54 65 73 74 20 69 6e 69 74 69 61 6c 69 7a  : Test initializ
07d0: 65 20 61 6e 64 20 73 68 75 74 64 6f 77 6e 2e 0a  e and shutdown..
07e0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
07f0: 65 78 2d 31 2e 31 20 7b 20 73 71 6c 69 74 65 33  ex-1.1 { sqlite3
0800: 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69  _multiplex_initi
0810: 61 6c 69 7a 65 20 6e 6f 73 75 63 68 76 66 73 20  alize nosuchvfs 
0820: 31 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f  1 } {SQLITE_ERRO
0830: 52 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  R}.do_test multi
0840: 70 6c 65 78 2d 31 2e 32 20 7b 20 73 71 6c 69 74  plex-1.2 { sqlit
0850: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69  e3_multiplex_ini
0860: 74 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20  tialize "" 1 }  
0870: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b        {SQLITE_OK
0880: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
0890: 6c 65 78 2d 31 2e 33 20 7b 20 73 71 6c 69 74 65  lex-1.3 { sqlite
08a0: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74  3_multiplex_init
08b0: 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20  ialize "" 1 }   
08c0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4d 49 53       {SQLITE_MIS
08d0: 55 53 45 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  USE}.do_test mul
08e0: 74 69 70 6c 65 78 2d 31 2e 34 20 7b 20 73 71 6c  tiplex-1.4 { sql
08f0: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73  ite3_multiplex_s
0900: 68 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20  hutdown }       
0910: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
0920: 4f 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  OK}..do_test mul
0930: 74 69 70 6c 65 78 2d 31 2e 35 20 7b 20 73 71 6c  tiplex-1.5 { sql
0940: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69  ite3_multiplex_i
0950: 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 30 20 7d  nitialize "" 0 }
0960: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
0970: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  OK}.do_test mult
0980: 69 70 6c 65 78 2d 31 2e 36 20 7b 20 73 71 6c 69  iplex-1.6 { sqli
0990: 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68  te3_multiplex_sh
09a0: 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20  utdown }        
09b0: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f         {SQLITE_O
09c0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  K}.do_test multi
09d0: 70 6c 65 78 2d 31 2e 37 20 7b 20 73 71 6c 69 74  plex-1.7 { sqlit
09e0: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69  e3_multiplex_ini
09f0: 74 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20  tialize "" 1 }  
0a00: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b        {SQLITE_OK
0a10: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
0a20: 6c 65 78 2d 31 2e 38 20 7b 20 73 71 6c 69 74 65  lex-1.8 { sqlite
0a30: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75 74  3_multiplex_shut
0a40: 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20 20  down }          
0a50: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
0a60: 0a 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  ...do_test multi
0a70: 70 6c 65 78 2d 31 2e 39 2e 31 20 20 7b 20 73 71  plex-1.9.1  { sq
0a80: 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f  lite3_multiplex_
0a90: 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31 20  initialize "" 1 
0aa0: 7d 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b  }     {SQLITE_OK
0ab0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
0ac0: 6c 65 78 2d 31 2e 39 2e 32 20 20 7b 20 73 71 6c  lex-1.9.2  { sql
0ad0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
0ae0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0af0: 20 20 20 20 20 7b 7d 0a 64 6f 5f 74 65 73 74 20       {}.do_test 
0b00: 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 39 2e 33 20  multiplex-1.9.3 
0b10: 20 7b 20 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74   { multiplex_set
0b20: 20 64 62 20 6d 61 69 6e 20 33 32 37 36 38 20 31   db main 32768 1
0b30: 36 20 7d 20 20 20 20 20 20 20 20 7b 53 51 4c 49  6 }        {SQLI
0b40: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d  TE_OK}.do_test m
0b50: 75 6c 74 69 70 6c 65 78 2d 31 2e 39 2e 34 20 20  ultiplex-1.9.4  
0b60: 7b 20 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20  { multiplex_set 
0b70: 64 62 20 6d 61 69 6e 20 33 32 37 36 38 20 2d 31  db main 32768 -1
0b80: 20 7d 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54   }        {SQLIT
0b90: 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73  E_MISUSE}.do_tes
0ba0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 39 2e  t multiplex-1.9.
0bb0: 35 20 20 7b 20 6d 75 6c 74 69 70 6c 65 78 5f 73  5  { multiplex_s
0bc0: 65 74 20 64 62 20 6d 61 69 6e 20 2d 31 20 31 36  et db main -1 16
0bd0: 20 7d 20 20 20 20 20 20 20 20 20 20 20 7b 53 51   }           {SQ
0be0: 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f  LITE_MISUSE}.do_
0bf0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31  test multiplex-1
0c00: 2e 39 2e 36 20 20 7b 20 6d 75 6c 74 69 70 6c 65  .9.6  { multiple
0c10: 78 5f 73 65 74 20 64 62 20 6d 61 69 6e 20 33 31  x_set db main 31
0c20: 20 31 36 20 7d 20 20 20 20 20 20 20 20 20 20 20   16 }           
0c30: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74  {SQLITE_OK}.do_t
0c40: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e  est multiplex-1.
0c50: 39 2e 37 20 20 7b 20 6d 75 6c 74 69 70 6c 65 78  9.7  { multiplex
0c60: 5f 73 65 74 20 64 62 20 6d 61 69 6e 20 33 32 37  _set db main 327
0c70: 36 38 20 31 30 30 20 7d 20 20 20 20 20 20 20 7b  68 100 }       {
0c80: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 64  SQLITE_MISUSE}.d
0c90: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
0ca0: 2d 31 2e 39 2e 38 20 20 7b 20 6d 75 6c 74 69 70  -1.9.8  { multip
0cb0: 6c 65 78 5f 73 65 74 20 64 62 20 6d 61 69 6e 20  lex_set db main 
0cc0: 31 30 37 33 37 34 31 38 32 34 20 31 20 7d 20 20  1073741824 1 }  
0cd0: 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f    {SQLITE_OK}.do
0ce0: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
0cf0: 31 2e 39 2e 39 20 20 7b 20 64 62 20 63 6c 6f 73  1.9.9  { db clos
0d00: 65 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  e }             
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d20: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74   {}.do_test mult
0d30: 69 70 6c 65 78 2d 31 2e 39 2e 31 30 20 7b 20 73  iplex-1.9.10 { s
0d40: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
0d50: 5f 73 68 75 74 64 6f 77 6e 20 7d 20 20 20 20 20  _shutdown }     
0d60: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f         {SQLITE_O
0d70: 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  K}..do_test mult
0d80: 69 70 6c 65 78 2d 31 2e 31 30 2e 31 20 20 7b 20  iplex-1.10.1  { 
0d90: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
0da0: 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20  x_initialize "" 
0db0: 31 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  1 }             
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dd0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
0de0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
0df0: 65 78 2d 31 2e 31 30 2e 32 20 20 7b 20 73 71 6c  ex-1.10.2  { sql
0e00: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
0e10: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 20 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c    {}.do_test mul
0e50: 74 69 70 6c 65 78 2d 31 2e 31 30 2e 33 20 20 7b  tiplex-1.10.3  {
0e60: 20 6c 69 6e 64 65 78 20 5b 20 63 61 74 63 68 73   lindex [ catchs
0e70: 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d 75 6c 74  ql { SELECT mult
0e80: 69 70 6c 65 78 5f 63 6f 6e 74 72 6f 6c 28 32 2c  iplex_control(2,
0e90: 20 33 32 37 36 38 29 3b 20 7d 20 5d 20 30 20 7d   32768); } ] 0 }
0ea0: 20 20 20 20 20 20 7b 30 7d 0a 64 6f 5f 74 65 73        {0}.do_tes
0eb0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 30  t multiplex-1.10
0ec0: 2e 34 20 20 7b 20 6c 69 6e 64 65 78 20 5b 20 63  .4  { lindex [ c
0ed0: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
0ee0: 20 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72   multiplex_contr
0ef0: 6f 6c 28 33 2c 20 2d 31 29 3b 20 7d 20 5d 20 30  ol(3, -1); } ] 0
0f00: 20 7d 20 20 20 20 20 20 20 20 20 7b 31 7d 0a 64   }         {1}.d
0f10: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
0f20: 2d 31 2e 31 30 2e 35 20 20 7b 20 6c 69 6e 64 65  -1.10.5  { linde
0f30: 78 20 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53  x [ catchsql { S
0f40: 45 4c 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f  ELECT multiplex_
0f50: 63 6f 6e 74 72 6f 6c 28 32 2c 20 2d 31 29 3b 20  control(2, -1); 
0f60: 7d 20 5d 20 30 20 7d 20 20 20 20 20 20 20 20 20  } ] 0 }         
0f70: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  {1}.do_test mult
0f80: 69 70 6c 65 78 2d 31 2e 31 30 2e 36 20 20 7b 20  iplex-1.10.6  { 
0f90: 6c 69 6e 64 65 78 20 5b 20 63 61 74 63 68 73 71  lindex [ catchsq
0fa0: 6c 20 7b 20 53 45 4c 45 43 54 20 6d 75 6c 74 69  l { SELECT multi
0fb0: 70 6c 65 78 5f 63 6f 6e 74 72 6f 6c 28 32 2c 20  plex_control(2, 
0fc0: 33 31 29 3b 20 7d 20 5d 20 30 20 7d 20 20 20 20  31); } ] 0 }    
0fd0: 20 20 20 20 20 7b 30 7d 0a 64 6f 5f 74 65 73 74       {0}.do_test
0fe0: 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 30 2e   multiplex-1.10.
0ff0: 37 20 20 7b 20 6c 69 6e 64 65 78 20 5b 20 63 61  7  { lindex [ ca
1000: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
1010: 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72 6f  multiplex_contro
1020: 6c 28 33 2c 20 31 30 30 29 3b 20 7d 20 5d 20 30  l(3, 100); } ] 0
1030: 20 7d 20 20 20 20 20 20 20 20 7b 31 7d 0a 64 6f   }        {1}.do
1040: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1050: 31 2e 31 30 2e 38 20 20 7b 20 6c 69 6e 64 65 78  1.10.8  { lindex
1060: 20 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45   [ catchsql { SE
1070: 4c 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f 63  LECT multiplex_c
1080: 6f 6e 74 72 6f 6c 28 32 2c 20 31 30 37 33 37 34  ontrol(2, 107374
1090: 31 38 32 34 29 3b 20 7d 20 5d 20 30 20 7d 20 7b  1824); } ] 0 } {
10a0: 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  0}.do_test multi
10b0: 70 6c 65 78 2d 31 2e 31 30 2e 39 20 20 7b 20 64  plex-1.10.9  { d
10c0: 62 20 63 6c 6f 73 65 20 7d 20 20 20 20 20 20 20  b close }       
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1100: 20 20 20 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d      {}.do_test m
1110: 75 6c 74 69 70 6c 65 78 2d 31 2e 31 30 2e 31 30  ultiplex-1.10.10
1120: 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69   { sqlite3_multi
1130: 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 20 7d 20  plex_shutdown } 
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1160: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
1170: 4f 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  OK}..do_test mul
1180: 74 69 70 6c 65 78 2d 31 2e 31 31 2e 31 20 20 7b  tiplex-1.11.1  {
1190: 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
11a0: 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22  ex_initialize ""
11b0: 20 31 20 7d 20 20 20 20 20 20 20 20 20 20 20 20   1 }            
11c0: 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64     {SQLITE_OK}.d
11d0: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
11e0: 2d 31 2e 31 31 2e 32 20 20 7b 20 73 71 6c 69 74  -1.11.2  { sqlit
11f0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d 20  e3 db test.db } 
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
1220: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
1230: 78 2d 31 2e 31 31 2e 33 20 20 7b 20 73 71 6c 69  x-1.11.3  { sqli
1240: 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 63 6f  te3_multiplex_co
1250: 6e 74 72 6f 6c 20 64 62 20 6d 61 69 6e 20 65 6e  ntrol db main en
1260: 61 62 6c 65 20 30 20 20 7d 20 20 20 20 20 7b 53  able 0  }     {S
1270: 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73  QLITE_OK}.do_tes
1280: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 31  t multiplex-1.11
1290: 2e 34 20 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75  .4  { sqlite3_mu
12a0: 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72 6f 6c 20  ltiplex_control 
12b0: 64 62 20 6d 61 69 6e 20 65 6e 61 62 6c 65 20 31  db main enable 1
12c0: 20 20 7d 20 20 20 20 20 7b 53 51 4c 49 54 45 5f    }     {SQLITE_
12d0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  OK}.do_test mult
12e0: 69 70 6c 65 78 2d 31 2e 31 31 2e 35 20 20 7b 20  iplex-1.11.5  { 
12f0: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
1300: 78 5f 63 6f 6e 74 72 6f 6c 20 64 62 20 6d 61 69  x_control db mai
1310: 6e 20 65 6e 61 62 6c 65 20 2d 31 20 7d 20 20 20  n enable -1 }   
1320: 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f    {SQLITE_OK}.do
1330: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1340: 31 2e 31 31 2e 36 20 20 7b 20 64 62 20 63 6c 6f  1.11.6  { db clo
1350: 73 65 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  se }            
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 64              {}.d
1380: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
1390: 2d 31 2e 31 31 2e 37 20 20 7b 20 73 71 6c 69 74  -1.11.7  { sqlit
13a0: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75  e3_multiplex_shu
13b0: 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20  tdown }         
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53 51               {SQ
13d0: 4c 49 54 45 5f 4f 4b 7d 0a 0a 64 6f 5f 74 65 73  LITE_OK}..do_tes
13e0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 32  t multiplex-1.12
13f0: 2e 31 20 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75  .1  { sqlite3_mu
1400: 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69  ltiplex_initiali
1410: 7a 65 20 22 22 20 31 20 7d 20 20 20 20 20 20 20  ze "" 1 }       
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a      {SQLITE_OK}.
1440: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
1450: 78 2d 31 2e 31 32 2e 32 20 20 7b 20 73 71 6c 69  x-1.12.2  { sqli
1460: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d  te3 db test.db }
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1490: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 64 6f 5f            {}.do_
14a0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31  test multiplex-1
14b0: 2e 31 32 2e 33 20 20 7b 20 6c 69 6e 64 65 78 20  .12.3  { lindex 
14c0: 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c  [ catchsql { SEL
14d0: 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f 63 6f  ECT multiplex_co
14e0: 6e 74 72 6f 6c 28 31 2c 20 30 29 3b 20 7d 20 5d  ntrol(1, 0); } ]
14f0: 20 30 20 7d 20 20 20 7b 30 7d 0a 64 6f 5f 74 65   0 }   {0}.do_te
1500: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31  st multiplex-1.1
1510: 32 2e 34 20 20 7b 20 6c 69 6e 64 65 78 20 5b 20  2.4  { lindex [ 
1520: 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43  catchsql { SELEC
1530: 54 20 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74  T multiplex_cont
1540: 72 6f 6c 28 31 2c 20 31 29 3b 20 7d 20 5d 20 30  rol(1, 1); } ] 0
1550: 20 7d 20 20 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }   {0}.do_test
1560: 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 32 2e   multiplex-1.12.
1570: 35 20 20 7b 20 6c 69 6e 64 65 78 20 5b 20 63 61  5  { lindex [ ca
1580: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
1590: 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74 72 6f  multiplex_contro
15a0: 6c 28 31 2c 20 2d 31 29 3b 20 7d 20 5d 20 30 20  l(1, -1); } ] 0 
15b0: 7d 20 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 6d  }  {0}.do_test m
15c0: 75 6c 74 69 70 6c 65 78 2d 31 2e 31 32 2e 36 20  ultiplex-1.12.6 
15d0: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 20 20 20   { db close }   
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1610: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74   {}.do_test mult
1620: 69 70 6c 65 78 2d 31 2e 31 32 2e 37 20 20 7b 20  iplex-1.12.7  { 
1630: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
1640: 78 5f 73 68 75 74 64 6f 77 6e 20 7d 20 20 20 20  x_shutdown }    
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53                {S
1670: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 64 6f 5f 74 65  QLITE_OK}..do_te
1680: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31  st multiplex-1.1
1690: 33 2e 31 20 20 7b 20 73 71 6c 69 74 65 33 5f 6d  3.1  { sqlite3_m
16a0: 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c  ultiplex_initial
16b0: 69 7a 65 20 22 22 20 31 20 7d 20 20 20 20 20 20  ize "" 1 }      
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
16e0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
16f0: 65 78 2d 31 2e 31 33 2e 32 20 20 7b 20 73 71 6c  ex-1.13.2  { sql
1700: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
1710: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 64 6f             {}.do
1740: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1750: 31 2e 31 33 2e 33 20 20 7b 20 6c 69 6e 64 65 78  1.13.3  { lindex
1760: 20 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45   [ catchsql { SE
1770: 4c 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f 63  LECT multiplex_c
1780: 6f 6e 74 72 6f 6c 28 2d 31 2c 20 30 29 3b 20 7d  ontrol(-1, 0); }
1790: 20 5d 20 30 20 7d 20 20 7b 31 7d 0a 64 6f 5f 74   ] 0 }  {1}.do_t
17a0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e  est multiplex-1.
17b0: 31 33 2e 34 20 20 7b 20 6c 69 6e 64 65 78 20 5b  13.4  { lindex [
17c0: 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45   catchsql { SELE
17d0: 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e  CT multiplex_con
17e0: 74 72 6f 6c 28 34 2c 20 31 29 3b 20 7d 20 5d 20  trol(4, 1); } ] 
17f0: 30 20 7d 20 20 20 7b 31 7d 0a 64 6f 5f 74 65 73  0 }   {1}.do_tes
1800: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 33  t multiplex-1.13
1810: 2e 36 20 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  .6  { db close }
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d      {}.do_test m
1860: 75 6c 74 69 70 6c 65 78 2d 31 2e 31 33 2e 37 20  ultiplex-1.13.7 
1870: 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69   { sqlite3_multi
1880: 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 20 7d 20  plex_shutdown } 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 23 2d   {SQLITE_OK}..#-
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1900: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 6f 6d 65 20  --------.# Some 
1910: 73 69 6d 70 6c 65 20 77 61 72 6d 2d 62 6f 64 79  simple warm-body
1920: 20 74 65 73 74 73 20 77 69 74 68 20 61 20 73 69   tests with a si
1930: 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20 66 69  ngle database fi
1940: 6c 65 20 69 6e 20 72 6f 6c 6c 62 61 63 6b 20 0a  le in rollback .
1950: 23 20 6d 6f 64 65 3a 0a 23 0a 23 20 20 20 6d 75  # mode:.#.#   mu
1960: 6c 74 69 70 6c 65 78 2d 32 2e 31 2e 2a 3a 20 54  ltiplex-2.1.*: T
1970: 65 73 74 20 73 69 6d 70 6c 65 20 77 72 69 74 69  est simple writi
1980: 6e 67 20 74 6f 20 61 20 6d 75 6c 74 69 70 6c 65  ng to a multiple
1990: 78 20 66 69 6c 65 2e 0a 23 0a 23 20 20 20 6d 75  x file..#.#   mu
19a0: 6c 74 69 70 6c 65 78 2d 32 2e 32 2e 2a 3a 20 4d  ltiplex-2.2.*: M
19b0: 6f 72 65 20 77 72 69 74 69 6e 67 2e 0a 23 0a 23  ore writing..#.#
19c0: 20 20 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 33     multiplex-2.3
19d0: 2e 2a 3a 20 4f 70 65 6e 20 61 6e 64 20 63 6c 6f  .*: Open and clo
19e0: 73 65 20 61 20 73 65 63 6f 6e 64 20 64 62 2e 0a  se a second db..
19f0: 23 0a 23 20 20 20 6d 75 6c 74 69 70 6c 65 78 2d  #.#   multiplex-
1a00: 32 2e 34 2e 2a 3a 20 54 72 79 20 74 6f 20 73 68  2.4.*: Try to sh
1a10: 75 74 64 6f 77 6e 20 74 68 65 20 6d 75 6c 74 69  utdown the multi
1a20: 70 6c 65 78 20 73 79 73 74 65 6d 20 62 65 66 6f  plex system befo
1a30: 72 65 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 64  re closing the d
1a40: 62 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  b.#             
1a50: 20 20 20 66 69 6c 65 2e 20 43 68 65 63 6b 20 74     file. Check t
1a60: 68 61 74 20 74 68 69 73 20 66 61 69 6c 73 20 61  hat this fails a
1a70: 6e 64 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 78  nd the multiplex
1a80: 20 73 79 73 74 65 6d 20 73 74 69 6c 6c 20 77 6f   system still wo
1a90: 72 6b 73 0a 23 20 20 20 20 20 20 20 20 20 20 20  rks.#           
1aa0: 20 20 20 20 20 61 66 74 65 72 77 61 72 64 73 2e       afterwards.
1ab0: 20 54 68 65 6e 20 63 6c 6f 73 65 20 74 68 65 20   Then close the 
1ac0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 73 75 63  database and suc
1ad0: 63 65 73 73 66 75 6c 6c 79 20 73 68 75 74 0a 23  cessfully shut.#
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af0: 64 6f 77 6e 20 74 68 65 20 6d 75 6c 74 69 70 6c  down the multipl
1b00: 65 78 20 73 79 73 74 65 6d 2e 0a 23 0a 23 20 20  ex system..#.#  
1b10: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 2a   multiplex-2.5.*
1b20: 3a 20 4d 6f 72 65 20 72 65 61 64 69 6e 67 2f 77  : More reading/w
1b30: 72 69 74 69 6e 67 2e 0a 23 0a 23 20 20 20 6d 75  riting..#.#   mu
1b40: 6c 74 69 70 6c 65 78 2d 32 2e 36 2e 2a 3a 20 4d  ltiplex-2.6.*: M
1b50: 6f 72 65 20 72 65 61 64 69 6e 67 2f 77 72 69 74  ore reading/writ
1b60: 69 6e 67 20 77 69 74 68 20 76 61 72 79 69 6e 67  ing with varying
1b70: 20 73 6d 61 6c 6c 20 63 68 75 6e 6b 20 73 69 7a   small chunk siz
1b80: 65 73 2c 20 61 73 0a 23 20 20 20 20 20 20 20 20  es, as.#        
1b90: 20 20 20 20 20 20 20 20 77 65 6c 6c 20 61 73 20          well as 
1ba0: 76 61 72 79 69 6e 67 20 6a 6f 75 72 6e 61 6c 20  varying journal 
1bb0: 6d 6f 64 65 2e 0a 23 0a 23 20 20 20 6d 75 6c 74  mode..#.#   mult
1bc0: 69 70 6c 65 78 2d 32 2e 37 2e 2a 3a 20 44 69 73  iplex-2.7.*: Dis
1bd0: 61 62 6c 65 2f 65 6e 61 62 6c 65 20 74 65 73 74  able/enable test
1be0: 73 2e 0a 23 0a 0a 73 71 6c 69 74 65 33 5f 6d 75  s..#..sqlite3_mu
1bf0: 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69  ltiplex_initiali
1c00: 7a 65 20 22 22 20 31 0a 6d 75 6c 74 69 70 6c 65  ze "" 1.multiple
1c10: 78 5f 73 65 74 20 64 62 20 6d 61 69 6e 20 33 32  x_set db main 32
1c20: 37 36 38 20 31 36 0a 0a 64 6f 5f 74 65 73 74 20  768 16..do_test 
1c30: 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 31 2e 32 20  multiplex-2.1.2 
1c40: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  {.  sqlite3 db t
1c50: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
1c60: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61   {.    PRAGMA pa
1c70: 67 65 5f 73 69 7a 65 3d 31 30 32 34 3b 0a 20 20  ge_size=1024;.  
1c80: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
1c90: 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 50 52  cuum=OFF;.    PR
1ca0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
1cb0: 65 3d 44 45 4c 45 54 45 3b 0a 20 20 7d 0a 20 20  e=DELETE;.  }.  
1cc0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
1cd0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
1ce0: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
1cf0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
1d00: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30  , randomblob(110
1d10: 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0));.    INSERT 
1d20: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
1d30: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31 30  , randomblob(110
1d40: 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  0));.  }.} {}.do
1d50: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1d60: 32 2e 31 2e 33 20 7b 20 66 69 6c 65 20 73 69 7a  2.1.3 { file siz
1d70: 65 20 5b 6d 75 6c 74 69 70 6c 65 78 5f 6e 61 6d  e [multiplex_nam
1d80: 65 20 74 65 73 74 2e 64 62 20 30 5d 20 7d 20 7b  e test.db 0] } {
1d90: 34 30 39 36 7d 0a 64 6f 5f 74 65 73 74 20 6d 75  4096}.do_test mu
1da0: 6c 74 69 70 6c 65 78 2d 32 2e 31 2e 34 20 7b 0a  ltiplex-2.1.4 {.
1db0: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
1dc0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1dd0: 53 28 33 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  S(3, randomblob(
1de0: 31 31 30 30 29 29 20 7d 0a 7d 20 7b 7d 0a 0a 64  1100)) }.} {}..d
1df0: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
1e00: 2d 32 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  -2.2.1 {.  execs
1e10: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
1e20: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 72 61   t1 VALUES(3, ra
1e30: 6e 64 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29 20  ndomblob(1100)) 
1e40: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d  }.} {}.do_test m
1e50: 75 6c 74 69 70 6c 65 78 2d 32 2e 32 2e 33 20 7b  ultiplex-2.2.3 {
1e60: 20 66 69 6c 65 20 73 69 7a 65 20 5b 6d 75 6c 74   file size [mult
1e70: 69 70 6c 65 78 5f 6e 61 6d 65 20 74 65 73 74 2e  iplex_name test.
1e80: 64 62 20 30 5d 20 7d 20 7b 36 31 34 34 7d 0a 0a  db 0] } {6144}..
1e90: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
1ea0: 78 2d 32 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69  x-2.3.1 {.  sqli
1eb0: 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62  te3 db2 test2.db
1ec0: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b  .  db2 close.} {
1ed0: 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  }...do_test mult
1ee0: 69 70 6c 65 78 2d 32 2e 34 2e 31 20 7b 0a 20 20  iplex-2.4.1 {.  
1ef0: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
1f00: 78 5f 73 68 75 74 64 6f 77 6e 0a 7d 20 7b 53 51  x_shutdown.} {SQ
1f10: 4c 49 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f  LITE_MISUSE}.do_
1f20: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
1f30: 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.2 {.  execsql
1f40: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
1f50: 31 20 56 41 4c 55 45 53 28 33 2c 20 72 61 6e 64  1 VALUES(3, rand
1f60: 6f 6d 62 6c 6f 62 28 31 31 30 30 29 29 20 7d 0a  omblob(1100)) }.
1f70: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  } {}.do_test mul
1f80: 74 69 70 6c 65 78 2d 32 2e 34 2e 34 20 7b 20 66  tiplex-2.4.4 { f
1f90: 69 6c 65 20 73 69 7a 65 20 5b 6d 75 6c 74 69 70  ile size [multip
1fa0: 6c 65 78 5f 6e 61 6d 65 20 74 65 73 74 2e 64 62  lex_name test.db
1fb0: 20 30 5d 20 7d 20 7b 37 31 36 38 7d 0a 64 6f 5f   0] } {7168}.do_
1fc0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
1fd0: 2e 34 2e 39 39 20 7b 0a 20 20 64 62 20 63 6c 6f  .4.99 {.  db clo
1fe0: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c  se.  sqlite3_mul
1ff0: 74 69 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 0a  tiplex_shutdown.
2000: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 0a  } {SQLITE_OK}...
2010: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2020: 78 2d 32 2e 35 2e 31 20 7b 0a 20 20 6d 75 6c 74  x-2.5.1 {.  mult
2030: 69 70 6c 65 78 5f 64 65 6c 65 74 65 20 74 65 73  iplex_delete tes
2040: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t.db.  sqlite3_m
2050: 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c  ultiplex_initial
2060: 69 7a 65 20 22 22 20 31 0a 20 20 73 71 6c 69 74  ize "" 1.  sqlit
2070: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
2080: 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 64 62  multiplex_set db
2090: 20 6d 61 69 6e 20 34 30 39 36 20 31 36 0a 7d 20   main 4096 16.} 
20a0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 64 6f 5f  {SQLITE_OK}..do_
20b0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
20c0: 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.2 {.  execsql
20d0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61   {.    PRAGMA pa
20e0: 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a  ge_size = 1024;.
20f0: 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e      PRAGMA journ
2100: 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65  al_mode = delete
2110: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74  ;.    PRAGMA aut
2120: 6f 5f 76 61 63 75 75 6d 20 3d 20 6f 66 66 3b 0a  o_vacuum = off;.
2130: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2140: 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t1(a PRIMARY KE
2150: 59 2c 20 62 29 3b 0a 20 20 7d 0a 7d 20 7b 64 65  Y, b);.  }.} {de
2160: 6c 65 74 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d  lete}..do_test m
2170: 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 33 20 7b  ultiplex-2.5.3 {
2180: 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20   .  execsql { . 
2190: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
21a0: 31 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65  1 VALUES(1, 'one
21b0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
21c0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c  NTO t1 VALUES(2,
21d0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30   randomblob(4000
21e0: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    INSERT I
21f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
2200: 20 27 74 68 72 65 65 27 29 3b 0a 20 20 20 20 49   'three');.    I
2210: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2220: 4c 55 45 53 28 34 2c 20 72 61 6e 64 6f 6d 62 6c  LUES(4, randombl
2230: 6f 62 28 34 30 30 30 29 29 3b 0a 20 20 20 20 49  ob(4000));.    I
2240: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2250: 4c 55 45 53 28 35 2c 20 27 66 69 76 65 27 29 3b  LUES(5, 'five');
2260: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2270: 20 74 31 20 56 41 4c 55 45 53 28 36 2c 20 72 61   t1 VALUES(6, ra
2280: 6e 64 6f 6d 62 6c 6f 62 28 24 67 5f 63 68 75 6e  ndomblob($g_chun
2290: 6b 5f 73 69 7a 65 29 29 3b 0a 20 20 20 20 49 4e  k_size));.    IN
22a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
22b0: 55 45 53 28 37 2c 20 72 61 6e 64 6f 6d 62 6c 6f  UES(7, randomblo
22c0: 62 28 24 67 5f 63 68 75 6e 6b 5f 73 69 7a 65 29  b($g_chunk_size)
22d0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  );.  }.} {}..do_
22e0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
22f0: 2e 35 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c  .5.4 {.  db eval
2300: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2310: 74 31 20 57 48 45 52 45 20 61 3d 31 7d 0a 7d 20  t1 WHERE a=1}.} 
2320: 7b 31 20 6f 6e 65 7d 0a 0a 64 6f 5f 74 65 73 74  {1 one}..do_test
2330: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 35   multiplex-2.5.5
2340: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
2350: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2360: 48 45 52 45 20 61 3d 33 7d 0a 7d 20 7b 33 20 74  HERE a=3}.} {3 t
2370: 68 72 65 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d  hree}..do_test m
2380: 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 36 20 7b  ultiplex-2.5.6 {
2390: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
23a0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
23b0: 52 45 20 61 3d 35 7d 0a 7d 20 7b 35 20 66 69 76  RE a=5}.} {5 fiv
23c0: 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  e}..do_test mult
23d0: 69 70 6c 65 78 2d 32 2e 35 2e 37 20 7b 0a 20 20  iplex-2.5.7 {.  
23e0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
23f0: 61 2c 6c 65 6e 67 74 68 28 62 29 20 46 52 4f 4d  a,length(b) FROM
2400: 20 74 31 20 57 48 45 52 45 20 61 3d 32 7d 0a 7d   t1 WHERE a=2}.}
2410: 20 7b 32 20 34 30 30 30 7d 0a 0a 64 6f 5f 74 65   {2 4000}..do_te
2420: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 35  st multiplex-2.5
2430: 2e 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .8 {.  db eval {
2440: 53 45 4c 45 43 54 20 61 2c 6c 65 6e 67 74 68 28  SELECT a,length(
2450: 62 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  b) FROM t1 WHERE
2460: 20 61 3d 34 7d 0a 7d 20 7b 34 20 34 30 30 30 7d   a=4}.} {4 4000}
2470: 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  ..do_test multip
2480: 6c 65 78 2d 32 2e 35 2e 39 20 7b 20 66 69 6c 65  lex-2.5.9 { file
2490: 20 73 69 7a 65 20 5b 6d 75 6c 74 69 70 6c 65 78   size [multiplex
24a0: 5f 6e 61 6d 65 20 74 65 73 74 2e 64 62 20 30 5d  _name test.db 0]
24b0: 20 7d 20 5b 6c 69 73 74 20 24 67 5f 63 68 75 6e   } [list $g_chun
24c0: 6b 5f 73 69 7a 65 5d 0a 64 6f 5f 74 65 73 74 20  k_size].do_test 
24d0: 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 31 30  multiplex-2.5.10
24e0: 20 7b 20 66 69 6c 65 20 73 69 7a 65 20 5b 6d 75   { file size [mu
24f0: 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 74 65 73  ltiplex_name tes
2500: 74 2e 64 62 20 31 5d 20 7d 20 5b 6c 69 73 74 20  t.db 1] } [list 
2510: 24 67 5f 63 68 75 6e 6b 5f 73 69 7a 65 5d 0a 0a  $g_chunk_size]..
2520: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2530: 78 2d 32 2e 35 2e 39 39 20 7b 0a 20 20 64 62 20  x-2.5.99 {.  db 
2540: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  close.  sqlite3_
2550: 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75 74 64 6f  multiplex_shutdo
2560: 77 6e 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  wn.} {SQLITE_OK}
2570: 0a 0a 0a 73 65 74 20 61 6c 6c 5f 6a 6f 75 72 6e  ...set all_journ
2580: 61 6c 5f 6d 6f 64 65 73 20 7b 64 65 6c 65 74 65  al_modes {delete
2590: 20 70 65 72 73 69 73 74 20 74 72 75 6e 63 61 74   persist truncat
25a0: 65 20 6d 65 6d 6f 72 79 20 6f 66 66 7d 0a 66 6f  e memory off}.fo
25b0: 72 65 61 63 68 20 6a 6d 6f 64 65 20 24 61 6c 6c  reach jmode $all
25c0: 5f 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 73 20 7b  _journal_modes {
25d0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 73 7a 20 31  .  for {set sz 1
25e0: 35 31 7d 20 7b 24 73 7a 3c 38 30 30 30 7d 20 7b  51} {$sz<8000} {
25f0: 73 65 74 20 73 7a 20 5b 65 78 70 72 20 24 73 7a  set sz [expr $sz
2600: 2b 34 31 39 5d 7d 20 7b 0a 0a 20 20 20 20 64 6f  +419]} {..    do
2610: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
2620: 32 2e 36 2e 31 2e 24 73 7a 2e 24 6a 6d 6f 64 65  2.6.1.$sz.$jmode
2630: 20 7b 0a 20 20 20 20 20 20 6d 75 6c 74 69 70 6c   {.      multipl
2640: 65 78 5f 64 65 6c 65 74 65 20 74 65 73 74 2e 64  ex_delete test.d
2650: 62 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  b.      sqlite3_
2660: 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61  multiplex_initia
2670: 6c 69 7a 65 20 22 22 20 31 0a 20 20 20 20 20 20  lize "" 1.      
2680: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
2690: 64 62 0a 20 20 20 20 20 20 6d 75 6c 74 69 70 6c  db.      multipl
26a0: 65 78 5f 73 65 74 20 64 62 20 6d 61 69 6e 20 24  ex_set db main $
26b0: 73 7a 20 33 32 0a 20 20 20 20 7d 20 7b 53 51 4c  sz 32.    } {SQL
26c0: 49 54 45 5f 4f 4b 7d 0a 0a 20 20 20 20 64 6f 5f  ITE_OK}..    do_
26d0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
26e0: 2e 36 2e 32 2e 24 73 7a 2e 24 6a 6d 6f 64 65 20  .6.2.$sz.$jmode 
26f0: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
2700: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2710: 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32   page_size = 102
2720: 34 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  4;.        PRAGM
2730: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20  A auto_vacuum = 
2740: 6f 66 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  off;.      }.   
2750: 20 20 20 64 62 20 65 76 61 6c 20 22 50 52 41 47     db eval "PRAG
2760: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  MA journal_mode 
2770: 3d 20 24 6a 6d 6f 64 65 3b 22 0a 20 20 20 20 7d  = $jmode;".    }
2780: 20 24 6a 6d 6f 64 65 0a 0a 20 20 20 20 64 6f 5f   $jmode..    do_
2790: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32  test multiplex-2
27a0: 2e 36 2e 33 2e 24 73 7a 2e 24 6a 6d 6f 64 65 20  .6.3.$sz.$jmode 
27b0: 7b 20 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  { .      execsql
27c0: 20 7b 20 0a 20 20 20 20 20 20 20 20 43 52 45 41   { .        CREA
27d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
27e0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20  IMARY KEY, b);. 
27f0: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
2800: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
2810: 27 6f 6e 65 27 29 3b 0a 20 20 20 20 20 20 20 20  'one');.        
2820: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2830: 41 4c 55 45 53 28 32 2c 20 72 61 6e 64 6f 6d 62  ALUES(2, randomb
2840: 6c 6f 62 28 24 67 5f 63 68 75 6e 6b 5f 73 69 7a  lob($g_chunk_siz
2850: 65 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  e));.      }.   
2860: 20 7d 20 7b 7d 0a 0a 20 20 20 20 64 6f 5f 74 65   } {}..    do_te
2870: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 36  st multiplex-2.6
2880: 2e 34 2e 24 73 7a 2e 24 6a 6d 6f 64 65 20 7b 0a  .4.$sz.$jmode {.
2890: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53        db eval {S
28a0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20  ELECT b FROM t1 
28b0: 57 48 45 52 45 20 61 3d 31 7d 0a 20 20 20 20 7d  WHERE a=1}.    }
28c0: 20 7b 6f 6e 65 7d 0a 0a 20 20 20 20 64 6f 5f 74   {one}..    do_t
28d0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e  est multiplex-2.
28e0: 36 2e 35 2e 24 73 7a 2e 24 6a 6d 6f 64 65 20 7b  6.5.$sz.$jmode {
28f0: 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b  .      db eval {
2900: 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 62 29  SELECT length(b)
2910: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
2920: 3d 32 7d 0a 20 20 20 20 7d 20 5b 6c 69 73 74 20  =2}.    } [list 
2930: 24 67 5f 63 68 75 6e 6b 5f 73 69 7a 65 5d 0a 0a  $g_chunk_size]..
2940: 20 20 20 20 64 6f 5f 74 65 73 74 20 6d 75 6c 74      do_test mult
2950: 69 70 6c 65 78 2d 32 2e 36 2e 36 2e 24 73 7a 2e  iplex-2.6.6.$sz.
2960: 24 6a 6d 6f 64 65 20 7b 20 66 69 6c 65 20 73 69  $jmode { file si
2970: 7a 65 20 5b 6d 75 6c 74 69 70 6c 65 78 5f 6e 61  ze [multiplex_na
2980: 6d 65 20 74 65 73 74 2e 64 62 20 30 5d 20 7d 20  me test.db 0] } 
2990: 5b 6c 69 73 74 20 24 67 5f 63 68 75 6e 6b 5f 73  [list $g_chunk_s
29a0: 69 7a 65 5d 0a 0a 20 20 20 20 64 6f 5f 74 65 73  ize]..    do_tes
29b0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 36 2e  t multiplex-2.6.
29c0: 39 39 2e 24 73 7a 2e 24 6a 6d 6f 64 65 20 7b 0a  99.$sz.$jmode {.
29d0: 20 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20        db close. 
29e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c       sqlite3_mul
29f0: 74 69 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 0a  tiplex_shutdown.
2a00: 20 20 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b      } {SQLITE_OK
2a10: 7d 0a 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  }..  }.}..do_tes
2a20: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 37 2e  t multiplex-2.7.
2a30: 31 20 20 7b 20 6d 75 6c 74 69 70 6c 65 78 5f 64  1  { multiplex_d
2a40: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 7d 20  elete test.db } 
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a70: 20 20 20 20 20 20 7b 7d 0a 64 6f 5f 74 65 73 74        {}.do_test
2a80: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 37 2e 32   multiplex-2.7.2
2a90: 20 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74    { sqlite3_mult
2aa0: 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65  iplex_initialize
2ab0: 20 22 22 20 31 20 7d 20 20 20 20 20 20 20 20 20   "" 1 }         
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
2ae0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
2af0: 65 78 2d 32 2e 37 2e 33 20 20 7b 20 73 71 6c 69  ex-2.7.3  { sqli
2b00: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 7d  te3 db test.db }
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
2b40: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2b50: 78 2d 32 2e 37 2e 34 20 20 7b 20 6c 69 6e 64 65  x-2.7.4  { linde
2b60: 78 20 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53  x [ catchsql { S
2b70: 45 4c 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f  ELECT multiplex_
2b80: 63 6f 6e 74 72 6f 6c 28 32 2c 20 36 35 35 33 36  control(2, 65536
2b90: 29 3b 20 7d 20 5d 20 30 20 7d 20 20 7b 30 7d 0a  ); } ] 0 }  {0}.
2ba0: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2bb0: 78 2d 32 2e 37 2e 35 20 20 7b 20 6c 69 6e 64 65  x-2.7.5  { linde
2bc0: 78 20 5b 20 63 61 74 63 68 73 71 6c 20 7b 20 53  x [ catchsql { S
2bd0: 45 4c 45 43 54 20 6d 75 6c 74 69 70 6c 65 78 5f  ELECT multiplex_
2be0: 63 6f 6e 74 72 6f 6c 28 31 2c 20 30 29 3b 20 7d  control(1, 0); }
2bf0: 20 5d 20 30 20 7d 20 20 20 20 20 20 7b 30 7d 0a   ] 0 }      {0}.
2c00: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2c10: 78 2d 32 2e 37 2e 36 20 7b 20 0a 20 20 65 78 65  x-2.7.6 { .  exe
2c20: 63 73 71 6c 20 7b 20 0a 20 20 20 20 43 52 45 41  csql { .    CREA
2c30: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
2c40: 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20  IMARY KEY, b);. 
2c50: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2c60: 31 20 56 41 4c 55 45 53 28 31 2c 20 72 61 6e 64  1 VALUES(1, rand
2c70: 6f 6d 62 6c 6f 62 28 31 30 30 30 29 29 3b 0a 20  omblob(1000));. 
2c80: 20 7d 0a 7d 20 7b 7d 0a 23 20 76 65 72 69 66 79   }.} {}.# verify
2c90: 20 6f 6e 6c 79 20 6f 6e 65 20 66 69 6c 65 2c 20   only one file, 
2ca0: 61 6e 64 20 66 69 6c 65 20 73 69 7a 65 20 69 73  and file size is
2cb0: 20 6c 65 73 73 20 74 68 61 6e 20 63 68 75 6e 6b   less than chunk
2cc0: 73 20 73 69 7a 65 0a 64 6f 5f 74 65 73 74 20 6d  s size.do_test m
2cd0: 75 6c 74 69 70 6c 65 78 2d 32 2e 37 2e 37 20 20  ultiplex-2.7.7  
2ce0: 7b 20 65 78 70 72 20 28 5b 66 69 6c 65 20 73 69  { expr ([file si
2cf0: 7a 65 20 5b 6d 75 6c 74 69 70 6c 65 78 5f 6e 61  ze [multiplex_na
2d00: 6d 65 20 74 65 73 74 2e 64 62 20 30 5d 5d 20 3c  me test.db 0]] <
2d10: 20 36 35 35 33 36 29 20 7d 20 7b 31 7d 0a 64 6f   65536) } {1}.do
2d20: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
2d30: 32 2e 37 2e 38 20 20 7b 20 66 69 6c 65 20 65 78  2.7.8  { file ex
2d40: 69 73 74 73 20 5b 6d 75 6c 74 69 70 6c 65 78 5f  ists [multiplex_
2d50: 6e 61 6d 65 20 74 65 73 74 2e 64 62 20 31 5d 20  name test.db 1] 
2d60: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
2d70: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c   {0}.do_test mul
2d80: 74 69 70 6c 65 78 2d 32 2e 37 2e 39 20 7b 20 0a  tiplex-2.7.9 { .
2d90: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
2da0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
2db0: 56 41 4c 55 45 53 28 32 2c 20 72 61 6e 64 6f 6d  VALUES(2, random
2dc0: 62 6c 6f 62 28 36 35 35 33 36 29 29 3b 0a 20 20  blob(65536));.  
2dd0: 7d 0a 7d 20 7b 7d 0a 23 20 76 65 72 69 66 79 20  }.} {}.# verify 
2de0: 6f 6e 6c 79 20 6f 6e 65 20 66 69 6c 65 2c 20 61  only one file, a
2df0: 6e 64 20 66 69 6c 65 20 73 69 7a 65 20 65 78 63  nd file size exc
2e00: 65 65 64 73 20 63 68 75 6e 6b 73 20 73 69 7a 65  eeds chunks size
2e10: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
2e20: 65 78 2d 32 2e 37 2e 31 30 20 7b 20 65 78 70 72  ex-2.7.10 { expr
2e30: 20 28 5b 66 69 6c 65 20 73 69 7a 65 20 5b 6d 75   ([file size [mu
2e40: 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 74 65 73  ltiplex_name tes
2e50: 74 2e 64 62 20 30 5d 5d 20 3e 20 36 35 35 33 36  t.db 0]] > 65536
2e60: 29 20 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  ) } {1}.do_test 
2e70: 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 37 2e 31 31  multiplex-2.7.11
2e80: 20 7b 20 66 69 6c 65 20 65 78 69 73 74 73 20 5b   { file exists [
2e90: 6d 75 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 74  multiplex_name t
2ea0: 65 73 74 2e 64 62 20 31 5d 20 7d 20 20 20 20 20  est.db 1] }     
2eb0: 20 20 20 20 20 20 20 20 20 20 20 7b 30 7d 0a 64             {0}.d
2ec0: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
2ed0: 2d 32 2e 37 2e 31 32 20 7b 20 64 62 20 63 6c 6f  -2.7.12 { db clo
2ee0: 73 65 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  se }            
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f10: 20 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c    {}.do_test mul
2f20: 74 69 70 6c 65 78 2d 32 2e 37 2e 31 33 20 7b 20  tiplex-2.7.13 { 
2f30: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
2f40: 78 5f 73 68 75 74 64 6f 77 6e 20 7d 20 20 20 20  x_shutdown }    
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
2f70: 4f 4b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  OK}..#----------
2f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2fc0: 23 20 54 72 79 20 73 6f 6d 65 20 74 65 73 74 73  # Try some tests
2fd0: 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2fe0: 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  one connection t
2ff0: 6f 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  o a database fil
3000: 65 2e 20 53 74 69 6c 6c 0a 23 20 69 6e 20 72 6f  e. Still.# in ro
3010: 6c 6c 62 61 63 6b 20 6d 6f 64 65 2e 0a 23 0a 23  llback mode..#.#
3020: 20 20 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 31     multiplex-3.1
3030: 2e 2a 3a 20 54 77 6f 20 63 6f 6e 6e 65 63 74 69  .*: Two connecti
3040: 6f 6e 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ons to a single 
3050: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 23  database file..#
3060: 0a 23 20 20 20 6d 75 6c 74 69 70 6c 65 78 2d 33  .#   multiplex-3
3070: 2e 32 2e 2a 3a 20 54 77 6f 20 63 6f 6e 6e 65 63  .2.*: Two connec
3080: 74 69 6f 6e 73 20 74 6f 20 65 61 63 68 20 6f 66  tions to each of
3090: 20 73 65 76 65 72 61 6c 20 64 61 74 61 62 61 73   several databas
30a0: 65 20 66 69 6c 65 73 20 28 74 68 61 74 0a 23 20  e files (that.# 
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
30c0: 72 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  re in the same m
30d0: 75 6c 74 69 70 6c 65 78 20 67 72 6f 75 70 29 2e  ultiplex group).
30e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  .#.do_test multi
30f0: 70 6c 65 78 2d 33 2e 31 2e 31 20 7b 0a 20 20 6d  plex-3.1.1 {.  m
3100: 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65 20  ultiplex_delete 
3110: 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65  test.db.  sqlite
3120: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74  3_multiplex_init
3130: 69 61 6c 69 7a 65 20 22 22 20 31 0a 20 20 73 71  ialize "" 1.  sq
3140: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
3150: 0a 20 20 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74  .  multiplex_set
3160: 20 64 62 20 6d 61 69 6e 20 33 32 37 36 38 20 31   db main 32768 1
3170: 36 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  6.} {SQLITE_OK}.
3180: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
3190: 78 2d 33 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  x-3.1.2 {.  exec
31a0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
31b0: 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32   page_size = 102
31c0: 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6a 6f  4;.    PRAGMA jo
31d0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c  urnal_mode = del
31e0: 65 74 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ete;.    PRAGMA 
31f0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 6f 66  auto_vacuum = of
3200: 66 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  f;.    CREATE TA
3210: 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59  BLE t1(a PRIMARY
3220: 20 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e   KEY, b);.    IN
3230: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3240: 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20  UES(1, 'one');. 
3250: 20 7d 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 5b   }.  file size [
3260: 6d 75 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 74  multiplex_name t
3270: 65 73 74 2e 64 62 20 30 5d 0a 7d 20 7b 33 30 37  est.db 0].} {307
3280: 32 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  2}.do_test multi
3290: 70 6c 65 78 2d 33 2e 31 2e 33 20 7b 0a 20 20 73  plex-3.1.3 {.  s
32a0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
32b0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43  db.  execsql { C
32c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
32d0: 2c 20 62 29 20 7d 20 64 62 32 0a 7d 20 7b 7d 0a  , b) } db2.} {}.
32e0: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
32f0: 78 2d 33 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63  x-3.1.4 {.  exec
3300: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42  sql { CREATE TAB
3310: 4c 45 20 74 33 28 61 2c 20 62 29 20 7d 0a 7d 20  LE t3(a, b) }.} 
3320: 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  {}.do_test multi
3330: 70 6c 65 78 2d 33 2e 31 2e 35 20 7b 0a 20 20 63  plex-3.1.5 {.  c
3340: 61 74 63 68 73 71 6c 20 7b 20 43 52 45 41 54 45  atchsql { CREATE
3350: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 29 20   TABLE t3(a, b) 
3360: 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 33  }.} {1 {table t3
3370: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 7d   already exists}
3380: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
3390: 6c 65 78 2d 33 2e 31 2e 36 20 7b 0a 20 20 64 62  lex-3.1.6 {.  db
33a0: 20 63 6c 6f 73 65 0a 20 20 64 62 32 20 63 6c 6f   close.  db2 clo
33b0: 73 65 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74  se.} {}..do_test
33c0: 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e 31   multiplex-3.2.1
33d0: 61 20 7b 0a 0a 20 20 6d 75 6c 74 69 70 6c 65 78  a {..  multiplex
33e0: 5f 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a  _delete test.db.
33f0: 20 20 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65    multiplex_dele
3400: 74 65 20 74 65 73 74 32 2e 64 62 0a 0a 20 20 73  te test2.db..  s
3410: 71 6c 69 74 65 33 20 64 62 31 61 20 74 65 73 74  qlite3 db1a test
3420: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
3430: 32 61 20 74 65 73 74 32 2e 64 62 0a 0a 20 20 66  2a test2.db..  f
3440: 6f 72 65 61 63 68 20 64 62 20 7b 64 62 31 61 20  oreach db {db1a 
3450: 64 62 32 61 7d 20 7b 0a 20 20 20 20 65 78 65 63  db2a} {.    exec
3460: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
3470: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31  MA page_size = 1
3480: 30 32 34 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  024;.      PRAGM
3490: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  A journal_mode =
34a0: 20 64 65 6c 65 74 65 3b 0a 20 20 20 20 20 20 50   delete;.      P
34b0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
34c0: 6d 20 3d 20 6f 66 66 3b 0a 20 20 20 20 20 20 43  m = off;.      C
34d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
34e0: 2c 20 62 29 3b 0a 20 20 20 20 7d 20 24 64 62 0a  , b);.    } $db.
34f0: 20 20 7d 0a 0a 20 20 6c 69 73 74 20 5b 66 69 6c    }..  list [fil
3500: 65 20 73 69 7a 65 20 5b 6d 75 6c 74 69 70 6c 65  e size [multiple
3510: 78 5f 6e 61 6d 65 20 74 65 73 74 2e 64 62 20 30  x_name test.db 0
3520: 5d 5d 20 5b 66 69 6c 65 20 73 69 7a 65 20 5b 6d  ]] [file size [m
3530: 75 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20 74 65  ultiplex_name te
3540: 73 74 32 2e 64 62 20 30 5d 5d 0a 7d 20 7b 32 30  st2.db 0]].} {20
3550: 34 38 20 32 30 34 38 7d 0a 0a 64 6f 5f 74 65 73  48 2048}..do_tes
3560: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e  t multiplex-3.2.
3570: 31 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  1b {.  sqlite3 d
3580: 62 31 62 20 74 65 73 74 2e 64 62 0a 20 20 73 71  b1b test.db.  sq
3590: 6c 69 74 65 33 20 64 62 32 62 20 74 65 73 74 32  lite3 db2b test2
35a0: 2e 64 62 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73  .db.} {}..do_tes
35b0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e  t multiplex-3.2.
35c0: 32 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  2 { execsql { IN
35d0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
35e0: 55 45 53 28 27 78 27 2c 20 27 79 27 29 20 7d 20  UES('x', 'y') } 
35f0: 64 62 31 61 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73  db1a } {}.do_tes
3600: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e  t multiplex-3.2.
3610: 33 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  3 { execsql { IN
3620: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3630: 55 45 53 28 27 76 27 2c 20 27 77 27 29 20 7d 20  UES('v', 'w') } 
3640: 64 62 31 62 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73  db1b } {}.do_tes
3650: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e  t multiplex-3.2.
3660: 34 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  4 { execsql { IN
3670: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3680: 55 45 53 28 27 74 27 2c 20 27 75 27 29 20 7d 20  UES('t', 'u') } 
3690: 64 62 32 61 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73  db2a } {}.do_tes
36a0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e  t multiplex-3.2.
36b0: 35 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e  5 { execsql { IN
36c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
36d0: 55 45 53 28 27 72 27 2c 20 27 73 27 29 20 7d 20  UES('r', 's') } 
36e0: 64 62 32 62 20 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  db2b } {}..do_te
36f0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32  st multiplex-3.2
3700: 2e 36 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20  .6 { .  execsql 
3710: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
3720: 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c   VALUES(randombl
3730: 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62  ob(500), randomb
3740: 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 31 61  lob(500)) } db1a
3750: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75  .} {}.do_test mu
3760: 6c 74 69 70 6c 65 78 2d 33 2e 32 2e 37 20 7b 20  ltiplex-3.2.7 { 
3770: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
3780: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3790: 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30  ES(randomblob(50
37a0: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  0), randomblob(5
37b0: 30 30 29 29 20 7d 20 64 62 31 62 0a 7d 20 7b 7d  00)) } db1b.} {}
37c0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
37d0: 65 78 2d 33 2e 32 2e 38 20 7b 20 0a 20 20 65 78  ex-3.2.8 { .  ex
37e0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
37f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
3800: 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72  ndomblob(500), r
3810: 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20  andomblob(500)) 
3820: 7d 20 64 62 32 61 0a 7d 20 7b 7d 0a 64 6f 5f 74  } db2a.} {}.do_t
3830: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e  est multiplex-3.
3840: 32 2e 39 20 7b 20 0a 20 20 65 78 65 63 73 71 6c  2.9 { .  execsql
3850: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
3860: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  1 VALUES(randomb
3870: 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d  lob(500), random
3880: 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32  blob(500)) } db2
3890: 62 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  b.} {}..do_test 
38a0: 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 33 2e 31 20  multiplex-3.3.1 
38b0: 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49  { .  execsql { I
38c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
38d0: 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  LUES(randomblob(
38e0: 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  500), randomblob
38f0: 28 35 30 30 29 29 20 7d 20 64 62 31 61 0a 20 20  (500)) } db1a.  
3900: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
3910: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3920: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c  randomblob(500),
3930: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29   randomblob(500)
3940: 29 20 7d 20 64 62 31 62 0a 20 20 65 78 65 63 73  ) } db1b.  execs
3950: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
3960: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f   t1 VALUES(rando
3970: 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64  mblob(500), rand
3980: 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64  omblob(500)) } d
3990: 62 32 61 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  b2a.  execsql { 
39a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
39b0: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
39c0: 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (500), randomblo
39d0: 62 28 35 30 30 29 29 20 7d 20 64 62 32 62 0a 7d  b(500)) } db2b.}
39e0: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c   {}..do_test mul
39f0: 74 69 70 6c 65 78 2d 33 2e 32 2e 58 20 7b 0a 20  tiplex-3.2.X {. 
3a00: 20 66 6f 72 65 61 63 68 20 64 62 20 7b 64 62 31   foreach db {db1
3a10: 61 20 64 62 32 61 20 64 62 32 62 20 64 62 31 62  a db2a db2b db1b
3a20: 7d 20 7b 20 63 61 74 63 68 20 7b 20 24 64 62 20  } { catch { $db 
3a30: 63 6c 6f 73 65 20 7d 20 7d 0a 7d 20 7b 7d 0a 0a  close } }.} {}..
3a40: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 73 71  ----------.#..sq
3a90: 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f  lite3_multiplex_
3aa0: 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31 0a  initialize "" 1.
3ab0: 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 64 62  multiplex_set db
3ac0: 20 6d 61 69 6e 20 33 32 37 36 38 20 31 36 0a 0a   main 32768 16..
3ad0: 23 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20  # Return a list 
3ae0: 6f 66 20 61 6c 6c 20 63 75 72 72 65 6e 74 6c 79  of all currently
3af0: 20 64 65 66 69 6e 65 64 20 6d 75 6c 74 69 70 6c   defined multipl
3b00: 65 78 73 2e 0a 70 72 6f 63 20 6d 75 6c 74 69 70  exs..proc multip
3b10: 6c 65 78 5f 6c 69 73 74 20 7b 7d 20 7b 0a 20 20  lex_list {} {.  
3b20: 73 65 74 20 61 6c 6c 71 20 7b 7d 0a 20 20 66 6f  set allq {}.  fo
3b30: 72 65 61 63 68 20 71 20 5b 73 71 6c 69 74 65 33  reach q [sqlite3
3b40: 5f 6d 75 6c 74 69 70 6c 65 78 5f 64 75 6d 70 5d  _multiplex_dump]
3b50: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 61   {.    lappend a
3b60: 6c 6c 71 20 5b 6c 69 6e 64 65 78 20 24 71 20 30  llq [lindex $q 0
3b70: 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 5b  ].  }.  return [
3b80: 6c 73 6f 72 74 20 24 61 6c 6c 71 5d 0a 7d 0a 0a  lsort $allq].}..
3b90: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
3ba0: 78 2d 34 2e 31 2e 36 20 7b 0a 20 20 6d 75 6c 74  x-4.1.6 {.  mult
3bb0: 69 70 6c 65 78 5f 64 65 6c 65 74 65 20 74 65 73  iplex_delete tes
3bc0: 74 32 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20  t2.db.  sqlite3 
3bd0: 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20 64 62  db test2.db.  db
3be0: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41   eval {CREATE TA
3bf0: 42 4c 45 20 74 32 28 78 29 3b 20 49 4e 53 45 52  BLE t2(x); INSER
3c00: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
3c10: 28 27 74 61 62 2d 74 32 27 29 3b 7d 0a 20 20 73  ('tab-t2');}.  s
3c20: 65 74 20 72 65 73 20 5b 6d 75 6c 74 69 70 6c 65  et res [multiple
3c30: 78 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20 5b  x_list].  list [
3c40: 72 65 67 65 78 70 20 7b 74 65 73 74 32 2e 64 62  regexp {test2.db
3c50: 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 7d 0a 64 6f  } $res].} {1}.do
3c60: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
3c70: 34 2e 31 2e 36 61 20 7b 0a 20 20 73 71 6c 69 74  4.1.6a {.  sqlit
3c80: 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a  e3 db2 test2.db.
3c90: 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45    db2 eval {SELE
3ca0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
3cb0: 7b 74 61 62 2d 74 32 7d 0a 64 6f 5f 74 65 73 74  {tab-t2}.do_test
3cc0: 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e 31 2e 37   multiplex-4.1.7
3cd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   {.  execsql {IN
3ce0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
3cf0: 55 45 53 28 7a 65 72 6f 62 6c 6f 62 28 32 30 30  UES(zeroblob(200
3d00: 30 30 30 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  000))}.} {}.do_t
3d10: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e  est multiplex-4.
3d20: 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  1.8 {.  sqlite3 
3d30: 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 64  db2 test2.db.  d
3d40: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
3d50: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32  count(*) FROM t2
3d60: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
3d70: 6d 75 6c 74 69 70 6c 65 78 2d 34 2e 31 2e 38 61  multiplex-4.1.8a
3d80: 20 7b 0a 20 20 20 64 62 32 20 65 76 61 6c 20 7b   {.   db2 eval {
3d90: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20   DELETE FROM t2 
3da0: 57 48 45 52 45 20 78 20 3d 20 27 74 61 62 2d 74  WHERE x = 'tab-t
3db0: 32 27 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  2' }.} {}.do_tes
3dc0: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e 31 2e  t multiplex-4.1.
3dd0: 38 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  8b {.  sqlite3 d
3de0: 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 64 62  b2 test2.db.  db
3df0: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  2 eval {SELECT c
3e00: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 7d  ount(*) FROM t2}
3e10: 0a 7d 20 7b 31 7d 0a 0a 0a 64 6f 5f 74 65 73 74  .} {1}...do_test
3e20: 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e 31 2e 39   multiplex-4.1.9
3e30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   {.  execsql {IN
3e40: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
3e50: 55 45 53 28 7a 65 72 6f 62 6c 6f 62 28 32 30 30  UES(zeroblob(200
3e60: 30 30 30 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  000))}.} {}.do_t
3e70: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e  est multiplex-4.
3e80: 31 2e 31 30 20 7b 0a 20 20 73 65 74 20 72 65 73  1.10 {.  set res
3e90: 20 5b 6d 75 6c 74 69 70 6c 65 78 5f 6c 69 73 74   [multiplex_list
3ea0: 5d 0a 20 20 6c 69 73 74 20 5b 72 65 67 65 78 70  ].  list [regexp
3eb0: 20 7b 74 65 73 74 32 2e 64 62 7d 20 24 72 65 73   {test2.db} $res
3ec0: 5d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  ].} {1}.do_test 
3ed0: 6d 75 6c 74 69 70 6c 65 78 2d 34 2e 31 2e 31 31  multiplex-4.1.11
3ee0: 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20   {.  db2 close. 
3ef0: 20 73 65 74 20 72 65 73 20 5b 6d 75 6c 74 69 70   set res [multip
3f00: 6c 65 78 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74  lex_list].  list
3f10: 20 5b 72 65 67 65 78 70 20 7b 74 65 73 74 32 2e   [regexp {test2.
3f20: 64 62 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 7d 0a  db} $res].} {1}.
3f30: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
3f40: 78 2d 34 2e 31 2e 31 32 20 7b 0a 20 20 64 62 20  x-4.1.12 {.  db 
3f50: 63 6c 6f 73 65 0a 20 20 6d 75 6c 74 69 70 6c 65  close.  multiple
3f60: 78 5f 6c 69 73 74 0a 7d 20 7b 7d 0a 0a 0a 23 2d  x_list.} {}...#-
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fb0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66  --------.# The f
3fc0: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 74  ollowing tests t
3fd0: 65 73 74 20 74 68 61 74 20 74 68 65 20 6d 75 6c  est that the mul
3fe0: 74 69 70 6c 65 78 20 56 46 53 20 68 61 6e 64 6c  tiplex VFS handl
3ff0: 65 73 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 49 4f  es malloc and IO
4000: 20 0a 23 20 65 72 72 6f 72 73 2e 0a 23 0a 0a 73   .# errors..#..s
4010: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
4020: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31  _initialize "" 1
4030: 0a 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 64  .multiplex_set d
4040: 62 20 6d 61 69 6e 20 33 32 37 36 38 20 31 36 0a  b main 32768 16.
4050: 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73  .do_faultsim_tes
4060: 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 31 20  t multiplex-5.1 
4070: 2d 70 72 65 70 20 7b 0a 20 20 63 61 74 63 68 20  -prep {.  catch 
4080: 7b 64 62 20 63 6c 6f 73 65 7d 0a 7d 20 2d 62 6f  {db close}.} -bo
4090: 64 79 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  dy {.  sqlite3 d
40a0: 62 20 74 65 73 74 32 2e 64 62 0a 7d 0a 64 6f 5f  b test2.db.}.do_
40b0: 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 6d 75  faultsim_test mu
40c0: 6c 74 69 70 6c 65 78 2d 35 2e 32 20 2d 70 72 65  ltiplex-5.2 -pre
40d0: 70 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20  p {.  catch {db 
40e0: 63 6c 6f 73 65 7d 0a 7d 20 2d 62 6f 64 79 20 7b  close}.} -body {
40f0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
4100: 73 74 2e 64 62 0a 7d 0a 0a 63 61 74 63 68 20 7b  st.db.}..catch {
4110: 20 64 62 20 63 6c 6f 73 65 20 7d 0a 6d 75 6c 74   db close }.mult
4120: 69 70 6c 65 78 5f 64 65 6c 65 74 65 20 74 65 73  iplex_delete tes
4130: 74 2e 64 62 0a 6d 75 6c 74 69 70 6c 65 78 5f 64  t.db.multiplex_d
4140: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 0a  elete test2.db..
4150: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
4160: 78 2d 35 2e 33 2e 70 72 65 70 20 7b 0a 20 20 73  x-5.3.prep {.  s
4170: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4180: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
4190: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
41a0: 63 75 75 6d 20 3d 20 31 3b 0a 20 20 20 20 50 52  cuum = 1;.    PR
41b0: 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d  AGMA page_size =
41c0: 20 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41 54   1024;.    CREAT
41d0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
41e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
41f0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 30 2c 20  O t1 VALUES(10, 
4200: 7a 65 72 6f 62 6c 6f 62 28 31 32 30 30 29 29 3b  zeroblob(1200));
4210: 0a 20 20 7d 0a 20 20 66 61 75 6c 74 73 69 6d 5f  .  }.  faultsim_
4220: 73 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a 7d  save_and_close.}
4230: 20 7b 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f   {}.do_faultsim_
4240: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35  test multiplex-5
4250: 2e 33 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75  .3 -prep {.  fau
4260: 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e  ltsim_restore_an
4270: 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79  d_reopen.} -body
4280: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44   {.  execsql { D
4290: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a  ELETE FROM t1 }.
42a0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  }..do_test multi
42b0: 70 6c 65 78 2d 35 2e 34 2e 31 20 7b 0a 20 20 63  plex-5.4.1 {.  c
42c0: 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20  atch { db close 
42d0: 7d 0a 20 20 6d 75 6c 74 69 70 6c 65 78 5f 64 65  }.  multiplex_de
42e0: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 66  lete test.db.  f
42f0: 69 6c 65 20 6d 6b 64 69 72 20 74 65 73 74 2e 64  ile mkdir test.d
4300: 62 0a 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20  b.  list [catch 
4310: 7b 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  { sqlite3 db tes
4320: 74 2e 64 62 20 7d 20 6d 73 67 5d 20 24 6d 73 67  t.db } msg] $msg
4330: 0a 7d 20 7b 31 20 7b 75 6e 61 62 6c 65 20 74 6f  .} {1 {unable to
4340: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66   open database f
4350: 69 6c 65 7d 7d 0a 63 61 74 63 68 20 7b 20 66 69  ile}}.catch { fi
4360: 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 2e 64  le delete test.d
4370: 62 20 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d  b }..do_faultsim
4380: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
4390: 35 2e 35 20 2d 70 72 65 70 20 7b 0a 20 20 63 61  5.5 -prep {.  ca
43a0: 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75  tch { sqlite3_mu
43b0: 6c 74 69 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e  ltiplex_shutdown
43c0: 20 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73   }.} -body {.  s
43d0: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
43e0: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31  _initialize "" 1
43f0: 0a 20 20 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74  .  multiplex_set
4400: 20 64 62 20 6d 61 69 6e 20 33 32 37 36 38 20 31   db main 32768 1
4410: 36 0a 7d 0a 0a 23 20 74 65 73 74 20 74 68 61 74  6.}..# test that
4420: 20 6d 69 73 6d 61 74 63 68 20 66 69 6c 65 73 69   mismatch filesi
4430: 7a 65 20 69 73 20 64 65 74 65 63 74 65 64 0a 23  ze is detected.#
4440: 0a 23 20 44 6f 20 6e 6f 74 20 72 75 6e 20 74 68  .# Do not run th
4450: 69 73 20 74 65 73 74 20 69 66 20 24 3a 3a 47 28  is test if $::G(
4460: 70 65 72 6d 3a 70 72 65 73 71 6c 29 20 69 73 20  perm:presql) is 
4470: 73 65 74 2e 20 49 66 20 69 74 20 69 73 20 73 65  set. If it is se
4480: 74 2c 20 74 68 65 6e 20 74 68 65 0a 23 20 65 78  t, then the.# ex
4490: 70 65 63 74 65 64 20 49 4f 20 65 72 72 6f 72 20  pected IO error 
44a0: 77 69 6c 6c 20 6f 63 63 75 72 20 77 69 74 68 69  will occur withi
44b0: 6e 20 74 68 65 20 54 63 6c 20 5b 73 71 6c 69 74  n the Tcl [sqlit
44c0: 65 33 5d 20 77 72 61 70 70 65 72 2c 20 6e 6f 74  e3] wrapper, not
44d0: 20 77 69 74 68 69 6e 0a 23 20 74 68 65 20 66 69   within.# the fi
44e0: 72 73 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  rst SQL statemen
44f0: 74 20 65 78 65 63 75 74 65 64 20 62 65 6c 6f 77  t executed below
4500: 2e 20 54 68 69 73 20 62 72 65 61 6b 73 20 74 68  . This breaks th
4510: 65 20 74 65 73 74 20 63 61 73 65 2e 0a 23 0a 69  e test case..#.i
4520: 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20 65 78 69 73  f {0==[info exis
4530: 74 73 20 3a 3a 47 28 70 65 72 6d 3a 70 72 65 73  ts ::G(perm:pres
4540: 71 6c 29 5d 20 7c 7c 20 24 3a 3a 47 28 70 65 72  ql)] || $::G(per
4550: 6d 3a 70 72 65 73 71 6c 29 20 3d 3d 20 22 22 7d  m:presql) == ""}
4560: 20 7b 0a 20 20 73 65 74 20 61 6c 6c 5f 6a 6f 75   {.  set all_jou
4570: 72 6e 61 6c 5f 6d 6f 64 65 73 20 7b 64 65 6c 65  rnal_modes {dele
4580: 74 65 20 70 65 72 73 69 73 74 20 74 72 75 6e 63  te persist trunc
4590: 61 74 65 20 6d 65 6d 6f 72 79 20 6f 66 66 7d 0a  ate memory off}.
45a0: 20 20 66 6f 72 65 61 63 68 20 6a 6d 6f 64 65 20    foreach jmode 
45b0: 24 61 6c 6c 5f 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  $all_journal_mod
45c0: 65 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  es {.    do_test
45d0: 20 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 36 2e 31   multiplex-5.6.1
45e0: 2e 24 6a 6d 6f 64 65 20 7b 0a 20 20 20 20 20 20  .$jmode {.      
45f0: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
4600: 78 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20 20 20  x_shutdown.     
4610: 20 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74   multiplex_delet
4620: 65 20 74 65 73 74 2e 64 62 0a 20 20 20 20 20 20  e test.db.      
4630: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4640: 64 62 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c  db.      db eval
4650: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
4660: 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30  A page_size = 10
4670: 32 34 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47  24;.        PRAG
4680: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  MA auto_vacuum =
4690: 20 6f 66 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20   off;.      }.  
46a0: 20 20 20 20 64 62 20 65 76 61 6c 20 22 50 52 41      db eval "PRA
46b0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
46c0: 20 3d 20 24 6a 6d 6f 64 65 3b 22 0a 20 20 20 20   = $jmode;".    
46d0: 7d 20 24 6a 6d 6f 64 65 0a 20 20 20 20 64 6f 5f  } $jmode.    do_
46e0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35  test multiplex-5
46f0: 2e 36 2e 32 2e 24 6a 6d 6f 64 65 20 7b 0a 20 20  .6.2.$jmode {.  
4700: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4710: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
4720: 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20  LE t1(a, b);.   
4730: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4740: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 72 61   t1 VALUES(1, ra
4750: 6e 64 6f 6d 62 6c 6f 62 28 31 35 30 30 30 29 29  ndomblob(15000))
4760: 3b 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54  ;.        INSERT
4770: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
4780: 32 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 35  2, randomblob(15
4790: 30 30 30 29 29 3b 0a 20 20 20 20 20 20 20 20 49  000));.        I
47a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
47b0: 4c 55 45 53 28 33 2c 20 72 61 6e 64 6f 6d 62 6c  LUES(3, randombl
47c0: 6f 62 28 31 35 30 30 30 29 29 3b 0a 20 20 20 20  ob(15000));.    
47d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
47e0: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 72 61 6e  t1 VALUES(4, ran
47f0: 64 6f 6d 62 6c 6f 62 28 31 35 30 30 30 29 29 3b  domblob(15000));
4800: 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 20  .        INSERT 
4810: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35  INTO t1 VALUES(5
4820: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 35 30  , randomblob(150
4830: 30 30 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  00));.      }.  
4840: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
4850: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69     sqlite3_multi
4860: 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20  plex_initialize 
4870: 22 22 20 31 0a 20 20 20 20 20 20 73 71 6c 69 74  "" 1.      sqlit
4880: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4890: 20 20 20 20 6d 75 6c 74 69 70 6c 65 78 5f 73 65      multiplex_se
48a0: 74 20 64 62 20 6d 61 69 6e 20 34 30 39 36 20 31  t db main 4096 1
48b0: 36 0a 20 20 20 20 7d 20 7b 53 51 4c 49 54 45 5f  6.    } {SQLITE_
48c0: 4f 4b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  OK}.    do_test 
48d0: 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 36 2e 33 2e  multiplex-5.6.3.
48e0: 24 6a 6d 6f 64 65 20 7b 0a 20 20 20 20 20 20 63  $jmode {.      c
48f0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
4900: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
4910: 20 56 41 4c 55 45 53 28 36 2c 20 72 61 6e 64 6f   VALUES(6, rando
4920: 6d 62 6c 6f 62 28 31 35 30 30 30 29 29 3b 0a 20  mblob(15000));. 
4930: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20       }.    } {1 
4940: 7b 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d  {disk I/O error}
4950: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 6d 75  }.    do_test mu
4960: 6c 74 69 70 6c 65 78 2d 35 2e 36 2e 34 2e 24 6a  ltiplex-5.6.4.$j
4970: 6d 6f 64 65 20 7b 0a 20 20 20 20 20 20 64 62 20  mode {.      db 
4980: 63 6c 6f 73 65 0a 20 20 20 20 7d 20 7b 7d 0a 20  close.    } {}. 
4990: 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   }.}..#---------
49a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49e0: 0a 23 20 54 65 73 74 20 74 68 61 74 20 79 6f 75  .# Test that you
49f0: 20 63 61 6e 20 76 61 63 75 75 6d 20 61 20 6d 75   can vacuum a mu
4a00: 6c 74 69 70 6c 65 78 27 65 64 20 44 42 2e 20 20  ltiplex'ed DB.  
4a10: 0a 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63 75  ..ifcapable vacu
4a20: 75 6d 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 6d 75  um {..do_test mu
4a30: 6c 74 69 70 6c 65 78 2d 36 2e 30 2e 30 20 7b 0a  ltiplex-6.0.0 {.
4a40: 20 20 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65    multiplex_dele
4a50: 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c  te test.db.  sql
4a60: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69  ite3_multiplex_i
4a70: 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31 0a 20  nitialize "" 1. 
4a80: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
4a90: 2e 64 62 0a 20 20 6d 75 6c 74 69 70 6c 65 78 5f  .db.  multiplex_
4aa0: 73 65 74 20 64 62 20 6d 61 69 6e 20 34 30 39 36  set db main 4096
4ab0: 20 31 36 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b   16.} {SQLITE_OK
4ac0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  }..do_test multi
4ad0: 70 6c 65 78 2d 36 2e 31 2e 30 20 7b 0a 20 20 65  plex-6.1.0 {.  e
4ae0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4af0: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d 31 30  GMA page_size=10
4b00: 32 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6a  24;.    PRAGMA j
4b10: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 44 45 4c 45  ournal_mode=DELE
4b20: 54 45 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  TE;.    PRAGMA a
4b30: 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a  uto_vacuum=OFF;.
4b40: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
4b50: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4b60: 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49   t1(a, b);.    I
4b70: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
4b80: 4c 55 45 53 28 31 2c 20 72 61 6e 64 6f 6d 62 6c  LUES(1, randombl
4b90: 6f 62 28 24 67 5f 63 68 75 6e 6b 5f 73 69 7a 65  ob($g_chunk_size
4ba0: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    INSERT I
4bb0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c  NTO t1 VALUES(2,
4bc0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 24 67 5f 63   randomblob($g_c
4bd0: 68 75 6e 6b 5f 73 69 7a 65 29 29 3b 0a 20 20 7d  hunk_size));.  }
4be0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75  .} {}.do_test mu
4bf0: 6c 74 69 70 6c 65 78 2d 36 2e 32 2e 31 20 7b 20  ltiplex-6.2.1 { 
4c00: 66 69 6c 65 20 73 69 7a 65 20 5b 6d 75 6c 74 69  file size [multi
4c10: 70 6c 65 78 5f 6e 61 6d 65 20 74 65 73 74 2e 64  plex_name test.d
4c20: 62 20 30 5d 20 7d 20 5b 6c 69 73 74 20 24 67 5f  b 0] } [list $g_
4c30: 63 68 75 6e 6b 5f 73 69 7a 65 5d 0a 64 6f 5f 74  chunk_size].do_t
4c40: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 36 2e  est multiplex-6.
4c50: 32 2e 32 20 7b 20 66 69 6c 65 20 73 69 7a 65 20  2.2 { file size 
4c60: 5b 6d 75 6c 74 69 70 6c 65 78 5f 6e 61 6d 65 20  [multiplex_name 
4c70: 74 65 73 74 2e 64 62 20 31 5d 20 7d 20 5b 6c 69  test.db 1] } [li
4c80: 73 74 20 24 67 5f 63 68 75 6e 6b 5f 73 69 7a 65  st $g_chunk_size
4c90: 5d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  ]..do_test multi
4ca0: 70 6c 65 78 2d 36 2e 33 2e 30 20 7b 0a 20 20 65  plex-6.3.0 {.  e
4cb0: 78 65 63 73 71 6c 20 7b 20 56 41 43 55 55 4d 20  xecsql { VACUUM 
4cc0: 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  }.} {}..do_test 
4cd0: 6d 75 6c 74 69 70 6c 65 78 2d 36 2e 39 39 20 7b  multiplex-6.99 {
4ce0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 6d 75  .  db close.  mu
4cf0: 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65 20 74  ltiplex_delete t
4d00: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33  est.db.  sqlite3
4d10: 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75 74 64  _multiplex_shutd
4d20: 6f 77 6e 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  own.} {SQLITE_OK
4d30: 7d 0a 0a 7d 0a 0a 0a 63 61 74 63 68 20 7b 20 73  }..}...catch { s
4d40: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
4d50: 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 66 69 6e 69  _shutdown }.fini
4d60: 73 68 5f 74 65 73 74 0a                          sh_test.