System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bafe850a439002cb73bd92a1db7be3577df63721:


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 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
0270: 73 74 20 73 74 72 65 73 73 2d 31 2e 31 20 7b 6d  st stress-1.1 {m
0280: 75 6c 74 69 74 68 72 65 61 64 65 64 20 73 74 72  ultithreaded str
0290: 65 73 73 20 74 65 73 74 69 6e 67 7d 20 2d 73 65  ess testing} -se
02a0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
02b0: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31   [set fileName(1
02c0: 29 20 3a 6d 65 6d 6f 72 79 3a 5d 20 22 22 20 22  ) :memory:] "" "
02d0: 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65  " "" "" "" false
02e0: 20 6d 65 6d 44 62 0d 0a 20 20 73 65 74 75 70 44   memDb..  setupD
02f0: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 28  b [set fileName(
0300: 32 29 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  2) [file join [g
0310: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
0320: 6f 72 79 5d 20 73 74 72 65 73 73 2e 64 62 5d 5d  ory] stress.db]]
0330: 0d 0a 0d 0a 20 20 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 23 23 23  ################
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0380: 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72  ###....  set wor
0390: 6b 6c 6f 61 64 28 31 29 20 5b 6c 69 73 74 20 5b  kload(1) [list [
03a0: 6c 69 73 74 20 6d 65 6d 44 62 20 66 69 6c 65 4e  list memDb fileN
03b0: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 5d  ame table count]
03c0: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
03d0: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
03e0: 23 31 2c 20 43 52 45 41 54 45 20 54 41 42 4c 45  #1, CREATE TABLE
03f0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20   statements...  
0400: 20 20 23 0d 0a 20 20 20 20 73 65 74 75 70 44 62    #..    setupDb
0410: 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
0420: 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 0d   "" "" "" false.
0430: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e  .    for {set in
0440: 64 65 78 20 32 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 2} {$index <
0450: 3d 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20  = $count} {incr 
0460: 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..      
0470: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
0480: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
0490: 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45           "CREATE
04a0: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
04b0: 49 53 54 53 20 74 22 20 24 69 6e 64 65 78 20 22  ISTS t" $index "
04c0: 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (x PRIMARY KEY, 
04d0: 79 2c 20 7a 29 3b 22 5d 0d 0a 20 20 20 20 20 20  y, z);"]..      
04e0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
04f0: 73 74 64 6f 75 74 20 31 3b 20 61 66 74 65 72 20  stdout 1; after 
0500: 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28  [expr {int(rand(
0510: 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 20  ) * 1000)}]..   
0520: 20 7d 0d 0a 20 20 20 20 63 6c 65 61 6e 75 70 44   }..    cleanupD
0530: 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66  b $fileName db f
0540: 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 7d 5d  alse false..  }]
0550: 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23  ....  ##########
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05a0: 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72  ###....  set wor
05b0: 6b 6c 6f 61 64 28 32 29 20 5b 6c 69 73 74 20 5b  kload(2) [list [
05c0: 6c 69 73 74 20 6d 65 6d 44 62 20 66 69 6c 65 4e  list memDb fileN
05d0: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 5d  ame table count]
05e0: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
05f0: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
0600: 23 32 2c 20 44 52 4f 50 20 54 41 42 4c 45 20 73  #2, DROP TABLE s
0610: 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20  tatements...    
0620: 23 0d 0a 20 20 20 20 73 65 74 75 70 44 62 20 24  #..    setupDb $
0630: 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
0640: 22 20 22 22 20 22 22 20 66 61 6c 73 65 0d 0a 20  " "" "" false.. 
0650: 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65     for {set inde
0660: 78 20 32 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20  x 2} {$index <= 
0670: 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e  $count} {incr in
0680: 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 73 71  dex} {..      sq
0690: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a
06a0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..   
06b0: 20 20 20 20 20 20 20 22 44 52 4f 50 20 54 41 42         "DROP TAB
06c0: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 22 20  LE IF EXISTS t" 
06d0: 24 69 6e 64 65 78 20 5c 3b 5d 0d 0a 20 20 20 20  $index \;]..    
06e0: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
06f0: 65 20 73 74 64 6f 75 74 20 32 3b 20 61 66 74 65  e stdout 2; afte
0700: 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e  r [expr {int(ran
0710: 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20  d() * 1000)}].. 
0720: 20 20 20 7d 0d 0a 20 20 20 20 63 6c 65 61 6e 75     }..    cleanu
0730: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62  pDb $fileName db
0740: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
0750: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
0760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
07a0: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
07b0: 6f 72 6b 6c 6f 61 64 28 33 29 20 5b 6c 69 73 74  orkload(3) [list
07c0: 20 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66 69 6c   [list memDb fil
07d0: 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e  eName table coun
07e0: 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  t] {..    #..   
07f0: 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61   # NOTE: Workloa
0800: 64 20 23 33 2c 20 22 73 6d 61 6c 6c 22 20 53 45  d #3, "small" SE
0810: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  LECT statements.
0820: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74  ..    #..    set
0830: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
0840: 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61  " "" "" "" "" fa
0850: 6c 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b 73 65  lse..    for {se
0860: 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64  t index 1} {$ind
0870: 65 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20 7b 69  ex <= $count} {i
0880: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
0890: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
08a0: 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
08b0: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
08c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 45  \..          "SE
08d0: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 22  LECT x, y FROM "
08e0: 20 24 74 61 62 6c 65 20 22 20 57 48 45 52 45 20   $table " WHERE 
08f0: 7a 20 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d 0d 0a  z = 'small';"]..
0900: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
0910: 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 33 3b 20  wline stdout 3; 
0920: 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74  after [expr {int
0930: 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d  (rand() * 1000)}
0940: 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 63 6c  ]..    }..    cl
0950: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
0960: 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65  e db false false
0970: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23  ..  }]....  ####
0980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09c0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73  #########....  s
09d0: 65 74 20 77 6f 72 6b 6c 6f 61 64 28 34 29 20 5b  et workload(4) [
09e0: 6c 69 73 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62  list [list memDb
09f0: 20 66 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20   fileName table 
0a00: 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d  count] {..    #.
0a10: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72  .    # NOTE: Wor
0a20: 6b 6c 6f 61 64 20 23 34 2c 20 22 62 69 67 22 20  kload #4, "big" 
0a30: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
0a40: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73  s...    #..    s
0a50: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
0a60: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" "" 
0a70: 66 61 6c 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b  false..    for {
0a80: 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69  set index 1} {$i
0a90: 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20  ndex <= $count} 
0aa0: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
0ab0: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
0ac0: 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
0ad0: 72 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  r $db [appendArg
0ae0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
0af0: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
0b00: 20 22 20 24 74 61 62 6c 65 20 22 20 57 48 45 52   " $table " WHER
0b10: 45 20 7a 20 3d 20 27 62 69 67 27 3b 22 5d 0d 0a  E z = 'big';"]..
0b20: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
0b30: 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 34 3b 20  wline stdout 4; 
0b40: 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74  after [expr {int
0b50: 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d  (rand() * 1000)}
0b60: 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 63 6c  ]..    }..    cl
0b70: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
0b80: 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65  e db false false
0b90: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23  ..  }]....  ####
0ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0be0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73  #########....  s
0bf0: 65 74 20 77 6f 72 6b 6c 6f 61 64 28 35 29 20 5b  et workload(5) [
0c00: 6c 69 73 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62  list [list memDb
0c10: 20 66 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20   fileName table 
0c20: 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d  count] {..    #.
0c30: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72  .    # NOTE: Wor
0c40: 6b 6c 6f 61 64 20 23 35 2c 20 22 73 6d 61 6c 6c  kload #5, "small
0c50: 22 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  " INSERT stateme
0c60: 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  nts...    #..   
0c70: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
0c80: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
0c90: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 66 6f 72  " false..    for
0ca0: 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b   {set index 1} {
0cb0: 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74  $index <= $count
0cc0: 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
0cd0: 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63  ..      sql exec
0ce0: 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA
0cf0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
0d00: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 20   "INSERT INTO " 
0d10: 24 74 61 62 6c 65 20 22 28 78 2c 20 79 2c 20 7a  $table "(x, y, z
0d20: 29 20 56 41 4c 55 45 53 28 27 22 20 5c 0d 0a 20  ) VALUES('" \.. 
0d30: 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74           [format
0d40: 20 25 6c 58 20 5b 65 78 70 72 20 7b 72 61 6e 64   %lX [expr {rand
0d50: 6f 6d 28 29 7d 5d 5d 20 27 2c 27 20 5c 0d 0a 20  om()}]] ',' \.. 
0d60: 20 20 20 20 20 20 20 20 20 5b 62 61 73 65 36 34           [base64
0d70: 20 65 6e 63 6f 64 65 20 5b 65 78 70 72 20 7b 72   encode [expr {r
0d80: 61 6e 64 73 74 72 28 31 30 30 30 30 29 7d 5d 5d  andstr(10000)}]]
0d90: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 27   \..          "'
0da0: 2c 27 73 6d 61 6c 6c 27 29 3b 22 5d 0d 0a 20 20  ,'small');"]..  
0db0: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
0dc0: 69 6e 65 20 73 74 64 6f 75 74 20 35 3b 20 61 66  ine stdout 5; af
0dd0: 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72  ter [expr {int(r
0de0: 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d  and() * 1000)}].
0df0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 63 6c 65 61  .    }..    clea
0e00: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
0e10: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
0e20: 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23    }]....  ######
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
0e80: 20 77 6f 72 6b 6c 6f 61 64 28 36 29 20 5b 6c 69   workload(6) [li
0e90: 73 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66  st [list memDb f
0ea0: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
0eb0: 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  unt] {..    #.. 
0ec0: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
0ed0: 6f 61 64 20 23 36 2c 20 22 62 69 67 22 20 49 4e  oad #6, "big" IN
0ee0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  SERT statements.
0ef0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74  ..    #..    set
0f00: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
0f10: 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61  " "" "" "" "" fa
0f20: 6c 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b 73 65  lse..    for {se
0f30: 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64  t index 1} {$ind
0f40: 65 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20 7b 69  ex <= $count} {i
0f50: 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..  
0f60: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
0f70: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
0f80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 49 4e  \..          "IN
0f90: 53 45 52 54 20 49 4e 54 4f 20 22 20 24 74 61 62  SERT INTO " $tab
0fa0: 6c 65 20 22 28 78 2c 20 79 2c 20 7a 29 20 56 41  le "(x, y, z) VA
0fb0: 4c 55 45 53 28 27 22 20 5c 0d 0a 20 20 20 20 20  LUES('" \..     
0fc0: 20 20 20 20 20 5b 66 6f 72 6d 61 74 20 25 6c 58       [format %lX
0fd0: 20 5b 65 78 70 72 20 7b 72 61 6e 64 6f 6d 28 29   [expr {random()
0fe0: 7d 5d 5d 20 27 2c 27 20 5c 0d 0a 20 20 20 20 20  }]] ',' \..     
0ff0: 20 20 20 20 20 5b 62 61 73 65 36 34 20 65 6e 63       [base64 enc
1000: 6f 64 65 20 5b 65 78 70 72 20 7b 72 61 6e 64 73  ode [expr {rands
1010: 74 72 28 31 30 30 30 30 30 30 30 29 7d 5d 5d 20  tr(10000000)}]] 
1020: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 27 2c  \..          "',
1030: 27 62 69 67 27 29 3b 22 5d 0d 0a 20 20 20 20 20  'big');"]..     
1040: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
1050: 20 73 74 64 6f 75 74 20 36 3b 20 61 66 74 65 72   stdout 6; after
1060: 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64   [expr {int(rand
1070: 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20  () * 1000)}]..  
1080: 20 20 7d 0d 0a 20 20 20 20 63 6c 65 61 6e 75 70    }..    cleanup
1090: 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
10a0: 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 7d  false false..  }
10b0: 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23  ]....  #########
10c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1100: 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f  ####....  set wo
1110: 72 6b 6c 6f 61 64 28 37 29 20 5b 6c 69 73 74 20  rkload(7) [list 
1120: 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66 69 6c 65  [list memDb file
1130: 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74  Name table count
1140: 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ] {..    #..    
1150: 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64  # NOTE: Workload
1160: 20 23 37 2c 20 22 73 6d 61 6c 6c 22 20 55 50 44   #7, "small" UPD
1170: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d  ATE statements..
1180: 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74 75  .    #..    setu
1190: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName ""
11a0: 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c   "" "" "" "" fal
11b0: 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74  se..    for {set
11c0: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
11d0: 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  x <= $count} {in
11e0: 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..   
11f0: 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24     sql execute $
1200: 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  db [appendArgs "
1210: 55 50 44 41 54 45 20 22 20 24 74 61 62 6c 65 20  UPDATE " $table 
1220: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  \..          " S
1230: 45 54 20 79 20 3d 20 27 22 20 5b 62 61 73 65 36  ET y = '" [base6
1240: 34 20 65 6e 63 6f 64 65 20 5b 65 78 70 72 20 7b  4 encode [expr {
1250: 72 61 6e 64 73 74 72 28 31 30 30 30 30 29 7d 5d  randstr(10000)}]
1260: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  ] \..          "
1270: 27 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27  ' WHERE x LIKE '
1280: 22 20 5b 66 6f 72 6d 61 74 20 25 58 20 24 69 6e  " [format %X $in
1290: 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a 20 3d  dex] "%' AND z =
12a0: 20 27 73 6d 61 6c 6c 27 3b 22 5d 0d 0a 20 20 20   'small';"]..   
12b0: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
12c0: 6e 65 20 73 74 64 6f 75 74 20 37 3b 20 61 66 74  ne stdout 7; aft
12d0: 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61  er [expr {int(ra
12e0: 6e 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a  nd() * 1000)}]..
12f0: 20 20 20 20 7d 0d 0a 20 20 20 20 63 6c 65 61 6e      }..    clean
1300: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64  upDb $fileName d
1310: 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  b false false.. 
1320: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
1330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1370: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20  ######....  set 
1380: 77 6f 72 6b 6c 6f 61 64 28 38 29 20 5b 6c 69 73  workload(8) [lis
1390: 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66 69  t [list memDb fi
13a0: 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75  leName table cou
13b0: 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  nt] {..    #..  
13c0: 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f    # NOTE: Worklo
13d0: 61 64 20 23 38 2c 20 22 62 69 67 22 20 55 50 44  ad #8, "big" UPD
13e0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d  ATE statements..
13f0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74 75  .    #..    setu
1400: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName ""
1410: 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c   "" "" "" "" fal
1420: 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74  se..    for {set
1430: 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde
1440: 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  x <= $count} {in
1450: 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..   
1460: 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24     sql execute $
1470: 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  db [appendArgs "
1480: 55 50 44 41 54 45 20 22 20 24 74 61 62 6c 65 20  UPDATE " $table 
1490: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  \..          " S
14a0: 45 54 20 79 20 3d 20 27 22 20 5b 62 61 73 65 36  ET y = '" [base6
14b0: 34 20 65 6e 63 6f 64 65 20 5b 65 78 70 72 20 7b  4 encode [expr {
14c0: 72 61 6e 64 73 74 72 28 31 30 30 30 30 30 30 30  randstr(10000000
14d0: 29 7d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  )}]] \..        
14e0: 20 20 22 27 20 57 48 45 52 45 20 78 20 4c 49 4b    "' WHERE x LIK
14f0: 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20  E '" [format %X 
1500: 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20  $index] "%' AND 
1510: 7a 20 3d 20 27 62 69 67 27 3b 22 5d 0d 0a 20 20  z = 'big';"]..  
1520: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
1530: 69 6e 65 20 73 74 64 6f 75 74 20 38 3b 20 61 66  ine stdout 8; af
1540: 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72  ter [expr {int(r
1550: 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d  and() * 1000)}].
1560: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 63 6c 65 61  .    }..    clea
1570: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
1580: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
1590: 20 20 7d 5d 0d 0a 0d 0a 20 20 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 23  ################
15e0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
15f0: 20 77 6f 72 6b 6c 6f 61 64 28 39 29 20 5b 6c 69   workload(9) [li
1600: 73 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66  st [list memDb f
1610: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
1620: 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  unt] {..    #.. 
1630: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
1640: 6f 61 64 20 23 39 2c 20 22 73 6d 61 6c 6c 22 20  oad #9, "small" 
1650: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
1660: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73  s...    #..    s
1670: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
1680: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" "" 
1690: 66 61 6c 73 65 0d 0a 20 20 20 20 66 6f 72 20 7b  false..    for {
16a0: 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69  set index 1} {$i
16b0: 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20  ndex <= $count} 
16c0: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
16d0: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
16e0: 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  e $db [appendArg
16f0: 73 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 22  s "DELETE FROM "
1700: 20 24 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20   $table \..     
1710: 20 20 20 20 20 22 20 57 48 45 52 45 20 78 20 4c       " WHERE x L
1720: 49 4b 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25  IKE '" [format %
1730: 58 20 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e  X $index] "%' AN
1740: 44 20 7a 20 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d  D z = 'small';"]
1750: 0d 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  ..      puts -no
1760: 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 39  newline stdout 9
1770: 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69  ; after [expr {i
1780: 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30  nt(rand() * 1000
1790: 29 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  )}]..    }..    
17a0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
17b0: 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c  ame db false fal
17c0: 73 65 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23  se..  }]....  ##
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 23 23 0d 0a 0d 0a 20  ###########.... 
1820: 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 31 30   set workload(10
1830: 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20 6d 65  ) [list [list me
1840: 6d 44 62 20 66 69 6c 65 4e 61 6d 65 20 74 61 62  mDb fileName tab
1850: 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20  le count] {..   
1860: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
1870: 57 6f 72 6b 6c 6f 61 64 20 23 31 30 2c 20 22 62  Workload #10, "b
1880: 69 67 22 20 44 45 4c 45 54 45 20 73 74 61 74 65  ig" DELETE state
1890: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20  ments...    #.. 
18a0: 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65     setupDb $file
18b0: 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22  Name "" "" "" ""
18c0: 20 22 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 66   "" false..    f
18d0: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
18e0: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
18f0: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
1900: 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78   {..      sql ex
1910: 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e  ecute $db [appen
1920: 64 41 72 67 73 20 22 44 45 4c 45 54 45 20 46 52  dArgs "DELETE FR
1930: 4f 4d 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20  OM " $table \.. 
1940: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
1950: 20 78 20 4c 49 4b 45 20 27 22 20 5b 66 6f 72 6d   x LIKE '" [form
1960: 61 74 20 25 58 20 24 69 6e 64 65 78 5d 20 22 25  at %X $index] "%
1970: 27 20 41 4e 44 20 7a 20 3d 20 27 62 69 67 27 3b  ' AND z = 'big';
1980: 22 5d 0d 0a 20 20 20 20 20 20 70 75 74 73 20 2d  "]..      puts -
1990: 6e 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74  nonewline stdout
19a0: 20 41 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20   A; after [expr 
19b0: 7b 69 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30  {int(rand() * 10
19c0: 30 30 29 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20  00)}]..    }..  
19d0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
19e0: 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66  eName db false f
19f0: 61 6c 73 65 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  alse..  }]....  
1a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1a50: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
1a60: 31 31 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20  11) [list [list 
1a70: 6d 65 6d 44 62 20 66 69 6c 65 4e 61 6d 65 20 74  memDb fileName t
1a80: 61 62 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20  able count] {.. 
1a90: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
1aa0: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 31 2c 20  : Workload #11, 
1ab0: 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e 74  VACUUM statement
1ac0: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65  ...    #..    se
1ad0: 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  tupDb $fileName 
1ae0: 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66  "" "" "" "" "" f
1af0: 61 6c 73 65 0d 0a 20 20 20 20 73 71 6c 20 65 78  alse..    sql ex
1b00: 65 63 75 74 65 20 24 64 62 20 22 56 41 43 55 55  ecute $db "VACUU
1b10: 4d 3b 22 0d 0a 20 20 20 20 70 75 74 73 20 2d 6e  M;"..    puts -n
1b20: 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74 20  onewline stdout 
1b30: 42 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20 7b  B; after [expr {
1b40: 69 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30 30  int(rand() * 100
1b50: 30 29 7d 5d 0d 0a 20 20 20 20 63 6c 65 61 6e 75  0)}]..    cleanu
1b60: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62  pDb $fileName db
1b70: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
1b80: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
1b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bd0: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
1be0: 6f 72 6b 6c 6f 61 64 28 31 32 29 20 5b 6c 69 73  orkload(12) [lis
1bf0: 74 20 5b 6c 69 73 74 20 6d 65 6d 44 62 20 66 69  t [list memDb fi
1c00: 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75  leName table cou
1c10: 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  nt] {..    #..  
1c20: 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f    # NOTE: Worklo
1c30: 61 64 20 23 31 32 2c 20 62 61 63 6b 75 70 20 66  ad #12, backup f
1c40: 72 6f 6d 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  rom an in-memory
1c50: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
1c60: 23 0d 0a 20 20 20 20 73 65 74 20 69 64 20 5b 6f  #..    set id [o
1c70: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
1c80: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
1c90: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 0d 0a 20 20  ve NextId]....  
1ca0: 20 20 73 65 74 20 6d 65 6d 53 6f 75 72 63 65 20    set memSource 
1cb0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
1cc0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1cd0: 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e   -objectflags +N
1ce0: 6f 44 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20  oDispose \..    
1cf0: 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 72 2e      Interpreter.
1d00: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63  GetActive.connec
1d10: 74 69 6f 6e 73 20 67 65 74 5f 49 74 65 6d 20 24  tions get_Item $
1d20: 6d 65 6d 44 62 5d 0d 0a 0d 0a 20 20 20 20 73 65  memDb]....    se
1d30: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
1d40: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
1d50: 20 7b 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20   {..      using 
1d60: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 20 20 75  System;..      u
1d70: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1d80: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 20 20  .SQLite;..      
1d90: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
1da0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 61 6d 65  t;....      name
1db0: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
1dc0: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
1dd0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1de0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
1df0: 69 64 7d 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  id}..        {..
1e00: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e10: 20 73 74 61 74 69 63 20 76 6f 69 64 20 42 61 63   static void Bac
1e20: 6b 75 70 41 6e 64 47 65 74 44 61 74 61 28 0d 0a  kupAndGetData(..
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1e40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 6f 75  teConnection sou
1e50: 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
1e60: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d   )..          {.
1e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
1e80: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
1e90: 74 69 6f 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e  tion destination
1ea0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
1eb0: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
1ec0: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
1ed0: 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d  Source=${fileNam
1ee0: 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20  e};"))..        
1ef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f00: 20 20 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e       destination
1f10: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
1f20: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e 42          source.B
1f30: 61 63 6b 75 70 44 61 74 61 62 61 73 65 28 64 65  ackupDatabase(de
1f40: 73 74 69 6e 61 74 69 6f 6e 2c 20 22 6d 61 69 6e  stination, "main
1f50: 22 2c 20 22 6d 61 69 6e 22 2c 20 2d 31 2c 20 6e  ", "main", -1, n
1f60: 75 6c 6c 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  ull, 0);..      
1f70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fe0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1ff0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
2000: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2010: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
2020: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
2030: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2040: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 5d  .      }..    }]
2050: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
2060: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
2070: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2080: 65 2e 64 6c 6c 5d 0d 0a 20 20 20 20 69 66 20 7b  e.dll]..    if {
2090: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 7d 20 74  $code eq "Ok"} t
20a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6f 62 6a  hen {..      obj
20b0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
20c0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
20d0: 64 7d 20 42 61 63 6b 75 70 41 6e 64 47 65 74 44  d} BackupAndGetD
20e0: 61 74 61 20 24 6d 65 6d 53 6f 75 72 63 65 0d 0a  ata $memSource..
20f0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2100: 20 20 20 20 65 72 72 6f 72 20 24 65 72 72 6f 72      error $error
2110: 73 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 70 75  s..    }..    pu
2120: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74  ts -nonewline st
2130: 64 6f 75 74 20 43 3b 20 61 66 74 65 72 20 5b 65  dout C; after [e
2140: 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28 29 20  xpr {int(rand() 
2150: 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 7d 5d 0d  * 1000)}]..  }].
2160: 0a 0d 0a 20 20 23 23 23 23 23 23 23 23 23 23 23  ...  ###########
2170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21b0: 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77 6f 72 6b  ##....  set work
21c0: 6c 6f 61 64 28 31 33 29 20 5b 6c 69 73 74 20 5b  load(13) [list [
21d0: 6c 69 73 74 20 6d 65 6d 44 62 20 66 69 6c 65 4e  list memDb fileN
21e0: 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e 74 5d  ame table count]
21f0: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
2200: 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61 64 20   NOTE: Workload 
2210: 23 31 33 2c 20 62 61 63 6b 75 70 20 74 6f 20 69  #13, backup to i
2220: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2230: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73  e...    #..    s
2240: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
2250: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" "" 
2260: 66 61 6c 73 65 0d 0a 20 20 20 20 70 75 74 73 20  false..    puts 
2270: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75  -nonewline stdou
2280: 74 20 44 3b 20 61 66 74 65 72 20 5b 65 78 70 72  t D; after [expr
2290: 20 7b 69 6e 74 28 72 61 6e 64 28 29 20 2a 20 31   {int(rand() * 1
22a0: 30 30 30 29 7d 5d 0d 0a 20 20 20 20 63 6c 65 61  000)}]..    clea
22b0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
22c0: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
22d0: 20 20 7d 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d    }]..} -body {.
22e0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
22f0: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
2300: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74   IF NOT EXISTS t
2310: 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  1(x PRIMARY KEY,
2320: 20 79 2c 20 7a 29 3b 22 0d 0a 0d 0a 20 20 75 6e   y, z);"....  un
2330: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
2340: 74 68 72 65 61 64 0d 0a 0d 0a 20 20 66 6f 72 65  thread....  fore
2350: 61 63 68 20 69 6e 64 65 78 20 5b 61 72 72 61 79  ach index [array
2360: 20 6e 61 6d 65 73 20 77 6f 72 6b 6c 6f 61 64 5d   names workload]
2370: 20 7b 0d 0a 20 20 20 20 73 65 74 20 74 68 72 65   {..    set thre
2380: 61 64 28 24 69 6e 64 65 78 29 20 5b 6f 62 6a 65  ad($index) [obje
2390: 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
23a0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
23b0: 67 2e 54 68 72 65 61 64 20 5c 0d 0a 20 20 20 20  g.Thread \..    
23c0: 20 20 20 20 5b 6c 69 73 74 20 61 70 70 6c 79 20      [list apply 
23d0: 24 77 6f 72 6b 6c 6f 61 64 28 24 69 6e 64 65 78  $workload($index
23e0: 29 20 24 6d 65 6d 44 62 20 24 66 69 6c 65 4e 61  ) $memDb $fileNa
23f0: 6d 65 28 32 29 20 74 31 20 31 30 5d 5d 0d 0a 20  me(2) t1 10]].. 
2400: 20 7d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20   }....  foreach 
2410: 69 6e 64 65 78 20 5b 61 72 72 61 79 20 6e 61 6d  index [array nam
2420: 65 73 20 74 68 72 65 61 64 5d 20 7b 0d 0a 20 20  es thread] {..  
2430: 20 20 24 74 68 72 65 61 64 28 24 69 6e 64 65 78    $thread($index
2440: 29 20 53 74 61 72 74 0d 0a 20 20 7d 0d 0a 0d 0a  ) Start..  }....
2450: 20 20 66 6f 72 65 61 63 68 20 69 6e 64 65 78 20    foreach index 
2460: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 74 68 72  [array names thr
2470: 65 61 64 5d 20 7b 0d 0a 20 20 20 20 24 74 68 72  ead] {..    $thr
2480: 65 61 64 28 24 69 6e 64 65 78 29 20 4a 6f 69 6e  ead($index) Join
2490: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 70 75 74 73 20  ..  }....  puts 
24a0: 73 74 64 6f 75 74 20 22 22 0d 0a 7d 20 2d 63 6c  stdout ""..} -cl
24b0: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
24c0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 28 32  upDb $fileName(2
24d0: 29 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  )..  cleanupDb $
24e0: 66 69 6c 65 4e 61 6d 65 28 31 29 20 6d 65 6d 44  fileName(1) memD
24f0: 62 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  b....  unset -no
2500: 63 6f 6d 70 6c 61 69 6e 20 74 68 72 65 61 64 20  complain thread 
2510: 77 6f 72 6b 6c 6f 61 64 20 69 6e 64 65 78 20 6d  workload index m
2520: 65 6d 44 62 20 64 62 20 66 69 6c 65 4e 61 6d 65  emDb db fileName
2530: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
2540: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
2550: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
2560: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
2570: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
2580: 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
2590: 20 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23   {}}....########
25a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25e0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51  #######....runSQ
25f0: 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65  LiteTestEpilogue
2600: 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75  ..runTestEpilogu
2610: 65 0d 0a                                         e..