/ Hex Artifact Content
Login

Artifact 201607f360704f2a34a43116e239cf68d5229544:


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 70 72 6f 63 20  ommon.tcl..proc 
01d0: 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65  multiplex_delete
01e0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 66 69 6c 65   {name} {.  file
01f0: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24   delete -force $
0200: 6e 61 6d 65 0a 20 20 66 69 6c 65 20 64 65 6c 65  name.  file dele
0210: 74 65 20 2d 66 6f 72 63 65 20 24 6e 61 6d 65 2d  te -force $name-
0220: 6a 6f 75 72 6e 61 6c 0a 20 20 66 69 6c 65 20 64  journal.  file d
0230: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6e 61  elete -force $na
0240: 6d 65 2d 77 61 6c 0a 20 20 66 6f 72 20 7b 73 65  me-wal.  for {se
0250: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 35 7d 20  t i 1} {$i<=15} 
0260: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 66  {incr i} {.    f
0270: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
0280: 65 20 24 6e 61 6d 65 2d 30 30 30 24 69 0a 20 20  e $name-000$i.  
0290: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
02a0: 6f 72 63 65 20 24 6e 61 6d 65 2d 30 30 24 69 0a  orce $name-00$i.
02b0: 20 20 7d 0a 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a    }.}..db close.
02c0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 20  -----------.#   
0310: 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 2e 2a 3a  multiplex-1.1.*:
0320: 20 54 65 73 74 20 69 6e 69 74 69 61 6c 69 7a 65   Test initialize
0330: 20 61 6e 64 20 73 68 75 74 64 6f 77 6e 2e 0a 0a   and shutdown...
0340: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
0350: 78 2d 31 2e 31 20 7b 20 73 71 6c 69 74 65 33 5f  x-1.1 { sqlite3_
0360: 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61  multiplex_initia
0370: 6c 69 7a 65 20 6e 6f 73 75 63 68 76 66 73 20 31  lize nosuchvfs 1
0380: 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52   } {SQLITE_ERROR
0390: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
03a0: 6c 65 78 2d 31 2e 32 20 7b 20 73 71 6c 69 74 65  lex-1.2 { sqlite
03b0: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74  3_multiplex_init
03c0: 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20  ialize "" 1 }   
03d0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
03e0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
03f0: 65 78 2d 31 2e 33 20 7b 20 73 71 6c 69 74 65 33  ex-1.3 { sqlite3
0400: 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69  _multiplex_initi
0410: 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20 20  alize "" 1 }    
0420: 20 20 20 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55      {SQLITE_MISU
0430: 53 45 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  SE}.do_test mult
0440: 69 70 6c 65 78 2d 31 2e 34 20 7b 20 73 71 6c 69  iplex-1.4 { sqli
0450: 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68  te3_multiplex_sh
0460: 75 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20  utdown }        
0470: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f         {SQLITE_O
0480: 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  K}..do_test mult
0490: 69 70 6c 65 78 2d 31 2e 35 20 7b 20 73 71 6c 69  iplex-1.5 { sqli
04a0: 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e  te3_multiplex_in
04b0: 69 74 69 61 6c 69 7a 65 20 22 22 20 30 20 7d 20  itialize "" 0 } 
04c0: 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f         {SQLITE_O
04d0: 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  K}.do_test multi
04e0: 70 6c 65 78 2d 31 2e 36 20 7b 20 73 71 6c 69 74  plex-1.6 { sqlit
04f0: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75  e3_multiplex_shu
0500: 74 64 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20  tdown }         
0510: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b        {SQLITE_OK
0520: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
0530: 6c 65 78 2d 31 2e 37 20 7b 20 73 71 6c 69 74 65  lex-1.7 { sqlite
0540: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74  3_multiplex_init
0550: 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20  ialize "" 1 }   
0560: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d       {SQLITE_OK}
0570: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
0580: 65 78 2d 31 2e 38 20 7b 20 73 71 6c 69 74 65 33  ex-1.8 { sqlite3
0590: 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75 74 64  _multiplex_shutd
05a0: 6f 77 6e 20 7d 20 20 20 20 20 20 20 20 20 20 20  own }           
05b0: 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a      {SQLITE_OK}.
05c0: 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c  .do_test multipl
05d0: 65 78 2d 31 2e 39 20 20 7b 20 73 71 6c 69 74 65  ex-1.9  { sqlite
05e0: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74  3_multiplex_init
05f0: 69 61 6c 69 7a 65 20 22 22 20 31 20 7d 20 20 20  ialize "" 1 }   
0600: 20 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a      {SQLITE_OK}.
0610: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
0620: 78 2d 31 2e 31 30 2e 31 20 7b 20 73 71 6c 69 74  x-1.10.1 { sqlit
0630: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74  e3_multiplex_set
0640: 20 30 78 38 30 30 30 20 31 36 20 7d 20 20 20 20   0x8000 16 }    
0650: 20 20 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64     {SQLITE_OK}.d
0660: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
0670: 2d 31 2e 31 30 2e 32 20 7b 20 73 71 6c 69 74 65  -1.10.2 { sqlite
0680: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20  3_multiplex_set 
0690: 30 78 38 30 30 30 20 2d 31 20 7d 20 20 20 20 20  0x8000 -1 }     
06a0: 20 20 7b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45    {SQLITE_MISUSE
06b0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
06c0: 6c 65 78 2d 31 2e 31 30 2e 33 20 7b 20 73 71 6c  lex-1.10.3 { sql
06d0: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73  ite3_multiplex_s
06e0: 65 74 20 2d 31 20 31 36 20 7d 20 20 20 20 20 20  et -1 16 }      
06f0: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 4d 49 53       {SQLITE_MIS
0700: 55 53 45 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  USE}.do_test mul
0710: 74 69 70 6c 65 78 2d 31 2e 31 30 2e 34 20 7b 20  tiplex-1.10.4 { 
0720: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
0730: 78 5f 73 65 74 20 33 31 20 31 36 20 7d 20 20 20  x_set 31 16 }   
0740: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
0750: 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65 73 74 20  MISUSE}.do_test 
0760: 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31 30 2e 35  multiplex-1.10.5
0770: 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69   { sqlite3_multi
0780: 70 6c 65 78 5f 73 65 74 20 30 78 38 30 30 30 20  plex_set 0x8000 
0790: 33 33 20 7d 20 20 20 20 20 20 20 7b 53 51 4c 49  33 }       {SQLI
07a0: 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74 65  TE_MISUSE}.do_te
07b0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 31  st multiplex-1.1
07c0: 31 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74  1 { sqlite3_mult
07d0: 69 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 20 7d  iplex_shutdown }
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53                {S
07f0: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 0a 23 2d 2d 2d  QLITE_OK}...#---
0800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0840: 2d 2d 2d 2d 2d 2d 0a 23 20 53 6f 6d 65 20 73 69  ------.# Some si
0850: 6d 70 6c 65 20 77 61 72 6d 2d 62 6f 64 79 20 74  mple warm-body t
0860: 65 73 74 73 20 77 69 74 68 20 61 20 73 69 6e 67  ests with a sing
0870: 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  le database file
0880: 20 69 6e 20 72 6f 6c 6c 62 61 63 6b 20 0a 23 20   in rollback .# 
0890: 6d 6f 64 65 3a 0a 23 0a 23 20 20 20 6d 75 6c 74  mode:.#.#   mult
08a0: 69 70 6c 65 78 2d 32 2e 31 2e 2a 3a 20 54 65 73  iplex-2.1.*: Tes
08b0: 74 20 73 69 6d 70 6c 65 20 77 72 69 74 69 6e 67  t simple writing
08c0: 20 74 6f 20 61 20 6d 75 6c 74 69 70 6c 65 78 20   to a multiplex 
08d0: 66 69 6c 65 2e 0a 23 0a 23 20 20 20 6d 75 6c 74  file..#.#   mult
08e0: 69 70 6c 65 78 2d 32 2e 32 2e 2a 3a 20 4d 6f 72  iplex-2.2.*: Mor
08f0: 65 20 77 72 69 74 69 6e 67 2e 0a 23 0a 23 20 20  e writing..#.#  
0900: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 33 2e 2a   multiplex-2.3.*
0910: 3a 20 4f 70 65 6e 20 61 6e 64 20 63 6c 6f 73 65  : Open and close
0920: 20 61 20 73 65 63 6f 6e 64 20 64 62 2e 0a 23 0a   a second db..#.
0930: 23 20 20 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e  #   multiplex-2.
0940: 34 2e 2a 3a 20 54 72 79 20 74 6f 20 73 68 75 74  4.*: Try to shut
0950: 64 6f 77 6e 20 74 68 65 20 6d 75 6c 74 69 70 6c  down the multipl
0960: 65 78 20 73 79 73 74 65 6d 20 62 65 66 6f 72 65  ex system before
0970: 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 64 62 0a   closing the db.
0980: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
0990: 20 66 69 6c 65 2e 20 43 68 65 63 6b 20 74 68 61   file. Check tha
09a0: 74 20 74 68 69 73 20 66 61 69 6c 73 20 61 6e 64  t this fails and
09b0: 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 78 20 73   the multiplex s
09c0: 79 73 74 65 6d 20 73 74 69 6c 6c 20 77 6f 72 6b  ystem still work
09d0: 73 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  s.#             
09e0: 20 20 20 61 66 74 65 72 77 61 72 64 73 2e 20 54     afterwards. T
09f0: 68 65 6e 20 63 6c 6f 73 65 20 74 68 65 20 64 61  hen close the da
0a00: 74 61 62 61 73 65 20 61 6e 64 20 73 75 63 63 65  tabase and succe
0a10: 73 73 66 75 6c 6c 79 20 73 68 75 74 0a 23 20 20  ssfully shut.#  
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
0a30: 77 6e 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 78  wn the multiplex
0a40: 20 73 79 73 74 65 6d 2e 0a 23 0a 23 20 20 20 6d   system..#.#   m
0a50: 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 2a 3a 20  ultiplex-2.5.*: 
0a60: 4d 6f 72 65 20 72 65 61 64 69 6e 67 2f 77 72 69  More reading/wri
0a70: 74 69 6e 67 20 77 69 74 68 20 73 6d 61 6c 6c 20  ting with small 
0a80: 63 68 75 6e 6b 20 73 69 7a 65 2e 0a 0a 73 71 6c  chunk size...sql
0a90: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69  ite3_multiplex_i
0aa0: 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 31 0a 73  nitialize "" 1.s
0ab0: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
0ac0: 5f 73 65 74 20 30 78 38 30 30 30 20 31 36 0a 0a  _set 0x8000 16..
0ad0: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
0ae0: 78 2d 32 2e 31 2e 32 20 7b 0a 20 20 73 71 6c 69  x-2.1.2 {.  sqli
0af0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
0b00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0b10: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d  RAGMA page_size=
0b20: 31 30 32 34 3b 0a 20 20 20 20 50 52 41 47 4d 41  1024;.    PRAGMA
0b30: 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46   auto_vacuum=OFF
0b40: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75  ;.    PRAGMA jou
0b50: 72 6e 61 6c 5f 6d 6f 64 65 3d 44 45 4c 45 54 45  rnal_mode=DELETE
0b60: 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ;.  }.  execsql 
0b70: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
0b80: 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20  LE t1(a, b);.   
0b90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0ba0: 56 41 4c 55 45 53 28 31 2c 20 72 61 6e 64 6f 6d  VALUES(1, random
0bb0: 62 6c 6f 62 28 31 31 30 30 29 29 3b 0a 20 20 20  blob(1100));.   
0bc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0bd0: 56 41 4c 55 45 53 28 32 2c 20 72 61 6e 64 6f 6d  VALUES(2, random
0be0: 62 6c 6f 62 28 31 31 30 30 29 29 3b 0a 20 20 7d  blob(1100));.  }
0bf0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75  .} {}.do_test mu
0c00: 6c 74 69 70 6c 65 78 2d 32 2e 31 2e 33 20 7b 20  ltiplex-2.1.3 { 
0c10: 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64  file size test.d
0c20: 62 20 7d 20 7b 34 30 39 36 7d 0a 64 6f 5f 74 65  b } {4096}.do_te
0c30: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 31  st multiplex-2.1
0c40: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0c50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0c60: 56 41 4c 55 45 53 28 33 2c 20 72 61 6e 64 6f 6d  VALUES(3, random
0c70: 62 6c 6f 62 28 31 31 30 30 29 29 20 7d 0a 7d 20  blob(1100)) }.} 
0c80: 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  {}..do_test mult
0c90: 69 70 6c 65 78 2d 32 2e 32 2e 31 20 7b 0a 20 20  iplex-2.2.1 {.  
0ca0: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
0cb0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0cc0: 33 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 31  3, randomblob(11
0cd0: 30 30 29 29 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  00)) }.} {}.do_t
0ce0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e  est multiplex-2.
0cf0: 32 2e 33 20 7b 20 66 69 6c 65 20 73 69 7a 65 20  2.3 { file size 
0d00: 74 65 73 74 2e 64 62 20 7d 20 7b 36 31 34 34 7d  test.db } {6144}
0d10: 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  ..do_test multip
0d20: 6c 65 78 2d 32 2e 33 2e 31 20 7b 0a 20 20 73 71  lex-2.3.1 {.  sq
0d30: 6c 69 74 65 33 20 64 62 32 20 62 61 6b 2e 64 62  lite3 db2 bak.db
0d40: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b  .  db2 close.} {
0d50: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  }..do_test multi
0d60: 70 6c 65 78 2d 32 2e 34 2e 31 20 7b 0a 20 20 73  plex-2.4.1 {.  s
0d70: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
0d80: 5f 73 68 75 74 64 6f 77 6e 0a 7d 20 7b 53 51 4c  _shutdown.} {SQL
0d90: 49 54 45 5f 4d 49 53 55 53 45 7d 0a 64 6f 5f 74  ITE_MISUSE}.do_t
0da0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e  est multiplex-2.
0db0: 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.2 {.  execsql 
0dc0: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
0dd0: 20 56 41 4c 55 45 53 28 33 2c 20 72 61 6e 64 6f   VALUES(3, rando
0de0: 6d 62 6c 6f 62 28 31 31 30 30 29 29 20 7d 0a 7d  mblob(1100)) }.}
0df0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74   {}.do_test mult
0e00: 69 70 6c 65 78 2d 32 2e 34 2e 34 20 7b 20 66 69  iplex-2.4.4 { fi
0e10: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 20  le size test.db 
0e20: 7d 20 7b 37 31 36 38 7d 0a 64 6f 5f 74 65 73 74  } {7168}.do_test
0e30: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 34 2e 39   multiplex-2.4.9
0e40: 39 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  9 {.  db close. 
0e50: 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
0e60: 65 78 5f 73 68 75 74 64 6f 77 6e 0a 7d 20 7b 53  ex_shutdown.} {S
0e70: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 0a 64 6f 5f 74  QLITE_OK}...do_t
0e80: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e  est multiplex-2.
0e90: 35 2e 31 20 7b 0a 20 20 6d 75 6c 74 69 70 6c 65  5.1 {.  multiple
0ea0: 78 5f 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  x_delete test.db
0eb0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69  .  sqlite3_multi
0ec0: 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20  plex_initialize 
0ed0: 22 22 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 6d  "" 1.  sqlite3_m
0ee0: 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 30 78 31  ultiplex_set 0x1
0ef0: 30 30 30 20 31 36 0a 7d 20 7b 53 51 4c 49 54 45  000 16.} {SQLITE
0f00: 5f 4f 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75  _OK}..do_test mu
0f10: 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 32 20 7b 0a  ltiplex-2.5.2 {.
0f20: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
0f30: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0f40: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
0f50: 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20  _size = 1024;.  
0f60: 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c    PRAGMA journal
0f70: 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65 3b 0a  _mode = delete;.
0f80: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
0f90: 76 61 63 75 75 6d 20 3d 20 6f 66 66 3b 0a 20 20  vacuum = off;.  
0fa0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0fb0: 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  1(a PRIMARY KEY,
0fc0: 20 62 29 3b 0a 20 20 7d 0a 7d 20 7b 64 65 6c 65   b);.  }.} {dele
0fd0: 74 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  te}..do_test mul
0fe0: 74 69 70 6c 65 78 2d 32 2e 35 2e 33 20 7b 20 0a  tiplex-2.5.3 { .
0ff0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
1000: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1010: 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 29  VALUES(1, 'one')
1020: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1030: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20 72  O t1 VALUES(2, r
1040: 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29 29  andomblob(4000))
1050: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1060: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c 20 27  O t1 VALUES(3, '
1070: 74 68 72 65 65 27 29 3b 0a 20 20 20 20 49 4e 53  three');.    INS
1080: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1090: 45 53 28 34 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  ES(4, randomblob
10a0: 28 34 30 30 30 29 29 3b 0a 20 20 20 20 49 4e 53  (4000));.    INS
10b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
10c0: 45 53 28 35 2c 20 27 66 69 76 65 27 29 20 0a 20  ES(5, 'five') . 
10d0: 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74   }.} {}..do_test
10e0: 20 6d 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 34   multiplex-2.5.4
10f0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1100: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1110: 48 45 52 45 20 61 3d 31 7d 0a 7d 20 7b 31 20 6f  HERE a=1}.} {1 o
1120: 6e 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c  ne}..do_test mul
1130: 74 69 70 6c 65 78 2d 32 2e 35 2e 35 20 7b 0a 20  tiplex-2.5.5 {. 
1140: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
1150: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1160: 20 61 3d 33 7d 0a 7d 20 7b 33 20 74 68 72 65 65   a=3}.} {3 three
1170: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  }..do_test multi
1180: 70 6c 65 78 2d 32 2e 35 2e 36 20 7b 0a 20 20 64  plex-2.5.6 {.  d
1190: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
11a0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
11b0: 3d 35 7d 0a 7d 20 7b 35 20 66 69 76 65 7d 0a 0a  =5}.} {5 five}..
11c0: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
11d0: 78 2d 32 2e 35 2e 37 20 7b 0a 20 20 64 62 20 65  x-2.5.7 {.  db e
11e0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 61 2c 6c 65  val {SELECT a,le
11f0: 6e 67 74 68 28 62 29 20 46 52 4f 4d 20 74 31 20  ngth(b) FROM t1 
1200: 57 48 45 52 45 20 61 3d 32 7d 0a 7d 20 7b 32 20  WHERE a=2}.} {2 
1210: 34 30 30 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d  4000}..do_test m
1220: 75 6c 74 69 70 6c 65 78 2d 32 2e 35 2e 38 20 7b  ultiplex-2.5.8 {
1230: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
1240: 43 54 20 61 2c 6c 65 6e 67 74 68 28 62 29 20 46  CT a,length(b) F
1250: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 34  ROM t1 WHERE a=4
1260: 7d 0a 7d 20 7b 34 20 34 30 30 30 7d 0a 0a 64 6f  }.} {4 4000}..do
1270: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1280: 32 2e 35 2e 39 39 20 7b 0a 20 20 64 62 20 63 6c  2.5.99 {.  db cl
1290: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  ose.  sqlite3_mu
12a0: 6c 74 69 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e  ltiplex_shutdown
12b0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a  .} {SQLITE_OK}..
12c0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 72 79  ----------.# Try
1310: 20 73 6f 6d 65 20 74 65 73 74 73 20 77 69 74 68   some tests with
1320: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 63   more than one c
1330: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64  onnection to a d
1340: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 53 74  atabase file. St
1350: 69 6c 6c 0a 23 20 69 6e 20 72 6f 6c 6c 62 61 63  ill.# in rollbac
1360: 6b 20 6d 6f 64 65 2e 0a 23 0a 23 20 20 20 6d 75  k mode..#.#   mu
1370: 6c 74 69 70 6c 65 78 2d 33 2e 31 2e 2a 3a 20 54  ltiplex-3.1.*: T
1380: 77 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74  wo connections t
1390: 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  o a single datab
13a0: 61 73 65 20 66 69 6c 65 2e 0a 23 0a 23 20 20 20  ase file..#.#   
13b0: 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e 2a 3a  multiplex-3.2.*:
13c0: 20 54 77 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   Two connections
13d0: 20 74 6f 20 65 61 63 68 20 6f 66 20 73 65 76 65   to each of seve
13e0: 72 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  ral database fil
13f0: 65 73 20 28 74 68 61 74 0a 23 20 20 20 20 20 20  es (that.#      
1400: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 69 6e            are in
1410: 20 74 68 65 20 73 61 6d 65 20 6d 75 6c 74 69 70   the same multip
1420: 6c 65 78 20 67 72 6f 75 70 29 2e 0a 23 0a 64 6f  lex group)..#.do
1430: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1440: 33 2e 31 2e 31 20 7b 0a 20 20 6d 75 6c 74 69 70  3.1.1 {.  multip
1450: 6c 65 78 5f 64 65 6c 65 74 65 20 74 65 73 74 2e  lex_delete test.
1460: 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c  db.  sqlite3_mul
1470: 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a  tiplex_initializ
1480: 65 20 22 22 20 31 0a 20 20 73 71 6c 69 74 65 33  e "" 1.  sqlite3
1490: 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 65 74 20 30  _multiplex_set 0
14a0: 78 38 30 30 30 20 31 36 0a 7d 20 7b 53 51 4c 49  x8000 16.} {SQLI
14b0: 54 45 5f 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 6d  TE_OK}.do_test m
14c0: 75 6c 74 69 70 6c 65 78 2d 33 2e 31 2e 32 20 7b  ultiplex-3.1.2 {
14d0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
14e0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
14f0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67  {.    PRAGMA pag
1500: 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20  e_size = 1024;. 
1510: 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61     PRAGMA journa
1520: 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65 3b  l_mode = delete;
1530: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f  .    PRAGMA auto
1540: 5f 76 61 63 75 75 6d 20 3d 20 6f 66 66 3b 0a 20  _vacuum = off;. 
1550: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1560: 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t1(a PRIMARY KEY
1570: 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , b);.    INSERT
1580: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1590: 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 7d 0a 20  1, 'one');.  }. 
15a0: 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e   file size test.
15b0: 64 62 0a 7d 20 7b 33 30 37 32 7d 0a 64 6f 5f 74  db.} {3072}.do_t
15c0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e  est multiplex-3.
15d0: 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  1.3 {.  sqlite3 
15e0: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 65 78  db2 test.db.  ex
15f0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54  ecsql { CREATE T
1600: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 20 7d 20  ABLE t2(a, b) } 
1610: 64 62 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  db2.} {}.do_test
1620: 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 31 2e 34   multiplex-3.1.4
1630: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43   {.  execsql { C
1640: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
1650: 2c 20 62 29 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  , b) }.} {}.do_t
1660: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e  est multiplex-3.
1670: 31 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.5 {.  catchsql
1680: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
1690: 74 33 28 61 2c 20 62 29 20 7d 0a 7d 20 7b 31 20  t3(a, b) }.} {1 
16a0: 7b 74 61 62 6c 65 20 74 33 20 61 6c 72 65 61 64  {table t3 alread
16b0: 79 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65  y exists}}.do_te
16c0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 31  st multiplex-3.1
16d0: 2e 36 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .6 {.  db close.
16e0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b 7d    db2 close.} {}
16f0: 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  ..do_test multip
1700: 6c 65 78 2d 33 2e 32 2e 31 61 20 7b 0a 0a 20 20  lex-3.2.1a {..  
1710: 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65  multiplex_delete
1720: 20 74 65 73 74 2e 64 62 0a 20 20 6d 75 6c 74 69   test.db.  multi
1730: 70 6c 65 78 5f 64 65 6c 65 74 65 20 74 65 73 74  plex_delete test
1740: 32 2e 64 62 0a 0a 20 20 73 71 6c 69 74 65 33 20  2.db..  sqlite3 
1750: 64 62 31 61 20 74 65 73 74 2e 64 62 0a 20 20 73  db1a test.db.  s
1760: 71 6c 69 74 65 33 20 64 62 32 61 20 74 65 73 74  qlite3 db2a test
1770: 32 2e 64 62 0a 0a 20 20 66 6f 72 65 61 63 68 20  2.db..  foreach 
1780: 64 62 20 7b 64 62 31 61 20 64 62 32 61 7d 20 7b  db {db1a db2a} {
1790: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
17a0: 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65       PRAGMA page
17b0: 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20  _size = 1024;.  
17c0: 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e      PRAGMA journ
17d0: 61 6c 5f 6d 6f 64 65 20 3d 20 64 65 6c 65 74 65  al_mode = delete
17e0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
17f0: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 6f 66 66  uto_vacuum = off
1800: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
1810: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20  ABLE t1(a, b);. 
1820: 20 20 20 7d 20 24 64 62 0a 20 20 7d 0a 0a 20 20     } $db.  }..  
1830: 6c 69 73 74 20 5b 66 69 6c 65 20 73 69 7a 65 20  list [file size 
1840: 74 65 73 74 2e 64 62 5d 20 5b 66 69 6c 65 20 73  test.db] [file s
1850: 69 7a 65 20 74 65 73 74 32 2e 64 62 5d 0a 7d 20  ize test2.db].} 
1860: 7b 32 30 34 38 20 32 30 34 38 7d 0a 0a 64 6f 5f  {2048 2048}..do_
1870: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33  test multiplex-3
1880: 2e 32 2e 31 62 20 7b 0a 20 20 73 71 6c 69 74 65  .2.1b {.  sqlite
1890: 33 20 64 62 31 62 20 74 65 73 74 2e 64 62 0a 20  3 db1b test.db. 
18a0: 20 73 71 6c 69 74 65 33 20 64 62 32 62 20 74 65   sqlite3 db2b te
18b0: 73 74 32 2e 64 62 0a 7d 20 7b 7d 0a 0a 64 6f 5f  st2.db.} {}..do_
18c0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33  test multiplex-3
18d0: 2e 32 2e 32 20 7b 20 65 78 65 63 73 71 6c 20 7b  .2.2 { execsql {
18e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
18f0: 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29  VALUES('x', 'y')
1900: 20 7d 20 64 62 31 61 20 7d 20 7b 7d 0a 64 6f 5f   } db1a } {}.do_
1910: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33  test multiplex-3
1920: 2e 32 2e 33 20 7b 20 65 78 65 63 73 71 6c 20 7b  .2.3 { execsql {
1930: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1940: 56 41 4c 55 45 53 28 27 76 27 2c 20 27 77 27 29  VALUES('v', 'w')
1950: 20 7d 20 64 62 31 62 20 7d 20 7b 7d 0a 64 6f 5f   } db1b } {}.do_
1960: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33  test multiplex-3
1970: 2e 32 2e 34 20 7b 20 65 78 65 63 73 71 6c 20 7b  .2.4 { execsql {
1980: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1990: 56 41 4c 55 45 53 28 27 74 27 2c 20 27 75 27 29  VALUES('t', 'u')
19a0: 20 7d 20 64 62 32 61 20 7d 20 7b 7d 0a 64 6f 5f   } db2a } {}.do_
19b0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33  test multiplex-3
19c0: 2e 32 2e 35 20 7b 20 65 78 65 63 73 71 6c 20 7b  .2.5 { execsql {
19d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
19e0: 56 41 4c 55 45 53 28 27 72 27 2c 20 27 73 27 29  VALUES('r', 's')
19f0: 20 7d 20 64 62 32 62 20 7d 20 7b 7d 0a 0a 64 6f   } db2b } {}..do
1a00: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
1a10: 33 2e 32 2e 36 20 7b 20 0a 20 20 65 78 65 63 73  3.2.6 { .  execs
1a20: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
1a30: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f   t1 VALUES(rando
1a40: 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64  mblob(500), rand
1a50: 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64  omblob(500)) } d
1a60: 62 31 61 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  b1a.} {}.do_test
1a70: 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e 37   multiplex-3.2.7
1a80: 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20   { .  execsql { 
1a90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1aa0: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
1ab0: 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (500), randomblo
1ac0: 62 28 35 30 30 29 29 20 7d 20 64 62 31 62 0a 7d  b(500)) } db1b.}
1ad0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74   {}.do_test mult
1ae0: 69 70 6c 65 78 2d 33 2e 32 2e 38 20 7b 20 0a 20  iplex-3.2.8 { . 
1af0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
1b00: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1b10: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29  (randomblob(500)
1b20: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30  , randomblob(500
1b30: 29 29 20 7d 20 64 62 32 61 0a 7d 20 7b 7d 0a 64  )) } db2a.} {}.d
1b40: 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  o_test multiplex
1b50: 2d 33 2e 32 2e 39 20 7b 20 0a 20 20 65 78 65 63  -3.2.9 { .  exec
1b60: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
1b70: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
1b80: 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e  omblob(500), ran
1b90: 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20 7d 20  domblob(500)) } 
1ba0: 64 62 32 62 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  db2b.} {}..do_te
1bb0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 33  st multiplex-3.3
1bc0: 2e 31 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20  .1 { .  execsql 
1bd0: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
1be0: 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c   VALUES(randombl
1bf0: 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d 62  ob(500), randomb
1c00: 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 31 61  lob(500)) } db1a
1c10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
1c20: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1c30: 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 30  ES(randomblob(50
1c40: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 35  0), randomblob(5
1c50: 30 30 29 29 20 7d 20 64 62 31 62 0a 20 20 65 78  00)) } db1b.  ex
1c60: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
1c70: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
1c80: 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 2c 20 72  ndomblob(500), r
1c90: 61 6e 64 6f 6d 62 6c 6f 62 28 35 30 30 29 29 20  andomblob(500)) 
1ca0: 7d 20 64 62 32 61 0a 20 20 65 78 65 63 73 71 6c  } db2a.  execsql
1cb0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
1cc0: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  1 VALUES(randomb
1cd0: 6c 6f 62 28 35 30 30 29 2c 20 72 61 6e 64 6f 6d  lob(500), random
1ce0: 62 6c 6f 62 28 35 30 30 29 29 20 7d 20 64 62 32  blob(500)) } db2
1cf0: 62 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  b.} {}..do_test 
1d00: 6d 75 6c 74 69 70 6c 65 78 2d 33 2e 32 2e 58 20  multiplex-3.2.X 
1d10: 7b 0a 20 20 66 6f 72 65 61 63 68 20 64 62 20 7b  {.  foreach db {
1d20: 64 62 31 61 20 64 62 32 61 20 64 62 32 62 20 64  db1a db2a db2b d
1d30: 62 31 62 7d 20 7b 20 63 61 74 63 68 20 7b 20 24  b1b} { catch { $
1d40: 64 62 20 63 6c 6f 73 65 20 7d 20 7d 0a 7d 20 7b  db close } }.} {
1d50: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
1d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a  -------------.#.
1da0: 0a 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c  .sqlite3_multipl
1db0: 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22  ex_initialize ""
1dc0: 20 31 0a 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69   1.sqlite3_multi
1dd0: 70 6c 65 78 5f 73 65 74 20 30 78 38 30 30 30 20  plex_set 0x8000 
1de0: 31 36 0a 0a 23 20 52 65 74 75 72 6e 20 61 20 6c  16..# Return a l
1df0: 69 73 74 20 6f 66 20 61 6c 6c 20 63 75 72 72 65  ist of all curre
1e00: 6e 74 6c 79 20 64 65 66 69 6e 65 64 20 6d 75 6c  ntly defined mul
1e10: 74 69 70 6c 65 78 73 2e 0a 70 72 6f 63 20 6d 75  tiplexs..proc mu
1e20: 6c 74 69 70 6c 65 78 5f 6c 69 73 74 20 7b 7d 20  ltiplex_list {} 
1e30: 7b 0a 20 20 73 65 74 20 61 6c 6c 71 20 7b 7d 0a  {.  set allq {}.
1e40: 20 20 66 6f 72 65 61 63 68 20 71 20 5b 73 71 6c    foreach q [sql
1e50: 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 64  ite3_multiplex_d
1e60: 75 6d 70 5d 20 7b 0a 20 20 20 20 6c 61 70 70 65  ump] {.    lappe
1e70: 6e 64 20 61 6c 6c 71 20 5b 6c 69 6e 64 65 78 20  nd allq [lindex 
1e80: 24 71 20 30 5d 0a 20 20 7d 0a 20 20 72 65 74 75  $q 0].  }.  retu
1e90: 72 6e 20 5b 6c 73 6f 72 74 20 24 61 6c 6c 71 5d  rn [lsort $allq]
1ea0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  .}..do_test mult
1eb0: 69 70 6c 65 78 2d 34 2e 31 2e 36 20 7b 0a 20 20  iplex-4.1.6 {.  
1ec0: 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65  multiplex_delete
1ed0: 20 74 65 73 74 32 2e 64 62 0a 20 20 73 71 6c 69   test2.db.  sqli
1ee0: 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a  te3 db test2.db.
1ef0: 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54    db eval {CREAT
1f00: 45 20 54 41 42 4c 45 20 74 32 28 78 29 3b 20 49  E TABLE t2(x); I
1f10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1f20: 4c 55 45 53 28 27 74 61 62 2d 74 32 27 29 3b 7d  LUES('tab-t2');}
1f30: 0a 20 20 73 65 74 20 72 65 73 20 5b 6d 75 6c 74  .  set res [mult
1f40: 69 70 6c 65 78 5f 6c 69 73 74 5d 0a 20 20 6c 69  iplex_list].  li
1f50: 73 74 20 5b 72 65 67 65 78 70 20 7b 74 65 73 74  st [regexp {test
1f60: 32 2e 64 62 7d 20 24 72 65 73 5d 0a 7d 20 7b 31  2.db} $res].} {1
1f70: 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70  }.do_test multip
1f80: 6c 65 78 2d 34 2e 31 2e 36 61 20 7b 0a 20 20 73  lex-4.1.6a {.  s
1f90: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
1fa0: 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b  .db.  db2 eval {
1fb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1fc0: 7d 0a 7d 20 7b 74 61 62 2d 74 32 7d 0a 64 6f 5f  }.} {tab-t2}.do_
1fd0: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34  test multiplex-4
1fe0: 2e 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.7 {.  execsql
1ff0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
2000: 20 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c 6f 62   VALUES(zeroblob
2010: 28 32 30 30 30 30 30 29 29 7d 0a 7d 20 7b 7d 0a  (200000))}.} {}.
2020: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2030: 78 2d 34 2e 31 2e 38 20 7b 0a 20 20 73 71 6c 69  x-4.1.8 {.  sqli
2040: 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62  te3 db2 test2.db
2050: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
2060: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
2070: 4d 20 74 32 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  M t2}.} {2}.do_t
2080: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e  est multiplex-4.
2090: 31 2e 38 61 20 7b 0a 20 20 20 64 62 32 20 65 76  1.8a {.   db2 ev
20a0: 61 6c 20 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d  al { DELETE FROM
20b0: 20 74 32 20 57 48 45 52 45 20 78 20 3d 20 27 74   t2 WHERE x = 't
20c0: 61 62 2d 74 32 27 20 7d 0a 7d 20 7b 7d 0a 64 6f  ab-t2' }.} {}.do
20d0: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
20e0: 34 2e 31 2e 38 62 20 7b 0a 20 20 73 71 6c 69 74  4.1.8b {.  sqlit
20f0: 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a  e3 db2 test2.db.
2100: 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45    db2 eval {SELE
2110: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
2120: 20 74 32 7d 0a 7d 20 7b 31 7d 0a 0a 0a 64 6f 5f   t2}.} {1}...do_
2130: 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34  test multiplex-4
2140: 2e 31 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.9 {.  execsql
2150: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
2160: 20 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c 6f 62   VALUES(zeroblob
2170: 28 32 30 30 30 30 30 29 29 7d 0a 7d 20 7b 7d 0a  (200000))}.} {}.
2180: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
2190: 78 2d 34 2e 31 2e 31 30 20 7b 0a 20 20 73 65 74  x-4.1.10 {.  set
21a0: 20 72 65 73 20 5b 6d 75 6c 74 69 70 6c 65 78 5f   res [multiplex_
21b0: 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20 5b 72 65  list].  list [re
21c0: 67 65 78 70 20 7b 74 65 73 74 32 2e 64 62 7d 20  gexp {test2.db} 
21d0: 24 72 65 73 5d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  $res].} {1}.do_t
21e0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 34 2e  est multiplex-4.
21f0: 31 2e 31 31 20 7b 0a 20 20 64 62 32 20 63 6c 6f  1.11 {.  db2 clo
2200: 73 65 0a 20 20 73 65 74 20 72 65 73 20 5b 6d 75  se.  set res [mu
2210: 6c 74 69 70 6c 65 78 5f 6c 69 73 74 5d 0a 20 20  ltiplex_list].  
2220: 6c 69 73 74 20 5b 72 65 67 65 78 70 20 7b 74 65  list [regexp {te
2230: 73 74 32 2e 64 62 7d 20 24 72 65 73 5d 0a 7d 20  st2.db} $res].} 
2240: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 75 6c 74  {1}.do_test mult
2250: 69 70 6c 65 78 2d 34 2e 31 2e 31 32 20 7b 0a 20  iplex-4.1.12 {. 
2260: 20 64 62 20 63 6c 6f 73 65 0a 20 20 6d 75 6c 74   db close.  mult
2270: 69 70 6c 65 78 5f 6c 69 73 74 0a 7d 20 7b 7d 0a  iplex_list.} {}.
2280: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
2290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
22d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73  he following tes
22e0: 74 73 20 74 65 73 74 20 74 68 61 74 20 74 68 65  ts test that the
22f0: 20 6d 75 6c 74 69 70 6c 65 78 20 56 46 53 20 68   multiplex VFS h
2300: 61 6e 64 6c 65 73 20 6d 61 6c 6c 6f 63 20 61 6e  andles malloc an
2310: 64 20 49 4f 20 0a 23 20 65 72 72 6f 72 73 2e 0a  d IO .# errors..
2320: 23 0a 0a 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69  #..sqlite3_multi
2330: 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 20  plex_initialize 
2340: 22 22 20 31 0a 73 71 6c 69 74 65 33 5f 6d 75 6c  "" 1.sqlite3_mul
2350: 74 69 70 6c 65 78 5f 73 65 74 20 30 78 38 30 30  tiplex_set 0x800
2360: 30 20 31 36 0a 0a 64 6f 5f 66 61 75 6c 74 73 69  0 16..do_faultsi
2370: 6d 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78  m_test multiplex
2380: 2d 35 2e 31 20 2d 70 72 65 70 20 7b 0a 20 20 63  -5.1 -prep {.  c
2390: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
23a0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71 6c 69  } -body {.  sqli
23b0: 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a  te3 db test2.db.
23c0: 7d 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65  }.do_faultsim_te
23d0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 32  st multiplex-5.2
23e0: 20 2d 70 72 65 70 20 7b 0a 20 20 63 61 74 63 68   -prep {.  catch
23f0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 7d 20 2d 62   {db close}.} -b
2400: 6f 64 79 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ody {.  sqlite3 
2410: 64 62 20 74 65 73 74 2e 64 62 0a 7d 0a 0a 63 61  db test.db.}..ca
2420: 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  tch { db close }
2430: 0a 6d 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74  .multiplex_delet
2440: 65 20 74 65 73 74 2e 64 62 0a 0a 64 6f 5f 74 65  e test.db..do_te
2450: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 33  st multiplex-5.3
2460: 2e 70 72 65 70 20 7b 0a 20 20 73 71 6c 69 74 65  .prep {.  sqlite
2470: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
2480: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
2490: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
24a0: 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 1;.    PRAGMA 
24b0: 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34  page_size = 1024
24c0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
24d0: 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20 20  LE t1(a, b);.   
24e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
24f0: 56 41 4c 55 45 53 28 31 30 2c 20 7a 65 72 6f 62  VALUES(10, zerob
2500: 6c 6f 62 28 31 32 30 30 29 29 3b 0a 20 20 7d 0a  lob(1200));.  }.
2510: 20 20 66 61 75 6c 74 73 69 6d 5f 73 61 76 65 5f    faultsim_save_
2520: 61 6e 64 5f 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 64  and_close.} {}.d
2530: 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20  o_faultsim_test 
2540: 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 33 20 2d 70  multiplex-5.3 -p
2550: 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d  rep {.  faultsim
2560: 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f  _restore_and_reo
2570: 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  pen.} -body {.  
2580: 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45  execsql { DELETE
2590: 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 0a 0a 64 6f   FROM t1 }.}..do
25a0: 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d  _test multiplex-
25b0: 35 2e 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 20  5.4.1 {.  catch 
25c0: 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 6d  { db close }.  m
25d0: 75 6c 74 69 70 6c 65 78 5f 64 65 6c 65 74 65 20  ultiplex_delete 
25e0: 74 65 73 74 2e 64 62 0a 20 20 66 69 6c 65 20 6d  test.db.  file m
25f0: 6b 64 69 72 20 74 65 73 74 2e 64 62 0a 20 20 6c  kdir test.db.  l
2600: 69 73 74 20 5b 63 61 74 63 68 20 7b 20 73 71 6c  ist [catch { sql
2610: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
2620: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 7b 31  } msg] $msg.} {1
2630: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
2640: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 7d   database file}}
2650: 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65  ..do_faultsim_te
2660: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 35 2e 35  st multiplex-5.5
2670: 20 2d 70 72 65 70 20 7b 0a 20 20 63 61 74 63 68   -prep {.  catch
2680: 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69   { sqlite3_multi
2690: 70 6c 65 78 5f 73 68 75 74 64 6f 77 6e 20 7d 0a  plex_shutdown }.
26a0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 73 71 6c 69  } -body {.  sqli
26b0: 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e  te3_multiplex_in
26c0: 69 74 69 61 6c 69 7a 65 20 22 22 20 31 0a 20 20  itialize "" 1.  
26d0: 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
26e0: 78 5f 73 65 74 20 30 78 38 30 30 30 20 31 36 0a  x_set 0x8000 16.
26f0: 7d 0a 0a 63 61 74 63 68 20 7b 20 73 71 6c 69 74  }..catch { sqlit
2700: 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 73 68 75  e3_multiplex_shu
2710: 74 64 6f 77 6e 20 7d 0a 66 69 6e 69 73 68 5f 74  tdown }.finish_t
2720: 65 73 74 0a                                      est.