System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5765568e0afaae7a75f85ea6792c67fa67b99e79:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 73 74 72 65 73 73 2e 65 61 67  .#..# stress.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72 65  ##....package re
0120: 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 70 61 63  quire Eagle..pac
0130: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
0140: 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b  le.Library..pack
0150: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
0160: 65 2e 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73  e.Test....runTes
0170: 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23  tPrologue....###
0180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
01d0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
01e0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
01f0: 74 65 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69  te.Test..runSQLi
0200: 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a  teTestPrologue..
0210: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20  #....#..# NOTE: 
0270: 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53  Make sure that S
0280: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
0290: 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79  ry is completely
02a0: 20 73 68 75 74 64 6f 77 6e 20 70 72 69 6f 72 20   shutdown prior 
02b0: 74 6f 0d 0a 23 20 20 20 20 20 20 20 73 74 61 72  to..#       star
02c0: 74 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 20  ting any of the 
02d0: 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69  tests in this fi
02e0: 6c 65 2e 0d 0a 23 0d 0a 73 68 75 74 64 6f 77 6e  le...#..shutdown
02f0: 53 51 4c 69 74 65 20 24 74 65 73 74 5f 63 68 61  SQLite $test_cha
0300: 6e 6e 65 6c 0d 0a 0d 0a 23 23 23 23 23 23 23 23  nnel....########
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0350: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
0360: 73 74 20 7b 74 65 73 74 20 73 74 72 65 73 73 2d  st {test stress-
0370: 31 2e 31 20 7b 6d 75 6c 74 69 74 68 72 65 61 64  1.1 {multithread
0380: 65 64 20 73 74 72 65 73 73 20 74 65 73 74 69 6e  ed stress testin
0390: 67 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75  g} -setup {..  u
03a0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
03b0: 20 72 65 73 75 6c 74 20 74 68 72 65 61 64 20 69   result thread i
03c0: 6e 64 65 78 20 77 6f 72 6b 6c 6f 61 64 20 70 72  ndex workload pr
03d0: 69 6f 72 69 74 79 20 6e 6f 57 6f 72 6b 6c 6f 61  iority noWorkloa
03e0: 64 20 5c 0d 0a 20 20 20 20 20 20 70 72 69 6f 72  d \..      prior
03f0: 69 74 69 65 73 20 73 72 63 44 62 20 64 62 20 66  ities srcDb db f
0400: 69 6c 65 4e 61 6d 65 20 63 6f 6d 70 69 6c 65 64  ileName compiled
0410: 20 6f 70 74 69 6f 6e 73 20 63 6f 75 6e 74 20 74   options count t
0420: 69 6d 65 73 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  imes logFileName
0430: 20 5c 0d 0a 20 20 20 20 20 20 6c 6f 67 4c 69 73   \..      logLis
0440: 74 65 6e 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  tener connection
0450: 20 69 6e 64 69 63 61 74 6f 72 73 20 69 74 65 72   indicators iter
0460: 61 74 69 6f 6e 73 20 65 78 69 74 4f 6e 46 61 69  ations exitOnFai
0470: 6c 20 63 6f 54 61 73 6b 4d 65 6d 20 5c 0d 0a 20  l coTaskMem \.. 
0480: 20 20 20 20 20 66 61 69 6c 75 72 65 73 0d 0a 0d       failures...
0490: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
04a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
04b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
04c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
04d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
04e0: 0d 0a 0d 0a 20 20 70 72 6f 63 20 66 6f 72 6d 61  ....  proc forma
04f0: 74 57 6f 72 6b 6c 6f 61 64 52 65 73 75 6c 74 20  tWorkloadResult 
0500: 7b 20 69 6e 64 65 78 20 7d 20 7b 0d 0a 20 20 20  { index } {..   
0510: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 70 70   set result [app
0520: 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 69 74  endArgs "---- it
0530: 65 72 61 74 69 6f 6e 73 20 66 6f 72 20 77 6f 72  erations for wor
0540: 6b 6c 6f 61 64 20 28 22 20 24 69 6e 64 65 78 20  kload (" $index 
0550: 22 29 3a 20 22 5d 0d 0a 0d 0a 20 20 20 20 61 70  "): "]....    ap
0560: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 65 78 70  pend result [exp
0570: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
0580: 3a 3a 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e  ::iterations($in
0590: 64 65 78 2c 6f 6b 29 5d 20 3f 20 5c 0d 0a 20 20  dex,ok)] ? \..  
05a0: 20 20 20 20 20 20 24 3a 3a 69 74 65 72 61 74 69        $::iterati
05b0: 6f 6e 73 28 24 69 6e 64 65 78 2c 6f 6b 29 20 3a  ons($index,ok) :
05c0: 20 30 7d 5d 20 22 20 6f 6b 2c 20 22 0d 0a 0d 0a   0}] " ok, "....
05d0: 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c      append resul
05e0: 74 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65  t [expr {[info e
05f0: 78 69 73 74 73 20 3a 3a 69 74 65 72 61 74 69 6f  xists ::iteratio
0600: 6e 73 28 24 69 6e 64 65 78 2c 65 72 72 6f 72 29  ns($index,error)
0610: 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 24  ] ? \..        $
0620: 3a 3a 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e  ::iterations($in
0630: 64 65 78 2c 65 72 72 6f 72 29 20 3a 20 30 7d 5d  dex,error) : 0}]
0640: 20 22 20 65 72 72 6f 72 2c 20 22 0d 0a 0d 0a 20   " error, ".... 
0650: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
0660: 3a 20 54 72 61 6e 73 6c 61 74 65 20 74 68 65 20  : Translate the 
0670: 77 6f 72 6b 6c 6f 61 64 20 69 6e 64 65 78 20 74  workload index t
0680: 6f 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  o the correspond
0690: 69 6e 67 20 69 74 65 72 61 74 69 6f 6e 0d 0a 20  ing iteration.. 
06a0: 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72     #       error
06b0: 20 69 6e 64 69 63 61 74 6f 72 20 73 6f 20 74 68   indicator so th
06c0: 61 74 20 77 65 20 63 61 6e 20 65 61 73 69 6c 79  at we can easily
06d0: 20 6c 6f 6f 6b 75 70 20 74 68 65 20 6e 75 6d 62   lookup the numb
06e0: 65 72 20 6f 66 0d 0a 20 20 20 20 23 20 20 20 20  er of..    #    
06f0: 20 20 20 66 61 69 6c 75 72 65 73 20 28 69 2e 65     failures (i.e
0700: 2e 20 22 75 6e 65 78 70 65 63 74 65 64 20 65 72  . "unexpected er
0710: 72 6f 72 73 22 29 20 66 6f 72 20 74 68 65 20 77  rors") for the w
0720: 6f 72 6b 6c 6f 61 64 2e 0d 0a 20 20 20 20 23 0d  orkload...    #.
0730: 0a 20 20 20 20 73 65 74 20 69 6e 64 69 63 61 74  .    set indicat
0740: 6f 72 20 5b 73 74 72 69 6e 67 20 63 68 61 72 61  or [string chara
0750: 63 74 65 72 20 5b 65 78 70 72 20 7b 5b 73 74 72  cter [expr {[str
0760: 69 6e 67 20 6f 72 64 69 6e 61 6c 20 61 20 30 5d  ing ordinal a 0]
0770: 20 2b 20 24 69 6e 64 65 78 20 2d 20 31 7d 5d 5d   + $index - 1}]]
0780: 0d 0a 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 72  ....    append r
0790: 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 5b 69 6e  esult [expr {[in
07a0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 66 61 69 6c  fo exists ::fail
07b0: 75 72 65 73 28 24 69 6e 64 69 63 61 74 6f 72 29  ures($indicator)
07c0: 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 24  ] ? \..        $
07d0: 3a 3a 66 61 69 6c 75 72 65 73 28 24 69 6e 64 69  ::failures($indi
07e0: 63 61 74 6f 72 29 20 3a 20 30 7d 5d 20 22 20 66  cator) : 0}] " f
07f0: 61 69 6c 65 64 5c 6e 22 0d 0a 0d 0a 20 20 20 20  ailed\n"....    
0800: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result..
0810: 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23    }....  #######
0820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0860: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f 63  ######....  proc
0870: 20 69 73 45 78 70 65 63 74 65 64 45 72 72 6f 72   isExpectedError
0880: 20 7b 20 65 72 72 6f 72 20 7d 20 7b 0d 0a 20 20   { error } {..  
0890: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
08a0: 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73 6e 6f  [regexp -- {\sno
08b0: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31 5c   such table: t1\
08c0: 73 7d 20 24 65 72 72 6f 72 5d 20 7c 7c 20 5c 0d  s} $error] || \.
08d0: 0a 20 20 20 20 20 20 20 20 5b 72 65 67 65 78 70  .        [regexp
08e0: 20 2d 2d 20 7b 5c 73 64 61 74 61 62 61 73 65 20   -- {\sdatabase 
08f0: 69 73 20 6c 6f 63 6b 65 64 5c 73 7d 20 24 65 72  is locked\s} $er
0900: 72 6f 72 5d 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  ror]}]..  }.... 
0910: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
0920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0960: 0d 0a 20 20 70 72 6f 63 20 77 61 69 74 46 6f 72  ..  proc waitFor
0970: 54 65 73 74 20 7b 20 7b 65 78 74 72 61 20 30 7d  Test { {extra 0}
0980: 20 7d 20 7b 0d 0a 20 20 20 20 61 66 74 65 72 20   } {..    after 
0990: 5b 65 78 70 72 20 7b 69 6e 74 28 28 72 61 6e 64  [expr {int((rand
09a0: 28 29 20 2a 20 31 30 30 30 29 20 2b 20 24 65 78  () * 1000) + $ex
09b0: 74 72 61 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  tra)}]..  }.... 
09c0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
09d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0a10: 0d 0a 20 20 70 72 6f 63 20 73 68 6f 77 54 65 73  ..  proc showTes
0a20: 74 20 7b 20 69 6e 64 69 63 61 74 6f 72 20 7d 20  t { indicator } 
0a30: 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 3a 3a  {..    tputs $::
0a40: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e  test_channel $in
0a50: 64 69 63 61 74 6f 72 0d 0a 20 20 20 20 61 70 70  dicator..    app
0a60: 65 6e 64 20 3a 3a 69 6e 64 69 63 61 74 6f 72 73  end ::indicators
0a70: 20 24 69 6e 64 69 63 61 74 6f 72 0d 0a 20 20 20   $indicator..   
0a80: 20 77 61 69 74 46 6f 72 54 65 73 74 20 24 3a 3a   waitForTest $::
0a90: 63 6f 75 6e 74 28 32 29 0d 0a 20 20 7d 0d 0a 0d  count(2)..  }...
0aa0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
0ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0af0: 0d 0a 0d 0a 20 20 70 72 6f 63 20 66 61 69 6c 54  ....  proc failT
0b00: 65 73 74 20 7b 20 69 6e 64 69 63 61 74 6f 72 20  est { indicator 
0b10: 65 72 72 6f 72 20 7d 20 7b 0d 0a 20 20 20 20 23  error } {..    #
0b20: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 48 61  ..    # NOTE: Ha
0b30: 6c 74 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 61  lt all testing a
0b40: 6e 64 20 65 78 69 74 20 74 68 65 20 70 72 6f 63  nd exit the proc
0b50: 65 73 73 20 6e 6f 77 0d 0a 20 20 20 20 23 20 20  ess now..    #  
0b60: 20 20 20 20 20 2d 4f 52 2d 20 6a 75 73 74 20 72       -OR- just r
0b70: 65 63 6f 72 64 20 74 68 65 20 66 61 69 6c 75 72  ecord the failur
0b80: 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 3f 0d  e and continue?.
0b90: 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b  .    #..    if {
0ba0: 24 3a 3a 65 78 69 74 4f 6e 46 61 69 6c 7d 20 74  $::exitOnFail} t
0bb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  hen {..      set
0bc0: 20 6c 65 76 65 6c 20 5b 65 78 70 72 20 7b 5b 69   level [expr {[i
0bd0: 6e 66 6f 20 6c 65 76 65 6c 5d 20 2d 20 31 7d 5d  nfo level] - 1}]
0be0: 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20  ....      tputs 
0bf0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 
0c00: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
0c10: 20 20 20 20 20 20 20 20 20 5c 6e 20 5b 69 6e 66           \n [inf
0c20: 6f 20 6c 65 76 65 6c 20 24 6c 65 76 65 6c 5d 20  o level $level] 
0c30: 22 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  ": " \n\t $error
0c40: 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 65 78   \n]....      ex
0c50: 69 74 20 46 61 69 6c 75 72 65 0d 0a 20 20 20 20  it Failure..    
0c60: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
0c70: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch
0c80: 61 6e 6e 65 6c 20 24 69 6e 64 69 63 61 74 6f 72  annel $indicator
0c90: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
0ca0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 66 61  info exists ::fa
0cb0: 69 6c 75 72 65 73 28 24 69 6e 64 69 63 61 74 6f  ilures($indicato
0cc0: 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r)]} then {..   
0cd0: 20 20 20 20 20 73 65 74 20 3a 3a 66 61 69 6c 75       set ::failu
0ce0: 72 65 73 28 24 69 6e 64 69 63 61 74 6f 72 29 20  res($indicator) 
0cf0: 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....  
0d00: 20 20 20 20 69 6e 63 72 20 3a 3a 66 61 69 6c 75      incr ::failu
0d10: 72 65 73 28 24 69 6e 64 69 63 61 74 6f 72 29 0d  res($indicator).
0d20: 0a 20 20 20 20 20 20 77 61 69 74 46 6f 72 54 65  .      waitForTe
0d30: 73 74 20 24 3a 3a 63 6f 75 6e 74 28 32 29 0d 0a  st $::count(2)..
0d40: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20      }..  }....  
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
0da0: 0a 20 20 70 72 6f 63 20 61 6c 6c 6f 63 4d 65 6d  .  proc allocMem
0db0: 20 7b 20 73 69 7a 65 20 7d 20 7b 0d 0a 20 20 20   { size } {..   
0dc0: 20 69 66 20 7b 24 3a 3a 63 6f 54 61 73 6b 4d 65   if {$::coTaskMe
0dd0: 6d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  m} then {..     
0de0: 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20   return [object 
0df0: 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 5c  invoke -create \
0e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74  ..          Syst
0e10: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0e20: 6f 70 53 65 72 76 69 63 65 73 2e 4d 61 72 73 68  opServices.Marsh
0e30: 61 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  al \..          
0e40: 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 20 24  AllocCoTaskMem $
0e50: 73 69 7a 65 5d 3b 20 23 20 74 68 72 6f 77 0d 0a  size]; # throw..
0e60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
0e70: 20 20 20 20 73 65 74 20 70 74 72 20 5b 6f 62 6a      set ptr [obj
0e80: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61  ect invoke -crea
0e90: 74 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  te -flags +NonPu
0ea0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..        
0eb0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
0ec0: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
0ed0: 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20  eMethods \..    
0ee0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61        sqlite3_ma
0ef0: 6c 6c 6f 63 20 24 73 69 7a 65 5d 0d 0a 0d 0a 20  lloc $size].... 
0f00: 20 20 20 20 20 69 66 20 7b 5b 6f 62 6a 65 63 74       if {[object
0f10: 20 69 6e 76 6f 6b 65 20 24 70 74 72 20 54 6f 49   invoke $ptr ToI
0f20: 6e 74 36 34 5d 20 21 3d 20 30 7d 20 74 68 65 6e  nt64] != 0} then
0f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
0f40: 72 6e 20 24 70 74 72 0d 0a 20 20 20 20 20 20 7d  rn $ptr..      }
0f50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
0f60: 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
0f70: 67 73 20 22 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  gs "sqlite3_mall
0f80: 6f 63 28 22 20 24 73 69 7a 65 20 22 29 20 66 61  oc(" $size ") fa
0f90: 69 6c 65 64 22 5d 0d 0a 20 20 20 20 20 20 7d 0d  iled"]..      }.
0fa0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20  .    }..  }.... 
0fb0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
0fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1000: 0d 0a 20 20 70 72 6f 63 20 75 73 65 4d 65 6d 20  ..  proc useMem 
1010: 7b 20 70 74 72 20 73 69 7a 65 20 7d 20 7b 0d 0a  { ptr size } {..
1020: 20 20 20 20 69 66 20 7b 21 5b 69 73 4d 6f 6e 6f      if {![isMono
1030: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
1040: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
1050: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1060: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4d 69   \..          Mi
1070: 63 72 6f 73 6f 66 74 2e 57 69 6e 33 32 2e 57 69  crosoft.Win32.Wi
1080: 6e 33 32 4e 61 74 69 76 65 20 5a 65 72 6f 4d 65  n32Native ZeroMe
1090: 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  mory \..        
10a0: 20 20 24 70 74 72 20 24 73 69 7a 65 0d 0a 20 20    $ptr $size..  
10b0: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23    }..  }....  ##
10c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1100: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########.... 
1110: 20 70 72 6f 63 20 66 72 65 65 4d 65 6d 20 7b 20   proc freeMem { 
1120: 70 74 72 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20  ptr } {..    if 
1130: 7b 24 3a 3a 63 6f 54 61 73 6b 4d 65 6d 7d 20 74  {$::coTaskMem} t
1140: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6f 62 6a  hen {..      obj
1150: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
1160: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
1170: 70 53 65 72 76 69 63 65 73 2e 4d 61 72 73 68 61  pServices.Marsha
1180: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 46  l \..          F
1190: 72 65 65 43 6f 54 61 73 6b 4d 65 6d 20 24 70 74  reeCoTaskMem $pt
11a0: 72 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  r..    } else {.
11b0: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
11c0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
11d0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..      
11e0: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
11f0: 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
1200: 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..  
1210: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1220: 66 72 65 65 20 24 70 74 72 0d 0a 20 20 20 20 7d  free $ptr..    }
1230: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23  ..  }....  #####
1240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1280: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72  ########....  pr
1290: 6f 63 20 73 65 74 75 70 4c 6f 67 67 69 6e 67 20  oc setupLogging 
12a0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
12b0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
12c0: 78 69 73 74 73 20 3a 3a 6c 6f 67 4c 69 73 74 65  xists ::logListe
12d0: 6e 65 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ner]} then {..  
12e0: 20 20 20 20 73 65 74 20 3a 3a 6c 6f 67 4c 69 73      set ::logLis
12f0: 74 65 6e 65 72 20 5b 6f 62 6a 65 63 74 20 63 72  tener [object cr
1300: 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20  eate -alias \.. 
1310: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1320: 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 65 78 74  Diagnostics.Text
1330: 57 72 69 74 65 72 54 72 61 63 65 4c 69 73 74 65  WriterTraceListe
1340: 6e 65 72 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ner $fileName]..
1350: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 6f 62 6a      }....    obj
1360: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
1370: 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 72  m.Diagnostics.Tr
1380: 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 20 41 64  ace.Listeners Ad
1390: 64 20 24 3a 3a 6c 6f 67 4c 69 73 74 65 6e 65 72  d $::logListener
13a0: 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76  ..    object inv
13b0: 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  oke System.Data.
13c0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4c 6f 67  SQLite.SQLiteLog
13d0: 20 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 0d 0a 20   Initialize.... 
13e0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test
13f0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1400: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
1410: 22 2d 2d 2d 2d 20 65 6e 61 62 6c 65 64 20 53 51  "---- enabled SQ
1420: 4c 69 74 65 20 74 72 61 63 65 20 6c 6f 67 67 69  Lite trace loggi
1430: 6e 67 20 74 6f 20 66 69 6c 65 20 5c 22 22 20 24  ng to file \"" $
1440: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  fileName \"\n]..
1450: 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23    }....  #######
1460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a0: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f 63  ######....  proc
14b0: 20 63 6c 65 61 6e 75 70 4c 6f 67 67 69 6e 67 20   cleanupLogging 
14c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
14d0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
14e0: 69 73 74 73 20 3a 3a 6c 6f 67 4c 69 73 74 65 6e  ists ::logListen
14f0: 65 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  er]} then {..   
1500: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1510: 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
1520: 69 63 73 2e 54 72 61 63 65 2e 4c 69 73 74 65 6e  ics.Trace.Listen
1530: 65 72 73 20 52 65 6d 6f 76 65 20 24 3a 3a 6c 6f  ers Remove $::lo
1540: 67 4c 69 73 74 65 6e 65 72 0d 0a 20 20 20 20 20  gListener..     
1550: 20 24 3a 3a 6c 6f 67 4c 69 73 74 65 6e 65 72 20   $::logListener 
1560: 43 6c 6f 73 65 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Close..    }....
1570: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
1580: 45 3a 20 43 6f 70 79 20 74 68 65 20 74 72 61 63  E: Copy the trac
1590: 65 20 6c 69 73 74 65 6e 65 72 20 6c 6f 67 20 66  e listener log f
15a0: 69 6c 65 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  ile to the main 
15b0: 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a  test log file...
15c0: 20 20 20 20 23 0d 0a 20 20 20 20 74 6c 6f 67 20      #..    tlog 
15d0: 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 54 52 41 43  "---- BEGIN TRAC
15e0: 45 20 4c 49 53 54 45 4e 45 52 20 4f 55 54 50 55  E LISTENER OUTPU
15f0: 54 5c 6e 22 0d 0a 20 20 20 20 74 6c 6f 67 20 5b  T\n"..    tlog [
1600: 72 65 61 64 46 69 6c 65 20 24 66 69 6c 65 4e 61  readFile $fileNa
1610: 6d 65 5d 0d 0a 20 20 20 20 74 6c 6f 67 20 22 5c  me]..    tlog "\
1620: 6e 2d 2d 2d 2d 20 45 4e 44 20 54 52 41 43 45 20  n---- END TRACE 
1630: 4c 49 53 54 45 4e 45 52 20 4f 55 54 50 55 54 5c  LISTENER OUTPUT\
1640: 6e 22 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20  n"....    #..   
1650: 20 23 20 4e 4f 54 45 3a 20 44 65 6c 65 74 65 20   # NOTE: Delete 
1660: 74 68 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  the trace listen
1670: 65 72 20 6c 6f 67 20 66 69 6c 65 20 62 65 63 61  er log file beca
1680: 75 73 65 20 69 74 73 20 63 6f 6e 74 65 6e 74 73  use its contents
1690: 20 68 61 76 65 0d 0a 20 20 20 20 23 20 20 20 20   have..    #    
16a0: 20 20 20 62 65 65 6e 20 63 6f 70 69 65 64 20 74     been copied t
16b0: 6f 20 74 68 65 20 6d 61 69 6e 20 74 65 73 74 20  o the main test 
16c0: 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 23  log file...    #
16d0: 0d 0a 20 20 20 20 63 6c 65 61 6e 75 70 46 69 6c  ..    cleanupFil
16e0: 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  e $fileName.... 
16f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test
1700: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1710: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
1720: 22 2d 2d 2d 2d 20 64 69 73 61 62 6c 65 64 20 53  "---- disabled S
1730: 51 4c 69 74 65 20 74 72 61 63 65 20 6c 6f 67 67  QLite trace logg
1740: 69 6e 67 20 74 6f 20 66 69 6c 65 20 5c 22 22 20  ing to file \"" 
1750: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n].
1760: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  .  }....  ######
1770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a  #######....  #..
17c0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 74 72    # NOTE: The tr
17d0: 61 63 65 20 6c 69 73 74 65 6e 65 72 20 75 73 65  ace listener use
17e0: 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
17f0: 65 4c 6f 67 20 63 6c 61 73 73 20 74 6f 20 63 61  eLog class to ca
1800: 70 74 75 72 65 20 6f 75 74 70 75 74 0d 0a 20 20  pture output..  
1810: 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65  #       from the
1820: 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c 69 62   core SQLite lib
1830: 72 61 72 79 20 72 65 71 75 69 72 65 73 20 69 74  rary requires it
1840: 73 20 6f 77 6e 20 6c 6f 67 20 66 69 6c 65 20 62  s own log file b
1850: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 23 20  ecause the..  # 
1860: 20 20 20 20 20 20 54 65 78 74 57 72 69 74 65 72        TextWriter
1870: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20 63 6c  TraceListener cl
1880: 61 73 73 20 6f 70 65 6e 73 20 61 6e 64 20 6c 6f  ass opens and lo
1890: 63 6b 73 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  cks the log file
18a0: 20 69 74 20 75 73 65 73 0d 0a 20 20 23 20 20 20   it uses..  #   
18b0: 20 20 20 20 61 73 20 74 68 65 20 62 61 73 69 73      as the basis
18c0: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 73   of the output s
18d0: 74 72 65 61 6d 2e 20 20 42 65 66 6f 72 65 20 74  tream.  Before t
18e0: 68 69 73 20 74 65 73 74 20 69 73 20 63 6f 6d 70  his test is comp
18f0: 6c 65 74 65 2c 0d 0a 20 20 23 20 20 20 20 20 20  lete,..  #      
1900: 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6e 74   the entire cont
1910: 65 6e 74 73 20 6f 66 20 74 68 69 73 20 74 72 61  ents of this tra
1920: 63 65 20 6c 6f 67 20 66 69 6c 65 20 77 69 6c 6c  ce log file will
1930: 20 62 65 20 63 6f 70 69 65 64 20 69 6e 74 6f 20   be copied into 
1940: 74 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20 6d  the..  #       m
1950: 61 69 6e 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  ain test log fil
1960: 65 20 61 6e 64 20 74 68 65 6e 20 64 65 6c 65 74  e and then delet
1970: 65 64 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20  ed...  #..  set 
1980: 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 5b 61 70 70  logFileName [app
1990: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f  endArgs [file ro
19a0: 6f 74 6e 61 6d 65 20 24 74 65 73 74 5f 6c 6f 67  otname $test_log
19b0: 5d 20 2e 74 72 61 63 65 2e 6c 6f 67 5d 0d 0a 20  ] .trace.log].. 
19c0: 20 73 65 74 75 70 4c 6f 67 67 69 6e 67 20 24 6c   setupLogging $l
19d0: 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20  ogFileName....  
19e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1a30: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
1a40: 53 65 74 75 70 20 74 68 65 20 64 65 66 61 75 6c  Setup the defaul
1a50: 74 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  t values for the
1a60: 20 74 75 6e 61 62 6c 65 20 77 6f 72 6b 6c 6f 61   tunable workloa
1a70: 64 20 70 61 72 61 6d 65 74 65 72 73 2e 20 20 41  d parameters.  A
1a80: 6e 79 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 61  ny,..  #       a
1a90: 6c 6c 2c 20 6f 72 20 6e 6f 6e 65 20 6f 66 20 74  ll, or none of t
1aa0: 68 65 73 65 20 6d 61 79 20 62 65 20 6f 76 65 72  hese may be over
1ab0: 72 69 64 65 6e 20 76 69 61 20 74 68 65 20 63 6f  riden via the co
1ac0: 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0d 0a 20 20 23  mmand line...  #
1ad0: 0d 0a 20 20 73 65 74 20 63 6f 75 6e 74 28 30 29  ..  set count(0)
1ae0: 20 31 3b 20 20 20 20 20 20 20 20 20 23 20 57 6f   1;         # Wo
1af0: 72 6b 6c 6f 61 64 20 72 65 70 65 61 74 20 63 6f  rkload repeat co
1b00: 75 6e 74 20 28 69 2e 65 2e 20 74 6f 74 61 6c 20  unt (i.e. total 
1b10: 66 75 6c 6c 20 72 75 6e 73 29 2e 0d 0a 20 20 73  full runs)...  s
1b20: 65 74 20 63 6f 75 6e 74 28 31 29 20 32 30 3b 20  et count(1) 20; 
1b30: 20 20 20 20 20 20 20 23 20 57 6f 72 6b 6c 6f 61         # Workloa
1b40: 64 20 69 74 65 72 61 74 69 6f 6e 20 63 6f 75 6e  d iteration coun
1b50: 74 20 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 61  t (i.e. within a
1b60: 20 72 75 6e 29 2e 0d 0a 20 20 73 65 74 20 63 6f   run)...  set co
1b70: 75 6e 74 28 32 29 20 35 30 30 3b 20 20 20 20 20  unt(2) 500;     
1b80: 20 20 23 20 57 6f 72 6b 6c 6f 61 64 20 69 74 65    # Workload ite
1b90: 72 61 74 69 6f 6e 20 64 65 6c 61 79 2c 20 69 6e  ration delay, in
1ba0: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 0d 0a   milliseconds...
1bb0: 20 20 73 65 74 20 63 6f 75 6e 74 28 33 29 20 32    set count(3) 2
1bc0: 30 30 30 3b 20 20 20 20 20 20 23 20 57 6f 72 6b  000;      # Work
1bd0: 6c 6f 61 64 20 22 73 6d 61 6c 6c 22 20 64 61 74  load "small" dat
1be0: 61 20 63 68 75 6e 6b 20 73 69 7a 65 2c 20 69 6e  a chunk size, in
1bf0: 20 62 79 74 65 73 2e 0d 0a 20 20 73 65 74 20 63   bytes...  set c
1c00: 6f 75 6e 74 28 34 29 20 31 30 30 30 30 30 30 30  ount(4) 10000000
1c10: 3b 20 20 23 20 57 6f 72 6b 6c 6f 61 64 20 22 62  ;  # Workload "b
1c20: 69 67 22 20 64 61 74 61 20 63 68 75 6e 6b 20 73  ig" data chunk s
1c30: 69 7a 65 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a  ize, in bytes...
1c40: 20 20 73 65 74 20 63 6f 75 6e 74 28 35 29 20 33    set count(5) 3
1c50: 31 34 35 37 32 38 30 30 3b 20 23 20 4d 61 78 69  14572800; # Maxi
1c60: 6d 75 6d 20 68 65 61 70 20 6d 65 6d 6f 72 79 20  mum heap memory 
1c70: 74 6f 20 65 78 63 6c 75 64 65 20 61 74 20 6f 6e  to exclude at on
1c80: 65 20 74 69 6d 65 2e 0d 0a 20 20 73 65 74 20 6e  e time...  set n
1c90: 6f 57 6f 72 6b 6c 6f 61 64 20 5b 6c 69 73 74 5d  oWorkload [list]
1ca0: 3b 20 20 23 20 57 6f 72 6b 6c 6f 61 64 73 20 74  ;  # Workloads t
1cb0: 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  o be omitted fro
1cc0: 6d 20 74 68 65 20 72 75 6e 2c 20 62 79 20 69 6e  m the run, by in
1cd0: 64 65 78 2e 0d 0a 20 20 73 65 74 20 70 72 69 6f  dex...  set prio
1ce0: 72 69 74 69 65 73 20 5b 6c 69 73 74 5d 3b 20 20  rities [list];  
1cf0: 23 20 44 69 63 74 69 6f 6e 61 72 79 20 6f 66 20  # Dictionary of 
1d00: 77 6f 72 6b 6c 6f 61 64 20 74 68 72 65 61 64 20  workload thread 
1d10: 70 72 69 6f 72 69 74 69 65 73 2e 0d 0a 20 20 73  priorities...  s
1d20: 65 74 20 65 78 69 74 4f 6e 46 61 69 6c 20 74 72  et exitOnFail tr
1d30: 75 65 3b 20 20 20 20 23 20 48 61 6c 74 20 74 65  ue;    # Halt te
1d40: 73 74 69 6e 67 20 61 6e 64 20 65 78 69 74 20 70  sting and exit p
1d50: 72 6f 63 65 73 73 20 6f 6e 20 74 65 73 74 20 66  rocess on test f
1d60: 61 69 6c 75 72 65 3f 0d 0a 20 20 73 65 74 20 63  ailure?..  set c
1d70: 6f 54 61 73 6b 4d 65 6d 20 74 72 75 65 3b 20 20  oTaskMem true;  
1d80: 20 20 20 23 20 55 73 65 20 41 6c 6c 6f 63 43 6f     # Use AllocCo
1d90: 54 61 73 6b 4d 65 6d 2f 46 72 65 65 43 6f 54 61  TaskMem/FreeCoTa
1da0: 73 6b 4d 65 6d 20 66 6f 72 20 6d 65 6d 6f 72 79  skMem for memory
1db0: 3f 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23  ?....  #########
1dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e00: 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  ####....  #..  #
1e10: 20 4e 4f 54 45 3a 20 49 66 20 63 6f 6d 6d 61 6e   NOTE: If comman
1e20: 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73  d line arguments
1e30: 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69   to the test sui
1e40: 74 65 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  te are available
1e50: 2c 20 70 72 6f 63 65 73 73 0d 0a 20 20 23 20 20  , process..  #  
1e60: 20 20 20 20 20 74 68 65 6d 20 66 6f 72 20 61 6e       them for an
1e70: 79 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 61  y options that a
1e80: 72 65 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f  re applicable to
1e90: 20 74 68 69 73 20 74 65 73 74 20 28 69 2e 65 2e   this test (i.e.
1ea0: 20 61 6e 79 20 6f 66 0d 0a 20 20 23 20 20 20 20   any of..  #    
1eb0: 20 20 20 74 68 65 20 74 75 6e 61 62 6c 65 20 77     the tunable w
1ec0: 6f 72 6b 6c 6f 61 64 20 70 61 72 61 6d 65 74 65  orkload paramete
1ed0: 72 73 20 6c 69 73 74 65 64 20 61 62 6f 76 65 29  rs listed above)
1ee0: 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 5b 69  ...  #..  if {[i
1ef0: 6e 66 6f 20 65 78 69 73 74 73 20 61 72 67 76 5d  nfo exists argv]
1f00: 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72   && [llength $ar
1f10: 67 76 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  gv] > 0} then {.
1f20: 0a 20 20 20 20 70 61 72 73 65 20 6f 70 74 69 6f  .    parse optio
1f30: 6e 73 20 2d 66 6c 61 67 73 20 5c 0d 0a 20 20 20  ns -flags \..   
1f40: 20 20 20 20 20 7b 2d 53 74 6f 70 4f 6e 55 6e 6b       {-StopOnUnk
1f50: 6e 6f 77 6e 4f 70 74 69 6f 6e 20 2b 49 67 6e 6f  nownOption +Igno
1f60: 72 65 4f 6e 55 6e 6b 6e 6f 77 6e 4f 70 74 69 6f  reOnUnknownOptio
1f70: 6e 20 53 6b 69 70 4f 6e 55 6e 6b 6e 6f 77 6e 4f  n SkipOnUnknownO
1f80: 70 74 69 6f 6e 7d 20 2d 2d 20 5c 0d 0a 20 20 20  ption} -- \..   
1f90: 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 73 74       [list [list
1fa0: 20 6e 75 6c 6c 20 4d 75 73 74 48 61 76 65 49 6e   null MustHaveIn
1fb0: 74 65 67 65 72 56 61 6c 75 65 20 2d 31 20 2d 31  tegerValue -1 -1
1fc0: 20 2d 63 6f 75 6e 74 30 20 24 63 6f 75 6e 74 28   -count0 $count(
1fd0: 30 29 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  0)] \..        [
1fe0: 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48 61  list null MustHa
1ff0: 76 65 49 6e 74 65 67 65 72 56 61 6c 75 65 20 2d  veIntegerValue -
2000: 31 20 2d 31 20 2d 63 6f 75 6e 74 31 20 24 63 6f  1 -1 -count1 $co
2010: 75 6e 74 28 31 29 5d 20 5c 0d 0a 20 20 20 20 20  unt(1)] \..     
2020: 20 20 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75     [list null Mu
2030: 73 74 48 61 76 65 49 6e 74 65 67 65 72 56 61 6c  stHaveIntegerVal
2040: 75 65 20 2d 31 20 2d 31 20 2d 63 6f 75 6e 74 32  ue -1 -1 -count2
2050: 20 24 63 6f 75 6e 74 28 32 29 5d 20 5c 0d 0a 20   $count(2)] \.. 
2060: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 6e 75 6c         [list nul
2070: 6c 20 4d 75 73 74 48 61 76 65 49 6e 74 65 67 65  l MustHaveIntege
2080: 72 56 61 6c 75 65 20 2d 31 20 2d 31 20 2d 63 6f  rValue -1 -1 -co
2090: 75 6e 74 33 20 24 63 6f 75 6e 74 28 33 29 5d 20  unt3 $count(3)] 
20a0: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74  \..        [list
20b0: 20 6e 75 6c 6c 20 4d 75 73 74 48 61 76 65 49 6e   null MustHaveIn
20c0: 74 65 67 65 72 56 61 6c 75 65 20 2d 31 20 2d 31  tegerValue -1 -1
20d0: 20 2d 63 6f 75 6e 74 34 20 24 63 6f 75 6e 74 28   -count4 $count(
20e0: 34 29 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  4)] \..        [
20f0: 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48 61  list null MustHa
2100: 76 65 49 6e 74 65 67 65 72 56 61 6c 75 65 20 2d  veIntegerValue -
2110: 31 20 2d 31 20 2d 63 6f 75 6e 74 35 20 24 63 6f  1 -1 -count5 $co
2120: 75 6e 74 28 35 29 5d 20 5c 0d 0a 20 20 20 20 20  unt(5)] \..     
2130: 20 20 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75     [list null Mu
2140: 73 74 48 61 76 65 4c 69 73 74 56 61 6c 75 65 20  stHaveListValue 
2150: 2d 31 20 2d 31 20 2d 6e 6f 57 6f 72 6b 6c 6f 61  -1 -1 -noWorkloa
2160: 64 20 24 6e 6f 57 6f 72 6b 6c 6f 61 64 5d 20 5c  d $noWorkload] \
2170: 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20  ..        [list 
2180: 6e 75 6c 6c 20 4d 75 73 74 48 61 76 65 4c 69 73  null MustHaveLis
2190: 74 56 61 6c 75 65 20 2d 31 20 2d 31 20 2d 70 72  tValue -1 -1 -pr
21a0: 69 6f 72 69 74 69 65 73 20 24 70 72 69 6f 72 69  iorities $priori
21b0: 74 69 65 73 5d 20 5c 0d 0a 20 20 20 20 20 20 20  ties] \..       
21c0: 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74   [list null Must
21d0: 48 61 76 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  HaveBooleanValue
21e0: 20 2d 31 20 2d 31 20 2d 65 78 69 74 4f 6e 46 61   -1 -1 -exitOnFa
21f0: 69 6c 20 24 65 78 69 74 4f 6e 46 61 69 6c 5d 20  il $exitOnFail] 
2200: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74  \..        [list
2210: 20 6e 75 6c 6c 20 4d 75 73 74 48 61 76 65 42 6f   null MustHaveBo
2220: 6f 6c 65 61 6e 56 61 6c 75 65 20 2d 31 20 2d 31  oleanValue -1 -1
2230: 20 2d 63 6f 54 61 73 6b 4d 65 6d 20 24 63 6f 54   -coTaskMem $coT
2240: 61 73 6b 4d 65 6d 5d 5d 20 24 61 72 67 76 0d 0a  askMem]] $argv..
2250: 0d 0a 20 20 20 20 73 65 74 20 63 6f 75 6e 74 28  ..    set count(
2260: 30 29 20 24 6f 70 74 69 6f 6e 73 28 2d 63 6f 75  0) $options(-cou
2270: 6e 74 30 2c 76 61 6c 75 65 29 0d 0a 20 20 20 20  nt0,value)..    
2280: 73 65 74 20 63 6f 75 6e 74 28 31 29 20 24 6f 70  set count(1) $op
2290: 74 69 6f 6e 73 28 2d 63 6f 75 6e 74 31 2c 76 61  tions(-count1,va
22a0: 6c 75 65 29 0d 0a 20 20 20 20 73 65 74 20 63 6f  lue)..    set co
22b0: 75 6e 74 28 32 29 20 24 6f 70 74 69 6f 6e 73 28  unt(2) $options(
22c0: 2d 63 6f 75 6e 74 32 2c 76 61 6c 75 65 29 0d 0a  -count2,value)..
22d0: 20 20 20 20 73 65 74 20 63 6f 75 6e 74 28 33 29      set count(3)
22e0: 20 24 6f 70 74 69 6f 6e 73 28 2d 63 6f 75 6e 74   $options(-count
22f0: 33 2c 76 61 6c 75 65 29 0d 0a 20 20 20 20 73 65  3,value)..    se
2300: 74 20 63 6f 75 6e 74 28 34 29 20 24 6f 70 74 69  t count(4) $opti
2310: 6f 6e 73 28 2d 63 6f 75 6e 74 34 2c 76 61 6c 75  ons(-count4,valu
2320: 65 29 0d 0a 20 20 20 20 73 65 74 20 63 6f 75 6e  e)..    set coun
2330: 74 28 35 29 20 24 6f 70 74 69 6f 6e 73 28 2d 63  t(5) $options(-c
2340: 6f 75 6e 74 35 2c 76 61 6c 75 65 29 0d 0a 20 20  ount5,value)..  
2350: 20 20 73 65 74 20 6e 6f 57 6f 72 6b 6c 6f 61 64    set noWorkload
2360: 20 24 6f 70 74 69 6f 6e 73 28 2d 6e 6f 57 6f 72   $options(-noWor
2370: 6b 6c 6f 61 64 2c 76 61 6c 75 65 29 0d 0a 20 20  kload,value)..  
2380: 20 20 73 65 74 20 70 72 69 6f 72 69 74 69 65 73    set priorities
2390: 20 24 6f 70 74 69 6f 6e 73 28 2d 70 72 69 6f 72   $options(-prior
23a0: 69 74 69 65 73 2c 76 61 6c 75 65 29 0d 0a 20 20  ities,value)..  
23b0: 20 20 73 65 74 20 65 78 69 74 4f 6e 46 61 69 6c    set exitOnFail
23c0: 20 24 6f 70 74 69 6f 6e 73 28 2d 65 78 69 74 4f   $options(-exitO
23d0: 6e 46 61 69 6c 2c 76 61 6c 75 65 29 0d 0a 20 20  nFail,value)..  
23e0: 20 20 73 65 74 20 63 6f 54 61 73 6b 4d 65 6d 20    set coTaskMem 
23f0: 24 6f 70 74 69 6f 6e 73 28 2d 63 6f 54 61 73 6b  $options(-coTask
2400: 4d 65 6d 2c 76 61 6c 75 65 29 0d 0a 20 20 7d 0d  Mem,value)..  }.
2410: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
2420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2460: 23 23 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74  ##....  tputs $t
2470: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2480: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
2490: 20 22 2d 2d 2d 2d 20 77 6f 72 6b 6c 6f 61 64 73   "---- workloads
24a0: 20 77 69 6c 6c 20 72 65 70 65 61 74 20 22 20 24   will repeat " $
24b0: 63 6f 75 6e 74 28 30 29 20 22 20 74 69 6d 65 28  count(0) " time(
24c0: 73 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 74 70 75 74  s)\n"]....  tput
24d0: 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  s $test_channel 
24e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
24f0: 20 20 20 20 20 22 2d 2d 2d 2d 20 77 6f 72 6b 6c       "---- workl
2500: 6f 61 64 73 20 77 69 6c 6c 20 68 61 76 65 20 22  oads will have "
2510: 20 24 63 6f 75 6e 74 28 31 29 20 22 20 69 74 65   $count(1) " ite
2520: 72 61 74 69 6f 6e 28 73 29 5c 6e 22 5d 0d 0a 0d  ration(s)\n"]...
2530: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
2540: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2550: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
2560: 2d 20 77 6f 72 6b 6c 6f 61 64 73 20 77 69 6c 6c  - workloads will
2570: 20 77 61 69 74 20 61 74 20 6c 65 61 73 74 20 22   wait at least "
2580: 20 24 63 6f 75 6e 74 28 32 29 20 5c 0d 0a 20 20   $count(2) \..  
2590: 20 20 20 20 22 20 6d 69 6c 6c 69 73 65 63 6f 6e      " millisecon
25a0: 64 28 73 29 20 61 66 74 65 72 20 65 61 63 68 20  d(s) after each 
25b0: 69 74 65 72 61 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d  iteration\n"]...
25c0: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
25d0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
25e0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
25f0: 2d 20 73 6d 61 6c 6c 20 63 68 75 6e 6b 20 73 69  - small chunk si
2600: 7a 65 20 69 73 20 22 20 24 63 6f 75 6e 74 28 33  ze is " $count(3
2610: 29 20 22 20 62 79 74 65 28 73 29 5c 6e 22 5d 0d  ) " byte(s)\n"].
2620: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
2630: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
2640: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d  Args \..      "-
2650: 2d 2d 2d 20 62 69 67 20 63 68 75 6e 6b 20 73 69  --- big chunk si
2660: 7a 65 20 69 73 20 22 20 24 63 6f 75 6e 74 28 34  ze is " $count(4
2670: 29 20 22 20 62 79 74 65 28 73 29 5c 6e 22 5d 0d  ) " byte(s)\n"].
2680: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
2690: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
26a0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d  Args \..      "-
26b0: 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 65 78 63 6c  --- maximum excl
26c0: 75 64 65 64 20 68 65 61 70 20 6d 65 6d 6f 72 79  uded heap memory
26d0: 20 69 73 20 22 20 24 63 6f 75 6e 74 28 35 29 20   is " $count(5) 
26e0: 22 20 62 79 74 65 28 73 29 5c 6e 22 5d 0d 0a 0d  " byte(s)\n"]...
26f0: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
2700: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2710: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
2720: 2d 20 77 6f 72 6b 6c 6f 61 64 73 20 74 6f 20 62  - workloads to b
2730: 65 20 73 6b 69 70 70 65 64 2e 2e 2e 20 22 20 5c  e skipped... " \
2740: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
2750: 6c 6c 65 6e 67 74 68 20 24 6e 6f 57 6f 72 6b 6c  llength $noWorkl
2760: 6f 61 64 5d 20 3e 20 30 20 3f 20 24 6e 6f 57 6f  oad] > 0 ? $noWo
2770: 72 6b 6c 6f 61 64 20 3a 20 22 6e 6f 6e 65 22 7d  rkload : "none"}
2780: 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 74 70 75 74 73  ] \n]....  tputs
2790: 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b   $test_channel [
27a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
27b0: 20 20 20 20 22 2d 2d 2d 2d 20 77 6f 72 6b 6c 6f      "---- worklo
27c0: 61 64 73 20 70 72 69 6f 72 69 74 79 20 6f 76 65  ads priority ove
27d0: 72 72 69 64 65 73 2e 2e 2e 20 22 20 5c 0d 0a 20  rrides... " \.. 
27e0: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 6c 6c 65       [expr {[lle
27f0: 6e 67 74 68 20 24 70 72 69 6f 72 69 74 69 65 73  ngth $priorities
2800: 5d 20 3e 20 30 20 3f 20 24 70 72 69 6f 72 69 74  ] > 0 ? $priorit
2810: 69 65 73 20 3a 20 22 6e 6f 6e 65 22 7d 5d 20 5c  ies : "none"}] \
2820: 6e 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74  n]....  tputs $t
2830: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2840: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
2850: 20 22 2d 2d 2d 2d 20 75 6e 65 78 70 65 63 74 65   "---- unexpecte
2860: 64 20 65 72 72 6f 72 73 20 22 20 5c 0d 0a 20 20  d errors " \..  
2870: 20 20 20 20 5b 65 78 70 72 20 7b 24 65 78 69 74      [expr {$exit
2880: 4f 6e 46 61 69 6c 20 3f 20 22 77 69 6c 6c 22 20  OnFail ? "will" 
2890: 3a 20 22 77 69 6c 6c 20 6e 6f 74 22 7d 5d 20 5c  : "will not"}] \
28a0: 0d 0a 20 20 20 20 20 20 22 20 68 61 6c 74 20 74  ..      " halt t
28b0: 65 73 74 69 6e 67 20 61 6e 64 20 65 78 69 74 20  esting and exit 
28c0: 74 68 65 20 70 72 6f 63 65 73 73 5c 6e 22 5d 0d  the process\n"].
28d0: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
28e0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
28f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d  Args \..      "-
2900: 2d 2d 2d 20 74 68 65 20 22 20 5b 65 78 70 72 20  --- the " [expr 
2910: 7b 24 63 6f 54 61 73 6b 4d 65 6d 20 3f 20 22 43  {$coTaskMem ? "C
2920: 6f 54 61 73 6b 4d 65 6d 22 20 3a 20 22 53 51 4c  oTaskMem" : "SQL
2930: 69 74 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  ite"}] \..      
2940: 22 20 61 6c 6c 6f 63 61 74 6f 72 20 77 69 6c 6c  " allocator will
2950: 20 62 65 20 75 73 65 64 20 74 6f 20 65 78 63 6c   be used to excl
2960: 75 64 65 20 68 65 61 70 20 6d 65 6d 6f 72 79 5c  ude heap memory\
2970: 6e 22 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23  n"]....  #######
2980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29c0: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20  ######....  #.. 
29d0: 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create 
29e0: 74 68 65 20 77 6f 72 6b 6c 6f 61 64 20 70 72 69  the workload pri
29f0: 6f 72 69 74 79 20 61 72 72 61 79 20 62 61 73 65  ority array base
2a00: 64 20 6f 6e 20 74 68 65 20 70 72 69 6f 72 69 74  d on the priorit
2a10: 79 20 6c 69 73 74 20 73 65 65 6e 0d 0a 20 20 23  y list seen..  #
2a20: 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63 6f         on the co
2a30: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 69 66 20 61  mmand line, if a
2a40: 6e 79 2e 0d 0a 20 20 23 0d 0a 20 20 61 72 72 61  ny...  #..  arra
2a50: 79 20 73 65 74 20 70 72 69 6f 72 69 74 79 20 24  y set priority $
2a60: 70 72 69 6f 72 69 74 69 65 73 0d 0a 0d 0a 20 20  priorities....  
2a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
2ac0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
2ad0: 57 6f 72 6b 6c 6f 61 64 73 20 23 31 32 20 61 6e  Workloads #12 an
2ae0: 64 20 23 31 33 20 63 6f 6e 74 61 69 6e 20 43 23  d #13 contain C#
2af0: 20 63 6f 64 65 20 74 68 61 74 20 73 68 6f 75 6c   code that shoul
2b00: 64 20 62 65 20 63 6f 6d 70 69 6c 65 64 2c 20 62  d be compiled, b
2b10: 75 74 0d 0a 20 20 23 20 20 20 20 20 20 20 6f 6e  ut..  #       on
2b20: 6c 79 20 6f 6e 63 65 2e 20 20 54 68 65 73 65 20  ly once.  These 
2b30: 76 61 72 69 61 62 6c 65 73 20 6b 65 65 70 20 74  variables keep t
2b40: 72 61 63 6b 20 6f 66 20 74 68 61 74 20 73 74 61  rack of that sta
2b50: 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d  te information..
2b60: 0a 20 20 23 20 20 20 20 20 20 20 41 6e 20 69 6e  .  #       An in
2b70: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 6f  teger value in o
2b80: 6e 65 20 6f 66 20 74 68 65 73 65 20 76 61 72 69  ne of these vari
2b90: 61 62 6c 65 73 20 6d 65 61 6e 73 20 74 68 65 20  ables means the 
2ba0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 77 61 73 0d  compilation was.
2bb0: 0a 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6c  .  #       compl
2bc0: 65 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  eted and the res
2bd0: 75 6c 74 69 6e 67 20 63 6f 6d 70 69 6c 65 64 20  ulting compiled 
2be0: 6d 65 74 68 6f 64 20 6d 61 79 20 62 65 20 69 6e  method may be in
2bf0: 76 6f 6b 65 64 20 75 73 69 6e 67 20 74 68 65 0d  voked using the.
2c00: 0a 20 20 23 20 20 20 20 20 20 20 66 6f 6c 6c 6f  .  #       follo
2c10: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 28 77 68  wing command (wh
2c20: 65 72 65 20 24 7b 69 64 7d 20 69 73 20 74 68 65  ere ${id} is the
2c30: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 76 61   value of the va
2c40: 72 69 61 62 6c 65 29 3a 0d 0a 20 20 23 0d 0a 20  riable):..  #.. 
2c50: 20 23 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a   #           obj
2c60: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
2c70: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
2c80: 64 7d 20 42 61 63 6b 75 70 41 6e 64 47 65 74 44  d} BackupAndGetD
2c90: 61 74 61 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20  ata..  #..  set 
2ca0: 63 6f 6d 70 69 6c 65 64 28 31 32 29 20 22 22 0d  compiled(12) "".
2cb0: 0a 20 20 73 65 74 20 63 6f 6d 70 69 6c 65 64 28  .  set compiled(
2cc0: 31 33 29 20 22 22 0d 0a 0d 0a 20 20 23 23 23 23  13) ""....  ####
2cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d10: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23  #########....  #
2d20: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73  ..  # NOTE: This
2d30: 20 69 73 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79   is an in-memory
2d40: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 73   database with s
2d50: 68 61 72 65 64 20 63 61 63 68 65 20 65 6e 61 62  hared cache enab
2d60: 6c 65 64 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74  led...  #..  set
2d70: 20 66 69 6c 65 4e 61 6d 65 28 31 29 20 66 69 6c   fileName(1) fil
2d80: 65 3a 3a 6d 65 6d 6f 72 79 3a 3f 63 61 63 68 65  e::memory:?cache
2d90: 3d 73 68 61 72 65 64 0d 0a 0d 0a 20 20 23 23 23  =shared....  ###
2da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2de0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
2df0: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69  #..  # NOTE: Thi
2e00: 73 20 69 73 20 61 20 6e 6f 72 6d 61 6c 20 6f 6e  s is a normal on
2e10: 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65 2e 0d  -disk database..
2e20: 0a 20 20 23 0d 0a 20 20 73 65 74 20 66 69 6c 65  .  #..  set file
2e30: 4e 61 6d 65 28 32 29 20 5b 66 69 6c 65 20 6a 6f  Name(2) [file jo
2e40: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
2e50: 69 72 65 63 74 6f 72 79 5d 20 5b 61 70 70 65 6e  irectory] [appen
2e60: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 73  dArgs \..      s
2e70: 74 72 65 73 73 2d 20 5b 70 69 64 5d 20 2d 20 5b  tress- [pid] - [
2e80: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 63 6c 6f  string trim [clo
2e90: 63 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 5d 20 2e  ck seconds] -] .
2ea0: 64 62 5d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  db]]....  ######
2eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ef0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
2f00: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 28 31  upDb $fileName(1
2f10: 29 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22  ) "" "" "" "" ""
2f20: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 74 72 75   false false tru
2f30: 65 20 74 72 75 65 20 73 72 63 44 62 0d 0a 20 20  e true srcDb..  
2f40: 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
2f50: 65 28 32 29 0d 0a 0d 0a 20 20 23 23 23 23 23 23  e(2)....  ######
2f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fa0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a  #######....  #..
2fb0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 73    # NOTE: This s
2fc0: 65 72 76 65 73 20 74 77 6f 20 70 75 72 70 6f 73  erves two purpos
2fd0: 65 73 2e 20 20 46 69 72 73 74 2c 20 69 74 20 61  es.  First, it a
2fe0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 76 65 72 69  llows us to veri
2ff0: 66 79 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20  fy the trace..  
3000: 23 20 20 20 20 20 20 20 6c 6f 67 67 69 6e 67 20  #       logging 
3010: 73 75 62 73 79 73 74 65 6d 20 69 73 20 77 6f 72  subsystem is wor
3020: 6b 69 6e 67 20 70 72 6f 70 65 72 6c 79 2e 20 20  king properly.  
3030: 53 65 63 6f 6e 64 2c 20 69 74 20 70 6c 61 63 65  Second, it place
3040: 73 20 74 68 65 20 66 69 6c 65 0d 0a 20 20 23 20  s the file..  # 
3050: 20 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74        name for t
3060: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 64 61  he associated da
3070: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 74 6f  tabase file into
3080: 20 74 68 65 20 74 72 61 63 65 20 6c 6f 67 20 66   the trace log f
3090: 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74  ile...  #..  set
30a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74   connection [get
30b0: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d  DbConnection]...
30c0: 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  .  $connection L
30d0: 6f 67 4d 65 73 73 61 67 65 20 30 20 5b 61 70 70  ogMessage 0 [app
30e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
30f0: 20 22 73 74 61 72 74 69 6e 67 20 73 74 72 65 73   "starting stres
3100: 73 20 74 65 73 74 20 75 73 69 6e 67 20 64 61 74  s test using dat
3110: 61 62 61 73 65 20 5c 22 22 20 24 66 69 6c 65 4e  abase \"" $fileN
3120: 61 6d 65 28 32 29 20 5c 22 2e 2e 2e 5d 0d 0a 0d  ame(2) \"...]...
3130: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3180: 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20  ..  #           
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23 31 20 28     WORKLOAD #1 (
31b0: 41 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20  A)              
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d0: 23 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  #..  ###########
31e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3220: 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b  ##....  set work
3230: 6c 6f 61 64 28 31 29 20 5b 6c 69 73 74 20 5c 0d  load(1) [list \.
3240: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63  .      [list src
3250: 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65  FileName dstFile
3260: 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74  Name table count
3270: 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d  1 count2 count3]
3280: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
3290: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
32a0: 23 31 2c 20 43 52 45 41 54 45 20 54 41 42 4c 45  #1, CREATE TABLE
32b0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20   statements...  
32c0: 20 20 23 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64    #..    lappend
32d0: 20 3a 3a 74 69 6d 65 73 28 31 29 20 5b 6c 69 6e   ::times(1) [lin
32e0: 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20  dex [time {..   
32f0: 20 20 20 73 65 74 75 70 44 62 20 24 64 73 74 46     setupDb $dstF
3300: 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22  ileName "" "" ""
3310: 20 22 22 20 22 22 20 74 72 75 65 20 66 61 6c 73   "" "" true fals
3320: 65 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65  e..      for {se
3330: 74 20 69 6e 64 65 78 20 32 7d 20 7b 24 69 6e 64  t index 2} {$ind
3340: 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b  ex <= $count1} {
3350: 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {.. 
3360: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
3370: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  h {..          s
3380: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
3390: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 52 45              "CRE
33b0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
33c0: 20 45 58 49 53 54 53 20 74 22 20 5c 0d 0a 20 20   EXISTS t" \..  
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 24 69 6e 64              $ind
33e0: 65 78 20 22 28 78 20 50 52 49 4d 41 52 59 20 4b  ex "(x PRIMARY K
33f0: 45 59 2c 20 79 2c 20 7a 29 3b 22 5d 0d 0a 20 20  EY, y, z);"]..  
3400: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
3410: 20 41 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72   A..        } er
3420: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
3430: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45          if {[isE
3440: 78 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72  xpectedError $er
3450: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
3460: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65            showTe
3470: 73 74 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20  st a..          
3480: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
3490: 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 61        failTest a
34a0: 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   $error..       
34b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
34c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
34d0: 63 6c 65 61 6e 75 70 44 62 20 24 64 73 74 46 69  cleanupDb $dstFi
34e0: 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20  leName db false 
34f0: 74 72 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  true false..    
3500: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
3510: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
3520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
3560: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3580: 20 57 4f 52 4b 4c 4f 41 44 20 23 32 20 28 42 29   WORKLOAD #2 (B)
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
35b0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
35c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3600: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
3610: 61 64 28 32 29 20 5b 6c 69 73 74 20 5c 0d 0a 20  ad(2) [list \.. 
3620: 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46 69       [list srcFi
3630: 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e 61  leName dstFileNa
3640: 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31 20  me table count1 
3650: 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b  count2 count3] {
3660: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
3670: 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 32  OTE: Workload #2
3680: 2c 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  , DROP TABLE sta
3690: 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d  tements...    #.
36a0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74  .    lappend ::t
36b0: 69 6d 65 73 28 32 29 20 5b 6c 69 6e 64 65 78 20  imes(2) [lindex 
36c0: 5b 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 73  [time {..      s
36d0: 65 74 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e  etupDb $dstFileN
36e0: 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20  ame "" "" "" "" 
36f0: 22 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 20  "" true false.. 
3700: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
3710: 64 65 78 20 32 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 2} {$index <
3720: 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72  = $count1} {incr
3730: 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..     
3740: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
3750: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65  .          sql e
3760: 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65  xecute $db [appe
3770: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
3780: 20 20 20 20 20 20 20 20 22 44 52 4f 50 20 54 41          "DROP TA
3790: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 22  BLE IF EXISTS t"
37a0: 20 24 69 6e 64 65 78 20 5c 3b 5d 0d 0a 20 20 20   $index \;]..   
37b0: 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20         showTest 
37c0: 42 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72  B..        } err
37d0: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..   
37e0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78         if {[isEx
37f0: 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72  pectedError $err
3800: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..   
3810: 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73           showTes
3820: 74 20 62 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  t b..          }
3830: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
3840: 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 62 20       failTest b 
3850: 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  $error..        
3860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
3870: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63        }..      c
3880: 6c 65 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c  leanupDb $dstFil
3890: 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74  eName db false t
38a0: 72 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  rue false..    }
38b0: 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  ] 0]..  }]....  
38c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
38d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
38e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
38f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3900: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############.. 
3910: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 57 4f 52 4b 4c 4f 41 44 20 23 33 20 28 43 29 20  WORKLOAD #3 (C) 
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
3960: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
3970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
39a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
39b0: 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61  ...  set workloa
39c0: 64 28 33 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  d(3) [list \..  
39d0: 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46 69 6c      [list srcFil
39e0: 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d  eName dstFileNam
39f0: 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31 20 63  e table count1 c
3a00: 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d  ount2 count3] {.
3a10: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
3a20: 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 33 2c  TE: Workload #3,
3a30: 20 22 73 6d 61 6c 6c 22 20 53 45 4c 45 43 54 20   "small" SELECT 
3a40: 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20  statements...   
3a50: 20 23 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   #..    lappend 
3a60: 3a 3a 74 69 6d 65 73 28 33 29 20 5b 6c 69 6e 64  ::times(3) [lind
3a70: 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20 20  ex [time {..    
3a80: 20 20 73 65 74 75 70 44 62 20 24 64 73 74 46 69    setupDb $dstFi
3a90: 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" "" 
3aa0: 22 22 20 22 22 20 74 72 75 65 20 66 61 6c 73 65  "" "" true false
3ab0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
3ac0: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
3ad0: 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69  x <= $count1} {i
3ae0: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
3af0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
3b00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
3b10: 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67  t sql [appendArg
3b20: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..           
3b30: 20 20 20 22 53 45 4c 45 43 54 20 78 2c 20 79 20     "SELECT x, y 
3b40: 46 52 4f 4d 20 22 20 24 74 61 62 6c 65 20 22 20  FROM " $table " 
3b50: 57 48 45 52 45 20 7a 20 3d 20 27 73 6d 61 6c 6c  WHERE z = 'small
3b60: 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ';"]..          
3b70: 73 65 74 20 72 65 61 64 65 72 20 5b 73 71 6c 20  set reader [sql 
3b80: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
3b90: 20 72 65 61 64 65 72 20 5c 0d 0a 20 20 20 20 20   reader \..     
3ba0: 20 20 20 20 20 20 20 20 20 2d 66 6f 72 6d 61 74           -format
3bb0: 20 64 61 74 61 52 65 61 64 65 72 20 2d 61 6c 69   dataReader -ali
3bc0: 61 73 20 24 64 62 20 24 73 71 6c 5d 0d 0a 20 20  as $db $sql]..  
3bd0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 7b 5b          while {[
3be0: 24 72 65 61 64 65 72 20 52 65 61 64 5d 7d 20 7b  $reader Read]} {
3bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
3c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
3c10: 4f 54 45 3a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  OTE: Do nothing.
3c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
3c30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
3c40: 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
3c50: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 61 64 65 72  ocomplain reader
3c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68 6f 77  ..          show
3c70: 54 65 73 74 20 43 0d 0a 20 20 20 20 20 20 20 20  Test C..        
3c80: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
3c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
3ca0: 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f 72  [isExpectedError
3cb0: 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b   $error]} then {
3cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68  ..            sh
3cd0: 6f 77 54 65 73 74 20 63 0d 0a 20 20 20 20 20 20  owTest c..      
3ce0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
3cf0: 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54 65            failTe
3d00: 73 74 20 63 20 24 65 72 72 6f 72 0d 0a 20 20 20  st c $error..   
3d10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3d20: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
3d30: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 64      cleanupDb $d
3d40: 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20 66 61  stFileName db fa
3d50: 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  lse true false..
3d60: 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d      }] 0]..  }].
3d70: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
3d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3dc0: 23 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20  ##..  #         
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23 34       WORKLOAD #4
3df0: 20 28 44 29 20 20 20 20 20 20 20 20 20 20 20 20   (D)            
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e10: 20 20 23 0d 0a 20 20 23 23 23 23 23 23 23 23 23    #..  #########
3e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3e60: 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f  ####....  set wo
3e70: 72 6b 6c 6f 61 64 28 34 29 20 5b 6c 69 73 74 20  rkload(4) [list 
3e80: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73  \..      [list s
3e90: 72 63 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69  rcFileName dstFi
3ea0: 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75  leName table cou
3eb0: 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74  nt1 count2 count
3ec0: 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  3] {..    #..   
3ed0: 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61   # NOTE: Workloa
3ee0: 64 20 23 34 2c 20 22 62 69 67 22 20 53 45 4c 45  d #4, "big" SELE
3ef0: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a  CT statements...
3f00: 20 20 20 20 23 0d 0a 20 20 20 20 6c 61 70 70 65      #..    lappe
3f10: 6e 64 20 3a 3a 74 69 6d 65 73 28 34 29 20 5b 6c  nd ::times(4) [l
3f20: 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20  index [time {.. 
3f30: 20 20 20 20 20 73 65 74 75 70 44 62 20 24 64 73       setupDb $ds
3f40: 74 46 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  tFileName "" "" 
3f50: 22 22 20 22 22 20 22 22 20 74 72 75 65 20 66 61  "" "" "" true fa
3f60: 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b  lse..      for {
3f70: 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69  set index 1} {$i
3f80: 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d  ndex <= $count1}
3f90: 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
3fa0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
3fb0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..         
3fc0: 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64   set sql [append
3fd0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
3fe0: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78 2c        "SELECT x,
3ff0: 20 79 20 46 52 4f 4d 20 22 20 24 74 61 62 6c 65   y FROM " $table
4000: 20 22 20 57 48 45 52 45 20 7a 20 3d 20 27 62 69   " WHERE z = 'bi
4010: 67 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  g';"]..         
4020: 20 73 65 74 20 72 65 61 64 65 72 20 5b 73 71 6c   set reader [sql
4030: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
4040: 65 20 72 65 61 64 65 72 20 5c 0d 0a 20 20 20 20  e reader \..    
4050: 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72 6d 61            -forma
4060: 74 20 64 61 74 61 52 65 61 64 65 72 20 2d 61 6c  t dataReader -al
4070: 69 61 73 20 24 64 62 20 24 73 71 6c 5d 0d 0a 20  ias $db $sql].. 
4080: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 7b           while {
4090: 5b 24 72 65 61 64 65 72 20 52 65 61 64 5d 7d 20  [$reader Read]} 
40a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
40b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            # 
40c0: 4e 4f 54 45 3a 20 44 6f 20 6e 6f 74 68 69 6e 67  NOTE: Do nothing
40d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
40e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
40f0: 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
4100: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 61 64 65  nocomplain reade
4110: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68 6f  r..          sho
4120: 77 54 65 73 74 20 44 0d 0a 20 20 20 20 20 20 20  wTest D..       
4130: 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then 
4140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
4150: 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  {[isExpectedErro
4160: 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  r $error]} then 
4170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
4180: 68 6f 77 54 65 73 74 20 64 0d 0a 20 20 20 20 20  howTest d..     
4190: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
41a0: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54             failT
41b0: 65 73 74 20 64 20 24 65 72 72 6f 72 0d 0a 20 20  est d $error..  
41c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
41d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
41e0: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24       cleanupDb $
41f0: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20 66  dstFileName db f
4200: 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65 0d  alse true false.
4210: 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d  .    }] 0]..  }]
4220: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
4230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4270: 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20  ###..  #        
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4290: 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23        WORKLOAD #
42a0: 35 20 28 45 29 20 20 20 20 20 20 20 20 20 20 20  5 (E)           
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42c0: 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23 23 23     #..  ########
42d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4310: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
4320: 6f 72 6b 6c 6f 61 64 28 35 29 20 5b 6c 69 73 74  orkload(5) [list
4330: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
4340: 73 72 63 46 69 6c 65 4e 61 6d 65 20 64 73 74 46  srcFileName dstF
4350: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
4360: 75 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e  unt1 count2 coun
4370: 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  t3] {..    #..  
4380: 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f    # NOTE: Worklo
4390: 61 64 20 23 35 2c 20 22 73 6d 61 6c 6c 22 20 49  ad #5, "small" I
43a0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
43b0: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 6c 61  ...    #..    la
43c0: 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 35 29  ppend ::times(5)
43d0: 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b   [lindex [time {
43e0: 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20  ..      setupDb 
43f0: 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 22 22 20  $dstFileName "" 
4400: 22 22 20 22 22 20 22 22 20 22 22 20 74 72 75 65  "" "" "" "" true
4410: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f   false..      fo
4420: 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20  r {set index 1} 
4430: 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e  {$index <= $coun
4440: 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  t1} {incr index}
4450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
4460: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
4470: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
4480: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
4490: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
44a0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 20   "INSERT INTO " 
44b0: 24 74 61 62 6c 65 20 22 28 78 2c 20 79 2c 20 7a  $table "(x, y, z
44c0: 29 20 56 41 4c 55 45 53 28 27 22 20 5c 0d 0a 20  ) VALUES('" \.. 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f               [fo
44e0: 72 6d 61 74 20 25 6c 58 20 5b 65 78 70 72 20 7b  rmat %lX [expr {
44f0: 72 61 6e 64 6f 6d 28 29 7d 5d 5d 20 22 27 2c 20  random()}]] "', 
4500: 27 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  '" \..          
4510: 20 20 20 20 5b 62 61 73 65 36 34 20 65 6e 63 6f      [base64 enco
4520: 64 65 20 2d 2d 20 5b 65 78 70 72 20 7b 72 61 6e  de -- [expr {ran
4530: 64 73 74 72 28 24 63 6f 75 6e 74 32 29 7d 5d 5d  dstr($count2)}]]
4540: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4550: 20 20 22 27 2c 20 27 73 6d 61 6c 6c 27 29 3b 22    "', 'small');"
4560: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68 6f  ]..          sho
4570: 77 54 65 73 74 20 45 0d 0a 20 20 20 20 20 20 20  wTest E..       
4580: 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then 
4590: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
45a0: 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  {[isExpectedErro
45b0: 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  r $error]} then 
45c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
45d0: 68 6f 77 54 65 73 74 20 65 0d 0a 20 20 20 20 20  howTest e..     
45e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
45f0: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54             failT
4600: 65 73 74 20 65 20 24 65 72 72 6f 72 0d 0a 20 20  est e $error..  
4610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
4630: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24       cleanupDb $
4640: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20 66  dstFileName db f
4650: 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65 0d  alse true false.
4660: 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d  .    }] 0]..  }]
4670: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46c0: 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20  ###..  #        
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46e0: 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23        WORKLOAD #
46f0: 36 20 28 46 29 20 20 20 20 20 20 20 20 20 20 20  6 (F)           
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23 23 23     #..  ########
4720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4760: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
4770: 6f 72 6b 6c 6f 61 64 28 36 29 20 5b 6c 69 73 74  orkload(6) [list
4780: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
4790: 73 72 63 46 69 6c 65 4e 61 6d 65 20 64 73 74 46  srcFileName dstF
47a0: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
47b0: 75 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e  unt1 count2 coun
47c0: 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  t3] {..    #..  
47d0: 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f    # NOTE: Worklo
47e0: 61 64 20 23 36 2c 20 22 62 69 67 22 20 49 4e 53  ad #6, "big" INS
47f0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d  ERT statements..
4800: 0a 20 20 20 20 23 0d 0a 20 20 20 20 6c 61 70 70  .    #..    lapp
4810: 65 6e 64 20 3a 3a 74 69 6d 65 73 28 36 29 20 5b  end ::times(6) [
4820: 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a  lindex [time {..
4830: 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24 64        setupDb $d
4840: 73 74 46 69 6c 65 4e 61 6d 65 20 22 22 20 22 22  stFileName "" ""
4850: 20 22 22 20 22 22 20 22 22 20 74 72 75 65 20 66   "" "" "" true f
4860: 61 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f 72 20  alse..      for 
4870: 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24  {set index 1} {$
4880: 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31  index <= $count1
4890: 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
48a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
48b0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
48c0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
48d0: 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  b [appendArgs \.
48e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
48f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 20 24 74  INSERT INTO " $t
4900: 61 62 6c 65 20 22 28 78 2c 20 79 2c 20 7a 29 20  able "(x, y, z) 
4910: 56 41 4c 55 45 53 28 27 22 20 5c 0d 0a 20 20 20  VALUES('" \..   
4920: 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d             [form
4930: 61 74 20 25 6c 58 20 5b 65 78 70 72 20 7b 72 61  at %lX [expr {ra
4940: 6e 64 6f 6d 28 29 7d 5d 5d 20 5c 0d 0a 20 20 20  ndom()}]] \..   
4950: 20 20 20 20 20 20 20 20 20 20 20 22 27 2c 20 52             "', R
4960: 41 4e 44 4f 4d 42 4c 4f 42 28 22 20 24 63 6f 75  ANDOMBLOB(" $cou
4970: 6e 74 33 20 22 29 2c 20 27 62 69 67 27 29 3b 22  nt3 "), 'big');"
4980: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68 6f  ]..          sho
4990: 77 54 65 73 74 20 46 0d 0a 20 20 20 20 20 20 20  wTest F..       
49a0: 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then 
49b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
49c0: 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  {[isExpectedErro
49d0: 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  r $error]} then 
49e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
49f0: 68 6f 77 54 65 73 74 20 66 0d 0a 20 20 20 20 20  howTest f..     
4a00: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
4a10: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54             failT
4a20: 65 73 74 20 66 20 24 65 72 72 6f 72 0d 0a 20 20  est f $error..  
4a30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4a40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
4a50: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24       cleanupDb $
4a60: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20 66  dstFileName db f
4a70: 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65 0d  alse true false.
4a80: 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d  .    }] 0]..  }]
4a90: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
4aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ae0: 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20  ###..  #        
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b00: 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23        WORKLOAD #
4b10: 37 20 28 47 29 20 20 20 20 20 20 20 20 20 20 20  7 (G)           
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23 23 23     #..  ########
4b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b80: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
4b90: 6f 72 6b 6c 6f 61 64 28 37 29 20 5b 6c 69 73 74  orkload(7) [list
4ba0: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
4bb0: 73 72 63 46 69 6c 65 4e 61 6d 65 20 64 73 74 46  srcFileName dstF
4bc0: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
4bd0: 75 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e  unt1 count2 coun
4be0: 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  t3] {..    #..  
4bf0: 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f    # NOTE: Worklo
4c00: 61 64 20 23 37 2c 20 22 73 6d 61 6c 6c 22 20 55  ad #7, "small" U
4c10: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
4c20: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 6c 61  ...    #..    la
4c30: 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 37 29  ppend ::times(7)
4c40: 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b   [lindex [time {
4c50: 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20  ..      setupDb 
4c60: 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 22 22 20  $dstFileName "" 
4c70: 22 22 20 22 22 20 22 22 20 22 22 20 74 72 75 65  "" "" "" "" true
4c80: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f   false..      fo
4c90: 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20  r {set index 1} 
4ca0: 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e  {$index <= $coun
4cb0: 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  t1} {incr index}
4cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
4cd0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
4ce0: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
4cf0: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
4d00: 22 55 50 44 41 54 45 20 22 20 24 74 61 62 6c 65  "UPDATE " $table
4d10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4d20: 20 20 22 20 53 45 54 20 79 20 3d 20 27 22 20 5b    " SET y = '" [
4d30: 62 61 73 65 36 34 20 65 6e 63 6f 64 65 20 2d 2d  base64 encode --
4d40: 20 5b 65 78 70 72 20 7b 72 61 6e 64 73 74 72 28   [expr {randstr(
4d50: 24 63 6f 75 6e 74 32 29 7d 5d 5d 20 5c 0d 0a 20  $count2)}]] \.. 
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 27 20               "' 
4d70: 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27 22 20  WHERE x LIKE '" 
4d80: 5b 66 6f 72 6d 61 74 20 25 58 20 24 69 6e 64 65  [format %X $inde
4d90: 78 5d 20 22 25 27 20 41 4e 44 20 7a 20 3d 20 27  x] "%' AND z = '
4da0: 73 6d 61 6c 6c 27 3b 22 5d 0d 0a 20 20 20 20 20  small';"]..     
4db0: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 47 0d       showTest G.
4dc0: 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72  .        } error
4dd0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
4de0: 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65       if {[isExpe
4df0: 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72  ctedError $error
4e00: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
4e10: 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20         showTest 
4e20: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  g..          } e
4e30: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
4e40: 20 20 20 66 61 69 6c 54 65 73 74 20 67 20 24 65     failTest g $e
4e50: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
4e60: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
4e70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65      }..      cle
4e80: 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e  anupDb $dstFileN
4e90: 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72 75  ame db false tru
4ea0: 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 5d 20  e false..    }] 
4eb0: 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23  0]..  }]....  ##
4ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f00: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 23  ###########..  #
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 4f                WO
4f30: 52 4b 4c 4f 41 44 20 23 38 20 28 48 29 20 20 20  RKLOAD #8 (H)   
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f50: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
4f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
4fb0: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
4fc0: 38 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  8) [list \..    
4fd0: 20 20 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e    [list srcFileN
4fe0: 61 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20  ame dstFileName 
4ff0: 74 61 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75  table count1 cou
5000: 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20  nt2 count3] {.. 
5010: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
5020: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 38 2c 20 22  : Workload #8, "
5030: 62 69 67 22 20 55 50 44 41 54 45 20 73 74 61 74  big" UPDATE stat
5040: 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a  ements...    #..
5050: 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69      lappend ::ti
5060: 6d 65 73 28 38 29 20 5b 6c 69 6e 64 65 78 20 5b  mes(8) [lindex [
5070: 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 73 65  time {..      se
5080: 74 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e 61  tupDb $dstFileNa
5090: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
50a0: 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 20 20  " true false..  
50b0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64      for {set ind
50c0: 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d  ex 1} {$index <=
50d0: 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20   $count1} {incr 
50e0: 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..      
50f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
5100: 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65 78            sql ex
5110: 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e  ecute $db [appen
5120: 64 41 72 67 73 20 22 55 50 44 41 54 45 20 22 20  dArgs "UPDATE " 
5130: 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20  $table \..      
5140: 20 20 20 20 20 20 20 20 22 20 53 45 54 20 79 20          " SET y 
5150: 3d 20 52 41 4e 44 4f 4d 42 4c 4f 42 28 22 20 24  = RANDOMBLOB(" $
5160: 63 6f 75 6e 74 33 20 5c 0d 0a 20 20 20 20 20 20  count3 \..      
5170: 20 20 20 20 20 20 20 20 22 29 20 57 48 45 52 45          ") WHERE
5180: 20 78 20 4c 49 4b 45 20 27 22 20 5b 66 6f 72 6d   x LIKE '" [form
5190: 61 74 20 25 58 20 24 69 6e 64 65 78 5d 20 5c 0d  at %X $index] \.
51a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
51b0: 25 27 20 41 4e 44 20 7a 20 3d 20 27 62 69 67 27  %' AND z = 'big'
51c0: 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;"]..          s
51d0: 68 6f 77 54 65 73 74 20 48 0d 0a 20 20 20 20 20  howTest H..     
51e0: 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65     } error]} the
51f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
5200: 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72  f {[isExpectedEr
5210: 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65  ror $error]} the
5220: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
5230: 20 73 68 6f 77 54 65 73 74 20 68 0d 0a 20 20 20   showTest h..   
5240: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
5250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69  .            fai
5260: 6c 54 65 73 74 20 68 20 24 65 72 72 6f 72 0d 0a  lTest h $error..
5270: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5280: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
5290: 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62  .      cleanupDb
52a0: 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62   $dstFileName db
52b0: 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73   false true fals
52c0: 65 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20  e..    }] 0]..  
52d0: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
52e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
52f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5320: 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20  #####..  #      
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44          WORKLOAD
5350: 20 23 39 20 28 49 29 20 20 20 20 20 20 20 20 20   #9 (I)         
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5370: 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23       #..  ######
5380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
53d0: 20 77 6f 72 6b 6c 6f 61 64 28 39 29 20 5b 6c 69   workload(9) [li
53e0: 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  st \..      [lis
53f0: 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20 64 73  t srcFileName ds
5400: 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20  tFileName table 
5410: 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f  count1 count2 co
5420: 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a  unt3] {..    #..
5430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b      # NOTE: Work
5440: 6c 6f 61 64 20 23 39 2c 20 22 73 6d 61 6c 6c 22  load #9, "small"
5450: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
5460: 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ts...    #..    
5470: 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28  lappend ::times(
5480: 39 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65  9) [lindex [time
5490: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44   {..      setupD
54a0: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 22  b $dstFileName "
54b0: 22 20 22 22 20 22 22 20 22 22 20 22 22 20 74 72  " "" "" "" "" tr
54c0: 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ue false..      
54d0: 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
54e0: 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f  } {$index <= $co
54f0: 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65  unt1} {incr inde
5500: 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  x} {..        if
5510: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..    
5520: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
5530: 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  e $db [appendArg
5540: 73 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 22  s "DELETE FROM "
5550: 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20   $table \..     
5560: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
5570: 20 78 20 4c 49 4b 45 20 27 22 20 5b 66 6f 72 6d   x LIKE '" [form
5580: 61 74 20 25 58 20 24 69 6e 64 65 78 5d 20 22 25  at %X $index] "%
5590: 27 20 41 4e 44 20 7a 20 3d 20 27 73 6d 61 6c 6c  ' AND z = 'small
55a0: 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ';"]..          
55b0: 73 68 6f 77 54 65 73 74 20 49 0d 0a 20 20 20 20  showTest I..    
55c0: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
55d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
55e0: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
55f0: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
5600: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
5610: 20 20 73 68 6f 77 54 65 73 74 20 69 0d 0a 20 20    showTest i..  
5620: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
5640: 69 6c 54 65 73 74 20 69 20 24 65 72 72 6f 72 0d  ilTest i $error.
5650: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
5670: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
5680: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
5690: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
56a0: 73 65 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20  se..    }] 0].. 
56b0: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
56c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
56d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
56e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
56f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5700: 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20  ######..  #     
5710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5720: 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41           WORKLOA
5730: 44 20 23 31 30 20 28 4a 29 20 20 20 20 20 20 20  D #10 (J)       
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5750: 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23        #..  #####
5760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57a0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65  ########....  se
57b0: 74 20 77 6f 72 6b 6c 6f 61 64 28 31 30 29 20 5b  t workload(10) [
57c0: 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  list \..      [l
57d0: 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20  ist srcFileName 
57e0: 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c  dstFileName tabl
57f0: 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20  e count1 count2 
5800: 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23  count3] {..    #
5810: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f  ..    # NOTE: Wo
5820: 72 6b 6c 6f 61 64 20 23 31 30 2c 20 22 62 69 67  rkload #10, "big
5830: 22 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  " DELETE stateme
5840: 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  nts...    #..   
5850: 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73   lappend ::times
5860: 28 31 30 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69  (10) [lindex [ti
5870: 6d 65 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 75  me {..      setu
5880: 70 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65  pDb $dstFileName
5890: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" "" 
58a0: 74 72 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  true false..    
58b0: 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
58c0: 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24   1} {$index <= $
58d0: 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e  count1} {incr in
58e0: 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..        
58f0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..  
5900: 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63          sql exec
5910: 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA
5920: 72 67 73 20 22 44 45 4c 45 54 45 20 46 52 4f 4d  rgs "DELETE FROM
5930: 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20   " $table \..   
5940: 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45             " WHE
5950: 52 45 20 78 20 4c 49 4b 45 20 27 22 20 5b 66 6f  RE x LIKE '" [fo
5960: 72 6d 61 74 20 25 58 20 24 69 6e 64 65 78 5d 20  rmat %X $index] 
5970: 22 25 27 20 41 4e 44 20 7a 20 3d 20 27 62 69 67  "%' AND z = 'big
5980: 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ';"]..          
5990: 73 68 6f 77 54 65 73 74 20 4a 0d 0a 20 20 20 20  showTest J..    
59a0: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
59b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
59c0: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
59d0: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
59e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
59f0: 20 20 73 68 6f 77 54 65 73 74 20 6a 0d 0a 20 20    showTest j..  
5a00: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
5a20: 69 6c 54 65 73 74 20 6a 20 24 65 72 72 6f 72 0d  ilTest j $error.
5a30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5a40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
5a50: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
5a60: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
5a70: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
5a80: 73 65 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20  se..    }] 0].. 
5a90: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
5aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ae0: 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20  ######..  #     
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b00: 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41           WORKLOA
5b10: 44 20 23 31 31 20 28 4b 29 20 20 20 20 20 20 20  D #11 (K)       
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23        #..  #####
5b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65  ########....  se
5b90: 74 20 77 6f 72 6b 6c 6f 61 64 28 31 31 29 20 5b  t workload(11) [
5ba0: 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  list \..      [l
5bb0: 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20  ist srcFileName 
5bc0: 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c  dstFileName tabl
5bd0: 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20  e count1 count2 
5be0: 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23  count3] {..    #
5bf0: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f  ..    # NOTE: Wo
5c00: 72 6b 6c 6f 61 64 20 23 31 31 2c 20 56 41 43 55  rkload #11, VACU
5c10: 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  UM statement... 
5c20: 20 20 20 23 0d 0a 20 20 20 20 6c 61 70 70 65 6e     #..    lappen
5c30: 64 20 3a 3a 74 69 6d 65 73 28 31 31 29 20 5b 6c  d ::times(11) [l
5c40: 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20  index [time {.. 
5c50: 20 20 20 20 20 73 65 74 75 70 44 62 20 24 64 73       setupDb $ds
5c60: 74 46 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  tFileName "" "" 
5c70: 22 22 20 22 22 20 22 22 20 74 72 75 65 20 66 61  "" "" "" true fa
5c80: 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b  lse..      for {
5c90: 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69  set index 1} {$i
5ca0: 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d  ndex <= $count1}
5cb0: 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
5cc0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
5cd0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..         
5ce0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
5cf0: 20 22 56 41 43 55 55 4d 3b 22 0d 0a 20 20 20 20   "VACUUM;"..    
5d00: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 4b        showTest K
5d10: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f  ..        } erro
5d20: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
5d30: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70        if {[isExp
5d40: 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f  ectedError $erro
5d50: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
5d60: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
5d70: 20 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   k..          } 
5d80: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
5d90: 20 20 20 20 66 61 69 6c 54 65 73 74 20 6b 20 24      failTest k $
5da0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
5db0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5dc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c       }..      cl
5dd0: 65 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65  eanupDb $dstFile
5de0: 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72  Name db false tr
5df0: 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 5d  ue false..    }]
5e00: 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23   0]..  }]....  #
5e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e50: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..  
5e60: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57                 W
5e80: 4f 52 4b 4c 4f 41 44 20 23 31 32 20 28 4c 29 20  ORKLOAD #12 (L) 
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
5eb0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
5f00: 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64  ..  set workload
5f10: 28 31 32 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  (12) [list \..  
5f20: 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46 69 6c      [list srcFil
5f30: 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d  eName dstFileNam
5f40: 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31 20 63  e table count1 c
5f50: 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d  ount2 count3] {.
5f60: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
5f70: 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 32  TE: Workload #12
5f80: 2c 20 62 61 63 6b 75 70 20 74 6f 20 69 6e 2d 6d  , backup to in-m
5f90: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
5fa0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 6c 61 70 70  .    #..    lapp
5fb0: 65 6e 64 20 3a 3a 74 69 6d 65 73 28 31 32 29 20  end ::times(12) 
5fc0: 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d  [lindex [time {.
5fd0: 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20  .      for {set 
5fe0: 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78  index 1} {$index
5ff0: 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e   <= $count1} {in
6000: 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..   
6010: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
6020: 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72   is integer -str
6030: 69 63 74 20 24 3a 3a 63 6f 6d 70 69 6c 65 64 28  ict $::compiled(
6040: 31 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  12)]} then {..  
6050: 20 20 20 20 20 20 20 20 73 65 74 20 69 64 20 24          set id $
6060: 3a 3a 63 6f 6d 70 69 6c 65 64 28 31 32 29 3b 20  ::compiled(12); 
6070: 23 20 4e 4f 54 45 3a 20 41 6c 72 65 61 64 79 20  # NOTE: Already 
6080: 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20  compiled...     
6090: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch 
60a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
60b0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
60c0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
60d0: 7b 69 64 7d 20 42 61 63 6b 75 70 41 6e 64 47 65  {id} BackupAndGe
60e0: 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
60f0: 20 20 20 73 68 6f 77 54 65 73 74 20 4c 0d 0a 20     showTest L.. 
6100: 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
6110: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
6120: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78         if {[isEx
6130: 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72  pectedError $err
6140: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..   
6150: 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54             showT
6160: 65 73 74 20 6c 0d 0a 20 20 20 20 20 20 20 20 20  est l..         
6170: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
6180: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54             failT
6190: 65 73 74 20 6c 20 24 65 72 72 6f 72 0d 0a 20 20  est l $error..  
61a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
61b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
61c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
61d0: 20 20 20 20 20 20 73 65 74 20 69 64 20 5b 6f 62        set id [ob
61e0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
61f0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
6200: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 20 20 20  e NextId]..     
6210: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
6220: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
6230: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20   [subst {..     
6240: 20 20 20 20 20 20 20 75 73 69 6e 67 20 53 79 73         using Sys
6250: 74 65 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tem;..          
6260: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
6270: 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20  ata.SQLite;..   
6280: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 53           using S
6290: 79 73 74 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 20  ystem.Text;.... 
62a0: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 73             names
62b0: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
62c0: 64 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d}..            
62d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
62e0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
62f0: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6320: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
6330: 6f 69 64 20 42 61 63 6b 75 70 41 6e 64 47 65 74  oid BackupAndGet
6340: 44 61 74 61 28 29 0d 0a 20 20 20 20 20 20 20 20  Data()..        
6350: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
6370: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
6380: 74 69 6f 6e 20 73 6f 75 72 63 65 20 3d 20 6e 65  tion source = ne
6390: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
63a0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
63b0: 20 20 20 20 20 20 20 20 20 20 20 22 46 75 6c 6c             "Full
63c0: 55 72 69 3d 24 7b 64 73 74 46 69 6c 65 4e 61 6d  Uri=${dstFileNam
63d0: 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20  e};"))..        
63e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 73 6f 75 72 63 65 2e 4f 70 65 6e 28 29 3b 0d   source.Open();.
6410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6420: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
6430: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73  teConnection des
6440: 74 69 6e 61 74 69 6f 6e 20 3d 20 6e 65 77 20 53  tination = new S
6450: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
6460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6470: 20 20 20 20 20 20 20 20 20 20 22 46 75 6c 6c 55            "FullU
6480: 72 69 3d 24 7b 73 72 63 46 69 6c 65 4e 61 6d 65  ri=${srcFileName
6490: 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  };"))..         
64a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e      destination.
64d0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 73 6f 75 72 63 65 2e 42 61 63 6b 75 70 44 61   source.BackupDa
6500: 74 61 62 61 73 65 28 0d 0a 20 20 20 20 20 20 20  tabase(..       
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6520: 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20     destination, 
6530: 22 6d 61 69 6e 22 2c 20 22 6d 61 69 6e 22 2c 20  "main", "main", 
6540: 2d 31 2c 20 6e 75 6c 6c 2c 20 30 29 3b 0d 0a 20  -1, null, 0);.. 
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6570: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6580: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
65e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
65f0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
6600: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6630: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
6640: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6650: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6660: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6670: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6680: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
6690: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
66a0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
66b0: 69 74 65 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20  ite.dll]..      
66c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20 65 71      if {$code eq
66d0: 20 22 4f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20   "Ok"} then {.. 
66e0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
66f0: 3a 63 6f 6d 70 69 6c 65 64 28 31 32 29 20 24 69  :compiled(12) $i
6700: 64 3b 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 70 69  d; # NOTE: Compi
6710: 6c 65 64 20 4f 4b 2e 0d 0a 20 20 20 20 20 20 20  led OK...       
6720: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch 
6730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6740: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
6750: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
6760: 74 24 7b 69 64 7d 20 42 61 63 6b 75 70 41 6e 64  t${id} BackupAnd
6770: 47 65 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20  GetData..       
6780: 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20         showTest 
6790: 4c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  L..            }
67a0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
67b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
67c0: 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72  f {[isExpectedEr
67d0: 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65  ror $error]} the
67e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
67f0: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 6c 0d       showTest l.
6800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
6810: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
6820: 20 20 20 20 20 20 20 20 20 66 61 69 6c 54 65 73           failTes
6830: 74 20 6c 20 24 65 72 72 6f 72 0d 0a 20 20 20 20  t l $error..    
6840: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6850: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6860: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
6880: 72 20 24 65 72 72 6f 72 73 0d 0a 20 20 20 20 20  r $errors..     
6890: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
68a0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
68b0: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
68c0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
68d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
6910: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6930: 20 57 4f 52 4b 4c 4f 41 44 20 23 31 33 20 28 4d   WORKLOAD #13 (M
6940: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
6960: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
6970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69b0: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
69c0: 61 64 28 31 33 29 20 5b 6c 69 73 74 20 5c 0d 0a  ad(13) [list \..
69d0: 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46        [list srcF
69e0: 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e  ileName dstFileN
69f0: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31  ame table count1
6a00: 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20   count2 count3] 
6a10: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
6a20: 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23  NOTE: Workload #
6a30: 31 33 2c 20 62 61 63 6b 75 70 20 66 72 6f 6d 20  13, backup from 
6a40: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
6a50: 61 62 61 73 65 2e 0d 0a 20 20 20 20 23 0d 0a 20  abase...    #.. 
6a60: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d     lappend ::tim
6a70: 65 73 28 31 33 29 20 5b 6c 69 6e 64 65 78 20 5b  es(13) [lindex [
6a80: 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 66 6f  time {..      fo
6a90: 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20  r {set index 1} 
6aa0: 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e  {$index <= $coun
6ab0: 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  t1} {incr index}
6ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
6ad0: 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67  [string is integ
6ae0: 65 72 20 2d 73 74 72 69 63 74 20 24 3a 3a 63 6f  er -strict $::co
6af0: 6d 70 69 6c 65 64 28 31 33 29 5d 7d 20 74 68 65  mpiled(13)]} the
6b00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
6b10: 65 74 20 69 64 20 24 3a 3a 63 6f 6d 70 69 6c 65  et id $::compile
6b20: 64 28 31 33 29 3b 20 23 20 4e 4f 54 45 3a 20 41  d(13); # NOTE: A
6b30: 6c 72 65 61 64 79 20 63 6f 6d 70 69 6c 65 64 2e  lready compiled.
6b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
6b50: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
6b60: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
6b70: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
6b80: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 42 61 63 6b  }.Test${id} Back
6b90: 75 70 41 6e 64 47 65 74 44 61 74 61 0d 0a 20 20  upAndGetData..  
6ba0: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65            showTe
6bb0: 73 74 20 4d 0d 0a 20 20 20 20 20 20 20 20 20 20  st M..          
6bc0: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
6bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
6be0: 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72   {[isExpectedErr
6bf0: 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  or $error]} then
6c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c10: 20 20 73 68 6f 77 54 65 73 74 20 6d 0d 0a 20 20    showTest m..  
6c20: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
6c30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c40: 20 20 66 61 69 6c 54 65 73 74 20 6d 20 24 65 72    failTest m $er
6c50: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
6c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
6c70: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
6c80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
6c90: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
6ca0: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
6cb0: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
6cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
6cd0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
6ce0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
6cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
6d00: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
6d10: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 53           using S
6d20: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
6d30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6d40: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
6d50: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
6d60: 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e    namespace _Dyn
6d70: 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 20  amic${id}..     
6d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6d90: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
6da0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74  tatic class Test
6db0: 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 20 20 20  ${id}..         
6dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6dd0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
6de0: 74 61 74 69 63 20 76 6f 69 64 20 42 61 63 6b 75  tatic void Backu
6df0: 70 41 6e 64 47 65 74 44 61 74 61 28 29 0d 0a 20  pAndGetData().. 
6e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e20: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
6e30: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 6f 75 72  eConnection sour
6e40: 63 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ce = new SQLiteC
6e50: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e70: 20 20 22 46 75 6c 6c 55 72 69 3d 24 7b 73 72 63    "FullUri=${src
6e80: 46 69 6c 65 4e 61 6d 65 7d 3b 22 29 29 0d 0a 20  FileName};")).. 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6eb0: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e 4f          source.O
6ec0: 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  pen();..        
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
6ee0: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
6ef0: 69 6f 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  ion destination 
6f00: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
6f10: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f30: 20 22 46 75 6c 6c 55 72 69 3d 24 7b 64 73 74 46   "FullUri=${dstF
6f40: 69 6c 65 4e 61 6d 65 7d 3b 22 29 29 0d 0a 20 20  ileName};"))..  
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6f70: 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 69             desti
6f80: 6e 61 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  nation.Open();..
6f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fa0: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e 42          source.B
6fb0: 61 63 6b 75 70 44 61 74 61 62 61 73 65 28 0d 0a  ackupDatabase(..
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 20 20 20 20 20 20 20 20 20 20 64 65 73 74 69 6e            destin
6fe0: 61 74 69 6f 6e 2c 20 22 6d 61 69 6e 22 2c 20 22  ation, "main", "
6ff0: 6d 61 69 6e 22 2c 20 2d 31 2c 20 6e 75 6c 6c 2c  main", -1, null,
7000: 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   0);..          
7010: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7040: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7050: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
70a0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
70b0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
70c0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n()..           
70d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
70e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
70f0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7100: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7110: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7120: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7130: 20 20 20 20 20 20 20 7d 5d 20 74 72 75 65 20 74         }] true t
7140: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
7150: 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
7160: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
7170: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24  .          if {$
7180: 63 6f 64 65 20 65 71 20 22 4f 6b 22 7d 20 74 68  code eq "Ok"} th
7190: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
71a0: 20 20 73 65 74 20 3a 3a 63 6f 6d 70 69 6c 65 64    set ::compiled
71b0: 28 31 33 29 20 24 69 64 3b 20 23 20 4e 4f 54 45  (13) $id; # NOTE
71c0: 3a 20 43 6f 6d 70 69 6c 65 64 20 4f 4b 2e 0d 0a  : Compiled OK...
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
71e0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
71f0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
7200: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
7210: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 42 61  id}.Test${id} Ba
7220: 63 6b 75 70 41 6e 64 47 65 74 44 61 74 61 0d 0a  ckupAndGetData..
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
7240: 6f 77 54 65 73 74 20 4d 0d 0a 20 20 20 20 20 20  owTest M..      
7250: 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20        } error]} 
7260: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
7270: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70        if {[isExp
7280: 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f  ectedError $erro
7290: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
72b0: 54 65 73 74 20 6d 0d 0a 20 20 20 20 20 20 20 20  Test m..        
72c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72e0: 66 61 69 6c 54 65 73 74 20 6d 20 24 65 72 72 6f  failTest m $erro
72f0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
7300: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7310: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
7320: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
7330: 20 20 20 65 72 72 6f 72 20 24 65 72 72 6f 72 73     error $errors
7340: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
7350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7360: 7d 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20  }..    }] 0]..  
7370: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
7380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20  #####..  #      
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73e0: 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44          WORKLOAD
73f0: 20 23 31 34 20 28 4e 29 20 20 20 20 20 20 20 20   #14 (N)        
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7410: 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23       #..  ######
7420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7460: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
7470: 20 77 6f 72 6b 6c 6f 61 64 28 31 34 29 20 5b 6c   workload(14) [l
7480: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  ist \..      [li
7490: 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20 64  st srcFileName d
74a0: 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65  stFileName table
74b0: 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20 63   count1 count2 c
74c0: 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d  ount3] {..    #.
74d0: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72  .    # NOTE: Wor
74e0: 6b 6c 6f 61 64 20 23 31 34 2c 20 50 52 41 47 4d  kload #14, PRAGM
74f0: 41 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  A integrity chec
7500: 6b 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  k statement...  
7510: 20 20 23 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64    #..    lappend
7520: 20 3a 3a 74 69 6d 65 73 28 31 34 29 20 5b 6c 69   ::times(14) [li
7530: 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20  ndex [time {..  
7540: 20 20 20 20 73 65 74 75 70 44 62 20 24 64 73 74      setupDb $dst
7550: 46 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  FileName "" "" "
7560: 22 20 22 22 20 22 22 20 74 72 75 65 20 66 61 6c  " "" "" true fal
7570: 73 65 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73  se..      for {s
7580: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
7590: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
75a0: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
75b0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
75c0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
75d0: 73 65 74 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  set result [sql 
75e0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
75f0: 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 52               "PR
7610: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
7620: 68 65 63 6b 3b 22 5d 0d 0a 20 20 20 20 20 20 20  heck;"]..       
7630: 20 20 20 69 66 20 7b 24 72 65 73 75 6c 74 20 65     if {$result e
7640: 71 20 22 6f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a  q "ok"} then {..
7650: 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
7660: 54 65 73 74 20 4e 0d 0a 20 20 20 20 20 20 20 20  Test N..        
7670: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
7680: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61          error [a
7690: 70 70 65 6e 64 41 72 67 73 20 22 69 6e 74 65 67  ppendArgs "integ
76a0: 72 69 74 79 20 63 68 65 63 6b 20 66 61 69 6c 65  rity check faile
76b0: 64 3a 20 22 20 24 72 65 73 75 6c 74 5d 0d 0a 20  d: " $result].. 
76c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
76d0: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
76e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
76f0: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
7700: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
7710: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
7720: 20 20 73 68 6f 77 54 65 73 74 20 6e 0d 0a 20 20    showTest n..  
7730: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
7740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
7750: 69 6c 54 65 73 74 20 6e 20 24 65 72 72 6f 72 0d  ilTest n $error.
7760: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
7770: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
7780: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
7790: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
77a0: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
77b0: 73 65 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20  se..    }] 0].. 
77c0: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7810: 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20  ######..  #     
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41           WORKLOA
7840: 44 20 23 31 35 20 28 4f 29 20 20 20 20 20 20 20  D #15 (O)       
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7860: 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23        #..  #####
7870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
78a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
78b0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65  ########....  se
78c0: 74 20 77 6f 72 6b 6c 6f 61 64 28 31 35 29 20 5b  t workload(15) [
78d0: 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  list \..      [l
78e0: 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20  ist srcFileName 
78f0: 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c  dstFileName tabl
7900: 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20  e count1 count2 
7910: 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23  count3] {..    #
7920: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f  ..    # NOTE: Wo
7930: 72 6b 6c 6f 61 64 20 23 31 35 2c 20 66 6f 72 63  rkload #15, forc
7940: 65 20 6d 61 6e 61 67 65 64 20 67 61 72 62 61 67  e managed garbag
7950: 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 0d 0a 20 20  e collection..  
7960: 20 20 23 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64    #..    lappend
7970: 20 3a 3a 74 69 6d 65 73 28 31 35 29 20 5b 6c 69   ::times(15) [li
7980: 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20  ndex [time {..  
7990: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64      for {set ind
79a0: 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d  ex 1} {$index <=
79b0: 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20   $count1} {incr 
79c0: 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..      
79d0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
79e0: 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63            collec
79f0: 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74  tGarbage $::test
7a00: 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..      
7a10: 20 20 20 20 73 68 6f 77 54 65 73 74 20 4f 0d 0a      showTest O..
7a20: 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d          } error]
7a30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
7a40: 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63      if {[isExpec
7a50: 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d  tedError $error]
7a60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
7a70: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 6f        showTest o
7a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
7a90: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..          
7aa0: 20 20 66 61 69 6c 54 65 73 74 20 6f 20 24 65 72    failTest o $er
7ab0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ror..          }
7ac0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7ad0: 20 20 20 7d 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d     }..    }] 0].
7ae0: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23  .  }]....  #####
7af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b30: 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20  ########..  #   
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c             WORKL
7b60: 4f 41 44 20 23 31 36 20 28 50 29 20 20 20 20 20  OAD #16 (P)     
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23          #..  ###
7b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7bd0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
7be0: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 31 36 29  set workload(16)
7bf0: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..      
7c00: 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d  [list srcFileNam
7c10: 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61  e dstFileName ta
7c20: 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74  ble count1 count
7c30: 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20  2 count3] {..   
7c40: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
7c50: 57 6f 72 6b 6c 6f 61 64 20 23 31 36 2c 20 61 6c  Workload #16, al
7c60: 6c 6f 63 61 74 65 20 28 65 78 63 6c 75 64 65 29  locate (exclude)
7c70: 20 73 6f 6d 65 20 6e 61 74 69 76 65 20 68 65 61   some native hea
7c80: 70 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 23 0d  p memory..    #.
7c90: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74  .    lappend ::t
7ca0: 69 6d 65 73 28 31 36 29 20 5b 6c 69 6e 64 65 78  imes(16) [lindex
7cb0: 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20   [time {..      
7cc0: 73 65 74 20 6d 61 78 53 69 7a 65 20 24 3a 3a 63  set maxSize $::c
7cd0: 6f 75 6e 74 28 35 29 0d 0a 20 20 20 20 20 20 6f  ount(5)..      o
7ce0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC 
7cf0: 41 64 64 4d 65 6d 6f 72 79 50 72 65 73 73 75 72  AddMemoryPressur
7d00: 65 20 24 6d 61 78 53 69 7a 65 0d 0a 20 20 20 20  e $maxSize..    
7d10: 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20    try {..       
7d20: 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index 
7d30: 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63  1} {$index <= $c
7d40: 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64  ount1} {incr ind
7d50: 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ex} {..         
7d60: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {.. 
7d70: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
7d80: 69 7a 65 20 5b 65 78 70 72 20 7b 69 6e 74 28 6d  ize [expr {int(m
7d90: 69 6e 28 24 6d 61 78 53 69 7a 65 2c 20 61 62 73  in($maxSize, abs
7da0: 28 24 63 6f 75 6e 74 33 20 2a 20 24 69 6e 64 65  ($count3 * $inde
7db0: 78 20 2a 20 35 2e 30 29 29 29 7d 5d 0d 0a 20 20  x * 5.0)))}]..  
7dc0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 74            set pt
7dd0: 72 20 5b 61 6c 6c 6f 63 4d 65 6d 20 24 73 69 7a  r [allocMem $siz
7de0: 65 5d 3b 20 23 20 74 68 72 6f 77 0d 0a 20 20 20  e]; # throw..   
7df0: 20 20 20 20 20 20 20 20 20 75 73 65 4d 65 6d 20           useMem 
7e00: 24 70 74 72 20 24 73 69 7a 65 3b 20 77 61 69 74  $ptr $size; wait
7e10: 46 6f 72 54 65 73 74 20 24 63 6f 75 6e 74 32 0d  ForTest $count2.
7e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 72 65  .            fre
7e30: 65 4d 65 6d 20 24 70 74 72 3b 20 75 6e 73 65 74  eMem $ptr; unset
7e40: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 74 72   -nocomplain ptr
7e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 68  ..            sh
7e60: 6f 77 54 65 73 74 20 50 0d 0a 20 20 20 20 20 20  owTest P..      
7e70: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
7e80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
7e90: 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65    if {[isExpecte
7ea0: 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20  dError $error]} 
7eb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
7ec0: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 70        showTest p
7ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
7ee0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
7ef0: 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 70        failTest p
7f00: 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   $error..       
7f10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7f20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
7f30: 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20        } finally 
7f40: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
7f50: 69 6e 66 6f 20 65 78 69 73 74 73 20 70 74 72 5d  info exists ptr]
7f60: 7d 20 74 68 65 6e 20 7b 66 72 65 65 4d 65 6d 20  } then {freeMem 
7f70: 24 70 74 72 7d 0d 0a 20 20 20 20 20 20 20 20 6f  $ptr}..        o
7f80: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC 
7f90: 52 65 6d 6f 76 65 4d 65 6d 6f 72 79 50 72 65 73  RemoveMemoryPres
7fa0: 73 75 72 65 20 24 6d 61 78 53 69 7a 65 0d 0a 20  sure $maxSize.. 
7fb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 5d 20 30       }..    }] 0
7fc0: 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23  ]..  }]....  ###
7fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8010: 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20  ##########..  # 
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 4f 52               WOR
8040: 4b 4c 4f 41 44 20 23 31 37 20 28 51 29 20 20 20  KLOAD #17 (Q)   
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23            #..  #
8070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
80a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
80b0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
80c0: 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 31    set workload(1
80d0: 37 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  7) [list \..    
80e0: 20 20 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e    [list srcFileN
80f0: 61 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20  ame dstFileName 
8100: 74 61 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75  table count1 cou
8110: 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20  nt2 count3] {.. 
8120: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
8130: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 37 2c 20  : Workload #17, 
8140: 63 68 61 6e 67 65 20 74 68 65 20 64 61 74 61 62  change the datab
8150: 61 73 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  ase journal mode
8160: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 6c 61 70  ..    #..    lap
8170: 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 31 37 29  pend ::times(17)
8180: 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b   [lindex [time {
8190: 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20  ..      setupDb 
81a0: 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 22 22 20  $dstFileName "" 
81b0: 22 22 20 22 22 20 22 22 20 22 22 20 74 72 75 65  "" "" "" "" true
81c0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f   false..      fo
81d0: 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20  r {set index 1} 
81e0: 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e  {$index <= $coun
81f0: 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  t1} {incr index}
8200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
8210: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
8220: 20 20 20 20 73 65 74 20 6d 6f 64 65 20 5b 65 78      set mode [ex
8230: 70 72 20 7b 24 69 6e 64 65 78 20 25 20 32 20 3d  pr {$index % 2 =
8240: 3d 20 30 20 3f 20 22 64 65 6c 65 74 65 22 20 3a  = 0 ? "delete" :
8250: 20 22 77 61 6c 22 7d 5d 0d 0a 20 20 20 20 20 20   "wal"}]..      
8260: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
8270: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
8280: 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  "PRAGMA journal_
8290: 6d 6f 64 65 20 3d 20 5c 22 22 20 24 6d 6f 64 65  mode = \"" $mode
82a0: 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 20 20   \"\;]..        
82b0: 20 20 73 68 6f 77 54 65 73 74 20 51 0d 0a 20 20    showTest Q..  
82c0: 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20        } error]} 
82d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
82e0: 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65    if {[isExpecte
82f0: 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20  dError $error]} 
8300: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
8310: 20 20 20 20 73 68 6f 77 54 65 73 74 20 71 0d 0a      showTest q..
8320: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
8330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8340: 66 61 69 6c 54 65 73 74 20 71 20 24 65 72 72 6f  failTest q $erro
8350: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  r..          }..
8360: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8370: 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75   }..      cleanu
8380: 70 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65  pDb $dstFileName
8390: 20 64 62 20 66 61 6c 73 65 20 74 72 75 65 20 66   db false true f
83a0: 61 6c 73 65 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d  alse..    }] 0].
83b0: 0a 20 20 7d 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b  .  }]..} -body {
83c0: 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64  ..  for {set ind
83d0: 65 78 28 30 29 20 30 7d 20 7b 24 69 6e 64 65 78  ex(0) 0} {$index
83e0: 28 30 29 20 3c 20 24 63 6f 75 6e 74 28 30 29 7d  (0) < $count(0)}
83f0: 20 7b 69 6e 63 72 20 69 6e 64 65 78 28 30 29 7d   {incr index(0)}
8400: 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63   {..    sql exec
8410: 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
8420: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
8430: 53 54 53 20 74 31 28 78 20 50 52 49 4d 41 52 59  STS t1(x PRIMARY
8440: 20 4b 45 59 2c 20 79 2c 20 7a 29 3b 22 0d 0a 0d   KEY, y, z);"...
8450: 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  .    unset -noco
8460: 6d 70 6c 61 69 6e 20 74 68 72 65 61 64 0d 0a 0d  mplain thread...
8470: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 6e 64  .    foreach ind
8480: 65 78 28 31 29 20 5b 6c 73 6f 72 74 20 2d 69 6e  ex(1) [lsort -in
8490: 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d  teger [array nam
84a0: 65 73 20 77 6f 72 6b 6c 6f 61 64 5d 5d 20 7b 0d  es workload]] {.
84b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61  .      if {[lsea
84c0: 72 63 68 20 2d 65 78 61 63 74 20 24 6e 6f 57 6f  rch -exact $noWo
84d0: 72 6b 6c 6f 61 64 20 24 69 6e 64 65 78 28 31 29  rkload $index(1)
84e0: 5d 20 3d 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d  ] == -1} then {.
84f0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 68 72  .        set thr
8500: 65 61 64 28 24 69 6e 64 65 78 28 31 29 29 20 5b  ead($index(1)) [
8510: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
8520: 6c 69 61 73 20 53 79 73 74 65 6d 2e 54 68 72 65  lias System.Thre
8530: 61 64 69 6e 67 2e 54 68 72 65 61 64 20 5c 0d 0a  ading.Thread \..
8540: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73              [lis
8550: 74 20 61 70 70 6c 79 20 24 77 6f 72 6b 6c 6f 61  t apply $workloa
8560: 64 28 24 69 6e 64 65 78 28 31 29 29 20 24 66 69  d($index(1)) $fi
8570: 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e  leName(1) $fileN
8580: 61 6d 65 28 32 29 20 74 31 20 5c 0d 0a 20 20 20  ame(2) t1 \..   
8590: 20 20 20 20 20 20 20 20 20 24 63 6f 75 6e 74 28           $count(
85a0: 31 29 20 24 63 6f 75 6e 74 28 33 29 20 24 63 6f  1) $count(3) $co
85b0: 75 6e 74 28 34 29 5d 20 31 30 34 38 35 37 36 5d  unt(4)] 1048576]
85c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 24 74 68 72  ....        $thr
85d0: 65 61 64 28 24 69 6e 64 65 78 28 31 29 29 20 4e  ead($index(1)) N
85e0: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs 
85f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
8600: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c  le rootname [fil
8610: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65  e tail $fileName
8620: 28 32 29 5d 5d 20 22 20 23 22 20 24 69 6e 64 65  (2)]] " #" $inde
8630: 78 28 31 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  x(1)]....       
8640: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
8650: 73 20 70 72 69 6f 72 69 74 79 28 24 69 6e 64 65  s priority($inde
8660: 78 28 31 29 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  x(1))]} then {..
8670: 20 20 20 20 20 20 20 20 20 20 24 74 68 72 65 61            $threa
8680: 64 28 24 69 6e 64 65 78 28 31 29 29 20 50 72 69  d($index(1)) Pri
8690: 6f 72 69 74 79 20 24 70 72 69 6f 72 69 74 79 28  ority $priority(
86a0: 24 69 6e 64 65 78 28 31 29 29 0d 0a 20 20 20 20  $index(1))..    
86b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
86c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 66 6f 72      }....    for
86d0: 65 61 63 68 20 69 6e 64 65 78 28 31 29 20 5b 6c  each index(1) [l
86e0: 69 73 74 20 53 74 61 72 74 20 4a 6f 69 6e 5d 20  ist Start Join] 
86f0: 7b 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  {..      foreach
8700: 20 69 6e 64 65 78 28 32 29 20 5b 61 72 72 61 79   index(2) [array
8710: 20 6e 61 6d 65 73 20 74 68 72 65 61 64 5d 20 7b   names thread] {
8720: 0d 0a 20 20 20 20 20 20 20 20 24 74 68 72 65 61  ..        $threa
8730: 64 28 24 69 6e 64 65 78 28 32 29 29 20 24 69 6e  d($index(2)) $in
8740: 64 65 78 28 31 29 0d 0a 20 20 20 20 20 20 7d 0d  dex(1)..      }.
8750: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 75 6e  .    }....    un
8760: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
8770: 74 68 72 65 61 64 0d 0a 20 20 7d 0d 0a 0d 0a 20  thread..  }.... 
8780: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
8790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
87a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
87b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
87c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
87d0: 0d 0a 20 20 66 6f 72 65 61 63 68 20 69 6e 64 65  ..  foreach inde
87e0: 78 28 30 29 20 5b 73 70 6c 69 74 20 24 69 6e 64  x(0) [split $ind
87f0: 69 63 61 74 6f 72 73 20 22 22 5d 20 7b 0d 0a 20  icators ""] {.. 
8800: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
8810: 3a 20 53 65 65 20 69 66 20 74 68 69 73 20 77 6f  : See if this wo
8820: 72 6b 6c 6f 61 64 20 69 74 65 72 61 74 69 6f 6e  rkload iteration
8830: 20 72 61 69 73 65 64 20 61 6e 20 65 72 72 6f 72   raised an error
8840: 2e 20 20 49 66 20 73 6f 2c 20 74 68 65 0d 0a 20  .  If so, the.. 
8850: 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63     #       indic
8860: 61 74 6f 72 20 6c 65 74 74 65 72 20 77 69 6c 6c  ator letter will
8870: 20 62 65 20 69 6e 20 6c 6f 77 65 72 20 63 61 73   be in lower cas
8880: 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74  e; otherwise, it
8890: 20 77 69 6c 6c 0d 0a 20 20 20 20 23 20 20 20 20   will..    #    
88a0: 20 20 20 62 65 20 69 6e 20 75 70 70 65 72 20 63     be in upper c
88b0: 61 73 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ase...    #..   
88c0: 20 73 65 74 20 69 6e 64 65 78 28 31 29 20 5b 73   set index(1) [s
88d0: 74 72 69 6e 67 20 69 73 20 75 70 70 65 72 20 2d  tring is upper -
88e0: 73 74 72 69 63 74 20 24 69 6e 64 65 78 28 30 29  strict $index(0)
88f0: 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 69 6e 64  ]....    set ind
8900: 65 78 28 32 29 20 5b 65 78 70 72 20 7b 5b 73 74  ex(2) [expr {[st
8910: 72 69 6e 67 20 6f 72 64 69 6e 61 6c 20 24 69 6e  ring ordinal $in
8920: 64 65 78 28 30 29 20 30 5d 20 2d 20 5c 0d 0a 20  dex(0) 0] - \.. 
8930: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6f         [string o
8940: 72 64 69 6e 61 6c 20 5b 65 78 70 72 20 7b 24 69  rdinal [expr {$i
8950: 6e 64 65 78 28 31 29 20 3f 20 22 41 22 20 3a 20  ndex(1) ? "A" : 
8960: 22 61 22 7d 5d 20 30 5d 20 2b 20 31 7d 5d 0d 0a  "a"}] 0] + 1}]..
8970: 0d 0a 20 20 20 20 73 65 74 20 69 6e 64 65 78 28  ..    set index(
8980: 33 29 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78  3) [expr {$index
8990: 28 31 29 20 3f 20 22 6f 6b 22 20 3a 20 22 65 72  (1) ? "ok" : "er
89a0: 72 6f 72 22 7d 5d 0d 0a 0d 0a 20 20 20 20 69 66  ror"}]....    if
89b0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
89c0: 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e 64 65  iterations($inde
89d0: 78 28 32 29 2c 24 69 6e 64 65 78 28 33 29 29 5d  x(2),$index(3))]
89e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
89f0: 73 65 74 20 69 74 65 72 61 74 69 6f 6e 73 28 24  set iterations($
8a00: 69 6e 64 65 78 28 32 29 2c 24 69 6e 64 65 78 28  index(2),$index(
8a10: 33 29 29 20 30 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  3)) 0..    }....
8a20: 20 20 20 20 69 6e 63 72 20 69 74 65 72 61 74 69      incr iterati
8a30: 6f 6e 73 28 24 69 6e 64 65 78 28 32 29 2c 24 69  ons($index(2),$i
8a40: 6e 64 65 78 28 33 29 29 0d 0a 20 20 7d 0d 0a 0d  ndex(3))..  }...
8a50: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
8a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8aa0: 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
8ab0: 45 3a 20 41 64 76 61 6e 63 65 20 6f 75 74 70 75  E: Advance outpu
8ac0: 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 69  t to the next li
8ad0: 6e 65 20 64 75 65 20 74 6f 20 74 68 65 20 77 6f  ne due to the wo
8ae0: 72 6b 6c 6f 61 64 20 69 74 65 72 61 74 69 6f 6e  rkload iteration
8af0: 0d 0a 20 20 23 20 20 20 20 20 20 20 70 72 6f 67  ..  #       prog
8b00: 72 65 73 73 20 69 6e 64 69 63 61 74 6f 72 73 2e  ress indicators.
8b10: 0d 0a 20 20 23 0d 0a 20 20 74 70 75 74 73 20 24  ..  #..  tputs $
8b20: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 6e 0d  test_channel \n.
8b30: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
8b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8b80: 23 23 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20  ##....  foreach 
8b90: 69 6e 64 65 78 28 30 29 20 5b 6c 73 6f 72 74 20  index(0) [lsort 
8ba0: 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20  -integer [array 
8bb0: 6e 61 6d 65 73 20 74 69 6d 65 73 5d 5d 20 7b 0d  names times]] {.
8bc0: 0a 20 20 20 20 73 65 74 20 74 69 6d 65 73 28 6c  .    set times(l
8bd0: 65 6e 67 74 68 29 20 5b 6c 6c 65 6e 67 74 68 20  ength) [llength 
8be0: 24 74 69 6d 65 73 28 24 69 6e 64 65 78 28 30 29  $times($index(0)
8bf0: 29 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 24 74  )]....    if {$t
8c00: 69 6d 65 73 28 6c 65 6e 67 74 68 29 20 3e 20 30  imes(length) > 0
8c10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
8c20: 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61 6e  tputs $test_chan
8c30: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs 
8c40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d  \..          "--
8c50: 2d 2d 20 61 76 65 72 61 67 65 20 74 69 6d 65 20  -- average time 
8c60: 66 6f 72 20 77 6f 72 6b 6c 6f 61 64 20 28 22 20  for workload (" 
8c70: 24 69 6e 64 65 78 28 30 29 20 22 29 20 69 73 20  $index(0) ") is 
8c80: 61 62 6f 75 74 20 22 20 5c 0d 0a 20 20 20 20 20  about " \..     
8c90: 20 20 20 20 20 5b 65 78 70 72 20 69 6e 74 28 28       [expr int((
8ca0: 5b 6a 6f 69 6e 20 24 74 69 6d 65 73 28 24 69 6e  [join $times($in
8cb0: 64 65 78 28 30 29 29 20 2b 5d 29 2f 24 74 69 6d  dex(0)) +])/$tim
8cc0: 65 73 28 6c 65 6e 67 74 68 29 2f 31 30 30 30 2e  es(length)/1000.
8cd0: 30 29 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  0)] \..         
8ce0: 20 22 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 5c   " milliseconds\
8cf0: 6e 22 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20  n"]..    } else 
8d00: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $
8d10: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
8d20: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
8d30: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6e 6f 20 74        "---- no t
8d40: 69 6d 65 73 20 66 6f 72 20 77 6f 72 6b 6c 6f 61  imes for workloa
8d50: 64 20 28 22 20 24 69 6e 64 65 78 28 30 29 20 22  d (" $index(0) "
8d60: 29 5c 6e 22 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20  )\n"]..    }..  
8d70: 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23  }....  #########
8d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8dc0: 23 23 23 23 0d 0a 0d 0a 20 20 66 6f 72 65 61 63  ####....  foreac
8dd0: 68 20 69 6e 64 65 78 28 30 29 20 5b 6c 73 6f 72  h index(0) [lsor
8de0: 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61  t -integer [arra
8df0: 79 20 6e 61 6d 65 73 20 77 6f 72 6b 6c 6f 61 64  y names workload
8e00: 5d 5d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20  ]] {..    tputs 
8e10: 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 66  $test_channel [f
8e20: 6f 72 6d 61 74 57 6f 72 6b 6c 6f 61 64 52 65 73  ormatWorkloadRes
8e30: 75 6c 74 20 24 69 6e 64 65 78 28 30 29 5d 0d 0a  ult $index(0)]..
8e40: 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23    }....  #######
8e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e90: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20  ######....  set 
8ea0: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
8eb0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
8ec0: 6c 61 72 20 24 73 72 63 44 62 20 22 50 52 41 47  lar $srcDb "PRAG
8ed0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
8ee0: 63 6b 3b 22 5d 0d 0a 0d 0a 20 20 69 66 20 7b 24  ck;"]....  if {$
8ef0: 72 65 73 75 6c 74 20 65 71 20 22 6f 6b 22 7d 20  result eq "ok"} 
8f00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 74 70 75 74  then {..    tput
8f10: 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  s $test_channel 
8f20: 22 2d 2d 2d 2d 20 69 6e 74 65 67 72 69 74 79 20  "---- integrity 
8f30: 63 68 65 63 6b 20 6f 6b 20 28 73 72 63 44 62 29  check ok (srcDb)
8f40: 5c 6e 22 0d 0a 20 20 7d 20 65 6c 73 65 20 7b 0d  \n"..  } else {.
8f50: 0a 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65  .    error [appe
8f60: 6e 64 41 72 67 73 20 22 69 6e 74 65 67 72 69 74  ndArgs "integrit
8f70: 79 20 63 68 65 63 6b 20 66 61 69 6c 65 64 20 28  y check failed (
8f80: 73 72 63 44 62 29 3a 20 22 20 24 72 65 73 75 6c  srcDb): " $resul
8f90: 74 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23  t]..  }....  ###
8fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fe0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
8ff0: 73 65 74 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  set result [sql 
9000: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
9010: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
9020: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
9030: 65 63 6b 3b 22 5d 0d 0a 0d 0a 20 20 69 66 20 7b  eck;"]....  if {
9040: 24 72 65 73 75 6c 74 20 65 71 20 22 6f 6b 22 7d  $result eq "ok"}
9050: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 74 70 75   then {..    tpu
9060: 74 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ts $test_channel
9070: 20 22 2d 2d 2d 2d 20 69 6e 74 65 67 72 69 74 79   "---- integrity
9080: 20 63 68 65 63 6b 20 6f 6b 20 28 64 62 29 5c 6e   check ok (db)\n
9090: 22 0d 0a 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  "..  } else {.. 
90a0: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
90b0: 41 72 67 73 20 22 69 6e 74 65 67 72 69 74 79 20  Args "integrity 
90c0: 63 68 65 63 6b 20 66 61 69 6c 65 64 20 28 64 62  check failed (db
90d0: 29 3a 20 22 20 24 72 65 73 75 6c 74 5d 0d 0a 20  ): " $result].. 
90e0: 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23   }....  ########
90f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9130: 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20  #####....  #..  
9140: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6f 76 65 72  # NOTE: The over
9150: 61 6c 6c 20 74 65 73 74 20 72 65 73 75 6c 74 20  all test result 
9160: 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
9170: 62 65 72 20 6f 66 20 66 61 69 6c 75 72 65 73 20  ber of failures 
9180: 28 69 2e 65 2e 0d 0a 20 20 23 20 20 20 20 20 20  (i.e...  #      
9190: 20 22 75 6e 65 78 70 65 63 74 65 64 20 65 72 72   "unexpected err
91a0: 6f 72 73 22 29 20 65 6e 63 6f 75 6e 74 65 72 65  ors") encountere
91b0: 64 20 64 75 72 69 6e 67 20 61 20 77 6f 72 6b 6c  d during a workl
91c0: 6f 61 64 20 69 74 65 72 61 74 69 6f 6e 2e 0d 0a  oad iteration...
91d0: 20 20 23 0d 0a 20 20 65 78 70 72 20 7b 5b 61 72    #..  expr {[ar
91e0: 72 61 79 20 73 69 7a 65 20 66 61 69 6c 75 72 65  ray size failure
91f0: 73 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20  s] > 0 ? \..    
9200: 20 20 5b 65 78 70 72 20 5b 6a 6f 69 6e 20 5b 61    [expr [join [a
9210: 72 72 61 79 20 76 61 6c 75 65 73 20 66 61 69 6c  rray values fail
9220: 75 72 65 73 5d 20 2b 5d 5d 20 3a 20 30 7d 0d 0a  ures] +]] : 0}..
9230: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
9240: 72 65 6e 61 6d 65 20 66 72 65 65 4d 65 6d 20 22  rename freeMem "
9250: 22 0d 0a 20 20 72 65 6e 61 6d 65 20 75 73 65 4d  "..  rename useM
9260: 65 6d 20 22 22 0d 0a 20 20 72 65 6e 61 6d 65 20  em ""..  rename 
9270: 61 6c 6c 6f 63 4d 65 6d 20 22 22 0d 0a 20 20 72  allocMem ""..  r
9280: 65 6e 61 6d 65 20 66 61 69 6c 54 65 73 74 20 22  ename failTest "
9290: 22 0d 0a 20 20 72 65 6e 61 6d 65 20 73 68 6f 77  "..  rename show
92a0: 54 65 73 74 20 22 22 0d 0a 20 20 72 65 6e 61 6d  Test ""..  renam
92b0: 65 20 77 61 69 74 46 6f 72 54 65 73 74 20 22 22  e waitForTest ""
92c0: 0d 0a 20 20 72 65 6e 61 6d 65 20 69 73 45 78 70  ..  rename isExp
92d0: 65 63 74 65 64 45 72 72 6f 72 20 22 22 0d 0a 20  ectedError "".. 
92e0: 20 72 65 6e 61 6d 65 20 66 6f 72 6d 61 74 57 6f   rename formatWo
92f0: 72 6b 6c 6f 61 64 52 65 73 75 6c 74 20 22 22 0d  rkloadResult "".
9300: 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
9310: 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 20 20 63  fileName(2)..  c
9320: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
9330: 6d 65 28 31 29 20 73 72 63 44 62 0d 0a 0d 0a 20  me(1) srcDb.... 
9340: 20 66 6f 72 65 61 63 68 20 69 6e 64 65 78 28 30   foreach index(0
9350: 29 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 77  ) [array names w
9360: 6f 72 6b 6c 6f 61 64 5d 20 7b 0d 0a 20 20 20 20  orkload] {..    
9370: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 6f  catch {..      o
9380: 62 6a 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c  bject removecall
9390: 62 61 63 6b 20 5b 6c 69 73 74 20 61 70 70 6c 79  back [list apply
93a0: 20 24 77 6f 72 6b 6c 6f 61 64 28 24 69 6e 64 65   $workload($inde
93b0: 78 28 30 29 29 20 24 66 69 6c 65 4e 61 6d 65 28  x(0)) $fileName(
93c0: 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  1) \..          
93d0: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 74 31 20  $fileName(2) t1 
93e0: 24 63 6f 75 6e 74 28 31 29 20 24 63 6f 75 6e 74  $count(1) $count
93f0: 28 33 29 20 24 63 6f 75 6e 74 28 34 29 5d 0d 0a  (3) $count(4)]..
9400: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20      }..  }....  
9410: 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  freeDbConnection
9420: 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 4c 6f 67  ....  cleanupLog
9430: 67 69 6e 67 20 24 6c 6f 67 46 69 6c 65 4e 61 6d  ging $logFileNam
9440: 65 0d 0a 0d 0a 20 20 72 65 6e 61 6d 65 20 63 6c  e....  rename cl
9450: 65 61 6e 75 70 4c 6f 67 67 69 6e 67 20 22 22 0d  eanupLogging "".
9460: 0a 20 20 72 65 6e 61 6d 65 20 73 65 74 75 70 4c  .  rename setupL
9470: 6f 67 67 69 6e 67 20 22 22 0d 0a 0d 0a 20 20 75  ogging ""....  u
9480: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
9490: 20 72 65 73 75 6c 74 20 74 68 72 65 61 64 20 69   result thread i
94a0: 6e 64 65 78 20 77 6f 72 6b 6c 6f 61 64 20 70 72  ndex workload pr
94b0: 69 6f 72 69 74 79 20 6e 6f 57 6f 72 6b 6c 6f 61  iority noWorkloa
94c0: 64 20 5c 0d 0a 20 20 20 20 20 20 70 72 69 6f 72  d \..      prior
94d0: 69 74 69 65 73 20 73 72 63 44 62 20 64 62 20 66  ities srcDb db f
94e0: 69 6c 65 4e 61 6d 65 20 63 6f 6d 70 69 6c 65 64  ileName compiled
94f0: 20 6f 70 74 69 6f 6e 73 20 63 6f 75 6e 74 20 74   options count t
9500: 69 6d 65 73 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  imes logFileName
9510: 20 5c 0d 0a 20 20 20 20 20 20 6c 6f 67 4c 69 73   \..      logLis
9520: 74 65 6e 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  tener connection
9530: 20 69 6e 64 69 63 61 74 6f 72 73 20 69 74 65 72   indicators iter
9540: 61 74 69 6f 6e 73 20 65 78 69 74 4f 6e 46 61 69  ations exitOnFai
9550: 6c 20 63 6f 54 61 73 6b 4d 65 6d 20 5c 0d 0a 20  l coTaskMem \.. 
9560: 20 20 20 20 20 66 61 69 6c 75 72 65 73 0d 0a 7d       failures..}
9570: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
9580: 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
9590: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
95a0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
95b0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
95c0: 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74  Lite} \..-result
95d0: 20 7b 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23   {0}}....#######
95e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
95f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9620: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53  ########....runS
9630: 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75  QLiteTestEpilogu
9640: 65 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67  e..runTestEpilog
9650: 75 65 0d 0a                                      ue..