System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3b203f509f4f33ad435d8e51fd17c945db2c3d86:


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: 52 65 70 6f 72 74 20 62 65 66 6f 72 65 20 74 65  Report before te
0280: 73 74 2c 20 62 65 66 6f 72 65 20 73 68 75 74 64  st, before shutd
0290: 6f 77 6e 2e 0d 0a 23 0d 0a 63 68 65 63 6b 46 6f  own...#..checkFo
02a0: 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
02b0: 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  es $test_channel
02c0: 0d 0a 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c  ..getSQLiteHandl
02d0: 65 43 6f 75 6e 74 73 20 24 74 65 73 74 5f 63 68  eCounts $test_ch
02e0: 61 6e 6e 65 6c 0d 0a 72 65 70 6f 72 74 53 51 4c  annel..reportSQL
02f0: 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 74 65  iteResources $te
0300: 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 23 23  st_channel....##
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 23 23 23 23 23 23 0d 0a 0d  #############...
0360: 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20 4d 61 6b 65  .#..# NOTE: Make
0370: 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74   sure that SQLit
0380: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
0390: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75  s completely shu
03a0: 74 64 6f 77 6e 20 70 72 69 6f 72 20 74 6f 0d 0a  tdown prior to..
03b0: 23 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67  #       starting
03c0: 20 61 6e 79 20 6f 66 20 74 68 65 20 74 65 73 74   any of the test
03d0: 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d  s in this file..
03e0: 0a 23 0d 0a 73 68 75 74 64 6f 77 6e 53 51 4c 69  .#..shutdownSQLi
03f0: 74 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  te $test_channel
0400: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
0410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0450: 23 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45  ###....#..# NOTE
0460: 3a 20 52 65 70 6f 72 74 20 62 65 66 6f 72 65 20  : Report before 
0470: 74 65 73 74 2c 20 61 66 74 65 72 20 73 68 75 74  test, after shut
0480: 64 6f 77 6e 2e 0d 0a 23 0d 0a 63 68 65 63 6b 46  down...#..checkF
0490: 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
04a0: 69 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ies $test_channe
04b0: 6c 0d 0a 67 65 74 53 51 4c 69 74 65 48 61 6e 64  l..getSQLiteHand
04c0: 6c 65 43 6f 75 6e 74 73 20 24 74 65 73 74 5f 63  leCounts $test_c
04d0: 68 61 6e 6e 65 6c 0d 0a 72 65 70 6f 72 74 53 51  hannel..reportSQ
04e0: 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 74  LiteResources $t
04f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 23  est_channel....#
0500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0550: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
0560: 73 74 72 65 73 73 2d 31 2e 31 20 7b 6d 75 6c 74  stress-1.1 {mult
0570: 69 74 68 72 65 61 64 65 64 20 73 74 72 65 73 73  ithreaded stress
0580: 20 74 65 73 74 69 6e 67 7d 20 2d 73 65 74 75 70   testing} -setup
0590: 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
05a0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 74  omplain result t
05b0: 68 72 65 61 64 20 69 6e 64 65 78 20 77 6f 72 6b  hread index work
05c0: 6c 6f 61 64 20 70 72 69 6f 72 69 74 79 20 6e 6f  load priority no
05d0: 57 6f 72 6b 6c 6f 61 64 20 5c 0d 0a 20 20 20 20  Workload \..    
05e0: 20 20 70 72 69 6f 72 69 74 69 65 73 20 73 72 63    priorities src
05f0: 44 62 20 64 62 20 66 69 6c 65 4e 61 6d 65 20 63  Db db fileName c
0600: 6f 6d 70 69 6c 65 64 20 6f 70 74 69 6f 6e 73 20  ompiled options 
0610: 63 6f 75 6e 74 20 74 69 6d 65 73 20 6c 6f 67 46  count times logF
0620: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..     
0630: 20 6c 6f 67 4c 69 73 74 65 6e 65 72 20 65 76 65   logListener eve
0640: 6e 74 20 74 69 6d 65 6f 75 74 20 63 6f 6e 6e 65  nt timeout conne
0650: 63 74 69 6f 6e 20 69 6e 64 69 63 61 74 6f 72 73  ction indicators
0660: 20 69 74 65 72 61 74 69 6f 6e 73 20 65 78 69 74   iterations exit
0670: 4f 6e 46 61 69 6c 20 5c 0d 0a 20 20 20 20 20 20  OnFail \..      
0680: 63 6f 54 61 73 6b 4d 65 6d 20 6e 6f 54 72 61 63  coTaskMem noTrac
0690: 65 20 66 61 69 6c 75 72 65 73 20 73 74 61 74 75  e failures statu
06a0: 73 20 77 6f 72 6b 6c 6f 61 64 4e 61 6d 65 73 20  s workloadNames 
06b0: 77 6f 72 6b 6c 6f 61 64 43 61 6c 6c 62 61 63 6b  workloadCallback
06c0: 73 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23  s....  #########
06d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0710: 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f 63 20 73  ####....  proc s
0720: 65 74 75 70 57 6f 72 6b 6c 6f 61 64 4d 65 6d 44  etupWorkloadMemD
0730: 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 76 61 72  b { fileName var
0740: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 23 0d  Name } {..    #.
0750: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69  .    # NOTE: Thi
0760: 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 69  s should be an i
0770: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
0780: 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 73 6b  e; therefore, sk
0790: 69 70 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a 20  ip attempting.. 
07a0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64 65     #       to de
07b0: 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c 79  lete the underly
07c0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
07d0: 65 20 61 73 20 74 68 61 74 20 77 6f 75 6c 64 20  e as that would 
07e0: 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 0d 0a 20 20  not make any..  
07f0: 20 20 23 20 20 20 20 20 20 20 73 65 6e 73 65 2e    #       sense.
0800: 20 20 41 6c 73 6f 2c 20 64 69 73 61 62 6c 65 20    Also, disable 
0810: 75 73 65 20 6f 66 20 22 50 52 41 47 4d 41 20 74  use of "PRAGMA t
0820: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
0830: 6f 72 79 22 20 77 68 65 6e 0d 0a 20 20 20 20 23  ory" when..    #
0840: 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 75         setting u
0850: 70 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63  p the new connec
0860: 74 69 6f 6e 20 62 65 63 61 75 73 65 20 69 74 20  tion because it 
0870: 69 73 20 6e 6f 74 20 74 68 72 65 61 64 2d 73 61  is not thread-sa
0880: 66 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  fe...    #..    
0890: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list 
08a0: 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
08b0: 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22  e "" "" "" "" ""
08c0: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 74 72 75   false false tru
08d0: 65 20 66 61 6c 73 65 20 5c 0d 0a 20 20 20 20 20  e false \..     
08e0: 20 20 20 24 76 61 72 4e 61 6d 65 20 74 72 75 65     $varName true
08f0: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23  ]..  }....  ####
0900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0910: 23 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 0d 0a 0d 0a 20 20 70  #########....  p
0950: 72 6f 63 20 73 65 74 75 70 57 6f 72 6b 6c 6f 61  roc setupWorkloa
0960: 64 46 69 6c 65 44 62 20 7b 20 66 69 6c 65 4e 61  dFileDb { fileNa
0970: 6d 65 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a  me varName } {..
0980: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
0990: 45 3a 20 53 6b 69 70 20 61 74 74 65 6d 70 74 69  E: Skip attempti
09a0: 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ng to delete the
09b0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
09c0: 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 73 6f  base file.  Also
09d0: 2c 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 64  ,..    #       d
09e0: 69 73 61 62 6c 65 20 75 73 65 20 6f 66 20 22 50  isable use of "P
09f0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
0a00: 5f 64 69 72 65 63 74 6f 72 79 22 20 77 68 65 6e  _directory" when
0a10: 20 73 65 74 74 69 6e 67 20 75 70 0d 0a 20 20 20   setting up..   
0a20: 20 23 20 20 20 20 20 20 20 74 68 65 20 6e 65 77   #       the new
0a30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 63 61   connection beca
0a40: 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74 68  use it is not th
0a50: 72 65 61 64 2d 73 61 66 65 2e 0d 0a 20 20 20 20  read-safe...    
0a60: 23 0d 0a 20 20 20 20 75 70 6c 65 76 65 6c 20 31  #..    uplevel 1
0a70: 20 5b 6c 69 73 74 20 73 65 74 75 70 44 62 20 24   [list setupDb $
0a80: 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
0a90: 22 20 22 22 20 22 22 20 74 72 75 65 20 66 61 6c  " "" "" true fal
0aa0: 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 5c  se false false \
0ab0: 0d 0a 20 20 20 20 20 20 20 20 24 76 61 72 4e 61  ..        $varNa
0ac0: 6d 65 20 74 72 75 65 5d 0d 0a 20 20 7d 0d 0a 0d  me true]..  }...
0ad0: 0a 20 20 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: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b20: 0d 0a 0d 0a 20 20 70 72 6f 63 20 66 6f 72 6d 61  ....  proc forma
0b30: 74 57 6f 72 6b 6c 6f 61 64 52 65 73 75 6c 74 20  tWorkloadResult 
0b40: 7b 20 69 6e 64 65 78 20 7d 20 7b 0d 0a 20 20 20  { index } {..   
0b50: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 70 70   set result [app
0b60: 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 69 74  endArgs "---- it
0b70: 65 72 61 74 69 6f 6e 73 20 66 6f 72 20 77 6f 72  erations for wor
0b80: 6b 6c 6f 61 64 20 28 22 20 24 69 6e 64 65 78 20  kload (" $index 
0b90: 22 29 3a 20 22 5d 0d 0a 0d 0a 20 20 20 20 61 70  "): "]....    ap
0ba0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 65 78 70  pend result [exp
0bb0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
0bc0: 3a 3a 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e  ::iterations($in
0bd0: 64 65 78 2c 74 6f 74 61 6c 29 5d 20 3f 20 5c 0d  dex,total)] ? \.
0be0: 0a 20 20 20 20 20 20 20 20 24 3a 3a 69 74 65 72  .        $::iter
0bf0: 61 74 69 6f 6e 73 28 24 69 6e 64 65 78 2c 74 6f  ations($index,to
0c00: 74 61 6c 29 20 3a 20 30 7d 5d 20 22 20 74 6f 74  tal) : 0}] " tot
0c10: 61 6c 2c 20 22 0d 0a 0d 0a 20 20 20 20 61 70 70  al, "....    app
0c20: 65 6e 64 20 72 65 73 75 6c 74 20 5b 65 78 70 72  end result [expr
0c30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
0c40: 3a 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e 64  :iterations($ind
0c50: 65 78 2c 6f 6b 29 5d 20 3f 20 5c 0d 0a 20 20 20  ex,ok)] ? \..   
0c60: 20 20 20 20 20 24 3a 3a 69 74 65 72 61 74 69 6f       $::iteratio
0c70: 6e 73 28 24 69 6e 64 65 78 2c 6f 6b 29 20 3a 20  ns($index,ok) : 
0c80: 30 7d 5d 20 22 20 6f 6b 2c 20 22 0d 0a 0d 0a 20  0}] " ok, ".... 
0c90: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74     append result
0ca0: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
0cb0: 69 73 74 73 20 3a 3a 69 74 65 72 61 74 69 6f 6e  ists ::iteration
0cc0: 73 28 24 69 6e 64 65 78 2c 65 72 72 6f 72 29 5d  s($index,error)]
0cd0: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 24 3a   ? \..        $:
0ce0: 3a 69 74 65 72 61 74 69 6f 6e 73 28 24 69 6e 64  :iterations($ind
0cf0: 65 78 2c 65 72 72 6f 72 29 20 3a 20 30 7d 5d 20  ex,error) : 0}] 
0d00: 22 20 65 72 72 6f 72 2c 20 22 0d 0a 0d 0a 20 20  " error, "....  
0d10: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
0d20: 20 54 72 61 6e 73 6c 61 74 65 20 74 68 65 20 77   Translate the w
0d30: 6f 72 6b 6c 6f 61 64 20 69 6e 64 65 78 20 74 6f  orkload index to
0d40: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
0d50: 6e 67 20 69 74 65 72 61 74 69 6f 6e 0d 0a 20 20  ng iteration..  
0d60: 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20    #       error 
0d70: 69 6e 64 69 63 61 74 6f 72 20 73 6f 20 74 68 61  indicator so tha
0d80: 74 20 77 65 20 63 61 6e 20 65 61 73 69 6c 79 20  t we can easily 
0d90: 6c 6f 6f 6b 75 70 20 74 68 65 20 6e 75 6d 62 65  lookup the numbe
0da0: 72 20 6f 66 0d 0a 20 20 20 20 23 20 20 20 20 20  r of..    #     
0db0: 20 20 66 61 69 6c 75 72 65 73 20 28 69 2e 65 2e    failures (i.e.
0dc0: 20 22 75 6e 65 78 70 65 63 74 65 64 20 65 72 72   "unexpected err
0dd0: 6f 72 73 22 29 20 66 6f 72 20 74 68 65 20 77 6f  ors") for the wo
0de0: 72 6b 6c 6f 61 64 2e 0d 0a 20 20 20 20 23 0d 0a  rkload...    #..
0df0: 20 20 20 20 73 65 74 20 69 6e 64 69 63 61 74 6f      set indicato
0e00: 72 20 5b 73 74 72 69 6e 67 20 63 68 61 72 61 63  r [string charac
0e10: 74 65 72 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  ter [expr {[stri
0e20: 6e 67 20 6f 72 64 69 6e 61 6c 20 61 20 30 5d 20  ng ordinal a 0] 
0e30: 2b 20 24 69 6e 64 65 78 20 2d 20 31 7d 5d 5d 0d  + $index - 1}]].
0e40: 0a 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 72 65  ...    append re
0e50: 73 75 6c 74 20 5b 65 78 70 72 20 7b 5b 69 6e 66  sult [expr {[inf
0e60: 6f 20 65 78 69 73 74 73 20 3a 3a 66 61 69 6c 75  o exists ::failu
0e70: 72 65 73 28 24 69 6e 64 69 63 61 74 6f 72 29 5d  res($indicator)]
0e80: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 24 3a   ? \..        $:
0e90: 3a 66 61 69 6c 75 72 65 73 28 24 69 6e 64 69 63  :failures($indic
0ea0: 61 74 6f 72 29 20 3a 20 30 7d 5d 20 22 20 66 61  ator) : 0}] " fa
0eb0: 69 6c 65 64 5c 6e 22 0d 0a 0d 0a 20 20 20 20 72  iled\n"....    r
0ec0: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20  eturn $result.. 
0ed0: 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23   }....  ########
0ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f20: 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f 63 20  #####....  proc 
0f30: 66 6f 72 6d 61 74 57 6f 72 6b 6c 6f 61 64 54 69  formatWorkloadTi
0f40: 6d 65 20 7b 20 69 6e 64 65 78 20 7d 20 7b 0d 0a  me { index } {..
0f50: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0f60: 69 73 74 73 20 3a 3a 74 69 6d 65 73 28 24 69 6e  ists ::times($in
0f70: 64 65 78 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  dex)]} then {.. 
0f80: 20 20 20 20 20 73 65 74 20 6c 65 6e 67 74 68 20       set length 
0f90: 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 69 6d 65  [llength $::time
0fa0: 73 28 24 69 6e 64 65 78 29 5d 0d 0a 0d 0a 20 20  s($index)]....  
0fb0: 20 20 20 20 69 66 20 7b 24 6c 65 6e 67 74 68 20      if {$length 
0fc0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..   
0fd0: 20 20 20 20 20 73 65 74 20 73 75 6d 20 5b 65 78       set sum [ex
0fe0: 70 72 20 5b 6a 6f 69 6e 20 24 3a 3a 74 69 6d 65  pr [join $::time
0ff0: 73 28 24 69 6e 64 65 78 29 20 2b 5d 5d 0d 0a 0d  s($index) +]]...
1000: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1010: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d  [appendArgs "---
1020: 2d 20 61 76 65 72 61 67 65 20 74 69 6d 65 20 66  - average time f
1030: 6f 72 20 77 6f 72 6b 6c 6f 61 64 20 28 22 20 24  or workload (" $
1040: 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20  index \..       
1050: 20 20 20 20 20 22 29 20 69 73 20 61 62 6f 75 74       ") is about
1060: 20 22 20 5b 65 78 70 72 20 7b 69 6e 74 28 24 73   " [expr {int($s
1070: 75 6d 20 2f 20 24 6c 65 6e 67 74 68 20 2f 20 31  um / $length / 1
1080: 30 30 30 2e 30 29 7d 5d 20 5c 0d 0a 20 20 20 20  000.0)}] \..    
1090: 20 20 20 20 20 20 20 20 22 20 6d 69 6c 6c 69 73          " millis
10a0: 65 63 6f 6e 64 73 20 28 22 20 5b 65 78 70 72 20  econds (" [expr 
10b0: 7b 69 6e 74 28 24 73 75 6d 20 2f 20 28 5b 69 6e  {int($sum / ([in
10c0: 66 6f 20 65 78 69 73 74 73 20 5c 0d 0a 20 20 20  fo exists \..   
10d0: 20 20 20 20 20 20 20 20 20 3a 3a 69 74 65 72 61           ::itera
10e0: 74 69 6f 6e 73 28 24 69 6e 64 65 78 2c 74 6f 74  tions($index,tot
10f0: 61 6c 29 5d 20 3f 20 24 3a 3a 69 74 65 72 61 74  al)] ? $::iterat
1100: 69 6f 6e 73 28 24 69 6e 64 65 78 2c 74 6f 74 61  ions($index,tota
1110: 6c 29 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20  l) : \..        
1120: 20 20 20 20 24 6c 65 6e 67 74 68 29 20 2f 20 31      $length) / 1
1130: 30 30 30 2e 30 29 7d 5d 20 22 20 6d 69 6c 6c 69  000.0)}] " milli
1140: 73 65 63 6f 6e 64 73 20 70 65 72 20 69 74 65 72  seconds per iter
1150: 61 74 69 6f 6e 29 5c 6e 22 5d 0d 0a 20 20 20 20  ation)\n"]..    
1160: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1170: 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
1180: 41 72 67 73 20 22 2d 2d 2d 2d 20 6e 6f 20 74 69  Args "---- no ti
1190: 6d 65 73 20 66 6f 72 20 77 6f 72 6b 6c 6f 61 64  mes for workload
11a0: 20 28 22 20 24 69 6e 64 65 78 20 29 5c 6e 5d 0d   (" $index )\n].
11b0: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  .  }....  ######
11c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1200: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f  #######....  pro
1210: 63 20 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  c isExpectedErro
1220: 72 20 7b 20 65 72 72 6f 72 20 7d 20 7b 0d 0a 20  r { error } {.. 
1230: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr 
1240: 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73 6e  {[regexp -- {\sn
1250: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31  o such table: t1
1260: 5c 73 7d 20 24 65 72 72 6f 72 5d 20 7c 7c 20 5c  \s} $error] || \
1270: 0d 0a 20 20 20 20 20 20 20 20 5b 72 65 67 65 78  ..        [regex
1280: 70 20 2d 2d 20 7b 5c 73 64 61 74 61 62 61 73 65  p -- {\sdatabase
1290: 20 69 73 20 6c 6f 63 6b 65 64 5c 73 7d 20 24 65   is locked\s} $e
12a0: 72 72 6f 72 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20  rror] || \..    
12b0: 20 20 20 20 5b 72 65 67 65 78 70 20 2d 2d 20 7b      [regexp -- {
12c0: 5c 73 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  \sdatabase table
12d0: 20 69 73 20 6c 6f 63 6b 65 64 5c 73 7d 20 24 65   is locked\s} $e
12e0: 72 72 6f 72 5d 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a  rror]}]..  }....
12f0: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1340: 0a 0d 0a 20 20 70 72 6f 63 20 69 6e 69 74 54 65  ...  proc initTe
1350: 73 74 20 7b 20 69 6e 64 69 63 61 74 6f 72 20 7d  st { indicator }
1360: 20 7b 0d 0a 20 20 20 20 73 65 74 20 3a 3a 65 61   {..    set ::ea
1370: 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72  gle_tests(constr
1380: 61 69 6e 74 73 29 20 24 3a 3a 74 65 73 74 5f 63  aints) $::test_c
1390: 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 7d 0d  onstraints..  }.
13a0: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
13b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13f0: 23 23 0d 0a 0d 0a 20 20 70 72 6f 63 20 64 65 6c  ##....  proc del
1400: 61 79 54 65 73 74 20 7b 20 7b 65 78 74 72 61 20  ayTest { {extra 
1410: 30 7d 20 7d 20 7b 0d 0a 20 20 20 20 61 66 74 65  0} } {..    afte
1420: 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 28 72 61  r [expr {int((ra
1430: 6e 64 28 29 20 2a 20 31 30 30 30 29 20 2b 20 24  nd() * 1000) + $
1440: 65 78 74 72 61 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d  extra)}]..  }...
1450: 0a 20 20 23 23 23 23 23 23 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: 0d 0a 0d 0a 20 20 70 72 6f 63 20 77 61 69 74 54  ....  proc waitT
14b0: 65 73 74 20 7b 20 69 6e 64 69 63 61 74 6f 72 20  est { indicator 
14c0: 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 21 5b 24  } {..    if {![$
14d0: 3a 3a 65 76 65 6e 74 20 57 61 69 74 4f 6e 65 20  ::event WaitOne 
14e0: 24 3a 3a 74 69 6d 65 6f 75 74 5d 7d 20 74 68 65  $::timeout]} the
14f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72  n {..      error
1500: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 74 69   [appendArgs "ti
1510: 6d 65 6f 75 74 20 77 68 69 6c 65 20 73 74 61 72  meout while star
1520: 74 69 6e 67 20 77 6f 72 6b 6c 6f 61 64 20 23 22  ting workload #"
1530: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 65   \..          [e
1540: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6f 72 64  xpr {[string ord
1550: 69 6e 61 6c 20 24 69 6e 64 69 63 61 74 6f 72 20  inal $indicator 
1560: 30 5d 20 2d 20 5b 73 74 72 69 6e 67 20 6f 72 64  0] - [string ord
1570: 69 6e 61 6c 20 41 20 30 5d 20 2b 20 31 7d 5d 5d  inal A 0] + 1}]]
1580: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
1590: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
15a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
15e0: 0a 0d 0a 20 20 70 72 6f 63 20 73 68 6f 77 54 65  ...  proc showTe
15f0: 73 74 20 7b 20 69 6e 64 69 63 61 74 6f 72 20 7d  st { indicator }
1600: 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 3a   {..    tputs $:
1610: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69  :test_channel $i
1620: 6e 64 69 63 61 74 6f 72 0d 0a 20 20 20 20 61 70  ndicator..    ap
1630: 70 65 6e 64 20 3a 3a 69 6e 64 69 63 61 74 6f 72  pend ::indicator
1640: 73 20 24 69 6e 64 69 63 61 74 6f 72 0d 0a 20 20  s $indicator..  
1650: 20 20 64 65 6c 61 79 54 65 73 74 20 24 3a 3a 63    delayTest $::c
1660: 6f 75 6e 74 28 32 29 0d 0a 20 20 7d 0d 0a 0d 0a  ount(2)..  }....
1670: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
16c0: 0a 0d 0a 20 20 70 72 6f 63 20 64 6f 6e 65 54 65  ...  proc doneTe
16d0: 73 74 20 7b 20 7b 69 6e 64 69 63 61 74 6f 72 20  st { {indicator 
16e0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20  ""} } {..    if 
16f0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length 
1700: 24 69 6e 64 69 63 61 74 6f 72 5d 20 3e 20 30 7d  $indicator] > 0}
1710: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6c   then {..      l
1720: 61 70 70 65 6e 64 20 3a 3a 73 74 61 74 75 73 28  append ::status(
1730: 64 6f 6e 65 29 20 24 69 6e 64 69 63 61 74 6f 72  done) $indicator
1740: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 69 66 20  ..    }..    if 
1750: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1760: 73 74 61 74 75 73 28 64 6f 6e 65 29 5d 7d 20 74  status(done)]} t
1770: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 68 6f 73  hen {..      hos
1780: 74 20 74 69 74 6c 65 20 24 3a 3a 73 74 61 74 75  t title $::statu
1790: 73 28 64 6f 6e 65 29 0d 0a 20 20 20 20 7d 20 65  s(done)..    } e
17a0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 68 6f 73  lse {..      hos
17b0: 74 20 74 69 74 6c 65 20 22 22 0d 0a 20 20 20 20  t title ""..    
17c0: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23  }..  }....  ####
17d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1810: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70  #########....  p
1820: 72 6f 63 20 66 61 69 6c 54 65 73 74 20 7b 20 69  roc failTest { i
1830: 6e 64 69 63 61 74 6f 72 20 65 72 72 6f 72 20 7d  ndicator error }
1840: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
1850: 20 4e 4f 54 45 3a 20 48 61 6c 74 20 61 6c 6c 20   NOTE: Halt all 
1860: 74 65 73 74 69 6e 67 20 61 6e 64 20 65 78 69 74  testing and exit
1870: 20 74 68 65 20 70 72 6f 63 65 73 73 20 6e 6f 77   the process now
1880: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 2d 4f  ..    #       -O
1890: 52 2d 20 6a 75 73 74 20 72 65 63 6f 72 64 20 74  R- just record t
18a0: 68 65 20 66 61 69 6c 75 72 65 20 61 6e 64 20 63  he failure and c
18b0: 6f 6e 74 69 6e 75 65 3f 0d 0a 20 20 20 20 23 0d  ontinue?..    #.
18c0: 0a 20 20 20 20 73 65 74 20 6c 65 76 65 6c 20 5b  .    set level [
18d0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 6c 65 76 65  expr {[info leve
18e0: 6c 5d 20 2d 20 31 7d 5d 0d 0a 0d 0a 20 20 20 20  l] - 1}]....    
18f0: 69 66 20 7b 24 3a 3a 65 78 69 74 4f 6e 46 61 69  if {$::exitOnFai
1900: 6c 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  l} then {..     
1910: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c
1920: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1930: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
1940: 5c 6e 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 24  \n [info level $
1950: 6c 65 76 65 6c 5d 20 22 3a 20 22 20 5c 6e 5c 74  level] ": " \n\t
1960: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20   $error \n].... 
1970: 20 20 20 20 20 65 78 69 74 20 66 61 69 6c 75 72       exit failur
1980: 65 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  e..    } else {.
1990: 0a 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 70 70  .      tlog [app
19a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
19b0: 20 20 20 20 20 22 5c 6e 2d 2d 2d 2d 20 42 45 47       "\n---- BEG
19c0: 49 4e 20 54 45 53 54 20 46 41 49 4c 55 52 45 20  IN TEST FAILURE 
19d0: 4f 55 54 50 55 54 5c 6e 22 20 5c 0d 0a 20 20 20  OUTPUT\n" \..   
19e0: 20 20 20 20 20 20 20 5c 6e 20 5b 69 6e 66 6f 20         \n [info 
19f0: 6c 65 76 65 6c 20 24 6c 65 76 65 6c 5d 20 22 3a  level $level] ":
1a00: 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \
1a10: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  n \..          "
1a20: 5c 6e 2d 2d 2d 2d 20 45 4e 44 20 54 45 53 54 20  \n---- END TEST 
1a30: 46 41 49 4c 55 52 45 20 4f 55 54 50 55 54 5c 6e  FAILURE OUTPUT\n
1a40: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74  "]....      tput
1a50: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe
1a60: 6c 20 24 69 6e 64 69 63 61 74 6f 72 0d 0a 0d 0a  l $indicator....
1a70: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
1a80: 20 65 78 69 73 74 73 20 3a 3a 66 61 69 6c 75 72   exists ::failur
1a90: 65 73 28 24 69 6e 64 69 63 61 74 6f 72 29 5d 7d  es($indicator)]}
1aa0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
1ab0: 20 73 65 74 20 3a 3a 66 61 69 6c 75 72 65 73 28   set ::failures(
1ac0: 24 69 6e 64 69 63 61 74 6f 72 29 20 30 0d 0a 20  $indicator) 0.. 
1ad0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ae0: 69 6e 63 72 20 3a 3a 66 61 69 6c 75 72 65 73 28  incr ::failures(
1af0: 24 69 6e 64 69 63 61 74 6f 72 29 0d 0a 20 20 20  $indicator)..   
1b00: 20 20 20 64 65 6c 61 79 54 65 73 74 20 24 3a 3a     delayTest $::
1b10: 63 6f 75 6e 74 28 32 29 0d 0a 20 20 20 20 7d 0d  count(2)..    }.
1b20: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  .  }....  ######
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b70: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f  #######....  pro
1b80: 63 20 61 6c 6c 6f 63 4d 65 6d 20 7b 20 73 69 7a  c allocMem { siz
1b90: 65 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 24  e } {..    if {$
1ba0: 3a 3a 63 6f 54 61 73 6b 4d 65 6d 7d 20 74 68 65  ::coTaskMem} the
1bb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  n {..      retur
1bc0: 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
1bd0: 20 2d 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20   -create \..    
1be0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 75 6e        System.Run
1bf0: 74 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76  time.InteropServ
1c00: 69 63 65 73 2e 4d 61 72 73 68 61 6c 20 5c 0d 0a  ices.Marshal \..
1c10: 20 20 20 20 20 20 20 20 20 20 41 6c 6c 6f 63 43            AllocC
1c20: 6f 54 61 73 6b 4d 65 6d 20 24 73 69 7a 65 5d 3b  oTaskMem $size];
1c30: 20 23 20 74 68 72 6f 77 0d 0a 20 20 20 20 7d 20   # throw..    } 
1c40: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 73 65  else {..      se
1c50: 74 20 70 74 72 20 5b 6f 62 6a 65 63 74 20 69 6e  t ptr [object in
1c60: 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 2d 66 6c  voke -create -fl
1c70: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
1c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74  ..          Syst
1c90: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1ca0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1cb0: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..          
1cc0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 24  sqlite3_malloc $
1cd0: 73 69 7a 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  size]....      i
1ce0: 66 20 7b 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  f {[object invok
1cf0: 65 20 24 70 74 72 20 54 6f 49 6e 74 36 34 5d 20  e $ptr ToInt64] 
1d00: 21 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  != 0} then {..  
1d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 70 74        return $pt
1d20: 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  r..      } else 
1d30: 7b 0d 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72  {..        error
1d40: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 73 71   [appendArgs "sq
1d50: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 22 20 24  lite3_malloc(" $
1d60: 73 69 7a 65 20 22 29 20 66 61 69 6c 65 64 22 5d  size ") failed"]
1d70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1d80: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23  ..  }....  #####
1d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db0: 23 23 23 23 23 23 23 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 0d 0a 0d 0a 20 20 70 72  ########....  pr
1de0: 6f 63 20 75 73 65 4d 65 6d 20 7b 20 70 74 72 20  oc useMem { ptr 
1df0: 73 69 7a 65 20 7d 20 7b 0d 0a 20 20 20 20 69 66  size } {..    if
1e00: 20 7b 21 5b 69 73 4d 6f 6e 6f 5d 7d 20 74 68 65   {![isMono]} the
1e10: 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n {..      #..  
1e20: 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 65 20      # HACK: The 
1e30: 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 20 6f  type signature o
1e40: 66 20 74 68 65 20 5a 65 72 6f 4d 65 6d 6f 72 79  f the ZeroMemory
1e50: 20 6d 65 74 68 6f 64 20 63 68 61 6e 67 65 64 20   method changed 
1e60: 61 73 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  as of the..     
1e70: 20 23 20 20 20 20 20 20 20 2e 4e 45 54 20 46 72   #       .NET Fr
1e80: 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 20 20 54 68  amework 4.5.  Th
1e90: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1ea0: 74 20 77 65 6e 74 20 66 72 6f 6d 20 62 65 69 6e  t went from bein
1eb0: 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  g of..      #   
1ec0: 20 20 20 20 74 79 70 65 20 55 49 6e 74 20 74 6f      type UInt to
1ed0: 20 74 79 70 65 20 55 49 6e 74 50 74 72 2e 0d 0a   type UIntPtr...
1ee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1ef0: 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
1f00: 6e 74 20 64 6f 74 4e 65 74 34 30 5d 20 26 26 20  nt dotNet40] && 
1f10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61  \..          [ha
1f20: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 64 6f 74  veConstraint dot
1f30: 4e 65 74 34 35 4f 72 48 69 67 68 65 72 5d 7d 20  Net45OrHigher]} 
1f40: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
1f50: 73 65 74 20 6e 65 77 53 69 7a 65 20 5b 6f 62 6a  set newSize [obj
1f60: 65 63 74 20 63 72 65 61 74 65 20 55 49 6e 74 50  ect create UIntP
1f70: 74 72 20 24 73 69 7a 65 5d 0d 0a 20 20 20 20 20  tr $size]..     
1f80: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
1f90: 20 20 20 73 65 74 20 6e 65 77 53 69 7a 65 20 24     set newSize $
1fa0: 73 69 7a 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  size..      }...
1fb0: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
1fc0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1fd0: 50 75 62 6c 69 63 20 4d 69 63 72 6f 73 6f 66 74  Public Microsoft
1fe0: 2e 57 69 6e 33 32 2e 57 69 6e 33 32 4e 61 74 69  .Win32.Win32Nati
1ff0: 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ve \..          
2000: 5a 65 72 6f 4d 65 6d 6f 72 79 20 24 70 74 72 20  ZeroMemory $ptr 
2010: 24 6e 65 77 53 69 7a 65 0d 0a 20 20 20 20 7d 0d  $newSize..    }.
2020: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  .  }....  ######
2030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2070: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f  #######....  pro
2080: 63 20 66 72 65 65 4d 65 6d 20 7b 20 70 74 72 20  c freeMem { ptr 
2090: 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 24 3a 3a  } {..    if {$::
20a0: 63 6f 54 61 73 6b 4d 65 6d 7d 20 74 68 65 6e 20  coTaskMem} then 
20b0: 7b 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  {..      object 
20c0: 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 52 75  invoke System.Ru
20d0: 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72  ntime.InteropSer
20e0: 76 69 63 65 73 2e 4d 61 72 73 68 61 6c 20 5c 0d  vices.Marshal \.
20f0: 0a 20 20 20 20 20 20 20 20 20 20 46 72 65 65 43  .          FreeC
2100: 6f 54 61 73 6b 4d 65 6d 20 24 70 74 72 0d 0a 20  oTaskMem $ptr.. 
2110: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
2120: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
2130: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
2140: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..          
2150: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2160: 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
2170: 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..      
2180: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2190: 20 24 70 74 72 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   $ptr..    }....
21a0: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
21b0: 45 3a 20 46 72 65 65 20 65 78 74 72 61 20 6f 70  E: Free extra op
21c0: 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
21d0: 6c 65 20 72 65 66 65 72 65 6e 63 65 20 61 64 64  le reference add
21e0: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 23  ed by the..    #
21f0: 20 20 20 20 20 20 20 5b 72 65 74 75 72 6e 5d 20         [return] 
2200: 63 6f 6d 6d 61 6e 64 20 69 6e 20 5b 61 6c 6c 6f  command in [allo
2210: 63 4d 65 6d 5d 2e 0d 0a 20 20 20 20 23 0d 0a 20  cMem]...    #.. 
2220: 20 20 20 6f 62 6a 65 63 74 20 64 69 73 70 6f 73     object dispos
2230: 65 20 24 70 74 72 0d 0a 20 20 7d 0d 0a 0d 0a 20  e $ptr..  }.... 
2240: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
2250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
2290: 0d 0a 20 20 70 72 6f 63 20 73 65 74 75 70 4c 6f  ..  proc setupLo
22a0: 67 67 69 6e 67 20 7b 20 66 69 6c 65 4e 61 6d 65  gging { fileName
22b0: 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 21 5b   } {..    if {![
22c0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6c 6f  info exists ::lo
22d0: 67 4c 69 73 74 65 6e 65 72 5d 7d 20 74 68 65 6e  gListener]} then
22e0: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 3a 3a   {..      set ::
22f0: 6c 6f 67 4c 69 73 74 65 6e 65 72 20 5b 6f 62 6a  logListener [obj
2300: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
2310: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53  s \..          S
2320: 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
2330: 73 2e 54 65 78 74 57 72 69 74 65 72 54 72 61 63  s.TextWriterTrac
2340: 65 4c 69 73 74 65 6e 65 72 20 24 66 69 6c 65 4e  eListener $fileN
2350: 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ame]..    }.... 
2360: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
2370: 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
2380: 69 63 73 2e 54 72 61 63 65 2e 4c 69 73 74 65 6e  ics.Trace.Listen
2390: 65 72 73 20 41 64 64 20 24 3a 3a 6c 6f 67 4c 69  ers Add $::logLi
23a0: 73 74 65 6e 65 72 0d 0a 20 20 20 20 6f 62 6a 65  stener..    obje
23b0: 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
23c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
23d0: 69 74 65 4c 6f 67 20 49 6e 69 74 69 61 6c 69 7a  iteLog Initializ
23e0: 65 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24  e....    tputs $
23f0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2400: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
2410: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 61 62        "---- enab
2420: 6c 65 64 20 53 51 4c 69 74 65 20 74 72 61 63 65  led SQLite trace
2430: 20 6c 6f 67 67 69 6e 67 20 74 6f 20 66 69 6c 65   logging to file
2440: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \
2450: 22 5c 6e 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  "\n]..  }....  #
2460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
24b0: 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4c 6f    proc cleanupLo
24c0: 67 67 69 6e 67 20 7b 20 66 69 6c 65 4e 61 6d 65  gging { fileName
24d0: 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 69   } {..    if {[i
24e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6c 6f 67  nfo exists ::log
24f0: 4c 69 73 74 65 6e 65 72 5d 7d 20 74 68 65 6e 20  Listener]} then 
2500: 7b 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  {..      object 
2510: 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 69  invoke System.Di
2520: 61 67 6e 6f 73 74 69 63 73 2e 54 72 61 63 65 2e  agnostics.Trace.
2530: 4c 69 73 74 65 6e 65 72 73 20 52 65 6d 6f 76 65  Listeners Remove
2540: 20 24 3a 3a 6c 6f 67 4c 69 73 74 65 6e 65 72 0d   $::logListener.
2550: 0a 20 20 20 20 20 20 24 3a 3a 6c 6f 67 4c 69 73  .      $::logLis
2560: 74 65 6e 65 72 20 43 6c 6f 73 65 0d 0a 20 20 20  tener Close..   
2570: 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20   }....    #..   
2580: 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
2590: 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  e trace listener
25a0: 20 6c 6f 67 20 66 69 6c 65 20 74 6f 20 74 68 65   log file to the
25b0: 20 6d 61 69 6e 20 74 65 73 74 20 6c 6f 67 20 66   main test log f
25c0: 69 6c 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ile...    #..   
25d0: 20 74 6c 6f 67 20 22 2d 2d 2d 2d 20 42 45 47 49   tlog "---- BEGI
25e0: 4e 20 54 52 41 43 45 20 4c 49 53 54 45 4e 45 52  N TRACE LISTENER
25f0: 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 20 20 20 20   OUTPUT\n"..    
2600: 74 6c 6f 67 20 5b 72 65 61 64 46 69 6c 65 20 24  tlog [readFile $
2610: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 74  fileName]..    t
2620: 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45 4e 44 20  log "\n---- END 
2630: 54 52 41 43 45 20 4c 49 53 54 45 4e 45 52 20 4f  TRACE LISTENER O
2640: 55 54 50 55 54 5c 6e 22 0d 0a 0d 0a 20 20 20 20  UTPUT\n"....    
2650: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 44  #..    # NOTE: D
2660: 65 6c 65 74 65 20 74 68 65 20 74 72 61 63 65 20  elete the trace 
2670: 6c 69 73 74 65 6e 65 72 20 6c 6f 67 20 66 69 6c  listener log fil
2680: 65 20 62 65 63 61 75 73 65 20 69 74 73 20 63 6f  e because its co
2690: 6e 74 65 6e 74 73 20 68 61 76 65 0d 0a 20 20 20  ntents have..   
26a0: 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 6f   #       been co
26b0: 70 69 65 64 20 74 6f 20 74 68 65 20 6d 61 69 6e  pied to the main
26c0: 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d   test log file..
26d0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 63 6c 65 61  .    #..    clea
26e0: 6e 75 70 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nupFile $fileNam
26f0: 65 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24  e....    tputs $
2700: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2710: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
2720: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 69 73 61        "---- disa
2730: 62 6c 65 64 20 53 51 4c 69 74 65 20 74 72 61 63  bled SQLite trac
2740: 65 20 6c 6f 67 67 69 6e 67 20 74 6f 20 66 69 6c  e logging to fil
2750: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 
2760: 5c 22 5c 6e 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  \"\n]..  }....  
2770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
27c0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
27d0: 53 65 74 75 70 20 74 68 65 20 64 65 66 61 75 6c  Setup the defaul
27e0: 74 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  t values for the
27f0: 20 74 75 6e 61 62 6c 65 20 77 6f 72 6b 6c 6f 61   tunable workloa
2800: 64 20 70 61 72 61 6d 65 74 65 72 73 2e 20 20 41  d parameters.  A
2810: 6e 79 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 61  ny,..  #       a
2820: 6c 6c 2c 20 6f 72 20 6e 6f 6e 65 20 6f 66 20 74  ll, or none of t
2830: 68 65 73 65 20 6d 61 79 20 62 65 20 6f 76 65 72  hese may be over
2840: 72 69 64 65 6e 20 76 69 61 20 74 68 65 20 63 6f  riden via the co
2850: 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0d 0a 20 20 23  mmand line...  #
2860: 0d 0a 20 20 73 65 74 20 63 6f 75 6e 74 28 30 29  ..  set count(0)
2870: 20 33 3b 20 20 20 20 20 20 20 20 20 23 20 57 6f   3;         # Wo
2880: 72 6b 6c 6f 61 64 20 72 65 70 65 61 74 20 63 6f  rkload repeat co
2890: 75 6e 74 20 28 69 2e 65 2e 20 74 6f 74 61 6c 20  unt (i.e. total 
28a0: 66 75 6c 6c 20 72 75 6e 73 29 2e 0d 0a 20 20 73  full runs)...  s
28b0: 65 74 20 63 6f 75 6e 74 28 31 29 20 35 3b 20 20  et count(1) 5;  
28c0: 20 20 20 20 20 20 20 23 20 57 6f 72 6b 6c 6f 61         # Workloa
28d0: 64 20 69 74 65 72 61 74 69 6f 6e 20 63 6f 75 6e  d iteration coun
28e0: 74 20 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 61  t (i.e. within a
28f0: 20 72 75 6e 29 2e 0d 0a 20 20 73 65 74 20 63 6f   run)...  set co
2900: 75 6e 74 28 32 29 20 32 30 30 3b 20 20 20 20 20  unt(2) 200;     
2910: 20 20 23 20 57 6f 72 6b 6c 6f 61 64 20 69 74 65    # Workload ite
2920: 72 61 74 69 6f 6e 20 64 65 6c 61 79 2c 20 69 6e  ration delay, in
2930: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 0d 0a   milliseconds...
2940: 20 20 73 65 74 20 63 6f 75 6e 74 28 33 29 20 35    set count(3) 5
2950: 37 3b 20 20 20 20 20 20 20 20 23 20 57 6f 72 6b  7;        # Work
2960: 6c 6f 61 64 20 22 73 6d 61 6c 6c 22 20 64 61 74  load "small" dat
2970: 61 20 63 68 75 6e 6b 20 73 69 7a 65 2c 20 69 6e  a chunk size, in
2980: 20 62 79 74 65 73 2e 0d 0a 20 20 73 65 74 20 63   bytes...  set c
2990: 6f 75 6e 74 28 34 29 20 31 30 30 30 30 3b 20 20  ount(4) 10000;  
29a0: 20 20 20 23 20 57 6f 72 6b 6c 6f 61 64 20 22 62     # Workload "b
29b0: 69 67 22 20 64 61 74 61 20 63 68 75 6e 6b 20 73  ig" data chunk s
29c0: 69 7a 65 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a  ize, in bytes...
29d0: 20 20 73 65 74 20 63 6f 75 6e 74 28 35 29 20 32    set count(5) 2
29e0: 30 39 37 31 35 32 30 30 3b 20 23 20 4d 61 78 69  09715200; # Maxi
29f0: 6d 75 6d 20 68 65 61 70 20 6d 65 6d 6f 72 79 20  mum heap memory 
2a00: 74 6f 20 65 78 63 6c 75 64 65 20 61 74 20 6f 6e  to exclude at on
2a10: 65 20 74 69 6d 65 2e 0d 0a 20 20 73 65 74 20 6e  e time...  set n
2a20: 6f 57 6f 72 6b 6c 6f 61 64 20 5b 6c 69 73 74 5d  oWorkload [list]
2a30: 3b 20 20 23 20 57 6f 72 6b 6c 6f 61 64 73 20 74  ;  # Workloads t
2a40: 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  o be omitted fro
2a50: 6d 20 74 68 65 20 72 75 6e 2c 20 62 79 20 69 6e  m the run, by in
2a60: 64 65 78 2e 0d 0a 20 20 73 65 74 20 70 72 69 6f  dex...  set prio
2a70: 72 69 74 69 65 73 20 5b 6c 69 73 74 5d 3b 20 20  rities [list];  
2a80: 23 20 44 69 63 74 69 6f 6e 61 72 79 20 6f 66 20  # Dictionary of 
2a90: 77 6f 72 6b 6c 6f 61 64 20 74 68 72 65 61 64 20  workload thread 
2aa0: 70 72 69 6f 72 69 74 69 65 73 2e 0d 0a 20 20 73  priorities...  s
2ab0: 65 74 20 65 78 69 74 4f 6e 46 61 69 6c 20 66 61  et exitOnFail fa
2ac0: 6c 73 65 3b 20 20 20 23 20 48 61 6c 74 20 74 65  lse;   # Halt te
2ad0: 73 74 69 6e 67 20 61 6e 64 20 65 78 69 74 20 70  sting and exit p
2ae0: 72 6f 63 65 73 73 20 6f 6e 20 74 65 73 74 20 66  rocess on test f
2af0: 61 69 6c 75 72 65 3f 0d 0a 20 20 73 65 74 20 63  ailure?..  set c
2b00: 6f 54 61 73 6b 4d 65 6d 20 74 72 75 65 3b 20 20  oTaskMem true;  
2b10: 20 20 20 23 20 55 73 65 20 41 6c 6c 6f 63 43 6f     # Use AllocCo
2b20: 54 61 73 6b 4d 65 6d 2f 46 72 65 65 43 6f 54 61  TaskMem/FreeCoTa
2b30: 73 6b 4d 65 6d 20 66 6f 72 20 6d 65 6d 6f 72 79  skMem for memory
2b40: 3f 0d 0a 20 20 73 65 74 20 6e 6f 54 72 61 63 65  ?..  set noTrace
2b50: 20 66 61 6c 73 65 3b 20 20 20 20 20 20 23 20 44   false;      # D
2b60: 69 73 61 62 6c 65 20 53 51 4c 69 74 65 20 74 72  isable SQLite tr
2b70: 61 63 65 20 6c 6f 67 67 69 6e 67 20 74 6f 20 61  ace logging to a
2b80: 20 66 69 6c 65 3f 0d 0a 0d 0a 20 20 23 23 23 23   file?....  ####
2b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23  #########....  #
2be0: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 63  ..  # NOTE: If c
2bf0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
2c00: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 74 65 73  ments to the tes
2c10: 74 20 73 75 69 74 65 20 61 72 65 20 61 76 61 69  t suite are avai
2c20: 6c 61 62 6c 65 2c 20 70 72 6f 63 65 73 73 0d 0a  lable, process..
2c30: 20 20 23 20 20 20 20 20 20 20 74 68 65 6d 20 66    #       them f
2c40: 6f 72 20 61 6e 79 20 6f 70 74 69 6f 6e 73 20 74  or any options t
2c50: 68 61 74 20 61 72 65 20 61 70 70 6c 69 63 61 62  hat are applicab
2c60: 6c 65 20 74 6f 20 74 68 69 73 20 74 65 73 74 20  le to this test 
2c70: 28 69 2e 65 2e 20 61 6e 79 20 6f 66 0d 0a 20 20  (i.e. any of..  
2c80: 23 20 20 20 20 20 20 20 74 68 65 20 74 75 6e 61  #       the tuna
2c90: 62 6c 65 20 77 6f 72 6b 6c 6f 61 64 20 70 61 72  ble workload par
2ca0: 61 6d 65 74 65 72 73 20 6c 69 73 74 65 64 20 61  ameters listed a
2cb0: 62 6f 76 65 29 2e 0d 0a 20 20 23 0d 0a 20 20 69  bove)...  #..  i
2cc0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
2cd0: 61 72 67 76 5d 20 26 26 20 5b 6c 6c 65 6e 67 74  argv] && [llengt
2ce0: 68 20 24 61 72 67 76 5d 20 3e 20 30 7d 20 74 68  h $argv] > 0} th
2cf0: 65 6e 20 7b 0d 0a 20 20 20 20 70 61 72 73 65 20  en {..    parse 
2d00: 6f 70 74 69 6f 6e 73 20 2d 66 6c 61 67 73 20 5c  options -flags \
2d10: 0d 0a 20 20 20 20 20 20 20 20 7b 2d 53 74 6f 70  ..        {-Stop
2d20: 4f 6e 55 6e 6b 6e 6f 77 6e 4f 70 74 69 6f 6e 20  OnUnknownOption 
2d30: 2b 49 67 6e 6f 72 65 4f 6e 55 6e 6b 6e 6f 77 6e  +IgnoreOnUnknown
2d40: 4f 70 74 69 6f 6e 20 53 6b 69 70 4f 6e 55 6e 6b  Option SkipOnUnk
2d50: 6e 6f 77 6e 4f 70 74 69 6f 6e 7d 20 2d 2d 20 5c  nownOption} -- \
2d60: 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20  ..        [list 
2d70: 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48  [list null MustH
2d80: 61 76 65 49 6e 74 65 67 65 72 56 61 6c 75 65 20  aveIntegerValue 
2d90: 2d 31 20 2d 31 20 2d 63 6f 75 6e 74 30 20 24 63  -1 -1 -count0 $c
2da0: 6f 75 6e 74 28 30 29 5d 20 5c 0d 0a 20 20 20 20  ount(0)] \..    
2db0: 20 20 20 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d      [list null M
2dc0: 75 73 74 48 61 76 65 49 6e 74 65 67 65 72 56 61  ustHaveIntegerVa
2dd0: 6c 75 65 20 2d 31 20 2d 31 20 2d 63 6f 75 6e 74  lue -1 -1 -count
2de0: 31 20 24 63 6f 75 6e 74 28 31 29 5d 20 5c 0d 0a  1 $count(1)] \..
2df0: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 6e 75          [list nu
2e00: 6c 6c 20 4d 75 73 74 48 61 76 65 49 6e 74 65 67  ll MustHaveInteg
2e10: 65 72 56 61 6c 75 65 20 2d 31 20 2d 31 20 2d 63  erValue -1 -1 -c
2e20: 6f 75 6e 74 32 20 24 63 6f 75 6e 74 28 32 29 5d  ount2 $count(2)]
2e30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73   \..        [lis
2e40: 74 20 6e 75 6c 6c 20 4d 75 73 74 48 61 76 65 49  t null MustHaveI
2e50: 6e 74 65 67 65 72 56 61 6c 75 65 20 2d 31 20 2d  ntegerValue -1 -
2e60: 31 20 2d 63 6f 75 6e 74 33 20 24 63 6f 75 6e 74  1 -count3 $count
2e70: 28 33 29 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  (3)] \..        
2e80: 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48  [list null MustH
2e90: 61 76 65 49 6e 74 65 67 65 72 56 61 6c 75 65 20  aveIntegerValue 
2ea0: 2d 31 20 2d 31 20 2d 63 6f 75 6e 74 34 20 24 63  -1 -1 -count4 $c
2eb0: 6f 75 6e 74 28 34 29 5d 20 5c 0d 0a 20 20 20 20  ount(4)] \..    
2ec0: 20 20 20 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d      [list null M
2ed0: 75 73 74 48 61 76 65 49 6e 74 65 67 65 72 56 61  ustHaveIntegerVa
2ee0: 6c 75 65 20 2d 31 20 2d 31 20 2d 63 6f 75 6e 74  lue -1 -1 -count
2ef0: 35 20 24 63 6f 75 6e 74 28 35 29 5d 20 5c 0d 0a  5 $count(5)] \..
2f00: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 6e 75          [list nu
2f10: 6c 6c 20 4d 75 73 74 48 61 76 65 4c 69 73 74 56  ll MustHaveListV
2f20: 61 6c 75 65 20 2d 31 20 2d 31 20 2d 6e 6f 57 6f  alue -1 -1 -noWo
2f30: 72 6b 6c 6f 61 64 20 24 6e 6f 57 6f 72 6b 6c 6f  rkload $noWorklo
2f40: 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  ad] \..        [
2f50: 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48 61  list null MustHa
2f60: 76 65 4c 69 73 74 56 61 6c 75 65 20 2d 31 20 2d  veListValue -1 -
2f70: 31 20 2d 70 72 69 6f 72 69 74 69 65 73 20 24 70  1 -priorities $p
2f80: 72 69 6f 72 69 74 69 65 73 5d 20 5c 0d 0a 20 20  riorities] \..  
2f90: 20 20 20 20 20 20 5b 6c 69 73 74 20 6e 75 6c 6c        [list null
2fa0: 20 4d 75 73 74 48 61 76 65 42 6f 6f 6c 65 61 6e   MustHaveBoolean
2fb0: 56 61 6c 75 65 20 2d 31 20 2d 31 20 2d 65 78 69  Value -1 -1 -exi
2fc0: 74 4f 6e 46 61 69 6c 20 24 65 78 69 74 4f 6e 46  tOnFail $exitOnF
2fd0: 61 69 6c 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ail] \..        
2fe0: 5b 6c 69 73 74 20 6e 75 6c 6c 20 4d 75 73 74 48  [list null MustH
2ff0: 61 76 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 20  aveBooleanValue 
3000: 2d 31 20 2d 31 20 2d 63 6f 54 61 73 6b 4d 65 6d  -1 -1 -coTaskMem
3010: 20 24 63 6f 54 61 73 6b 4d 65 6d 5d 20 5c 0d 0a   $coTaskMem] \..
3020: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 6e 75          [list nu
3030: 6c 6c 20 4d 75 73 74 48 61 76 65 42 6f 6f 6c 65  ll MustHaveBoole
3040: 61 6e 56 61 6c 75 65 20 2d 31 20 2d 31 20 2d 6e  anValue -1 -1 -n
3050: 6f 54 72 61 63 65 20 24 6e 6f 54 72 61 63 65 5d  oTrace $noTrace]
3060: 5d 20 24 61 72 67 76 0d 0a 0d 0a 20 20 20 20 73  ] $argv....    s
3070: 65 74 20 63 6f 75 6e 74 28 30 29 20 24 6f 70 74  et count(0) $opt
3080: 69 6f 6e 73 28 2d 63 6f 75 6e 74 30 2c 76 61 6c  ions(-count0,val
3090: 75 65 29 0d 0a 20 20 20 20 73 65 74 20 63 6f 75  ue)..    set cou
30a0: 6e 74 28 31 29 20 24 6f 70 74 69 6f 6e 73 28 2d  nt(1) $options(-
30b0: 63 6f 75 6e 74 31 2c 76 61 6c 75 65 29 0d 0a 20  count1,value).. 
30c0: 20 20 20 73 65 74 20 63 6f 75 6e 74 28 32 29 20     set count(2) 
30d0: 24 6f 70 74 69 6f 6e 73 28 2d 63 6f 75 6e 74 32  $options(-count2
30e0: 2c 76 61 6c 75 65 29 0d 0a 20 20 20 20 73 65 74  ,value)..    set
30f0: 20 63 6f 75 6e 74 28 33 29 20 24 6f 70 74 69 6f   count(3) $optio
3100: 6e 73 28 2d 63 6f 75 6e 74 33 2c 76 61 6c 75 65  ns(-count3,value
3110: 29 0d 0a 20 20 20 20 73 65 74 20 63 6f 75 6e 74  )..    set count
3120: 28 34 29 20 24 6f 70 74 69 6f 6e 73 28 2d 63 6f  (4) $options(-co
3130: 75 6e 74 34 2c 76 61 6c 75 65 29 0d 0a 20 20 20  unt4,value)..   
3140: 20 73 65 74 20 63 6f 75 6e 74 28 35 29 20 24 6f   set count(5) $o
3150: 70 74 69 6f 6e 73 28 2d 63 6f 75 6e 74 35 2c 76  ptions(-count5,v
3160: 61 6c 75 65 29 0d 0a 20 20 20 20 73 65 74 20 6e  alue)..    set n
3170: 6f 57 6f 72 6b 6c 6f 61 64 20 24 6f 70 74 69 6f  oWorkload $optio
3180: 6e 73 28 2d 6e 6f 57 6f 72 6b 6c 6f 61 64 2c 76  ns(-noWorkload,v
3190: 61 6c 75 65 29 0d 0a 20 20 20 20 73 65 74 20 70  alue)..    set p
31a0: 72 69 6f 72 69 74 69 65 73 20 24 6f 70 74 69 6f  riorities $optio
31b0: 6e 73 28 2d 70 72 69 6f 72 69 74 69 65 73 2c 76  ns(-priorities,v
31c0: 61 6c 75 65 29 0d 0a 20 20 20 20 73 65 74 20 65  alue)..    set e
31d0: 78 69 74 4f 6e 46 61 69 6c 20 24 6f 70 74 69 6f  xitOnFail $optio
31e0: 6e 73 28 2d 65 78 69 74 4f 6e 46 61 69 6c 2c 76  ns(-exitOnFail,v
31f0: 61 6c 75 65 29 0d 0a 20 20 20 20 73 65 74 20 63  alue)..    set c
3200: 6f 54 61 73 6b 4d 65 6d 20 24 6f 70 74 69 6f 6e  oTaskMem $option
3210: 73 28 2d 63 6f 54 61 73 6b 4d 65 6d 2c 76 61 6c  s(-coTaskMem,val
3220: 75 65 29 0d 0a 20 20 20 20 73 65 74 20 6e 6f 54  ue)..    set noT
3230: 72 61 63 65 20 24 6f 70 74 69 6f 6e 73 28 2d 6e  race $options(-n
3240: 6f 54 72 61 63 65 2c 76 61 6c 75 65 29 0d 0a 20  oTrace,value).. 
3250: 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23   }....  ########
3260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32a0: 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20  #####....  #..  
32b0: 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73  # NOTE: Load cus
32c0: 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64  tom per-user and
32d0: 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73  /or per-host tes
32e0: 74 20 73 65 74 74 69 6e 67 73 2e 20 20 43 75 72  t settings.  Cur
32f0: 72 65 6e 74 6c 79 2c 20 74 68 69 73 0d 0a 20 20  rently, this..  
3300: 23 20 20 20 20 20 20 20 69 73 20 64 6f 6e 65 20  #       is done 
3310: 61 66 74 65 72 20 70 72 6f 63 65 73 73 69 6e 67  after processing
3320: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
3330: 65 20 6f 70 74 69 6f 6e 73 2e 20 20 54 68 65 20  e options.  The 
3340: 73 65 74 74 69 6e 67 73 20 66 69 6c 65 0d 0a 20  settings file.. 
3350: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should 
3360: 74 61 6b 65 20 69 6e 74 6f 20 61 63 63 6f 75 6e  take into accoun
3370: 74 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 77  t the existing w
3380: 6f 72 6b 6c 6f 61 64 20 70 61 72 61 6d 65 74 65  orkload paramete
3390: 72 73 20 61 6e 64 20 61 76 6f 69 64 0d 0a 20 20  rs and avoid..  
33a0: 23 20 20 20 20 20 20 20 63 68 61 6e 67 69 6e 67  #       changing
33b0: 20 61 6e 79 20 74 68 61 74 20 6d 61 79 20 68 61   any that may ha
33c0: 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ve already been 
33d0: 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 23  overridden...  #
33e0: 0d 0a 20 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  ..  loadSQLiteTe
33f0: 73 74 53 65 74 74 69 6e 67 73 20 24 74 65 73 74  stSettings $test
3400: 5f 63 68 61 6e 6e 65 6c 20 2e 73 74 72 65 73 73  _channel .stress
3410: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
3420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3460: 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20  ###....  #..  # 
3470: 4e 4f 54 45 3a 20 54 68 65 20 74 72 61 63 65 20  NOTE: The trace 
3480: 6c 69 73 74 65 6e 65 72 20 75 73 65 64 20 77 69  listener used wi
3490: 74 68 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67  th the SQLiteLog
34a0: 20 63 6c 61 73 73 20 74 6f 20 63 61 70 74 75 72   class to captur
34b0: 65 20 6f 75 74 70 75 74 0d 0a 20 20 23 20 20 20  e output..  #   
34c0: 20 20 20 20 66 72 6f 6d 20 74 68 65 20 63 6f 72      from the cor
34d0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
34e0: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
34f0: 6e 20 6c 6f 67 20 66 69 6c 65 20 62 65 63 61 75  n log file becau
3500: 73 65 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20  se the..  #     
3510: 20 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63    TextWriterTrac
3520: 65 4c 69 73 74 65 6e 65 72 20 63 6c 61 73 73 20  eListener class 
3530: 6f 70 65 6e 73 20 61 6e 64 20 6c 6f 63 6b 73 20  opens and locks 
3540: 74 68 65 20 6c 6f 67 20 66 69 6c 65 20 69 74 20  the log file it 
3550: 75 73 65 73 0d 0a 20 20 23 20 20 20 20 20 20 20  uses..  #       
3560: 61 73 20 74 68 65 20 62 61 73 69 73 20 6f 66 20  as the basis of 
3570: 74 68 65 20 6f 75 74 70 75 74 20 73 74 72 65 61  the output strea
3580: 6d 2e 20 20 42 65 66 6f 72 65 20 74 68 69 73 20  m.  Before this 
3590: 74 65 73 74 20 69 73 20 63 6f 6d 70 6c 65 74 65  test is complete
35a0: 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 74 68 65  ,..  #       the
35b0: 20 65 6e 74 69 72 65 20 63 6f 6e 74 65 6e 74 73   entire contents
35c0: 20 6f 66 20 74 68 69 73 20 74 72 61 63 65 20 6c   of this trace l
35d0: 6f 67 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  og file will be 
35e0: 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 0d  copied into the.
35f0: 0a 20 20 23 20 20 20 20 20 20 20 6d 61 69 6e 20  .  #       main 
3600: 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e  test log file an
3610: 64 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2e 0d  d then deleted..
3620: 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 24 6e 6f  .  #..  if {!$no
3630: 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  Trace} then {.. 
3640: 20 20 20 73 65 74 20 6c 6f 67 46 69 6c 65 4e 61     set logFileNa
3650: 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  me [appendArgs [
3660: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 74  file rootname $t
3670: 65 73 74 5f 6c 6f 67 5d 20 2e 74 72 61 63 65 2e  est_log] .trace.
3680: 6c 6f 67 5d 0d 0a 20 20 20 20 73 65 74 75 70 4c  log]..    setupL
3690: 6f 67 67 69 6e 67 20 24 6c 6f 67 46 69 6c 65 4e  ogging $logFileN
36a0: 61 6d 65 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23  ame..  }....  ##
36b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36f0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########.... 
3700: 20 23 0d 0a 20 20 23 20 48 41 43 4b 3a 20 4d 61   #..  # HACK: Ma
3710: 6b 65 20 73 75 72 65 20 74 68 65 20 65 66 66 65  ke sure the effe
3720: 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ctive connection
3730: 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20   flags for this 
3740: 74 65 73 74 20 61 72 65 20 6c 6f 67 67 65 64 2e  test are logged.
3750: 0d 0a 20 20 23 0d 0a 20 20 67 65 74 43 6f 6e 6e  ..  #..  getConn
3760: 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 73 74 72  ectionFlags "str
3770: 65 73 73 20 74 65 73 74 22 20 22 22 20 66 61 6c  ess test" "" fal
3780: 73 65 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d  se; # IGNORED...
3790: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
37a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37e0: 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73  ....  tputs $tes
37f0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
3800: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22  dArgs \..      "
3810: 2d 2d 2d 2d 20 77 6f 72 6b 6c 6f 61 64 73 20 77  ---- workloads w
3820: 69 6c 6c 20 72 65 70 65 61 74 20 22 20 24 63 6f  ill repeat " $co
3830: 75 6e 74 28 30 29 20 22 20 74 69 6d 65 28 73 29  unt(0) " time(s)
3840: 5c 6e 22 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20  \n"]....  tputs 
3850: 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  $test_channel [a
3860: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..   
3870: 20 20 20 22 2d 2d 2d 2d 20 77 6f 72 6b 6c 6f 61     "---- workloa
3880: 64 73 20 77 69 6c 6c 20 68 61 76 65 20 22 20 24  ds will have " $
3890: 63 6f 75 6e 74 28 31 29 20 22 20 69 74 65 72 61  count(1) " itera
38a0: 74 69 6f 6e 28 73 29 5c 6e 22 5d 0d 0a 0d 0a 20  tion(s)\n"].... 
38b0: 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61   tputs $test_cha
38c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
38d0: 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d 2d 20   \..      "---- 
38e0: 77 6f 72 6b 6c 6f 61 64 73 20 77 69 6c 6c 20 77  workloads will w
38f0: 61 69 74 20 61 74 20 6c 65 61 73 74 20 22 20 24  ait at least " $
3900: 63 6f 75 6e 74 28 32 29 20 5c 0d 0a 20 20 20 20  count(2) \..    
3910: 20 20 22 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 28    " millisecond(
3920: 73 29 20 61 66 74 65 72 20 65 61 63 68 20 69 74  s) after each it
3930: 65 72 61 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20  eration\n"].... 
3940: 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61   tputs $test_cha
3950: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
3960: 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d 2d 20   \..      "---- 
3970: 73 6d 61 6c 6c 20 63 68 75 6e 6b 20 73 69 7a 65  small chunk size
3980: 20 69 73 20 22 20 24 63 6f 75 6e 74 28 33 29 20   is " $count(3) 
3990: 22 20 62 79 74 65 28 73 29 5c 6e 22 5d 0d 0a 0d  " byte(s)\n"]...
39a0: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
39b0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
39c0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
39d0: 2d 20 62 69 67 20 63 68 75 6e 6b 20 73 69 7a 65  - big chunk size
39e0: 20 69 73 20 22 20 24 63 6f 75 6e 74 28 34 29 20   is " $count(4) 
39f0: 22 20 62 79 74 65 28 73 29 5c 6e 22 5d 0d 0a 0d  " byte(s)\n"]...
3a00: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
3a10: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
3a20: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
3a30: 2d 20 6d 61 78 69 6d 75 6d 20 65 78 63 6c 75 64  - maximum exclud
3a40: 65 64 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 69  ed heap memory i
3a50: 73 20 22 20 24 63 6f 75 6e 74 28 35 29 20 22 20  s " $count(5) " 
3a60: 62 79 74 65 28 73 29 5c 6e 22 5d 0d 0a 0d 0a 20  byte(s)\n"].... 
3a70: 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61   tputs $test_cha
3a80: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
3a90: 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d 2d 20   \..      "---- 
3aa0: 77 6f 72 6b 6c 6f 61 64 73 20 74 6f 20 62 65 20  workloads to be 
3ab0: 73 6b 69 70 70 65 64 2e 2e 2e 20 22 20 5c 0d 0a  skipped... " \..
3ac0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 6c 6c        [expr {[ll
3ad0: 65 6e 67 74 68 20 24 6e 6f 57 6f 72 6b 6c 6f 61  ength $noWorkloa
3ae0: 64 5d 20 3e 20 30 20 3f 20 24 6e 6f 57 6f 72 6b  d] > 0 ? $noWork
3af0: 6c 6f 61 64 20 3a 20 22 6e 6f 6e 65 22 7d 5d 20  load : "none"}] 
3b00: 5c 6e 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24  \n]....  tputs $
3b10: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
3b20: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
3b30: 20 20 22 2d 2d 2d 2d 20 77 6f 72 6b 6c 6f 61 64    "---- workload
3b40: 73 20 70 72 69 6f 72 69 74 79 20 6f 76 65 72 72  s priority overr
3b50: 69 64 65 73 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ides... " \..   
3b60: 20 20 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67     [expr {[lleng
3b70: 74 68 20 24 70 72 69 6f 72 69 74 69 65 73 5d 20  th $priorities] 
3b80: 3e 20 30 20 3f 20 24 70 72 69 6f 72 69 74 69 65  > 0 ? $prioritie
3b90: 73 20 3a 20 22 6e 6f 6e 65 22 7d 5d 20 5c 6e 5d  s : "none"}] \n]
3ba0: 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73  ....  tputs $tes
3bb0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
3bc0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22  dArgs \..      "
3bd0: 2d 2d 2d 2d 20 75 6e 65 78 70 65 63 74 65 64 20  ---- unexpected 
3be0: 65 72 72 6f 72 73 20 22 20 5c 0d 0a 20 20 20 20  errors " \..    
3bf0: 20 20 5b 65 78 70 72 20 7b 24 65 78 69 74 4f 6e    [expr {$exitOn
3c00: 46 61 69 6c 20 3f 20 22 77 69 6c 6c 22 20 3a 20  Fail ? "will" : 
3c10: 22 77 69 6c 6c 20 6e 6f 74 22 7d 5d 20 5c 0d 0a  "will not"}] \..
3c20: 20 20 20 20 20 20 22 20 68 61 6c 74 20 74 65 73        " halt tes
3c30: 74 69 6e 67 20 61 6e 64 20 65 78 69 74 20 74 68  ting and exit th
3c40: 65 20 70 72 6f 63 65 73 73 5c 6e 22 5d 0d 0a 0d  e process\n"]...
3c50: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
3c60: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
3c70: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
3c80: 2d 20 74 68 65 20 22 20 5b 65 78 70 72 20 7b 24  - the " [expr {$
3c90: 63 6f 54 61 73 6b 4d 65 6d 20 3f 20 22 43 6f 54  coTaskMem ? "CoT
3ca0: 61 73 6b 4d 65 6d 22 20 3a 20 22 53 51 4c 69 74  askMem" : "SQLit
3cb0: 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 22 20  e"}] \..      " 
3cc0: 61 6c 6c 6f 63 61 74 6f 72 20 77 69 6c 6c 20 62  allocator will b
3cd0: 65 20 75 73 65 64 20 74 6f 20 65 78 63 6c 75 64  e used to exclud
3ce0: 65 20 68 65 61 70 20 6d 65 6d 6f 72 79 5c 6e 22  e heap memory\n"
3cf0: 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65  ]....  tputs $te
3d00: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
3d10: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
3d20: 22 2d 2d 2d 2d 20 74 72 61 63 65 20 6c 6f 67 67  "---- trace logg
3d30: 69 6e 67 20 74 6f 20 61 20 66 69 6c 65 20 69 73  ing to a file is
3d40: 20 22 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70   " \..      [exp
3d50: 72 20 7b 24 6e 6f 54 72 61 63 65 20 3f 20 22 64  r {$noTrace ? "d
3d60: 69 73 61 62 6c 65 64 22 20 3a 20 22 65 6e 61 62  isabled" : "enab
3d70: 6c 65 64 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20  led"}] \n]....  
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 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
3dd0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
3de0: 43 72 65 61 74 65 20 74 68 65 20 77 6f 72 6b 6c  Create the workl
3df0: 6f 61 64 20 70 72 69 6f 72 69 74 79 20 61 72 72  oad priority arr
3e00: 61 79 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ay based on the 
3e10: 70 72 69 6f 72 69 74 79 20 6c 69 73 74 20 73 65  priority list se
3e20: 65 6e 0d 0a 20 20 23 20 20 20 20 20 20 20 6f 6e  en..  #       on
3e30: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
3e40: 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 23 0d  e, if any...  #.
3e50: 0a 20 20 61 72 72 61 79 20 73 65 74 20 70 72 69  .  array set pri
3e60: 6f 72 69 74 79 20 24 70 72 69 6f 72 69 74 69 65  ority $prioritie
3e70: 73 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23  s....  #########
3e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ec0: 23 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  ####....  #..  #
3ed0: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 73   NOTE: Workloads
3ee0: 20 23 31 32 20 61 6e 64 20 23 31 33 20 63 6f 6e   #12 and #13 con
3ef0: 74 61 69 6e 20 43 23 20 63 6f 64 65 20 74 68 61  tain C# code tha
3f00: 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6f 6d 70  t should be comp
3f10: 69 6c 65 64 2c 20 62 75 74 0d 0a 20 20 23 20 20  iled, but..  #  
3f20: 20 20 20 20 20 6f 6e 6c 79 20 6f 6e 63 65 2e 20       only once. 
3f30: 20 54 68 65 73 65 20 76 61 72 69 61 62 6c 65 73   These variables
3f40: 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74   keep track of t
3f50: 68 61 74 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  hat state inform
3f60: 61 74 69 6f 6e 2e 0d 0a 20 20 23 20 20 20 20 20  ation...  #     
3f70: 20 20 41 6e 20 69 6e 74 65 67 65 72 20 76 61 6c    An integer val
3f80: 75 65 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  ue in one of the
3f90: 73 65 20 76 61 72 69 61 62 6c 65 73 20 6d 65 61  se variables mea
3fa0: 6e 73 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69  ns the compilati
3fb0: 6f 6e 20 77 61 73 0d 0a 20 20 23 20 20 20 20 20  on was..  #     
3fc0: 20 20 63 6f 6d 70 6c 65 74 65 64 20 61 6e 64 20    completed and 
3fd0: 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 63 6f  the resulting co
3fe0: 6d 70 69 6c 65 64 20 6d 65 74 68 6f 64 20 6d 61  mpiled method ma
3ff0: 79 20 62 65 20 69 6e 76 6f 6b 65 64 20 75 73 69  y be invoked usi
4000: 6e 67 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20  ng the..  #     
4010: 20 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d    following comm
4020: 61 6e 64 20 28 77 68 65 72 65 20 24 7b 69 64 7d  and (where ${id}
4030: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
4040: 20 74 68 65 20 76 61 72 69 61 62 6c 65 29 3a 0d   the variable):.
4050: 0a 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20  .  #..  #       
4060: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
4070: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
4080: 54 65 73 74 24 7b 69 64 7d 20 42 61 63 6b 75 70  Test${id} Backup
4090: 41 6e 64 47 65 74 44 61 74 61 0d 0a 20 20 23 0d  AndGetData..  #.
40a0: 0a 20 20 73 65 74 20 63 6f 6d 70 69 6c 65 64 28  .  set compiled(
40b0: 31 32 29 20 22 22 0d 0a 20 20 73 65 74 20 63 6f  12) ""..  set co
40c0: 6d 70 69 6c 65 64 28 31 33 29 20 22 22 0d 0a 0d  mpiled(13) ""...
40d0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
40e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4120: 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
4130: 45 3a 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e  E: This is an in
4140: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
4150: 20 77 69 74 68 20 73 68 61 72 65 64 20 63 61 63   with shared cac
4160: 68 65 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 23  he enabled...  #
4170: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
4180: 28 31 29 20 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79  (1) file::memory
4190: 3a 3f 63 61 63 68 65 3d 73 68 61 72 65 64 0d 0a  :?cache=shared..
41a0: 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23  ..  ############
41b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
41c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
41d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
41e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
41f0: 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  #....  #..  # NO
4200: 54 45 3a 20 54 68 69 73 20 69 73 20 61 20 6e 6f  TE: This is a no
4210: 72 6d 61 6c 20 6f 6e 2d 64 69 73 6b 20 64 61 74  rmal on-disk dat
4220: 61 62 61 73 65 2e 0d 0a 20 20 23 0d 0a 20 20 73  abase...  #..  s
4230: 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b  et fileName(2) [
4240: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
4250: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
4260: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
4270: 20 20 20 20 20 20 73 74 72 65 73 73 2d 20 5b 70        stress- [p
4280: 69 64 5d 20 2d 20 5b 73 74 72 69 6e 67 20 74 72  id] - [string tr
4290: 69 6d 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  im [clock second
42a0: 73 5d 20 2d 5d 20 2e 64 62 5d 5d 0d 0a 0d 0a 20  s] -] .db]].... 
42b0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
42c0: 23 23 23 23 23 23 23 23 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 0d 0a  ##############..
4300: 0d 0a 20 20 73 65 74 75 70 57 6f 72 6b 6c 6f 61  ..  setupWorkloa
4310: 64 4d 65 6d 44 62 20 24 66 69 6c 65 4e 61 6d 65  dMemDb $fileName
4320: 28 31 29 20 73 72 63 44 62 0d 0a 20 20 73 65 74  (1) srcDb..  set
4330: 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44 62  upWorkloadFileDb
4340: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 64 62   $fileName(2) db
4350: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
4360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43a0: 23 23 23 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20  ###....  #..  # 
43b0: 4e 4f 54 45 3a 20 54 68 69 73 20 73 65 72 76 65  NOTE: This serve
43c0: 73 20 74 77 6f 20 70 75 72 70 6f 73 65 73 2e 20  s two purposes. 
43d0: 20 46 69 72 73 74 2c 20 69 74 20 61 6c 6c 6f 77   First, it allow
43e0: 73 20 75 73 20 74 6f 20 76 65 72 69 66 79 20 74  s us to verify t
43f0: 68 65 20 74 72 61 63 65 0d 0a 20 20 23 20 20 20  he trace..  #   
4400: 20 20 20 20 6c 6f 67 67 69 6e 67 20 73 75 62 73      logging subs
4410: 79 73 74 65 6d 20 69 73 20 77 6f 72 6b 69 6e 67  ystem is working
4420: 20 70 72 6f 70 65 72 6c 79 2e 20 20 53 65 63 6f   properly.  Seco
4430: 6e 64 2c 20 69 74 20 70 6c 61 63 65 73 20 74 68  nd, it places th
4440: 65 20 66 69 6c 65 0d 0a 20 20 23 20 20 20 20 20  e file..  #     
4450: 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 61    name for the a
4460: 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62 61  ssociated databa
4470: 73 65 20 66 69 6c 65 20 69 6e 74 6f 20 74 68 65  se file into the
4480: 20 74 72 61 63 65 20 6c 6f 67 20 66 69 6c 65 2e   trace log file.
4490: 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20 63 6f 6e  ..  #..  set con
44a0: 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f  nection [getDbCo
44b0: 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 24  nnection]....  $
44c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 67 4d 65  connection LogMe
44d0: 73 73 61 67 65 20 30 20 5b 61 70 70 65 6e 64 41  ssage 0 [appendA
44e0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 73 74  rgs \..      "st
44f0: 61 72 74 69 6e 67 20 73 74 72 65 73 73 20 74 65  arting stress te
4500: 73 74 20 75 73 69 6e 67 20 64 61 74 61 62 61 73  st using databas
4510: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28  e \"" $fileName(
4520: 32 29 20 5c 22 2e 2e 2e 5d 0d 0a 0d 0a 20 20 23  2) \"...]....  #
4530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4570: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
4580: 20 20 73 65 74 20 74 69 6d 65 6f 75 74 20 5b 6f    set timeout [o
4590: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
45a0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
45b0: 0d 0a 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43  ..      Eagle._C
45c0: 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74  omponents.Privat
45d0: 65 2e 54 68 72 65 61 64 4f 70 73 20 44 65 66 61  e.ThreadOps Defa
45e0: 75 6c 74 4a 6f 69 6e 54 69 6d 65 6f 75 74 5d 0d  ultJoinTimeout].
45f0: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
4600: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
4610: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d  Args \..      "-
4620: 2d 2d 2d 20 77 6f 72 6b 6c 6f 61 64 73 20 77 69  --- workloads wi
4630: 6c 6c 20 73 74 61 72 74 20 62 65 66 6f 72 65 20  ll start before 
4640: 6f 72 20 74 69 6d 65 6f 75 74 20 61 66 74 65 72  or timeout after
4650: 20 22 20 24 74 69 6d 65 6f 75 74 20 5c 0d 0a 20   " $timeout \.. 
4660: 20 20 20 20 20 22 20 6d 69 6c 6c 69 73 65 63 6f       " milliseco
4670: 6e 64 28 73 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 23  nd(s)\n"]....  #
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 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
46d0: 20 20 73 65 74 20 65 76 65 6e 74 20 5b 6f 62 6a    set event [obj
46e0: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
46f0: 73 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  s \..      Syste
4700: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 45 76 65 6e  m.Threading.Even
4710: 74 57 61 69 74 48 61 6e 64 6c 65 20 66 61 6c 73  tWaitHandle fals
4720: 65 20 4d 61 6e 75 61 6c 52 65 73 65 74 5d 0d 0a  e ManualReset]..
4730: 0d 0a 20 20 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 23 23 23 23 23 23 23 23 23 23 23  ################
4770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4780: 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20  #..  #          
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47a0: 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23 31 20      WORKLOAD #1 
47b0: 28 41 29 20 20 20 20 20 20 20 20 20 20 20 20 20  (A)             
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 20 23 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23   #..  ##########
47e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
47f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4820: 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72  ###....  set wor
4830: 6b 6c 6f 61 64 28 31 29 20 5b 6c 69 73 74 20 5c  kload(1) [list \
4840: 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72  ..      [list sr
4850: 63 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c  cFileName dstFil
4860: 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e  eName table coun
4870: 74 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33  t1 count2 count3
4880: 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ] {..    #..    
4890: 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64  # NOTE: Workload
48a0: 20 23 31 2c 20 43 52 45 41 54 45 20 54 41 42 4c   #1, CREATE TABL
48b0: 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20  E statements... 
48c0: 20 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54 65     #..    waitTe
48d0: 73 74 20 41 0d 0a 20 20 20 20 6c 61 70 70 65 6e  st A..    lappen
48e0: 64 20 3a 3a 74 69 6d 65 73 28 31 29 20 5b 6c 69  d ::times(1) [li
48f0: 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20  ndex [time {..  
4900: 20 20 20 20 69 6e 69 74 54 65 73 74 20 41 0d 0a      initTest A..
4910: 20 20 20 20 20 20 73 65 74 75 70 57 6f 72 6b 6c        setupWorkl
4920: 6f 61 64 46 69 6c 65 44 62 20 24 64 73 74 46 69  oadFileDb $dstFi
4930: 6c 65 4e 61 6d 65 20 64 62 0d 0a 20 20 20 20 20  leName db..     
4940: 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index 
4950: 32 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63  2} {$index <= $c
4960: 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64  ount1} {incr ind
4970: 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  ex} {..        i
4980: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..   
4990: 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75         sql execu
49a0: 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72  te $db [appendAr
49b0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
49c0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
49d0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
49e0: 74 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  t" \..          
49f0: 20 20 20 20 24 69 6e 64 65 78 20 22 28 78 20 50      $index "(x P
4a00: 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a  RIMARY KEY, y, z
4a10: 29 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  );"]..          
4a20: 73 68 6f 77 54 65 73 74 20 41 0d 0a 20 20 20 20  showTest A..    
4a30: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
4a40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
4a50: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
4a60: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
4a70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
4a80: 20 20 73 68 6f 77 54 65 73 74 20 61 0d 0a 20 20    showTest a..  
4a90: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
4aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
4ab0: 69 6c 54 65 73 74 20 61 20 24 65 72 72 6f 72 0d  ilTest a $error.
4ac0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
4ad0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
4ae0: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
4af0: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
4b00: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
4b10: 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54 65  se..      doneTe
4b20: 73 74 20 41 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d  st A..    }] 0].
4b30: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 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 23 23 23 0d 0a 20 20 23 20 20 20  ########..  #   
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c             WORKL
4bb0: 4f 41 44 20 23 32 20 28 42 29 20 20 20 20 20 20  OAD #2 (B)      
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23          #..  ###
4be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c20: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
4c30: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 32 29 20  set workload(2) 
4c40: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b  [list \..      [
4c50: 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65  list srcFileName
4c60: 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62   dstFileName tab
4c70: 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32  le count1 count2
4c80: 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20   count3] {..    
4c90: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  #..    # NOTE: W
4ca0: 6f 72 6b 6c 6f 61 64 20 23 32 2c 20 44 52 4f 50  orkload #2, DROP
4cb0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
4cc0: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 77  s...    #..    w
4cd0: 61 69 74 54 65 73 74 20 42 0d 0a 20 20 20 20 6c  aitTest B..    l
4ce0: 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 32  append ::times(2
4cf0: 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20  ) [lindex [time 
4d00: 7b 0d 0a 20 20 20 20 20 20 69 6e 69 74 54 65 73  {..      initTes
4d10: 74 20 42 0d 0a 20 20 20 20 20 20 73 65 74 75 70  t B..      setup
4d20: 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44 62 20 24  WorkloadFileDb $
4d30: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 0d 0a  dstFileName db..
4d40: 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
4d50: 6e 64 65 78 20 32 7d 20 7b 24 69 6e 64 65 78 20  ndex 2} {$index 
4d60: 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63  <= $count1} {inc
4d70: 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20  r index} {..    
4d80: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
4d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 20  ..          sql 
4da0: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app
4db0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
4dc0: 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 20 54           "DROP T
4dd0: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74  ABLE IF EXISTS t
4de0: 22 20 24 69 6e 64 65 78 20 5c 3b 5d 0d 0a 20 20  " $index \;]..  
4df0: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
4e00: 20 42 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72   B..        } er
4e10: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
4e20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45          if {[isE
4e30: 78 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72  xpectedError $er
4e40: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
4e50: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65            showTe
4e60: 73 74 20 62 0d 0a 20 20 20 20 20 20 20 20 20 20  st b..          
4e70: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
4e80: 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 62        failTest b
4e90: 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   $error..       
4ea0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4eb0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
4ec0: 63 6c 65 61 6e 75 70 44 62 20 24 64 73 74 46 69  cleanupDb $dstFi
4ed0: 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20  leName db false 
4ee0: 74 72 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  true false..    
4ef0: 20 20 64 6f 6e 65 54 65 73 74 20 42 0d 0a 20 20    doneTest B..  
4f00: 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d    }] 0]..  }]...
4f10: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
4f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f60: 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20  ..  #           
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f80: 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23 33 20 28     WORKLOAD #3 (
4f90: 43 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C)              
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 23 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  #..  ###########
4fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5000: 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b  ##....  set work
5010: 6c 6f 61 64 28 33 29 20 5b 6c 69 73 74 20 5c 0d  load(3) [list \.
5020: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63  .      [list src
5030: 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65  FileName dstFile
5040: 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74  Name table count
5050: 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d  1 count2 count3]
5060: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
5070: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
5080: 23 33 2c 20 22 73 6d 61 6c 6c 22 20 53 45 4c 45  #3, "small" SELE
5090: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a  CT statements...
50a0: 20 20 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54      #..    waitT
50b0: 65 73 74 20 43 0d 0a 20 20 20 20 6c 61 70 70 65  est C..    lappe
50c0: 6e 64 20 3a 3a 74 69 6d 65 73 28 33 29 20 5b 6c  nd ::times(3) [l
50d0: 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20  index [time {.. 
50e0: 20 20 20 20 20 69 6e 69 74 54 65 73 74 20 43 0d       initTest C.
50f0: 0a 20 20 20 20 20 20 73 65 74 75 70 57 6f 72 6b  .      setupWork
5100: 6c 6f 61 64 46 69 6c 65 44 62 20 24 64 73 74 46  loadFileDb $dstF
5110: 69 6c 65 4e 61 6d 65 20 64 62 0d 0a 20 20 20 20  ileName db..    
5120: 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
5130: 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24   1} {$index <= $
5140: 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e  count1} {incr in
5150: 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..        
5160: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..  
5170: 20 20 20 20 20 20 20 20 73 65 74 20 72 65 61 64          set read
5180: 65 72 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  er [sql execute 
5190: 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
51a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
51b0: 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 52 65 61   -format dataRea
51c0: 64 65 72 20 2d 61 6c 69 61 73 20 24 64 62 20 5b  der -alias $db [
51d0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
51e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45 4c              "SEL
51f0: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 22 20  ECT x, y FROM " 
5200: 24 74 61 62 6c 65 20 22 20 57 48 45 52 45 20 7a  $table " WHERE z
5210: 20 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d 5d 0d 0a   = 'small';"]]..
5220: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
5230: 7b 5b 24 72 65 61 64 65 72 20 52 65 61 64 5d 7d  {[$reader Read]}
5240: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5250: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
5260: 20 4e 4f 54 45 3a 20 44 6f 20 6e 6f 74 68 69 6e   NOTE: Do nothin
5270: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
5280: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  #..          }..
5290: 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset 
52a0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 61 64  -nocomplain read
52b0: 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68  er..          sh
52c0: 6f 77 54 65 73 74 20 43 0d 0a 20 20 20 20 20 20  owTest C..      
52d0: 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
52e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
52f0: 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72   {[isExpectedErr
5300: 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  or $error]} then
5310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5320: 73 68 6f 77 54 65 73 74 20 63 0d 0a 20 20 20 20  showTest c..    
5330: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
5340: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c              fail
5350: 54 65 73 74 20 63 20 24 65 72 72 6f 72 0d 0a 20  Test c $error.. 
5360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5370: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
5380: 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20        cleanupDb 
5390: 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20  $dstFileName db 
53a0: 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65  false true false
53b0: 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54 65 73 74  ..      doneTest
53c0: 20 43 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20   C..    }] 0].. 
53d0: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5420: 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20  ######..  #     
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5440: 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41           WORKLOA
5450: 44 20 23 34 20 28 44 29 20 20 20 20 20 20 20 20  D #4 (D)        
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5470: 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23        #..  #####
5480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54c0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65  ########....  se
54d0: 74 20 77 6f 72 6b 6c 6f 61 64 28 34 29 20 5b 6c  t workload(4) [l
54e0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  ist \..      [li
54f0: 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20 64  st srcFileName d
5500: 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65  stFileName table
5510: 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20 63   count1 count2 c
5520: 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d  ount3] {..    #.
5530: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72  .    # NOTE: Wor
5540: 6b 6c 6f 61 64 20 23 34 2c 20 22 62 69 67 22 20  kload #4, "big" 
5550: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
5560: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 77  s...    #..    w
5570: 61 69 74 54 65 73 74 20 44 0d 0a 20 20 20 20 6c  aitTest D..    l
5580: 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 34  append ::times(4
5590: 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20  ) [lindex [time 
55a0: 7b 0d 0a 20 20 20 20 20 20 69 6e 69 74 54 65 73  {..      initTes
55b0: 74 20 44 0d 0a 20 20 20 20 20 20 73 65 74 75 70  t D..      setup
55c0: 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44 62 20 24  WorkloadFileDb $
55d0: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 0d 0a  dstFileName db..
55e0: 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
55f0: 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20  ndex 1} {$index 
5600: 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63  <= $count1} {inc
5610: 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20  r index} {..    
5620: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
5630: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
5640: 72 65 61 64 65 72 20 5b 73 71 6c 20 65 78 65 63  reader [sql exec
5650: 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
5660: 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  der \..         
5670: 20 20 20 20 20 2d 66 6f 72 6d 61 74 20 64 61 74       -format dat
5680: 61 52 65 61 64 65 72 20 2d 61 6c 69 61 73 20 24  aReader -alias $
5690: 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  db [appendArgs \
56a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
56b0: 22 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  "SELECT x, y FRO
56c0: 4d 20 22 20 24 74 61 62 6c 65 20 22 20 57 48 45  M " $table " WHE
56d0: 52 45 20 7a 20 3d 20 27 62 69 67 27 3b 22 5d 5d  RE z = 'big';"]]
56e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  ..          whil
56f0: 65 20 7b 5b 24 72 65 61 64 65 72 20 52 65 61 64  e {[$reader Read
5700: 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]} {..          
5710: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
5720: 20 23 20 4e 4f 54 45 3a 20 44 6f 20 6e 6f 74 68   # NOTE: Do noth
5730: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
5740: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    #..          }
5750: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
5760: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
5770: 61 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ader..          
5780: 73 68 6f 77 54 65 73 74 20 44 0d 0a 20 20 20 20  showTest D..    
5790: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
57a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
57b0: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
57c0: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
57d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
57e0: 20 20 73 68 6f 77 54 65 73 74 20 64 0d 0a 20 20    showTest d..  
57f0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
5810: 69 6c 54 65 73 74 20 64 20 24 65 72 72 6f 72 0d  ilTest d $error.
5820: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5830: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
5840: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
5850: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
5860: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
5870: 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54 65  se..      doneTe
5880: 73 74 20 44 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d  st D..    }] 0].
5890: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23  .  }]....  #####
58a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58e0: 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20  ########..  #   
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5900: 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c             WORKL
5910: 4f 41 44 20 23 35 20 28 45 29 20 20 20 20 20 20  OAD #5 (E)      
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5930: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23          #..  ###
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5980: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
5990: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 35 29 20  set workload(5) 
59a0: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b  [list \..      [
59b0: 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65  list srcFileName
59c0: 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62   dstFileName tab
59d0: 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32  le count1 count2
59e0: 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20   count3] {..    
59f0: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  #..    # NOTE: W
5a00: 6f 72 6b 6c 6f 61 64 20 23 35 2c 20 22 73 6d 61  orkload #5, "sma
5a10: 6c 6c 22 20 49 4e 53 45 52 54 20 73 74 61 74 65  ll" INSERT state
5a20: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20  ments...    #.. 
5a30: 20 20 20 77 61 69 74 54 65 73 74 20 45 0d 0a 20     waitTest E.. 
5a40: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d     lappend ::tim
5a50: 65 73 28 35 29 20 5b 6c 69 6e 64 65 78 20 5b 74  es(5) [lindex [t
5a60: 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69  ime {..      ini
5a70: 74 54 65 73 74 20 45 0d 0a 20 20 20 20 20 20 73  tTest E..      s
5a80: 65 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65  etupWorkloadFile
5a90: 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20  Db $dstFileName 
5aa0: 64 62 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73  db..      for {s
5ab0: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
5ac0: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
5ad0: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
5ae0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
5af0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
5b00: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5b10: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 49 4e 53  [appendArgs "INS
5b20: 45 52 54 20 49 4e 54 4f 20 22 20 24 74 61 62 6c  ERT INTO " $tabl
5b30: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..           
5b40: 20 20 20 22 28 78 2c 20 79 2c 20 7a 29 20 56 41     "(x, y, z) VA
5b50: 4c 55 45 53 28 27 22 20 5b 66 6f 72 6d 61 74 20  LUES('" [format 
5b60: 25 6c 58 20 5b 65 78 70 72 20 7b 72 61 6e 64 6f  %lX [expr {rando
5b70: 6d 28 29 7d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  m()}]] \..      
5b80: 20 20 20 20 20 20 20 20 22 27 2c 20 27 22 20 5b          "', '" [
5b90: 62 61 73 65 36 34 20 65 6e 63 6f 64 65 20 2d 2d  base64 encode --
5ba0: 20 5b 65 78 70 72 20 7b 72 61 6e 64 73 74 72 28   [expr {randstr(
5bb0: 24 63 6f 75 6e 74 32 29 7d 5d 5d 20 5c 0d 0a 20  $count2)}]] \.. 
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 27 2c               "',
5bd0: 20 27 73 6d 61 6c 6c 27 29 3b 22 5d 0d 0a 20 20   'small');"]..  
5be0: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
5bf0: 20 45 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72   E..        } er
5c00: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
5c10: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45          if {[isE
5c20: 78 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72  xpectedError $er
5c30: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
5c40: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65            showTe
5c50: 73 74 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20  st e..          
5c60: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
5c70: 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 65        failTest e
5c80: 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   $error..       
5c90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5ca0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
5cb0: 63 6c 65 61 6e 75 70 44 62 20 24 64 73 74 46 69  cleanupDb $dstFi
5cc0: 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20  leName db false 
5cd0: 74 72 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  true false..    
5ce0: 20 20 64 6f 6e 65 54 65 73 74 20 45 0d 0a 20 20    doneTest E..  
5cf0: 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d    }] 0]..  }]...
5d00: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
5d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20  ..  #           
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d70: 20 20 20 57 4f 52 4b 4c 4f 41 44 20 23 36 20 28     WORKLOAD #6 (
5d80: 46 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20  F)              
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5da0: 23 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  #..  ###########
5db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5df0: 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b  ##....  set work
5e00: 6c 6f 61 64 28 36 29 20 5b 6c 69 73 74 20 5c 0d  load(6) [list \.
5e10: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63  .      [list src
5e20: 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65  FileName dstFile
5e30: 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74  Name table count
5e40: 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d  1 count2 count3]
5e50: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
5e60: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
5e70: 23 36 2c 20 22 62 69 67 22 20 49 4e 53 45 52 54  #6, "big" INSERT
5e80: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20   statements...  
5e90: 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54 65 73    #..    waitTes
5ea0: 74 20 46 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  t F..    lappend
5eb0: 20 3a 3a 74 69 6d 65 73 28 36 29 20 5b 6c 69 6e   ::times(6) [lin
5ec0: 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20  dex [time {..   
5ed0: 20 20 20 69 6e 69 74 54 65 73 74 20 46 0d 0a 20     initTest F.. 
5ee0: 20 20 20 20 20 73 65 74 75 70 57 6f 72 6b 6c 6f       setupWorklo
5ef0: 61 64 46 69 6c 65 44 62 20 24 64 73 74 46 69 6c  adFileDb $dstFil
5f00: 65 4e 61 6d 65 20 64 62 0d 0a 20 20 20 20 20 20  eName db..      
5f10: 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
5f20: 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f  } {$index <= $co
5f30: 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65  unt1} {incr inde
5f40: 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  x} {..        if
5f50: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..    
5f60: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
5f70: 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  e $db [appendArg
5f80: 73 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 22  s "INSERT INTO "
5f90: 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20   $table \..     
5fa0: 20 20 20 20 20 20 20 20 20 22 28 78 2c 20 79 2c           "(x, y,
5fb0: 20 7a 29 20 56 41 4c 55 45 53 28 27 22 20 5b 66   z) VALUES('" [f
5fc0: 6f 72 6d 61 74 20 25 6c 58 20 5b 65 78 70 72 20  ormat %lX [expr 
5fd0: 7b 72 61 6e 64 6f 6d 28 29 7d 5d 5d 20 5c 0d 0a  {random()}]] \..
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 27                "'
5ff0: 2c 20 52 41 4e 44 4f 4d 42 4c 4f 42 28 22 20 24  , RANDOMBLOB(" $
6000: 63 6f 75 6e 74 33 20 22 29 2c 20 27 62 69 67 27  count3 "), 'big'
6010: 29 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  );"]..          
6020: 73 68 6f 77 54 65 73 74 20 46 0d 0a 20 20 20 20  showTest F..    
6030: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
6040: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
6050: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
6060: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
6070: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
6080: 20 20 73 68 6f 77 54 65 73 74 20 66 0d 0a 20 20    showTest f..  
6090: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
60a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
60b0: 69 6c 54 65 73 74 20 66 20 24 65 72 72 6f 72 0d  ilTest f $error.
60c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
60d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
60e0: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
60f0: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
6100: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
6110: 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54 65  se..      doneTe
6120: 73 74 20 46 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d  st F..    }] 0].
6130: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23  .  }]....  #####
6140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6180: 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20 20 20  ########..  #   
6190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61a0: 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c             WORKL
61b0: 4f 41 44 20 23 37 20 28 47 29 20 20 20 20 20 20  OAD #7 (G)      
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23          #..  ###
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
6230: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 37 29 20  set workload(7) 
6240: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b  [list \..      [
6250: 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65  list srcFileName
6260: 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62   dstFileName tab
6270: 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32  le count1 count2
6280: 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20   count3] {..    
6290: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  #..    # NOTE: W
62a0: 6f 72 6b 6c 6f 61 64 20 23 37 2c 20 22 73 6d 61  orkload #7, "sma
62b0: 6c 6c 22 20 55 50 44 41 54 45 20 73 74 61 74 65  ll" UPDATE state
62c0: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20  ments...    #.. 
62d0: 20 20 20 77 61 69 74 54 65 73 74 20 47 0d 0a 20     waitTest G.. 
62e0: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d     lappend ::tim
62f0: 65 73 28 37 29 20 5b 6c 69 6e 64 65 78 20 5b 74  es(7) [lindex [t
6300: 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69  ime {..      ini
6310: 74 54 65 73 74 20 47 0d 0a 20 20 20 20 20 20 73  tTest G..      s
6320: 65 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65  etupWorkloadFile
6330: 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20  Db $dstFileName 
6340: 64 62 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73  db..      for {s
6350: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
6360: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
6370: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
6380: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
6390: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
63a0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
63b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 55 50 44  [appendArgs "UPD
63c0: 41 54 45 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a  ATE " $table \..
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
63e0: 53 45 54 20 79 20 3d 20 27 22 20 5b 62 61 73 65  SET y = '" [base
63f0: 36 34 20 65 6e 63 6f 64 65 20 2d 2d 20 5b 65 78  64 encode -- [ex
6400: 70 72 20 7b 72 61 6e 64 73 74 72 28 24 63 6f 75  pr {randstr($cou
6410: 6e 74 32 29 7d 5d 5d 20 5c 0d 0a 20 20 20 20 20  nt2)}]] \..     
6420: 20 20 20 20 20 20 20 20 20 22 27 20 57 48 45 52           "' WHER
6430: 45 20 78 20 4c 49 4b 45 20 27 22 20 5b 66 6f 72  E x LIKE '" [for
6440: 6d 61 74 20 25 58 20 24 69 6e 64 65 78 5d 20 22  mat %X $index] "
6450: 25 27 20 41 4e 44 20 7a 20 3d 20 27 73 6d 61 6c  %' AND z = 'smal
6460: 6c 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  l';"]..         
6470: 20 73 68 6f 77 54 65 73 74 20 47 0d 0a 20 20 20   showTest G..   
6480: 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
6490: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
64a0: 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64   if {[isExpected
64b0: 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74  Error $error]} t
64c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
64d0: 20 20 20 73 68 6f 77 54 65 73 74 20 67 0d 0a 20     showTest g.. 
64e0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
64f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
6500: 61 69 6c 54 65 73 74 20 67 20 24 65 72 72 6f 72  ailTest g $error
6510: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
6520: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6530: 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70  }..      cleanup
6540: 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20  Db $dstFileName 
6550: 64 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61  db false true fa
6560: 6c 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54  lse..      doneT
6570: 65 73 74 20 47 0d 0a 20 20 20 20 7d 5d 20 30 5d  est G..    }] 0]
6580: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23  ..  }]....  ####
6590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65d0: 23 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20 20  #########..  #  
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b              WORK
6600: 4c 4f 41 44 20 23 38 20 28 48 29 20 20 20 20 20  LOAD #8 (H)     
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6620: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23           #..  ##
6630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6670: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########.... 
6680: 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 38 29   set workload(8)
6690: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..      
66a0: 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d  [list srcFileNam
66b0: 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61  e dstFileName ta
66c0: 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74  ble count1 count
66d0: 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20  2 count3] {..   
66e0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
66f0: 57 6f 72 6b 6c 6f 61 64 20 23 38 2c 20 22 62 69  Workload #8, "bi
6700: 67 22 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  g" UPDATE statem
6710: 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20  ents...    #..  
6720: 20 20 77 61 69 74 54 65 73 74 20 48 0d 0a 20 20    waitTest H..  
6730: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65    lappend ::time
6740: 73 28 38 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69  s(8) [lindex [ti
6750: 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69 74  me {..      init
6760: 54 65 73 74 20 48 0d 0a 20 20 20 20 20 20 73 65  Test H..      se
6770: 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44  tupWorkloadFileD
6780: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
6790: 62 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65  b..      for {se
67a0: 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64  t index 1} {$ind
67b0: 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b  ex <= $count1} {
67c0: 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {.. 
67d0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
67e0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  h {..          s
67f0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
6800: 61 70 70 65 6e 64 41 72 67 73 20 22 55 50 44 41  appendArgs "UPDA
6810: 54 45 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20  TE " $table \.. 
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 53               " S
6830: 45 54 20 79 20 3d 20 52 41 4e 44 4f 4d 42 4c 4f  ET y = RANDOMBLO
6840: 42 28 22 20 24 63 6f 75 6e 74 33 20 22 29 20 57  B(" $count3 ") W
6850: 48 45 52 45 20 78 20 4c 49 4b 45 20 27 22 20 5c  HERE x LIKE '" \
6860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6870: 5b 66 6f 72 6d 61 74 20 25 58 20 24 69 6e 64 65  [format %X $inde
6880: 78 5d 20 22 25 27 20 41 4e 44 20 7a 20 3d 20 27  x] "%' AND z = '
6890: 62 69 67 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20  big';"]..       
68a0: 20 20 20 73 68 6f 77 54 65 73 74 20 48 0d 0a 20     showTest H.. 
68b0: 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d         } error]}
68c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
68d0: 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74     if {[isExpect
68e0: 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d  edError $error]}
68f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
6900: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 68 0d       showTest h.
6910: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
6920: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
6930: 20 66 61 69 6c 54 65 73 74 20 68 20 24 65 72 72   failTest h $err
6940: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  or..          }.
6950: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6960: 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e    }..      clean
6970: 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d  upDb $dstFileNam
6980: 65 20 64 62 20 66 61 6c 73 65 20 74 72 75 65 20  e db false true 
6990: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e  false..      don
69a0: 65 54 65 73 74 20 48 0d 0a 20 20 20 20 7d 5d 20  eTest H..    }] 
69b0: 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23  0]..  }]....  ##
69c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a00: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 23  ###########..  #
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 4f                WO
6a30: 52 4b 4c 4f 41 44 20 23 39 20 28 49 29 20 20 20  RKLOAD #9 (I)   
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
6a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
6ab0: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
6ac0: 39 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  9) [list \..    
6ad0: 20 20 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e    [list srcFileN
6ae0: 61 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20  ame dstFileName 
6af0: 74 61 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75  table count1 cou
6b00: 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20  nt2 count3] {.. 
6b10: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
6b20: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 39 2c 20 22  : Workload #9, "
6b30: 73 6d 61 6c 6c 22 20 44 45 4c 45 54 45 20 73 74  small" DELETE st
6b40: 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23  atements...    #
6b50: 0d 0a 20 20 20 20 77 61 69 74 54 65 73 74 20 49  ..    waitTest I
6b60: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a  ..    lappend ::
6b70: 74 69 6d 65 73 28 39 29 20 5b 6c 69 6e 64 65 78  times(9) [lindex
6b80: 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20   [time {..      
6b90: 69 6e 69 74 54 65 73 74 20 49 0d 0a 20 20 20 20  initTest I..    
6ba0: 20 20 73 65 74 75 70 57 6f 72 6b 6c 6f 61 64 46    setupWorkloadF
6bb0: 69 6c 65 44 62 20 24 64 73 74 46 69 6c 65 4e 61  ileDb $dstFileNa
6bc0: 6d 65 20 64 62 0d 0a 20 20 20 20 20 20 66 6f 72  me db..      for
6bd0: 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b   {set index 1} {
6be0: 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74  $index <= $count
6bf0: 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20  1} {incr index} 
6c00: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
6c10: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
6c20: 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24     sql execute $
6c30: 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  db [appendArgs "
6c40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 22 20 24 74  DELETE FROM " $t
6c50: 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..        
6c60: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 78 20        " WHERE x 
6c70: 4c 49 4b 45 20 27 22 20 5b 66 6f 72 6d 61 74 20  LIKE '" [format 
6c80: 25 58 20 24 69 6e 64 65 78 5d 20 22 25 27 20 41  %X $index] "%' A
6c90: 4e 44 20 7a 20 3d 20 27 73 6d 61 6c 6c 27 3b 22  ND z = 'small';"
6ca0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68 6f  ]..          sho
6cb0: 77 54 65 73 74 20 49 0d 0a 20 20 20 20 20 20 20  wTest I..       
6cc0: 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then 
6cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
6ce0: 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  {[isExpectedErro
6cf0: 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  r $error]} then 
6d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
6d10: 68 6f 77 54 65 73 74 20 69 0d 0a 20 20 20 20 20  howTest i..     
6d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
6d30: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 54             failT
6d40: 65 73 74 20 69 20 24 65 72 72 6f 72 0d 0a 20 20  est i $error..  
6d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
6d70: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24       cleanupDb $
6d80: 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62 20 66  dstFileName db f
6d90: 61 6c 73 65 20 74 72 75 65 20 66 61 6c 73 65 0d  alse true false.
6da0: 0a 20 20 20 20 20 20 64 6f 6e 65 54 65 73 74 20  .      doneTest 
6db0: 49 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20  I..    }] 0]..  
6dc0: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
6dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e10: 23 23 23 23 23 0d 0a 20 20 23 20 20 20 20 20 20  #####..  #      
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e30: 20 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44          WORKLOAD
6e40: 20 23 31 30 20 28 4a 29 20 20 20 20 20 20 20 20   #10 (J)        
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 20 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23       #..  ######
6e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6eb0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
6ec0: 20 77 6f 72 6b 6c 6f 61 64 28 31 30 29 20 5b 6c   workload(10) [l
6ed0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  ist \..      [li
6ee0: 73 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20 64  st srcFileName d
6ef0: 73 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65  stFileName table
6f00: 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20 63   count1 count2 c
6f10: 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d  ount3] {..    #.
6f20: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72  .    # NOTE: Wor
6f30: 6b 6c 6f 61 64 20 23 31 30 2c 20 22 62 69 67 22  kload #10, "big"
6f40: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
6f50: 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ts...    #..    
6f60: 77 61 69 74 54 65 73 74 20 4a 0d 0a 20 20 20 20  waitTest J..    
6f70: 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28  lappend ::times(
6f80: 31 30 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d  10) [lindex [tim
6f90: 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69 74 54  e {..      initT
6fa0: 65 73 74 20 4a 0d 0a 20 20 20 20 20 20 73 65 74  est J..      set
6fb0: 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44 62  upWorkloadFileDb
6fc0: 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64 62   $dstFileName db
6fd0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
6fe0: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
6ff0: 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69  x <= $count1} {i
7000: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
7010: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
7020: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71   {..          sq
7030: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a
7040: 70 70 65 6e 64 41 72 67 73 20 22 44 45 4c 45 54  ppendArgs "DELET
7050: 45 20 46 52 4f 4d 20 22 20 24 74 61 62 6c 65 20  E FROM " $table 
7060: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
7070: 20 22 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20   " WHERE x LIKE 
7080: 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20 24 69  '" [format %X $i
7090: 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a 20  ndex] "%' AND z 
70a0: 3d 20 27 62 69 67 27 3b 22 5d 0d 0a 20 20 20 20  = 'big';"]..    
70b0: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 4a        showTest J
70c0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f  ..        } erro
70d0: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
70e0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70        if {[isExp
70f0: 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f  ectedError $erro
7100: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
7110: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
7120: 20 6a 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   j..          } 
7130: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
7140: 20 20 20 20 66 61 69 6c 54 65 73 74 20 6a 20 24      failTest j $
7150: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
7160: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
7170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c       }..      cl
7180: 65 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65  eanupDb $dstFile
7190: 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72  Name db false tr
71a0: 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ue false..      
71b0: 64 6f 6e 65 54 65 73 74 20 4a 0d 0a 20 20 20 20  doneTest J..    
71c0: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
71d0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
71e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
71f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
7220: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7240: 20 57 4f 52 4b 4c 4f 41 44 20 23 31 31 20 28 4b   WORKLOAD #11 (K
7250: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
7270: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
7280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72c0: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
72d0: 61 64 28 31 31 29 20 5b 6c 69 73 74 20 5c 0d 0a  ad(11) [list \..
72e0: 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46        [list srcF
72f0: 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e  ileName dstFileN
7300: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31  ame table count1
7310: 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20   count2 count3] 
7320: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
7330: 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23  NOTE: Workload #
7340: 31 31 2c 20 56 41 43 55 55 4d 20 73 74 61 74 65  11, VACUUM state
7350: 6d 65 6e 74 2e 0d 0a 20 20 20 20 23 0d 0a 20 20  ment...    #..  
7360: 20 20 77 61 69 74 54 65 73 74 20 4b 0d 0a 20 20    waitTest K..  
7370: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65    lappend ::time
7380: 73 28 31 31 29 20 5b 6c 69 6e 64 65 78 20 5b 74  s(11) [lindex [t
7390: 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69  ime {..      ini
73a0: 74 54 65 73 74 20 4b 0d 0a 20 20 20 20 20 20 73  tTest K..      s
73b0: 65 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65  etupWorkloadFile
73c0: 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20  Db $dstFileName 
73d0: 64 62 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73  db..      for {s
73e0: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
73f0: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
7400: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
7410: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
7420: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
7430: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
7440: 22 56 41 43 55 55 4d 3b 22 0d 0a 20 20 20 20 20  "VACUUM;"..     
7450: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 4b 0d       showTest K.
7460: 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72  .        } error
7470: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
7480: 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65       if {[isExpe
7490: 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72  ctedError $error
74a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
74b0: 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20         showTest 
74c0: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  k..          } e
74d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
74e0: 20 20 20 66 61 69 6c 54 65 73 74 20 6b 20 24 65     failTest k $e
74f0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
7500: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
7510: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65      }..      cle
7520: 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e  anupDb $dstFileN
7530: 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72 75  ame db false tru
7540: 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 64  e false..      d
7550: 6f 6e 65 54 65 73 74 20 4b 0d 0a 20 20 20 20 7d  oneTest K..    }
7560: 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  ] 0]..  }]....  
7570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
75a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
75b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############.. 
75c0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75e0: 57 4f 52 4b 4c 4f 41 44 20 23 31 32 20 28 4c 29  WORKLOAD #12 (L)
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
7610: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
7620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
7660: 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61  ...  set workloa
7670: 64 28 31 32 29 20 5b 6c 69 73 74 20 5c 0d 0a 20  d(12) [list \.. 
7680: 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46 69       [list srcFi
7690: 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e 61  leName dstFileNa
76a0: 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31 20  me table count1 
76b0: 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b  count2 count3] {
76c0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
76d0: 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31  OTE: Workload #1
76e0: 32 2c 20 62 61 63 6b 75 70 20 74 6f 20 69 6e 2d  2, backup to in-
76f0: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e  memory database.
7700: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 77 61 69  ..    #..    wai
7710: 74 54 65 73 74 20 4c 0d 0a 20 20 20 20 6c 61 70  tTest L..    lap
7720: 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 31 32 29  pend ::times(12)
7730: 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b   [lindex [time {
7740: 0d 0a 20 20 20 20 20 20 69 6e 69 74 54 65 73 74  ..      initTest
7750: 20 4c 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73   L..      for {s
7760: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
7770: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
7780: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
7790: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
77a0: 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
77b0: 73 74 72 69 63 74 20 24 3a 3a 63 6f 6d 70 69 6c  strict $::compil
77c0: 65 64 28 31 32 29 5d 7d 20 74 68 65 6e 20 7b 0d  ed(12)]} then {.
77d0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69  .          set i
77e0: 64 20 24 3a 3a 63 6f 6d 70 69 6c 65 64 28 31 32  d $::compiled(12
77f0: 29 3b 20 23 20 4e 4f 54 45 3a 20 41 6c 72 65 61  ); # NOTE: Alrea
7800: 64 79 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20  dy compiled...  
7810: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
7820: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
7830: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
7840: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
7850: 73 74 24 7b 69 64 7d 20 42 61 63 6b 75 70 41 6e  st${id} BackupAn
7860: 64 47 65 74 44 61 74 61 0d 0a 20 20 20 20 20 20  dGetData..      
7870: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 4c        showTest L
7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 72  ..          } er
7890: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
78a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69            if {[i
78b0: 73 45 78 70 65 63 74 65 64 45 72 72 6f 72 20 24  sExpectedError $
78c0: 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
78e0: 6f 77 54 65 73 74 20 6c 0d 0a 20 20 20 20 20 20  owTest l..      
78f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
7910: 69 6c 54 65 73 74 20 6c 20 24 65 72 72 6f 72 0d  ilTest l $error.
7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7940: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
7950: 20 20 20 20 20 20 20 20 20 73 65 74 20 69 64 20           set id 
7960: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
7970: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
7980: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
7990: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
79a0: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57   [compileCSharpW
79b0: 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  ith [subst {..  
79c0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
79d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
79e0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
79f0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
7a00: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
7a10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7a20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
7a30: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
7a40: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 20 20  t${id}..        
7a50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7a60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
7a70: 73 74 61 74 69 63 20 76 6f 69 64 20 42 61 63 6b  static void Back
7a80: 75 70 41 6e 64 47 65 74 44 61 74 61 28 29 0d 0a  upAndGetData()..
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ab0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
7ac0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 6f 75  teConnection sou
7ad0: 72 63 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  rce = new SQLite
7ae0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 20 20 22 46 75 6c 6c 55 72 69 3d 24 7b 64 73     "FullUri=${ds
7b10: 74 46 69 6c 65 4e 61 6d 65 7d 3b 5b 67 65 74 46  tFileName};[getF
7b20: 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 7d 20  lagsProperty {} 
7b30: 74 72 75 65 5d 22 29 29 0d 0a 20 20 20 20 20 20  true]"))..      
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 20 20 73 6f 75 72 63 65 2e 4f 70 65 6e 28 29     source.Open()
7b70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7b80: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
7b90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ba0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 3d 20 6e   destination = n
7bb0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
7bc0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
7be0: 75 6c 6c 55 72 69 3d 24 7b 73 72 63 46 69 6c 65  ullUri=${srcFile
7bf0: 4e 61 6d 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  Name};[getFlagsP
7c00: 72 6f 70 65 72 74 79 20 7b 7d 20 74 72 75 65 5d  roperty {} true]
7c10: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
7c20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 4f 70    destination.Op
7c50: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7c70: 6f 75 72 63 65 2e 42 61 63 6b 75 70 44 61 74 61  ource.BackupData
7c80: 62 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  base(..         
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20 22 6d   destination, "m
7cb0: 61 69 6e 22 2c 20 22 6d 61 69 6e 22 2c 20 2d 31  ain", "main", -1
7cc0: 2c 20 6e 75 6c 6c 2c 20 30 29 3b 0d 0a 20 20 20  , null, 0);..   
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7cf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7d00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d70: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
7d80: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7dd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7de0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7df0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 5d   }..          }]
7e00: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
7e10: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
7e20: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
7e30: 65 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 20 20  e.dll]..        
7e40: 20 20 69 66 20 7b 24 63 6f 64 65 20 65 71 20 22    if {$code eq "
7e50: 4f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  Ok"} then {..   
7e60: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 63           set ::c
7e70: 6f 6d 70 69 6c 65 64 28 31 32 29 20 24 69 64 3b  ompiled(12) $id;
7e80: 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 70 69 6c 65   # NOTE: Compile
7e90: 64 20 4f 4b 2e 0d 0a 20 20 20 20 20 20 20 20 20  d OK...         
7ea0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
7eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .              o
7ec0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
7ed0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
7ee0: 7b 69 64 7d 20 42 61 63 6b 75 70 41 6e 64 47 65  {id} BackupAndGe
7ef0: 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
7f00: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 4c 0d       showTest L.
7f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
7f20: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {.. 
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7f40: 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72 6f  {[isExpectedErro
7f50: 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  r $error]} then 
7f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7f70: 20 20 20 73 68 6f 77 54 65 73 74 20 6c 0d 0a 20     showTest l.. 
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
7f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
7fa0: 20 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20         failTest 
7fb0: 6c 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  l $error..      
7fc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7fe0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
7ff0: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
8000: 24 65 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 20  $errors..       
8010: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
8020: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
8030: 64 6f 6e 65 54 65 73 74 20 4c 0d 0a 20 20 20 20  doneTest L..    
8040: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
8050: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
8060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 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 0d 0a  ##############..
80a0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 57 4f 52 4b 4c 4f 41 44 20 23 31 33 20 28 4d   WORKLOAD #13 (M
80d0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
80f0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
8100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8140: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
8150: 61 64 28 31 33 29 20 5b 6c 69 73 74 20 5c 0d 0a  ad(13) [list \..
8160: 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46        [list srcF
8170: 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e  ileName dstFileN
8180: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31  ame table count1
8190: 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20   count2 count3] 
81a0: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
81b0: 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23  NOTE: Workload #
81c0: 31 33 2c 20 62 61 63 6b 75 70 20 66 72 6f 6d 20  13, backup from 
81d0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
81e0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 23 0d 0a 20  abase...    #.. 
81f0: 20 20 20 77 61 69 74 54 65 73 74 20 4d 0d 0a 20     waitTest M.. 
8200: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d     lappend ::tim
8210: 65 73 28 31 33 29 20 5b 6c 69 6e 64 65 78 20 5b  es(13) [lindex [
8220: 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e  time {..      in
8230: 69 74 54 65 73 74 20 4d 0d 0a 20 20 20 20 20 20  itTest M..      
8240: 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
8250: 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f  } {$index <= $co
8260: 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65  unt1} {incr inde
8270: 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  x} {..        if
8280: 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74   {[string is int
8290: 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 3a 3a  eger -strict $::
82a0: 63 6f 6d 70 69 6c 65 64 28 31 33 29 5d 7d 20 74  compiled(13)]} t
82b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
82c0: 20 73 65 74 20 69 64 20 24 3a 3a 63 6f 6d 70 69   set id $::compi
82d0: 6c 65 64 28 31 33 29 3b 20 23 20 4e 4f 54 45 3a  led(13); # NOTE:
82e0: 20 41 6c 72 65 61 64 79 20 63 6f 6d 70 69 6c 65   Already compile
82f0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  d...          if
8300: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..    
8310: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
8320: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
8330: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 42 61  id}.Test${id} Ba
8340: 63 6b 75 70 41 6e 64 47 65 74 44 61 74 61 0d 0a  ckupAndGetData..
8350: 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
8360: 54 65 73 74 20 4d 0d 0a 20 20 20 20 20 20 20 20  Test M..        
8370: 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
8380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8390: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
83a0: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
83b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
83c0: 20 20 20 20 73 68 6f 77 54 65 73 74 20 6d 0d 0a      showTest m..
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
83e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..          
83f0: 20 20 20 20 66 61 69 6c 54 65 73 74 20 6d 20 24      failTest m $
8400: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
8410: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8420: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
8430: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
8440: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
8450: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
8460: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
8470: 64 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  d]..          se
8480: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
8490: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
84a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
84b0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
84c0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20  a.SQLite;....   
84d0: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61           namespa
84e0: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
84f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70  .              p
8510: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
8520: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
8530: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8550: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
8560: 64 20 42 61 63 6b 75 70 41 6e 64 47 65 74 44 61  d BackupAndGetDa
8570: 74 61 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ta()..          
8580: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8590: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
85a0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
85b0: 6f 6e 20 73 6f 75 72 63 65 20 3d 20 6e 65 77 20  on source = new 
85c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
85d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
85e0: 20 20 20 20 20 20 20 20 20 22 46 75 6c 6c 55 72           "FullUr
85f0: 69 3d 24 7b 73 72 63 46 69 6c 65 4e 61 6d 65 7d  i=${srcFileName}
8600: 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  ;[getFlagsProper
8610: 74 79 20 7b 7d 20 74 72 75 65 5d 22 29 29 0d 0a  ty {} true]"))..
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8640: 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e           source.
8650: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
8670: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
8680: 65 63 74 69 6f 6e 20 64 65 73 74 69 6e 61 74 69  ection destinati
8690: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
86a0: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 20 20 20 20 22 46 75 6c 6c 55 72 69 3d 24 7b 64      "FullUri=${d
86d0: 73 74 46 69 6c 65 4e 61 6d 65 7d 3b 5b 67 65 74  stFileName};[get
86e0: 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 7d  FlagsProperty {}
86f0: 20 74 72 75 65 5d 22 29 29 0d 0a 20 20 20 20 20   true]"))..     
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8720: 20 20 20 20 20 20 20 20 64 65 73 74 69 6e 61 74          destinat
8730: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8750: 20 20 20 20 20 73 6f 75 72 63 65 2e 42 61 63 6b       source.Back
8760: 75 70 44 61 74 61 62 61 73 65 28 0d 0a 20 20 20  upDatabase(..   
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 20 20 20 20 20 64 65 73 74 69 6e 61 74 69         destinati
8790: 6f 6e 2c 20 22 6d 61 69 6e 22 2c 20 22 6d 61 69  on, "main", "mai
87a0: 6e 22 2c 20 2d 31 2c 20 6e 75 6c 6c 2c 20 30 29  n", -1, null, 0)
87b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
87c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
87f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8800: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8850: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8860: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
8870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8880: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8890: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
88a0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
88b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
88c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
88d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
88e0: 20 20 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65      }] true true
88f0: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
8900: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
8910: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 20 20  .SQLite.dll]..  
8920: 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64          if {$cod
8930: 65 20 65 71 20 22 4f 6b 22 7d 20 74 68 65 6e 20  e eq "Ok"} then 
8940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
8950: 65 74 20 3a 3a 63 6f 6d 70 69 6c 65 64 28 31 33  et ::compiled(13
8960: 29 20 24 69 64 3b 20 23 20 4e 4f 54 45 3a 20 43  ) $id; # NOTE: C
8970: 6f 6d 70 69 6c 65 64 20 4f 4b 2e 0d 0a 20 20 20  ompiled OK...   
8980: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
8990: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..         
89a0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
89b0: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
89c0: 2e 54 65 73 74 24 7b 69 64 7d 20 42 61 63 6b 75  .Test${id} Backu
89d0: 70 41 6e 64 47 65 74 44 61 74 61 0d 0a 20 20 20  pAndGetData..   
89e0: 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54             showT
89f0: 65 73 74 20 4d 0d 0a 20 20 20 20 20 20 20 20 20  est M..         
8a00: 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65     } error]} the
8a10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
8a20: 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74     if {[isExpect
8a30: 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d  edError $error]}
8a40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
8a50: 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73           showTes
8a60: 74 20 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t m..           
8a70: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69               fai
8a90: 6c 54 65 73 74 20 6d 20 24 65 72 72 6f 72 0d 0a  lTest m $error..
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8ac0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
8ad0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ae0: 65 72 72 6f 72 20 24 65 72 72 6f 72 73 0d 0a 20  error $errors.. 
8af0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8b00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8b10: 20 20 20 20 20 20 64 6f 6e 65 54 65 73 74 20 4d        doneTest M
8b20: 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d  ..    }] 0]..  }
8b30: 5d 0d 0a 0d 0a 20 20 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 23 23 0d 0a 20 20 23 20 20 20 20 20 20 20  ####..  #       
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 20 20 20 20 20 20 20 57 4f 52 4b 4c 4f 41 44 20         WORKLOAD 
8bb0: 23 31 34 20 28 4e 29 20 20 20 20 20 20 20 20 20  #14 (N)         
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bd0: 20 20 20 20 23 0d 0a 20 20 23 23 23 23 23 23 23      #..  #######
8be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8c20: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20  ######....  set 
8c30: 77 6f 72 6b 6c 6f 61 64 28 31 34 29 20 5b 6c 69  workload(14) [li
8c40: 73 74 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  st \..      [lis
8c50: 74 20 73 72 63 46 69 6c 65 4e 61 6d 65 20 64 73  t srcFileName ds
8c60: 74 46 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20  tFileName table 
8c70: 63 6f 75 6e 74 31 20 63 6f 75 6e 74 32 20 63 6f  count1 count2 co
8c80: 75 6e 74 33 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a  unt3] {..    #..
8c90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b      # NOTE: Work
8ca0: 6c 6f 61 64 20 23 31 34 2c 20 50 52 41 47 4d 41  load #14, PRAGMA
8cb0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
8cc0: 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
8cd0: 20 23 0d 0a 20 20 20 20 77 61 69 74 54 65 73 74   #..    waitTest
8ce0: 20 4e 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   N..    lappend 
8cf0: 3a 3a 74 69 6d 65 73 28 31 34 29 20 5b 6c 69 6e  ::times(14) [lin
8d00: 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20  dex [time {..   
8d10: 20 20 20 69 6e 69 74 54 65 73 74 20 4e 0d 0a 20     initTest N.. 
8d20: 20 20 20 20 20 73 65 74 75 70 57 6f 72 6b 6c 6f       setupWorklo
8d30: 61 64 46 69 6c 65 44 62 20 24 64 73 74 46 69 6c  adFileDb $dstFil
8d40: 65 4e 61 6d 65 20 64 62 0d 0a 20 20 20 20 20 20  eName db..      
8d50: 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
8d60: 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f  } {$index <= $co
8d70: 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69 6e 64 65  unt1} {incr inde
8d80: 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  x} {..        if
8d90: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..    
8da0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
8db0: 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
8dc0: 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
8dd0: 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b \..           
8de0: 20 20 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67     "PRAGMA integ
8df0: 72 69 74 79 5f 63 68 65 63 6b 3b 22 5d 0d 0a 20  rity_check;"].. 
8e00: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65           if {$re
8e10: 73 75 6c 74 20 6e 65 20 22 6f 6b 22 7d 20 74 68  sult ne "ok"} th
8e20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
8e30: 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
8e40: 72 67 73 20 22 69 6e 74 65 67 72 69 74 79 20 63  rgs "integrity c
8e50: 68 65 63 6b 20 66 61 69 6c 65 64 3a 20 22 20 24  heck failed: " $
8e60: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 20  result]..       
8e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8e80: 73 68 6f 77 54 65 73 74 20 4e 0d 0a 20 20 20 20  showTest N..    
8e90: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
8ea0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
8eb0: 69 66 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45  if {[isExpectedE
8ec0: 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68  rror $error]} th
8ed0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
8ee0: 20 20 73 68 6f 77 54 65 73 74 20 6e 0d 0a 20 20    showTest n..  
8ef0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
8f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ..            fa
8f10: 69 6c 54 65 73 74 20 6e 20 24 65 72 72 6f 72 0d  ilTest n $error.
8f20: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
8f30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8f40: 0d 0a 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44  ..      cleanupD
8f50: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
8f60: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
8f70: 73 65 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54 65  se..      doneTe
8f80: 73 74 20 4e 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d  st N..    }] 0].
8f90: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23  .  }]....  #####
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 0d 0a 20 20 23 20 20 20  ########..  #   
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b 4c             WORKL
9010: 4f 41 44 20 23 31 35 20 28 4f 29 20 20 20 20 20  OAD #15 (O)     
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9030: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23 23          #..  ###
9040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9080: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
9090: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 31 35 29  set workload(15)
90a0: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..      
90b0: 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61 6d  [list srcFileNam
90c0: 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74 61  e dstFileName ta
90d0: 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e 74  ble count1 count
90e0: 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20 20  2 count3] {..   
90f0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
9100: 57 6f 72 6b 6c 6f 61 64 20 23 31 35 2c 20 66 6f  Workload #15, fo
9110: 72 63 65 20 6d 61 6e 61 67 65 64 20 67 61 72 62  rce managed garb
9120: 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 0d 0a  age collection..
9130: 20 20 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54      #..    waitT
9140: 65 73 74 20 4f 0d 0a 20 20 20 20 6c 61 70 70 65  est O..    lappe
9150: 6e 64 20 3a 3a 74 69 6d 65 73 28 31 35 29 20 5b  nd ::times(15) [
9160: 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a  lindex [time {..
9170: 20 20 20 20 20 20 69 6e 69 74 54 65 73 74 20 4f        initTest O
9180: 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
9190: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
91a0: 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69  x <= $count1} {i
91b0: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
91c0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
91d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f   {..          co
91e0: 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a  llectGarbage $::
91f0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..  
9200: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
9210: 20 4f 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72   O..        } er
9220: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
9230: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45          if {[isE
9240: 78 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72  xpectedError $er
9250: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
9260: 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 54 65            showTe
9270: 73 74 20 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  st o..          
9280: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
9290: 20 20 20 20 20 20 66 61 69 6c 54 65 73 74 20 6f        failTest o
92a0: 20 24 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   $error..       
92b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
92c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
92d0: 64 6f 6e 65 54 65 73 74 20 4f 0d 0a 20 20 20 20  doneTest O..    
92e0: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
92f0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
9300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
9340: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 57 4f 52 4b 4c 4f 41 44 20 23 31 36 20 28 50   WORKLOAD #16 (P
9370: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
9390: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
93a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93e0: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
93f0: 61 64 28 31 36 29 20 5b 6c 69 73 74 20 5c 0d 0a  ad(16) [list \..
9400: 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46        [list srcF
9410: 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e  ileName dstFileN
9420: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31  ame table count1
9430: 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20   count2 count3] 
9440: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
9450: 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23  NOTE: Workload #
9460: 31 36 2c 20 61 6c 6c 6f 63 61 74 65 20 28 65 78  16, allocate (ex
9470: 63 6c 75 64 65 29 20 73 6f 6d 65 20 6e 61 74 69  clude) some nati
9480: 76 65 20 68 65 61 70 20 6d 65 6d 6f 72 79 0d 0a  ve heap memory..
9490: 20 20 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54      #..    waitT
94a0: 65 73 74 20 50 0d 0a 20 20 20 20 6c 61 70 70 65  est P..    lappe
94b0: 6e 64 20 3a 3a 74 69 6d 65 73 28 31 36 29 20 5b  nd ::times(16) [
94c0: 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a  lindex [time {..
94d0: 20 20 20 20 20 20 69 6e 69 74 54 65 73 74 20 50        initTest P
94e0: 0d 0a 20 20 20 20 20 20 73 65 74 20 6d 61 78 53  ..      set maxS
94f0: 69 7a 65 20 24 3a 3a 63 6f 75 6e 74 28 35 29 0d  ize $::count(5).
9500: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
9510: 76 6f 6b 65 20 47 43 20 41 64 64 4d 65 6d 6f 72  voke GC AddMemor
9520: 79 50 72 65 73 73 75 72 65 20 24 6d 61 78 53 69  yPressure $maxSi
9530: 7a 65 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d  ze..      try {.
9540: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65  .        for {se
9550: 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64  t index 1} {$ind
9560: 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b  ex <= $count1} {
9570: 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {.. 
9580: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
9590: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..         
95a0: 20 20 20 73 65 74 20 73 69 7a 65 20 5b 65 78 70     set size [exp
95b0: 72 20 7b 69 6e 74 28 6d 69 6e 28 24 6d 61 78 53  r {int(min($maxS
95c0: 69 7a 65 2c 20 61 62 73 28 24 63 6f 75 6e 74 33  ize, abs($count3
95d0: 20 2a 20 24 69 6e 64 65 78 20 2a 20 35 2e 30 29   * $index * 5.0)
95e0: 29 29 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ))}]..          
95f0: 20 20 73 65 74 20 70 74 72 20 5b 61 6c 6c 6f 63    set ptr [alloc
9600: 4d 65 6d 20 24 73 69 7a 65 5d 3b 20 23 20 74 68  Mem $size]; # th
9610: 72 6f 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20  row..           
9620: 20 75 73 65 4d 65 6d 20 24 70 74 72 20 24 73 69   useMem $ptr $si
9630: 7a 65 3b 20 64 65 6c 61 79 54 65 73 74 20 24 63  ze; delayTest $c
9640: 6f 75 6e 74 32 0d 0a 20 20 20 20 20 20 20 20 20  ount2..         
9650: 20 20 20 66 72 65 65 4d 65 6d 20 24 70 74 72 3b     freeMem $ptr;
9660: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
9670: 69 6e 20 70 74 72 0d 0a 20 20 20 20 20 20 20 20  in ptr..        
9680: 20 20 20 20 73 68 6f 77 54 65 73 74 20 50 0d 0a      showTest P..
9690: 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f            } erro
96a0: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
96b0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45          if {[isE
96c0: 78 70 65 63 74 65 64 45 72 72 6f 72 20 24 65 72  xpectedError $er
96d0: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
96f0: 54 65 73 74 20 70 0d 0a 20 20 20 20 20 20 20 20  Test p..        
9700: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
9710: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c              fail
9720: 54 65 73 74 20 70 20 24 65 72 72 6f 72 0d 0a 20  Test p $error.. 
9730: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9740: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9750: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 66 69     }..      } fi
9760: 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  nally {..       
9770: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
9780: 73 20 70 74 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  s ptr]} then {..
9790: 20 20 20 20 20 20 20 20 20 20 66 72 65 65 4d 65            freeMe
97a0: 6d 20 24 70 74 72 3b 20 75 6e 73 65 74 20 2d 6e  m $ptr; unset -n
97b0: 6f 63 6f 6d 70 6c 61 69 6e 20 70 74 72 0d 0a 20  ocomplain ptr.. 
97c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
97d0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
97e0: 47 43 20 52 65 6d 6f 76 65 4d 65 6d 6f 72 79 50  GC RemoveMemoryP
97f0: 72 65 73 73 75 72 65 20 24 6d 61 78 53 69 7a 65  ressure $maxSize
9800: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
9810: 20 64 6f 6e 65 54 65 73 74 20 50 0d 0a 20 20 20   doneTest P..   
9820: 20 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a   }] 0]..  }]....
9830: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
9840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
9880: 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20  .  #            
9890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98a0: 20 20 57 4f 52 4b 4c 4f 41 44 20 23 31 37 20 28    WORKLOAD #17 (
98b0: 51 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Q)              
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
98d0: 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23  ..  ############
98e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
98f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9920: 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c  #....  set workl
9930: 6f 61 64 28 31 37 29 20 5b 6c 69 73 74 20 5c 0d  oad(17) [list \.
9940: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63  .      [list src
9950: 46 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65  FileName dstFile
9960: 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74  Name table count
9970: 31 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d  1 count2 count3]
9980: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
9990: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
99a0: 23 31 37 2c 20 63 68 61 6e 67 65 20 74 68 65 20  #17, change the 
99b0: 64 61 74 61 62 61 73 65 20 6a 6f 75 72 6e 61 6c  database journal
99c0: 20 6d 6f 64 65 0d 0a 20 20 20 20 23 0d 0a 20 20   mode..    #..  
99d0: 20 20 77 61 69 74 54 65 73 74 20 51 0d 0a 20 20    waitTest Q..  
99e0: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 69 6d 65    lappend ::time
99f0: 73 28 31 37 29 20 5b 6c 69 6e 64 65 78 20 5b 74  s(17) [lindex [t
9a00: 69 6d 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 69  ime {..      ini
9a10: 74 54 65 73 74 20 51 0d 0a 20 20 20 20 20 20 73  tTest Q..      s
9a20: 65 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65  etupWorkloadFile
9a30: 44 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20  Db $dstFileName 
9a40: 64 62 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73  db..      for {s
9a50: 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in
9a60: 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20  dex <= $count1} 
9a70: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
9a80: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
9a90: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..          
9aa0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
9ab0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41  [appendArgs "PRA
9ac0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
9ad0: 20 3d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20   = \"" \..      
9ae0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24          [expr {$
9af0: 69 6e 64 65 78 20 25 20 32 20 3d 3d 20 30 20 3f  index % 2 == 0 ?
9b00: 20 22 64 65 6c 65 74 65 22 20 3a 20 22 77 61 6c   "delete" : "wal
9b10: 22 7d 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20  "}] \"\;]..     
9b20: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 51 0d       showTest Q.
9b30: 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72  .        } error
9b40: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
9b50: 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65       if {[isExpe
9b60: 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72  ctedError $error
9b70: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
9b80: 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20         showTest 
9b90: 71 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  q..          } e
9ba0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
9bb0: 20 20 20 66 61 69 6c 54 65 73 74 20 71 20 24 65     failTest q $e
9bc0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
9bd0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
9be0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65      }..      cle
9bf0: 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e  anupDb $dstFileN
9c00: 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72 75  ame db false tru
9c10: 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 64  e false..      d
9c20: 6f 6e 65 54 65 73 74 20 51 0d 0a 20 20 20 20 7d  oneTest Q..    }
9c30: 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  ] 0]..  }]....  
9c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############.. 
9c90: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cb0: 57 4f 52 4b 4c 4f 41 44 20 23 31 38 20 28 52 29  WORKLOAD #18 (R)
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
9ce0: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
9cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
9d30: 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61  ...  set workloa
9d40: 64 28 31 38 29 20 5b 6c 69 73 74 20 5c 0d 0a 20  d(18) [list \.. 
9d50: 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46 69       [list srcFi
9d60: 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e 61  leName dstFileNa
9d70: 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31 20  me table count1 
9d80: 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20 7b  count2 count3] {
9d90: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
9da0: 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31  OTE: Workload #1
9db0: 38 2c 20 65 78 65 63 75 74 65 20 71 75 65 72 69  8, execute queri
9dc0: 65 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  es against the i
9dd0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
9de0: 65 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 77 61  e..    #..    wa
9df0: 69 74 54 65 73 74 20 52 0d 0a 20 20 20 20 6c 61  itTest R..    la
9e00: 70 70 65 6e 64 20 3a 3a 74 69 6d 65 73 28 31 38  ppend ::times(18
9e10: 29 20 5b 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20  ) [lindex [time 
9e20: 7b 0d 0a 20 20 20 20 20 20 69 6e 69 74 54 65 73  {..      initTes
9e30: 74 20 52 0d 0a 20 20 20 20 20 20 73 65 74 75 70  t R..      setup
9e40: 57 6f 72 6b 6c 6f 61 64 4d 65 6d 44 62 20 24 73  WorkloadMemDb $s
9e50: 72 63 46 69 6c 65 4e 61 6d 65 20 64 62 0d 0a 20  rcFileName db.. 
9e60: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
9e70: 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 1} {$index <
9e80: 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72  = $count1} {incr
9e90: 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..     
9ea0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
9eb0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
9ec0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
9ed0: 57 6f 72 6b 6c 6f 61 64 20 23 31 38 2e 33 2c 20  Workload #18.3, 
9ee0: 22 73 6d 61 6c 6c 22 20 53 45 4c 45 43 54 20 73  "small" SELECT s
9ef0: 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20  tatements...    
9f00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
9f10: 20 20 20 73 65 74 20 72 65 61 64 65 72 20 5b 73     set reader [s
9f20: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
9f30: 75 74 65 20 72 65 61 64 65 72 20 5c 0d 0a 20 20  ute reader \..  
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 6f 72              -for
9f50: 6d 61 74 20 64 61 74 61 52 65 61 64 65 72 20 2d  mat dataReader -
9f60: 61 6c 69 61 73 20 24 64 62 20 5b 61 70 70 65 6e  alias $db [appen
9f70: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
9f80: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78         "SELECT x
9f90: 2c 20 79 20 46 52 4f 4d 20 22 20 24 74 61 62 6c  , y FROM " $tabl
9fa0: 65 20 22 20 57 48 45 52 45 20 7a 20 3d 20 27 73  e " WHERE z = 's
9fb0: 6d 61 6c 6c 27 3b 22 5d 5d 0d 0a 20 20 20 20 20  mall';"]]..     
9fc0: 20 20 20 20 20 77 68 69 6c 65 20 7b 5b 24 72 65       while {[$re
9fd0: 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20  ader Read]} {.. 
9fe0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
9ff0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
a000: 3a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  : Do nothing... 
a010: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
a020: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a030: 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f       unset -noco
a040: 6d 70 6c 61 69 6e 20 72 65 61 64 65 72 0d 0a 20  mplain reader.. 
a050: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
a060: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f        # NOTE: Wo
a070: 72 6b 6c 6f 61 64 20 23 31 38 2e 34 2c 20 22 62  rkload #18.4, "b
a080: 69 67 22 20 53 45 4c 45 43 54 20 73 74 61 74 65  ig" SELECT state
a090: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  ments...        
a0a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
a0b0: 65 74 20 72 65 61 64 65 72 20 5b 73 71 6c 20 65  et reader [sql e
a0c0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
a0d0: 72 65 61 64 65 72 20 5c 0d 0a 20 20 20 20 20 20  reader \..      
a0e0: 20 20 20 20 20 20 20 20 2d 66 6f 72 6d 61 74 20          -format 
a0f0: 64 61 74 61 52 65 61 64 65 72 20 2d 61 6c 69 61  dataReader -alia
a100: 73 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  s $db [appendArg
a110: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..           
a120: 20 20 20 22 53 45 4c 45 43 54 20 78 2c 20 79 20     "SELECT x, y 
a130: 46 52 4f 4d 20 22 20 24 74 61 62 6c 65 20 22 20  FROM " $table " 
a140: 57 48 45 52 45 20 7a 20 3d 20 27 62 69 67 27 3b  WHERE z = 'big';
a150: 22 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 77  "]]..          w
a160: 68 69 6c 65 20 7b 5b 24 72 65 61 64 65 72 20 52  hile {[$reader R
a170: 65 61 64 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20  ead]} {..       
a180: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
a190: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 20 6e      # NOTE: Do n
a1a0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
a1b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
a1c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 75    }..          u
a1d0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
a1e0: 20 72 65 61 64 65 72 0d 0a 20 20 20 20 20 20 20   reader..       
a1f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
a200: 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64  # NOTE: Workload
a210: 20 23 31 38 2e 35 2c 20 22 73 6d 61 6c 6c 22 20   #18.5, "small" 
a220: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
a230: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  s...          #.
a240: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65  .          sql e
a250: 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65  xecute $db [appe
a260: 6e 64 41 72 67 73 20 22 49 4e 53 45 52 54 20 49  ndArgs "INSERT I
a270: 4e 54 4f 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a  NTO " $table \..
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 28                "(
a290: 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28  x, y, z) VALUES(
a2a0: 27 22 20 5b 66 6f 72 6d 61 74 20 25 6c 58 20 5b  '" [format %lX [
a2b0: 65 78 70 72 20 7b 72 61 6e 64 6f 6d 28 29 7d 5d  expr {random()}]
a2c0: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
a2d0: 20 20 20 22 27 2c 20 27 22 20 5b 62 61 73 65 36     "', '" [base6
a2e0: 34 20 65 6e 63 6f 64 65 20 2d 2d 20 5b 65 78 70  4 encode -- [exp
a2f0: 72 20 7b 72 61 6e 64 73 74 72 28 24 63 6f 75 6e  r {randstr($coun
a300: 74 32 29 7d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  t2)}]] \..      
a310: 20 20 20 20 20 20 20 20 22 27 2c 20 27 73 6d 61          "', 'sma
a320: 6c 6c 27 29 3b 22 5d 0d 0a 20 20 20 20 20 20 20  ll');"]..       
a330: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
a340: 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64  # NOTE: Workload
a350: 20 23 31 38 2e 36 2c 20 22 62 69 67 22 20 49 4e   #18.6, "big" IN
a360: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  SERT statements.
a370: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #.. 
a380: 20 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65           sql exe
a390: 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64  cute $db [append
a3a0: 41 72 67 73 20 22 49 4e 53 45 52 54 20 49 4e 54  Args "INSERT INT
a3b0: 4f 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20  O " $table \..  
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 28 78 2c              "(x,
a3d0: 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 22   y, z) VALUES('"
a3e0: 20 5b 66 6f 72 6d 61 74 20 25 6c 58 20 5b 65 78   [format %lX [ex
a3f0: 70 72 20 7b 72 61 6e 64 6f 6d 28 29 7d 5d 5d 20  pr {random()}]] 
a400: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
a410: 20 22 27 2c 20 52 41 4e 44 4f 4d 42 4c 4f 42 28   "', RANDOMBLOB(
a420: 22 20 24 63 6f 75 6e 74 33 20 22 29 2c 20 27 62  " $count3 "), 'b
a430: 69 67 27 29 3b 22 5d 0d 0a 20 20 20 20 20 20 20  ig');"]..       
a440: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
a450: 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64  # NOTE: Workload
a460: 20 23 31 38 2e 37 2c 20 22 73 6d 61 6c 6c 22 20   #18.7, "small" 
a470: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
a480: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  s...          #.
a490: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65  .          sql e
a4a0: 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65  xecute $db [appe
a4b0: 6e 64 41 72 67 73 20 22 55 50 44 41 54 45 20 22  ndArgs "UPDATE "
a4c0: 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20   $table \..     
a4d0: 20 20 20 20 20 20 20 20 20 22 20 53 45 54 20 79           " SET y
a4e0: 20 3d 20 27 22 20 5b 62 61 73 65 36 34 20 65 6e   = '" [base64 en
a4f0: 63 6f 64 65 20 2d 2d 20 5b 65 78 70 72 20 7b 72  code -- [expr {r
a500: 61 6e 64 73 74 72 28 24 63 6f 75 6e 74 32 29 7d  andstr($count2)}
a510: 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ]] \..          
a520: 20 20 20 20 22 27 20 57 48 45 52 45 20 78 20 4c      "' WHERE x L
a530: 49 4b 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25  IKE '" [format %
a540: 58 20 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e  X $index] "%' AN
a550: 44 20 7a 20 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d  D z = 'small';"]
a560: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #.. 
a570: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
a580: 20 57 6f 72 6b 6c 6f 61 64 20 23 31 38 2e 38 2c   Workload #18.8,
a590: 20 22 62 69 67 22 20 55 50 44 41 54 45 20 73 74   "big" UPDATE st
a5a0: 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 20  atements...     
a5b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
a5c0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
a5d0: 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 55  b [appendArgs "U
a5e0: 50 44 41 54 45 20 22 20 24 74 61 62 6c 65 20 5c  PDATE " $table \
a5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a600: 22 20 53 45 54 20 79 20 3d 20 52 41 4e 44 4f 4d  " SET y = RANDOM
a610: 42 4c 4f 42 28 22 20 24 63 6f 75 6e 74 33 20 22  BLOB(" $count3 "
a620: 29 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27  ) WHERE x LIKE '
a630: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..           
a640: 20 20 20 5b 66 6f 72 6d 61 74 20 25 58 20 24 69     [format %X $i
a650: 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a 20  ndex] "%' AND z 
a660: 3d 20 27 62 69 67 27 3b 22 5d 0d 0a 20 20 20 20  = 'big';"]..    
a670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
a680: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
a690: 6f 61 64 20 23 31 38 2e 39 2c 20 22 73 6d 61 6c  oad #18.9, "smal
a6a0: 6c 22 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  l" DELETE statem
a6b0: 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ents...         
a6c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71   #..          sq
a6d0: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a
a6e0: 70 70 65 6e 64 41 72 67 73 20 22 44 45 4c 45 54  ppendArgs "DELET
a6f0: 45 20 46 52 4f 4d 20 22 20 24 74 61 62 6c 65 20  E FROM " $table 
a700: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
a710: 20 22 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20   " WHERE x LIKE 
a720: 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20 24 69  '" [format %X $i
a730: 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a 20  ndex] "%' AND z 
a740: 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d 0d 0a 20 20  = 'small';"]..  
a750: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
a760: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72       # NOTE: Wor
a770: 6b 6c 6f 61 64 20 23 31 38 2e 31 30 2c 20 22 62  kload #18.10, "b
a780: 69 67 22 20 44 45 4c 45 54 45 20 73 74 61 74 65  ig" DELETE state
a790: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  ments...        
a7a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
a7b0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
a7c0: 61 70 70 65 6e 64 41 72 67 73 20 22 44 45 4c 45  appendArgs "DELE
a7d0: 54 45 20 46 52 4f 4d 20 22 20 24 74 61 62 6c 65  TE FROM " $table
a7e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
a7f0: 20 20 22 20 57 48 45 52 45 20 78 20 4c 49 4b 45    " WHERE x LIKE
a800: 20 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20 24   '" [format %X $
a810: 69 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a  index] "%' AND z
a820: 20 3d 20 27 62 69 67 27 3b 22 5d 0d 0a 20 20 20   = 'big';"]..   
a830: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
a840: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b      # NOTE: Work
a850: 6c 6f 61 64 20 23 31 38 2e 31 31 2c 20 56 41 43  load #18.11, VAC
a860: 55 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  UUM statement...
a870: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
a880: 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75         sql execu
a890: 74 65 20 24 64 62 20 22 56 41 43 55 55 4d 3b 22  te $db "VACUUM;"
a8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #.. 
a8b0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
a8c0: 20 57 6f 72 6b 6c 6f 61 64 20 23 31 38 2e 31 34   Workload #18.14
a8d0: 2c 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69  , PRAGMA integri
a8e0: 74 79 20 63 68 65 63 6b 20 73 74 61 74 65 6d 65  ty check stateme
a8f0: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nt...          #
a900: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
a910: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
a920: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
a930: 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
a940: 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41           "PRAGMA
a950: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
a960: 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;"]..          i
a970: 66 20 7b 24 72 65 73 75 6c 74 20 6e 65 20 22 6f  f {$result ne "o
a980: 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  k"} then {..    
a990: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61          error [a
a9a0: 70 70 65 6e 64 41 72 67 73 20 22 69 6e 74 65 67  ppendArgs "integ
a9b0: 72 69 74 79 20 63 68 65 63 6b 20 66 61 69 6c 65  rity check faile
a9c0: 64 3a 20 22 20 24 72 65 73 75 6c 74 5d 0d 0a 20  d: " $result].. 
a9d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a9e0: 20 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 52        showTest R
a9f0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f  ..        } erro
aa00: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
aa10: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 78 70        if {[isExp
aa20: 65 63 74 65 64 45 72 72 6f 72 20 24 65 72 72 6f  ectedError $erro
aa30: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
aa40: 20 20 20 20 20 20 20 20 73 68 6f 77 54 65 73 74          showTest
aa50: 20 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   r..          } 
aa60: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
aa70: 20 20 20 20 66 61 69 6c 54 65 73 74 20 72 20 24      failTest r $
aa80: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
aa90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
aaa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c       }..      cl
aab0: 65 61 6e 75 70 44 62 20 24 73 72 63 46 69 6c 65  eanupDb $srcFile
aac0: 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72  Name db false tr
aad0: 75 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ue false..      
aae0: 64 6f 6e 65 54 65 73 74 20 52 0d 0a 20 20 20 20  doneTest R..    
aaf0: 7d 5d 20 30 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }] 0]..  }].... 
ab00: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
ab10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
ab50: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 20 57 4f 52 4b 4c 4f 41 44 20 23 31 39 20 28 53   WORKLOAD #19 (S
ab80: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
aba0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
abb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f  ....  set worklo
ac00: 61 64 28 31 39 29 20 5b 6c 69 73 74 20 5c 0d 0a  ad(19) [list \..
ac10: 20 20 20 20 20 20 5b 6c 69 73 74 20 73 72 63 46        [list srcF
ac20: 69 6c 65 4e 61 6d 65 20 64 73 74 46 69 6c 65 4e  ileName dstFileN
ac30: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 31  ame table count1
ac40: 20 63 6f 75 6e 74 32 20 63 6f 75 6e 74 33 5d 20   count2 count3] 
ac50: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
ac60: 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20 23  NOTE: Workload #
ac70: 31 39 2c 20 72 61 70 69 64 6c 79 20 6f 70 65 6e  19, rapidly open
ac80: 2f 63 6c 6f 73 65 20 63 6f 6e 6e 65 63 74 69 6f  /close connectio
ac90: 6e 73 2c 20 74 68 72 65 61 64 20 23 31 2e 0d 0a  ns, thread #1...
aca0: 20 20 20 20 23 0d 0a 20 20 20 20 77 61 69 74 54      #..    waitT
acb0: 65 73 74 20 53 0d 0a 20 20 20 20 6c 61 70 70 65  est S..    lappe
acc0: 6e 64 20 3a 3a 74 69 6d 65 73 28 31 39 29 20 5b  nd ::times(19) [
acd0: 6c 69 6e 64 65 78 20 5b 74 69 6d 65 20 7b 0d 0a  lindex [time {..
ace0: 20 20 20 20 20 20 69 6e 69 74 54 65 73 74 20 53        initTest S
acf0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
ad00: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
ad10: 78 20 3c 3d 20 24 63 6f 75 6e 74 31 7d 20 7b 69  x <= $count1} {i
ad20: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
ad30: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
ad40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
ad50: 74 75 70 57 6f 72 6b 6c 6f 61 64 46 69 6c 65 44  tupWorkloadFileD
ad60: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
ad70: 62 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6c 65  b..          cle
ad80: 61 6e 75 70 44 62 20 24 64 73 74 46 69 6c 65 4e  anupDb $dstFileN
ad90: 61 6d 65 20 64 62 20 66 61 6c 73 65 20 74 72 75  ame db false tru
ada0: 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  e false..       
adb0: 20 20 20 73 68 6f 77 54 65 73 74 20 53 0d 0a 20     showTest S.. 
adc0: 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d         } error]}
add0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
ade0: 20 20 20 69 66 20 7b 5b 69 73 45 78 70 65 63 74     if {[isExpect
adf0: 65 64 45 72 72 6f 72 20 24 65 72 72 6f 72 5d 7d  edError $error]}
ae00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
ae10: 20 20 20 20 20 73 68 6f 77 54 65 73 74 20 73 0d       showTest s.
ae20: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
ae30: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
ae40: 20 66 61 69 6c 54 65 73 74 20 73 20 24 65 72 72   failTest s $err
ae50: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  or..          }.
ae60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
ae70: 20 20 7d 0d 0a 20 20 20 20 20 20 64 6f 6e 65 54    }..      doneT
ae80: 65 73 74 20 53 0d 0a 20 20 20 20 7d 5d 20 30 5d  est S..    }] 0]
ae90: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23  ..  }]....  ####
aea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aeb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aee0: 23 23 23 23 23 23 23 23 23 0d 0a 20 20 23 20 20  #########..  #  
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 57 4f 52 4b              WORK
af10: 4c 4f 41 44 20 23 32 30 20 28 54 29 20 20 20 20  LOAD #20 (T)    
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 23 23           #..  ##
af40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
af50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
af60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
af70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
af80: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########.... 
af90: 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 32 30   set workload(20
afa0: 29 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  ) [list \..     
afb0: 20 5b 6c 69 73 74 20 73 72 63 46 69 6c 65 4e 61   [list srcFileNa
afc0: 6d 65 20 64 73 74 46 69 6c 65 4e 61 6d 65 20 74  me dstFileName t
afd0: 61 62 6c 65 20 63 6f 75 6e 74 31 20 63 6f 75 6e  able count1 coun
afe0: 74 32 20 63 6f 75 6e 74 33 5d 20 7b 0d 0a 20 20  t2 count3] {..  
aff0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
b000: 20 57 6f 72 6b 6c 6f 61 64 20 23 32 30 2c 20 72   Workload #20, r
b010: 61 70 69 64 6c 79 20 6f 70 65 6e 2f 63 6c 6f 73  apidly open/clos
b020: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 74  e connections, t
b030: 68 72 65 61 64 20 23 32 2e 0d 0a 20 20 20 20 23  hread #2...    #
b040: 0d 0a 20 20 20 20 77 61 69 74 54 65 73 74 20 54  ..    waitTest T
b050: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a  ..    lappend ::
b060: 74 69 6d 65 73 28 32 30 29 20 5b 6c 69 6e 64 65  times(20) [linde
b070: 78 20 5b 74 69 6d 65 20 7b 0d 0a 20 20 20 20 20  x [time {..     
b080: 20 69 6e 69 74 54 65 73 74 20 54 0d 0a 20 20 20   initTest T..   
b090: 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65     for {set inde
b0a0: 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20  x 1} {$index <= 
b0b0: 24 63 6f 75 6e 74 31 7d 20 7b 69 6e 63 72 20 69  $count1} {incr i
b0c0: 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20  ndex} {..       
b0d0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {.. 
b0e0: 20 20 20 20 20 20 20 20 20 73 65 74 75 70 57 6f           setupWo
b0f0: 72 6b 6c 6f 61 64 46 69 6c 65 44 62 20 24 64 73  rkloadFileDb $ds
b100: 74 46 69 6c 65 4e 61 6d 65 20 64 62 0d 0a 20 20  tFileName db..  
b110: 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44          cleanupD
b120: 62 20 24 64 73 74 46 69 6c 65 4e 61 6d 65 20 64  b $dstFileName d
b130: 62 20 66 61 6c 73 65 20 74 72 75 65 20 66 61 6c  b false true fal
b140: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 68  se..          sh
b150: 6f 77 54 65 73 74 20 54 0d 0a 20 20 20 20 20 20  owTest T..      
b160: 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
b170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
b180: 20 7b 5b 69 73 45 78 70 65 63 74 65 64 45 72 72   {[isExpectedErr
b190: 6f 72 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  or $error]} then
b1a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b1b0: 73 68 6f 77 54 65 73 74 20 74 0d 0a 20 20 20 20  showTest t..    
b1c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c              fail
b1e0: 54 65 73 74 20 74 20 24 65 72 72 6f 72 0d 0a 20  Test t $error.. 
b1f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b200: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
b210: 20 20 20 20 20 20 64 6f 6e 65 54 65 73 74 20 54        doneTest T
b220: 0d 0a 20 20 20 20 7d 5d 20 30 5d 0d 0a 20 20 7d  ..    }] 0]..  }
b230: 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
b240: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 4e 61 6d 65  set workloadName
b250: 73 28 61 6c 6c 29 20 5b 61 72 72 61 79 20 6e 61  s(all) [array na
b260: 6d 65 73 20 77 6f 72 6b 6c 6f 61 64 5d 0d 0a 0d  mes workload]...
b270: 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63  .  tputs $test_c
b280: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
b290: 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d  gs \..      "---
b2a0: 2d 20 74 68 65 72 65 20 61 72 65 20 22 20 5b 6c  - there are " [l
b2b0: 6c 65 6e 67 74 68 20 24 77 6f 72 6b 6c 6f 61 64  length $workload
b2c0: 4e 61 6d 65 73 28 61 6c 6c 29 5d 20 5c 0d 0a 20  Names(all)] \.. 
b2d0: 20 20 20 20 20 22 20 74 6f 74 61 6c 20 77 6f 72       " total wor
b2e0: 6b 6c 6f 61 64 73 2c 20 74 68 65 69 72 20 6e 61  kloads, their na
b2f0: 6d 65 73 20 61 72 65 3a 20 22 20 24 77 6f 72 6b  mes are: " $work
b300: 6c 6f 61 64 4e 61 6d 65 73 28 61 6c 6c 29 20 5c  loadNames(all) \
b310: 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b  n]....  set work
b320: 6c 6f 61 64 4e 61 6d 65 73 28 65 6e 61 62 6c 65  loadNames(enable
b330: 64 29 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 66  d) [list]....  f
b340: 6f 72 65 61 63 68 20 69 6e 64 65 78 28 30 29 20  oreach index(0) 
b350: 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20  [lsort -integer 
b360: 24 77 6f 72 6b 6c 6f 61 64 4e 61 6d 65 73 28 61  $workloadNames(a
b370: 6c 6c 29 5d 20 7b 0d 0a 20 20 20 20 69 66 20 7b  ll)] {..    if {
b380: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact 
b390: 24 6e 6f 57 6f 72 6b 6c 6f 61 64 20 24 69 6e 64  $noWorkload $ind
b3a0: 65 78 28 30 29 5d 20 3d 3d 20 2d 31 7d 20 74 68  ex(0)] == -1} th
b3b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6c 61 70 70  en {..      lapp
b3c0: 65 6e 64 20 77 6f 72 6b 6c 6f 61 64 4e 61 6d 65  end workloadName
b3d0: 73 28 65 6e 61 62 6c 65 64 29 20 24 69 6e 64 65  s(enabled) $inde
b3e0: 78 28 30 29 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  x(0)..    }..  }
b3f0: 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73  ....  tputs $tes
b400: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
b410: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22  dArgs \..      "
b420: 2d 2d 2d 2d 20 74 68 65 72 65 20 61 72 65 20 22  ---- there are "
b430: 20 5b 6c 6c 65 6e 67 74 68 20 24 77 6f 72 6b 6c   [llength $workl
b440: 6f 61 64 4e 61 6d 65 73 28 65 6e 61 62 6c 65 64  oadNames(enabled
b450: 29 5d 20 5c 0d 0a 20 20 20 20 20 20 22 20 65 6e  )] \..      " en
b460: 61 62 6c 65 64 20 77 6f 72 6b 6c 6f 61 64 73 2c  abled workloads,
b470: 20 74 68 65 69 72 20 6e 61 6d 65 73 20 61 72 65   their names are
b480: 3a 20 22 20 24 77 6f 72 6b 6c 6f 61 64 4e 61 6d  : " $workloadNam
b490: 65 73 28 65 6e 61 62 6c 65 64 29 20 5c 6e 5d 0d  es(enabled) \n].
b4a0: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
b4b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
b4c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 3d  Args \..      "=
b4d0: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 74 68 69  === WARNING: thi
b4e0: 73 20 73 74 72 65 73 73 20 74 65 73 74 20 6d 61  s stress test ma
b4f0: 79 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 6d  y take several m
b500: 69 6e 75 74 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d  inutes...\n"]...
b510: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65  .  for {set inde
b520: 78 28 30 29 20 31 7d 20 7b 24 69 6e 64 65 78 28  x(0) 1} {$index(
b530: 30 29 20 3c 3d 20 24 63 6f 75 6e 74 28 30 29 7d  0) <= $count(0)}
b540: 20 7b 69 6e 63 72 20 69 6e 64 65 78 28 30 29 7d   {incr index(0)}
b550: 20 7b 0d 0a 20 20 20 20 69 66 20 7b 24 69 6e 64   {..    if {$ind
b560: 65 78 28 30 29 20 3e 20 31 7d 20 74 68 65 6e 20  ex(0) > 1} then 
b570: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..    
b580: 20 20 23 20 4e 4f 54 45 3a 20 41 64 76 61 6e 63    # NOTE: Advanc
b590: 65 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20  e output to the 
b5a0: 6e 65 78 74 20 6c 69 6e 65 20 64 75 65 20 74 6f  next line due to
b5b0: 20 74 68 65 20 77 6f 72 6b 6c 6f 61 64 0d 0a 20   the workload.. 
b5c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 65       #       ite
b5d0: 72 61 74 69 6f 6e 20 70 72 6f 67 72 65 73 73 20  ration progress 
b5e0: 69 6e 64 69 63 61 74 6f 72 73 20 66 72 6f 6d 20  indicators from 
b5f0: 74 68 65 20 70 72 65 76 69 6f 75 73 20 72 75 6e  the previous run
b600: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
b610: 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68    tputs $test_ch
b620: 61 6e 6e 65 6c 20 5c 6e 0d 0a 20 20 20 20 7d 0d  annel \n..    }.
b630: 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24 74 65  ...    tputs $te
b640: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
b650: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
b660: 20 20 22 2d 2d 2d 2d 20 73 74 61 72 74 69 6e 67    "---- starting
b670: 20 77 6f 72 6b 6c 6f 61 64 20 72 75 6e 20 23 22   workload run #"
b680: 20 24 69 6e 64 65 78 28 30 29 20 2e 2e 2e 5c 6e   $index(0) ...\n
b690: 5d 0d 0a 0d 0a 20 20 20 20 75 6e 73 65 74 20 2d  ]....    unset -
b6a0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 68 72 65 61  nocomplain threa
b6b0: 64 20 73 74 61 74 75 73 3b 20 64 6f 6e 65 54 65  d status; doneTe
b6c0: 73 74 0d 0a 0d 0a 20 20 20 20 73 71 6c 20 65 78  st....    sql ex
b6d0: 65 63 75 74 65 20 24 73 72 63 44 62 20 22 43 52  ecute $srcDb "CR
b6e0: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
b6f0: 54 20 45 58 49 53 54 53 20 74 31 28 78 20 50 52  T EXISTS t1(x PR
b700: 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29  IMARY KEY, y, z)
b710: 3b 22 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63  ;"..    sql exec
b720: 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
b730: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
b740: 53 54 53 20 74 31 28 78 20 50 52 49 4d 41 52 59  STS t1(x PRIMARY
b750: 20 4b 45 59 2c 20 79 2c 20 7a 29 3b 22 0d 0a 0d   KEY, y, z);"...
b760: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 6e 64  .    foreach ind
b770: 65 78 28 31 29 20 5b 6c 73 6f 72 74 20 2d 69 6e  ex(1) [lsort -in
b780: 74 65 67 65 72 20 24 77 6f 72 6b 6c 6f 61 64 4e  teger $workloadN
b790: 61 6d 65 73 28 65 6e 61 62 6c 65 64 29 5d 20 7b  ames(enabled)] {
b7a0: 0d 0a 20 20 20 20 20 20 73 65 74 20 77 6f 72 6b  ..      set work
b7b0: 6c 6f 61 64 43 61 6c 6c 62 61 63 6b 73 28 24 69  loadCallbacks($i
b7c0: 6e 64 65 78 28 31 29 29 20 5b 6c 69 73 74 20 5c  ndex(1)) [list \
b7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  ..          appl
b7e0: 79 20 24 77 6f 72 6b 6c 6f 61 64 28 24 69 6e 64  y $workload($ind
b7f0: 65 78 28 31 29 29 20 24 66 69 6c 65 4e 61 6d 65  ex(1)) $fileName
b800: 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29  (1) $fileName(2)
b810: 20 74 31 20 24 63 6f 75 6e 74 28 31 29 20 5c 0d   t1 $count(1) \.
b820: 0a 20 20 20 20 20 20 20 20 20 20 24 63 6f 75 6e  .          $coun
b830: 74 28 33 29 20 24 63 6f 75 6e 74 28 34 29 5d 0d  t(3) $count(4)].
b840: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 68 72  ...      set thr
b850: 65 61 64 28 24 69 6e 64 65 78 28 31 29 29 20 5b  ead($index(1)) [
b860: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
b870: 6c 69 61 73 20 53 79 73 74 65 6d 2e 54 68 72 65  lias System.Thre
b880: 61 64 69 6e 67 2e 54 68 72 65 61 64 20 5c 0d 0a  ading.Thread \..
b890: 20 20 20 20 20 20 20 20 20 20 24 77 6f 72 6b 6c            $workl
b8a0: 6f 61 64 43 61 6c 6c 62 61 63 6b 73 28 24 69 6e  oadCallbacks($in
b8b0: 64 65 78 28 31 29 29 20 31 30 34 38 35 37 36 5d  dex(1)) 1048576]
b8c0: 0d 0a 0d 0a 20 20 20 20 20 20 24 74 68 72 65 61  ....      $threa
b8d0: 64 28 24 69 6e 64 65 78 28 31 29 29 20 4e 61 6d  d($index(1)) Nam
b8e0: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  e [appendArgs \.
b8f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
b900: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file 
b910: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 28 32  tail $fileName(2
b920: 29 5d 5d 20 22 20 23 22 20 24 69 6e 64 65 78 28  )]] " #" $index(
b930: 31 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  1)]....      if 
b940: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72  {[info exists pr
b950: 69 6f 72 69 74 79 28 24 69 6e 64 65 78 28 31 29  iority($index(1)
b960: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..    
b970: 20 20 20 20 24 74 68 72 65 61 64 28 24 69 6e 64      $thread($ind
b980: 65 78 28 31 29 29 20 50 72 69 6f 72 69 74 79 20  ex(1)) Priority 
b990: 24 70 72 69 6f 72 69 74 79 28 24 69 6e 64 65 78  $priority($index
b9a0: 28 31 29 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  (1))..      }.. 
b9b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 66 6f 72 65     }....    fore
b9c0: 61 63 68 20 69 6e 64 65 78 28 31 29 20 5b 61 72  ach index(1) [ar
b9d0: 72 61 79 20 6e 61 6d 65 73 20 74 68 72 65 61 64  ray names thread
b9e0: 5d 20 7b 0d 0a 20 20 20 20 20 20 24 74 68 72 65  ] {..      $thre
b9f0: 61 64 28 24 69 6e 64 65 78 28 31 29 29 20 53 74  ad($index(1)) St
ba00: 61 72 74 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  art..    }....  
ba10: 20 20 24 65 76 65 6e 74 20 53 65 74 3b 20 23 20    $event Set; # 
ba20: 47 4f 0d 0a 0d 0a 20 20 20 20 66 6f 72 65 61 63  GO....    foreac
ba30: 68 20 69 6e 64 65 78 28 31 29 20 5b 61 72 72 61  h index(1) [arra
ba40: 79 20 6e 61 6d 65 73 20 74 68 72 65 61 64 5d 20  y names thread] 
ba50: 7b 0d 0a 20 20 20 20 20 20 24 74 68 72 65 61 64  {..      $thread
ba60: 28 24 69 6e 64 65 78 28 31 29 29 20 4a 6f 69 6e  ($index(1)) Join
ba70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 66  ..    }....    f
ba80: 6f 72 65 61 63 68 20 69 6e 64 65 78 28 31 29 20  oreach index(1) 
ba90: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 74 68 72  [array names thr
baa0: 65 61 64 5d 20 7b 0d 0a 20 20 20 20 20 20 69 66  ead] {..      if
bab0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74   {[info exists t
bac0: 68 72 65 61 64 28 24 69 6e 64 65 78 28 31 29 29  hread($index(1))
bad0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..        
bae0: 20 20 5b 63 6c 65 61 6e 75 70 54 68 72 65 61 64    [cleanupThread
baf0: 20 24 74 68 72 65 61 64 28 24 69 6e 64 65 78 28   $thread($index(
bb00: 31 29 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  1))]} then {..  
bb10: 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
bb20: 6f 6d 70 6c 61 69 6e 20 74 68 72 65 61 64 28 24  omplain thread($
bb30: 69 6e 64 65 78 28 31 29 29 0d 0a 20 20 20 20 20  index(1))..     
bb40: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
bb50: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
bb60: 69 6e 20 74 68 72 65 61 64 20 73 74 61 74 75 73  in thread status
bb70: 3b 20 64 6f 6e 65 54 65 73 74 0d 0a 20 20 7d 0d  ; doneTest..  }.
bb80: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
bb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbd0: 23 23 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20  ##....  foreach 
bbe0: 69 6e 64 65 78 28 30 29 20 5b 73 70 6c 69 74 20  index(0) [split 
bbf0: 24 69 6e 64 69 63 61 74 6f 72 73 20 22 22 5d 20  $indicators ""] 
bc00: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
bc10: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 69  NOTE: See if thi
bc20: 73 20 77 6f 72 6b 6c 6f 61 64 20 69 74 65 72 61  s workload itera
bc30: 74 69 6f 6e 20 72 61 69 73 65 64 20 61 6e 20 65  tion raised an e
bc40: 72 72 6f 72 2e 20 20 49 66 20 73 6f 2c 20 74 68  rror.  If so, th
bc50: 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 69  e..    #       i
bc60: 6e 64 69 63 61 74 6f 72 20 6c 65 74 74 65 72 20  ndicator letter 
bc70: 77 69 6c 6c 20 62 65 20 69 6e 20 6c 6f 77 65 72  will be in lower
bc80: 20 63 61 73 65 3b 20 6f 74 68 65 72 77 69 73 65   case; otherwise
bc90: 2c 20 69 74 20 77 69 6c 6c 0d 0a 20 20 20 20 23  , it will..    #
bca0: 20 20 20 20 20 20 20 62 65 20 69 6e 20 75 70 70         be in upp
bcb0: 65 72 20 63 61 73 65 2e 0d 0a 20 20 20 20 23 0d  er case...    #.
bcc0: 0a 20 20 20 20 73 65 74 20 69 6e 64 65 78 28 31  .    set index(1
bcd0: 29 20 5b 73 74 72 69 6e 67 20 69 73 20 75 70 70  ) [string is upp
bce0: 65 72 20 2d 73 74 72 69 63 74 20 24 69 6e 64 65  er -strict $inde
bcf0: 78 28 30 29 5d 0d 0a 0d 0a 20 20 20 20 73 65 74  x(0)]....    set
bd00: 20 69 6e 64 65 78 28 32 29 20 5b 65 78 70 72 20   index(2) [expr 
bd10: 7b 5b 73 74 72 69 6e 67 20 6f 72 64 69 6e 61 6c  {[string ordinal
bd20: 20 24 69 6e 64 65 78 28 30 29 20 30 5d 20 2d 20   $index(0) 0] - 
bd30: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 73 74 72 69  \..        [stri
bd40: 6e 67 20 6f 72 64 69 6e 61 6c 20 5b 65 78 70 72  ng ordinal [expr
bd50: 20 7b 24 69 6e 64 65 78 28 31 29 20 3f 20 22 41   {$index(1) ? "A
bd60: 22 20 3a 20 22 61 22 7d 5d 20 30 5d 20 2b 20 31  " : "a"}] 0] + 1
bd70: 7d 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 69 6e  }]....    set in
bd80: 64 65 78 28 33 29 20 5b 65 78 70 72 20 7b 24 69  dex(3) [expr {$i
bd90: 6e 64 65 78 28 31 29 20 3f 20 22 6f 6b 22 20 3a  ndex(1) ? "ok" :
bda0: 20 22 65 72 72 6f 72 22 7d 5d 0d 0a 0d 0a 20 20   "error"}]....  
bdb0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
bdc0: 73 74 73 20 69 74 65 72 61 74 69 6f 6e 73 28 24  sts iterations($
bdd0: 69 6e 64 65 78 28 32 29 2c 24 69 6e 64 65 78 28  index(2),$index(
bde0: 33 29 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  3))]} then {..  
bdf0: 20 20 20 20 73 65 74 20 69 74 65 72 61 74 69 6f      set iteratio
be00: 6e 73 28 24 69 6e 64 65 78 28 32 29 2c 24 69 6e  ns($index(2),$in
be10: 64 65 78 28 33 29 29 20 30 0d 0a 20 20 20 20 7d  dex(3)) 0..    }
be20: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e  ....    if {![in
be30: 66 6f 20 65 78 69 73 74 73 20 69 74 65 72 61 74  fo exists iterat
be40: 69 6f 6e 73 28 24 69 6e 64 65 78 28 32 29 2c 74  ions($index(2),t
be50: 6f 74 61 6c 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  otal)]} then {..
be60: 20 20 20 20 20 20 73 65 74 20 69 74 65 72 61 74        set iterat
be70: 69 6f 6e 73 28 24 69 6e 64 65 78 28 32 29 2c 74  ions($index(2),t
be80: 6f 74 61 6c 29 20 30 0d 0a 20 20 20 20 7d 0d 0a  otal) 0..    }..
be90: 0d 0a 20 20 20 20 69 6e 63 72 20 69 74 65 72 61  ..    incr itera
bea0: 74 69 6f 6e 73 28 24 69 6e 64 65 78 28 32 29 2c  tions($index(2),
beb0: 24 69 6e 64 65 78 28 33 29 29 0d 0a 20 20 20 20  $index(3))..    
bec0: 69 6e 63 72 20 69 74 65 72 61 74 69 6f 6e 73 28  incr iterations(
bed0: 24 69 6e 64 65 78 28 32 29 2c 74 6f 74 61 6c 29  $index(2),total)
bee0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 23 23 23 23  ..  }....  #####
bef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf30: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 23 0d  ########....  #.
bf40: 0a 20 20 23 20 4e 4f 54 45 3a 20 41 64 76 61 6e  .  # NOTE: Advan
bf50: 63 65 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65  ce output to the
bf60: 20 6e 65 78 74 20 6c 69 6e 65 20 64 75 65 20 74   next line due t
bf70: 6f 20 74 68 65 20 77 6f 72 6b 6c 6f 61 64 0d 0a  o the workload..
bf80: 20 20 23 20 20 20 20 20 20 20 69 74 65 72 61 74    #       iterat
bf90: 69 6f 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 64  ion progress ind
bfa0: 69 63 61 74 6f 72 73 20 66 72 6f 6d 20 74 68 65  icators from the
bfb0: 20 66 69 6e 61 6c 20 72 75 6e 2e 0d 0a 20 20 23   final run...  #
bfc0: 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f  ..  tputs $test_
bfd0: 63 68 61 6e 6e 65 6c 20 5c 6e 0d 0a 0d 0a 20 20  channel \n....  
bfe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c020: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
c030: 0a 20 20 66 6f 72 65 61 63 68 20 69 6e 64 65 78  .  foreach index
c040: 28 30 29 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65  (0) [lsort -inte
c050: 67 65 72 20 24 77 6f 72 6b 6c 6f 61 64 4e 61 6d  ger $workloadNam
c060: 65 73 28 65 6e 61 62 6c 65 64 29 5d 20 7b 0d 0a  es(enabled)] {..
c070: 20 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f      tputs $test_
c080: 63 68 61 6e 6e 65 6c 20 5b 66 6f 72 6d 61 74 57  channel [formatW
c090: 6f 72 6b 6c 6f 61 64 52 65 73 75 6c 74 20 24 69  orkloadResult $i
c0a0: 6e 64 65 78 28 30 29 5d 0d 0a 20 20 7d 0d 0a 0d  ndex(0)]..  }...
c0b0: 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23  .  #############
c0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c100: 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 69 6e  ....  foreach in
c110: 64 65 78 28 30 29 20 5b 6c 73 6f 72 74 20 2d 69  dex(0) [lsort -i
c120: 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61  nteger [array na
c130: 6d 65 73 20 74 69 6d 65 73 5d 5d 20 7b 0d 0a 20  mes times]] {.. 
c140: 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63     tputs $test_c
c150: 68 61 6e 6e 65 6c 20 5b 66 6f 72 6d 61 74 57 6f  hannel [formatWo
c160: 72 6b 6c 6f 61 64 54 69 6d 65 20 24 69 6e 64 65  rkloadTime $inde
c170: 78 28 30 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  x(0)]..  }....  
c180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
c1d0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 73  .  set result [s
c1e0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
c1f0: 75 74 65 20 73 63 61 6c 61 72 20 24 73 72 63 44  ute scalar $srcD
c200: 62 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72  b "PRAGMA integr
c210: 69 74 79 5f 63 68 65 63 6b 3b 22 5d 0d 0a 0d 0a  ity_check;"]....
c220: 20 20 69 66 20 7b 24 72 65 73 75 6c 74 20 65 71    if {$result eq
c230: 20 22 6f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20   "ok"} then {.. 
c240: 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63     tputs $test_c
c250: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 69 6e 74  hannel "---- int
c260: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6b 20  egrity check ok 
c270: 28 73 72 63 44 62 29 5c 6e 22 0d 0a 20 20 7d 20  (srcDb)\n"..  } 
c280: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 65 72 72 6f  else {..    erro
c290: 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 69  r [appendArgs "i
c2a0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 66  ntegrity check f
c2b0: 61 69 6c 65 64 20 28 73 72 63 44 62 29 3a 20 22  ailed (srcDb): "
c2c0: 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 7d 0d 0a   $result]..  }..
c2d0: 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23  ..  ############
c2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c320: 23 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  #....  set resul
c330: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
c340: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
c350: 64 62 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67  db "PRAGMA integ
c360: 72 69 74 79 5f 63 68 65 63 6b 3b 22 5d 0d 0a 0d  rity_check;"]...
c370: 0a 20 20 69 66 20 7b 24 72 65 73 75 6c 74 20 65  .  if {$result e
c380: 71 20 22 6f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a  q "ok"} then {..
c390: 20 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f      tputs $test_
c3a0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 69 6e  channel "---- in
c3b0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6b  tegrity check ok
c3c0: 20 28 64 62 29 5c 6e 22 0d 0a 20 20 7d 20 65 6c   (db)\n"..  } el
c3d0: 73 65 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20  se {..    error 
c3e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 69 6e 74  [appendArgs "int
c3f0: 65 67 72 69 74 79 20 63 68 65 63 6b 20 66 61 69  egrity check fai
c400: 6c 65 64 20 28 64 62 29 3a 20 22 20 24 72 65 73  led (db): " $res
c410: 75 6c 74 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  ult]..  }....  #
c420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c460: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
c470: 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54    #..  # NOTE: T
c480: 68 65 20 6f 76 65 72 61 6c 6c 20 74 65 73 74 20  he overall test 
c490: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 74 6f  result is the to
c4a0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66 61  tal number of fa
c4b0: 69 6c 75 72 65 73 20 28 69 2e 65 2e 0d 0a 20 20  ilures (i.e...  
c4c0: 23 20 20 20 20 20 20 20 22 75 6e 65 78 70 65 63  #       "unexpec
c4d0: 74 65 64 20 65 72 72 6f 72 73 22 29 20 65 6e 63  ted errors") enc
c4e0: 6f 75 6e 74 65 72 65 64 20 64 75 72 69 6e 67 20  ountered during 
c4f0: 61 20 77 6f 72 6b 6c 6f 61 64 20 69 74 65 72 61  a workload itera
c500: 74 69 6f 6e 2e 0d 0a 20 20 23 0d 0a 20 20 65 78  tion...  #..  ex
c510: 70 72 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20  pr {[array size 
c520: 66 61 69 6c 75 72 65 73 5d 20 3e 20 30 20 3f 20  failures] > 0 ? 
c530: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 5b  \..      [expr [
c540: 6a 6f 69 6e 20 5b 61 72 72 61 79 20 76 61 6c 75  join [array valu
c550: 65 73 20 66 61 69 6c 75 72 65 73 5d 20 2b 5d 5d  es failures] +]]
c560: 20 3a 20 30 7d 0d 0a 7d 20 2d 63 6c 65 61 6e 75   : 0}..} -cleanu
c570: 70 20 7b 0d 0a 20 20 66 6f 72 65 61 63 68 20 69  p {..  foreach i
c580: 6e 64 65 78 28 30 29 20 5b 61 72 72 61 79 20 6e  ndex(0) [array n
c590: 61 6d 65 73 20 74 68 72 65 61 64 5d 20 7b 0d 0a  ames thread] {..
c5a0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
c5b0: 69 73 74 73 20 74 68 72 65 61 64 28 24 69 6e 64  ists thread($ind
c5c0: 65 78 28 30 29 29 5d 20 26 26 20 5c 0d 0a 20 20  ex(0))] && \..  
c5d0: 20 20 20 20 20 20 5b 63 6c 65 61 6e 75 70 54 68        [cleanupTh
c5e0: 72 65 61 64 20 24 74 68 72 65 61 64 28 24 69 6e  read $thread($in
c5f0: 64 65 78 28 30 29 29 5d 7d 20 74 68 65 6e 20 7b  dex(0))]} then {
c600: 0d 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e  ..      unset -n
c610: 6f 63 6f 6d 70 6c 61 69 6e 20 74 68 72 65 61 64  ocomplain thread
c620: 28 24 69 6e 64 65 78 28 30 29 29 0d 0a 20 20 20  ($index(0))..   
c630: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 6e   }..  }....  ren
c640: 61 6d 65 20 66 72 65 65 4d 65 6d 20 22 22 0d 0a  ame freeMem ""..
c650: 20 20 72 65 6e 61 6d 65 20 75 73 65 4d 65 6d 20    rename useMem 
c660: 22 22 0d 0a 20 20 72 65 6e 61 6d 65 20 61 6c 6c  ""..  rename all
c670: 6f 63 4d 65 6d 20 22 22 0d 0a 20 20 72 65 6e 61  ocMem ""..  rena
c680: 6d 65 20 66 61 69 6c 54 65 73 74 20 22 22 0d 0a  me failTest ""..
c690: 20 20 72 65 6e 61 6d 65 20 64 6f 6e 65 54 65 73    rename doneTes
c6a0: 74 20 22 22 0d 0a 20 20 72 65 6e 61 6d 65 20 73  t ""..  rename s
c6b0: 68 6f 77 54 65 73 74 20 22 22 0d 0a 20 20 72 65  howTest ""..  re
c6c0: 6e 61 6d 65 20 77 61 69 74 54 65 73 74 20 22 22  name waitTest ""
c6d0: 0d 0a 20 20 72 65 6e 61 6d 65 20 64 65 6c 61 79  ..  rename delay
c6e0: 54 65 73 74 20 22 22 0d 0a 20 20 72 65 6e 61 6d  Test ""..  renam
c6f0: 65 20 69 6e 69 74 54 65 73 74 20 22 22 0d 0a 20  e initTest "".. 
c700: 20 72 65 6e 61 6d 65 20 69 73 45 78 70 65 63 74   rename isExpect
c710: 65 64 45 72 72 6f 72 20 22 22 0d 0a 20 20 72 65  edError ""..  re
c720: 6e 61 6d 65 20 66 6f 72 6d 61 74 57 6f 72 6b 6c  name formatWorkl
c730: 6f 61 64 54 69 6d 65 20 22 22 0d 0a 20 20 72 65  oadTime ""..  re
c740: 6e 61 6d 65 20 66 6f 72 6d 61 74 57 6f 72 6b 6c  name formatWorkl
c750: 6f 61 64 52 65 73 75 6c 74 20 22 22 0d 0a 20 20  oadResult ""..  
c760: 72 65 6e 61 6d 65 20 73 65 74 75 70 57 6f 72 6b  rename setupWork
c770: 6c 6f 61 64 46 69 6c 65 44 62 20 22 22 0d 0a 20  loadFileDb "".. 
c780: 20 72 65 6e 61 6d 65 20 73 65 74 75 70 57 6f 72   rename setupWor
c790: 6b 6c 6f 61 64 4d 65 6d 44 62 20 22 22 0d 0a 0d  kloadMemDb ""...
c7a0: 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  .  catch {..    
c7b0: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  #..    # NOTE: W
c7c0: 65 20 6d 75 73 74 20 63 6c 65 61 72 20 74 68 65  e must clear the
c7d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c   connection pool
c7e0: 20 6e 6f 77 20 62 65 63 61 75 73 65 20 77 65 20   now because we 
c7f0: 69 6e 74 65 6e 64 0d 0a 20 20 20 20 23 20 20 20  intend..    #   
c800: 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68      to delete th
c810: 65 20 64 61 74 61 62 61 73 65 73 20 66 6f 72 20  e databases for 
c820: 74 68 69 73 20 74 65 73 74 2e 0d 0a 20 20 20 20  this test...    
c830: 23 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  #..    object in
c840: 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61  voke System.Data
c850: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
c860: 6e 6e 65 63 74 69 6f 6e 20 43 6c 65 61 72 41 6c  nnection ClearAl
c870: 6c 50 6f 6f 6c 73 0d 0a 20 20 7d 0d 0a 0d 0a 20  lPools..  }.... 
c880: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
c890: 4e 61 6d 65 28 32 29 0d 0a 20 20 63 6c 65 61 6e  Name(2)..  clean
c8a0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 28 31  upDb $fileName(1
c8b0: 29 20 73 72 63 44 62 0d 0a 0d 0a 20 20 66 6f 72  ) srcDb....  for
c8c0: 65 61 63 68 20 69 6e 64 65 78 28 30 29 20 5b 61  each index(0) [a
c8d0: 72 72 61 79 20 6e 61 6d 65 73 20 77 6f 72 6b 6c  rray names workl
c8e0: 6f 61 64 43 61 6c 6c 62 61 63 6b 73 5d 20 7b 0d  oadCallbacks] {.
c8f0: 0a 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20  .    catch {..  
c900: 20 20 20 20 6f 62 6a 65 63 74 20 72 65 6d 6f 76      object remov
c910: 65 63 61 6c 6c 62 61 63 6b 20 24 77 6f 72 6b 6c  ecallback $workl
c920: 6f 61 64 43 61 6c 6c 62 61 63 6b 73 28 24 69 6e  oadCallbacks($in
c930: 64 65 78 28 30 29 29 0d 0a 20 20 20 20 7d 0d 0a  dex(0))..    }..
c940: 20 20 7d 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43    }....  freeDbC
c950: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 69  onnection....  i
c960: 66 20 7b 21 24 6e 6f 54 72 61 63 65 7d 20 74 68  f {!$noTrace} th
c970: 65 6e 20 7b 0d 0a 20 20 20 20 63 6c 65 61 6e 75  en {..    cleanu
c980: 70 4c 6f 67 67 69 6e 67 20 24 6c 6f 67 46 69 6c  pLogging $logFil
c990: 65 4e 61 6d 65 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  eName..  }....  
c9a0: 72 65 6e 61 6d 65 20 63 6c 65 61 6e 75 70 4c 6f  rename cleanupLo
c9b0: 67 67 69 6e 67 20 22 22 0d 0a 20 20 72 65 6e 61  gging ""..  rena
c9c0: 6d 65 20 73 65 74 75 70 4c 6f 67 67 69 6e 67 20  me setupLogging 
c9d0: 22 22 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  ""....  unset -n
c9e0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
c9f0: 20 74 68 72 65 61 64 20 69 6e 64 65 78 20 77 6f   thread index wo
ca00: 72 6b 6c 6f 61 64 20 70 72 69 6f 72 69 74 79 20  rkload priority 
ca10: 6e 6f 57 6f 72 6b 6c 6f 61 64 20 5c 0d 0a 20 20  noWorkload \..  
ca20: 20 20 20 20 70 72 69 6f 72 69 74 69 65 73 20 73      priorities s
ca30: 72 63 44 62 20 64 62 20 66 69 6c 65 4e 61 6d 65  rcDb db fileName
ca40: 20 63 6f 6d 70 69 6c 65 64 20 6f 70 74 69 6f 6e   compiled option
ca50: 73 20 63 6f 75 6e 74 20 74 69 6d 65 73 20 6c 6f  s count times lo
ca60: 67 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  gFileName \..   
ca70: 20 20 20 6c 6f 67 4c 69 73 74 65 6e 65 72 20 65     logListener e
ca80: 76 65 6e 74 20 74 69 6d 65 6f 75 74 20 63 6f 6e  vent timeout con
ca90: 6e 65 63 74 69 6f 6e 20 69 6e 64 69 63 61 74 6f  nection indicato
caa0: 72 73 20 69 74 65 72 61 74 69 6f 6e 73 20 65 78  rs iterations ex
cab0: 69 74 4f 6e 46 61 69 6c 20 5c 0d 0a 20 20 20 20  itOnFail \..    
cac0: 20 20 63 6f 54 61 73 6b 4d 65 6d 20 6e 6f 54 72    coTaskMem noTr
cad0: 61 63 65 20 66 61 69 6c 75 72 65 73 20 73 74 61  ace failures sta
cae0: 74 75 73 20 77 6f 72 6b 6c 6f 61 64 4e 61 6d 65  tus workloadName
caf0: 73 20 77 6f 72 6b 6c 6f 61 64 43 61 6c 6c 62 61  s workloadCallba
cb00: 63 6b 73 0d 0a 7d 20 2d 74 69 6d 65 20 74 72 75  cks..} -time tru
cb10: 65 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  e -constraints {
cb20: 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
cb30: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
cb40: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
cb50: 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
cb60: 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61  Lite compileCSha
cb70: 72 70 7d 20 2d 72 65 73 75 6c 74 20 7b 30 7d 7d  rp} -result {0}}
cb80: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
cb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cbb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cbc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cbd0: 23 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45  ###....#..# NOTE
cbe0: 3a 20 52 65 70 6f 72 74 20 61 66 74 65 72 20 74  : Report after t
cbf0: 65 73 74 2e 0d 0a 23 0d 0a 63 68 65 63 6b 46 6f  est...#..checkFo
cc00: 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
cc10: 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  es $test_channel
cc20: 0d 0a 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c  ..getSQLiteHandl
cc30: 65 43 6f 75 6e 74 73 20 24 74 65 73 74 5f 63 68  eCounts $test_ch
cc40: 61 6e 6e 65 6c 0d 0a 72 65 70 6f 72 74 53 51 4c  annel..reportSQL
cc50: 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 74 65  iteResources $te
cc60: 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 23 23  st_channel....##
cc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
ccc0: 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70  .runSQLiteTestEp
ccd0: 69 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73 74 45  ilogue..runTestE
cce0: 70 69 6c 6f 67 75 65 0d 0a                       pilogue..