Artifact 68c033427e281edcdec42a1aa61c71ec8f67c36a:
- File synchash.scm — part of check-in [29e6524e1c] at 2013-03-21 14:25:09 on branch development — Test panel updates on tree node click mostly working (user: mrwellan size: 4363) [more...]
0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;============== 0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79 ========.;; Copy 0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 32 2c right 2006-2012, 0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64 Matthew Welland 0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70 ..;; .;; This p 0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61 rogram is made a 0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74 vailable under t 00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69 he GNU GPL versi 00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72 on 2.0 or.;; gr 00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61 eater. See the a 00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65 ccompanying file 00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74 COPYING for det 00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 ails..;; .;; Th 0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di 0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55 stributed WITHOU 0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 T ANY WARRANTY; 0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 without even the 0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72 .;; implied war 0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e ranty of MERCHAN 0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e TABILITY or FITN 0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 ESS FOR A PARTIC 0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45 ULAR.;; PURPOSE 0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============ 01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 3d 3d ==========..;;== 01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0220: 3d 3d 3d 3d 0a 3b 3b 20 41 20 68 61 73 68 20 6f ====.;; A hash o 0230: 66 20 68 61 73 68 65 73 20 74 68 61 74 20 63 61 f hashes that ca 0240: 6e 20 62 65 20 6b 65 70 74 20 69 6e 20 73 79 6e n be kept in syn 0250: 63 20 62 79 20 73 65 6e 64 69 6e 67 20 6d 69 6e c by sending min 0260: 69 61 6c 20 64 65 6c 74 61 73 0a 3b 3b 3d 3d 3d ial deltas.;;=== 0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 02b0: 3d 3d 3d 0a 0a 28 75 73 65 20 66 6f 72 6d 61 74 ===..(use format 02c0: 29 0a 28 75 73 65 20 73 72 66 69 2d 31 20 73 72 ).(use srfi-1 sr 02d0: 66 69 2d 36 39 29 0a 0a 28 64 65 63 6c 61 72 65 fi-69)..(declare 02e0: 20 28 75 6e 69 74 20 73 79 6e 63 68 61 73 68 29 (unit synchash) 02f0: 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 ).(declare (uses 0300: 20 64 62 29 29 0a 28 64 65 63 6c 61 72 65 20 28 db)).(declare ( 0310: 75 73 65 73 20 73 65 72 76 65 72 29 29 0a 28 69 uses server)).(i 0320: 6e 63 6c 75 64 65 20 22 64 62 5f 72 65 63 6f 72 nclude "db_recor 0330: 64 73 2e 73 63 6d 22 29 0a 0a 28 64 65 66 69 6e ds.scm")..(defin 0340: 65 20 28 73 79 6e 63 68 61 73 68 3a 6d 61 6b 65 e (synchash:make 0350: 29 0a 20 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d ). (make-hash- 0360: 74 61 62 6c 65 29 29 0a 0a 3b 3b 20 67 69 76 65 table))..;; give 0370: 6e 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 6f 62 n an alist of ob 0380: 6a 65 63 74 73 20 27 28 28 69 64 20 6f 62 6a 29 jects '((id obj) 0390: 20 2e 2e 2e 29 20 0a 3b 3b 20 20 20 31 2e 20 72 ...) .;; 1. r 03a0: 65 6d 6f 76 65 20 75 6e 63 68 61 6e 67 65 64 20 emove unchanged 03b0: 6f 62 6a 65 63 74 73 20 66 72 6f 6d 20 74 68 65 objects from the 03c0: 20 6c 69 73 74 0a 3b 3b 20 20 20 32 2e 20 63 72 list.;; 2. cr 03d0: 65 61 74 65 20 61 20 6c 69 73 74 20 6f 66 20 72 eate a list of r 03e0: 65 6d 6f 76 65 64 20 6f 62 6a 65 63 74 73 20 62 emoved objects b 03f0: 79 20 69 64 0a 3b 3b 20 20 20 33 2e 20 72 65 6d y id.;; 3. rem 0400: 6f 76 65 20 72 65 6d 6f 76 65 64 20 6f 62 6a 65 ove removed obje 0410: 63 74 73 20 66 72 6f 6d 20 73 79 6e 63 68 61 73 cts from synchas 0420: 68 0a 3b 3b 20 20 20 34 2e 20 72 65 70 6c 61 63 h.;; 4. replac 0430: 65 20 6f 72 20 61 64 64 20 6e 65 77 20 6f 72 20 e or add new or 0440: 63 68 61 6e 67 65 64 20 6f 62 6a 65 63 74 73 20 changed objects 0450: 74 6f 20 73 79 6e 63 68 61 73 68 0a 3b 3b 0a 28 to synchash.;;.( 0460: 64 65 66 69 6e 65 20 28 73 79 6e 63 68 61 73 68 define (synchash 0470: 3a 67 65 74 2d 64 65 6c 74 61 20 69 6e 64 61 74 :get-delta indat 0480: 20 73 79 6e 63 68 61 73 68 29 0a 20 20 28 6c 65 synchash). (le 0490: 74 20 28 28 64 65 6c 65 74 65 64 20 27 28 29 29 t ((deleted '()) 04a0: 0a 09 28 63 68 61 6e 67 65 64 20 27 28 29 29 0a ..(changed '()). 04b0: 09 28 66 6f 75 6e 64 20 20 20 27 28 29 29 0a 09 .(found '()).. 04c0: 28 6f 72 69 67 2d 6b 65 79 73 20 28 68 61 73 68 (orig-keys (hash 04d0: 2d 74 61 62 6c 65 2d 6b 65 79 73 20 73 79 6e 63 -table-keys sync 04e0: 68 61 73 68 29 29 29 0a 20 20 20 20 28 66 6f 72 hash))). (for 04f0: 2d 65 61 63 68 0a 20 20 20 20 20 28 6c 61 6d 62 -each. (lamb 0500: 64 61 20 28 69 74 65 6d 29 0a 20 20 20 20 20 20 da (item). 0510: 20 28 6c 65 74 2a 20 28 28 69 64 20 20 28 63 61 (let* ((id (ca 0520: 72 20 20 69 74 65 6d 29 29 0a 09 20 20 20 20 20 r item)).. 0530: 20 28 64 61 74 20 28 63 61 64 72 20 69 74 65 6d (dat (cadr item 0540: 29 29 0a 09 20 20 20 20 20 20 28 72 65 66 20 28 )).. (ref ( 0550: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 hash-table-ref/d 0560: 65 66 61 75 6c 74 20 73 79 6e 63 68 61 73 68 20 efault synchash 0570: 69 64 20 23 66 29 29 29 0a 09 20 28 69 66 20 28 id #f))).. (if ( 0580: 6e 6f 74 20 28 65 71 75 61 6c 3f 20 64 61 74 20 not (equal? dat 0590: 72 65 66 29 29 20 3b 3b 20 69 74 65 6d 20 63 68 ref)) ;; item ch 05a0: 61 6e 67 65 64 20 6f 72 20 6e 65 77 0a 09 20 20 anged or new.. 05b0: 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 20 (begin.. 05c0: 20 20 28 73 65 74 21 20 63 68 61 6e 67 65 64 20 (set! changed 05d0: 28 63 6f 6e 73 20 69 74 65 6d 20 63 68 61 6e 67 (cons item chang 05e0: 65 64 29 29 0a 09 20 20 20 20 20 20 20 28 68 61 ed)).. (ha 05f0: 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 73 79 sh-table-set! sy 0600: 6e 63 68 61 73 68 20 69 64 20 64 61 74 29 29 29 nchash id dat))) 0610: 0a 09 20 28 73 65 74 21 20 66 6f 75 6e 64 20 28 .. (set! found ( 0620: 63 6f 6e 73 20 69 64 20 66 6f 75 6e 64 29 29 29 cons id found))) 0630: 29 0a 20 20 20 20 20 69 6e 64 61 74 29 0a 20 20 ). indat). 0640: 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 (for-each . 0650: 20 20 28 6c 61 6d 62 64 61 20 28 69 64 29 0a 20 (lambda (id). 0660: 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 (if (not ( 0670: 6d 65 6d 62 65 72 20 69 64 20 66 6f 75 6e 64 29 member id found) 0680: 29 0a 09 20 20 20 28 62 65 67 69 6e 0a 09 20 20 ).. (begin.. 0690: 20 20 20 28 73 65 74 21 20 64 65 6c 65 74 65 64 (set! deleted 06a0: 20 28 63 6f 6e 73 20 69 64 20 64 65 6c 65 74 65 (cons id delete 06b0: 64 29 29 0a 09 20 20 20 20 20 28 68 61 73 68 2d d)).. (hash- 06c0: 74 61 62 6c 65 2d 64 65 6c 65 74 65 21 20 73 79 table-delete! sy 06d0: 6e 63 68 61 73 68 20 69 64 29 29 29 29 0a 20 20 nchash id)))). 06e0: 20 20 20 6f 72 69 67 2d 6b 65 79 73 29 0a 20 20 orig-keys). 06f0: 20 20 28 6c 69 73 74 20 63 68 61 6e 67 65 64 20 (list changed 0700: 64 65 6c 65 74 65 64 29 0a 20 20 20 20 3b 3b 20 deleted). ;; 0710: 28 6c 69 73 74 20 69 6e 64 61 74 20 27 28 29 29 (list indat '()) 0720: 20 3b 3b 20 6a 75 73 74 20 66 6f 72 20 64 65 62 ;; just for deb 0730: 75 67 67 69 6e 67 0a 20 20 20 20 29 29 0a 20 20 ugging. )). 0740: 20 20 0a 3b 3b 20 28 63 64 62 3a 72 65 6d 6f 74 .;; (cdb:remot 0750: 65 2d 72 75 6e 20 64 62 3a 67 65 74 2d 6b 65 79 e-run db:get-key 0760: 73 20 23 66 29 20 20 0a 3b 3b 20 28 63 64 62 3a s #f) .;; (cdb: 0770: 72 65 6d 6f 74 65 2d 72 75 6e 20 64 62 3a 67 65 remote-run db:ge 0780: 74 2d 6e 75 6d 2d 72 75 6e 73 20 23 66 20 22 25 t-num-runs #f "% 0790: 22 29 0a 3b 3b 20 28 63 64 62 3a 72 65 6d 6f 74 ").;; (cdb:remot 07a0: 65 2d 72 75 6e 20 64 62 3a 67 65 74 2d 72 75 6e e-run db:get-run 07b0: 73 20 23 66 20 72 75 6e 6e 61 6d 65 70 61 74 74 s #f runnamepatt 07c0: 20 6e 75 6d 72 75 6e 73 20 2a 73 74 61 72 74 2d numruns *start- 07d0: 72 75 6e 2d 6f 66 66 73 65 74 2a 20 6b 65 79 70 run-offset* keyp 07e0: 61 74 74 73 29 0a 3b 3b 0a 3b 3b 20 6b 65 79 6e atts).;;.;; keyn 07f0: 75 6d 20 3d 3e 20 74 68 65 20 66 69 65 6c 64 20 um => the field 0800: 74 6f 20 75 73 65 20 61 73 20 74 68 65 20 75 6e to use as the un 0810: 69 71 75 65 20 6b 65 79 20 28 75 73 75 61 6c 6c ique key (usuall 0820: 79 20 30 20 62 75 74 20 63 61 6e 20 62 65 20 6f y 0 but can be o 0830: 74 68 65 72 20 66 69 65 6c 64 29 0a 3b 3b 0a 28 ther field).;;.( 0840: 64 65 66 69 6e 65 20 28 73 79 6e 63 68 61 73 68 define (synchash 0850: 3a 63 6c 69 65 6e 74 2d 67 65 74 20 70 72 6f 63 :client-get proc 0860: 20 73 79 6e 63 6b 65 79 20 6b 65 79 6e 75 6d 20 synckey keynum 0870: 73 79 6e 63 68 61 73 68 20 2e 20 70 61 72 61 6d synchash . param 0880: 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 74 s). (let* ((dat 0890: 61 20 20 20 28 61 70 70 6c 79 20 63 64 62 3a 72 a (apply cdb:r 08a0: 65 6d 6f 74 65 2d 72 75 6e 20 73 79 6e 63 68 61 emote-run syncha 08b0: 73 68 3a 73 65 72 76 65 72 2d 67 65 74 20 23 66 sh:server-get #f 08c0: 20 70 72 6f 63 20 73 79 6e 63 6b 65 79 20 6b 65 proc synckey ke 08d0: 79 6e 75 6d 20 70 61 72 61 6d 73 29 29 0a 09 20 ynum params)).. 08e0: 28 6e 65 77 64 61 74 20 28 63 61 72 20 64 61 74 (newdat (car dat 08f0: 61 29 29 0a 09 20 28 72 65 6d 6f 76 73 20 28 63 a)).. (removs (c 0900: 61 64 72 20 64 61 74 61 29 29 0a 09 20 28 6d 79 adr data)).. (my 0910: 68 61 73 68 20 28 68 61 73 68 2d 74 61 62 6c 65 hash (hash-table 0920: 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 73 79 6e -ref/default syn 0930: 63 68 61 73 68 20 73 79 6e 63 6b 65 79 20 23 66 chash synckey #f 0940: 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 ))). (if (not 0950: 20 6d 79 68 61 73 68 29 0a 09 28 62 65 67 69 6e myhash)..(begin 0960: 0a 09 20 20 28 73 65 74 21 20 6d 79 68 61 73 68 .. (set! myhash 0970: 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c (make-hash-tabl 0980: 65 29 29 0a 09 20 20 28 68 61 73 68 2d 74 61 62 e)).. (hash-tab 0990: 6c 65 2d 73 65 74 21 20 73 79 6e 63 68 61 73 68 le-set! synchash 09a0: 20 73 79 6e 63 6b 65 79 20 6d 79 68 61 73 68 29 synckey myhash) 09b0: 29 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 )). (for-each 09c0: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda ( 09d0: 69 74 65 6d 29 0a 20 20 20 20 20 20 20 28 6c 65 item). (le 09e0: 74 20 28 28 69 64 20 20 28 63 61 72 20 69 74 65 t ((id (car ite 09f0: 6d 29 29 0a 09 20 20 20 20 20 28 64 61 74 20 28 m)).. (dat ( 0a00: 63 61 64 72 20 69 74 65 6d 29 29 29 0a 09 20 3b cadr item))).. ; 0a10: 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 ; (debug:print-i 0a20: 6e 66 6f 20 32 20 22 50 72 6f 63 65 73 73 69 6e nfo 2 "Processin 0a30: 67 20 69 74 65 6d 3a 20 22 20 69 74 65 6d 29 0a g item: " item). 0a40: 09 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 . (hash-table-se 0a50: 74 21 20 6d 79 68 61 73 68 20 69 64 20 64 61 74 t! myhash id dat 0a60: 29 29 29 0a 20 20 20 20 20 6e 65 77 64 61 74 29 ))). newdat) 0a70: 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 0a 20 . (for-each. 0a80: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 29 (lambda (id) 0a90: 0a 20 20 20 20 20 20 20 28 68 61 73 68 2d 74 61 . (hash-ta 0aa0: 62 6c 65 2d 64 65 6c 65 74 65 21 20 6d 79 68 61 ble-delete! myha 0ab0: 73 68 20 69 64 29 29 0a 20 20 20 20 20 72 65 6d sh id)). rem 0ac0: 6f 76 73 29 0a 20 20 20 20 3b 3b 20 57 48 49 43 ovs). ;; WHIC 0ad0: 48 20 4f 4e 45 21 3f 0a 20 20 20 20 3b 3b 20 64 H ONE!?. ;; d 0ae0: 61 74 61 29 29 20 3b 3b 20 72 65 74 75 72 6e 20 ata)) ;; return 0af0: 74 68 65 20 63 68 61 6e 67 65 64 20 61 6e 64 20 the changed and 0b00: 64 65 6c 65 74 65 64 20 6c 69 73 74 0a 20 20 20 deleted list. 0b10: 20 28 6c 69 73 74 20 6e 65 77 64 61 74 20 72 65 (list newdat re 0b20: 6d 6f 76 73 29 29 29 20 3b 3b 20 73 79 6e 63 68 movs))) ;; synch 0b30: 61 73 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 2a ash))..(define * 0b40: 73 79 6e 63 68 61 73 68 65 73 2a 20 28 6d 61 6b synchashes* (mak 0b50: 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 0a 0a e-hash-table)).. 0b60: 28 64 65 66 69 6e 65 20 28 73 79 6e 63 68 61 73 (define (synchas 0b70: 68 3a 73 65 72 76 65 72 2d 67 65 74 20 64 62 20 h:server-get db 0b80: 70 72 6f 63 20 73 79 6e 63 6b 65 79 20 6b 65 79 proc synckey key 0b90: 6e 75 6d 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 num . params). 0ba0: 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d ;; (debug:print- 0bb0: 69 6e 66 6f 20 32 20 22 73 79 6e 63 6b 65 79 3a info 2 "synckey: 0bc0: 20 22 20 73 79 6e 63 6b 65 79 20 22 2c 20 6b 65 " synckey ", ke 0bd0: 79 6e 75 6d 3a 20 22 20 6b 65 79 6e 75 6d 20 22 ynum: " keynum " 0be0: 2c 20 70 61 72 61 6d 73 3a 20 22 20 70 61 72 61 , params: " para 0bf0: 6d 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 73 79 ms). (let* ((sy 0c00: 6e 63 68 61 73 68 20 20 28 68 61 73 68 2d 74 61 nchash (hash-ta 0c10: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 ble-ref/default 0c20: 2a 73 79 6e 63 68 61 73 68 65 73 2a 20 73 79 6e *synchashes* syn 0c30: 63 6b 65 79 20 23 66 29 29 0a 09 20 28 6e 65 77 ckey #f)).. (new 0c40: 64 61 74 20 20 20 20 28 61 70 70 6c 79 20 28 63 dat (apply (c 0c50: 61 73 65 20 70 72 6f 63 0a 09 09 09 20 20 20 20 ase proc.... 0c60: 20 28 28 64 62 3a 67 65 74 2d 72 75 6e 73 29 20 ((db:get-runs) 0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0c80: 20 20 64 62 3a 67 65 74 2d 72 75 6e 73 29 0a 09 db:get-runs).. 0c90: 09 09 20 20 20 20 20 28 28 64 62 3a 67 65 74 2d .. ((db:get- 0ca0: 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 73 2d 6d tests-for-runs-m 0cb0: 69 6e 64 61 74 61 29 20 64 62 3a 67 65 74 2d 74 indata) db:get-t 0cc0: 65 73 74 73 2d 66 6f 72 2d 72 75 6e 73 2d 6d 69 ests-for-runs-mi 0cd0: 6e 64 61 74 61 29 0a 09 09 09 20 20 20 20 20 28 ndata).... ( 0ce0: 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 (db:get-test-inf 0cf0: 6f 2d 62 79 2d 69 64 73 29 20 20 20 20 20 20 20 o-by-ids) 0d00: 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f db:get-test-info 0d10: 2d 62 79 2d 69 64 73 29 0a 09 09 09 20 20 20 20 -by-ids).... 0d20: 20 28 65 6c 73 65 0a 09 09 09 20 20 20 20 20 20 (else.... 0d30: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 73 (print "ERROR: s 0d40: 79 6e 63 20 66 6f 72 20 68 61 73 68 20 22 20 70 ync for hash " p 0d50: 72 6f 63 20 22 20 6e 6f 74 20 73 65 74 75 70 21 roc " not setup! 0d60: 20 45 64 69 74 73 20 6e 65 65 64 65 64 20 69 6e Edits needed in 0d70: 20 73 79 6e 63 68 61 73 68 2e 73 63 6d 22 29 0a synchash.scm"). 0d80: 09 09 09 20 20 20 20 20 20 70 72 69 6e 74 29 29 ... print)) 0d90: 0a 09 09 09 20 20 20 64 62 20 70 61 72 61 6d 73 .... db params 0da0: 29 29 0a 09 20 28 70 6f 73 74 64 61 74 20 20 23 )).. (postdat # 0db0: 66 29 0a 09 20 28 6d 61 6b 65 2d 69 6e 64 65 78 f).. (make-index 0dc0: 65 64 20 28 6c 61 6d 62 64 61 20 28 78 29 0a 09 ed (lambda (x).. 0dd0: 09 09 20 28 6c 69 73 74 20 28 76 65 63 74 6f 72 .. (list (vector 0de0: 2d 72 65 66 20 78 20 6b 65 79 6e 75 6d 29 20 78 -ref x keynum) x 0df0: 29 29 29 29 0a 20 20 20 20 3b 3b 20 4e 6f 77 20 )))). ;; Now 0e00: 70 72 6f 63 65 73 73 20 6e 65 77 64 61 74 20 62 process newdat b 0e10: 61 73 65 64 20 6f 6e 20 74 68 65 20 71 75 65 72 ased on the quer 0e20: 79 20 74 79 70 65 0a 20 20 20 20 28 73 65 74 21 y type. (set! 0e30: 20 70 6f 73 74 64 61 74 20 28 63 61 73 65 20 70 postdat (case p 0e40: 72 6f 63 0a 09 09 20 20 20 20 28 28 64 62 3a 67 roc... ((db:g 0e50: 65 74 2d 72 75 6e 73 29 0a 09 09 20 20 20 20 20 et-runs)... 0e60: 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d ;; (debug:print- 0e70: 69 6e 66 6f 20 32 20 22 47 65 74 20 72 75 6e 73 info 2 "Get runs 0e80: 20 63 61 6c 6c 22 29 0a 09 09 20 20 20 20 20 28 call")... ( 0e90: 6c 65 74 20 28 28 68 65 61 64 65 72 20 28 76 65 let ((header (ve 0ea0: 63 74 6f 72 2d 72 65 66 20 6e 65 77 64 61 74 20 ctor-ref newdat 0eb0: 30 29 29 0a 09 09 09 20 20 20 28 64 61 74 61 20 0)).... (data 0ec0: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 6e 65 (vector-ref ne 0ed0: 77 64 61 74 20 31 29 29 29 0a 09 09 20 20 20 20 wdat 1)))... 0ee0: 20 20 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 ;; (debug:pri 0ef0: 6e 74 2d 69 6e 66 6f 20 32 20 22 68 65 61 64 65 nt-info 2 "heade 0f00: 72 3a 20 22 20 68 65 61 64 65 72 20 22 2c 20 64 r: " header ", d 0f10: 61 74 61 3a 20 22 20 64 61 74 61 29 0a 09 09 20 ata: " data)... 0f20: 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6c 69 73 (cons (lis 0f30: 74 20 22 68 65 61 64 65 72 22 20 68 65 61 64 65 t "header" heade 0f40: 72 29 20 20 20 20 20 20 20 20 20 3b 3b 20 61 64 r) ;; ad 0f50: 64 20 74 68 65 20 68 65 61 64 65 72 20 6b 65 79 d the header key 0f60: 65 64 20 62 79 20 74 68 65 20 77 6f 72 64 20 22 ed by the word " 0f70: 68 65 61 64 65 72 22 0a 09 09 09 20 20 20 20 20 header".... 0f80: 28 6d 61 70 20 6d 61 6b 65 2d 69 6e 64 65 78 65 (map make-indexe 0f90: 64 20 64 61 74 61 29 29 29 29 20 20 20 20 20 20 d data)))) 0fa0: 20 20 3b 3b 20 61 64 64 20 65 61 63 68 20 65 6c ;; add each el 0fb0: 65 6d 65 6e 74 20 6b 65 79 65 64 20 62 79 20 74 ement keyed by t 0fc0: 68 65 20 6b 65 79 6e 75 6d 27 74 68 20 76 61 6c he keynum'th val 0fd0: 0a 09 09 20 20 20 20 28 65 6c 73 65 20 0a 09 09 ... (else ... 0fe0: 20 20 20 20 20 3b 3b 20 28 64 65 62 75 67 3a 70 ;; (debug:p 0ff0: 72 69 6e 74 2d 69 6e 66 6f 20 32 20 22 4e 6f 6e rint-info 2 "Non 1000: 2d 67 65 74 20 72 75 6e 73 20 63 61 6c 6c 22 29 -get runs call") 1010: 0a 09 09 20 20 20 20 20 28 6d 61 70 20 6d 61 6b ... (map mak 1020: 65 2d 69 6e 64 65 78 65 64 20 6e 65 77 64 61 74 e-indexed newdat 1030: 29 29 29 29 0a 20 20 20 20 3b 3b 20 28 64 65 62 )))). ;; (deb 1040: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 32 20 ug:print-info 2 1050: 22 70 6f 73 74 64 61 74 3a 20 22 20 70 6f 73 74 "postdat: " post 1060: 64 61 74 29 0a 20 20 20 20 28 69 66 20 28 6e 6f dat). (if (no 1070: 74 20 73 79 6e 63 68 61 73 68 29 0a 09 28 62 65 t synchash)..(be 1080: 67 69 6e 0a 09 20 20 28 73 65 74 21 20 73 79 6e gin.. (set! syn 1090: 63 68 61 73 68 20 28 6d 61 6b 65 2d 68 61 73 68 chash (make-hash 10a0: 2d 74 61 62 6c 65 29 29 0a 09 20 20 28 68 61 73 -table)).. (has 10b0: 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 2a 73 79 h-table-set! *sy 10c0: 6e 63 68 61 73 68 65 73 2a 20 73 79 6e 63 6b 65 nchashes* syncke 10d0: 79 20 73 79 6e 63 68 61 73 68 29 29 29 0a 20 20 y synchash))). 10e0: 20 20 28 73 79 6e 63 68 61 73 68 3a 67 65 74 2d (synchash:get- 10f0: 64 65 6c 74 61 20 70 6f 73 74 64 61 74 20 73 79 delta postdat sy 1100: 6e 63 68 61 73 68 29 29 29 0a 0a nchash)))..