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 31 37 2c 20 4d 61 74 74 right 2017, Matt
0060: 68 65 77 20 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 hew Welland..;;
0070: 0a 3b 3b 20 54 68 69 73 20 66 69 6c 65 20 69 73 .;; This file is
0080: 20 70 61 72 74 20 6f 66 20 4d 65 67 61 74 65 73 part of Megates
0090: 74 2e 0a 3b 3b 20 0a 3b 3b 20 20 20 20 20 4d 65 t..;; .;; Me
00a0: 67 61 74 65 73 74 20 69 73 20 66 72 65 65 20 73 gatest is free s
00b0: 6f 66 74 77 61 72 65 3a 20 79 6f 75 20 63 61 6e oftware: you can
00c0: 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69 74 redistribute it
00d0: 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b and/or modify.;
00e0: 3b 20 20 20 20 20 69 74 20 75 6e 64 65 72 20 74 ; it under t
00f0: 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 he terms of the
0100: 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c GNU General Publ
0110: 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 ic License as pu
0120: 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 20 20 blished by.;;
0130: 20 20 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 the Free Softw
0140: 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 are Foundation,
0150: 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e 20 33 either version 3
0160: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c of the License,
0170: 20 6f 72 0a 3b 3b 20 20 20 20 20 28 61 74 20 79 or.;; (at y
0180: 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 our option) any
0190: 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 3b later version..;
01a0: 3b 20 0a 3b 3b 20 20 20 20 20 4d 65 67 61 74 65 ; .;; Megate
01b0: 73 74 20 69 73 20 64 69 73 74 72 69 62 75 74 65 st is distribute
01c0: 64 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 d in the hope th
01d0: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 at it will be us
01e0: 65 66 75 6c 2c 0a 3b 3b 20 20 20 20 20 62 75 74 eful,.;; but
01f0: 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 WITHOUT ANY WAR
0200: 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 RANTY; without e
0210: 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 ven the implied
0220: 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 20 warranty of.;;
0230: 20 20 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 MERCHANTABILI
0240: 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f TY or FITNESS FO
0250: 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 R A PARTICULAR P
0260: 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 URPOSE. See the
0270: 0a 3b 3b 20 20 20 20 20 47 4e 55 20 47 65 6e 65 .;; GNU Gene
0280: 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e ral Public Licen
0290: 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 se for more deta
02a0: 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 20 20 20 ils..;; .;;
02b0: 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 You should have
02c0: 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 received a copy
02d0: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 of the GNU Gener
02e0: 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 al Public Licens
02f0: 65 0a 3b 3b 20 20 20 20 20 61 6c 6f 6e 67 20 77 e.;; along w
0300: 69 74 68 20 4d 65 67 61 74 65 73 74 2e 20 20 49 ith Megatest. I
0310: 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 74 70 f not, see <http
0320: 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c ://www.gnu.org/l
0330: 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3d 3d icenses/>...;;==
0340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0380: 3d 3d 3d 3d 0a 0a 28 64 65 63 6c 61 72 65 20 28 ====..(declare (
0390: 75 6e 69 74 20 70 67 64 62 29 29 0a 28 64 65 63 unit pgdb)).(dec
03a0: 6c 61 72 65 20 28 75 73 65 73 20 63 6f 6e 66 69 lare (uses confi
03b0: 67 66 29 29 0a 0a 3b 3b 20 49 20 64 6f 6e 27 74 gf))..;; I don't
03c0: 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 6d 69 78 know how to mix
03d0: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69 compilation uni
03e0: 74 73 20 61 6e 64 20 6d 6f 64 75 6c 65 73 2c 20 ts and modules,
03f0: 73 6f 20 6e 6f 20 6d 6f 64 75 6c 65 20 68 65 72 so no module her
0400: 65 2e 0a 3b 3b 0a 3b 3b 20 28 6d 6f 64 75 6c 65 e..;;.;; (module
0410: 20 70 67 64 62 0a 3b 3b 20 20 20 20 20 28 0a 3b pgdb.;; (.;
0420: 3b 20 20 20 20 20 20 6f 70 65 6e 2d 70 67 64 62 ; open-pgdb
0430: 0a 3b 3b 20 20 20 20 20 20 29 0a 3b 3b 20 0a 3b .;; ).;; .;
0440: 3b 20 28 69 6d 70 6f 72 74 20 73 63 68 65 6d 65 ; (import scheme
0450: 29 0a 3b 3b 20 28 69 6d 70 6f 72 74 20 64 61 74 ).;; (import dat
0460: 61 2d 73 74 72 75 63 74 75 72 65 73 29 0a 3b 3b a-structures).;;
0470: 20 28 69 6d 70 6f 72 74 20 63 68 69 63 6b 65 6e (import chicken
0480: 29 0a 0a 28 75 73 65 20 74 79 70 65 64 2d 72 65 )..(use typed-re
0490: 63 6f 72 64 73 20 28 70 72 65 66 69 78 20 64 62 cords (prefix db
04a0: 69 20 64 62 69 3a 29 29 0a 0a 3b 3b 20 67 69 76 i dbi:))..;; giv
04b0: 65 6e 20 61 20 63 6f 6e 66 69 67 64 61 74 20 6c en a configdat l
04c0: 6f 6f 6b 75 70 20 74 68 65 20 63 6f 6e 6e 65 63 ookup the connec
04d0: 74 69 6f 6e 20 69 6e 66 6f 20 61 6e 64 20 6f 70 tion info and op
04e0: 65 6e 20 74 68 65 20 64 62 0a 3b 3b 0a 28 64 65 en the db.;;.(de
04f0: 66 69 6e 65 20 28 70 67 64 62 3a 6f 70 65 6e 20 fine (pgdb:open
0500: 63 6f 6e 66 69 67 64 61 74 20 23 21 6b 65 79 20 configdat #!key
0510: 28 64 62 6e 61 6d 65 20 23 66 29 28 64 62 69 73 (dbname #f)(dbis
0520: 70 65 63 20 23 66 29 29 20 20 0a 20 20 28 6c 65 pec #f)) . (le
0530: 74 20 28 28 70 67 63 6f 6e 66 20 28 6f 72 20 64 t ((pgconf (or d
0540: 62 69 73 70 65 63 0a 09 09 20 20 20 20 28 61 72 bispec... (ar
0550: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 70 67 73 gs:get-arg "-pgs
0560: 79 6e 63 22 29 0a 09 09 20 20 20 20 28 69 66 20 ync")... (if
0570: 63 6f 6e 66 69 67 64 61 74 0a 09 09 09 28 63 6f configdat....(co
0580: 6e 66 69 67 66 3a 6c 6f 6f 6b 75 70 20 63 6f 6e nfigf:lookup con
0590: 66 69 67 64 61 74 20 22 65 78 74 2d 73 79 6e 63 figdat "ext-sync
05a0: 22 20 28 6f 72 20 64 62 6e 61 6d 65 20 22 70 67 " (or dbname "pg
05b0: 64 62 22 29 29 0a 09 09 09 23 66 29 0a 09 09 20 db"))....#f)...
05c0: 20 20 20 29 29 29 0a 20 20 20 20 28 69 66 20 70 ))). (if p
05d0: 67 63 6f 6e 66 0a 09 28 6c 65 74 2a 20 28 28 63 gconf..(let* ((c
05e0: 6f 6e 66 64 61 74 20 28 6d 61 70 20 28 6c 61 6d onfdat (map (lam
05f0: 62 64 61 20 28 63 6f 6e 66 2d 69 74 65 6d 29 0a bda (conf-item).
0600: 09 09 09 20 20 20 20 20 20 20 28 6c 65 74 20 28 ... (let (
0610: 28 70 61 72 74 73 20 28 73 74 72 69 6e 67 2d 73 (parts (string-s
0620: 70 6c 69 74 20 63 6f 6e 66 2d 69 74 65 6d 20 22 plit conf-item "
0630: 3a 22 29 29 29 0a 09 09 09 09 20 28 69 66 20 28 :")))..... (if (
0640: 3e 20 28 6c 65 6e 67 74 68 20 70 61 72 74 73 29 > (length parts)
0650: 20 31 29 0a 09 09 09 09 20 20 20 20 20 28 6c 65 1)..... (le
0660: 74 20 28 28 6b 65 79 20 28 63 61 72 20 70 61 72 t ((key (car par
0670: 74 73 29 29 0a 09 09 09 09 09 20 20 20 28 76 61 ts))...... (va
0680: 6c 20 28 63 61 64 72 20 70 61 72 74 73 29 29 29 l (cadr parts)))
0690: 0a 09 09 09 09 20 20 20 20 20 20 20 28 63 6f 6e ..... (con
06a0: 73 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f s (string->symbo
06b0: 6c 20 6b 65 79 29 20 76 61 6c 29 29 0a 09 09 09 l key) val))....
06c0: 09 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 . (begin....
06d0: 09 20 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 . (print "
06e0: 45 52 52 4f 52 3a 20 42 61 64 20 63 6f 6e 66 69 ERROR: Bad confi
06f0: 67 20 73 65 74 74 69 6e 67 20 22 20 63 6f 6e 66 g setting " conf
0700: 2d 69 74 65 6d 20 22 2c 20 73 68 6f 75 6c 64 20 -item ", should
0710: 62 65 20 6b 65 79 3a 76 61 6c 22 29 0a 09 09 09 be key:val")....
0720: 09 20 20 20 20 20 20 20 60 28 2c 28 73 74 72 69 . `(,(stri
0730: 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 63 61 72 20 ng->symbol (car
0740: 70 61 72 74 73 29 29 20 2e 20 23 66 29 29 29 29 parts)) . #f))))
0750: 29 0a 09 09 09 20 20 20 20 20 28 73 74 72 69 6e ).... (strin
0760: 67 2d 73 70 6c 69 74 20 70 67 63 6f 6e 66 29 29 g-split pgconf))
0770: 29 0a 09 20 20 20 20 20 20 20 28 64 62 74 79 70 ).. (dbtyp
0780: 65 20 20 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d e (string->sym
0790: 62 6f 6c 20 28 6f 72 20 28 61 6c 69 73 74 2d 72 bol (or (alist-r
07a0: 65 66 20 27 64 62 74 79 70 65 20 63 6f 6e 66 64 ef 'dbtype confd
07b0: 61 74 29 20 22 70 67 22 29 29 29 29 0a 09 20 20 at) "pg"))))..
07c0: 28 69 66 20 28 61 6c 69 73 74 2d 72 65 66 20 27 (if (alist-ref '
07d0: 64 62 74 79 70 65 20 63 6f 6e 66 64 61 74 29 0a dbtype confdat).
07e0: 09 20 20 20 20 20 20 28 64 62 69 3a 6f 70 65 6e . (dbi:open
07f0: 20 64 62 74 79 70 65 20 28 61 6c 69 73 74 2d 64 dbtype (alist-d
0800: 65 6c 65 74 65 20 27 64 62 74 79 70 65 20 63 6f elete 'dbtype co
0810: 6e 66 64 61 74 29 29 29 29 0a 09 23 66 29 29 29 nfdat))))..#f)))
0820: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
0830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 41 ==========.;; A
0870: 20 52 20 45 20 41 20 53 0a 3b 3b 3d 3d 3d 3d 3d R E A S.;;=====
0880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08c0: 3d 0a 0a 28 64 65 66 73 74 72 75 63 74 20 61 72 =..(defstruct ar
08d0: 65 61 20 69 64 20 61 72 65 61 2d 6e 61 6d 65 20 ea id area-name
08e0: 61 72 65 61 2d 70 61 74 68 20 6c 61 73 74 2d 75 area-path last-u
08f0: 70 64 61 74 65 29 0a 0a 28 64 65 66 69 6e 65 20 pdate)..(define
0900: 28 70 67 64 62 3a 61 64 64 2d 61 72 65 61 20 64 (pgdb:add-area d
0910: 62 68 20 61 72 65 61 2d 6e 61 6d 65 20 61 72 65 bh area-name are
0920: 61 2d 70 61 74 68 29 0a 20 20 28 64 62 69 3a 65 a-path). (dbi:e
0930: 78 65 63 20 64 62 68 20 22 49 4e 53 45 52 54 20 xec dbh "INSERT
0940: 49 4e 54 4f 20 61 72 65 61 73 20 28 61 72 65 61 INTO areas (area
0950: 5f 6e 61 6d 65 2c 61 72 65 61 5f 70 61 74 68 29 _name,area_path)
0960: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 22 20 61 VALUES (?,?)" a
0970: 72 65 61 2d 6e 61 6d 65 20 61 72 65 61 2d 70 61 rea-name area-pa
0980: 74 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 th))..(define (p
0990: 67 64 62 3a 67 65 74 2d 61 72 65 61 73 20 64 62 gdb:get-areas db
09a0: 68 29 0a 20 20 3b 3b 20 28 6d 61 70 0a 20 20 3b h). ;; (map. ;
09b0: 3b 20 20 28 6c 61 6d 62 64 61 20 28 72 6f 77 29 ; (lambda (row)
09c0: 0a 20 20 3b 3b 20 20 20 20 28 70 72 69 6e 74 20 . ;; (print
09d0: 22 72 6f 77 3a 20 22 20 72 6f 77 29 29 0a 20 20 "row: " row)).
09e0: 28 64 62 69 3a 67 65 74 2d 72 6f 77 73 20 64 62 (dbi:get-rows db
09f0: 68 20 22 53 45 4c 45 43 54 20 69 64 2c 61 72 65 h "SELECT id,are
0a00: 61 5f 6e 61 6d 65 2c 61 72 65 61 5f 70 61 74 68 a_name,area_path
0a10: 2c 6c 61 73 74 5f 73 79 6e 63 20 46 52 4f 4d 20 ,last_sync FROM
0a20: 61 72 65 61 73 3b 22 29 29 20 3b 3b 20 29 0a 0a areas;")) ;; )..
0a30: 3b 3b 20 67 69 76 65 6e 20 61 6e 20 61 72 65 61 ;; given an area
0a40: 5f 70 61 74 68 20 67 65 74 20 74 68 65 20 61 72 _path get the ar
0a50: 65 61 20 69 6e 66 6f 0a 3b 3b 0a 28 64 65 66 69 ea info.;;.(defi
0a60: 6e 65 20 28 70 67 64 62 3a 67 65 74 2d 61 72 65 ne (pgdb:get-are
0a70: 61 2d 62 79 2d 70 61 74 68 20 64 62 68 20 61 72 a-by-path dbh ar
0a80: 65 61 2d 70 61 74 68 29 0a 20 20 28 64 62 69 3a ea-path). (dbi:
0a90: 67 65 74 2d 6f 6e 65 2d 72 6f 77 20 64 62 68 20 get-one-row dbh
0aa0: 22 53 45 4c 45 43 54 20 69 64 2c 61 72 65 61 5f "SELECT id,area_
0ab0: 6e 61 6d 65 2c 61 72 65 61 5f 70 61 74 68 2c 6c name,area_path,l
0ac0: 61 73 74 5f 73 79 6e 63 20 46 52 4f 4d 20 61 72 ast_sync FROM ar
0ad0: 65 61 73 20 57 48 45 52 45 20 61 72 65 61 5f 70 eas WHERE area_p
0ae0: 61 74 68 3d 3f 3b 22 20 61 72 65 61 2d 70 61 74 ath=?;" area-pat
0af0: 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 h))..(define (pg
0b00: 64 62 3a 77 72 69 74 65 2d 73 79 6e 63 2d 74 69 db:write-sync-ti
0b10: 6d 65 20 64 62 68 20 61 72 65 61 2d 69 6e 66 6f me dbh area-info
0b20: 20 6e 65 77 2d 73 79 6e 63 2d 74 69 6d 65 29 0a new-sync-time).
0b30: 20 20 28 6c 65 74 20 28 28 61 72 65 61 2d 69 64 (let ((area-id
0b40: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 61 72 65 (vector-ref are
0b50: 61 2d 69 6e 66 6f 20 30 29 29 29 0a 20 20 20 20 a-info 0))).
0b60: 28 64 62 69 3a 65 78 65 63 20 64 62 68 20 22 55 (dbi:exec dbh "U
0b70: 50 44 41 54 45 20 61 72 65 61 73 20 53 45 54 20 PDATE areas SET
0b80: 6c 61 73 74 5f 73 79 6e 63 3d 3f 20 57 48 45 52 last_sync=? WHER
0b90: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 2d 73 79 6e E id=?;" new-syn
0ba0: 63 2d 74 69 6d 65 20 61 72 65 61 2d 69 64 29 29 c-time area-id))
0bb0: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
0bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 ===========.;;
0c00: 54 20 41 20 52 20 47 20 45 20 54 20 53 0a 3b 3b T A R G E T S.;;
0c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c50: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 47 69 76 65 6e ======..;; Given
0c60: 20 61 20 74 61 72 67 65 74 2d 73 70 65 63 2c 20 a target-spec,
0c70: 72 65 74 75 72 6e 20 74 68 65 20 69 64 2e 20 53 return the id. S
0c80: 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 68 hould probably h
0c90: 61 6e 64 6c 65 20 74 68 69 73 20 77 69 74 68 20 andle this with
0ca0: 61 20 6a 6f 69 6e 2e 2e 2e 0a 3b 3b 20 69 66 20 a join....;; if
0cb0: 74 61 72 67 65 74 2d 73 70 65 63 20 6e 6f 74 20 target-spec not
0cc0: 66 6f 75 6e 64 2c 20 63 72 65 61 74 65 20 61 20 found, create a
0cd0: 72 65 63 6f 72 64 20 66 6f 72 20 69 74 2e 0a 3b record for it..;
0ce0: 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ;.(define (pgdb:
0cf0: 67 65 74 2d 74 74 79 70 65 20 64 62 68 20 74 61 get-ttype dbh ta
0d00: 72 67 65 74 2d 73 70 65 63 29 0a 20 20 28 6c 65 rget-spec). (le
0d10: 74 20 28 28 73 70 65 63 2d 69 64 20 28 64 62 69 t ((spec-id (dbi
0d20: 3a 67 65 74 2d 6f 6e 65 20 64 62 68 20 22 53 45 :get-one dbh "SE
0d30: 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 74 74 79 LECT id FROM tty
0d40: 70 65 20 57 48 45 52 45 20 74 61 72 67 65 74 5f pe WHERE target_
0d50: 73 70 65 63 3d 3f 3b 22 20 74 61 72 67 65 74 2d spec=?;" target-
0d60: 73 70 65 63 29 29 29 0a 20 20 20 20 28 6f 72 20 spec))). (or
0d70: 73 70 65 63 2d 69 64 0a 09 28 69 66 20 28 68 61 spec-id..(if (ha
0d80: 6e 64 6c 65 2d 65 78 63 65 70 74 69 6f 6e 73 0a ndle-exceptions.
0d90: 09 09 65 78 6e 0a 09 09 28 62 65 67 69 6e 0a 09 ..exn...(begin..
0da0: 09 20 20 28 70 72 69 6e 74 2d 63 61 6c 6c 2d 63 . (print-call-c
0db0: 68 61 69 6e 29 0a 09 09 20 20 28 64 65 62 75 67 hain)... (debug
0dc0: 3a 70 72 69 6e 74 20 30 20 2a 64 65 66 61 75 6c :print 0 *defaul
0dd0: 74 2d 6c 6f 67 2d 70 6f 72 74 2a 20 22 45 52 52 t-log-port* "ERR
0de0: 4f 52 3a 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 OR: cannot creat
0df0: 65 20 74 74 79 70 65 20 65 6e 74 72 79 2c 20 22 e ttype entry, "
0e00: 20 28 28 63 6f 6e 64 69 74 69 6f 6e 2d 70 72 6f ((condition-pro
0e10: 70 65 72 74 79 2d 61 63 63 65 73 73 6f 72 20 27 perty-accessor '
0e20: 65 78 6e 20 27 6d 65 73 73 61 67 65 29 20 65 78 exn 'message) ex
0e30: 6e 29 29 0a 09 09 20 20 23 66 29 0a 09 20 20 20 n))... #f)..
0e40: 20 20 20 28 64 62 69 3a 65 78 65 63 20 64 62 68 (dbi:exec dbh
0e50: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 "INSERT INTO tt
0e60: 79 70 65 20 28 74 61 72 67 65 74 5f 73 70 65 63 ype (target_spec
0e70: 29 20 56 41 4c 55 45 53 20 28 3f 29 3b 22 20 74 ) VALUES (?);" t
0e80: 61 72 67 65 74 2d 73 70 65 63 29 29 0a 09 20 20 arget-spec))..
0e90: 20 20 28 70 67 64 62 3a 67 65 74 2d 74 74 79 70 (pgdb:get-ttyp
0ea0: 65 20 64 62 68 20 74 61 72 67 65 74 2d 73 70 65 e dbh target-spe
0eb0: 63 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d c)))))..;;======
0ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ee0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f00: 0a 3b 3b 20 20 54 20 41 20 47 20 53 0a 3b 3b 3d .;; T A G S.;;=
0f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f50: 3d 3d 3d 3d 3d 0a 0a 0a 28 64 65 66 69 6e 65 20 =====...(define
0f60: 28 70 67 64 62 3a 67 65 74 2d 74 61 67 2d 69 6e (pgdb:get-tag-in
0f70: 66 6f 2d 62 79 2d 6e 61 6d 65 20 64 62 68 20 74 fo-by-name dbh t
0f80: 61 67 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f ag). (dbi:get-o
0f90: 6e 65 2d 72 6f 77 20 64 62 68 20 22 53 45 4c 45 ne-row dbh "SELE
0fa0: 43 54 20 69 64 2c 74 61 67 5f 6e 61 6d 65 20 46 CT id,tag_name F
0fb0: 52 4f 4d 20 74 61 67 73 20 77 68 65 72 65 20 74 ROM tags where t
0fc0: 61 67 5f 6e 61 6d 65 3d 3f 3b 22 20 74 61 67 29 ag_name=?;" tag)
0fd0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 )..(define (pgdb
0fe0: 3a 69 6e 73 65 72 74 2d 74 61 67 20 64 62 68 20 :insert-tag dbh
0ff0: 6e 61 6d 65 20 29 0a 20 20 28 64 62 69 3a 65 78 name ). (dbi:ex
1000: 65 63 20 64 62 68 20 22 49 4e 53 45 52 54 20 49 ec dbh "INSERT I
1010: 4e 54 4f 20 74 61 67 73 20 28 74 61 67 5f 6e 61 NTO tags (tag_na
1020: 6d 65 29 20 56 41 4c 55 45 53 20 28 3f 29 22 20 me) VALUES (?)"
1030: 6e 61 6d 65 20 29 29 0a 0a 28 64 65 66 69 6e 65 name ))..(define
1040: 20 28 70 67 64 62 3a 69 6e 73 65 72 74 2d 61 72 (pgdb:insert-ar
1050: 65 61 2d 74 61 67 20 64 62 68 20 74 61 67 2d 69 ea-tag dbh tag-i
1060: 64 20 61 72 65 61 2d 69 64 20 29 0a 20 20 28 64 d area-id ). (d
1070: 62 69 3a 65 78 65 63 20 64 62 68 20 22 49 4e 53 bi:exec dbh "INS
1080: 45 52 54 20 49 4e 54 4f 20 61 72 65 61 5f 74 61 ERT INTO area_ta
1090: 67 73 20 28 74 61 67 5f 69 64 2c 20 61 72 65 61 gs (tag_id, area
10a0: 5f 69 64 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f _id) VALUES (?,?
10b0: 29 22 20 74 61 67 2d 69 64 20 61 72 65 61 2d 69 )" tag-id area-i
10c0: 64 20 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 d ))..(define (p
10d0: 67 64 62 3a 69 6e 73 65 72 74 2d 72 75 6e 2d 74 gdb:insert-run-t
10e0: 61 67 20 64 62 68 20 74 61 67 2d 69 64 20 72 75 ag dbh tag-id ru
10f0: 6e 2d 69 64 20 29 0a 20 20 28 64 62 69 3a 65 78 n-id ). (dbi:ex
1100: 65 63 20 64 62 68 20 22 49 4e 53 45 52 54 20 49 ec dbh "INSERT I
1110: 4e 54 4f 20 72 75 6e 5f 74 61 67 73 20 28 74 61 NTO run_tags (ta
1120: 67 5f 69 64 2c 20 72 75 6e 5f 69 64 29 20 56 41 g_id, run_id) VA
1130: 4c 55 45 53 20 28 3f 2c 3f 29 22 20 74 61 67 2d LUES (?,?)" tag-
1140: 69 64 20 72 75 6e 2d 69 64 20 29 29 0a 0a 0a 28 id run-id ))...(
1150: 64 65 66 69 6e 65 20 28 70 67 64 62 3a 69 73 2d define (pgdb:is-
1160: 61 72 65 61 2d 74 61 67 65 64 20 64 62 68 20 61 area-taged dbh a
1170: 72 65 61 2d 69 64 29 0a 20 20 20 28 6c 65 74 20 rea-id). (let
1180: 28 28 61 72 65 61 2d 74 61 67 2d 69 64 20 28 64 ((area-tag-id (d
1190: 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 68 20 22 bi:get-one dbh "
11a0: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 61 SELECT id FROM a
11b0: 72 65 61 5f 74 61 67 73 20 57 48 45 52 45 20 61 rea_tags WHERE a
11c0: 72 65 61 5f 69 64 3d 3f 3b 22 20 61 72 65 61 2d rea_id=?;" area-
11d0: 69 64 29 29 29 0a 20 20 20 28 69 66 20 61 72 65 id))). (if are
11e0: 61 2d 74 61 67 2d 69 64 20 0a 20 20 20 20 20 20 a-tag-id .
11f0: 20 20 20 20 20 23 74 0a 20 20 20 20 20 20 20 20 #t.
1200: 20 20 20 20 23 66 29 29 29 0a 0a 28 64 65 66 69 #f)))..(defi
1210: 6e 65 20 28 70 67 64 62 3a 69 73 2d 61 72 65 61 ne (pgdb:is-area
1220: 2d 74 61 67 65 64 2d 77 69 74 68 2d 61 2d 74 61 -taged-with-a-ta
1230: 67 20 64 62 68 20 20 20 74 61 67 2d 69 64 20 61 g dbh tag-id a
1240: 72 65 61 2d 69 64 29 0a 20 20 20 28 6c 65 74 20 rea-id). (let
1250: 28 28 61 72 65 61 2d 74 61 67 2d 69 64 20 28 64 ((area-tag-id (d
1260: 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 68 20 22 bi:get-one dbh "
1270: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 61 SELECT id FROM a
1280: 72 65 61 5f 74 61 67 73 20 57 48 45 52 45 20 61 rea_tags WHERE a
1290: 72 65 61 5f 69 64 3d 3f 20 61 6e 64 20 74 61 67 rea_id=? and tag
12a0: 5f 69 64 3d 3f 3b 22 20 61 72 65 61 2d 69 64 20 _id=?;" area-id
12b0: 74 61 67 2d 69 64 29 29 29 0a 20 20 20 28 69 66 tag-id))). (if
12c0: 20 61 72 65 61 2d 74 61 67 2d 69 64 20 0a 20 20 area-tag-id .
12d0: 20 20 20 20 20 20 20 20 20 23 74 0a 20 20 20 20 #t.
12e0: 20 20 20 20 20 20 20 20 23 66 29 29 29 0a 0a 28 #f)))..(
12f0: 64 65 66 69 6e 65 20 28 70 67 64 62 3a 69 73 2d define (pgdb:is-
1300: 72 75 6e 2d 74 61 67 65 64 2d 77 69 74 68 2d 61 run-taged-with-a
1310: 2d 74 61 67 20 64 62 68 20 20 20 74 61 67 2d 69 -tag dbh tag-i
1320: 64 20 72 75 6e 2d 69 64 29 0a 20 20 20 28 6c 65 d run-id). (le
1330: 74 20 28 28 72 75 6e 2d 74 61 67 2d 69 64 20 28 t ((run-tag-id (
1340: 64 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 68 20 dbi:get-one dbh
1350: 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 "SELECT id FROM
1360: 72 75 6e 5f 74 61 67 73 20 57 48 45 52 45 20 72 run_tags WHERE r
1370: 75 6e 5f 69 64 3d 3f 20 61 6e 64 20 74 61 67 5f un_id=? and tag_
1380: 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 20 74 61 id=?;" run-id ta
1390: 67 2d 69 64 29 29 29 0a 20 20 20 28 69 66 20 72 g-id))). (if r
13a0: 75 6e 2d 74 61 67 2d 69 64 20 0a 20 20 20 20 20 un-tag-id .
13b0: 20 20 20 20 20 20 23 74 0a 20 20 20 20 20 20 20 #t.
13c0: 20 20 20 20 20 23 66 29 29 29 0a 0a 0a 0a 3b 3b #f)))....;;
13d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1400: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1410: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 52 20 55 20 4e ======.;; R U N
1420: 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d S.;;===========
1430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 ===========..;;
1470: 67 69 76 65 6e 20 61 20 74 61 72 67 65 74 20 73 given a target s
1480: 70 65 63 20 69 64 2c 20 74 61 72 67 65 74 20 61 pec id, target a
1490: 6e 64 20 72 75 6e 2d 6e 61 6d 65 20 72 65 74 75 nd run-name retu
14a0: 72 6e 20 74 68 65 20 72 75 6e 2d 69 64 0a 3b 3b rn the run-id.;;
14b0: 20 69 66 20 6e 6f 20 72 75 6e 20 66 6f 75 6e 64 if no run found
14c0: 20 72 65 74 75 72 6e 20 23 66 0a 3b 3b 0a 28 64 return #f.;;.(d
14d0: 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d efine (pgdb:get-
14e0: 72 75 6e 2d 69 64 20 64 62 68 20 73 70 65 63 2d run-id dbh spec-
14f0: 69 64 20 74 61 72 67 65 74 20 72 75 6e 2d 6e 61 id target run-na
1500: 6d 65 20 61 72 65 61 2d 69 64 29 0a 20 20 28 64 me area-id). (d
1510: 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 68 20 22 bi:get-one dbh "
1520: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 72 SELECT id FROM r
1530: 75 6e 73 20 57 48 45 52 45 20 74 74 79 70 65 5f uns WHERE ttype_
1540: 69 64 3d 3f 20 41 4e 44 20 74 61 72 67 65 74 3d id=? AND target=
1550: 3f 20 41 4e 44 20 72 75 6e 5f 6e 61 6d 65 3d 3f ? AND run_name=?
1560: 20 61 6e 64 20 61 72 65 61 5f 69 64 3d 3f 3b 22 and area_id=?;"
1570: 0a 09 20 20 20 20 20 20 20 73 70 65 63 2d 69 64 .. spec-id
1580: 20 74 61 72 67 65 74 20 72 75 6e 2d 6e 61 6d 65 target run-name
1590: 20 61 72 65 61 2d 69 64 29 29 0a 0a 3b 3b 20 67 area-id))..;; g
15a0: 69 76 65 6e 20 61 20 74 61 72 67 65 74 20 73 70 iven a target sp
15b0: 65 63 20 69 64 2c 20 74 61 72 67 65 74 20 61 6e ec id, target an
15c0: 64 20 72 75 6e 2d 6e 61 6d 65 20 72 65 74 75 72 d run-name retur
15d0: 6e 20 74 68 65 20 72 75 6e 2d 69 64 0a 3b 3b 20 n the run-id.;;
15e0: 69 66 20 6e 6f 20 72 75 6e 20 66 6f 75 6e 64 20 if no run found
15f0: 72 65 74 75 72 6e 20 23 66 0a 3b 3b 0a 28 64 65 return #f.;;.(de
1600: 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d 72 fine (pgdb:get-r
1610: 75 6e 2d 6c 61 73 74 2d 75 70 64 61 74 65 20 64 un-last-update d
1620: 62 68 20 69 64 20 29 0a 20 20 28 64 62 69 3a 67 bh id ). (dbi:g
1630: 65 74 2d 6f 6e 65 20 64 62 68 20 22 53 45 4c 45 et-one dbh "SELE
1640: 43 54 20 6c 61 73 74 5f 75 70 64 61 74 65 20 46 CT last_update F
1650: 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 69 ROM runs WHERE i
1660: 64 3d 3f 3b 22 0a 09 20 20 20 20 20 20 20 20 69 d=?;".. i
1670: 64 29 29 0a 0a 3b 3b 20 67 69 76 65 6e 20 61 20 d))..;; given a
1680: 72 75 6e 2d 69 64 20 72 65 74 75 72 6e 20 61 6c run-id return al
1690: 6c 20 74 68 65 20 72 75 6e 20 69 6e 66 6f 0a 3b l the run info.;
16a0: 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ;.(define (pgdb:
16b0: 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 64 62 68 get-run-info dbh
16c0: 20 72 75 6e 2d 69 64 20 29 20 3b 3b 20 74 6f 20 run-id ) ;; to
16d0: 6a 6f 69 6e 20 74 74 79 70 65 20 6f 72 20 6e 6f join ttype or no
16e0: 74 3f 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f 6e t?. (dbi:get-on
16f0: 65 2d 72 6f 77 0a 20 20 20 64 62 68 20 20 20 3b e-row. dbh ;
1700: 3b 20 30 20 20 20 20 31 20 20 20 20 20 20 20 32 ; 0 1 2
1710: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 34 20 3 4
1720: 20 20 20 20 35 20 20 20 20 20 20 36 20 20 20 20 5 6
1730: 20 20 20 37 20 20 20 20 20 20 20 20 38 20 20 20 7 8
1740: 20 20 20 20 20 20 39 20 20 20 20 20 20 20 20 20 9
1750: 31 30 20 20 20 20 20 20 20 20 20 20 31 31 20 20 10 11
1760: 20 20 20 20 20 20 20 31 32 0a 20 20 20 22 53 45 12. "SE
1770: 4c 45 43 54 20 69 64 2c 74 61 72 67 65 74 2c 74 LECT id,target,t
1780: 74 79 70 65 5f 69 64 2c 72 75 6e 5f 6e 61 6d 65 type_id,run_name
1790: 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 6f 77 ,state,status,ow
17a0: 6e 65 72 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 63 ner,event_time,c
17b0: 6f 6d 6d 65 6e 74 2c 66 61 69 6c 5f 63 6f 75 6e omment,fail_coun
17c0: 74 2c 70 61 73 73 5f 63 6f 75 6e 74 2c 6c 61 73 t,pass_count,las
17d0: 74 5f 75 70 64 61 74 65 2c 61 72 65 61 5f 69 64 t_update,area_id
17e0: 0a 20 20 20 20 20 20 20 46 52 4f 4d 20 72 75 6e . FROM run
17f0: 73 20 57 48 45 52 45 20 69 64 3d 3f 20 3b 22 20 s WHERE id=? ;"
1800: 72 75 6e 2d 69 64 20 29 29 0a 0a 3b 3b 20 72 65 run-id ))..;; re
1810: 66 72 65 73 68 20 74 68 65 20 64 61 74 61 20 69 fresh the data i
1820: 6e 20 61 20 72 75 6e 20 72 65 63 6f 72 64 0a 3b n a run record.;
1830: 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ;.(define (pgdb:
1840: 72 65 66 72 65 73 68 2d 72 75 6e 2d 69 6e 66 6f refresh-run-info
1850: 20 64 62 68 20 72 75 6e 2d 69 64 20 73 74 61 74 dbh run-id stat
1860: 65 20 73 74 61 74 75 73 20 6f 77 6e 65 72 20 65 e status owner e
1870: 76 65 6e 74 2d 74 69 6d 65 20 63 6f 6d 6d 65 6e vent-time commen
1880: 74 20 66 61 69 6c 2d 63 6f 75 6e 74 20 70 61 73 t fail-count pas
1890: 73 2d 63 6f 75 6e 74 20 61 72 65 61 2d 69 64 20 s-count area-id
18a0: 6c 61 73 74 5f 75 70 64 61 74 65 20 70 75 62 6c last_update publ
18b0: 69 73 68 2d 74 69 6d 65 29 20 3b 3b 20 61 72 65 ish-time) ;; are
18c0: 61 2d 69 64 29 0a 20 20 28 64 62 69 3a 65 78 65 a-id). (dbi:exe
18d0: 63 0a 20 20 20 64 62 68 0a 20 20 20 22 55 50 44 c. dbh. "UPD
18e0: 41 54 45 20 72 75 6e 73 20 53 45 54 0a 20 20 20 ATE runs SET.
18f0: 20 20 20 73 74 61 74 65 3d 3f 2c 73 74 61 74 75 state=?,statu
1900: 73 3d 3f 2c 6f 77 6e 65 72 3d 3f 2c 65 76 65 6e s=?,owner=?,even
1910: 74 5f 74 69 6d 65 3d 3f 2c 63 6f 6d 6d 65 6e 74 t_time=?,comment
1920: 3d 3f 2c 66 61 69 6c 5f 63 6f 75 6e 74 3d 3f 2c =?,fail_count=?,
1930: 70 61 73 73 5f 63 6f 75 6e 74 3d 3f 2c 6c 61 73 pass_count=?,las
1940: 74 5f 75 70 64 61 74 65 3d 3f 2c 70 75 62 6c 69 t_update=?,publi
1950: 73 68 5f 74 69 6d 65 3d 3f 20 20 0a 20 20 20 20 sh_time=? .
1960: 20 57 48 45 52 45 20 69 64 3d 3f 20 61 6e 64 20 WHERE id=? and
1970: 61 72 65 61 5f 69 64 3d 3f 3b 22 0a 20 20 20 73 area_id=?;". s
1980: 74 61 74 65 20 73 74 61 74 75 73 20 6f 77 6e 65 tate status owne
1990: 72 20 65 76 65 6e 74 2d 74 69 6d 65 20 63 6f 6d r event-time com
19a0: 6d 65 6e 74 20 66 61 69 6c 2d 63 6f 75 6e 74 20 ment fail-count
19b0: 70 61 73 73 2d 63 6f 75 6e 74 20 6c 61 73 74 5f pass-count last_
19c0: 75 70 64 61 74 65 20 70 75 62 6c 69 73 68 2d 74 update publish-t
19d0: 69 6d 65 20 72 75 6e 2d 69 64 20 61 72 65 61 2d ime run-id area-
19e0: 69 64 20 29 29 0a 0a 3b 3b 20 67 69 76 65 6e 20 id ))..;; given
19f0: 61 6c 6c 20 6e 65 65 64 65 64 20 69 6e 66 6f 20 all needed info
1a00: 63 72 65 61 74 65 20 72 75 6e 20 72 65 63 6f 72 create run recor
1a10: 64 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 d.;;.(define (pg
1a20: 64 62 3a 69 6e 73 65 72 74 2d 72 75 6e 20 64 62 db:insert-run db
1a30: 68 20 74 74 79 70 65 2d 69 64 20 74 61 72 67 65 h ttype-id targe
1a40: 74 20 72 75 6e 2d 6e 61 6d 65 20 73 74 61 74 65 t run-name state
1a50: 20 73 74 61 74 75 73 20 6f 77 6e 65 72 20 65 76 status owner ev
1a60: 65 6e 74 2d 74 69 6d 65 20 63 6f 6d 6d 65 6e 74 ent-time comment
1a70: 20 66 61 69 6c 2d 63 6f 75 6e 74 20 70 61 73 73 fail-count pass
1a80: 2d 63 6f 75 6e 74 20 61 72 65 61 2d 69 64 20 6c -count area-id l
1a90: 61 73 74 2d 75 70 64 61 74 65 20 70 75 62 6c 69 ast-update publi
1aa0: 73 68 2d 74 69 6d 65 29 0a 20 20 20 20 28 64 62 sh-time). (db
1ab0: 69 3a 65 78 65 63 0a 20 20 20 64 62 68 0a 20 20 i:exec. dbh.
1ac0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 75 "INSERT INTO ru
1ad0: 6e 73 20 28 74 74 79 70 65 5f 69 64 2c 74 61 72 ns (ttype_id,tar
1ae0: 67 65 74 2c 72 75 6e 5f 6e 61 6d 65 2c 73 74 61 get,run_name,sta
1af0: 74 65 2c 73 74 61 74 75 73 2c 6f 77 6e 65 72 2c te,status,owner,
1b00: 65 76 65 6e 74 5f 74 69 6d 65 2c 63 6f 6d 6d 65 event_time,comme
1b10: 6e 74 2c 66 61 69 6c 5f 63 6f 75 6e 74 2c 70 61 nt,fail_count,pa
1b20: 73 73 5f 63 6f 75 6e 74 2c 61 72 65 61 5f 69 64 ss_count,area_id
1b30: 2c 6c 61 73 74 5f 75 70 64 61 74 65 2c 70 75 62 ,last_update,pub
1b40: 6c 69 73 68 5f 74 69 6d 65 29 0a 20 20 20 20 20 lish_time).
1b50: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f VALUES (?,?,?,?
1b60: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f ,?,?,?,?,?,?,?,?
1b70: 2c 20 3f 29 3b 22 0a 20 20 20 20 74 74 79 70 65 , ?);". ttype
1b80: 2d 69 64 20 74 61 72 67 65 74 20 72 75 6e 2d 6e -id target run-n
1b90: 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 ame state status
1ba0: 20 6f 77 6e 65 72 20 65 76 65 6e 74 2d 74 69 6d owner event-tim
1bb0: 65 20 63 6f 6d 6d 65 6e 74 20 66 61 69 6c 2d 63 e comment fail-c
1bc0: 6f 75 6e 74 20 70 61 73 73 2d 63 6f 75 6e 74 20 ount pass-count
1bd0: 61 72 65 61 2d 69 64 20 6c 61 73 74 2d 75 70 64 area-id last-upd
1be0: 61 74 65 20 70 75 62 6c 69 73 68 2d 74 69 6d 65 ate publish-time
1bf0: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
1c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
1c40: 20 54 20 45 20 53 20 54 20 2d 20 53 20 54 20 45 T E S T - S T E
1c50: 20 50 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d P S.;;=========
1c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 =============..(
1ca0: 64 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 define (pgdb:get
1cb0: 2d 74 65 73 74 2d 73 74 65 70 2d 69 64 20 64 62 -test-step-id db
1cc0: 68 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e 61 h test-id stepna
1cd0: 6d 65 20 73 74 61 74 65 29 0a 20 20 28 64 62 69 me state). (dbi
1ce0: 3a 67 65 74 2d 6f 6e 65 0a 20 20 20 20 64 62 68 :get-one. dbh
1cf0: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 20 . "SELECT id
1d00: 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 FROM test_steps
1d10: 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 WHERE test_id=?
1d20: 41 4e 44 20 73 74 65 70 6e 61 6d 65 3d 3f 20 61 AND stepname=? a
1d30: 6e 64 20 73 74 61 74 65 20 3d 20 3f 20 3b 22 0a nd state = ? ;".
1d40: 20 20 20 20 74 65 73 74 2d 69 64 20 73 74 65 70 test-id step
1d50: 6e 61 6d 65 20 73 74 61 74 65 29 29 0a 0a 28 64 name state))..(d
1d60: 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d efine (pgdb:get-
1d70: 74 65 73 74 2d 73 74 65 70 2d 6c 61 73 74 2d 75 test-step-last-u
1d80: 70 64 61 74 65 20 64 62 68 20 69 64 20 29 0a 20 pdate dbh id ).
1d90: 20 28 64 62 69 3a 67 65 74 2d 6f 6e 65 0a 20 20 (dbi:get-one.
1da0: 20 20 64 62 68 0a 20 20 20 20 22 53 45 4c 45 43 dbh. "SELEC
1db0: 54 20 6c 61 73 74 5f 75 70 64 61 74 65 20 46 52 T last_update FR
1dc0: 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 OM test_steps WH
1dd0: 45 52 45 20 69 64 3d 3f 20 3b 22 0a 20 20 20 20 ERE id=? ;".
1de0: 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 id))..(define (p
1df0: 67 64 62 3a 69 6e 73 65 72 74 2d 74 65 73 74 2d gdb:insert-test-
1e00: 73 74 65 70 20 64 62 68 20 74 65 73 74 2d 69 64 step dbh test-id
1e10: 20 73 74 65 70 6e 61 6d 65 20 73 74 61 74 65 20 stepname state
1e20: 73 74 61 74 75 73 20 65 76 65 6e 74 5f 74 69 6d status event_tim
1e30: 65 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c e comment logfil
1e40: 65 20 6c 61 73 74 2d 75 70 64 61 74 65 20 29 0a e last-update ).
1e50: 20 20 28 64 62 69 3a 65 78 65 63 0a 20 20 20 64 (dbi:exec. d
1e60: 62 68 0a 20 20 20 22 49 4e 53 45 52 54 20 49 4e bh. "INSERT IN
1e70: 54 4f 20 74 65 73 74 5f 73 74 65 70 73 20 28 74 TO test_steps (t
1e80: 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c est_id,stepname,
1e90: 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 state,status,eve
1ea0: 6e 74 5f 74 69 6d 65 2c 6c 6f 67 66 69 6c 65 2c nt_time,logfile,
1eb0: 63 6f 6d 6d 65 6e 74 2c 6c 61 73 74 5f 75 70 64 comment,last_upd
1ec0: 61 74 65 29 0a 20 20 20 20 20 20 20 56 41 4c 55 ate). VALU
1ed0: 45 53 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c ES (?,?,?,?,?,?,
1ee0: 3f 2c 3f 20 29 3b 22 0a 20 20 20 74 65 73 74 2d ?,? );". test-
1ef0: 69 64 20 73 74 65 70 6e 61 6d 65 20 20 73 74 61 id stepname sta
1f00: 74 65 20 20 20 73 74 61 74 75 73 20 20 65 76 65 te status eve
1f10: 6e 74 5f 74 69 6d 65 20 20 20 6c 6f 67 66 69 6c nt_time logfil
1f20: 65 20 20 20 63 6f 6d 6d 65 6e 74 20 6c 61 73 74 e comment last
1f30: 2d 75 70 64 61 74 65 29 29 0a 0a 28 64 65 66 69 -update))..(defi
1f40: 6e 65 20 28 70 67 64 62 3a 75 70 64 61 74 65 2d ne (pgdb:update-
1f50: 74 65 73 74 2d 73 74 65 70 20 64 62 68 20 73 74 test-step dbh st
1f60: 65 70 2d 69 64 20 74 65 73 74 2d 69 64 20 73 74 ep-id test-id st
1f70: 65 70 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 epname state sta
1f80: 74 75 73 20 65 76 65 6e 74 5f 74 69 6d 65 20 63 tus event_time c
1f90: 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 20 6c omment logfile l
1fa0: 61 73 74 2d 75 70 64 61 74 65 29 0a 20 20 28 64 ast-update). (d
1fb0: 62 69 3a 65 78 65 63 0a 20 20 20 20 64 62 68 0a bi:exec. dbh.
1fc0: 20 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 "UPDATE test
1fd0: 5f 73 74 65 70 73 20 53 45 54 0a 20 20 20 20 20 _steps SET.
1fe0: 20 20 20 20 74 65 73 74 5f 69 64 3d 3f 2c 73 74 test_id=?,st
1ff0: 65 70 6e 61 6d 65 3d 3f 2c 73 74 61 74 65 3d 3f epname=?,state=?
2000: 2c 73 74 61 74 75 73 3d 3f 2c 65 76 65 6e 74 5f ,status=?,event_
2010: 74 69 6d 65 3d 3f 2c 6c 6f 67 66 69 6c 65 3d 3f time=?,logfile=?
2020: 2c 63 6f 6d 6d 65 6e 74 3d 3f 2c 6c 61 73 74 5f ,comment=?,last_
2030: 75 70 64 61 74 65 3d 3f 0a 20 20 20 20 20 20 20 update=?.
2040: 20 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a WHERE id=?;".
2050: 20 20 20 20 74 65 73 74 2d 69 64 20 73 74 65 70 test-id step
2060: 6e 61 6d 65 20 20 73 74 61 74 65 20 20 20 73 74 name state st
2070: 61 74 75 73 20 20 65 76 65 6e 74 5f 74 69 6d 65 atus event_time
2080: 20 20 20 6c 6f 67 66 69 6c 65 20 20 20 63 6f 6d logfile com
2090: 6d 65 6e 74 20 6c 61 73 74 2d 75 70 64 61 74 65 ment last-update
20a0: 20 73 74 65 70 2d 69 64 29 29 0a 0a 0a 3b 3b 3d step-id))...;;=
20b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20f0: 3d 3d 3d 3d 3d 0a 3b 3b 20 20 54 20 45 20 53 20 =====.;; T E S
2100: 54 20 2d 20 44 20 41 20 54 20 41 0a 3b 3b 3d 3d T - D A T A.;;==
2110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2150: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 70 ====..(define (p
2160: 67 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 gdb:get-test-dat
2170: 61 2d 69 64 20 64 62 68 20 74 65 73 74 2d 69 64 a-id dbh test-id
2180: 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 category variab
2190: 6c 65 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f le). (dbi:get-o
21a0: 6e 65 0a 20 20 20 20 64 62 68 0a 20 20 20 20 22 ne. dbh. "
21b0: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 74 SELECT id FROM t
21c0: 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 est_data WHERE t
21d0: 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 63 61 74 est_id=? AND cat
21e0: 65 67 6f 72 79 3d 3f 20 61 6e 64 20 76 61 72 69 egory=? and vari
21f0: 61 62 6c 65 20 3d 20 3f 20 3b 22 0a 20 20 20 20 able = ? ;".
2200: 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 test-id category
2210: 20 76 61 72 69 61 62 6c 65 29 29 0a 0a 28 64 65 variable))..(de
2220: 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d 74 fine (pgdb:get-t
2230: 65 73 74 2d 64 61 74 61 2d 6c 61 73 74 2d 75 70 est-data-last-up
2240: 64 61 74 65 20 64 62 68 20 74 65 73 74 2d 64 61 date dbh test-da
2250: 74 61 2d 69 64 20 29 0a 20 20 28 64 62 69 3a 67 ta-id ). (dbi:g
2260: 65 74 2d 6f 6e 65 0a 20 20 20 20 64 62 68 0a 20 et-one. dbh.
2270: 20 20 20 22 53 45 4c 45 43 54 20 6c 61 73 74 5f "SELECT last_
2280: 75 70 64 61 74 65 20 46 52 4f 4d 20 74 65 73 74 update FROM test
2290: 5f 64 61 74 61 20 57 48 45 52 45 20 69 64 3d 3f _data WHERE id=?
22a0: 20 3b 22 0a 20 20 20 20 74 65 73 74 2d 64 61 74 ;". test-dat
22b0: 61 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 a-id))..(define
22c0: 28 70 67 64 62 3a 69 6e 73 65 72 74 2d 74 65 73 (pgdb:insert-tes
22d0: 74 2d 64 61 74 61 20 64 62 68 20 74 65 73 74 2d t-data dbh test-
22e0: 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 id category vari
22f0: 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 able value expec
2300: 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 6f ted tol units co
2310: 6d 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 70 mment status typ
2320: 65 20 6c 61 73 74 2d 75 70 64 61 74 65 29 0a 20 e last-update).
2330: 3b 20 28 70 72 69 6e 74 20 22 49 4e 53 45 52 54 ; (print "INSERT
2340: 20 49 4e 54 4f 20 74 65 73 74 5f 64 61 74 61 20 INTO test_data
2350: 28 74 65 73 74 5f 69 64 2c 20 63 61 74 65 67 6f (test_id, catego
2360: 72 79 2c 20 76 61 72 69 61 62 6c 65 2c 20 76 61 ry, variable, va
2370: 6c 75 65 2c 20 65 78 70 65 63 74 65 64 2c 20 74 lue, expected, t
2380: 6f 6c 2c 20 75 6e 69 74 73 2c 20 63 6f 6d 6d 65 ol, units, comme
2390: 6e 74 2c 20 73 74 61 74 75 73 2c 20 74 79 70 65 nt, status, type
23a0: 29 0a 20 3b 20 20 20 20 20 20 56 41 4c 55 45 53 ). ; VALUES
23b0: 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c (?,?,?,?,?,?,?,
23c0: 3f 2c 3f 2c 3f 29 20 22 20 74 65 73 74 2d 69 64 ?,?,?) " test-id
23d0: 20 22 20 22 20 63 61 74 65 67 6f 72 79 20 22 20 " " category "
23e0: 22 20 76 61 72 69 61 62 6c 65 20 22 20 22 20 76 " variable " " v
23f0: 61 6c 75 65 20 22 20 22 20 20 65 78 70 65 63 74 alue " " expect
2400: 65 64 20 22 20 22 20 20 74 6f 6c 20 22 20 22 20 ed " " tol " "
2410: 20 75 6e 69 74 73 20 22 20 22 20 63 6f 6d 6d 65 units " " comme
2420: 6e 74 20 20 22 20 22 20 73 74 61 74 75 73 20 20 nt " " status
2430: 22 20 22 20 74 79 70 65 29 0a 20 20 28 69 66 20 " " type). (if
2440: 28 6e 6f 74 20 28 73 74 72 69 6e 67 3f 20 75 6e (not (string? un
2450: 69 74 73 29 29 0a 20 20 20 20 20 20 28 73 65 74 its)). (set
2460: 21 20 75 6e 69 74 73 20 22 22 20 29 29 0a 20 20 ! units "" )).
2470: 28 69 66 20 28 6e 6f 74 20 28 73 74 72 69 6e 67 (if (not (string
2480: 3f 20 76 61 72 69 61 62 6c 65 29 29 0a 20 20 20 ? variable)).
2490: 20 20 20 28 73 65 74 21 20 76 61 72 69 61 62 6c (set! variabl
24a0: 65 20 22 22 20 29 29 0a 20 20 28 69 66 20 28 6e e "" )). (if (n
24b0: 6f 74 20 28 72 65 61 6c 3f 20 76 61 6c 75 65 29 ot (real? value)
24c0: 29 0a 20 20 20 20 20 20 28 73 65 74 21 20 76 61 ). (set! va
24d0: 6c 75 65 20 30 20 29 29 0a 20 20 28 69 66 20 28 lue 0 )). (if (
24e0: 6e 6f 74 20 28 72 65 61 6c 3f 20 65 78 70 65 63 not (real? expec
24f0: 74 65 64 29 29 0a 20 20 20 20 20 20 28 73 65 74 ted)). (set
2500: 21 20 65 78 70 65 63 74 65 64 20 30 20 20 29 29 ! expected 0 ))
2510: 0a 28 69 66 20 28 6e 6f 74 20 28 72 65 61 6c 3f .(if (not (real?
2520: 20 74 6f 6c 29 29 0a 20 20 20 20 20 20 28 73 65 tol)). (se
2530: 74 21 20 74 6f 6c 20 30 20 20 29 29 0a 0a 20 20 t! tol 0 ))..
2540: 28 64 62 69 3a 65 78 65 63 0a 20 20 20 64 62 68 (dbi:exec. dbh
2550: 0a 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f . "INSERT INTO
2560: 20 74 65 73 74 5f 64 61 74 61 20 28 74 65 73 74 test_data (test
2570: 5f 69 64 2c 20 63 61 74 65 67 6f 72 79 2c 20 76 _id, category, v
2580: 61 72 69 61 62 6c 65 2c 20 76 61 6c 75 65 2c 20 ariable, value,
2590: 65 78 70 65 63 74 65 64 2c 20 74 6f 6c 2c 20 75 expected, tol, u
25a0: 6e 69 74 73 2c 20 63 6f 6d 6d 65 6e 74 2c 20 73 nits, comment, s
25b0: 74 61 74 75 73 2c 20 74 79 70 65 2c 20 6c 61 73 tatus, type, las
25c0: 74 5f 75 70 64 61 74 65 29 0a 20 20 20 20 20 20 t_update).
25d0: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f VALUES (?,?,?,?
25e0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 20 3f 29 ,?,?,?,?,?,?, ?)
25f0: 3b 22 0a 20 20 20 74 65 73 74 2d 69 64 20 63 61 ;". test-id ca
2600: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 tegory variable
2610: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 value expected t
2620: 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 ol units comment
2630: 20 73 74 61 74 75 73 20 74 79 70 65 20 6c 61 73 status type las
2640: 74 2d 75 70 64 61 74 65 29 29 0a 0a 28 64 65 66 t-update))..(def
2650: 69 6e 65 20 28 70 67 64 62 3a 75 70 64 61 74 65 ine (pgdb:update
2660: 2d 74 65 73 74 2d 64 61 74 61 20 64 62 68 20 64 -test-data dbh d
2670: 61 74 61 2d 69 64 20 74 65 73 74 2d 69 64 20 20 ata-id test-id
2680: 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c category variabl
2690: 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 e value expected
26a0: 20 74 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 tol units comme
26b0: 6e 74 20 73 74 61 74 75 73 20 74 79 70 65 20 6c nt status type l
26c0: 61 73 74 2d 75 70 64 61 74 65 29 0a 20 20 28 64 ast-update). (d
26d0: 62 69 3a 65 78 65 63 0a 20 20 20 20 64 62 68 0a bi:exec. dbh.
26e0: 20 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 "UPDATE test
26f0: 5f 64 61 74 61 20 53 45 54 0a 20 20 20 20 20 20 _data SET.
2700: 20 20 20 74 65 73 74 5f 69 64 3d 3f 2c 20 63 61 test_id=?, ca
2710: 74 65 67 6f 72 79 3d 3f 2c 20 76 61 72 69 61 62 tegory=?, variab
2720: 6c 65 3d 3f 2c 20 76 61 6c 75 65 3d 3f 2c 20 65 le=?, value=?, e
2730: 78 70 65 63 74 65 64 3d 3f 2c 20 74 6f 6c 3d 3f xpected=?, tol=?
2740: 2c 20 75 6e 69 74 73 3d 3f 2c 20 63 6f 6d 6d 65 , units=?, comme
2750: 6e 74 3d 3f 2c 20 73 74 61 74 75 73 3d 3f 2c 20 nt=?, status=?,
2760: 74 79 70 65 3d 3f 2c 20 6c 61 73 74 5f 75 70 64 type=?, last_upd
2770: 61 74 65 3d 3f 0a 20 20 20 20 20 20 20 20 20 20 ate=?.
2780: 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 WHERE id=?;".
2790: 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 test-id categor
27a0: 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 y variable value
27b0: 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e expected tol un
27c0: 69 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 74 its comment stat
27d0: 75 73 20 74 79 70 65 20 6c 61 73 74 2d 75 70 64 us type last-upd
27e0: 61 74 65 20 64 61 74 61 2d 69 64 20 29 29 0a 0a ate data-id ))..
27f0: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
2800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 54 ==========.;; T
2840: 20 45 20 53 20 54 20 53 0a 3b 3b 3d 3d 3d 3d 3d E S T S.;;=====
2850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2890: 3d 0a 0a 3b 3b 20 67 69 76 65 6e 20 72 75 6e 2d =..;; given run-
28a0: 69 64 2c 20 74 65 73 74 5f 6e 61 6d 65 20 61 6e id, test_name an
28b0: 64 20 69 74 65 6d 5f 70 61 74 68 20 72 65 74 75 d item_path retu
28c0: 72 6e 20 74 65 73 74 2d 69 64 0a 3b 3b 0a 28 64 rn test-id.;;.(d
28d0: 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d efine (pgdb:get-
28e0: 74 65 73 74 2d 69 64 20 64 62 68 20 72 75 6e 2d test-id dbh run-
28f0: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
2900: 6d 2d 70 61 74 68 29 0a 20 20 28 64 62 69 3a 67 m-path). (dbi:g
2910: 65 74 2d 6f 6e 65 0a 20 20 20 64 62 68 0a 20 20 et-one. dbh.
2920: 20 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d "SELECT id FROM
2930: 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 6e tests WHERE run
2940: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 5f 6e _id=? AND test_n
2950: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
2960: 61 74 68 3d 3f 3b 22 0a 20 20 20 72 75 6e 2d 69 ath=?;". run-i
2970: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
2980: 2d 70 61 74 68 29 29 0a 0a 28 64 65 66 69 6e 65 -path))..(define
2990: 20 28 70 67 64 62 3a 67 65 74 2d 74 65 73 74 2d (pgdb:get-test-
29a0: 6c 61 73 74 2d 75 70 64 61 74 65 20 64 62 68 20 last-update dbh
29b0: 69 64 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f id). (dbi:get-o
29c0: 6e 65 0a 20 20 20 64 62 68 0a 20 20 20 22 53 45 ne. dbh. "SE
29d0: 4c 45 43 54 20 6c 61 73 74 5f 75 70 64 61 74 65 LECT last_update
29e0: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
29f0: 45 20 69 64 3d 3f 20 3b 22 0a 20 20 20 69 64 20 E id=? ;". id
2a00: 29 29 0a 0a 0a 3b 3b 20 63 72 65 61 74 65 20 6e ))...;; create n
2a10: 65 77 20 74 65 73 74 20 72 65 63 6f 72 64 0a 3b ew test record.;
2a20: 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ;.(define (pgdb:
2a30: 69 6e 73 65 72 74 2d 74 65 73 74 20 64 62 68 20 insert-test dbh
2a40: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
2a50: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 65 item-path state
2a60: 20 73 74 61 74 75 73 20 68 6f 73 74 20 63 70 75 status host cpu
2a70: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
2a80: 61 6d 65 20 72 75 6e 2d 64 69 72 20 6c 6f 67 2d ame run-dir log-
2a90: 66 69 6c 65 20 72 75 6e 2d 64 75 72 61 74 69 6f file run-duratio
2aa0: 6e 20 63 6f 6d 6d 65 6e 74 20 65 76 65 6e 74 2d n comment event-
2ab0: 74 69 6d 65 20 61 72 63 68 69 76 65 64 20 6c 61 time archived la
2ac0: 73 74 2d 75 70 64 61 74 65 20 70 69 64 29 0a 20 st-update pid).
2ad0: 20 28 64 62 69 3a 65 78 65 63 0a 20 20 20 64 62 (dbi:exec. db
2ae0: 68 0a 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 h. "INSERT INT
2af0: 4f 20 74 65 73 74 73 20 28 72 75 6e 5f 69 64 2c O tests (run_id,
2b00: 74 65 73 74 5f 6e 61 6d 65 2c 69 74 65 6d 5f 70 test_name,item_p
2b10: 61 74 68 2c 73 74 61 74 65 2c 73 74 61 74 75 73 ath,state,status
2b20: 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 69 ,host,cpuload,di
2b30: 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e skfree,uname,run
2b40: 64 69 72 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 72 dir,final_logf,r
2b50: 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 63 6f 6d 6d un_duration,comm
2b60: 65 6e 74 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 61 ent,event_time,a
2b70: 72 63 68 69 76 65 64 2c 6c 61 73 74 5f 75 70 64 rchived,last_upd
2b80: 61 74 65 2c 61 74 74 65 6d 70 74 6e 75 6d 29 0a ate,attemptnum).
2b90: 20 20 20 20 20 20 20 56 41 4c 55 45 53 20 28 3f VALUES (?
2ba0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f ,?,?,?,?,?,?,?,?
2bb0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f ,?,?,?,?,?,?,?,?
2bc0: 29 3b 22 0a 0a 20 20 20 72 75 6e 2d 69 64 20 20 );".. run-id
2bd0: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
2be0: 61 74 68 20 20 20 20 73 74 61 74 65 20 20 20 73 ath state s
2bf0: 74 61 74 75 73 20 20 20 20 20 68 6f 73 74 20 20 tatus host
2c00: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
2c10: 20 75 6e 61 6d 65 0a 20 20 20 72 75 6e 2d 64 69 uname. run-di
2c20: 72 20 6c 6f 67 2d 66 69 6c 65 20 20 72 75 6e 2d r log-file run-
2c30: 64 75 72 61 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 duration comment
2c40: 20 65 76 65 6e 74 2d 74 69 6d 65 20 61 72 63 68 event-time arch
2c50: 69 76 65 64 20 6c 61 73 74 2d 75 70 64 61 74 65 ived last-update
2c60: 20 70 69 64 29 29 0a 0a 3b 3b 20 75 70 64 61 74 pid))..;; updat
2c70: 65 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 e existing test
2c80: 72 65 63 6f 72 64 0a 3b 3b 0a 28 64 65 66 69 6e record.;;.(defin
2c90: 65 20 28 70 67 64 62 3a 75 70 64 61 74 65 2d 74 e (pgdb:update-t
2ca0: 65 73 74 20 64 62 68 20 74 65 73 74 2d 69 64 20 est dbh test-id
2cb0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
2cc0: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 65 item-path state
2cd0: 20 73 74 61 74 75 73 20 68 6f 73 74 20 63 70 75 status host cpu
2ce0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
2cf0: 61 6d 65 20 72 75 6e 2d 64 69 72 20 6c 6f 67 2d ame run-dir log-
2d00: 66 69 6c 65 20 72 75 6e 2d 64 75 72 61 74 69 6f file run-duratio
2d10: 6e 20 63 6f 6d 6d 65 6e 74 20 65 76 65 6e 74 2d n comment event-
2d20: 74 69 6d 65 20 61 72 63 68 69 76 65 64 20 6c 61 time archived la
2d30: 73 74 2d 75 70 64 61 74 65 20 70 69 64 29 0a 20 st-update pid).
2d40: 20 28 64 62 69 3a 65 78 65 63 0a 20 20 20 64 62 (dbi:exec. db
2d50: 68 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 h. "UPDATE tes
2d60: 74 73 20 53 45 54 0a 20 20 20 20 20 20 72 75 6e ts SET. run
2d70: 5f 69 64 3d 3f 2c 74 65 73 74 5f 6e 61 6d 65 3d _id=?,test_name=
2d80: 3f 2c 69 74 65 6d 5f 70 61 74 68 3d 3f 2c 73 74 ?,item_path=?,st
2d90: 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 2c 68 ate=?,status=?,h
2da0: 6f 73 74 3d 3f 2c 63 70 75 6c 6f 61 64 3d 3f 2c ost=?,cpuload=?,
2db0: 64 69 73 6b 66 72 65 65 3d 3f 2c 75 6e 61 6d 65 diskfree=?,uname
2dc0: 3d 3f 2c 72 75 6e 64 69 72 3d 3f 2c 66 69 6e 61 =?,rundir=?,fina
2dd0: 6c 5f 6c 6f 67 66 3d 3f 2c 72 75 6e 5f 64 75 72 l_logf=?,run_dur
2de0: 61 74 69 6f 6e 3d 3f 2c 63 6f 6d 6d 65 6e 74 3d ation=?,comment=
2df0: 3f 2c 65 76 65 6e 74 5f 74 69 6d 65 3d 3f 2c 61 ?,event_time=?,a
2e00: 72 63 68 69 76 65 64 3d 3f 2c 6c 61 73 74 5f 75 rchived=?,last_u
2e10: 70 64 61 74 65 3d 3f 2c 61 74 74 65 6d 70 74 6e pdate=?,attemptn
2e20: 75 6d 3d 3f 0a 20 20 20 20 57 48 45 52 45 20 69 um=?. WHERE i
2e30: 64 3d 3f 3b 22 0a 0a 20 20 20 72 75 6e 2d 69 64 d=?;".. run-id
2e40: 20 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d test-name item
2e50: 2d 70 61 74 68 20 20 20 20 73 74 61 74 65 20 20 -path state
2e60: 20 73 74 61 74 75 73 20 20 20 20 20 68 6f 73 74 status host
2e70: 20 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 cpuload diskfr
2e80: 65 65 20 75 6e 61 6d 65 0a 20 20 20 72 75 6e 2d ee uname. run-
2e90: 64 69 72 20 6c 6f 67 2d 66 69 6c 65 20 20 72 75 dir log-file ru
2ea0: 6e 2d 64 75 72 61 74 69 6f 6e 20 63 6f 6d 6d 65 n-duration comme
2eb0: 6e 74 20 65 76 65 6e 74 2d 74 69 6d 65 20 61 72 nt event-time ar
2ec0: 63 68 69 76 65 64 20 6c 61 73 74 2d 75 70 64 61 chived last-upda
2ed0: 74 65 20 70 69 64 20 74 65 73 74 2d 69 64 29 29 te pid test-id))
2ee0: 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ..(define (pgdb:
2ef0: 67 65 74 2d 74 65 73 74 73 20 64 62 68 20 74 61 get-tests dbh ta
2f00: 72 67 65 74 2d 70 61 74 74 29 0a 20 20 28 64 62 rget-patt). (db
2f10: 69 3a 67 65 74 2d 72 6f 77 73 0a 20 20 20 64 62 i:get-rows. db
2f20: 68 0a 20 20 20 22 53 45 4c 45 43 54 20 74 2e 69 h. "SELECT t.i
2f30: 64 2c 74 2e 72 75 6e 5f 69 64 2c 74 2e 74 65 73 d,t.run_id,t.tes
2f40: 74 5f 6e 61 6d 65 2c 74 2e 69 74 65 6d 5f 70 61 t_name,t.item_pa
2f50: 74 68 2c 74 2e 73 74 61 74 65 2c 74 2e 73 74 61 th,t.state,t.sta
2f60: 74 75 73 2c 74 2e 68 6f 73 74 2c 74 2e 63 70 75 tus,t.host,t.cpu
2f70: 6c 6f 61 64 2c 74 2e 64 69 73 6b 66 72 65 65 2c load,t.diskfree,
2f80: 74 2e 75 6e 61 6d 65 2c 74 2e 72 75 6e 64 69 72 t.uname,t.rundir
2f90: 2c 74 2e 66 69 6e 61 6c 5f 6c 6f 67 66 2c 74 2e ,t.final_logf,t.
2fa0: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 74 2e 63 run_duration,t.c
2fb0: 6f 6d 6d 65 6e 74 2c 74 2e 65 76 65 6e 74 5f 74 omment,t.event_t
2fc0: 69 6d 65 2c 74 2e 61 72 63 68 69 76 65 64 2c 0a ime,t.archived,.
2fd0: 20 20 20 20 20 20 20 20 20 20 20 72 2e 69 64 2c r.id,
2fe0: 72 2e 74 61 72 67 65 74 2c 72 2e 74 74 79 70 65 r.target,r.ttype
2ff0: 5f 69 64 2c 72 2e 72 75 6e 5f 6e 61 6d 65 2c 72 _id,r.run_name,r
3000: 2e 73 74 61 74 65 2c 72 2e 73 74 61 74 75 73 2c .state,r.status,
3010: 72 2e 6f 77 6e 65 72 2c 72 2e 65 76 65 6e 74 5f r.owner,r.event_
3020: 74 69 6d 65 2c 72 2e 63 6f 6d 6d 65 6e 74 0a 20 time,r.comment.
3030: 20 20 20 20 46 52 4f 4d 20 74 65 73 74 73 20 41 FROM tests A
3040: 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 S t INNER JOIN r
3050: 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 uns AS r ON t.ru
3060: 6e 5f 69 64 3d 72 2e 69 64 0a 20 20 20 20 20 20 n_id=r.id.
3070: 57 48 45 52 45 20 72 2e 74 61 72 67 65 74 20 4c WHERE r.target L
3080: 49 4b 45 20 3f 3b 22 20 74 61 72 67 65 74 2d 70 IKE ?;" target-p
3090: 61 74 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 att))..(define (
30a0: 70 67 64 62 3a 67 65 74 2d 73 74 61 74 73 2d 67 pgdb:get-stats-g
30b0: 69 76 65 6e 2d 74 79 70 65 2d 74 61 72 67 65 74 iven-type-target
30c0: 20 64 62 68 20 74 74 79 70 65 2d 69 64 20 74 61 dbh ttype-id ta
30d0: 72 67 65 74 2d 70 61 74 74 29 0a 20 20 28 64 62 rget-patt). (db
30e0: 69 3a 67 65 74 2d 72 6f 77 73 0a 20 20 20 64 62 i:get-rows. db
30f0: 68 0a 20 20 20 3b 3b 20 20 20 20 22 53 45 4c 45 h. ;; "SELE
3100: 43 54 20 43 4f 55 4e 54 28 74 2e 69 64 29 2c 74 CT COUNT(t.id),t
3110: 2e 73 74 61 74 75 73 2c 72 2e 74 61 72 67 65 74 .status,r.target
3120: 20 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 74 FROM tests AS t
3130: 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e 73 INNER JOIN runs
3140: 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 AS r ON t.run_i
3150: 64 3d 72 2e 69 64 0a 20 20 20 3b 3b 20 20 20 20 d=r.id. ;;
3160: 20 20 20 20 20 57 48 45 52 45 20 74 2e 73 74 61 WHERE t.sta
3170: 74 65 3d 27 43 4f 4d 50 4c 45 54 45 44 27 20 41 te='COMPLETED' A
3180: 4e 44 20 74 74 79 70 65 5f 69 64 3d 3f 20 41 4e ND ttype_id=? AN
3190: 44 20 72 2e 74 61 72 67 65 74 20 4c 49 4b 45 20 D r.target LIKE
31a0: 3f 20 47 52 4f 55 50 20 42 59 20 72 2e 74 61 72 ? GROUP BY r.tar
31b0: 67 65 74 2c 74 2e 73 74 61 74 75 73 3b 22 0a 20 get,t.status;".
31c0: 20 20 22 53 45 4c 45 43 54 20 72 2e 74 61 72 67 "SELECT r.targ
31d0: 65 74 2c 43 4f 55 4e 54 28 2a 29 20 41 53 20 74 et,COUNT(*) AS t
31e0: 6f 74 61 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 otal,.
31f0: 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 SUM(CA
3200: 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 SE WHEN t.status
3210: 3d 27 50 41 53 53 27 20 54 48 45 4e 20 31 20 45 ='PASS' THEN 1 E
3220: 4c 53 45 20 30 20 45 4e 44 29 20 41 53 20 70 61 LSE 0 END) AS pa
3230: 73 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ss,.
3240: 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 53 45 SUM(CASE
3250: 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 3d 27 WHEN t.status='
3260: 46 41 49 4c 27 20 54 48 45 4e 20 31 20 45 4c 53 FAIL' THEN 1 ELS
3270: 45 20 30 20 45 4e 44 29 20 41 53 20 66 61 69 6c E 0 END) AS fail
3280: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
3290: 20 20 20 20 20 20 53 55 4d 28 43 41 53 45 20 57 SUM(CASE W
32a0: 48 45 4e 20 74 2e 73 74 61 74 75 73 20 49 4e 20 HEN t.status IN
32b0: 28 27 50 41 53 53 27 2c 27 46 41 49 4c 27 29 20 ('PASS','FAIL')
32c0: 54 48 45 4e 20 30 20 45 4c 53 45 20 31 20 45 4e THEN 0 ELSE 1 EN
32d0: 44 29 20 41 53 20 6f 74 68 65 72 0a 20 20 20 20 D) AS other.
32e0: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 FROM tes
32f0: 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f ts AS t INNER JO
3300: 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 IN runs AS r ON
3310: 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 20 t.run_id=r.id.
3320: 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 WHERE
3330: 74 2e 73 74 61 74 65 3d 27 43 4f 4d 50 4c 45 54 t.state='COMPLET
3340: 45 44 27 20 41 4e 44 20 74 74 79 70 65 5f 69 64 ED' AND ttype_id
3350: 3d 3f 20 41 4e 44 20 72 2e 74 61 72 67 65 74 20 =? AND r.target
3360: 4c 49 4b 45 20 3f 20 47 52 4f 55 50 20 42 59 20 LIKE ? GROUP BY
3370: 72 2e 74 61 72 67 65 74 3b 22 0a 20 20 20 74 74 r.target;". tt
3380: 79 70 65 2d 69 64 20 74 61 72 67 65 74 2d 70 61 ype-id target-pa
3390: 74 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 tt))..(define (p
33a0: 67 64 62 3a 67 65 74 2d 73 74 61 74 73 2d 67 69 gdb:get-stats-gi
33b0: 76 65 6e 2d 74 61 72 67 65 74 20 64 62 68 20 74 ven-target dbh t
33c0: 61 72 67 65 74 2d 70 61 74 74 29 0a 20 20 28 64 arget-patt). (d
33d0: 62 69 3a 67 65 74 2d 72 6f 77 73 0a 20 20 20 64 bi:get-rows. d
33e0: 62 68 0a 20 20 20 3b 3b 20 20 20 20 22 53 45 4c bh. ;; "SEL
33f0: 45 43 54 20 43 4f 55 4e 54 28 74 2e 69 64 29 2c ECT COUNT(t.id),
3400: 74 2e 73 74 61 74 75 73 2c 72 2e 74 61 72 67 65 t.status,r.targe
3410: 74 20 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 t FROM tests AS
3420: 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e t INNER JOIN run
3430: 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f s AS r ON t.run_
3440: 69 64 3d 72 2e 69 64 0a 20 20 20 3b 3b 20 20 20 id=r.id. ;;
3450: 20 20 20 20 20 20 57 48 45 52 45 20 74 2e 73 74 WHERE t.st
3460: 61 74 65 3d 27 43 4f 4d 50 4c 45 54 45 44 27 20 ate='COMPLETED'
3470: 41 4e 44 20 74 74 79 70 65 5f 69 64 3d 3f 20 41 AND ttype_id=? A
3480: 4e 44 20 72 2e 74 61 72 67 65 74 20 4c 49 4b 45 ND r.target LIKE
3490: 20 3f 20 47 52 4f 55 50 20 42 59 20 72 2e 74 61 ? GROUP BY r.ta
34a0: 72 67 65 74 2c 74 2e 73 74 61 74 75 73 3b 22 0a rget,t.status;".
34b0: 20 20 20 22 53 45 4c 45 43 54 20 72 2e 74 61 72 "SELECT r.tar
34c0: 67 65 74 2c 43 4f 55 4e 54 28 2a 29 20 41 53 20 get,COUNT(*) AS
34d0: 74 6f 74 61 6c 2c 0a 20 20 20 20 20 20 20 20 20 total,.
34e0: 20 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 43 SUM(C
34f0: 41 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 75 ASE WHEN t.statu
3500: 73 3d 27 50 41 53 53 27 20 54 48 45 4e 20 31 20 s='PASS' THEN 1
3510: 45 4c 53 45 20 30 20 45 4e 44 29 20 41 53 20 70 ELSE 0 END) AS p
3520: 61 73 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ass,.
3530: 20 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 53 SUM(CAS
3540: 45 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 3d E WHEN t.status=
3550: 27 46 41 49 4c 27 20 54 48 45 4e 20 31 20 45 4c 'FAIL' THEN 1 EL
3560: 53 45 20 30 20 45 4e 44 29 20 41 53 20 66 61 69 SE 0 END) AS fai
3570: 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 l,.
3580: 20 20 20 20 20 20 20 53 55 4d 28 43 41 53 45 20 SUM(CASE
3590: 57 48 45 4e 20 74 2e 73 74 61 74 75 73 20 49 4e WHEN t.status IN
35a0: 20 28 27 50 41 53 53 27 2c 27 46 41 49 4c 27 29 ('PASS','FAIL')
35b0: 20 54 48 45 4e 20 30 20 45 4c 53 45 20 31 20 45 THEN 0 ELSE 1 E
35c0: 4e 44 29 20 41 53 20 6f 74 68 65 72 0a 20 20 20 ND) AS other.
35d0: 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 FROM te
35e0: 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a sts AS t INNER J
35f0: 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e OIN runs AS r ON
3600: 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 t.run_id=r.id.
3610: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 WHERE
3620: 20 74 2e 73 74 61 74 65 3d 27 43 4f 4d 50 4c 45 t.state='COMPLE
3630: 54 45 44 27 20 41 4e 44 20 72 2e 74 61 72 67 65 TED' AND r.targe
3640: 74 20 4c 49 4b 45 20 3f 20 47 52 4f 55 50 20 42 t LIKE ? GROUP B
3650: 59 20 72 2e 74 61 72 67 65 74 3b 22 0a 20 20 20 Y r.target;".
3660: 74 61 72 67 65 74 2d 70 61 74 74 29 29 0a 0a 0a target-patt))...
3670: 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 (define (pgdb:ge
3680: 74 2d 6c 61 74 65 73 74 2d 72 75 6e 2d 73 74 61 t-latest-run-sta
3690: 74 73 2d 67 69 76 65 6e 2d 74 61 72 67 65 74 20 ts-given-target
36a0: 64 62 68 20 74 74 79 70 65 2d 69 64 20 74 61 72 dbh ttype-id tar
36b0: 67 65 74 2d 70 61 74 74 20 6c 69 6d 69 74 20 6f get-patt limit o
36c0: 66 66 73 65 74 29 0a 20 20 28 64 62 69 3a 67 65 ffset). (dbi:ge
36d0: 74 2d 72 6f 77 73 0a 20 20 20 64 62 68 0a 20 20 t-rows. dbh.
36e0: 20 3b 3b 20 20 20 20 22 53 45 4c 45 43 54 20 43 ;; "SELECT C
36f0: 4f 55 4e 54 28 74 2e 69 64 29 2c 74 2e 73 74 61 OUNT(t.id),t.sta
3700: 74 75 73 2c 72 2e 74 61 72 67 65 74 20 46 52 4f tus,r.target FRO
3710: 4d 20 74 65 73 74 73 20 41 53 20 74 20 49 4e 4e M tests AS t INN
3720: 45 52 20 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 ER JOIN runs AS
3730: 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e r ON t.run_id=r.
3740: 69 64 0a 20 20 20 3b 3b 20 20 20 20 20 20 20 20 id. ;;
3750: 20 57 48 45 52 45 20 74 2e 73 74 61 74 65 3d 27 WHERE t.state='
3760: 43 4f 4d 50 4c 45 54 45 44 27 20 41 4e 44 20 74 COMPLETED' AND t
3770: 74 79 70 65 5f 69 64 3d 3f 20 41 4e 44 20 72 2e type_id=? AND r.
3780: 74 61 72 67 65 74 20 4c 49 4b 45 20 3f 20 47 52 target LIKE ? GR
3790: 4f 55 50 20 42 59 20 72 2e 74 61 72 67 65 74 2c OUP BY r.target,
37a0: 74 2e 73 74 61 74 75 73 3b 22 0a 20 20 20 22 53 t.status;". "S
37b0: 45 4c 45 43 54 20 72 2e 74 61 72 67 65 74 2c 20 ELECT r.target,
37c0: 72 2e 65 76 65 6e 74 5f 74 69 6d 65 2c 20 43 4f r.event_time, CO
37d0: 55 4e 54 28 2a 29 20 41 53 20 74 6f 74 61 6c 2c UNT(*) AS total,
37e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
37f0: 20 20 20 20 20 53 55 4d 28 43 41 53 45 20 57 48 SUM(CASE WH
3800: 45 4e 20 74 2e 73 74 61 74 75 73 3d 27 50 41 53 EN t.status='PAS
3810: 53 27 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30 S' THEN 1 ELSE 0
3820: 20 45 4e 44 29 20 41 53 20 70 61 73 73 2c 0a 20 END) AS pass,.
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3840: 20 20 20 53 55 4d 28 43 41 53 45 20 57 48 45 4e SUM(CASE WHEN
3850: 20 74 2e 73 74 61 74 75 73 3d 27 46 41 49 4c 27 t.status='FAIL'
3860: 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30 20 45 THEN 1 ELSE 0 E
3870: 4e 44 29 20 41 53 20 66 61 69 6c 2c 0a 20 20 20 ND) AS fail,.
3880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3890: 20 53 55 4d 28 43 41 53 45 20 57 48 45 4e 20 74 SUM(CASE WHEN t
38a0: 2e 73 74 61 74 75 73 20 49 4e 20 28 27 50 41 53 .status IN ('PAS
38b0: 53 27 2c 27 46 41 49 4c 27 29 20 54 48 45 4e 20 S','FAIL') THEN
38c0: 30 20 45 4c 53 45 20 31 20 45 4e 44 29 20 41 53 0 ELSE 1 END) AS
38d0: 20 6f 74 68 65 72 2c 20 72 2e 69 64 0a 20 20 20 other, r.id.
38e0: 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 FROM te
38f0: 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a sts AS t INNER J
3900: 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e OIN runs AS r ON
3910: 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 t.run_id=r.id.
3920: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 WHERE
3930: 20 74 2e 73 74 61 74 65 20 6c 69 6b 65 20 27 25 t.state like '%
3940: 27 20 20 41 4e 44 20 74 74 79 70 65 5f 69 64 3d ' AND ttype_id=
3950: 3f 20 41 4e 44 20 72 2e 74 61 72 67 65 74 20 4c ? AND r.target L
3960: 49 4b 45 20 3f 20 0a 20 20 20 20 20 20 20 20 20 IKE ? .
3970: 20 20 20 20 20 20 20 20 61 6e 64 20 72 2e 69 64 and r.id
3980: 20 69 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20 in .
3990: 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 (SELECT DISTINCT
39a0: 20 6f 6e 20 28 74 61 72 67 65 74 29 20 69 64 20 on (target) id
39b0: 66 72 6f 6d 20 72 75 6e 73 20 77 68 65 72 65 20 from runs where
39c0: 74 61 72 67 65 74 20 6c 69 6b 65 20 3f 20 41 4e target like ? AN
39d0: 44 20 74 74 79 70 65 5f 69 64 3d 3f 20 6f 72 64 D ttype_id=? ord
39e0: 65 72 20 62 79 20 74 61 72 67 65 74 2c 65 76 65 er by target,eve
39f0: 6e 74 5f 74 69 6d 65 20 64 65 73 63 29 20 0a 20 nt_time desc) .
3a00: 20 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 GROUP B
3a10: 59 20 72 2e 74 61 72 67 65 74 2c 72 2e 69 64 20 Y r.target,r.id
3a20: 0a 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 . order
3a30: 20 62 79 20 72 2e 65 76 65 6e 74 5f 74 69 6d 65 by r.event_time
3a40: 20 64 65 73 63 20 6c 69 6d 69 74 20 3f 20 6f 66 desc limit ? of
3a50: 66 73 65 74 20 3f 20 3b 22 0a 20 20 20 74 74 79 fset ? ;". tty
3a60: 70 65 2d 69 64 20 74 61 72 67 65 74 2d 70 61 74 pe-id target-pat
3a70: 74 20 74 61 72 67 65 74 2d 70 61 74 74 20 74 74 t target-patt tt
3a80: 79 70 65 2d 69 64 20 6c 69 6d 69 74 20 6f 66 66 ype-id limit off
3a90: 73 65 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 set))..(define (
3aa0: 70 67 64 62 3a 67 65 74 2d 6c 61 74 65 73 74 2d pgdb:get-latest-
3ab0: 72 75 6e 2d 73 74 61 74 73 2d 67 69 76 65 6e 2d run-stats-given-
3ac0: 70 61 74 74 65 72 6e 20 64 62 68 20 70 61 74 74 pattern dbh patt
3ad0: 20 6c 69 6d 69 74 20 6f 66 66 73 65 74 29 0a 20 limit offset).
3ae0: 20 28 64 62 69 3a 67 65 74 2d 72 6f 77 73 0a 20 (dbi:get-rows.
3af0: 20 20 64 62 68 0a 20 20 20 3b 3b 20 20 20 20 22 dbh. ;; "
3b00: 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 74 2e 69 SELECT COUNT(t.i
3b10: 64 29 2c 74 2e 73 74 61 74 75 73 2c 72 2e 74 61 d),t.status,r.ta
3b20: 72 67 65 74 20 46 52 4f 4d 20 74 65 73 74 73 20 rget FROM tests
3b30: 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 AS t INNER JOIN
3b40: 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 runs AS r ON t.r
3b50: 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 20 20 3b 3b un_id=r.id. ;;
3b60: 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 74 WHERE t
3b70: 2e 73 74 61 74 65 3d 27 43 4f 4d 50 4c 45 54 45 .state='COMPLETE
3b80: 44 27 20 41 4e 44 20 74 74 79 70 65 5f 69 64 3d D' AND ttype_id=
3b90: 3f 20 41 4e 44 20 72 2e 74 61 72 67 65 74 20 49 ? AND r.target I
3ba0: 4c 49 4b 45 20 3f 20 47 52 4f 55 50 20 42 59 20 LIKE ? GROUP BY
3bb0: 72 2e 74 61 72 67 65 74 2c 74 2e 73 74 61 74 75 r.target,t.statu
3bc0: 73 3b 22 0a 20 20 20 22 53 45 4c 45 43 54 20 72 s;". "SELECT r
3bd0: 2e 74 61 72 67 65 74 2c 20 72 2e 65 76 65 6e 74 .target, r.event
3be0: 5f 74 69 6d 65 2c 20 43 4f 55 4e 54 28 2a 29 20 _time, COUNT(*)
3bf0: 41 53 20 74 6f 74 61 6c 2c 0a 20 20 20 20 20 20 AS total,.
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 55 SU
3c10: 4d 28 43 41 53 45 20 57 48 45 4e 20 74 2e 73 74 M(CASE WHEN t.st
3c20: 61 74 75 73 3d 27 50 41 53 53 27 20 54 48 45 4e atus='PASS' THEN
3c30: 20 31 20 45 4c 53 45 20 30 20 45 4e 44 29 20 41 1 ELSE 0 END) A
3c40: 53 20 70 61 73 73 2c 0a 20 20 20 20 20 20 20 20 S pass,.
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 SUM(
3c60: 43 41 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 CASE WHEN t.stat
3c70: 75 73 3d 27 46 41 49 4c 27 20 54 48 45 4e 20 31 us='FAIL' THEN 1
3c80: 20 45 4c 53 45 20 30 20 45 4e 44 29 20 41 53 20 ELSE 0 END) AS
3c90: 66 61 69 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 fail,.
3ca0: 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 SUM(CA
3cb0: 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 SE WHEN t.status
3cc0: 20 49 4e 20 28 27 50 41 53 53 27 2c 27 46 41 49 IN ('PASS','FAI
3cd0: 4c 27 29 20 54 48 45 4e 20 30 20 45 4c 53 45 20 L') THEN 0 ELSE
3ce0: 31 20 45 4e 44 29 20 41 53 20 6f 74 68 65 72 2c 1 END) AS other,
3cf0: 20 72 2e 69 64 0a 20 20 20 20 20 20 20 20 20 20 r.id.
3d00: 20 20 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 FROM tests AS
3d10: 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e t INNER JOIN run
3d20: 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f s AS r ON t.run_
3d30: 69 64 3d 72 2e 69 64 0a 20 20 20 20 20 20 20 20 id=r.id.
3d40: 20 20 20 20 57 48 45 52 45 20 74 2e 73 74 61 74 WHERE t.stat
3d50: 65 20 6c 69 6b 65 20 27 25 27 20 20 41 4e 44 20 e like '%' AND
3d60: 72 2e 74 61 72 67 65 74 20 49 4c 49 4b 45 20 3f r.target ILIKE ?
3d70: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3d80: 20 20 20 61 6e 64 20 72 2e 69 64 20 69 6e 20 0a and r.id in .
3d90: 20 20 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 (SELE
3da0: 43 54 20 44 49 53 54 49 4e 43 54 20 6f 6e 20 28 CT DISTINCT on (
3db0: 74 61 72 67 65 74 29 20 69 64 20 66 72 6f 6d 20 target) id from
3dc0: 72 75 6e 73 20 77 68 65 72 65 20 74 61 72 67 65 runs where targe
3dd0: 74 20 69 6c 69 6b 65 20 3f 20 20 6f 72 64 65 72 t ilike ? order
3de0: 20 62 79 20 74 61 72 67 65 74 2c 65 76 65 6e 74 by target,event
3df0: 5f 74 69 6d 65 20 64 65 73 63 29 20 0a 20 20 20 _time desc) .
3e00: 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 GROUP BY
3e10: 72 2e 74 61 72 67 65 74 2c 72 2e 69 64 20 0a 20 r.target,r.id .
3e20: 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 20 62 order b
3e30: 79 20 72 2e 65 76 65 6e 74 5f 74 69 6d 65 20 64 y r.event_time d
3e40: 65 73 63 20 6c 69 6d 69 74 20 3f 20 6f 66 66 73 esc limit ? offs
3e50: 65 74 20 3f 20 3b 22 0a 20 20 20 70 61 74 74 20 et ? ;". patt
3e60: 70 61 74 74 20 20 6c 69 6d 69 74 20 6f 66 66 73 patt limit offs
3e70: 65 74 29 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 et))...(define (
3e80: 70 67 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d 64 pgdb:get-count-d
3e90: 61 74 61 2d 73 74 61 74 73 2d 74 61 72 67 65 74 ata-stats-target
3ea0: 2d 6c 61 74 65 73 74 20 64 62 68 20 74 74 79 70 -latest dbh ttyp
3eb0: 65 2d 69 64 20 74 61 72 67 65 74 2d 70 61 74 74 e-id target-patt
3ec0: 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 72 6f 77 ). (dbi:get-row
3ed0: 73 0a 20 20 20 64 62 68 0a 20 20 20 20 22 53 45 s. dbh. "SE
3ee0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 20 66 LECT count(*) f
3ef0: 72 6f 6d 20 0a 20 20 20 20 20 20 20 20 20 20 28 rom . (
3f00: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 SELECT DISTINCT
3f10: 6f 6e 20 28 74 61 72 67 65 74 29 20 69 64 20 0a on (target) id .
3f20: 09 09 66 72 6f 6d 20 72 75 6e 73 20 77 68 65 72 ..from runs wher
3f30: 65 20 74 61 72 67 65 74 20 6c 69 6b 65 20 3f 20 e target like ?
3f40: 41 4e 44 20 74 74 79 70 65 5f 69 64 20 3d 20 3f AND ttype_id = ?
3f50: 20 0a 09 09 6f 72 64 65 72 20 62 79 20 74 61 72 ...order by tar
3f60: 67 65 74 2c 20 65 76 65 6e 74 5f 74 69 6d 65 20 get, event_time
3f70: 64 65 73 63 0a 20 20 20 20 20 20 20 20 20 20 29 desc. )
3f80: 20 61 73 20 78 3b 22 20 0a 20 20 20 20 74 61 72 as x;" . tar
3f90: 67 65 74 2d 70 61 74 74 20 74 74 79 70 65 2d 69 get-patt ttype-i
3fa0: 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 20 28 70 d))..(define (p
3fb0: 67 64 62 3a 67 65 74 2d 6c 61 74 65 73 74 2d 72 gdb:get-latest-r
3fc0: 75 6e 2d 63 6e 74 20 64 62 68 20 74 74 79 70 65 un-cnt dbh ttype
3fd0: 2d 69 64 20 74 61 72 67 65 74 2d 70 61 74 74 29 -id target-patt)
3fe0: 0a 20 20 28 6c 65 74 2a 20 28 28 63 6e 74 2d 72 . (let* ((cnt-r
3ff0: 65 73 75 6c 74 20 28 70 67 64 62 3a 67 65 74 2d esult (pgdb:get-
4000: 63 6f 75 6e 74 2d 64 61 74 61 2d 73 74 61 74 73 count-data-stats
4010: 2d 74 61 72 67 65 74 2d 6c 61 74 65 73 74 20 64 -target-latest d
4020: 62 68 20 74 74 79 70 65 2d 69 64 20 74 61 72 67 bh ttype-id targ
4030: 65 74 2d 70 61 74 74 29 29 0a 20 20 20 20 20 20 et-patt)).
4040: 20 20 20 3b 28 63 6e 74 2d 72 6f 77 20 28 63 61 ;(cnt-row (ca
4050: 72 20 28 63 6e 74 2d 72 65 73 75 6c 74 29 29 29 r (cnt-result)))
4060: 0a 20 20 20 20 20 20 20 20 20 28 63 6e 74 20 30 . (cnt 0
4070: 29 20 0a 20 20 20 20 20 20 20 29 0a 20 20 20 20 ) . ).
4080: 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 (for-each. (
4090: 6c 61 6d 62 64 61 20 28 72 6f 77 29 0a 20 20 20 lambda (row).
40a0: 20 20 20 28 73 65 74 21 20 63 6e 74 20 20 28 76 (set! cnt (v
40b0: 65 63 74 6f 72 2d 72 65 66 20 72 6f 77 20 30 20 ector-ref row 0
40c0: 29 29 29 20 0a 20 20 20 20 20 63 6e 74 2d 72 65 ))) . cnt-re
40d0: 73 75 6c 74 29 0a 0a 63 6e 74 29 29 0a 0a 28 64 sult)..cnt))..(d
40e0: 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 2d efine (pgdb:get-
40f0: 63 6f 75 6e 74 2d 64 61 74 61 2d 73 74 61 74 73 count-data-stats
4100: 2d 6c 61 74 65 73 74 2d 70 61 74 74 65 72 6e 20 -latest-pattern
4110: 64 62 68 20 70 61 74 74 29 0a 20 20 28 64 62 69 dbh patt). (dbi
4120: 3a 67 65 74 2d 72 6f 77 73 0a 20 20 20 64 62 68 :get-rows. dbh
4130: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 . "SELECT cou
4140: 6e 74 28 2a 29 20 20 66 72 6f 6d 20 0a 20 20 20 nt(*) from .
4150: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 44 (SELECT D
4160: 49 53 54 49 4e 43 54 20 6f 6e 20 28 74 61 72 67 ISTINCT on (targ
4170: 65 74 29 20 69 64 20 0a 09 09 66 72 6f 6d 20 72 et) id ...from r
4180: 75 6e 73 20 77 68 65 72 65 20 74 61 72 67 65 74 uns where target
4190: 20 69 6c 69 6b 65 20 3f 20 20 0a 09 09 6f 72 64 ilike ? ...ord
41a0: 65 72 20 62 79 20 74 61 72 67 65 74 2c 20 65 76 er by target, ev
41b0: 65 6e 74 5f 74 69 6d 65 20 64 65 73 63 0a 20 20 ent_time desc.
41c0: 20 20 20 20 20 20 20 20 29 20 61 73 20 78 3b 22 ) as x;"
41d0: 20 0a 20 20 20 20 70 61 74 74 29 29 0a 0a 28 64 . patt))..(d
41e0: 65 66 69 6e 65 20 20 28 70 67 64 62 3a 67 65 74 efine (pgdb:get
41f0: 2d 6c 61 74 65 73 74 2d 72 75 6e 2d 63 6e 74 2d -latest-run-cnt-
4200: 62 79 2d 70 61 74 74 65 72 6e 20 64 62 68 20 74 by-pattern dbh t
4210: 61 72 67 65 74 2d 70 61 74 74 29 0a 20 20 28 6c arget-patt). (l
4220: 65 74 2a 20 28 28 63 6e 74 2d 72 65 73 75 6c 74 et* ((cnt-result
4230: 20 28 70 67 64 62 3a 67 65 74 2d 63 6f 75 6e 74 (pgdb:get-count
4240: 2d 64 61 74 61 2d 73 74 61 74 73 2d 6c 61 74 65 -data-stats-late
4250: 73 74 2d 70 61 74 74 65 72 6e 20 64 62 68 20 74 st-pattern dbh t
4260: 61 72 67 65 74 2d 70 61 74 74 29 29 0a 20 20 20 arget-patt)).
4270: 20 20 20 20 20 20 3b 28 63 6e 74 2d 72 6f 77 20 ;(cnt-row
4280: 28 63 61 72 20 28 63 6e 74 2d 72 65 73 75 6c 74 (car (cnt-result
4290: 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6e ))). (cn
42a0: 74 20 30 29 20 0a 20 20 20 20 20 20 20 29 0a 20 t 0) . ).
42b0: 20 20 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 (for-each.
42c0: 20 20 28 6c 61 6d 62 64 61 20 28 72 6f 77 29 0a (lambda (row).
42d0: 20 20 20 20 20 20 28 73 65 74 21 20 63 6e 74 20 (set! cnt
42e0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 6f 77 (vector-ref row
42f0: 20 30 20 29 29 29 20 0a 20 20 20 20 20 63 6e 74 0 ))) . cnt
4300: 2d 72 65 73 75 6c 74 29 0a 0a 63 6e 74 29 29 0a -result)..cnt)).
4310: 0a 0a 0a 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 .....(define (pg
4320: 64 62 3a 67 65 74 2d 72 75 6e 2d 73 74 61 74 73 db:get-run-stats
4330: 2d 68 69 73 74 6f 72 79 2d 67 69 76 65 6e 2d 74 -history-given-t
4340: 61 72 67 65 74 20 64 62 68 20 74 74 79 70 65 2d arget dbh ttype-
4350: 69 64 20 74 61 72 67 65 74 2d 70 61 74 74 29 0a id target-patt).
4360: 20 20 28 64 62 69 3a 67 65 74 2d 72 6f 77 73 0a (dbi:get-rows.
4370: 20 20 20 64 62 68 0a 20 20 20 3b 3b 20 20 20 20 dbh. ;;
4380: 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 74 2e "SELECT COUNT(t.
4390: 69 64 29 2c 74 2e 73 74 61 74 75 73 2c 72 2e 74 id),t.status,r.t
43a0: 61 72 67 65 74 20 46 52 4f 4d 20 74 65 73 74 73 arget FROM tests
43b0: 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e AS t INNER JOIN
43c0: 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e runs AS r ON t.
43d0: 72 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 20 20 3b run_id=r.id. ;
43e0: 3b 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 ; WHERE
43f0: 74 2e 73 74 61 74 65 3d 27 43 4f 4d 50 4c 45 54 t.state='COMPLET
4400: 45 44 27 20 41 4e 44 20 74 74 79 70 65 5f 69 64 ED' AND ttype_id
4410: 3d 3f 20 41 4e 44 20 72 2e 74 61 72 67 65 74 20 =? AND r.target
4420: 4c 49 4b 45 20 3f 20 47 52 4f 55 50 20 42 59 20 LIKE ? GROUP BY
4430: 72 2e 74 61 72 67 65 74 2c 74 2e 73 74 61 74 75 r.target,t.statu
4440: 73 3b 22 0a 20 20 20 22 53 45 4c 45 43 54 20 72 s;". "SELECT r
4450: 2e 72 75 6e 5f 6e 61 6d 65 2c 43 4f 55 4e 54 28 .run_name,COUNT(
4460: 2a 29 20 41 53 20 74 6f 74 61 6c 2c 0a 20 20 20 *) AS total,.
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4480: 20 53 55 4d 28 43 41 53 45 20 57 48 45 4e 20 74 SUM(CASE WHEN t
4490: 2e 73 74 61 74 75 73 3d 27 50 41 53 53 27 20 54 .status='PASS' T
44a0: 48 45 4e 20 31 20 45 4c 53 45 20 30 20 45 4e 44 HEN 1 ELSE 0 END
44b0: 29 20 41 53 20 70 61 73 73 2c 0a 20 20 20 20 20 ) AS pass,.
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S
44d0: 55 4d 28 43 41 53 45 20 57 48 45 4e 20 74 2e 73 UM(CASE WHEN t.s
44e0: 74 61 74 75 73 3d 27 46 41 49 4c 27 20 54 48 45 tatus='FAIL' THE
44f0: 4e 20 31 20 45 4c 53 45 20 30 20 45 4e 44 29 20 N 1 ELSE 0 END)
4500: 41 53 20 66 61 69 6c 2c 0a 20 20 20 20 20 20 20 AS fail,.
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 55 4d SUM
4520: 28 43 41 53 45 20 57 48 45 4e 20 74 2e 73 74 61 (CASE WHEN t.sta
4530: 74 75 73 20 49 4e 20 28 27 50 41 53 53 27 2c 27 tus IN ('PASS','
4540: 46 41 49 4c 27 29 20 54 48 45 4e 20 30 20 45 4c FAIL') THEN 0 EL
4550: 53 45 20 31 20 45 4e 44 29 20 41 53 20 6f 74 68 SE 1 END) AS oth
4560: 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 er. F
4570: 52 4f 4d 20 74 65 73 74 73 20 41 53 20 74 20 49 ROM tests AS t I
4580: 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e 73 20 41 NNER JOIN runs A
4590: 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d S r ON t.run_id=
45a0: 72 2e 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 r.id.
45b0: 20 57 48 45 52 45 20 74 2e 73 74 61 74 65 20 6c WHERE t.state l
45c0: 69 6b 65 20 27 25 27 20 20 41 4e 44 20 74 74 79 ike '%' AND tty
45d0: 70 65 5f 69 64 3d 3f 20 41 4e 44 20 72 2e 74 61 pe_id=? AND r.ta
45e0: 72 67 65 74 20 4c 49 4b 45 20 3f 20 0a 20 20 20 rget LIKE ? .
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 52 GR
4600: 4f 55 50 20 42 59 20 72 2e 72 75 6e 5f 6e 61 6d OUP BY r.run_nam
4610: 65 3b 22 0a 20 20 20 74 74 79 70 65 2d 69 64 20 e;". ttype-id
4620: 74 61 72 67 65 74 2d 70 61 74 74 20 29 29 0a 0a target-patt ))..
4630: 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 (define (pgdb:ge
4640: 74 2d 61 6c 6c 2d 72 75 6e 2d 73 74 61 74 73 2d t-all-run-stats-
4650: 74 61 72 67 65 74 2d 73 6c 69 63 65 20 64 62 68 target-slice dbh
4660: 20 74 61 72 67 65 74 2d 70 61 74 74 20 6c 69 6d target-patt lim
4670: 69 74 20 6f 66 66 73 65 74 29 0a 20 20 20 20 28 it offset). (
4680: 64 62 69 3a 67 65 74 2d 72 6f 77 73 0a 20 20 20 dbi:get-rows.
4690: 20 64 62 68 0a 20 20 20 20 22 53 45 4c 45 43 54 dbh. "SELECT
46a0: 20 20 72 2e 74 61 72 67 65 74 2c 20 72 2e 72 75 r.target, r.ru
46b0: 6e 5f 6e 61 6d 65 2c 72 2e 65 76 65 6e 74 5f 74 n_name,r.event_t
46c0: 69 6d 65 2c 20 43 4f 55 4e 54 28 2a 29 20 41 53 ime, COUNT(*) AS
46d0: 20 74 6f 74 61 6c 2c 0a 20 20 20 20 20 20 20 20 total,.
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 SUM(
46f0: 43 41 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 CASE WHEN t.stat
4700: 75 73 3d 27 50 41 53 53 27 20 54 48 45 4e 20 31 us='PASS' THEN 1
4710: 20 45 4c 53 45 20 30 20 45 4e 44 29 20 41 53 20 ELSE 0 END) AS
4720: 70 61 73 73 2c 0a 20 20 20 20 20 20 20 20 20 20 pass,.
4730: 20 20 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 SUM(CA
4740: 53 45 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 SE WHEN t.status
4750: 3d 27 46 41 49 4c 27 20 54 48 45 4e 20 31 20 45 ='FAIL' THEN 1 E
4760: 4c 53 45 20 30 20 45 4e 44 29 20 41 53 20 66 61 LSE 0 END) AS fa
4770: 69 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 il,.
4780: 20 20 20 20 20 20 20 20 53 55 4d 28 43 41 53 45 SUM(CASE
4790: 20 57 48 45 4e 20 74 2e 73 74 61 74 75 73 20 49 WHEN t.status I
47a0: 4e 20 28 27 50 41 53 53 27 2c 27 46 41 49 4c 27 N ('PASS','FAIL'
47b0: 29 20 54 48 45 4e 20 30 20 45 4c 53 45 20 31 20 ) THEN 0 ELSE 1
47c0: 45 4e 44 29 20 41 53 20 6f 74 68 65 72 0a 20 20 END) AS other.
47d0: 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 FROM t
47e0: 65 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 ests AS t INNER
47f0: 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f JOIN runs AS r O
4800: 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 0a N t.run_id=r.id.
4810: 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 WHER
4820: 45 20 72 2e 74 61 72 67 65 74 20 4c 49 4b 45 20 E r.target LIKE
4830: 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 ? . G
4840: 52 4f 55 50 20 42 59 20 72 2e 74 61 72 67 65 74 ROUP BY r.target
4850: 2c 72 2e 72 75 6e 5f 6e 61 6d 65 2c 20 72 2e 65 ,r.run_name, r.e
4860: 76 65 6e 74 5f 74 69 6d 65 0a 20 20 20 20 20 20 vent_time.
4870: 20 20 20 20 20 20 20 6f 72 64 65 72 20 62 79 20 order by
4880: 72 2e 74 61 72 67 65 74 2c 72 2e 65 76 65 6e 74 r.target,r.event
4890: 5f 74 69 6d 65 20 64 65 73 63 20 6c 69 6d 69 74 _time desc limit
48a0: 20 20 3f 20 6f 66 66 73 65 74 20 3f 20 20 20 3b ? offset ? ;
48b0: 22 0a 20 20 20 20 74 61 72 67 65 74 2d 70 61 74 ". target-pat
48c0: 74 20 6c 69 6d 69 74 20 6f 66 66 73 65 74 29 29 t limit offset))
48d0: 0a 20 20 20 20 20 0a 0a 28 64 65 66 69 6e 65 20 . ..(define
48e0: 28 70 67 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d (pgdb:get-count-
48f0: 64 61 74 61 2d 73 74 61 74 73 2d 74 61 72 67 65 data-stats-targe
4900: 74 2d 73 6c 69 63 65 20 64 62 68 20 74 61 72 67 t-slice dbh targ
4910: 65 74 2d 70 61 74 74 29 0a 20 20 28 64 62 69 3a et-patt). (dbi:
4920: 67 65 74 2d 72 6f 77 73 0a 20 20 20 64 62 68 0a get-rows. dbh.
4930: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e "SELECT coun
4940: 74 28 2a 29 20 20 66 72 6f 6d 20 28 53 45 4c 45 t(*) from (SELE
4950: 43 54 20 20 72 2e 74 61 72 67 65 74 2c 20 72 2e CT r.target, r.
4960: 72 75 6e 5f 6e 61 6d 65 2c 72 2e 65 76 65 6e 74 run_name,r.event
4970: 5f 74 69 6d 65 2c 20 43 4f 55 4e 54 28 2a 29 20 _time, COUNT(*)
4980: 41 53 20 74 6f 74 61 6c 0a 20 20 20 20 20 20 20 AS total.
4990: 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74 73 20 FROM tests
49a0: 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 AS t INNER JOIN
49b0: 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 runs AS r ON t.r
49c0: 75 6e 5f 69 64 3d 72 2e 69 64 0a 20 20 20 20 20 un_id=r.id.
49d0: 20 20 20 20 20 20 20 57 48 45 52 45 20 72 2e 74 WHERE r.t
49e0: 61 72 67 65 74 20 4c 49 4b 45 20 3f 0a 20 20 20 arget LIKE ?.
49f0: 20 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 GROUP B
4a00: 59 20 72 2e 74 61 72 67 65 74 2c 72 2e 72 75 6e Y r.target,r.run
4a10: 5f 6e 61 6d 65 2c 20 72 2e 65 76 65 6e 74 5f 74 _name, r.event_t
4a20: 69 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 29 ime . )
4a30: 20 61 73 20 78 3b 22 20 0a 20 20 20 20 74 61 72 as x;" . tar
4a40: 67 65 74 2d 70 61 74 74 29 29 0a 0a 28 64 65 66 get-patt))..(def
4a50: 69 6e 65 20 20 28 70 67 64 62 3a 67 65 74 2d 73 ine (pgdb:get-s
4a60: 6c 69 63 65 2d 63 6e 74 20 64 62 68 20 74 61 72 lice-cnt dbh tar
4a70: 67 65 74 2d 70 61 74 74 29 0a 20 20 28 6c 65 74 get-patt). (let
4a80: 2a 20 28 28 63 6e 74 2d 72 65 73 75 6c 74 20 28 * ((cnt-result (
4a90: 70 67 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d 64 pgdb:get-count-d
4aa0: 61 74 61 2d 73 74 61 74 73 2d 74 61 72 67 65 74 ata-stats-target
4ab0: 2d 73 6c 69 63 65 20 64 62 68 20 74 61 72 67 65 -slice dbh targe
4ac0: 74 2d 70 61 74 74 29 29 0a 20 20 20 20 20 20 20 t-patt)).
4ad0: 20 20 3b 28 63 6e 74 2d 72 6f 77 20 28 63 61 72 ;(cnt-row (car
4ae0: 20 28 63 6e 74 2d 72 65 73 75 6c 74 29 29 29 0a (cnt-result))).
4af0: 20 20 20 20 20 20 20 20 20 28 63 6e 74 20 30 29 (cnt 0)
4b00: 20 0a 20 20 20 20 20 20 20 29 0a 20 20 20 20 28 . ). (
4b10: 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 6c for-each. (l
4b20: 61 6d 62 64 61 20 28 72 6f 77 29 0a 20 20 20 20 ambda (row).
4b30: 20 20 28 73 65 74 21 20 63 6e 74 20 20 28 76 65 (set! cnt (ve
4b40: 63 74 6f 72 2d 72 65 66 20 72 6f 77 20 30 20 29 ctor-ref row 0 )
4b50: 29 29 20 0a 20 20 20 20 20 63 6e 74 2d 72 65 73 )) . cnt-res
4b60: 75 6c 74 29 0a 0a 63 6e 74 29 29 0a 20 20 20 0a ult)..cnt)). .
4b70: 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a 67 .(define (pgdb:g
4b80: 65 74 2d 74 61 72 67 65 74 2d 74 79 70 65 73 20 et-target-types
4b90: 64 62 68 29 0a 20 20 28 64 62 69 3a 67 65 74 2d dbh). (dbi:get-
4ba0: 72 6f 77 73 20 64 62 68 20 22 53 45 4c 45 43 54 rows dbh "SELECT
4bb0: 20 69 64 2c 74 61 72 67 65 74 5f 73 70 65 63 20 id,target_spec
4bc0: 46 52 4f 4d 20 74 74 79 70 65 3b 22 29 29 0a 20 FROM ttype;")).
4bd0: 0a 20 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a . (define (pgdb:
4be0: 67 65 74 2d 64 69 73 74 69 63 74 2d 74 61 72 67 get-distict-targ
4bf0: 65 74 2d 73 6c 69 63 65 20 64 62 68 29 0a 20 20 et-slice dbh).
4c00: 28 64 62 69 3a 67 65 74 2d 72 6f 77 73 20 64 62 (dbi:get-rows db
4c10: 68 20 22 20 73 65 6c 65 63 74 20 64 69 73 74 69 h " select disti
4c20: 6e 63 74 20 6f 6e 20 28 73 70 6c 69 74 5f 70 61 nct on (split_pa
4c30: 72 74 20 28 74 61 72 67 65 74 2c 20 27 2f 27 2c rt (target, '/',
4c40: 20 31 29 29 20 28 73 70 6c 69 74 5f 70 61 72 74 1)) (split_part
4c50: 20 28 74 61 72 67 65 74 2c 20 27 2f 27 2c 20 31 (target, '/', 1
4c60: 29 29 20 66 72 6f 6d 20 72 75 6e 73 3b 22 29 29 )) from runs;"))
4c70: 0a 0a 20 20 28 64 65 66 69 6e 65 20 28 70 67 64 .. (define (pgd
4c80: 62 3a 67 65 74 2d 64 69 73 74 69 63 74 2d 74 61 b:get-distict-ta
4c90: 72 67 65 74 2d 73 6c 69 63 65 33 20 64 62 68 29 rget-slice3 dbh)
4ca0: 0a 20 20 28 64 62 69 3a 67 65 74 2d 72 6f 77 73 . (dbi:get-rows
4cb0: 20 64 62 68 20 22 20 73 65 6c 65 63 74 20 64 69 dbh " select di
4cc0: 73 74 69 6e 63 74 20 6f 6e 20 28 73 70 6c 69 74 stinct on (split
4cd0: 5f 70 61 72 74 20 28 74 61 72 67 65 74 2c 20 27 _part (target, '
4ce0: 2f 27 2c 20 33 29 29 20 28 73 70 6c 69 74 5f 70 /', 3)) (split_p
4cf0: 61 72 74 20 28 74 61 72 67 65 74 2c 20 27 2f 27 art (target, '/'
4d00: 2c 20 33 29 29 20 66 72 6f 6d 20 72 75 6e 73 3b , 3)) from runs;
4d10: 22 29 29 0a 3b 3b 20 0a 28 64 65 66 69 6e 65 20 ")).;; .(define
4d20: 28 70 67 64 62 3a 67 65 74 2d 74 61 72 67 65 74 (pgdb:get-target
4d30: 73 20 64 62 68 20 74 61 72 67 65 74 2d 70 61 74 s dbh target-pat
4d40: 74 29 0a 20 20 28 6c 65 74 20 28 28 74 74 79 70 t). (let ((ttyp
4d50: 65 73 20 28 70 67 64 62 3a 67 65 74 2d 74 61 72 es (pgdb:get-tar
4d60: 67 65 74 2d 74 79 70 65 73 20 64 62 68 29 29 29 get-types dbh)))
4d70: 0a 20 20 20 20 28 6d 61 70 0a 20 20 20 20 20 28 . (map. (
4d80: 6c 61 6d 62 64 61 20 28 74 74 79 70 65 2d 64 61 lambda (ttype-da
4d90: 74 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 t). (let (
4da0: 28 74 74 2d 69 64 20 28 76 65 63 74 6f 72 2d 72 (tt-id (vector-r
4db0: 65 66 20 74 74 79 70 65 2d 64 61 74 20 30 29 29 ef ttype-dat 0))
4dc0: 0a 09 20 20 20 20 20 28 74 74 79 70 65 20 28 76 .. (ttype (v
4dd0: 65 63 74 6f 72 2d 72 65 66 20 74 74 79 70 65 2d ector-ref ttype-
4de0: 64 61 74 20 31 29 29 29 0a 09 20 28 63 6f 6e 73 dat 1))).. (cons
4df0: 20 74 74 79 70 65 0a 09 20 20 20 20 20 20 20 28 ttype.. (
4e00: 64 62 69 3a 67 65 74 2d 72 6f 77 73 20 0a 09 09 dbi:get-rows ...
4e10: 64 62 68 0a 09 09 22 53 45 4c 45 43 54 20 44 49 dbh..."SELECT DI
4e20: 53 54 49 4e 43 54 20 74 61 72 67 65 74 20 46 52 STINCT target FR
4e30: 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 74 61 OM runs WHERE ta
4e40: 72 67 65 74 20 4c 49 4b 45 20 3f 20 41 4e 44 20 rget LIKE ? AND
4e50: 74 74 79 70 65 5f 69 64 3d 3f 3b 22 20 74 61 72 ttype_id=?;" tar
4e60: 67 65 74 2d 70 61 74 74 20 74 74 2d 69 64 29 29 get-patt tt-id))
4e70: 0a 09 20 29 29 0a 20 20 20 20 20 74 74 79 70 65 .. )). ttype
4e80: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 s)))..(define (p
4e90: 67 64 62 3a 67 65 74 2d 74 61 72 67 65 74 73 2d gdb:get-targets-
4ea0: 6f 66 2d 74 79 70 65 20 64 62 68 20 74 74 79 70 of-type dbh ttyp
4eb0: 65 2d 69 64 20 74 61 72 67 65 74 2d 70 61 74 74 e-id target-patt
4ec0: 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 72 6f 77 ). (dbi:get-row
4ed0: 73 20 64 62 68 20 22 53 45 4c 45 43 54 20 44 49 s dbh "SELECT DI
4ee0: 53 54 49 4e 43 54 20 74 61 72 67 65 74 20 46 52 STINCT target FR
4ef0: 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 74 61 OM runs WHERE ta
4f00: 72 67 65 74 20 4c 49 4b 45 20 3f 20 41 4e 44 20 rget LIKE ? AND
4f10: 74 74 79 70 65 5f 69 64 3d 3f 3b 22 20 74 61 72 ttype_id=?;" tar
4f20: 67 65 74 2d 70 61 74 74 20 74 74 79 70 65 2d 69 get-patt ttype-i
4f30: 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 d))..(define (pg
4f40: 64 62 3a 67 65 74 2d 72 75 6e 73 2d 62 79 2d 74 db:get-runs-by-t
4f50: 61 72 67 65 74 20 64 62 68 20 74 61 72 67 65 74 arget dbh target
4f60: 73 20 72 75 6e 2d 70 61 74 74 29 0a 20 20 20 28 s run-patt). (
4f70: 64 62 69 3a 67 65 74 2d 72 6f 77 73 20 64 62 68 dbi:get-rows dbh
4f80: 20 22 53 45 4c 45 43 54 20 72 2e 72 75 6e 5f 6e "SELECT r.run_n
4f90: 61 6d 65 2c 20 74 2e 74 65 73 74 5f 6e 61 6d 65 ame, t.test_name
4fa0: 2c 20 74 2e 73 74 61 74 75 73 2c 20 74 2e 69 74 , t.status, t.it
4fb0: 65 6d 5f 70 61 74 68 2c 20 74 2e 69 64 2c 20 74 em_path, t.id, t
4fc0: 2e 72 75 6e 64 69 72 2c 20 74 2e 66 69 6e 61 6c .rundir, t.final
4fd0: 5f 6c 6f 67 66 20 46 52 4f 4d 20 72 75 6e 73 20 _logf FROM runs
4fe0: 61 73 20 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 as r INNER JOIN
4ff0: 74 65 73 74 73 20 41 53 20 74 20 4f 4e 20 74 2e tests AS t ON t.
5000: 72 75 6e 5f 69 64 3d 72 2e 69 64 20 20 0a 20 20 run_id=r.id .
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5020: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 74 2e WHERE t.
5030: 73 74 61 74 65 3d 27 43 4f 4d 50 4c 45 54 45 44 state='COMPLETED
5040: 27 20 41 4e 44 20 72 2e 74 61 72 67 65 74 20 6c ' AND r.target l
5050: 69 6b 65 20 3f 20 41 4e 44 20 20 72 2e 72 75 6e ike ? AND r.run
5060: 5f 6e 61 6d 65 20 6c 69 6b 65 20 3f 3b 22 20 74 _name like ?;" t
5070: 61 72 67 65 74 73 20 72 75 6e 2d 70 61 74 74 29 argets run-patt)
5080: 0a 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 67 64 .)..(define (pgd
5090: 62 3a 67 65 74 2d 74 65 73 74 2d 62 79 2d 69 64 b:get-test-by-id
50a0: 20 64 62 68 20 69 64 29 0a 20 20 28 64 62 69 3a dbh id). (dbi:
50b0: 67 65 74 2d 72 6f 77 73 20 64 62 68 20 22 53 45 get-rows dbh "SE
50c0: 4c 45 43 54 20 74 2e 74 65 73 74 5f 6e 61 6d 65 LECT t.test_name
50d0: 2c 20 74 2e 69 74 65 6d 5f 70 61 74 68 2c 20 74 , t.item_path, t
50e0: 2e 72 75 6e 64 69 72 2c 20 74 2e 66 69 6e 61 6c .rundir, t.final
50f0: 5f 6c 6f 67 66 20 46 52 4f 4d 20 72 75 6e 73 20 _logf FROM runs
5100: 61 73 20 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 as r INNER JOIN
5110: 74 65 73 74 73 20 41 53 20 74 20 4f 4e 20 74 2e tests AS t ON t.
5120: 72 75 6e 5f 69 64 3d 72 2e 69 64 20 20 0a 20 20 run_id=r.id .
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5140: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 74 2e WHERE t.
5150: 69 64 20 3d 20 3f 3b 22 20 69 64 29 0a 29 0a 0a id = ?;" id).)..
5160: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
5170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
51a0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 56 20 41 ========.;; V A
51b0: 20 52 20 49 20 4f 20 55 20 53 20 20 20 44 20 41 R I O U S D A
51c0: 20 54 20 41 20 20 20 4d 20 41 20 53 20 53 20 41 T A M A S S A
51d0: 20 47 20 45 20 20 20 52 20 4f 20 55 20 54 20 49 G E R O U T I
51e0: 20 4e 20 45 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d N E S.;;=======
51f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
5230: 0a 3b 3b 20 70 72 6f 62 61 62 6c 79 20 77 61 6e .;; probably wan
5240: 74 20 74 6f 20 6d 6f 76 65 20 74 68 65 73 65 20 t to move these
5250: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 6d to a different m
5260: 6f 64 65 6c 20 66 69 6c 65 0a 0a 3b 3b 20 63 72 odel file..;; cr
5270: 65 61 74 65 20 61 20 68 61 73 68 20 6f 66 20 68 eate a hash of h
5280: 61 73 68 65 73 20 77 69 74 68 20 6b 65 79 73 20 ashes with keys
5290: 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 61 extracted from a
52a0: 6c 6c 2d 70 61 72 74 73 0a 3b 3b 20 75 73 69 6e ll-parts.;; usin
52b0: 67 20 72 6f 77 2d 6f 72 2d 63 6f 6c 20 74 6f 20 g row-or-col to
52c0: 63 68 6f 6f 73 65 20 72 6f 77 20 6f 72 20 63 6f choose row or co
52d0: 6c 75 6d 6e 0a 3b 3b 20 20 20 68 74 7b 72 6f 77 lumn.;; ht{row
52e0: 20 6b 65 79 7d 3d 3e 68 74 7b 63 6f 6c 20 6b 65 key}=>ht{col ke
52f0: 79 7d 3d 3e 64 61 74 61 0a 3b 3b 0a 3b 3b 20 66 y}=>data.;;.;; f
5300: 6e 75 6d 20 69 73 20 74 68 65 20 66 69 65 6c 64 num is the field
5310: 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 74 number in the t
5320: 75 70 6c 65 73 20 74 6f 20 62 65 20 73 70 6c 69 uples to be spli
5330: 74 0a 3b 3b 0a 0a 28 64 65 66 69 6e 65 20 28 70 t.;;..(define (p
5340: 67 64 62 3a 6d 6b 2d 70 61 74 74 65 72 6e 20 20 gdb:mk-pattern
5350: 64 6f 74 20 74 79 70 65 20 62 70 20 72 65 6c 29 dot type bp rel)
5360: 0a 20 20 28 6c 65 74 2a 20 28 28 74 79 70 20 28 . (let* ((typ (
5370: 69 66 20 28 65 71 75 61 6c 3f 20 74 79 70 65 20 if (equal? type
5380: 22 61 6c 6c 22 29 0a 20 20 20 20 20 20 20 20 20 "all").
5390: 20 20 20 20 20 20 22 25 22 0a 20 20 20 20 20 20 "%".
53a0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 29 29 type))
53b0: 0a 20 20 20 20 20 20 20 20 28 64 6f 74 70 72 6f . (dotpro
53c0: 63 65 73 73 20 28 69 66 20 28 65 71 75 61 6c 3f cess (if (equal?
53d0: 20 64 6f 74 20 22 61 6c 6c 22 29 0a 20 20 20 20 dot "all").
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53f0: 20 20 22 25 22 0a 20 20 20 20 20 20 20 20 20 20 "%".
5400: 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 29 29 dot))
5410: 0a 20 20 20 20 20 20 20 20 28 72 65 6c 2d 6e 75 . (rel-nu
5420: 6d 20 28 69 66 20 28 65 71 75 61 6c 3f 20 72 65 m (if (equal? re
5430: 6c 20 22 22 29 0a 20 20 20 20 20 20 20 20 20 20 l "").
5440: 20 20 20 20 20 20 20 20 20 20 20 20 22 25 22 0a "%".
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5460: 20 20 20 20 20 72 65 6c 29 29 0a 20 20 20 20 20 rel)).
5470: 20 20 20 28 70 61 74 74 65 72 6e 20 20 28 63 6f (pattern (co
5480: 6e 63 20 22 25 2f 22 20 62 70 20 22 2f 22 20 64 nc "%/" bp "/" d
5490: 6f 74 70 72 6f 63 65 73 73 20 22 2f 22 20 74 79 otprocess "/" ty
54a0: 70 20 22 5f 22 20 72 65 6c 2d 6e 75 6d 29 29 29 p "_" rel-num)))
54b0: 0a 70 61 74 74 65 72 6e 29 29 0a 0a 28 64 65 66 .pattern))..(def
54c0: 69 6e 65 20 28 70 67 64 62 3a 63 6f 61 6c 65 73 ine (pgdb:coales
54d0: 63 65 2d 72 75 6e 73 20 64 62 68 20 72 75 6e 73 ce-runs dbh runs
54e0: 20 61 6c 6c 2d 70 61 72 74 73 20 72 6f 77 2d 6f all-parts row-o
54f0: 72 2d 63 6f 6c 20 66 6e 75 6d 29 0a 20 20 28 6c r-col fnum). (l
5500: 65 74 2a 20 28 28 64 61 74 61 20 20 28 6d 61 6b et* ((data (mak
5510: 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a e-hash-table))).
5520: 20 20 20 20 0a 20 20 20 20 28 66 6f 72 2d 65 61 . (for-ea
5530: 63 68 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 ch. (lambda
5540: 28 72 75 6e 29 0a 20 20 20 20 20 20 20 28 6c 65 (run). (le
5550: 74 2a 20 28 28 74 61 72 67 65 74 20 28 76 65 63 t* ((target (vec
5560: 74 6f 72 2d 72 65 66 20 72 75 6e 20 66 6e 75 6d tor-ref run fnum
5570: 29 29 0a 09 20 20 20 20 20 20 28 70 61 72 74 73 )).. (parts
5580: 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 (string-split
5590: 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 20 20 target "/"))..
55a0: 20 20 20 20 28 66 69 72 73 74 20 20 28 63 61 72 (first (car
55b0: 20 70 61 72 74 73 29 29 0a 09 20 20 20 20 20 20 parts))..
55c0: 28 72 65 73 74 20 20 20 28 73 74 72 69 6e 67 2d (rest (string-
55d0: 69 6e 74 65 72 73 70 65 72 73 65 20 28 63 64 72 intersperse (cdr
55e0: 20 70 61 72 74 73 29 20 22 2f 22 29 29 0a 09 20 parts) "/"))..
55f0: 20 20 20 20 20 28 63 6f 6c 64 61 74 20 28 68 61 (coldat (ha
5600: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 sh-table-ref/def
5610: 61 75 6c 74 20 64 61 74 61 20 66 69 72 73 74 20 ault data first
5620: 23 66 29 29 29 0a 09 20 28 69 66 20 28 6e 6f 74 #f))).. (if (not
5630: 20 63 6f 6c 64 61 74 29 28 6c 65 74 20 28 28 6e coldat)(let ((n
5640: 65 77 68 74 20 28 6d 61 6b 65 2d 68 61 73 68 2d ewht (make-hash-
5650: 74 61 62 6c 65 29 29 29 0a 09 09 09 20 20 20 28 table))).... (
5660: 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 hash-table-set!
5670: 64 61 74 61 20 66 69 72 73 74 20 6e 65 77 68 74 data first newht
5680: 29 0a 09 09 09 20 20 20 28 73 65 74 21 20 63 6f ).... (set! co
5690: 6c 64 61 74 20 6e 65 77 68 74 29 29 29 0a 09 20 ldat newht)))..
56a0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
56b0: 20 63 6f 6c 64 61 74 20 72 65 73 74 20 72 75 6e coldat rest run
56c0: 29 29 29 0a 20 20 20 20 20 72 75 6e 73 29 0a 20 ))). runs).
56d0: 20 20 20 64 61 74 61 29 29 0a 0a 0a 28 64 65 66 data))...(def
56e0: 69 6e 65 20 28 70 67 64 62 3a 63 6f 61 6c 65 73 ine (pgdb:coales
56f0: 63 65 2d 72 75 6e 73 31 20 72 75 6e 73 20 20 29 ce-runs1 runs )
5700: 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 74 61 20 . (let* ((data
5710: 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c (make-hash-tabl
5720: 65 29 29 29 0a 20 20 20 20 0a 20 20 20 20 28 66 e))). . (f
5730: 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 6c 61 or-each. (la
5740: 6d 62 64 61 20 28 72 75 6e 29 0a 20 20 20 20 20 mbda (run).
5750: 20 20 28 6c 65 74 2a 20 28 28 74 61 72 67 65 74 (let* ((target
5760: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 75 6e (vector-ref run
5770: 20 30 29 29 0a 09 20 20 20 20 20 20 28 70 61 72 0)).. (par
5780: 74 73 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 ts (string-spli
5790: 74 20 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 t target "/"))..
57a0: 20 20 20 20 20 20 28 66 69 72 73 74 20 20 28 63 (first (c
57b0: 61 72 20 70 61 72 74 73 29 29 0a 09 20 20 20 20 ar parts))..
57c0: 20 20 28 72 65 73 74 20 20 20 28 73 74 72 69 6e (rest (strin
57d0: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 63 g-intersperse (c
57e0: 64 72 20 70 61 72 74 73 29 20 22 2f 22 29 29 0a dr parts) "/")).
57f0: 09 20 20 20 20 20 20 28 63 6f 6c 64 61 74 20 28 . (coldat (
5800: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 hash-table-ref/d
5810: 65 66 61 75 6c 74 20 64 61 74 61 20 66 69 72 73 efault data firs
5820: 74 20 23 66 29 29 29 0a 09 20 28 69 66 20 28 6e t #f))).. (if (n
5830: 6f 74 20 63 6f 6c 64 61 74 29 28 6c 65 74 20 28 ot coldat)(let (
5840: 28 6e 65 77 68 74 20 28 6d 61 6b 65 2d 68 61 73 (newht (make-has
5850: 68 2d 74 61 62 6c 65 29 29 29 0a 09 09 09 20 20 h-table)))....
5860: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 (hash-table-set
5870: 21 20 64 61 74 61 20 66 69 72 73 74 20 6e 65 77 ! data first new
5880: 68 74 29 0a 09 09 09 20 20 20 28 73 65 74 21 20 ht).... (set!
5890: 63 6f 6c 64 61 74 20 6e 65 77 68 74 29 29 29 0a coldat newht))).
58a0: 09 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 . (hash-table-se
58b0: 74 21 20 63 6f 6c 64 61 74 20 72 65 73 74 20 72 t! coldat rest r
58c0: 75 6e 29 29 29 0a 20 20 20 20 20 72 75 6e 73 29 un))). runs)
58d0: 0a 20 20 20 20 64 61 74 61 29 29 0a 0a 3b 3b 20 . data))..;;
58e0: 67 69 76 65 6e 20 6f 72 64 65 72 65 64 20 64 61 given ordered da
58f0: 74 61 20 68 61 73 68 20 72 65 74 75 72 6e 20 61 ta hash return a
5900: 2d 6b 65 79 73 0a 3b 3b 0a 28 64 65 66 69 6e 65 -keys.;;.(define
5910: 20 28 70 67 64 62 3a 6f 72 64 65 72 65 64 2d 64 (pgdb:ordered-d
5920: 61 74 61 2d 3e 61 2d 6b 65 79 73 20 6f 72 64 65 ata->a-keys orde
5930: 72 65 64 2d 64 61 74 61 29 0a 20 20 28 73 6f 72 red-data). (sor
5940: 74 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 6b 65 t (hash-table-ke
5950: 79 73 20 6f 72 64 65 72 65 64 2d 64 61 74 61 29 ys ordered-data)
5960: 20 73 74 72 69 6e 67 3e 3d 3f 29 29 0a 0a 3b 3b string>=?))..;;
5970: 20 67 69 76 65 6e 20 6f 72 64 65 72 65 64 20 64 given ordered d
5980: 61 74 61 20 68 61 73 68 20 72 65 74 75 72 6e 20 ata hash return
5990: 62 2d 6b 65 79 73 0a 3b 3b 0a 28 64 65 66 69 6e b-keys.;;.(defin
59a0: 65 20 28 70 67 64 62 3a 6f 72 64 65 72 65 64 2d e (pgdb:ordered-
59b0: 64 61 74 61 2d 3e 62 2d 6b 65 79 73 20 6f 72 64 data->b-keys ord
59c0: 65 72 65 64 2d 64 61 74 61 20 61 2d 6b 65 79 73 ered-data a-keys
59d0: 29 0a 20 20 28 64 65 6c 65 74 65 2d 64 75 70 6c ). (delete-dupl
59e0: 69 63 61 74 65 73 0a 20 20 20 28 73 6f 72 74 20 icates. (sort
59f0: 28 61 70 70 6c 79 0a 09 20 20 61 70 70 65 6e 64 (apply.. append
5a00: 0a 09 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 .. (map (lambda
5a10: 20 28 73 75 62 2d 6b 65 79 29 0a 09 09 20 28 6c (sub-key)... (l
5a20: 65 74 20 28 28 73 75 62 64 61 74 20 28 68 61 73 et ((subdat (has
5a30: 68 2d 74 61 62 6c 65 2d 72 65 66 20 6f 72 64 65 h-table-ref orde
5a40: 72 65 64 2d 64 61 74 61 20 73 75 62 2d 6b 65 79 red-data sub-key
5a50: 29 29 29 0a 09 09 20 20 20 28 68 61 73 68 2d 74 )))... (hash-t
5a60: 61 62 6c 65 2d 6b 65 79 73 20 73 75 62 64 61 74 able-keys subdat
5a70: 29 29 29 0a 09 20 20 20 20 20 20 20 61 2d 6b 65 ))).. a-ke
5a80: 79 73 29 29 0a 09 20 73 74 72 69 6e 67 3e 3d 3f ys)).. string>=?
5a90: 29 29 29 0a 0a 3b 3b 20 67 69 76 65 6e 20 6f 72 )))..;; given or
5aa0: 64 65 72 65 64 20 64 61 74 61 20 68 61 73 68 20 dered data hash
5ab0: 72 65 74 75 72 6e 20 61 2d 6b 65 79 73 0a 3b 3b return a-keys.;;
5ac0: 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a 6f .(define (pgdb:o
5ad0: 72 64 65 72 65 64 2d 64 61 74 61 2d 3e 61 2d 6b rdered-data->a-k
5ae0: 65 79 73 20 6f 72 64 65 72 65 64 2d 64 61 74 61 eys ordered-data
5af0: 29 0a 20 20 28 73 6f 72 74 20 28 68 61 73 68 2d ). (sort (hash-
5b00: 74 61 62 6c 65 2d 6b 65 79 73 20 6f 72 64 65 72 table-keys order
5b10: 65 64 2d 64 61 74 61 29 20 73 74 72 69 6e 67 3e ed-data) string>
5b20: 3d 3f 29 29 0a 0a 3b 3b 20 67 69 76 65 6e 20 6f =?))..;; given o
5b30: 72 64 65 72 65 64 20 64 61 74 61 20 68 61 73 68 rdered data hash
5b40: 20 72 65 74 75 72 6e 20 62 2d 6b 65 79 73 0a 3b return b-keys.;
5b50: 3b 0a 28 64 65 66 69 6e 65 20 28 70 67 64 62 3a ;.(define (pgdb:
5b60: 6f 72 64 65 72 65 64 2d 64 61 74 61 2d 3e 62 2d ordered-data->b-
5b70: 6b 65 79 73 20 6f 72 64 65 72 65 64 2d 64 61 74 keys ordered-dat
5b80: 61 20 61 2d 6b 65 79 73 29 0a 20 20 28 64 65 6c a a-keys). (del
5b90: 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 0a 20 ete-duplicates.
5ba0: 20 20 28 73 6f 72 74 20 28 61 70 70 6c 79 0a 09 (sort (apply..
5bb0: 20 20 61 70 70 65 6e 64 0a 09 20 20 28 6d 61 70 append.. (map
5bc0: 20 28 6c 61 6d 62 64 61 20 28 73 75 62 2d 6b 65 (lambda (sub-ke
5bd0: 79 29 0a 09 09 20 28 6c 65 74 20 28 28 73 75 62 y)... (let ((sub
5be0: 64 61 74 20 28 68 61 73 68 2d 74 61 62 6c 65 2d dat (hash-table-
5bf0: 72 65 66 20 6f 72 64 65 72 65 64 2d 64 61 74 61 ref ordered-data
5c00: 20 73 75 62 2d 6b 65 79 29 29 29 0a 09 09 20 20 sub-key)))...
5c10: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 6b 65 79 (hash-table-key
5c20: 73 20 73 75 62 64 61 74 29 29 29 0a 09 20 20 20 s subdat)))..
5c30: 20 20 20 20 61 2d 6b 65 79 73 29 29 0a 09 20 73 a-keys)).. s
5c40: 74 72 69 6e 67 3e 3d 3f 29 29 29 0a 0a 28 64 65 tring>=?)))..(de
5c50: 66 69 6e 65 20 28 70 67 64 62 3a 63 6f 61 6c 65 fine (pgdb:coale
5c60: 73 63 65 2d 72 75 6e 73 2d 62 79 2d 73 6c 69 63 sce-runs-by-slic
5c70: 65 20 72 75 6e 73 20 73 6c 69 63 65 29 0a 20 20 e runs slice).
5c80: 28 6c 65 74 2a 20 28 28 64 61 74 61 20 20 28 6d (let* ((data (m
5c90: 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 ake-hash-table))
5ca0: 29 0a 20 20 20 20 20 20 28 66 6f 72 2d 65 61 63 ). (for-eac
5cb0: 68 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 h. (lambda (
5cc0: 72 75 6e 29 0a 20 20 20 20 20 20 20 28 6c 65 74 run). (let
5cd0: 2a 20 28 28 74 61 72 67 65 74 20 28 76 65 63 74 * ((target (vect
5ce0: 6f 72 2d 72 65 66 20 72 75 6e 20 30 29 29 0a 20 or-ref run 0)).
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 75 (ru
5d00: 6e 2d 6e 61 6d 65 20 28 76 65 63 74 6f 72 2d 72 n-name (vector-r
5d10: 65 66 20 72 75 6e 20 31 29 29 20 20 20 20 0a 09 ef run 1)) ..
5d20: 20 20 20 20 20 20 28 70 61 72 74 73 20 20 28 73 (parts (s
5d30: 74 72 69 6e 67 2d 73 70 6c 69 74 20 74 61 72 67 tring-split targ
5d40: 65 74 20 22 2f 22 29 29 0a 09 20 20 20 20 20 20 et "/"))..
5d50: 28 66 69 72 73 74 20 20 28 63 61 72 20 70 61 72 (first (car par
5d60: 74 73 29 29 0a 09 20 20 20 20 20 20 28 72 65 73 ts)).. (res
5d70: 74 20 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 t (string-inte
5d80: 72 73 70 65 72 73 65 20 28 63 64 72 20 70 61 72 rsperse (cdr par
5d90: 74 73 29 20 22 2f 22 29 29 0a 09 20 20 20 20 20 ts) "/"))..
5da0: 20 28 63 6f 6c 64 61 74 20 28 68 61 73 68 2d 74 (coldat (hash-t
5db0: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 able-ref/default
5dc0: 20 64 61 74 61 20 72 65 73 74 20 23 66 29 29 29 data rest #f)))
5dd0: 0a 09 20 28 69 66 20 28 6e 6f 74 20 63 6f 6c 64 .. (if (not cold
5de0: 61 74 29 28 6c 65 74 20 28 28 6e 65 77 68 74 20 at)(let ((newht
5df0: 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 (make-hash-table
5e00: 29 29 29 0a 09 09 09 20 20 20 28 68 61 73 68 2d ))).... (hash-
5e10: 74 61 62 6c 65 2d 73 65 74 21 20 64 61 74 61 20 table-set! data
5e20: 72 65 73 74 20 6e 65 77 68 74 29 0a 09 09 09 20 rest newht)....
5e30: 20 20 28 73 65 74 21 20 63 6f 6c 64 61 74 20 6e (set! coldat n
5e40: 65 77 68 74 29 29 29 0a 09 20 28 68 61 73 68 2d ewht))).. (hash-
5e50: 74 61 62 6c 65 2d 73 65 74 21 20 63 6f 6c 64 61 table-set! colda
5e60: 74 20 72 75 6e 2d 6e 61 6d 65 20 72 75 6e 29 29 t run-name run))
5e70: 29 0a 20 20 20 20 20 72 75 6e 73 29 0a 20 20 20 ). runs).
5e80: 20 64 61 74 61 29 29 0a 0a 0a 28 64 65 66 69 6e data))...(defin
5e90: 65 20 28 70 67 64 62 3a 72 75 6e 73 2d 74 6f 2d e (pgdb:runs-to-
5ea0: 68 61 73 68 20 72 75 6e 73 20 29 0a 20 20 28 6c hash runs ). (l
5eb0: 65 74 2a 20 28 28 64 61 74 61 20 20 28 6d 61 6b et* ((data (mak
5ec0: 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a e-hash-table))).
5ed0: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 (for-each.
5ee0: 20 20 20 28 6c 61 6d 62 64 61 20 28 72 75 6e 29 (lambda (run)
5ef0: 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 . (let* ((
5f00: 72 75 6e 2d 6e 61 6d 65 20 28 76 65 63 74 6f 72 run-name (vector
5f10: 2d 72 65 66 20 72 75 6e 20 30 29 29 0a 09 20 20 -ref run 0))..
5f20: 20 20 20 20 28 74 65 73 74 20 28 63 6f 6e 63 20 (test (conc
5f30: 28 76 65 63 74 6f 72 2d 72 65 66 20 72 75 6e 20 (vector-ref run
5f40: 31 29 20 22 3a 22 20 28 76 65 63 74 6f 72 2d 72 1) ":" (vector-r
5f50: 65 66 20 72 75 6e 20 33 29 29 29 0a 09 20 20 20 ef run 3)))..
5f60: 20 20 20 28 63 6f 6c 64 61 74 20 28 68 61 73 68 (coldat (hash
5f70: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 -table-ref/defau
5f80: 6c 74 20 64 61 74 61 20 72 75 6e 2d 6e 61 6d 65 lt data run-name
5f90: 20 23 66 29 29 29 0a 09 20 28 69 66 20 28 6e 6f #f))).. (if (no
5fa0: 74 20 63 6f 6c 64 61 74 29 28 6c 65 74 20 28 28 t coldat)(let ((
5fb0: 6e 65 77 68 74 20 28 6d 61 6b 65 2d 68 61 73 68 newht (make-hash
5fc0: 2d 74 61 62 6c 65 29 29 29 0a 09 09 09 20 20 20 -table)))....
5fd0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
5fe0: 20 64 61 74 61 20 72 75 6e 2d 6e 61 6d 65 20 6e data run-name n
5ff0: 65 77 68 74 29 0a 09 09 09 20 20 20 28 73 65 74 ewht).... (set
6000: 21 20 63 6f 6c 64 61 74 20 6e 65 77 68 74 29 29 ! coldat newht))
6010: 29 0a 09 20 28 68 61 73 68 2d 74 61 62 6c 65 2d ).. (hash-table-
6020: 73 65 74 21 20 63 6f 6c 64 61 74 20 74 65 73 74 set! coldat test
6030: 20 72 75 6e 29 29 29 0a 20 20 20 20 20 72 75 6e run))). run
6040: 73 29 0a 20 20 20 20 64 61 74 61 29 29 0a 0a 28 s). data))..(
6050: 64 65 66 69 6e 65 20 28 70 67 64 62 3a 67 65 74 define (pgdb:get
6060: 2d 68 69 73 74 6f 72 79 2d 68 61 73 68 20 72 75 -history-hash ru
6070: 6e 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 ns). (let* ((da
6080: 74 61 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 ta (make-hash-t
6090: 61 62 6c 65 29 29 29 0a 20 20 20 20 20 28 66 6f able))). (fo
60a0: 72 2d 65 61 63 68 0a 20 20 20 20 20 28 6c 61 6d r-each. (lam
60b0: 62 64 61 20 28 72 75 6e 29 0a 20 20 20 20 20 20 bda (run).
60c0: 20 28 6c 65 74 2a 20 28 28 72 75 6e 2d 6e 61 6d (let* ((run-nam
60d0: 65 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 75 e (vector-ref ru
60e0: 6e 20 30 29 29 29 0a 09 20 28 68 61 73 68 2d 74 n 0))).. (hash-t
60f0: 61 62 6c 65 2d 73 65 74 21 20 64 61 74 61 20 72 able-set! data r
6100: 75 6e 2d 6e 61 6d 65 20 72 75 6e 29 29 29 0a 20 un-name run))).
6110: 20 20 20 20 72 75 6e 73 29 0a 20 20 20 20 64 61 runs). da
6120: 74 61 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 70 ta))..(define (p
6130: 67 64 62 3a 67 65 74 2d 70 67 2d 6c 73 74 20 74 gdb:get-pg-lst t
6140: 61 62 32 2d 70 61 67 65 73 29 0a 20 20 20 20 28 ab2-pages). (
6150: 6c 65 74 20 6c 6f 6f 70 20 28 28 69 20 31 29 0a let loop ((i 1).
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 73 (ls
6170: 74 20 60 28 29 29 29 0a 20 20 20 20 20 20 20 20 t `())).
6180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
6190: 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 cond.
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3e ((>
61b0: 20 69 20 74 61 62 32 2d 70 61 67 65 73 20 29 0a i tab2-pages ).
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61d0: 20 20 20 20 20 20 20 20 6c 73 74 29 20 0a 20 20 lst) .
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61f0: 20 20 20 20 28 65 6c 73 65 20 0a 09 09 20 20 09 (else ... .
6200: 28 6c 6f 6f 70 20 28 2b 20 69 20 31 29 20 28 61 (loop (+ i 1) (a
6210: 70 70 65 6e 64 20 20 20 6c 73 74 20 28 6c 69 73 ppend lst (lis
6220: 74 20 69 29 29 29 29 29 29 29 0a 0a t i)))))))..