System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 129c531ba84cfc6ad154fbe6186350629266fa5a:


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 20 63 6f 75  tup {..  set cou
02b0: 6e 74 28 30 29 20 31 0d 0a 20 20 73 65 74 20 63  nt(0) 1..  set c
02c0: 6f 75 6e 74 28 31 29 20 31 30 0d 0a 0d 0a 20 20  ount(1) 10....  
02d0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
02e0: 20 61 72 67 76 5d 20 26 26 20 5b 6c 6c 65 6e 67   argv] && [lleng
02f0: 74 68 20 24 61 72 67 76 5d 20 3e 20 30 7d 20 74  th $argv] > 0} t
0300: 68 65 6e 20 7b 0d 0a 20 20 20 20 70 61 72 73 65  hen {..    parse
0310: 20 6f 70 74 69 6f 6e 73 20 5b 6c 69 73 74 20 5c   options [list \
0320: 0d 0a 20 20 20 20 20 20 20 20 7b 6e 75 6c 6c 20  ..        {null 
0330: 4d 75 73 74 48 61 76 65 49 6e 74 65 67 65 72 56  MustHaveIntegerV
0340: 61 6c 75 65 20 2d 31 20 2d 31 20 2d 63 6f 75 6e  alue -1 -1 -coun
0350: 74 30 20 24 63 6f 75 6e 74 28 30 29 7d 20 5c 0d  t0 $count(0)} \.
0360: 0a 20 20 20 20 20 20 20 20 7b 6e 75 6c 6c 20 4d  .        {null M
0370: 75 73 74 48 61 76 65 49 6e 74 65 67 65 72 56 61  ustHaveIntegerVa
0380: 6c 75 65 20 2d 31 20 2d 31 20 2d 63 6f 75 6e 74  lue -1 -1 -count
0390: 31 20 24 63 6f 75 6e 74 28 31 29 7d 5d 20 24 61  1 $count(1)}] $a
03a0: 72 67 76 0d 0a 0d 0a 20 20 20 20 73 65 74 20 63  rgv....    set c
03b0: 6f 75 6e 74 28 30 29 20 24 6f 70 74 69 6f 6e 73  ount(0) $options
03c0: 28 2d 63 6f 75 6e 74 30 2c 76 61 6c 75 65 29 0d  (-count0,value).
03d0: 0a 20 20 20 20 73 65 74 20 63 6f 75 6e 74 28 31  .    set count(1
03e0: 29 20 24 6f 70 74 69 6f 6e 73 28 2d 63 6f 75 6e  ) $options(-coun
03f0: 74 31 2c 76 61 6c 75 65 29 0d 0a 20 20 7d 0d 0a  t1,value)..  }..
0400: 0d 0a 20 20 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 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65  #....  tputs $te
0460: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
0470: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
0480: 22 2d 2d 2d 2d 20 72 65 70 65 61 74 69 6e 67 20  "---- repeating 
0490: 61 6c 6c 20 77 6f 72 6b 6c 6f 61 64 73 20 22 20  all workloads " 
04a0: 24 63 6f 75 6e 74 28 30 29 20 22 20 74 69 6d 65  $count(0) " time
04b0: 28 73 29 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20  (s)...\n"]....  
04c0: 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61 6e  tputs $test_chan
04d0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs 
04e0: 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d 2d 20 77  \..      "---- w
04f0: 6f 72 6b 6c 6f 61 64 73 20 77 69 6c 6c 20 68 61  orkloads will ha
0500: 76 65 20 22 20 24 63 6f 75 6e 74 28 31 29 20 22  ve " $count(1) "
0510: 20 69 74 65 72 61 74 69 6f 6e 28 73 29 2e 2e 2e   iteration(s)...
0520: 5c 6e 22 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  \n"]....  ######
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 23 23  ################
0550: 23 23 23 23 23 23 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 0d 0a 0d 0a 20 20 73 65 74  #######....  set
0580: 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
0590: 6d 65 28 31 29 20 3a 6d 65 6d 6f 72 79 3a 5d 20  me(1) :memory:] 
05a0: 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66  "" "" "" "" "" f
05b0: 61 6c 73 65 20 73 72 63 44 62 0d 0a 20 20 73 65  alse srcDb..  se
05c0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
05d0: 61 6d 65 28 32 29 20 5b 66 69 6c 65 20 6a 6f 69  ame(2) [file joi
05e0: 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
05f0: 72 65 63 74 6f 72 79 5d 20 73 74 72 65 73 73 2e  rectory] stress.
0600: 64 62 5d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23  db]]....  ######
0610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0650: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
0660: 20 77 6f 72 6b 6c 6f 61 64 28 31 29 20 5b 6c 69   workload(1) [li
0670: 73 74 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66  st [list srcDb f
0680: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
0690: 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  unt] {..    #.. 
06a0: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
06b0: 6f 61 64 20 23 31 2c 20 43 52 45 41 54 45 20 54  oad #1, CREATE T
06c0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 2e  ABLE statements.
06d0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
06e0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..     
06f0: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
0700: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
0710: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66  " false..      f
0720: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 32 7d  or {set index 2}
0730: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
0740: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
0750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql 
0760: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app
0770: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
0780: 20 20 20 20 20 20 20 22 43 52 45 41 54 45 20 54         "CREATE T
0790: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
07a0: 54 53 20 74 22 20 24 69 6e 64 65 78 20 22 28 78  TS t" $index "(x
07b0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c   PRIMARY KEY, y,
07c0: 20 7a 29 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20   z);"]..        
07d0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
07e0: 73 74 64 6f 75 74 20 31 3b 20 61 66 74 65 72 20  stdout 1; after 
07f0: 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28  [expr {int(rand(
0800: 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 20  ) * 1000)}]..   
0810: 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61     }..      clea
0820: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
0830: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
0840: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
0850: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  en {..      if {
0860: 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73 6e 6f  [regexp -- {\sno
0870: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31 5c   such table: t1\
0880: 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  s} $error]} then
0890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73   {..        puts
08a0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f   -nonewline stdo
08b0: 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ut *..      } el
08c0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75  se {..        pu
08d0: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
08e0: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
08f0: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 69  t [appendArgs [i
0900: 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e 66 6f 20  nfo level [info 
0910: 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20 24 65 72  level]] ": " $er
0920: 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20 20 70 75  ror]..        pu
0930: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
0940: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
0950: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
0960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0970: 23 23 23 23 23 23 23 23 23 23 23 23 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 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
09b0: 6f 72 6b 6c 6f 61 64 28 32 29 20 5b 6c 69 73 74  orkload(2) [list
09c0: 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66 69 6c   [list srcDb fil
09d0: 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e  eName table coun
09e0: 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  t] {..    #..   
09f0: 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61   # NOTE: Workloa
0a00: 64 20 23 32 2c 20 44 52 4f 50 20 54 41 42 4c 45  d #2, DROP TABLE
0a10: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 20 20   statements...  
0a20: 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 63 61    #..    if {[ca
0a30: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  tch {..      set
0a40: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
0a50: 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61  " "" "" "" "" fa
0a60: 6c 73 65 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b  lse..      for {
0a70: 73 65 74 20 69 6e 64 65 78 20 32 7d 20 7b 24 69  set index 2} {$i
0a80: 6e 64 65 78 20 3c 3d 20 24 63 6f 75 6e 74 7d 20  ndex <= $count} 
0a90: 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
0aa0: 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63          sql exec
0ab0: 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA
0ac0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
0ad0: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49     "DROP TABLE I
0ae0: 46 20 45 58 49 53 54 53 20 74 22 20 24 69 6e 64  F EXISTS t" $ind
0af0: 65 78 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 20 20  ex \;]..        
0b00: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
0b10: 73 74 64 6f 75 74 20 32 3b 20 61 66 74 65 72 20  stdout 2; after 
0b20: 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28  [expr {int(rand(
0b30: 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 20  ) * 1000)}]..   
0b40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61     }..      clea
0b50: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
0b60: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
0b70: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
0b80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  en {..      if {
0b90: 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73 6e 6f  [regexp -- {\sno
0ba0: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31 5c   such table: t1\
0bb0: 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  s} $error]} then
0bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73   {..        puts
0bd0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f   -nonewline stdo
0be0: 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ut *..      } el
0bf0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75  se {..        pu
0c00: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
0c10: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
0c20: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 69  t [appendArgs [i
0c30: 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e 66 6f 20  nfo level [info 
0c40: 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20 24 65 72  level]] ": " $er
0c50: 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20 20 70 75  ror]..        pu
0c60: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
0c70: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
0c80: 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23 23  }]....  ########
0c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cd0: 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
0ce0: 6f 72 6b 6c 6f 61 64 28 33 29 20 5b 6c 69 73 74  orkload(3) [list
0cf0: 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66 69 6c   [list srcDb fil
0d00: 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e  eName table coun
0d10: 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  t] {..    #..   
0d20: 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61   # NOTE: Workloa
0d30: 64 20 23 33 2c 20 22 73 6d 61 6c 6c 22 20 53 45  d #3, "small" SE
0d40: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  LECT statements.
0d50: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
0d60: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..     
0d70: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
0d80: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
0d90: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66  " false..      f
0da0: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
0db0: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
0dc0: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
0dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql 
0de0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
0df0: 20 72 65 61 64 65 72 20 24 64 62 20 5b 61 70 70   reader $db [app
0e00: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
0e10: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78         "SELECT x
0e20: 2c 20 79 20 46 52 4f 4d 20 22 20 24 74 61 62 6c  , y FROM " $tabl
0e30: 65 20 22 20 57 48 45 52 45 20 7a 20 3d 20 27 73  e " WHERE z = 's
0e40: 6d 61 6c 6c 27 3b 22 5d 0d 0a 20 20 20 20 20 20  mall';"]..      
0e50: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
0e60: 65 20 73 74 64 6f 75 74 20 33 3b 20 61 66 74 65  e stdout 3; afte
0e70: 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e  r [expr {int(ran
0e80: 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20  d() * 1000)}].. 
0e90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c       }..      cl
0ea0: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
0eb0: 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65  e db false false
0ec0: 0d 0a 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20  ..    } error]} 
0ed0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66  then {..      if
0ee0: 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73   {[regexp -- {\s
0ef0: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74  no such table: t
0f00: 31 5c 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74 68  1\s} $error]} th
0f10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75  en {..        pu
0f20: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74  ts -nonewline st
0f30: 64 6f 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d 20  dout *..      } 
0f40: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
0f50: 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a  puts stdout ""..
0f60: 20 20 20 20 20 20 20 20 70 75 74 73 20 73 74 64          puts std
0f70: 6f 75 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  out [appendArgs 
0f80: 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e 66  [info level [inf
0f90: 6f 20 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20 24  o level]] ": " $
0fa0: 65 72 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20 20  error]..        
0fb0: 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a  puts stdout ""..
0fc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
0fd0: 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23    }]....  ######
0fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1020: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
1030: 20 77 6f 72 6b 6c 6f 61 64 28 34 29 20 5b 6c 69   workload(4) [li
1040: 73 74 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66  st [list srcDb f
1050: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
1060: 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  unt] {..    #.. 
1070: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
1080: 6f 61 64 20 23 34 2c 20 22 62 69 67 22 20 53 45  oad #4, "big" SE
1090: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  LECT statements.
10a0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
10b0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..     
10c0: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
10d0: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
10e0: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66  " false..      f
10f0: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
1100: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
1110: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
1120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql 
1130: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
1140: 20 72 65 61 64 65 72 20 24 64 62 20 5b 61 70 70   reader $db [app
1150: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
1160: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78         "SELECT x
1170: 2c 20 79 20 46 52 4f 4d 20 22 20 24 74 61 62 6c  , y FROM " $tabl
1180: 65 20 22 20 57 48 45 52 45 20 7a 20 3d 20 27 62  e " WHERE z = 'b
1190: 69 67 27 3b 22 5d 0d 0a 20 20 20 20 20 20 20 20  ig';"]..        
11a0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
11b0: 73 74 64 6f 75 74 20 34 3b 20 61 66 74 65 72 20  stdout 4; after 
11c0: 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28  [expr {int(rand(
11d0: 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 20  ) * 1000)}]..   
11e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c 65 61     }..      clea
11f0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
1200: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  db false false..
1210: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
1220: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  en {..      if {
1230: 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73 6e 6f  [regexp -- {\sno
1240: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31 5c   such table: t1\
1250: 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74 68 65 6e  s} $error]} then
1260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73   {..        puts
1270: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74 64 6f   -nonewline stdo
1280: 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ut *..      } el
1290: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75  se {..        pu
12a0: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
12b0: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
12c0: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 69  t [appendArgs [i
12d0: 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e 66 6f 20  nfo level [info 
12e0: 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20 24 65 72  level]] ": " $er
12f0: 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20 20 70 75  ror]..        pu
1300: 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a 20 20  ts stdout ""..  
1310: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
1320: 7d 5d 0d 0a 0d 0a 20 20 23 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 0d 0a 0d 0a 20 20 73 65 74 20 77  #####....  set w
1380: 6f 72 6b 6c 6f 61 64 28 35 29 20 5b 6c 69 73 74  orkload(5) [list
1390: 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66 69 6c   [list srcDb fil
13a0: 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f 75 6e  eName table coun
13b0: 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  t] {..    #..   
13c0: 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c 6f 61   # NOTE: Workloa
13d0: 64 20 23 35 2c 20 22 73 6d 61 6c 6c 22 20 49 4e  d #5, "small" IN
13e0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  SERT statements.
13f0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
1400: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..     
1410: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
1420: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
1430: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66  " false..      f
1440: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
1450: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
1460: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
1470: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql 
1480: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app
1490: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
14a0: 20 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49         "INSERT I
14b0: 4e 54 4f 20 22 20 24 74 61 62 6c 65 20 22 28 78  NTO " $table "(x
14c0: 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27  , y, z) VALUES('
14d0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..           
14e0: 20 5b 66 6f 72 6d 61 74 20 25 6c 58 20 5b 65 78   [format %lX [ex
14f0: 70 72 20 7b 72 61 6e 64 6f 6d 28 29 7d 5d 5d 20  pr {random()}]] 
1500: 27 2c 27 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ',' \..         
1510: 20 20 20 5b 62 61 73 65 36 34 20 65 6e 63 6f 64     [base64 encod
1520: 65 20 5b 65 78 70 72 20 7b 72 61 6e 64 73 74 72  e [expr {randstr
1530: 28 31 30 30 30 30 29 7d 5d 5d 20 5c 0d 0a 20 20  (10000)}]] \..  
1540: 20 20 20 20 20 20 20 20 20 20 22 27 2c 27 73 6d            "','sm
1550: 61 6c 6c 27 29 3b 22 5d 0d 0a 20 20 20 20 20 20  all');"]..      
1560: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
1570: 65 20 73 74 64 6f 75 74 20 35 3b 20 61 66 74 65  e stdout 5; afte
1580: 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e  r [expr {int(ran
1590: 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20  d() * 1000)}].. 
15a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 6c       }..      cl
15b0: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
15c0: 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65  e db false false
15d0: 0d 0a 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20  ..    } error]} 
15e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66  then {..      if
15f0: 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c 73   {[regexp -- {\s
1600: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74  no such table: t
1610: 31 5c 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74 68  1\s} $error]} th
1620: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75  en {..        pu
1630: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73 74  ts -nonewline st
1640: 64 6f 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d 20  dout *..      } 
1650: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
1660: 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a  puts stdout ""..
1670: 20 20 20 20 20 20 20 20 70 75 74 73 20 73 74 64          puts std
1680: 6f 75 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  out [appendArgs 
1690: 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e 66  [info level [inf
16a0: 6f 20 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20 24  o level]] ": " $
16b0: 65 72 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20 20  error]..        
16c0: 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d 0a  puts stdout ""..
16d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
16e0: 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23    }]....  ######
16f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1730: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65 74  #######....  set
1740: 20 77 6f 72 6b 6c 6f 61 64 28 36 29 20 5b 6c 69   workload(6) [li
1750: 73 74 20 5b 6c 69 73 74 20 73 72 63 44 62 20 66  st [list srcDb f
1760: 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63 6f  ileName table co
1770: 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  unt] {..    #.. 
1780: 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b 6c     # NOTE: Workl
1790: 6f 61 64 20 23 36 2c 20 22 62 69 67 22 20 49 4e  oad #6, "big" IN
17a0: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  SERT statements.
17b0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
17c0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..     
17d0: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
17e0: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
17f0: 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 66  " false..      f
1800: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
1810: 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24 63 6f 75   {$index <= $cou
1820: 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d  nt} {incr index}
1830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql 
1840: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app
1850: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
1860: 20 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49         "INSERT I
1870: 4e 54 4f 20 22 20 24 74 61 62 6c 65 20 22 28 78  NTO " $table "(x
1880: 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27  , y, z) VALUES('
1890: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..           
18a0: 20 5b 66 6f 72 6d 61 74 20 25 6c 58 20 5b 65 78   [format %lX [ex
18b0: 70 72 20 7b 72 61 6e 64 6f 6d 28 29 7d 5d 5d 20  pr {random()}]] 
18c0: 27 2c 27 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ',' \..         
18d0: 20 20 20 5b 62 61 73 65 36 34 20 65 6e 63 6f 64     [base64 encod
18e0: 65 20 5b 65 78 70 72 20 7b 72 61 6e 64 73 74 72  e [expr {randstr
18f0: 28 31 30 30 30 30 30 30 30 29 7d 5d 5d 20 5c 0d  (10000000)}]] \.
1900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 27 2c  .            "',
1910: 27 62 69 67 27 29 3b 22 5d 0d 0a 20 20 20 20 20  'big');"]..     
1920: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
1930: 6e 65 20 73 74 64 6f 75 74 20 36 3b 20 61 66 74  ne stdout 6; aft
1940: 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61  er [expr {int(ra
1950: 6e 64 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a  nd() * 1000)}]..
1960: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63        }..      c
1970: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
1980: 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73  me db false fals
1990: 65 0d 0a 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d  e..    } error]}
19a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69   then {..      i
19b0: 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5c  f {[regexp -- {\
19c0: 73 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  sno such table: 
19d0: 74 31 5c 73 7d 20 24 65 72 72 6f 72 5d 7d 20 74  t1\s} $error]} t
19e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 70  hen {..        p
19f0: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73  uts -nonewline s
1a00: 74 64 6f 75 74 20 2a 0d 0a 20 20 20 20 20 20 7d  tdout *..      }
1a10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
1a20: 20 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d   puts stdout "".
1a30: 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 73 74  .        puts st
1a40: 64 6f 75 74 20 5b 61 70 70 65 6e 64 41 72 67 73  dout [appendArgs
1a50: 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 5b 69 6e   [info level [in
1a60: 66 6f 20 6c 65 76 65 6c 5d 5d 20 22 3a 20 22 20  fo level]] ": " 
1a70: 24 65 72 72 6f 72 5d 0d 0a 20 20 20 20 20 20 20  $error]..       
1a80: 20 70 75 74 73 20 73 74 64 6f 75 74 20 22 22 0d   puts stdout "".
1a90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1aa0: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23  .  }]....  #####
1ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 73 65  ########....  se
1b00: 74 20 77 6f 72 6b 6c 6f 61 64 28 37 29 20 5b 6c  t workload(7) [l
1b10: 69 73 74 20 5b 6c 69 73 74 20 73 72 63 44 62 20  ist [list srcDb 
1b20: 66 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65 20 63  fileName table c
1b30: 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23 0d 0a  ount] {..    #..
1b40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f 72 6b      # NOTE: Work
1b50: 6c 6f 61 64 20 23 37 2c 20 22 73 6d 61 6c 6c 22  load #7, "small"
1b60: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1b70: 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ts...    #..    
1b80: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..  
1b90: 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c      setupDb $fil
1ba0: 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
1bb0: 22 20 22 22 20 66 61 6c 73 65 0d 0a 20 20 20 20  " "" false..    
1bc0: 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
1bd0: 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24   1} {$index <= $
1be0: 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64  count} {incr ind
1bf0: 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  ex} {..        s
1c00: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
1c10: 61 70 70 65 6e 64 41 72 67 73 20 22 55 50 44 41  appendArgs "UPDA
1c20: 54 45 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20  TE " $table \.. 
1c30: 20 20 20 20 20 20 20 20 20 20 20 22 20 53 45 54             " SET
1c40: 20 79 20 3d 20 27 22 20 5b 62 61 73 65 36 34 20   y = '" [base64 
1c50: 65 6e 63 6f 64 65 20 5b 65 78 70 72 20 7b 72 61  encode [expr {ra
1c60: 6e 64 73 74 72 28 31 30 30 30 30 29 7d 5d 5d 20  ndstr(10000)}]] 
1c70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1c80: 27 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27  ' WHERE x LIKE '
1c90: 22 20 5b 66 6f 72 6d 61 74 20 25 58 20 24 69 6e  " [format %X $in
1ca0: 64 65 78 5d 20 22 25 27 20 41 4e 44 20 7a 20 3d  dex] "%' AND z =
1cb0: 20 27 73 6d 61 6c 6c 27 3b 22 5d 0d 0a 20 20 20   'small';"]..   
1cc0: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
1cd0: 6c 69 6e 65 20 73 74 64 6f 75 74 20 37 3b 20 61  line stdout 7; a
1ce0: 66 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28  fter [expr {int(
1cf0: 72 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d 5d  rand() * 1000)}]
1d00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
1d10: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1d20: 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61  Name db false fa
1d30: 6c 73 65 0d 0a 20 20 20 20 7d 20 65 72 72 6f 72  lse..    } error
1d40: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
1d50: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20   if {[regexp -- 
1d60: 7b 5c 73 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  {\sno such table
1d70: 3a 20 74 31 5c 73 7d 20 24 65 72 72 6f 72 5d 7d  : t1\s} $error]}
1d80: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
1d90: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
1da0: 20 73 74 64 6f 75 74 20 2a 0d 0a 20 20 20 20 20   stdout *..     
1db0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
1dc0: 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 22     puts stdout "
1dd0: 22 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20  "..        puts 
1de0: 73 74 64 6f 75 74 20 5b 61 70 70 65 6e 64 41 72  stdout [appendAr
1df0: 67 73 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 5b  gs [info level [
1e00: 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 20 22 3a 20  info level]] ": 
1e10: 22 20 24 65 72 72 6f 72 5d 0d 0a 20 20 20 20 20  " $error]..     
1e20: 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 22     puts stdout "
1e30: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..    
1e40: 7d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23  }..  }]....  ###
1e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e90: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....  
1ea0: 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 38 29 20  set workload(8) 
1eb0: 5b 6c 69 73 74 20 5b 6c 69 73 74 20 73 72 63 44  [list [list srcD
1ec0: 62 20 66 69 6c 65 4e 61 6d 65 20 74 61 62 6c 65  b fileName table
1ed0: 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 23   count] {..    #
1ee0: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 6f  ..    # NOTE: Wo
1ef0: 72 6b 6c 6f 61 64 20 23 38 2c 20 22 62 69 67 22  rkload #8, "big"
1f00: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1f10: 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ts...    #..    
1f20: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..  
1f30: 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c      setupDb $fil
1f40: 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
1f50: 22 20 22 22 20 66 61 6c 73 65 0d 0a 20 20 20 20  " "" false..    
1f60: 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
1f70: 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 3d 20 24   1} {$index <= $
1f80: 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64  count} {incr ind
1f90: 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  ex} {..        s
1fa0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
1fb0: 61 70 70 65 6e 64 41 72 67 73 20 22 55 50 44 41  appendArgs "UPDA
1fc0: 54 45 20 22 20 24 74 61 62 6c 65 20 5c 0d 0a 20  TE " $table \.. 
1fd0: 20 20 20 20 20 20 20 20 20 20 20 22 20 53 45 54             " SET
1fe0: 20 79 20 3d 20 27 22 20 5b 62 61 73 65 36 34 20   y = '" [base64 
1ff0: 65 6e 63 6f 64 65 20 5b 65 78 70 72 20 7b 72 61  encode [expr {ra
2000: 6e 64 73 74 72 28 31 30 30 30 30 30 30 30 29 7d  ndstr(10000000)}
2010: 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ]] \..          
2020: 20 20 22 27 20 57 48 45 52 45 20 78 20 4c 49 4b    "' WHERE x LIK
2030: 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20  E '" [format %X 
2040: 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20  $index] "%' AND 
2050: 7a 20 3d 20 27 62 69 67 27 3b 22 5d 0d 0a 20 20  z = 'big';"]..  
2060: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
2070: 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 38 3b 20  wline stdout 8; 
2080: 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74  after [expr {int
2090: 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d  (rand() * 1000)}
20a0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..    
20b0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
20c0: 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66  eName db false f
20d0: 61 6c 73 65 0d 0a 20 20 20 20 7d 20 65 72 72 6f  alse..    } erro
20e0: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
20f0: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d    if {[regexp --
2100: 20 7b 5c 73 6e 6f 20 73 75 63 68 20 74 61 62 6c   {\sno such tabl
2110: 65 3a 20 74 31 5c 73 7d 20 24 65 72 72 6f 72 5d  e: t1\s} $error]
2120: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2130: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
2140: 65 20 73 74 64 6f 75 74 20 2a 0d 0a 20 20 20 20  e stdout *..    
2150: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
2160: 20 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20      puts stdout 
2170: 22 22 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73  ""..        puts
2180: 20 73 74 64 6f 75 74 20 5b 61 70 70 65 6e 64 41   stdout [appendA
2190: 72 67 73 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 20  rgs [info level 
21a0: 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 20 22 3a  [info level]] ":
21b0: 20 22 20 24 65 72 72 6f 72 5d 0d 0a 20 20 20 20   " $error]..    
21c0: 20 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20      puts stdout 
21d0: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ""..      }..   
21e0: 20 7d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23 23   }..  }]....  ##
21f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2230: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########.... 
2240: 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 39 29   set workload(9)
2250: 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20 73 72 63   [list [list src
2260: 44 62 20 66 69 6c 65 4e 61 6d 65 20 74 61 62 6c  Db fileName tabl
2270: 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20  e count] {..    
2280: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  #..    # NOTE: W
2290: 6f 72 6b 6c 6f 61 64 20 23 39 2c 20 22 73 6d 61  orkload #9, "sma
22a0: 6c 6c 22 20 44 45 4c 45 54 45 20 73 74 61 74 65  ll" DELETE state
22b0: 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20  ments...    #.. 
22c0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
22d0: 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24  .      setupDb $
22e0: 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
22f0: 22 20 22 22 20 22 22 20 66 61 6c 73 65 0d 0a 20  " "" "" false.. 
2300: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
2310: 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 1} {$index <
2320: 3d 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20  = $count} {incr 
2330: 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..      
2340: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
2350: 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 44  b [appendArgs "D
2360: 45 4c 45 54 45 20 46 52 4f 4d 20 22 20 24 74 61  ELETE FROM " $ta
2370: 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ble \..         
2380: 20 20 20 22 20 57 48 45 52 45 20 78 20 4c 49 4b     " WHERE x LIK
2390: 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25 58 20  E '" [format %X 
23a0: 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e 44 20  $index] "%' AND 
23b0: 7a 20 3d 20 27 73 6d 61 6c 6c 27 3b 22 5d 0d 0a  z = 'small';"]..
23c0: 20 20 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f          puts -no
23d0: 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 39  newline stdout 9
23e0: 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69  ; after [expr {i
23f0: 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30  nt(rand() * 1000
2400: 29 7d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  )}]..      }..  
2410: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f
2420: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
2430: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 20 65 72   false..    } er
2440: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
2450: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
2460: 2d 2d 20 7b 5c 73 6e 6f 20 73 75 63 68 20 74 61  -- {\sno such ta
2470: 62 6c 65 3a 20 74 31 5c 73 7d 20 24 65 72 72 6f  ble: t1\s} $erro
2480: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
2490: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
24a0: 69 6e 65 20 73 74 64 6f 75 74 20 2a 0d 0a 20 20  ine stdout *..  
24b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
24c0: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
24d0: 74 20 22 22 0d 0a 20 20 20 20 20 20 20 20 70 75  t ""..        pu
24e0: 74 73 20 73 74 64 6f 75 74 20 5b 61 70 70 65 6e  ts stdout [appen
24f0: 64 41 72 67 73 20 5b 69 6e 66 6f 20 6c 65 76 65  dArgs [info leve
2500: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 20  l [info level]] 
2510: 22 3a 20 22 20 24 65 72 72 6f 72 5d 0d 0a 20 20  ": " $error]..  
2520: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
2530: 74 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  t ""..      }.. 
2540: 20 20 20 7d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20     }..  }]....  
2550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2590: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
25a0: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
25b0: 31 30 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20  10) [list [list 
25c0: 73 72 63 44 62 20 66 69 6c 65 4e 61 6d 65 20 74  srcDb fileName t
25d0: 61 62 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20  able count] {.. 
25e0: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
25f0: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 30 2c 20  : Workload #10, 
2600: 22 62 69 67 22 20 44 45 4c 45 54 45 20 73 74 61  "big" DELETE sta
2610: 74 65 6d 65 6e 74 73 2e 0d 0a 20 20 20 20 23 0d  tements...    #.
2620: 0a 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20  .    if {[catch 
2630: 7b 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62  {..      setupDb
2640: 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
2650: 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 0d   "" "" "" false.
2660: 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20  .      for {set 
2670: 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78  index 1} {$index
2680: 20 3c 3d 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63   <= $count} {inc
2690: 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20  r index} {..    
26a0: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
26b0: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
26c0: 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 22 20 24  "DELETE FROM " $
26d0: 74 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  table \..       
26e0: 20 20 20 20 20 22 20 57 48 45 52 45 20 78 20 4c       " WHERE x L
26f0: 49 4b 45 20 27 22 20 5b 66 6f 72 6d 61 74 20 25  IKE '" [format %
2700: 58 20 24 69 6e 64 65 78 5d 20 22 25 27 20 41 4e  X $index] "%' AN
2710: 44 20 7a 20 3d 20 27 62 69 67 27 3b 22 5d 0d 0a  D z = 'big';"]..
2720: 20 20 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f          puts -no
2730: 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 41  newline stdout A
2740: 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69  ; after [expr {i
2750: 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30  nt(rand() * 1000
2760: 29 7d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  )}]..      }..  
2770: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f
2780: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
2790: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 20 65 72   false..    } er
27a0: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
27b0: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
27c0: 2d 2d 20 7b 5c 73 6e 6f 20 73 75 63 68 20 74 61  -- {\sno such ta
27d0: 62 6c 65 3a 20 74 31 5c 73 7d 20 24 65 72 72 6f  ble: t1\s} $erro
27e0: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
27f0: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
2800: 69 6e 65 20 73 74 64 6f 75 74 20 2a 0d 0a 20 20  ine stdout *..  
2810: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2820: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
2830: 74 20 22 22 0d 0a 20 20 20 20 20 20 20 20 70 75  t ""..        pu
2840: 74 73 20 73 74 64 6f 75 74 20 5b 61 70 70 65 6e  ts stdout [appen
2850: 64 41 72 67 73 20 5b 69 6e 66 6f 20 6c 65 76 65  dArgs [info leve
2860: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 20  l [info level]] 
2870: 22 3a 20 22 20 24 65 72 72 6f 72 5d 0d 0a 20 20  ": " $error]..  
2880: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
2890: 74 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  t ""..      }.. 
28a0: 20 20 20 7d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20     }..  }]....  
28b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
2900: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
2910: 31 31 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20  11) [list [list 
2920: 73 72 63 44 62 20 66 69 6c 65 4e 61 6d 65 20 74  srcDb fileName t
2930: 61 62 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20  able count] {.. 
2940: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
2950: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 31 2c 20  : Workload #11, 
2960: 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e 74  VACUUM statement
2970: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66  ...    #..    if
2980: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..    
2990: 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e    setupDb $fileN
29a0: 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20  ame "" "" "" "" 
29b0: 22 22 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  "" false..      
29c0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
29d0: 22 56 41 43 55 55 4d 3b 22 0d 0a 20 20 20 20 20  "VACUUM;"..     
29e0: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
29f0: 20 73 74 64 6f 75 74 20 42 3b 20 61 66 74 65 72   stdout B; after
2a00: 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64   [expr {int(rand
2a10: 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20  () * 1000)}]..  
2a20: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f
2a30: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
2a40: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 20 65 72   false..    } er
2a50: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..  
2a60: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
2a70: 2d 2d 20 7b 5c 73 6e 6f 20 73 75 63 68 20 74 61  -- {\sno such ta
2a80: 62 6c 65 3a 20 74 31 5c 73 7d 20 24 65 72 72 6f  ble: t1\s} $erro
2a90: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..    
2aa0: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
2ab0: 69 6e 65 20 73 74 64 6f 75 74 20 2a 0d 0a 20 20  ine stdout *..  
2ac0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2ad0: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
2ae0: 74 20 22 22 0d 0a 20 20 20 20 20 20 20 20 70 75  t ""..        pu
2af0: 74 73 20 73 74 64 6f 75 74 20 5b 61 70 70 65 6e  ts stdout [appen
2b00: 64 41 72 67 73 20 5b 69 6e 66 6f 20 6c 65 76 65  dArgs [info leve
2b10: 6c 20 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 5d 20  l [info level]] 
2b20: 22 3a 20 22 20 24 65 72 72 6f 72 5d 0d 0a 20 20  ": " $error]..  
2b30: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 6f 75        puts stdou
2b40: 74 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  t ""..      }.. 
2b50: 20 20 20 7d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20     }..  }]....  
2b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0d 0a 0d  #############...
2bb0: 0a 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28  .  set workload(
2bc0: 31 32 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20  12) [list [list 
2bd0: 73 72 63 44 62 20 66 69 6c 65 4e 61 6d 65 20 74  srcDb fileName t
2be0: 61 62 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20  able count] {.. 
2bf0: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
2c00: 3a 20 57 6f 72 6b 6c 6f 61 64 20 23 31 32 2c 20  : Workload #12, 
2c10: 62 61 63 6b 75 70 20 74 6f 20 69 6e 2d 6d 65 6d  backup to in-mem
2c20: 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  ory database... 
2c30: 20 20 20 23 0d 0a 20 20 20 20 73 65 74 20 69 64     #..    set id
2c40: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
2c50: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
2c60: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 0d  ctive NextId]...
2c70: 0a 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 20  .    set source 
2c80: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
2c90: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
2ca0: 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e   -objectflags +N
2cb0: 6f 44 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20  oDispose \..    
2cc0: 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 72 2e      Interpreter.
2cd0: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63  GetActive.connec
2ce0: 74 69 6f 6e 73 20 67 65 74 5f 49 74 65 6d 20 24  tions get_Item $
2cf0: 73 72 63 44 62 5d 0d 0a 0d 0a 20 20 20 20 73 65  srcDb]....    se
2d00: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
2d10: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
2d20: 20 7b 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20   {..      using 
2d30: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 20 20 75  System;..      u
2d40: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
2d50: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 20 20  .SQLite;..      
2d60: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
2d70: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 61 6d 65  t;....      name
2d80: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
2d90: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
2da0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2db0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
2dc0: 69 64 7d 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  id}..        {..
2dd0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2de0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 42 61 63   static void Bac
2df0: 6b 75 70 41 6e 64 47 65 74 44 61 74 61 28 0d 0a  kupAndGetData(..
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2e10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 6f 75  teConnection sou
2e20: 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
2e30: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d   )..          {.
2e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2e50: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
2e60: 74 69 6f 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e  tion destination
2e70: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
2e80: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
2e90: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
2ea0: 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b  Source=:memory:;
2eb0: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
2ec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ed0: 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 4f 70    destination.Op
2ee0: 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  en();..         
2ef0: 20 20 20 20 20 73 6f 75 72 63 65 2e 42 61 63 6b       source.Back
2f00: 75 70 44 61 74 61 62 61 73 65 28 64 65 73 74 69  upDatabase(desti
2f10: 6e 61 74 69 6f 6e 2c 20 22 6d 61 69 6e 22 2c 20  nation, "main", 
2f20: 22 6d 61 69 6e 22 2c 20 2d 31 2c 20 6e 75 6c 6c  "main", -1, null
2f30: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , 0);..         
2f40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  }....          /
2f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2fb0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2fc0: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
2fd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fe0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2ff0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
3000: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
3010: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 5d 20 74 72      }..    }] tr
3020: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
3030: 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74  ults errors Syst
3040: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
3050: 6c 6c 5d 0d 0a 20 20 20 20 69 66 20 7b 24 63 6f  ll]..    if {$co
3060: 64 65 20 65 71 20 22 4f 6b 22 7d 20 74 68 65 6e  de eq "Ok"} then
3070: 20 7b 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74   {..      object
3080: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
3090: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
30a0: 42 61 63 6b 75 70 41 6e 64 47 65 74 44 61 74 61  BackupAndGetData
30b0: 20 24 73 6f 75 72 63 65 0d 0a 20 20 20 20 7d 20   $source..    } 
30c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 65 72  else {..      er
30d0: 72 6f 72 20 24 65 72 72 6f 72 73 0d 0a 20 20 20  ror $errors..   
30e0: 20 7d 0d 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f   }..    puts -no
30f0: 6e 65 77 6c 69 6e 65 20 73 74 64 6f 75 74 20 43  newline stdout C
3100: 3b 20 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69  ; after [expr {i
3110: 6e 74 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30  nt(rand() * 1000
3120: 29 7d 5d 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 23  )}]..  }]....  #
3130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
3180: 20 20 73 65 74 20 77 6f 72 6b 6c 6f 61 64 28 31    set workload(1
3190: 33 29 20 5b 6c 69 73 74 20 5b 6c 69 73 74 20 73  3) [list [list s
31a0: 72 63 44 62 20 66 69 6c 65 4e 61 6d 65 20 74 61  rcDb fileName ta
31b0: 62 6c 65 20 63 6f 75 6e 74 5d 20 7b 0d 0a 20 20  ble count] {..  
31c0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
31d0: 20 57 6f 72 6b 6c 6f 61 64 20 23 31 33 2c 20 62   Workload #13, b
31e0: 61 63 6b 75 70 20 66 72 6f 6d 20 61 6e 20 69 6e  ackup from an in
31f0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
3200: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65  ...    #..    se
3210: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
3220: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
3230: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
3240: 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 73 6f 75  ]....    set sou
3250: 72 63 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  rce [object invo
3260: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
3270: 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67  blic -objectflag
3280: 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 5c 0d 0a  s +NoDispose \..
3290: 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65          Interpre
32a0: 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f  ter.GetActive.co
32b0: 6e 6e 65 63 74 69 6f 6e 73 20 67 65 74 5f 49 74  nnections get_It
32c0: 65 6d 20 24 73 72 63 44 62 5d 0d 0a 0d 0a 20 20  em $srcDb]....  
32d0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
32e0: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
32f0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 20 20 75 73  ubst {..      us
3300: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
3310: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
3320: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
3330: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
3340: 2e 54 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Text;....      
3350: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
3360: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b  ic${id}..      {
3370: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
3380: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65   static class Te
3390: 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 20  st${id}..       
33a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 70 75   {..          pu
33b0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
33c0: 20 42 61 63 6b 75 70 41 6e 64 47 65 74 44 61 74   BackupAndGetDat
33d0: 61 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a(..            
33e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
33f0: 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20   source..       
3400: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
3410: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3420: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
3430: 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 69 6e 61  nnection destina
3440: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
3450: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
3470: 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c  ata Source=${fil
3480: 65 4e 61 6d 65 7d 3b 22 29 29 0d 0a 20 20 20 20  eName};"))..    
3490: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34a0: 20 20 20 20 20 20 20 20 20 64 65 73 74 69 6e 61           destina
34b0: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20  tion.Open();..  
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72              sour
34d0: 63 65 2e 42 61 63 6b 75 70 44 61 74 61 62 61 73  ce.BackupDatabas
34e0: 65 28 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20 22  e(destination, "
34f0: 6d 61 69 6e 22 2c 20 22 6d 61 69 6e 22 2c 20 2d  main", "main", -
3500: 31 2c 20 6e 75 6c 6c 2c 20 30 29 3b 0d 0a 20 20  1, null, 0);..  
3510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3520: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3530: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3580: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3590: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
35a0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ()..          {.
35b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
35c0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
35d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35e0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
35f0: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
3600: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
3610: 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rs System.Data.S
3620: 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 20 20 20 20  QLite.dll]..    
3630: 69 66 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  if {$code eq "Ok
3640: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..     
3650: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
3660: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
3670: 74 24 7b 69 64 7d 20 42 61 63 6b 75 70 41 6e 64  t${id} BackupAnd
3680: 47 65 74 44 61 74 61 20 24 73 6f 75 72 63 65 0d  GetData $source.
3690: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  .    } else {.. 
36a0: 20 20 20 20 20 65 72 72 6f 72 20 24 65 72 72 6f       error $erro
36b0: 72 73 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 70  rs..    }..    p
36c0: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 73  uts -nonewline s
36d0: 74 64 6f 75 74 20 44 3b 20 61 66 74 65 72 20 5b  tdout D; after [
36e0: 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28 29  expr {int(rand()
36f0: 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 20 20 7d 5d   * 1000)}]..  }]
3700: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 66  ..} -body {..  f
3710: 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 28 30 29  or {set index(0)
3720: 20 30 7d 20 7b 24 69 6e 64 65 78 28 30 29 20 3c   0} {$index(0) <
3730: 20 24 63 6f 75 6e 74 28 30 29 7d 20 7b 69 6e 63   $count(0)} {inc
3740: 72 20 69 6e 64 65 78 28 30 29 7d 20 7b 0d 0a 20  r index(0)} {.. 
3750: 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24     sql execute $
3760: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
3770: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74   IF NOT EXISTS t
3780: 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  1(x PRIMARY KEY,
3790: 20 79 2c 20 7a 29 3b 22 0d 0a 0d 0a 20 20 20 20   y, z);"....    
37a0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
37b0: 6e 20 74 68 72 65 61 64 0d 0a 0d 0a 20 20 20 20  n thread....    
37c0: 66 6f 72 65 61 63 68 20 69 6e 64 65 78 28 31 29  foreach index(1)
37d0: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 77 6f   [array names wo
37e0: 72 6b 6c 6f 61 64 5d 20 7b 0d 0a 20 20 20 20 20  rkload] {..     
37f0: 20 73 65 74 20 74 68 72 65 61 64 28 24 69 6e 64   set thread($ind
3800: 65 78 28 31 29 29 20 5b 6f 62 6a 65 63 74 20 63  ex(1)) [object c
3810: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 53 79 73  reate -alias Sys
3820: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
3830: 72 65 61 64 20 5c 0d 0a 20 20 20 20 20 20 20 20  read \..        
3840: 20 20 5b 6c 69 73 74 20 61 70 70 6c 79 20 24 77    [list apply $w
3850: 6f 72 6b 6c 6f 61 64 28 24 69 6e 64 65 78 28 31  orkload($index(1
3860: 29 29 20 24 73 72 63 44 62 20 24 66 69 6c 65 4e  )) $srcDb $fileN
3870: 61 6d 65 28 32 29 20 74 31 20 24 63 6f 75 6e 74  ame(2) t1 $count
3880: 28 31 29 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  (1)]]..    }....
3890: 20 20 20 20 66 6f 72 65 61 63 68 20 69 6e 64 65      foreach inde
38a0: 78 28 31 29 20 5b 61 72 72 61 79 20 6e 61 6d 65  x(1) [array name
38b0: 73 20 74 68 72 65 61 64 5d 20 7b 0d 0a 20 20 20  s thread] {..   
38c0: 20 20 20 24 74 68 72 65 61 64 28 24 69 6e 64 65     $thread($inde
38d0: 78 28 31 29 29 20 53 74 61 72 74 0d 0a 20 20 20  x(1)) Start..   
38e0: 20 7d 0d 0a 0d 0a 20 20 20 20 66 6f 72 65 61 63   }....    foreac
38f0: 68 20 69 6e 64 65 78 28 31 29 20 5b 61 72 72 61  h index(1) [arra
3900: 79 20 6e 61 6d 65 73 20 74 68 72 65 61 64 5d 20  y names thread] 
3910: 7b 0d 0a 20 20 20 20 20 20 24 74 68 72 65 61 64  {..      $thread
3920: 28 24 69 6e 64 65 78 28 31 29 29 20 4a 6f 69 6e  ($index(1)) Join
3930: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
3940: 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 22 22    puts stdout ""
3950: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
3960: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
3970: 65 4e 61 6d 65 28 32 29 0d 0a 20 20 63 6c 65 61  eName(2)..  clea
3980: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 28  nupDb $fileName(
3990: 31 29 20 73 72 63 44 62 0d 0a 0d 0a 20 20 75 6e  1) srcDb....  un
39a0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
39b0: 74 68 72 65 61 64 20 69 6e 64 65 78 20 77 6f 72  thread index wor
39c0: 6b 6c 6f 61 64 20 73 72 63 44 62 20 64 62 20 66  kload srcDb db f
39d0: 69 6c 65 4e 61 6d 65 20 6f 70 74 69 6f 6e 73 20  ileName options 
39e0: 63 6f 75 6e 74 0d 0a 7d 20 2d 63 6f 6e 73 74 72  count..} -constr
39f0: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
3a00: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
3a10: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
3a20: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
3a30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
3a40: 65 73 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23 23 23  esult {}}....###
3a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3a90: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
3aa0: 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69  runSQLiteTestEpi
3ab0: 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73 74 45 70  logue..runTestEp
3ac0: 69 6c 6f 67 75 65 0d 0a                          ilogue..