/ Hex Artifact Content
Login

Artifact 580ca5817c7edbe4cc68fa150609c9473393003a:


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 73 6f 75 72 63 65  ommon.tcl.source
01d0: 20 24 74 65 73 74 64 69 72 2f 6c 6f 63 6b 5f 63   $testdir/lock_c
01e0: 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 0a 64 6f 5f 6d  ommon.tcl...do_m
01f0: 75 6c 74 69 63 6c 69 65 6e 74 5f 74 65 73 74 20  ulticlient_test 
0200: 74 6e 20 7b 0a 20 20 63 6f 64 65 31 20 7b 20 63  tn {.  code1 { c
0210: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 6d  atch { sqlite3_m
0220: 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c  ultiplex_initial
0230: 69 7a 65 20 22 22 20 30 20 7d 20 7d 0a 20 20 63  ize "" 0 } }.  c
0240: 6f 64 65 32 20 7b 20 63 61 74 63 68 20 7b 20 73  ode2 { catch { s
0250: 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78  qlite3_multiplex
0260: 5f 69 6e 69 74 69 61 6c 69 7a 65 20 22 22 20 30  _initialize "" 0
0270: 20 7d 20 7d 0a 0a 20 20 63 6f 64 65 31 20 7b 20   } }..  code1 { 
0280: 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 63 6f 64  db close }.  cod
0290: 65 32 20 7b 20 64 62 32 20 63 6c 6f 73 65 20 7d  e2 { db2 close }
02a0: 0a 0a 20 20 63 6f 64 65 31 20 7b 20 73 71 6c 69  ..  code1 { sqli
02b0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 2d  te3 db test.db -
02c0: 76 66 73 20 6d 75 6c 74 69 70 6c 65 78 20 7d 0a  vfs multiplex }.
02d0: 20 20 63 6f 64 65 32 20 7b 20 73 71 6c 69 74 65    code2 { sqlite
02e0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 20 2d 76  3 db2 test.db -v
02f0: 66 73 20 6d 75 6c 74 69 70 6c 65 78 20 7d 0a 0a  fs multiplex }..
0300: 20 20 63 6f 64 65 31 20 7b 20 73 71 6c 69 74 65    code1 { sqlite
0310: 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 63 6f 6e 74  3_multiplex_cont
0320: 72 6f 6c 20 64 62 20 6d 61 69 6e 20 63 68 75 6e  rol db main chun
0330: 6b 5f 73 69 7a 65 20 5b 65 78 70 72 20 31 30 32  k_size [expr 102
0340: 34 2a 31 30 32 34 5d 20 7d 0a 20 20 63 6f 64 65  4*1024] }.  code
0350: 32 20 7b 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74  2 { sqlite3_mult
0360: 69 70 6c 65 78 5f 63 6f 6e 74 72 6f 6c 20 64 62  iplex_control db
0370: 32 20 6d 61 69 6e 20 63 68 75 6e 6b 5f 73 69 7a  2 main chunk_siz
0380: 65 20 5b 65 78 70 72 20 31 30 32 34 2a 31 30 32  e [expr 1024*102
0390: 34 5d 20 7d 0a 0a 20 20 73 71 6c 31 20 7b 0a 20  4] }..  sql1 {. 
03a0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
03b0: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e  t1(a, b);.    IN
03c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
03d0: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  UES(randomblob(1
03e0: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34  0), randomblob(4
03f0: 30 30 30 29 29 3b 20 20 20 20 20 20 20 20 20 20  000));          
0400: 2d 2d 20 20 20 20 31 0a 20 20 20 20 49 4e 53 45  --    1.    INSE
0410: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
0420: 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29  T randomblob(10)
0430: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30  , randomblob(400
0440: 30 29 20 46 52 4f 4d 20 74 31 3b 20 20 20 2d 2d  0) FROM t1;   --
0450: 20 20 20 20 32 0a 20 20 20 20 49 4e 53 45 52 54      2.    INSERT
0460: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
0470: 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20  randomblob(10), 
0480: 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29  randomblob(4000)
0490: 20 46 52 4f 4d 20 74 31 3b 20 20 20 2d 2d 20 20   FROM t1;   --  
04a0: 20 20 34 0a 20 20 20 20 49 4e 53 45 52 54 20 49    4.    INSERT I
04b0: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61  NTO t1 SELECT ra
04c0: 6e 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61  ndomblob(10), ra
04d0: 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29 20 46  ndomblob(4000) F
04e0: 52 4f 4d 20 74 31 3b 20 20 20 2d 2d 20 20 20 20  ROM t1;   --    
04f0: 38 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  8.    INSERT INT
0500: 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64  O t1 SELECT rand
0510: 6f 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e 64  omblob(10), rand
0520: 6f 6d 62 6c 6f 62 28 34 30 30 30 29 20 46 52 4f  omblob(4000) FRO
0530: 4d 20 74 31 3b 20 20 20 2d 2d 20 20 20 31 36 0a  M t1;   --   16.
0540: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0550: 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d  t1 SELECT random
0560: 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e 64 6f 6d  blob(10), random
0570: 62 6c 6f 62 28 34 30 30 30 29 20 46 52 4f 4d 20  blob(4000) FROM 
0580: 74 31 3b 20 20 20 2d 2d 20 20 20 33 32 0a 20 20  t1;   --   32.  
0590: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
05a0: 20 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c   SELECT randombl
05b0: 6f 62 28 31 30 29 2c 20 72 61 6e 64 6f 6d 62 6c  ob(10), randombl
05c0: 6f 62 28 34 30 30 30 29 20 46 52 4f 4d 20 74 31  ob(4000) FROM t1
05d0: 3b 20 20 20 2d 2d 20 20 20 36 34 0a 20 20 20 20  ;   --   64.    
05e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
05f0: 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62  ELECT randomblob
0600: 28 31 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  (10), randomblob
0610: 28 34 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20  (4000) FROM t1; 
0620: 20 20 2d 2d 20 20 31 32 38 0a 20 20 20 20 49 4e    --  128.    IN
0630: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
0640: 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  ECT randomblob(1
0650: 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34  0), randomblob(4
0660: 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20 20 20  000) FROM t1;   
0670: 2d 2d 20 20 32 35 36 0a 20 20 20 20 49 4e 53 45  --  256.    INSE
0680: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
0690: 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29  T randomblob(10)
06a0: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30  , randomblob(400
06b0: 30 29 20 46 52 4f 4d 20 74 31 3b 20 20 20 2d 2d  0) FROM t1;   --
06c0: 20 20 35 31 32 0a 20 20 20 20 53 45 4c 45 43 54    512.    SELECT
06d0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
06e0: 31 3b 0a 20 20 7d 20 0a 0a 20 20 64 6f 5f 74 65  1;.  } ..  do_te
06f0: 73 74 20 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 24  st multiplex-1.$
0700: 74 6e 2e 31 20 7b 20 73 71 6c 31 20 7b 20 53 45  tn.1 { sql1 { SE
0710: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
0720: 4f 4d 20 74 31 20 7d 20 7d 20 35 31 32 0a 20 20  OM t1 } } 512.  
0730: 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69 70 6c 65  do_test multiple
0740: 78 2d 31 2e 24 74 6e 2e 32 20 7b 20 73 71 6c 32  x-1.$tn.2 { sql2
0750: 20 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28   { SELECT count(
0760: 2a 29 20 46 52 4f 4d 20 74 31 20 7d 20 7d 20 35  *) FROM t1 } } 5
0770: 31 32 0a 20 20 73 71 6c 32 20 7b 20 44 45 4c 45  12.  sql2 { DELE
0780: 54 45 20 46 52 4f 4d 20 74 31 20 3b 20 56 41 43  TE FROM t1 ; VAC
0790: 55 55 4d 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  UUM }.  do_test 
07a0: 6d 75 6c 74 69 70 6c 65 78 2d 31 2e 24 74 6e 2e  multiplex-1.$tn.
07b0: 33 20 7b 20 73 71 6c 31 20 7b 20 53 45 4c 45 43  3 { sql1 { SELEC
07c0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
07d0: 74 31 20 7d 20 7d 20 30 0a 0a 20 20 73 71 6c 31  t1 } } 0..  sql1
07e0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
07f0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
0800: 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e  domblob(10), ran
0810: 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29 29 3b 20  domblob(4000)); 
0820: 20 20 20 20 20 20 20 20 20 2d 2d 20 20 20 20 31           --    1
0830: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0840: 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64 6f   t1 SELECT rando
0850: 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e 64 6f  mblob(10), rando
0860: 6d 62 6c 6f 62 28 34 30 30 30 29 20 46 52 4f 4d  mblob(4000) FROM
0870: 20 74 31 3b 20 20 20 2d 2d 20 20 20 20 32 0a 20   t1;   --    2. 
0880: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0890: 31 20 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62  1 SELECT randomb
08a0: 6c 6f 62 28 31 30 29 2c 20 72 61 6e 64 6f 6d 62  lob(10), randomb
08b0: 6c 6f 62 28 34 30 30 30 29 20 46 52 4f 4d 20 74  lob(4000) FROM t
08c0: 31 3b 20 20 20 2d 2d 20 20 20 20 34 0a 20 20 20  1;   --    4.   
08d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
08e0: 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f  SELECT randomblo
08f0: 62 28 31 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  b(10), randomblo
0900: 62 28 34 30 30 30 29 20 46 52 4f 4d 20 74 31 3b  b(4000) FROM t1;
0910: 20 20 20 2d 2d 20 20 20 20 38 0a 20 20 20 20 49     --    8.    I
0920: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0930: 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  LECT randomblob(
0940: 31 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  10), randomblob(
0950: 34 30 30 30 29 20 46 52 4f 4d 20 74 31 3b 20 20  4000) FROM t1;  
0960: 20 2d 2d 20 20 20 31 36 0a 20 20 20 20 49 4e 53   --   16.    INS
0970: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
0980: 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30  CT randomblob(10
0990: 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30  ), randomblob(40
09a0: 30 30 29 20 46 52 4f 4d 20 74 31 3b 20 20 20 2d  00) FROM t1;   -
09b0: 2d 20 20 20 33 32 0a 20 20 20 20 49 4e 53 45 52  -   32.    INSER
09c0: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
09d0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29 2c   randomblob(10),
09e0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30   randomblob(4000
09f0: 29 20 46 52 4f 4d 20 74 31 3b 20 20 20 2d 2d 20  ) FROM t1;   -- 
0a00: 20 20 36 34 0a 20 20 20 20 49 4e 53 45 52 54 20    64.    INSERT 
0a10: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 72  INTO t1 SELECT r
0a20: 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20 72  andomblob(10), r
0a30: 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29 20  andomblob(4000) 
0a40: 46 52 4f 4d 20 74 31 3b 20 20 20 2d 2d 20 20 31  FROM t1;   --  1
0a50: 32 38 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  28.    INSERT IN
0a60: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e  TO t1 SELECT ran
0a70: 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e  domblob(10), ran
0a80: 64 6f 6d 62 6c 6f 62 28 34 30 30 30 29 20 46 52  domblob(4000) FR
0a90: 4f 4d 20 74 31 3b 20 20 20 2d 2d 20 20 32 35 36  OM t1;   --  256
0aa0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0ab0: 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64 6f   t1 SELECT rando
0ac0: 6d 62 6c 6f 62 28 31 30 29 2c 20 72 61 6e 64 6f  mblob(10), rando
0ad0: 6d 62 6c 6f 62 28 34 30 30 30 29 20 46 52 4f 4d  mblob(4000) FROM
0ae0: 20 74 31 3b 20 20 20 2d 2d 20 20 35 31 32 0a 20   t1;   --  512. 
0af0: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
0b00: 2a 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a  *) FROM t1;.  }.
0b10: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 75 6c 74 69  .  do_test multi
0b20: 70 6c 65 78 2d 31 2e 24 74 6e 2e 34 20 7b 20 73  plex-1.$tn.4 { s
0b30: 71 6c 32 20 7b 20 53 45 4c 45 43 54 20 63 6f 75  ql2 { SELECT cou
0b40: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 7d 20  nt(*) FROM t1 } 
0b50: 7d 20 35 31 32 0a 7d 0a 0a 63 61 74 63 68 20 7b  } 512.}..catch {
0b60: 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
0b70: 65 78 5f 73 68 75 74 64 6f 77 6e 20 7d 0a 66 69  ex_shutdown }.fi
0b80: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.