0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79 ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 31 2c right 2006-2011,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64 Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70 ..;; .;; This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61 rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74 vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69 he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72 on 2.0 or.;; gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61 eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65 ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74 COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 ails..;; .;; Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55 stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 T ANY WARRANTY;
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72 .;; implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45 ULAR.;; PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 3d 3d ==========..;;==
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0220: 3d 3d 3d 3d 0a 3b 3b 20 44 61 74 61 62 61 73 65 ====.;; Database
0230: 20 61 63 63 65 73 73 0a 3b 3b 3d 3d 3d 3d 3d 3d access.;;======
0240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0280: 0a 0a 28 75 73 65 20 73 71 6c 69 74 65 33 20 73 ..(use sqlite3 s
0290: 72 66 69 2d 31 20 70 6f 73 69 78 20 72 65 67 65 rfi-1 posix rege
02a0: 78 20 72 65 67 65 78 2d 63 61 73 65 20 73 72 66 x regex-case srf
02b0: 69 2d 36 39 20 63 73 76 2d 78 6d 6c 29 0a 28 69 i-69 csv-xml).(i
02c0: 6d 70 6f 72 74 20 28 70 72 65 66 69 78 20 73 71 mport (prefix sq
02d0: 6c 69 74 65 33 20 73 71 6c 69 74 65 33 3a 29 29 lite3 sqlite3:))
02e0: 0a 0a 28 64 65 63 6c 61 72 65 20 28 75 6e 69 74 ..(declare (unit
02f0: 20 64 62 29 29 0a 28 64 65 63 6c 61 72 65 20 28 db)).(declare (
0300: 75 73 65 73 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 uses common)).(d
0310: 65 63 6c 61 72 65 20 28 75 73 65 73 20 6b 65 79 eclare (uses key
0320: 73 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 s)).(declare (us
0330: 65 73 20 6f 64 73 29 29 0a 0a 28 69 6e 63 6c 75 es ods))..(inclu
0340: 64 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65 63 6f 72 de "common_recor
0350: 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 ds.scm").(includ
0360: 65 20 22 64 62 5f 72 65 63 6f 72 64 73 2e 73 63 e "db_records.sc
0370: 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 6b 65 m").(include "ke
0380: 79 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a y_records.scm").
0390: 0a 28 64 65 66 69 6e 65 20 28 6f 70 65 6e 2d 64 .(define (open-d
03a0: 62 29 20 3b 3b 20 20 28 63 6f 6e 63 20 2a 74 6f b) ;; (conc *to
03b0: 70 70 61 74 68 2a 20 22 2f 6d 65 67 61 74 65 73 ppath* "/megates
03c0: 74 2e 64 62 22 29 20 28 63 61 72 20 2a 63 6f 6e t.db") (car *con
03d0: 66 69 67 69 6e 66 6f 2a 29 29 29 0a 20 20 28 6c figinfo*))). (l
03e0: 65 74 2a 20 28 28 64 62 70 61 74 68 20 20 20 20 et* ((dbpath
03f0: 28 63 6f 6e 63 20 2a 74 6f 70 70 61 74 68 2a 20 (conc *toppath*
0400: 22 2f 6d 65 67 61 74 65 73 74 2e 64 62 22 29 29 "/megatest.db"))
0410: 20 3b 3b 20 66 6e 61 6d 65 29 0a 09 20 28 63 6f ;; fname).. (co
0420: 6e 66 69 67 64 61 74 20 28 63 61 72 20 2a 63 6f nfigdat (car *co
0430: 6e 66 69 67 69 6e 66 6f 2a 29 29 0a 09 20 28 64 nfiginfo*)).. (d
0440: 62 65 78 69 73 74 73 20 20 28 66 69 6c 65 2d 65 bexists (file-e
0450: 78 69 73 74 73 3f 20 64 62 70 61 74 68 29 29 0a xists? dbpath)).
0460: 09 20 28 64 62 20 20 20 20 20 20 20 20 28 73 71 . (db (sq
0470: 6c 69 74 65 33 3a 6f 70 65 6e 2d 64 61 74 61 62 lite3:open-datab
0480: 61 73 65 20 64 62 70 61 74 68 29 29 20 3b 3b 20 ase dbpath)) ;;
0490: 28 6e 65 76 65 72 2d 67 69 76 65 2d 75 70 2d 6f (never-give-up-o
04a0: 70 65 6e 2d 64 62 20 64 62 70 61 74 68 29 29 0a pen-db dbpath)).
04b0: 09 20 28 68 61 6e 64 6c 65 72 20 20 20 28 6d 61 . (handler (ma
04c0: 6b 65 2d 62 75 73 79 2d 74 69 6d 65 6f 75 74 20 ke-busy-timeout
04d0: 33 36 30 30 30 29 29 29 0a 20 20 20 20 28 73 71 36000))). (sq
04e0: 6c 69 74 65 33 3a 73 65 74 2d 62 75 73 79 2d 68 lite3:set-busy-h
04f0: 61 6e 64 6c 65 72 21 20 64 62 20 68 61 6e 64 6c andler! db handl
0500: 65 72 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 er). (if (not
0510: 20 64 62 65 78 69 73 74 73 29 0a 09 28 6c 65 74 dbexists)..(let
0520: 2a 20 28 28 6b 65 79 73 20 20 20 20 20 28 63 6f * ((keys (co
0530: 6e 66 69 67 2d 67 65 74 2d 66 69 65 6c 64 73 20 nfig-get-fields
0540: 63 6f 6e 66 69 67 64 61 74 29 29 0a 09 20 20 20 configdat))..
0550: 20 20 20 20 28 68 61 76 65 6b 65 79 73 20 28 3e (havekeys (>
0560: 20 28 6c 65 6e 67 74 68 20 6b 65 79 73 29 20 30 (length keys) 0
0570: 29 29 0a 09 20 20 20 20 20 20 20 28 6b 65 79 73 )).. (keys
0580: 74 72 20 20 20 28 6b 65 79 73 2d 3e 6b 65 79 73 tr (keys->keys
0590: 74 72 20 6b 65 79 73 29 29 0a 09 20 20 20 20 20 tr keys))..
05a0: 20 20 28 66 69 65 6c 64 73 74 72 20 28 6b 65 79 (fieldstr (key
05b0: 73 2d 3e 6b 65 79 2f 66 69 65 6c 64 20 6b 65 79 s->key/field key
05c0: 73 29 29 29 0a 09 20 20 28 66 6f 72 2d 65 61 63 s))).. (for-eac
05d0: 68 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a h (lambda (key).
05e0: 09 09 20 20 20 20 20 20 28 6c 65 74 20 28 28 6b .. (let ((k
05f0: 65 79 6e 20 28 76 65 63 74 6f 72 2d 72 65 66 20 eyn (vector-ref
0600: 6b 65 79 20 30 29 29 29 0a 09 09 09 28 69 66 20 key 0)))....(if
0610: 28 6d 65 6d 62 65 72 20 28 73 74 72 69 6e 67 2d (member (string-
0620: 64 6f 77 6e 63 61 73 65 20 6b 65 79 6e 29 0a 09 downcase keyn)..
0630: 09 09 09 20 20 20 20 28 6c 69 73 74 20 22 72 75 ... (list "ru
0640: 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 nname" "state" "
0650: 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 status" "owner"
0660: 22 65 76 65 6e 74 5f 74 69 6d 65 22 20 22 63 6f "event_time" "co
0670: 6d 6d 65 6e 74 22 20 22 66 61 69 6c 5f 63 6f 75 mment" "fail_cou
0680: 6e 74 22 0a 09 09 09 09 09 20 20 22 70 61 73 73 nt"...... "pass
0690: 5f 63 6f 75 6e 74 22 29 29 0a 09 09 09 20 20 20 _count"))....
06a0: 20 28 62 65 67 69 6e 0a 09 09 09 20 20 20 20 20 (begin....
06b0: 20 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 (print "ERROR:
06c0: 79 6f 75 72 20 6b 65 79 20 63 61 6e 6e 6f 74 20 your key cannot
06d0: 62 65 20 6e 61 6d 65 64 20 22 20 6b 65 79 6e 20 be named " keyn
06e0: 22 20 61 73 20 74 68 69 73 20 63 6f 6e 66 6c 69 " as this confli
06f0: 63 74 73 20 77 69 74 68 20 74 68 65 20 73 61 6d cts with the sam
0700: 65 20 6e 61 6d 65 64 20 66 69 65 6c 64 20 69 6e e named field in
0710: 20 74 68 65 20 72 75 6e 73 20 74 61 62 6c 65 22 the runs table"
0720: 29 0a 09 09 09 20 20 20 20 20 20 28 73 79 73 74 ).... (syst
0730: 65 6d 20 28 63 6f 6e 63 20 22 72 6d 20 2d 66 20 em (conc "rm -f
0740: 22 20 64 62 70 61 74 68 29 29 0a 09 09 09 20 20 " dbpath))....
0750: 20 20 20 20 28 65 78 69 74 20 31 29 29 29 29 29 (exit 1)))))
0760: 0a 09 09 20 20 20 20 6b 65 79 73 29 0a 09 20 20 ... keys)..
0770: 3b 3b 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 ;; (sqlite3:exec
0780: 75 74 65 20 64 62 20 22 50 52 41 47 4d 41 20 73 ute db "PRAGMA s
0790: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 ynchronous = OFF
07a0: 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a ;").. (sqlite3:
07b0: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
07c0: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
07d0: 45 58 49 53 54 53 20 6b 65 79 73 20 28 69 64 20 EXISTS keys (id
07e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
07f0: 4b 45 59 2c 20 66 69 65 6c 64 6e 61 6d 65 20 54 KEY, fieldname T
0800: 45 58 54 2c 20 66 69 65 6c 64 74 79 70 65 20 54 EXT, fieldtype T
0810: 45 58 54 2c 20 43 4f 4e 53 54 52 41 49 4e 54 20 EXT, CONSTRAINT
0820: 6b 65 79 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e keyconstraint UN
0830: 49 51 55 45 20 28 66 69 65 6c 64 6e 61 6d 65 29 IQUE (fieldname)
0840: 29 3b 22 29 0a 09 20 20 28 66 6f 72 2d 65 61 63 );").. (for-eac
0850: 68 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a h (lambda (key).
0860: 09 09 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 .. (sqlite3
0870: 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 :execute db "INS
0880: 45 52 54 20 49 4e 54 4f 20 6b 65 79 73 20 28 66 ERT INTO keys (f
0890: 69 65 6c 64 6e 61 6d 65 2c 66 69 65 6c 64 74 79 ieldname,fieldty
08a0: 70 65 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 pe) VALUES (?,?)
08b0: 3b 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c ;" (key:get-fiel
08c0: 64 6e 61 6d 65 20 6b 65 79 29 28 6b 65 79 3a 67 dname key)(key:g
08d0: 65 74 2d 66 69 65 6c 64 74 79 70 65 20 6b 65 79 et-fieldtype key
08e0: 29 29 29 0a 09 09 20 20 20 20 6b 65 79 73 29 0a )))... keys).
08f0: 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 . (sqlite3:exec
0900: 75 74 65 20 64 62 20 28 63 6f 6e 63 20 0a 09 09 ute db (conc ...
0910: 09 20 20 20 20 20 20 20 22 43 52 45 41 54 45 20 . "CREATE
0920: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 TABLE IF NOT EXI
0930: 53 54 53 20 72 75 6e 73 20 28 69 64 20 49 4e 54 STS runs (id INT
0940: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 EGER PRIMARY KEY
0950: 2c 20 22 20 0a 09 09 09 20 20 20 20 20 20 20 66 , " .... f
0960: 69 65 6c 64 73 74 72 20 28 69 66 20 68 61 76 65 ieldstr (if have
0970: 6b 65 79 73 20 22 2c 22 20 22 22 29 0a 09 09 09 keys "," "")....
0980: 20 20 20 20 20 20 20 22 72 75 6e 6e 61 6d 65 20 "runname
0990: 54 45 58 54 2c 22 0a 09 09 09 20 20 20 20 20 20 TEXT,"....
09a0: 20 22 73 74 61 74 65 20 54 45 58 54 20 44 45 46 "state TEXT DEF
09b0: 41 55 4c 54 20 27 27 2c 22 0a 09 09 09 20 20 20 AULT '',"....
09c0: 20 20 20 20 22 73 74 61 74 75 73 20 54 45 58 54 "status TEXT
09d0: 20 44 45 46 41 55 4c 54 20 27 27 2c 22 0a 09 09 DEFAULT '',"...
09e0: 09 20 20 20 20 20 20 20 22 6f 77 6e 65 72 20 54 . "owner T
09f0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 22 EXT DEFAULT '',"
0a00: 0a 09 09 09 20 20 20 20 20 20 20 22 65 76 65 6e .... "even
0a10: 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 t_time TIMESTAMP
0a20: 2c 22 0a 09 09 09 20 20 20 20 20 20 20 22 63 6f ,".... "co
0a30: 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 55 mment TEXT DEFAU
0a40: 4c 54 20 27 27 2c 22 0a 09 09 09 20 20 20 20 20 LT '',"....
0a50: 20 20 22 66 61 69 6c 5f 63 6f 75 6e 74 20 49 4e "fail_count IN
0a60: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c TEGER DEFAULT 0,
0a70: 22 0a 09 09 09 20 20 20 20 20 20 20 22 70 61 73 ".... "pas
0a80: 73 5f 63 6f 75 6e 74 20 49 4e 54 45 47 45 52 20 s_count INTEGER
0a90: 44 45 46 41 55 4c 54 20 30 2c 22 0a 09 09 09 20 DEFAULT 0,"....
0aa0: 20 20 20 20 20 20 22 43 4f 4e 53 54 52 41 49 4e "CONSTRAIN
0ab0: 54 20 72 75 6e 73 63 6f 6e 73 74 72 61 69 6e 74 T runsconstraint
0ac0: 20 55 4e 49 51 55 45 20 28 72 75 6e 6e 61 6d 65 UNIQUE (runname
0ad0: 22 20 28 69 66 20 68 61 76 65 6b 65 79 73 20 22 " (if havekeys "
0ae0: 2c 22 20 22 22 29 20 6b 65 79 73 74 72 20 22 29 ," "") keystr ")
0af0: 29 3b 22 29 29 0a 09 20 20 28 73 71 6c 69 74 65 );")).. (sqlite
0b00: 33 3a 65 78 65 63 75 74 65 20 64 62 20 28 63 6f 3:execute db (co
0b10: 6e 63 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 nc "CREATE INDEX
0b20: 20 72 75 6e 73 5f 69 6e 64 65 78 20 4f 4e 20 72 runs_index ON r
0b30: 75 6e 73 20 28 72 75 6e 6e 61 6d 65 22 20 28 69 uns (runname" (i
0b40: 66 20 68 61 76 65 6b 65 79 73 20 22 2c 22 20 22 f havekeys "," "
0b50: 22 29 20 6b 65 79 73 74 72 20 22 29 3b 22 29 29 ") keystr ");"))
0b60: 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 .. (sqlite3:exe
0b70: 63 75 74 65 20 64 62 20 0a 09 09 09 20 20 20 22 cute db .... "
0b80: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 CREATE TABLE IF
0b90: 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 73 NOT EXISTS tests
0ba0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0bb0: 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 (id INTEGE
0bc0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 R PRIMARY KEY,.
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0be0: 20 20 20 20 72 75 6e 5f 69 64 20 20 20 20 20 49 run_id I
0bf0: 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 20 20 20 NTEGER,.
0c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes
0c10: 74 6e 61 6d 65 20 20 20 54 45 58 54 2c 0a 20 20 tname TEXT,.
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c30: 20 20 20 68 6f 73 74 20 20 20 20 20 20 20 54 45 host TE
0c40: 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 XT DEFAULT 'n/a'
0c50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0c60: 20 20 20 20 20 20 20 63 70 75 6c 6f 61 64 20 20 cpuload
0c70: 20 20 52 45 41 4c 20 44 45 46 41 55 4c 54 20 2d REAL DEFAULT -
0c80: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 1,.
0c90: 20 20 20 20 20 20 20 20 64 69 73 6b 66 72 65 65 diskfree
0ca0: 20 20 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 INTEGER DEFAU
0cb0: 4c 54 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 LT -1,.
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 61 6d unam
0cd0: 65 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 e TEXT DEFA
0ce0: 55 4c 54 20 27 6e 2f 61 27 2c 20 0a 20 20 20 20 ULT 'n/a', .
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d00: 20 72 75 6e 64 69 72 20 20 20 20 20 54 45 58 54 rundir TEXT
0d10: 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a DEFAULT 'n/a',.
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d30: 20 20 20 20 20 73 68 6f 72 74 64 69 72 20 20 20 shortdir
0d40: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
0d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0d60: 20 20 20 20 20 20 69 74 65 6d 5f 70 61 74 68 20 item_path
0d70: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
0d80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0d90: 20 20 20 20 20 20 20 73 74 61 74 65 20 20 20 20 state
0da0: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
0db0: 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 0a 20 20 NOT_STARTED',.
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0dd0: 20 20 20 73 74 61 74 75 73 20 20 20 20 20 54 45 status TE
0de0: 58 54 20 44 45 46 41 55 4c 54 20 27 46 41 49 4c XT DEFAULT 'FAIL
0df0: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
0e00: 20 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 6e attemptn
0e10: 75 6d 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 um INTEGER DEFAU
0e20: 4c 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 LT 0,.
0e30: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c final
0e40: 5f 6c 6f 67 66 20 54 45 58 54 20 44 45 46 41 55 _logf TEXT DEFAU
0e50: 4c 54 20 27 6c 6f 67 73 2f 66 69 6e 61 6c 2e 6c LT 'logs/final.l
0e60: 6f 67 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 og',.
0e70: 20 20 20 20 20 20 20 20 20 20 6c 6f 67 64 61 74 logdat
0e80: 20 20 20 20 20 42 4c 4f 42 2c 20 0a 20 20 20 20 BLOB, .
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ea0: 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 49 4e run_duration IN
0eb0: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c TEGER DEFAULT 0,
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0ed0: 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 20 20 20 comment
0ee0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
0ef0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0f00: 20 20 20 20 20 20 20 65 76 65 6e 74 5f 74 69 6d event_tim
0f10: 65 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 20 e TIMESTAMP,.
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0f30: 20 20 66 61 69 6c 5f 63 6f 75 6e 74 20 49 4e 54 fail_count INT
0f40: 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c 0a EGER DEFAULT 0,.
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0f60: 20 20 20 20 20 70 61 73 73 5f 63 6f 75 6e 74 20 pass_count
0f70: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 INTEGER DEFAULT
0f80: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 0,.
0f90: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
0fa0: 4e 54 20 74 65 73 74 73 63 6f 6e 73 74 72 61 69 NT testsconstrai
0fb0: 6e 74 20 55 4e 49 51 55 45 20 28 72 75 6e 5f 69 nt UNIQUE (run_i
0fc0: 64 2c 20 74 65 73 74 6e 61 6d 65 2c 20 69 74 65 d, testname, ite
0fd0: 6d 5f 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 m_path).
0fe0: 20 20 29 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 );").. (sqlit
0ff0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1000: 52 45 41 54 45 20 49 4e 44 45 58 20 74 65 73 74 REATE INDEX test
1010: 73 5f 69 6e 64 65 78 20 4f 4e 20 74 65 73 74 73 s_index ON tests
1020: 20 28 72 75 6e 5f 69 64 2c 20 74 65 73 74 6e 61 (run_id, testna
1030: 6d 65 29 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 me);").. (sqlit
1040: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1050: 52 45 41 54 45 20 56 49 45 57 20 72 75 6e 73 5f REATE VIEW runs_
1060: 74 65 73 74 73 20 41 53 20 53 45 4c 45 43 54 20 tests AS SELECT
1070: 2a 20 46 52 4f 4d 20 72 75 6e 73 20 49 4e 4e 45 * FROM runs INNE
1080: 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 R JOIN tests ON
1090: 72 75 6e 73 2e 69 64 3d 74 65 73 74 73 2e 72 75 runs.id=tests.ru
10a0: 6e 5f 69 64 3b 22 29 0a 09 20 20 28 73 71 6c 69 n_id;").. (sqli
10b0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
10c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 CREATE TABLE IF
10d0: 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 5f NOT EXISTS test_
10e0: 73 74 65 70 73 20 0a 20 20 20 20 20 20 20 20 20 steps .
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1100: 20 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 52 (id INTEGER
1110: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 PRIMARY KEY,.
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes
1140: 74 5f 69 64 20 49 4e 54 45 47 45 52 2c 20 0a 20 t_id INTEGER, .
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
1170: 65 70 6e 61 6d 65 20 54 45 58 54 2c 20 0a 20 20 epname TEXT, .
1180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 sta
11a0: 74 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 te TEXT DEFAULT
11b0: 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 20 0a 'NOT_STARTED', .
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
11e0: 74 61 74 75 73 20 54 45 58 54 20 44 45 46 41 55 tatus TEXT DEFAU
11f0: 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 20 LT 'n/a',.
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1210: 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 5f 74 event_t
1220: 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 ime TIMESTAMP,.
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
1250: 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 55 mment TEXT DEFAU
1260: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
1270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1280: 20 20 20 20 20 20 6c 6f 67 66 69 6c 65 20 54 45 logfile TE
1290: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f CO
12c0: 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 73 74 NSTRAINT test_st
12d0: 65 70 73 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 eps_constraint U
12e0: 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 73 NIQUE (test_id,s
12f0: 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 29 29 3b tepname,state));
1300: 22 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 65 ").. (sqlite3:e
1310: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
1320: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
1330: 58 49 53 54 53 20 65 78 74 72 61 64 61 74 20 28 XISTS extradat (
1340: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
1350: 52 59 20 4b 45 59 2c 20 72 75 6e 5f 69 64 20 49 RY KEY, run_id I
1360: 4e 54 45 47 45 52 2c 20 6b 65 79 20 54 45 58 54 NTEGER, key TEXT
1370: 2c 20 76 61 6c 20 54 45 58 54 29 3b 22 29 0a 09 , val TEXT);")..
1380: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
1390: 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 te db "CREATE TA
13a0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 BLE IF NOT EXIST
13b0: 53 20 6d 65 74 61 64 61 74 20 28 69 64 20 49 4e S metadat (id IN
13c0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
13d0: 59 2c 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c Y, var TEXT, val
13e0: 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 TEXT,.
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1400: 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 CONSTRA
1410: 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 INT metadat_cons
1420: 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 traint UNIQUE (v
1430: 61 72 29 29 3b 22 29 0a 09 20 20 28 73 71 6c 69 ar));").. (sqli
1440: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
1450: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 CREATE TABLE IF
1460: 4e 4f 54 20 45 58 49 53 54 53 20 61 63 63 65 73 NOT EXISTS acces
1470: 73 5f 6c 6f 67 20 28 69 64 20 49 4e 54 45 47 45 s_log (id INTEGE
1480: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 75 R PRIMARY KEY, u
1490: 73 65 72 20 54 45 58 54 2c 20 61 63 63 65 73 73 ser TEXT, access
14a0: 65 64 20 54 49 4d 45 53 54 41 4d 50 2c 20 61 72 ed TIMESTAMP, ar
14b0: 67 73 20 54 45 58 54 29 3b 22 29 0a 09 20 20 28 gs TEXT);").. (
14c0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
14d0: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 db "CREATE TABLE
14e0: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 IF NOT EXISTS t
14f0: 65 73 74 5f 6d 65 74 61 20 28 69 64 20 49 4e 54 est_meta (id INT
1500: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 EGER PRIMARY KEY
1510: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1530: 20 20 20 20 20 20 20 74 65 73 74 6e 61 6d 65 20 testname
1540: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
1550: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
1560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1570: 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 20 author
1580: 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c TEXT DEFAUL
1590: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b0: 20 20 20 20 20 20 20 20 20 20 20 6f 77 6e 65 72 owner
15c0: 20 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 TEXT DEFA
15d0: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 des
1600: 63 72 69 70 74 69 6f 6e 20 54 45 58 54 20 44 45 cription TEXT DE
1610: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 FAULT '',.
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
1640: 65 76 69 65 77 65 64 20 20 20 20 54 49 4d 45 53 eviewed TIMES
1650: 54 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 20 TAMP,.
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1670: 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72 61 itera
1680: 74 65 64 20 20 20 20 54 45 58 54 20 44 45 46 41 ted TEXT DEFA
1690: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 76 67 avg
16c0: 5f 72 75 6e 74 69 6d 65 20 52 45 41 4c 2c 0a 20 _runtime REAL,.
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f0: 20 20 20 20 61 76 67 5f 64 69 73 6b 20 20 20 20 avg_disk
1700: 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 REAL,.
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1720: 20 20 20 20 20 20 20 20 20 20 20 74 61 67 73 20 tags
1730: 20 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 TEXT DEFA
1740: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 6f 62 job
1770: 67 72 6f 75 70 20 20 20 20 54 45 58 54 20 44 45 group TEXT DE
1780: 46 41 55 4c 54 20 27 64 65 66 61 75 6c 74 27 2c FAULT 'default',
1790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b0: 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 CONSTRAINT test
17c0: 5f 6d 65 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 _meta_constraint
17d0: 20 55 4e 49 51 55 45 20 28 74 65 73 74 6e 61 6d UNIQUE (testnam
17e0: 65 29 29 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 e));").. (sqlit
17f0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1800: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e REATE TABLE IF N
1810: 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 5f 64 OT EXISTS test_d
1820: 61 74 61 20 28 69 64 20 49 4e 54 45 47 45 52 20 ata (id INTEGER
1830: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 PRIMARY KEY,.
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes
1860: 74 5f 69 64 20 49 4e 54 45 47 45 52 2c 0a 20 20 t_id INTEGER,.
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
1890: 74 65 67 6f 72 79 20 54 45 58 54 20 44 45 46 41 tegory TEXT DEFA
18a0: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c0: 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 variable
18d0: 20 54 45 58 54 2c 0a 09 20 20 20 20 20 20 20 20 TEXT,..
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f0: 76 61 6c 75 65 20 52 45 41 4c 2c 0a 09 20 20 20 value REAL,..
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1910: 20 20 20 20 20 65 78 70 65 63 74 65 64 20 52 45 expected RE
1920: 41 4c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 AL,..
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6c tol
1940: 20 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 REAL,.
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1960: 20 20 20 20 20 20 20 75 6e 69 74 73 20 54 45 58 units TEX
1970: 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 T,.
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1990: 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 comment TEXT
19a0: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 stat
19d0: 75 73 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 us TEXT DEFAULT
19e0: 27 6e 2f 61 27 2c 0a 20 20 20 20 20 20 20 20 20 'n/a',.
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a00: 20 20 20 20 20 20 20 74 79 70 65 20 54 45 58 54 type TEXT
1a10: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a30: 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 CONST
1a40: 52 41 49 4e 54 20 74 65 73 74 5f 64 61 74 61 5f RAINT test_data_
1a50: 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 constraint UNIQU
1a60: 45 20 28 74 65 73 74 5f 69 64 2c 63 61 74 65 67 E (test_id,categ
1a70: 6f 72 79 2c 76 61 72 69 61 62 6c 65 29 29 3b 22 ory,variable));"
1a80: 29 0a 09 20 20 3b 3b 20 4d 75 73 74 20 64 6f 20 ).. ;; Must do
1a90: 74 68 69 73 20 2a 61 66 74 65 72 2a 20 72 75 6e this *after* run
1aa0: 6e 69 6e 67 20 70 61 74 63 68 20 64 62 20 21 21 ning patch db !!
1ab0: 20 4e 6f 20 6d 6f 72 65 2e 20 0a 09 20 20 28 64 No more. .. (d
1ac0: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
1ad0: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
1ae0: 6d 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f 6e megatest-version
1af0: 29 0a 09 20 20 29 29 0a 20 20 20 20 64 62 29 29 ).. )). db))
1b00: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
1b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 4f ==========.;; TO
1b50: 44 4f 3a 0a 3b 3b 20 20 20 70 75 74 20 64 65 6c DO:.;; put del
1b60: 74 61 73 20 69 6e 74 6f 20 61 6e 20 61 73 73 6f tas into an asso
1b70: 63 20 6c 69 73 74 20 77 69 74 68 20 76 65 72 73 c list with vers
1b80: 69 6f 6e 20 6e 75 6d 62 65 72 73 0a 3b 3b 20 20 ion numbers.;;
1b90: 20 61 70 70 6c 79 20 61 6c 6c 20 66 72 6f 6d 20 apply all from
1ba0: 6c 61 73 74 20 74 6f 20 63 75 72 72 65 6e 74 0a last to current.
1bb0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
1bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bf0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 28 64 65 66 69 6e 65 ========.(define
1c00: 20 28 70 61 74 63 68 2d 64 62 20 64 62 29 0a 20 (patch-db db).
1c10: 20 28 68 61 6e 64 6c 65 2d 65 78 63 65 70 74 69 (handle-excepti
1c20: 6f 6e 73 0a 20 20 20 65 78 6e 0a 20 20 20 28 62 ons. exn. (b
1c30: 65 67 69 6e 0a 20 20 20 20 20 28 70 72 69 6e 74 egin. (print
1c40: 20 22 45 78 63 65 70 74 69 6f 6e 3a 20 22 20 65 "Exception: " e
1c50: 78 6e 29 0a 20 20 20 20 20 28 70 72 69 6e 74 20 xn). (print
1c60: 22 45 52 52 4f 52 3a 20 50 6f 73 73 69 62 6c 65 "ERROR: Possible
1c70: 20 6f 75 74 20 6f 66 20 64 61 74 65 20 73 63 68 out of date sch
1c80: 65 6d 61 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 ema, attempting
1c90: 74 6f 20 61 64 64 20 74 61 62 6c 65 20 6d 65 74 to add table met
1ca0: 61 64 61 74 61 2e 2e 2e 22 29 0a 20 20 20 20 20 adata...").
1cb0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
1cc0: 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c db "CREATE TABL
1cd0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
1ce0: 6d 65 74 61 64 61 74 20 28 69 64 20 49 4e 54 45 metadat (id INTE
1cf0: 47 45 52 2c 20 76 61 72 20 54 45 58 54 2c 20 76 GER, var TEXT, v
1d00: 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 al TEXT,.
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d20: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 CONSTR
1d30: 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e AINT metadat_con
1d40: 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 straint UNIQUE (
1d50: 76 61 72 29 29 3b 22 29 0a 20 20 20 20 20 28 69 var));"). (i
1d60: 66 20 28 6e 6f 74 20 28 64 62 3a 67 65 74 2d 76 f (not (db:get-v
1d70: 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f ar db "MEGATEST_
1d80: 56 45 52 53 49 4f 4e 22 29 29 0a 09 20 28 64 62 VERSION")).. (db
1d90: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
1da0: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 ATEST_VERSION" 1
1db0: 2e 31 37 29 29 29 0a 20 20 20 28 6c 65 74 20 28 .17))). (let (
1dc0: 28 6d 76 65 72 20 28 64 62 3a 67 65 74 2d 76 61 (mver (db:get-va
1dd0: 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 r db "MEGATEST_V
1de0: 45 52 53 49 4f 4e 22 29 29 0a 09 20 28 74 65 73 ERSION")).. (tes
1df0: 74 2d 6d 65 74 61 2d 64 65 66 20 22 43 52 45 41 t-meta-def "CREA
1e00: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
1e10: 45 58 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 EXISTS test_meta
1e20: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
1e30: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 MARY KEY,.
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1e60: 65 73 74 6e 61 6d 65 20 20 20 20 54 45 58 54 20 estname TEXT
1e70: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea0: 20 61 75 74 68 6f 72 20 20 20 20 20 20 54 45 58 author TEX
1eb0: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ee0: 20 20 20 6f 77 6e 65 72 20 20 20 20 20 20 20 54 owner T
1ef0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f20: 20 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e description
1f30: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
1f40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f60: 20 20 20 20 20 20 20 72 65 76 69 65 77 65 64 20 reviewed
1f70: 20 20 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 TIMESTAMP,.
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fa0: 20 20 20 69 74 65 72 61 74 65 64 20 20 20 20 54 iterated T
1fb0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fe0: 20 20 20 20 20 61 76 67 5f 72 75 6e 74 69 6d 65 avg_runtime
1ff0: 20 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 REAL,.
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2010: 20 20 20 20 20 20 20 20 20 20 20 20 61 76 67 5f avg_
2020: 64 69 73 6b 20 20 20 20 52 45 41 4c 2c 0a 20 20 disk REAL,.
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2050: 20 20 20 74 61 67 73 20 20 20 20 20 20 20 20 54 tags T
2060: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2090: 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f CONSTRAINT test_
20a0: 6d 65 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 20 meta_constraint
20b0: 55 4e 49 51 55 45 20 28 74 65 73 74 6e 61 6d 65 UNIQUE (testname
20c0: 29 29 3b 22 29 29 0a 20 20 20 20 20 28 70 72 69 ));")). (pri
20d0: 6e 74 20 22 43 75 72 72 65 6e 74 20 73 63 68 65 nt "Current sche
20e0: 6d 61 20 76 65 72 73 69 6f 6e 3a 20 22 20 6d 76 ma version: " mv
20f0: 65 72 20 22 20 63 75 72 72 65 6e 74 20 6d 65 67 er " current meg
2100: 61 74 65 73 74 20 76 65 72 73 69 6f 6e 3a 20 22 atest version: "
2110: 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f megatest-versio
2120: 6e 29 0a 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 n). (cond.
2130: 20 20 20 20 28 28 6e 6f 74 20 6d 76 65 72 29 0a ((not mver).
2140: 20 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 41 (print "A
2150: 64 64 69 6e 67 20 6d 65 67 61 74 65 73 74 2d 76 dding megatest-v
2160: 65 72 73 69 6f 6e 20 74 6f 20 6d 65 74 61 64 61 ersion to metada
2170: 74 61 22 29 20 3b 3b 20 4e 65 65 64 20 74 6f 20 ta") ;; Need to
2180: 72 65 63 72 65 61 74 65 20 74 68 65 20 74 61 62 recreate the tab
2190: 6c 65 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 le. (sqlit
21a0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
21b0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 ROP TABLE IF EXI
21c0: 53 54 53 20 6d 65 74 61 64 61 74 3b 22 29 0a 20 STS metadat;").
21d0: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
21e0: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
21f0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
2200: 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 28 69 XISTS metadat (i
2210: 64 20 49 4e 54 45 47 45 52 2c 20 76 61 72 20 54 d INTEGER, var T
2220: 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 EXT, val TEXT,.
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2250: 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 CONSTRAINT meta
2260: 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 dat_constraint U
2270: 4e 49 51 55 45 20 28 76 61 72 29 29 3b 22 29 0a NIQUE (var));").
2280: 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 2d 76 (db:set-v
2290: 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f ar db "MEGATEST_
22a0: 56 45 52 53 49 4f 4e 22 20 31 2e 31 37 29 0a 20 VERSION" 1.17).
22b0: 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 (patch-db)
22c0: 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 ). ((< mver
22d0: 20 31 2e 32 31 29 0a 20 20 20 20 20 20 20 28 73 1.21). (s
22e0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
22f0: 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 b "DROP TABLE IF
2300: 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 3b EXISTS metadat;
2310: 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 "). (sqlit
2320: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
2330: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e REATE TABLE IF N
2340: 4f 54 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 OT EXISTS metada
2350: 74 20 28 69 64 20 49 4e 54 45 47 45 52 2c 20 76 t (id INTEGER, v
2360: 61 72 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 ar TEXT, val TEX
2370: 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 T,.
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2390: 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 CONSTRAINT
23a0: 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 72 61 69 metadat_constrai
23b0: 6e 74 20 55 4e 49 51 55 45 20 28 76 61 72 29 29 nt UNIQUE (var))
23c0: 3b 22 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 ;"). (db:s
23d0: 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 et-var db "MEGAT
23e0: 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 EST_VERSION" 1.2
23f0: 31 29 20 3b 3b 20 73 65 74 20 62 65 66 6f 72 65 1) ;; set before
2400: 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 65 20 74 , just in case t
2410: 68 65 20 63 68 61 6e 67 65 73 20 61 72 65 20 61 he changes are a
2420: 6c 72 65 61 64 79 20 61 70 70 6c 69 65 64 0a 20 lready applied.
2430: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
2440: 78 65 63 75 74 65 20 64 62 20 74 65 73 74 2d 6d xecute db test-m
2450: 65 74 61 2d 64 65 66 29 0a 09 09 09 09 09 3b 28 eta-def)......;(
2460: 66 6f 72 2d 65 61 63 68 20 0a 09 09 09 09 09 3b for-each ......;
2470: 20 28 6c 61 6d 62 64 61 20 28 73 74 6d 74 29 0a (lambda (stmt).
2480: 09 09 09 09 09 3b 20 20 20 28 73 71 6c 69 74 65 .....; (sqlite
2490: 33 3a 65 78 65 63 75 74 65 20 64 62 20 73 74 6d 3:execute db stm
24a0: 74 29 29 0a 09 09 09 09 09 3b 20 28 6c 69 73 74 t))......; (list
24b0: 20 0a 09 09 09 09 09 3b 20 20 22 41 4c 54 45 52 ......; "ALTER
24c0: 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 TABLE tests ADD
24d0: 20 43 4f 4c 55 4d 4e 20 66 69 72 73 74 5f 65 72 COLUMN first_er
24e0: 72 20 54 45 58 54 3b 22 0a 09 09 09 09 09 3b 20 r TEXT;"......;
24f0: 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 "ALTER TABLE te
2500: 73 74 73 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66 sts ADD COLUMN f
2510: 69 72 73 74 5f 77 61 72 6e 20 54 45 58 54 3b 22 irst_warn TEXT;"
2520: 0a 09 09 09 09 09 3b 20 20 29 29 0a 20 20 20 20 ......; )).
2530: 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 0a 20 (patch-db)).
2540: 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 31 2e ((< mver 1.
2550: 32 34 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 24). (db:s
2560: 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 et-var db "MEGAT
2570: 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 EST_VERSION" 1.2
2580: 34 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 4). (sqlit
2590: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
25a0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 ROP TABLE IF EXI
25b0: 53 54 53 20 74 65 73 74 5f 64 61 74 61 3b 22 29 STS test_data;")
25c0: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
25d0: 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 52 4f :execute db "DRO
25e0: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 P TABLE IF EXIST
25f0: 53 20 74 65 73 74 5f 6d 65 74 61 3b 22 29 0a 20 S test_meta;").
2600: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
2610: 78 65 63 75 74 65 20 64 62 20 74 65 73 74 2d 6d xecute db test-m
2620: 65 74 61 2d 64 65 66 29 0a 20 20 20 20 20 20 20 eta-def).
2630: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2640: 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c db "CREATE TABL
2650: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
2660: 74 65 73 74 5f 64 61 74 61 20 28 69 64 20 49 4e test_data (id IN
2670: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
2680: 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 Y,.
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26a0: 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 test_id INTEG
26b0: 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ER,.
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26d0: 20 20 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 category TEX
26e0: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 va
2710: 72 69 61 62 6c 65 20 54 45 58 54 2c 0a 09 20 20 riable TEXT,..
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2730: 20 20 20 20 20 20 76 61 6c 75 65 20 52 45 41 4c value REAL
2740: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2750: 20 20 20 20 20 20 20 20 20 20 20 65 78 70 65 63 expec
2760: 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 ted REAL,..
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2780: 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 20 20 tol REAL,.
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 69 uni
27b0: 74 73 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 ts TEXT,.
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27d0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 comment
27e0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
27f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2810: 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 45 status TEXT DE
2820: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2840: 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 CONST
2850: 52 41 49 4e 54 20 74 65 73 74 5f 64 61 74 61 20 RAINT test_data
2860: 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c UNIQUE (test_id,
2870: 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c category,variabl
2880: 65 29 29 3b 22 29 0a 20 20 20 20 20 20 20 28 70 e));"). (p
2890: 72 69 6e 74 20 22 57 41 52 4e 49 4e 47 3a 20 54 rint "WARNING: T
28a0: 61 62 6c 65 20 74 65 73 74 5f 64 61 74 61 20 61 able test_data a
28b0: 6e 64 20 74 65 73 74 5f 6d 65 74 61 20 77 68 65 nd test_meta whe
28c0: 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 50 6c re recreated. Pl
28d0: 65 61 73 65 20 64 6f 20 6d 65 67 61 74 65 73 74 ease do megatest
28e0: 20 2d 75 70 64 61 74 65 2d 6d 65 74 61 22 29 0a -update-meta").
28f0: 20 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 (patch-db
2900: 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 )). ((< mve
2910: 72 20 31 2e 32 37 29 0a 20 20 20 20 20 20 20 28 r 1.27). (
2920: 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d db:set-var db "M
2930: 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 EGATEST_VERSION"
2940: 20 31 2e 32 37 29 0a 20 20 20 20 20 20 20 28 73 1.27). (s
2950: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
2960: 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 b "ALTER TABLE t
2970: 65 73 74 5f 64 61 74 61 20 41 44 44 20 43 4f 4c est_data ADD COL
2980: 55 4d 4e 20 74 79 70 65 20 54 45 58 54 20 44 45 UMN type TEXT DE
2990: 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 20 FAULT '';").
29a0: 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 0a 20 (patch-db)).
29b0: 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 31 2e ((< mver 1.
29c0: 32 39 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 29). (db:s
29d0: 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 et-var db "MEGAT
29e0: 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 EST_VERSION" 1.2
29f0: 39 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 9). (sqlit
2a00: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 41 e3:execute db "A
2a10: 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 5f LTER TABLE test_
2a20: 73 74 65 70 73 20 41 44 44 20 43 4f 4c 55 4d 4e steps ADD COLUMN
2a30: 20 6c 6f 67 66 69 6c 65 20 54 45 58 54 20 44 45 logfile TEXT DE
2a40: 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 20 FAULT '';").
2a50: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
2a60: 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 ute db "ALTER TA
2a70: 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 4f BLE tests ADD CO
2a80: 4c 55 4d 4e 20 73 68 6f 72 74 64 69 72 20 54 45 LUMN shortdir TE
2a90: 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 XT DEFAULT '';")
2aa0: 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 ). ((< mver
2ab0: 20 31 2e 33 36 29 0a 20 20 20 20 20 20 20 28 64 1.36). (d
2ac0: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
2ad0: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
2ae0: 31 2e 33 36 29 0a 20 20 20 20 20 20 20 28 73 71 1.36). (sq
2af0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2b00: 20 22 41 4c 54 45 52 20 54 41 42 4c 45 52 20 74 "ALTER TABLER t
2b10: 65 73 74 5f 6d 65 74 61 20 41 44 44 20 43 4f 4c est_meta ADD COL
2b20: 55 4d 4e 20 6a 6f 62 67 72 6f 75 70 20 54 45 58 UMN jobgroup TEX
2b30: 54 20 44 45 46 41 55 4c 54 20 27 64 65 66 61 75 T DEFAULT 'defau
2b40: 6c 74 27 3b 22 29 29 0a 20 20 20 20 20 20 28 28 lt';")). ((
2b50: 3c 20 6d 76 65 72 20 6d 65 67 61 74 65 73 74 2d < mver megatest-
2b60: 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 20 version).
2b70: 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 (db:set-var db "
2b80: 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e MEGATEST_VERSION
2b90: 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 69 " megatest-versi
2ba0: 6f 6e 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d on))))))..;;====
2bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2bf0: 3d 3d 0a 3b 3b 20 6d 65 74 61 20 67 65 74 20 61 ==.;; meta get a
2c00: 6e 64 20 73 65 74 20 76 61 72 73 0a 3b 3b 3d 3d nd set vars.;;==
2c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c50: 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 74 75 72 6e 73 ====..;; returns
2c60: 20 6e 75 6d 62 65 72 20 69 66 20 73 74 72 69 6e number if strin
2c70: 67 2d 3e 6e 75 6d 62 65 72 20 69 73 20 73 75 63 g->number is suc
2c80: 63 65 73 73 66 75 6c 2c 20 73 74 72 69 6e 67 20 cessful, string
2c90: 6f 74 68 65 72 77 69 73 65 0a 28 64 65 66 69 6e otherwise.(defin
2ca0: 65 20 28 64 62 3a 67 65 74 2d 76 61 72 20 64 62 e (db:get-var db
2cb0: 20 76 61 72 29 0a 20 20 28 6c 65 74 20 28 28 72 var). (let ((r
2cc0: 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c es #f)). (sql
2cd0: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
2ce0: 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 w. (lambda (
2cf0: 76 61 6c 29 0a 20 20 20 20 20 20 20 28 73 65 74 val). (set
2d00: 21 20 72 65 73 20 76 61 6c 29 29 0a 20 20 20 20 ! res val)).
2d10: 20 64 62 20 22 53 45 4c 45 43 54 20 76 61 6c 20 db "SELECT val
2d20: 46 52 4f 4d 20 6d 65 74 61 64 61 74 20 57 48 45 FROM metadat WHE
2d30: 52 45 20 76 61 72 3d 3f 3b 22 20 76 61 72 29 0a RE var=?;" var).
2d40: 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 3f (if (string?
2d50: 20 72 65 73 29 0a 09 28 6c 65 74 20 28 28 76 61 res)..(let ((va
2d60: 6c 6e 75 6d 20 28 73 74 72 69 6e 67 2d 3e 6e 75 lnum (string->nu
2d70: 6d 62 65 72 20 72 65 73 29 29 29 0a 09 20 20 28 mber res))).. (
2d80: 69 66 20 76 61 6c 6e 75 6d 20 76 61 6c 6e 75 6d if valnum valnum
2d90: 20 72 65 73 29 29 0a 09 72 65 73 29 29 29 0a 0a res))..res)))..
2da0: 28 64 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d (define (db:set-
2db0: 76 61 72 20 64 62 20 76 61 72 20 76 61 6c 29 0a var db var val).
2dc0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
2dd0: 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f 52 te db "INSERT OR
2de0: 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6d 65 REPLACE INTO me
2df0: 74 61 64 61 74 20 28 76 61 72 2c 76 61 6c 29 20 tadat (var,val)
2e00: 56 41 4c 55 45 53 20 28 3f 2c 3f 29 3b 22 20 76 VALUES (?,?);" v
2e10: 61 72 20 76 61 6c 29 29 0a 0a 3b 3b 20 75 73 65 ar val))..;; use
2e20: 20 61 20 67 6c 6f 62 61 6c 20 66 6f 72 20 73 6f a global for so
2e30: 6d 65 20 70 72 69 6d 69 74 69 76 65 20 63 61 63 me primitive cac
2e40: 68 69 6e 67 2c 20 69 74 20 69 73 20 6a 75 73 74 hing, it is just
2e50: 20 73 69 6c 6c 79 20 74 6f 20 72 65 2d 72 65 61 silly to re-rea
2e60: 64 20 74 68 65 20 64 62 20 0a 3b 3b 20 6f 76 65 d the db .;; ove
2e70: 72 20 61 6e 64 20 6f 76 65 72 20 61 67 61 69 6e r and over again
2e80: 20 66 6f 72 20 74 68 65 20 6b 65 79 73 20 73 69 for the keys si
2e90: 6e 63 65 20 74 68 65 79 20 6e 65 76 65 72 20 63 nce they never c
2ea0: 68 61 6e 67 65 0a 0a 28 64 65 66 69 6e 65 20 2a hange..(define *
2eb0: 64 62 2d 6b 65 79 73 2a 20 23 66 29 0a 0a 28 64 db-keys* #f)..(d
2ec0: 65 66 69 6e 65 20 28 64 62 2d 67 65 74 2d 6b 65 efine (db-get-ke
2ed0: 79 73 20 64 62 29 0a 20 20 28 69 66 20 2a 64 62 ys db). (if *db
2ee0: 2d 6b 65 79 73 2a 20 2a 64 62 2d 6b 65 79 73 2a -keys* *db-keys*
2ef0: 20 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 . (let ((r
2f00: 65 73 20 27 28 29 29 29 0a 09 28 73 71 6c 69 74 es '()))..(sqlit
2f10: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
2f20: 0a 09 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 .. (lambda (key
2f30: 6b 65 79 74 79 70 65 29 0a 09 20 20 20 28 73 65 keytype).. (se
2f40: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 t! res (cons (ve
2f50: 63 74 6f 72 20 6b 65 79 20 6b 65 79 74 79 70 65 ctor key keytype
2f60: 29 20 72 65 73 29 29 29 0a 09 20 64 62 0a 09 20 ) res))).. db..
2f70: 22 53 45 4c 45 43 54 20 66 69 65 6c 64 6e 61 6d "SELECT fieldnam
2f80: 65 2c 66 69 65 6c 64 74 79 70 65 20 46 52 4f 4d e,fieldtype FROM
2f90: 20 6b 65 79 73 20 4f 52 44 45 52 20 42 59 20 69 keys ORDER BY i
2fa0: 64 20 44 45 53 43 3b 22 29 0a 09 28 73 65 74 21 d DESC;")..(set!
2fb0: 20 2a 64 62 2d 6b 65 79 73 2a 20 72 65 73 29 0a *db-keys* res).
2fc0: 09 72 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 .res)))..(define
2fd0: 20 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 2d db:get-keys db-
2fe0: 67 65 74 2d 6b 65 79 73 29 0a 0a 28 64 65 66 69 get-keys)..(defi
2ff0: 6e 65 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 65 ne (db:get-value
3000: 2d 62 79 2d 68 65 61 64 65 72 20 72 6f 77 20 68 -by-header row h
3010: 65 61 64 65 72 20 66 69 65 6c 64 29 0a 20 20 3b eader field). ;
3020: 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 ; (debug:print 2
3030: 20 22 64 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 "db:get-value-b
3040: 79 2d 68 65 61 64 65 72 20 72 6f 77 3a 20 22 20 y-header row: "
3050: 72 6f 77 20 22 20 68 65 61 64 65 72 3a 20 22 20 row " header: "
3060: 68 65 61 64 65 72 20 22 20 66 69 65 6c 64 3a 20 header " field:
3070: 22 20 66 69 65 6c 64 29 0a 20 20 28 69 66 20 28 " field). (if (
3080: 6e 75 6c 6c 3f 20 68 65 61 64 65 72 29 20 23 66 null? header) #f
3090: 0a 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 . (let loop
30a0: 20 28 28 68 65 64 20 28 63 61 72 20 68 65 61 64 ((hed (car head
30b0: 65 72 29 29 0a 09 09 20 28 74 61 6c 20 28 63 64 er))... (tal (cd
30c0: 72 20 68 65 61 64 65 72 29 29 0a 09 09 20 28 6e r header))... (n
30d0: 20 20 20 30 29 29 0a 09 28 69 66 20 28 65 71 75 0))..(if (equ
30e0: 61 6c 3f 20 68 65 64 20 66 69 65 6c 64 29 0a 09 al? hed field)..
30f0: 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 (vector-ref
3100: 72 6f 77 20 6e 29 0a 09 20 20 20 20 28 69 66 20 row n).. (if
3110: 28 6e 75 6c 6c 3f 20 74 61 6c 29 20 23 66 20 28 (null? tal) #f (
3120: 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 loop (car tal)(c
3130: 64 72 20 74 61 6c 29 28 2b 20 6e 20 31 29 29 29 dr tal)(+ n 1)))
3140: 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d ))))..;;========
3150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
3190: 3b 20 20 52 20 55 20 4e 20 53 0a 3b 3b 3d 3d 3d ; R U N S.;;===
31a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
31e0: 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 72 75 ===..(define (ru
31f0: 6e 73 3a 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 ns:get-std-run-f
3200: 69 65 6c 64 73 20 6b 65 79 73 20 72 65 6d 66 69 ields keys remfi
3210: 65 6c 64 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 elds). (let* ((
3220: 68 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e header (appen
3230: 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 d (map key:get-f
3240: 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 ieldname keys)..
3250: 09 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 .. remfields)
3260: 29 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 ).. (keystr (
3270: 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 conc (keys->keys
3280: 74 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 tr keys) ","....
3290: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
32a0: 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 perse remfields
32b0: 22 2c 22 29 29 29 29 0a 20 20 20 20 28 6c 69 73 ",")))). (lis
32c0: 74 20 6b 65 79 73 74 72 20 68 65 61 64 65 72 29 t keystr header)
32d0: 29 29 0a 0a 3b 3b 20 57 41 53 20 64 62 2d 67 65 ))..;; WAS db-ge
32e0: 74 2d 72 75 6e 73 20 46 49 58 4d 45 20 49 4e 20 t-runs FIXME IN
32f0: 52 45 4d 41 49 4e 49 4e 47 20 43 4f 44 45 0a 3b REMAINING CODE.;
3300: 3b 0a 3b 3b 20 4d 45 52 47 45 20 54 48 49 53 20 ;.;; MERGE THIS
3310: 57 49 54 48 20 64 62 3a 67 65 74 2d 72 75 6e 73 WITH db:get-runs
3320: 2c 20 61 63 63 69 64 65 6e 74 6c 79 20 77 72 6f , accidently wro
3330: 74 65 20 69 74 20 74 77 69 63 65 0a 3b 3b 0a 3b te it twice.;;.;
3340: 3b 20 72 65 70 6c 61 63 65 20 68 65 61 64 65 72 ; replace header
3350: 20 61 6e 64 20 6b 65 79 73 74 72 20 77 69 74 68 and keystr with
3360: 20 61 20 63 61 6c 6c 20 74 6f 20 72 75 6e 73 3a a call to runs:
3370: 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 69 65 6c get-std-run-fiel
3380: 64 73 0a 3b 3b 0a 3b 3b 20 6b 65 79 70 61 74 74 ds.;;.;; keypatt
3390: 73 3a 20 28 20 28 4b 45 59 31 20 22 61 62 63 25 s: ( (KEY1 "abc%
33a0: 64 65 66 22 29 28 4b 45 59 32 20 22 25 22 29 20 def")(KEY2 "%")
33b0: 29 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 ).;;.(define (db
33c0: 3a 67 65 74 2d 72 75 6e 73 20 64 62 20 72 75 6e :get-runs db run
33d0: 70 61 74 74 20 63 6f 75 6e 74 20 6f 66 66 73 65 patt count offse
33e0: 74 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 6c t keypatts). (l
33f0: 65 74 2a 20 28 28 72 65 73 20 20 20 20 20 20 27 et* ((res '
3400: 28 29 29 0a 09 20 28 6b 65 79 73 20 20 20 20 20 ()).. (keys
3410: 20 28 64 62 2d 67 65 74 2d 6b 65 79 73 20 64 62 (db-get-keys db
3420: 29 29 0a 09 20 28 72 65 6d 66 69 65 6c 64 73 20 )).. (remfields
3430: 28 6c 69 73 74 20 22 69 64 22 20 22 72 75 6e 6e (list "id" "runn
3440: 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 73 74 ame" "state" "st
3450: 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 22 65 atus" "owner" "e
3460: 76 65 6e 74 5f 74 69 6d 65 22 29 29 0a 09 20 28 vent_time")).. (
3470: 68 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e header (appen
3480: 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 d (map key:get-f
3490: 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 ieldname keys)..
34a0: 09 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 .. remfields)
34b0: 29 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 ).. (keystr (
34c0: 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 conc (keys->keys
34d0: 74 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 tr keys) ","....
34e0: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
34f0: 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 perse remfields
3500: 22 2c 22 29 29 29 0a 09 20 28 71 72 79 73 74 72 ","))).. (qrystr
3510: 20 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 (conc "SELEC
3520: 54 20 22 20 6b 65 79 73 74 72 20 22 20 46 52 4f T " keystr " FRO
3530: 4d 20 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e M runs WHERE run
3540: 6e 61 6d 65 20 4c 49 4b 45 20 3f 20 22 0a 09 09 name LIKE ? "...
3550: 09 20 20 3b 3b 20 47 65 6e 65 72 61 74 65 3a 20 . ;; Generate:
3560: 22 20 41 4e 44 20 78 20 4c 49 4b 45 20 27 6b 65 " AND x LIKE 'ke
3570: 79 70 61 74 74 27 20 2e 2e 2e 22 0a 09 09 09 20 ypatt' ..."....
3580: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6b 65 79 70 (if (null? keyp
3590: 61 74 74 73 29 20 22 22 0a 09 09 09 20 20 20 20 atts) ""....
35a0: 20 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 0a (conc " AND ".
35b0: 09 09 09 09 20 20 20 20 28 73 74 72 69 6e 67 2d .... (string-
35c0: 6a 6f 69 6e 20 0a 09 09 09 09 20 20 20 20 20 28 join ..... (
35d0: 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 map (lambda (key
35e0: 70 61 74 74 29 0a 09 09 09 09 09 20 20 20 20 28 patt)...... (
35f0: 6c 65 74 20 28 28 6b 65 79 20 20 28 63 61 72 20 let ((key (car
3600: 6b 65 79 70 61 74 74 29 29 0a 09 09 09 09 09 09 keypatt)).......
3610: 20 20 28 70 61 74 74 20 28 63 61 64 72 20 6b 65 (patt (cadr ke
3620: 79 70 61 74 74 29 29 29 0a 09 09 09 09 09 20 20 ypatt)))......
3630: 20 20 20 20 28 63 6f 6e 63 20 6b 65 79 20 22 20 (conc key "
3640: 4c 49 4b 45 20 27 22 20 70 61 74 74 20 22 27 22 LIKE '" patt "'"
3650: 29 29 29 0a 09 09 09 09 09 20 20 6b 65 79 70 61 )))...... keypa
3660: 74 74 73 29 0a 09 09 09 09 20 20 20 20 20 22 20 tts)..... "
3670: 41 4e 44 20 22 29 29 29 0a 09 09 09 20 20 22 20 AND "))).... "
3680: 4f 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 ORDER BY event_t
3690: 69 6d 65 20 44 45 53 43 20 22 0a 09 09 09 20 20 ime DESC "....
36a0: 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 63 6f 75 (if (number? cou
36b0: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 28 63 6f nt).... (co
36c0: 6e 63 20 22 20 4c 49 4d 49 54 20 22 20 63 6f 75 nc " LIMIT " cou
36d0: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 22 22 29 nt).... "")
36e0: 0a 09 09 09 20 20 28 69 66 20 28 6e 75 6d 62 65 .... (if (numbe
36f0: 72 3f 20 6f 66 66 73 65 74 29 0a 09 09 09 20 20 r? offset)....
3700: 20 20 20 20 28 63 6f 6e 63 20 22 20 4f 46 46 53 (conc " OFFS
3710: 45 54 20 22 20 6f 66 66 73 65 74 29 0a 09 09 09 ET " offset)....
3720: 20 20 20 20 20 20 22 22 29 29 29 29 0a 20 20 20 "")))).
3730: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
3740: 22 64 62 3a 67 65 74 2d 72 75 6e 73 20 71 72 79 "db:get-runs qry
3750: 73 74 72 3a 20 22 20 71 72 79 73 74 72 20 22 5c str: " qrystr "\
3760: 6e 6b 65 79 70 61 74 74 73 3a 20 22 20 6b 65 79 nkeypatts: " key
3770: 70 61 74 74 73 20 22 5c 6e 20 20 6f 66 66 73 65 patts "\n offse
3780: 74 3a 20 22 20 6f 66 66 73 65 74 20 22 20 6c 69 t: " offset " li
3790: 6d 69 74 3a 20 22 20 63 6f 75 6e 74 29 0a 20 20 mit: " count).
37a0: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
37b0: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
37c0: 6d 62 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 mbda (a . x).
37d0: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 (set! res (c
37e0: 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 6f ons (apply vecto
37f0: 72 20 61 20 78 29 20 72 65 73 29 29 29 0a 20 20 r a x) res))).
3800: 20 20 20 64 62 0a 20 20 20 20 20 71 72 79 73 74 db. qryst
3810: 72 0a 20 20 20 20 20 72 75 6e 70 61 74 74 29 0a r. runpatt).
3820: 20 20 20 20 28 76 65 63 74 6f 72 20 68 65 61 64 (vector head
3830: 65 72 20 72 65 73 29 29 29 0a 0a 3b 3b 20 6a 75 er res)))..;; ju
3840: 73 74 20 67 65 74 20 63 6f 75 6e 74 20 6f 66 20 st get count of
3850: 72 75 6e 73 0a 28 64 65 66 69 6e 65 20 28 64 62 runs.(define (db
3860: 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 :get-num-runs db
3870: 20 72 75 6e 70 61 74 74 29 0a 20 20 28 6c 65 74 runpatt). (let
3880: 20 28 28 6e 75 6d 72 75 6e 73 20 30 29 29 0a 20 ((numruns 0)).
3890: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
38a0: 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 each-row . (
38b0: 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 lambda (count).
38c0: 20 20 20 20 20 20 28 73 65 74 21 20 6e 75 6d 72 (set! numr
38d0: 75 6e 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 uns count)).
38e0: 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 db. "SELECT
38f0: 20 43 4f 55 4e 54 28 69 64 29 20 46 52 4f 4d 20 COUNT(id) FROM
3900: 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e 6e 61 runs WHERE runna
3910: 6d 65 20 4c 49 4b 45 20 3f 3b 22 20 72 75 6e 70 me LIKE ?;" runp
3920: 61 74 74 29 0a 20 20 20 20 6e 75 6d 72 75 6e 73 att). numruns
3930: 29 29 0a 0a 0a 3b 3b 20 75 73 65 20 28 67 65 74 ))...;; use (get
3940: 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 -value-by-header
3950: 20 28 64 62 3a 67 65 74 2d 68 65 61 64 65 72 20 (db:get-header
3960: 72 75 6e 69 6e 66 6f 29 28 64 62 3a 67 65 74 2d runinfo)(db:get-
3970: 72 6f 77 20 72 75 6e 69 6e 66 6f 29 29 0a 28 64 row runinfo)).(d
3980: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 72 75 efine (db:get-ru
3990: 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 n-info db run-id
39a0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 ). (let* ((res
39b0: 20 20 20 20 20 23 66 29 0a 09 20 28 6b 65 79 73 #f).. (keys
39c0: 20 20 20 20 20 20 28 64 62 2d 67 65 74 2d 6b 65 (db-get-ke
39d0: 79 73 20 64 62 29 29 0a 09 20 28 72 65 6d 66 69 ys db)).. (remfi
39e0: 65 6c 64 73 20 28 6c 69 73 74 20 22 69 64 22 20 elds (list "id"
39f0: 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 "runname" "state
3a00: 22 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 " "status" "owne
3a10: 72 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 r" "event_time")
3a20: 29 0a 09 20 28 68 65 61 64 65 72 20 20 20 20 28 ).. (header (
3a30: 61 70 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a append (map key:
3a40: 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 get-fieldname ke
3a50: 79 73 29 0a 09 09 09 20 20 20 20 72 65 6d 66 69 ys).... remfi
3a60: 65 6c 64 73 29 29 0a 09 20 28 6b 65 79 73 74 72 elds)).. (keystr
3a70: 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 79 73 2d (conc (keys-
3a80: 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 20 22 2c >keystr keys) ",
3a90: 22 0a 09 09 09 20 20 28 73 74 72 69 6e 67 2d 69 ".... (string-i
3aa0: 6e 74 65 72 73 70 65 72 73 65 20 72 65 6d 66 69 ntersperse remfi
3ab0: 65 6c 64 73 20 22 2c 22 29 29 29 29 0a 20 20 20 elds ",")))).
3ac0: 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ;; (debug:print
3ad0: 20 30 20 22 64 62 3a 67 65 74 2d 72 75 6e 2d 69 0 "db:get-run-i
3ae0: 6e 66 6f 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 nfo run-id: " ru
3af0: 6e 2d 69 64 20 22 20 68 65 61 64 65 72 3a 20 22 n-id " header: "
3b00: 20 68 65 61 64 65 72 20 22 20 6b 65 79 73 74 72 header " keystr
3b10: 3a 20 22 20 6b 65 79 73 74 72 29 0a 20 20 20 20 : " keystr).
3b20: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
3b30: 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 h-row. (lamb
3b40: 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 20 20 da (a . x).
3b50: 20 20 28 73 65 74 21 20 72 65 73 20 28 61 70 70 (set! res (app
3b60: 6c 79 20 76 65 63 74 6f 72 20 61 20 78 29 29 29 ly vector a x)))
3b70: 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 28 63 . db. (c
3b80: 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 6b 65 onc "SELECT " ke
3b90: 79 73 74 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 ystr " FROM runs
3ba0: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 0a 20 WHERE id=?;").
3bb0: 20 20 20 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 run-id).
3bc0: 28 76 65 63 74 6f 72 20 68 65 61 64 65 72 20 72 (vector header r
3bd0: 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 es)))..(define (
3be0: 64 62 3a 73 65 74 2d 63 6f 6d 6d 65 6e 74 2d 66 db:set-comment-f
3bf0: 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 or-run db run-id
3c00: 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 73 71 6c comment). (sql
3c10: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
3c20: 22 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 "UPDATE runs SET
3c30: 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 comment=? WHERE
3c40: 20 69 64 3d 3f 3b 22 20 63 6f 6d 6d 65 6e 74 20 id=?;" comment
3c50: 72 75 6e 2d 69 64 29 29 0a 0a 3b 3b 20 64 6f 65 run-id))..;; doe
3c60: 73 20 6e 6f 74 20 28 6f 62 76 69 6f 75 73 6c 79 s not (obviously
3c70: 21 29 20 72 65 6d 6f 76 65 64 20 64 65 70 65 6e !) removed depen
3c80: 64 65 6e 74 20 64 61 74 61 2e 20 0a 28 64 65 66 dent data. .(def
3c90: 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 72 ine (db:delete-r
3ca0: 75 6e 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 un db run-id).
3cb0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
3cc0: 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d db "DELETE FROM
3cd0: 20 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f runs WHERE id=?
3ce0: 3b 22 20 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 ;" run-id))..(de
3cf0: 66 69 6e 65 20 28 64 62 3a 75 70 64 61 74 65 2d fine (db:update-
3d00: 72 75 6e 2d 65 76 65 6e 74 5f 74 69 6d 65 20 64 run-event_time d
3d10: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 71 6c b run-id). (sql
3d20: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
3d30: 22 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 "UPDATE runs SET
3d40: 20 65 76 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 event_time=strf
3d50: 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 time('%s','now')
3d60: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 72 75 WHERE id=?;" ru
3d70: 6e 2d 69 64 29 29 20 0a 0a 3b 3b 3d 3d 3d 3d 3d n-id)) ..;;=====
3d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3dc0: 3d 0a 3b 3b 20 20 54 20 45 20 53 20 54 20 53 0a =.;; T E S T S.
3dd0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
3de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3e10: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 73 74 61 ========..;; sta
3e20: 74 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 tes and statuses
3e30: 20 61 72 65 20 6c 69 73 74 73 2c 20 74 75 72 6e are lists, turn
3e40: 20 74 68 65 6d 20 69 6e 74 6f 20 28 22 50 41 53 them into ("PAS
3e50: 53 22 2c 22 46 41 49 4c 22 2e 2e 2e 29 20 61 6e S","FAIL"...) an
3e60: 64 20 75 73 65 20 4e 4f 54 20 49 4e 0a 3b 3b 20 d use NOT IN.;;
3e70: 69 2e 65 2e 20 74 68 65 73 65 20 6c 69 73 74 73 i.e. these lists
3e80: 20 64 65 66 69 6e 65 20 77 68 61 74 20 74 6f 20 define what to
3e90: 4e 4f 54 20 73 68 6f 77 2e 0a 3b 3b 20 73 74 61 NOT show..;; sta
3ea0: 74 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 tes and statuses
3eb0: 20 61 72 65 20 72 65 71 75 69 72 65 64 20 74 6f are required to
3ec0: 20 62 65 20 6c 69 73 74 73 2c 20 65 6d 70 74 79 be lists, empty
3ed0: 20 69 73 20 6f 6b 0a 28 64 65 66 69 6e 65 20 28 is ok.(define (
3ee0: 64 62 2d 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db-get-tests-for
3ef0: 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 -run db run-id t
3f00: 65 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 estpatt itempatt
3f10: 20 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 states statuses
3f20: 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 ). (let ((res '
3f30: 28 29 29 0a 09 28 73 74 61 74 65 73 2d 73 74 72 ())..(states-str
3f40: 20 20 20 20 28 63 6f 6e 63 20 22 28 27 22 20 28 (conc "('" (
3f50: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
3f60: 73 65 20 73 74 61 74 65 73 20 20 20 22 27 2c 27 se states "','
3f70: 22 29 20 22 27 29 22 29 29 0a 09 28 73 74 61 74 ") "')"))..(stat
3f80: 75 73 65 73 2d 73 74 72 20 20 28 63 6f 6e 63 20 uses-str (conc
3f90: 22 28 27 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 "('" (string-int
3fa0: 65 72 73 70 65 72 73 65 20 73 74 61 74 75 73 65 ersperse statuse
3fb0: 73 20 22 27 2c 27 22 29 20 22 27 29 22 29 29 0a s "','") "')")).
3fc0: 09 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a .). (sqlite3:
3fd0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 for-each-row .
3fe0: 20 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 (lambda (a .
3ff0: 62 29 20 3b 3b 20 69 64 20 72 75 6e 2d 69 64 20 b) ;; id run-id
4000: 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 testname state s
4010: 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 tatus event-time
4020: 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 host cpuload di
4030: 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e skfree uname run
4040: 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 dir item-path ru
4050: 6e 2d 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c n-duration final
4060: 2d 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 -logf comment).
4070: 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 (set! res
4080: 28 63 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 (cons (apply vec
4090: 74 6f 72 20 61 20 62 29 20 72 65 73 29 29 29 20 tor a b) res)))
40a0: 3b 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 ;; id run-id tes
40b0: 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 tname state stat
40c0: 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f us event-time ho
40d0: 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 st cpuload diskf
40e0: 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 ree uname rundir
40f0: 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 2d 64 item-path run-d
4100: 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f uration final-lo
4110: 67 66 20 63 6f 6d 6d 65 6e 74 29 20 72 65 73 29 gf comment) res)
4120: 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 )). db .
4130: 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 69 (conc "SELECT i
4140: 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d d,run_id,testnam
4150: 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 e,state,status,e
4160: 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 vent_time,host,c
4170: 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c puload,diskfree,
4180: 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 uname,rundir,ite
4190: 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 m_path,run_durat
41a0: 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 ion,final_logf,c
41b0: 6f 6d 6d 65 6e 74 20 22 0a 09 20 20 20 22 20 46 omment ".. " F
41c0: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
41d0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
41e0: 74 6e 61 6d 65 20 6c 69 6b 65 20 3f 20 41 4e 44 tname like ? AND
41f0: 20 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 item_path LIKE
4200: 3f 20 22 20 0a 09 20 20 20 22 20 41 4e 44 20 4e ? " .. " AND N
4210: 4f 54 20 28 73 74 61 74 65 20 69 6e 20 22 20 73 OT (state in " s
4220: 74 61 74 65 73 2d 73 74 72 20 22 20 41 4e 44 20 tates-str " AND
4230: 73 74 61 74 75 73 20 49 4e 20 22 20 73 74 61 74 status IN " stat
4240: 75 73 65 73 2d 73 74 72 20 22 29 20 22 0a 09 20 uses-str ") "..
4250: 20 20 3b 3b 20 22 20 4f 52 44 45 52 20 42 59 20 ;; " ORDER BY
4260: 69 64 20 44 45 53 43 3b 22 0a 09 20 20 20 22 20 id DESC;".. "
4270: 4f 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 ORDER BY event_t
4280: 69 6d 65 20 41 53 43 3b 22 20 3b 3b 20 50 4f 54 ime ASC;" ;; POT
4290: 45 4e 54 49 41 4c 20 49 53 53 55 45 21 20 43 48 ENTIAL ISSUE! CH
42a0: 45 43 4b 20 4d 45 21 20 44 6f 65 73 20 61 6e 79 ECK ME! Does any
42b0: 74 69 6e 67 20 64 65 70 65 6e 64 20 6f 6e 20 74 ting depend on t
42c0: 68 69 73 20 62 65 69 6e 67 20 73 6f 72 74 65 64 his being sorted
42d0: 20 62 79 20 69 64 3f 0a 09 20 20 20 29 0a 20 20 by id?.. ).
42e0: 20 20 20 72 75 6e 2d 69 64 0a 20 20 20 20 20 28 run-id. (
42f0: 69 66 20 74 65 73 74 70 61 74 74 20 74 65 73 74 if testpatt test
4300: 70 61 74 74 20 22 25 22 29 0a 20 20 20 20 20 28 patt "%"). (
4310: 69 66 20 69 74 65 6d 70 61 74 74 20 69 74 65 6d if itempatt item
4320: 70 61 74 74 20 22 25 22 29 29 0a 20 20 20 20 72 patt "%")). r
4330: 65 73 29 29 0a 0a 3b 3b 20 74 68 69 73 20 6f 6e es))..;; this on
4340: 65 20 69 73 20 61 20 62 69 74 20 62 72 6f 6b 65 e is a bit broke
4350: 6e 20 42 55 47 20 46 49 58 4d 45 0a 28 64 65 66 n BUG FIXME.(def
4360: 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 ine (db:delete-t
4370: 65 73 74 2d 73 74 65 70 2d 72 65 63 6f 72 64 73 est-step-records
4380: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d db run-id test-
4390: 6e 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20 name itemdat).
43a0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
43b0: 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d db "DELETE FROM
43c0: 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 45 52 test_steps WHER
43d0: 45 20 74 65 73 74 5f 69 64 20 69 6e 20 28 53 45 E test_id in (SE
43e0: 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 74 65 73 LECT id FROM tes
43f0: 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d ts WHERE run_id=
4400: 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f ? AND testname=?
4410: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f AND item_path=?
4420: 29 3b 22 20 0a 09 09 20 20 20 72 75 6e 2d 69 64 );" ... run-id
4430: 20 74 65 73 74 2d 6e 61 6d 65 20 28 69 74 65 6d test-name (item
4440: 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d -list->path item
4450: 64 61 74 29 29 29 0a 3b 3b 20 0a 28 64 65 66 69 dat))).;; .(defi
4460: 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 ne (db:delete-te
4470: 73 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 st-records db te
4480: 73 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 65 st-id). (sqlite
4490: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 45 3:execute db "DE
44a0: 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 5f 73 LETE FROM test_s
44b0: 74 65 70 73 20 57 48 45 52 45 20 74 65 73 74 5f teps WHERE test_
44c0: 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 29 0a id=?;" test-id).
44d0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
44e0: 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 te db "DELETE FR
44f0: 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 20 57 48 OM test_data WH
4500: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 ERE test_id=?;"
4510: 74 65 73 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 test-id). (sqli
4520: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
4530: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
4540: 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 74 s WHERE id=?;" t
4550: 65 73 74 2d 69 64 29 29 0a 0a 3b 3b 20 73 65 74 est-id))..;; set
4560: 20 74 65 73 74 73 20 77 69 74 68 20 73 74 61 74 tests with stat
4570: 65 20 63 75 72 72 73 74 61 74 65 20 61 6e 64 20 e currstate and
4580: 73 74 61 74 75 73 20 63 75 72 72 73 74 61 74 75 status currstatu
4590: 73 20 74 6f 20 6e 65 77 73 74 61 74 65 20 61 6e s to newstate an
45a0: 64 20 6e 65 77 73 74 61 74 75 73 0a 3b 3b 20 75 d newstatus.;; u
45b0: 73 65 20 63 75 72 72 73 74 61 74 65 20 3d 20 23 se currstate = #
45c0: 66 20 61 6e 64 20 6f 72 20 63 75 72 72 73 74 61 f and or currsta
45d0: 74 75 73 20 3d 20 23 66 20 74 6f 20 61 70 70 6c tus = #f to appl
45e0: 79 20 74 6f 20 61 6e 79 20 73 74 61 74 65 20 6f y to any state o
45f0: 72 20 73 74 61 74 75 73 20 72 65 73 70 65 63 74 r status respect
4600: 69 76 65 6c 79 0a 3b 3b 20 57 41 52 4e 49 4e 47 ively.;; WARNING
4610: 3a 20 53 51 4c 20 69 6e 6a 65 63 74 69 6f 6e 20 : SQL injection
4620: 72 69 73 6b 0a 28 64 65 66 69 6e 65 20 28 64 62 risk.(define (db
4630: 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 65 :set-tests-state
4640: 2d 73 74 61 74 75 73 20 64 62 20 72 75 6e 2d 69 -status db run-i
4650: 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 72 d testnames curr
4660: 73 74 61 74 65 20 63 75 72 72 73 74 61 74 75 73 state currstatus
4670: 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 newstate newsta
4680: 74 75 73 29 0a 20 20 28 66 6f 72 2d 65 61 63 68 tus). (for-each
4690: 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 6e 61 (lambda (testna
46a0: 6d 65 29 0a 09 20 20 20 20 20 20 28 6c 65 74 20 me).. (let
46b0: 28 28 71 72 79 20 28 63 6f 6e 63 20 22 55 50 44 ((qry (conc "UPD
46c0: 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 74 ATE tests SET st
46d0: 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 20 57 ate=?,status=? W
46e0: 48 45 52 45 20 22 0a 09 09 09 20 20 20 20 20 20 HERE "....
46f0: 20 28 69 66 20 63 75 72 72 73 74 61 74 65 20 20 (if currstate
4700: 28 63 6f 6e 63 20 22 73 74 61 74 65 3d 27 22 20 (conc "state='"
4710: 63 75 72 72 73 74 61 74 65 20 22 27 20 41 4e 44 currstate "' AND
4720: 20 22 29 20 22 22 29 0a 09 09 09 20 20 20 20 20 ") "")....
4730: 20 20 28 69 66 20 63 75 72 72 73 74 61 74 75 73 (if currstatus
4740: 20 28 63 6f 6e 63 20 22 73 74 61 74 75 73 3d 27 (conc "status='
4750: 22 20 63 75 72 72 73 74 61 74 75 73 20 22 27 20 " currstatus "'
4760: 41 4e 44 20 22 29 20 22 22 29 0a 09 09 09 20 20 AND ") "")....
4770: 20 20 20 20 20 22 20 72 75 6e 5f 69 64 3d 3f 20 " run_id=?
4780: 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 AND testname=? A
4790: 4e 44 20 4e 4f 54 20 28 69 74 65 6d 5f 70 61 74 ND NOT (item_pat
47a0: 68 3d 27 27 20 41 4e 44 20 74 65 73 74 6e 61 6d h='' AND testnam
47b0: 65 20 69 6e 20 28 53 45 4c 45 43 54 20 44 49 53 e in (SELECT DIS
47c0: 54 49 4e 43 54 20 74 65 73 74 6e 61 6d 65 20 46 TINCT testname F
47d0: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
47e0: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
47f0: 74 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 29 29 tem_path != ''))
4800: 3b 22 29 29 29 0a 09 09 3b 3b 28 64 65 62 75 67 ;")))...;;(debug
4810: 3a 70 72 69 6e 74 20 30 20 22 51 52 59 3a 20 22 :print 0 "QRY: "
4820: 20 71 72 79 29 0a 09 09 28 73 71 6c 69 74 65 33 qry)...(sqlite3
4830: 3a 65 78 65 63 75 74 65 20 64 62 20 71 72 79 20 :execute db qry
4840: 72 75 6e 2d 69 64 20 6e 65 77 73 74 61 74 65 20 run-id newstate
4850: 6e 65 77 73 74 61 74 75 73 20 74 65 73 74 6e 61 newstatus testna
4860: 6d 65 20 74 65 73 74 6e 61 6d 65 29 29 29 0a 09 me testname)))..
4870: 20 20 20 20 74 65 73 74 6e 61 6d 65 73 29 29 0a testnames)).
4880: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c .(define (db:del
4890: 65 74 65 2d 74 65 73 74 73 2d 69 6e 2d 73 74 61 ete-tests-in-sta
48a0: 74 65 20 64 62 20 72 75 6e 2d 69 64 20 73 74 61 te db run-id sta
48b0: 74 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 te). (sqlite3:e
48c0: 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 xecute db "DELET
48d0: 45 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 E FROM tests WHE
48e0: 52 45 20 73 74 61 74 65 3d 3f 20 41 4e 44 20 72 RE state=? AND r
48f0: 75 6e 5f 69 64 3d 3f 3b 22 20 73 74 61 74 65 20 un_id=?;" state
4900: 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e run-id))..(defin
4910: 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 e (db:test-set-s
4920: 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 69 tate-status-by-i
4930: 64 20 64 62 20 74 65 73 74 2d 69 64 20 6e 65 77 d db test-id new
4940: 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 20 state newstatus
4950: 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 newcomment). (i
4960: 66 20 6e 65 77 73 74 61 74 65 20 20 20 28 73 71 f newstate (sq
4970: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
4980: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 "UPDATE tests S
4990: 45 54 20 73 74 61 74 65 3d 3f 20 20 20 57 48 45 ET state=? WHE
49a0: 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 74 61 RE id=?;" newsta
49b0: 74 65 20 20 20 74 65 73 74 2d 69 64 29 29 0a 20 te test-id)).
49c0: 20 28 69 66 20 6e 65 77 73 74 61 74 75 73 20 20 (if newstatus
49d0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
49e0: 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 db "UPDATE test
49f0: 73 20 53 45 54 20 73 74 61 74 75 73 3d 3f 20 20 s SET status=?
4a00: 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 WHERE id=?;" new
4a10: 73 74 61 74 75 73 20 20 74 65 73 74 2d 69 64 29 status test-id)
4a20: 29 0a 20 20 28 69 66 20 6e 65 77 63 6f 6d 6d 65 ). (if newcomme
4a30: 6e 74 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 nt (sqlite3:exec
4a40: 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 ute db "UPDATE t
4a50: 65 73 74 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 ests SET comment
4a60: 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 =? WHERE id=?;"
4a70: 6e 65 77 63 6f 6d 6d 65 6e 74 20 74 65 73 74 2d newcomment test-
4a80: 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 id)))..(define (
4a90: 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d 74 65 73 db:get-count-tes
4aa0: 74 73 2d 72 75 6e 6e 69 6e 67 20 64 62 29 0a 20 ts-running db).
4ab0: 20 28 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a (let ((res 0)).
4ac0: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 (sqlite3:for
4ad0: 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 -each-row. (
4ae0: 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 lambda (count).
4af0: 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 (set! res
4b00: 63 6f 75 6e 74 29 29 0a 20 20 20 20 20 64 62 0a count)). db.
4b10: 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 "SELECT cou
4b20: 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 nt(id) FROM test
4b30: 73 20 57 48 45 52 45 20 73 74 61 74 65 20 3d 20 s WHERE state =
4b40: 27 52 55 4e 4e 49 4e 47 27 20 4f 52 20 73 74 61 'RUNNING' OR sta
4b50: 74 65 20 3d 20 27 4c 41 55 4e 43 48 45 44 27 20 te = 'LAUNCHED'
4b60: 4f 52 20 73 74 61 74 65 20 3d 20 27 52 45 4d 4f OR state = 'REMO
4b70: 54 45 48 4f 53 54 53 54 41 52 54 27 3b 22 29 0a TEHOSTSTART';").
4b80: 20 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 69 res))..(defi
4b90: 6e 65 20 28 64 62 3a 67 65 74 2d 63 6f 75 6e 74 ne (db:get-count
4ba0: 2d 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 2d 69 -tests-running-i
4bb0: 6e 2d 6a 6f 62 67 72 6f 75 70 20 64 62 20 6a 6f n-jobgroup db jo
4bc0: 62 67 72 6f 75 70 29 0a 20 20 28 69 66 20 28 6e bgroup). (if (n
4bd0: 6f 74 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 20 ot jobgroup).
4be0: 20 20 20 30 20 3b 3b 20 0a 20 20 20 20 20 20 28 0 ;; . (
4bf0: 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a 09 28 let ((res 0))..(
4c00: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
4c10: 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 64 61 20 28 -row.. (lambda (
4c20: 63 6f 75 6e 74 29 0a 09 20 20 20 28 73 65 74 21 count).. (set!
4c30: 20 72 65 73 20 63 6f 75 6e 74 29 29 0a 09 20 64 res count)).. d
4c40: 62 0a 09 20 22 53 45 4c 45 43 54 20 63 6f 75 6e b.. "SELECT coun
4c50: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 t(id) FROM tests
4c60: 20 57 48 45 52 45 20 73 74 61 74 65 20 3d 20 27 WHERE state = '
4c70: 52 55 4e 4e 49 4e 47 27 20 4f 52 20 73 74 61 74 RUNNING' OR stat
4c80: 65 20 3d 20 27 4c 41 55 4e 43 48 45 44 27 20 4f e = 'LAUNCHED' O
4c90: 52 20 73 74 61 74 65 20 3d 20 27 52 45 4d 4f 54 R state = 'REMOT
4ca0: 45 48 4f 53 54 53 54 41 52 54 27 0a 20 20 20 20 EHOSTSTART'.
4cb0: 20 20 20 20 20 20 20 20 20 41 4e 44 20 74 65 73 AND tes
4cc0: 74 6e 61 6d 65 20 69 6e 20 28 53 45 4c 45 43 54 tname in (SELECT
4cd0: 20 74 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 74 testname FROM t
4ce0: 65 73 74 5f 6d 65 74 61 20 57 48 45 52 45 20 6a est_meta WHERE j
4cf0: 6f 62 67 72 6f 75 70 3d 3f 3b 22 0a 09 20 6a 6f obgroup=?;".. jo
4d00: 62 67 72 6f 75 70 29 0a 09 72 65 73 29 29 29 0a bgroup)..res))).
4d10: 0a 3b 3b 20 64 6f 6e 65 20 77 69 74 68 20 72 75 .;; done with ru
4d20: 6e 20 77 68 65 6e 3a 0a 3b 3b 20 20 20 30 20 74 n when:.;; 0 t
4d30: 65 73 74 73 20 69 6e 20 4c 41 55 4e 43 48 45 44 ests in LAUNCHED
4d40: 2c 20 4e 4f 54 5f 53 54 41 52 54 45 44 2c 20 52 , NOT_STARTED, R
4d50: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 2c 20 EMOTEHOSTSTART,
4d60: 52 55 4e 4e 49 4e 47 0a 28 64 65 66 69 6e 65 20 RUNNING.(define
4d70: 28 64 62 3a 65 73 74 69 6d 61 74 65 64 2d 74 65 (db:estimated-te
4d80: 73 74 73 2d 72 65 6d 61 69 6e 69 6e 67 20 64 62 sts-remaining db
4d90: 20 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 20 run-id). (let
4da0: 28 28 72 65 73 20 30 29 29 0a 20 20 20 20 28 73 ((res 0)). (s
4db0: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
4dc0: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
4dd0: 20 28 63 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 (count).
4de0: 28 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 (set! res count)
4df0: 29 0a 20 20 20 20 20 64 62 20 3b 3b 20 4e 42 2f ). db ;; NB/
4e00: 2f 20 4b 49 4c 4c 52 45 51 20 6d 65 61 6e 73 20 / KILLREQ means
4e10: 74 68 65 20 6a 6f 62 73 20 69 73 20 73 74 69 6c the jobs is stil
4e20: 6c 20 70 72 6f 62 61 62 6c 79 20 72 75 6e 6e 69 l probably runni
4e30: 6e 67 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 ng. "SELECT
4e40: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
4e50: 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 ests WHERE state
4e60: 20 69 6e 20 28 27 4c 41 55 4e 43 48 45 44 27 2c in ('LAUNCHED',
4e70: 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 27 52 'NOT_STARTED','R
4e80: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 2c EMOTEHOSTSTART',
4e90: 27 52 55 4e 4e 49 4e 47 27 2c 27 4b 49 4c 4c 52 'RUNNING','KILLR
4ea0: 45 51 27 29 20 41 4e 44 20 72 75 6e 5f 69 64 3d EQ') AND run_id=
4eb0: 3f 3b 22 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 ?;" run-id).
4ec0: 72 65 73 29 29 0a 0a 3b 3b 20 4e 42 2f 2f 20 53 res))..;; NB// S
4ed0: 79 6e 63 20 74 68 69 73 20 77 69 74 68 20 72 75 ync this with ru
4ee0: 6e 73 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f ns:get-test-info
4ef0: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
4f00: 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 -test-info db ru
4f10: 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 74 n-id testname it
4f20: 65 6d 2d 70 61 74 68 29 0a 20 20 28 6c 65 74 20 em-path). (let
4f30: 28 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 ((res #f)). (
4f40: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
4f50: 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 -row. (lambd
4f60: 61 20 28 69 64 20 72 75 6e 2d 69 64 20 74 65 73 a (id run-id tes
4f70: 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 tname state stat
4f80: 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f us event-time ho
4f90: 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 st cpuload diskf
4fa0: 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 ree uname rundir
4fb0: 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 item-path run_d
4fc0: 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f uration final_lo
4fd0: 67 66 20 63 6f 6d 6d 65 6e 74 20 29 0a 20 20 20 gf comment ).
4fe0: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 76 (set! res (v
4ff0: 65 63 74 6f 72 20 69 64 20 72 75 6e 2d 69 64 20 ector id run-id
5000: 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 testname state s
5010: 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 tatus event-time
5020: 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 host cpuload di
5030: 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e skfree uname run
5040: 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 dir item-path ru
5050: 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c n_duration final
5060: 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 29 _logf comment ))
5070: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
5080: 22 53 45 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 "SELECT id,run_i
5090: 64 2c 74 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 d,testname,state
50a0: 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 ,status,event_ti
50b0: 6d 65 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c me,host,cpuload,
50c0: 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 diskfree,uname,r
50d0: 75 6e 64 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c undir,item_path,
50e0: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e run_duration,fin
50f0: 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 al_logf,comment
5100: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
5110: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 run_id=? AND te
5120: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 stname=? AND ite
5130: 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 20 20 20 m_path=?;".
5140: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5150: 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 20 20 72 item-path). r
5160: 65 73 29 29 0a 0a 3b 3b 20 47 65 74 20 74 65 73 es))..;; Get tes
5170: 74 20 64 61 74 61 20 75 73 69 6e 67 20 74 65 73 t data using tes
5180: 74 5f 69 64 0a 28 64 65 66 69 6e 65 20 28 64 62 t_id.(define (db
5190: 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 61 2d 62 :get-test-data-b
51a0: 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 29 y-id db test-id)
51b0: 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 23 66 . (let ((res #f
51c0: 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a )). (sqlite3:
51d0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 for-each-row.
51e0: 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 72 75 (lambda (id ru
51f0: 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 n-id testname st
5200: 61 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 ate status event
5210: 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f -time host cpulo
5220: 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d ad diskfree unam
5230: 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 e rundir item-pa
5240: 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 th run_duration
5250: 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 final_logf comme
5260: 6e 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 nt). (set!
5270: 20 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 20 res (vector id
5280: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5290: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
52a0: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
52b0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
52c0: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
52d0: 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f path run_duratio
52e0: 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d n final_logf com
52f0: 6d 65 6e 74 29 29 29 0a 20 20 20 20 20 64 62 20 ment))). db
5300: 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 . "SELECT id
5310: 2c 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 ,run_id,testname
5320: 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 ,state,status,ev
5330: 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 ent_time,host,cp
5340: 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 uload,diskfree,u
5350: 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d name,rundir,item
5360: 5f 70 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 _path,run_durati
5370: 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f on,final_logf,co
5380: 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 mment FROM tests
5390: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 WHERE id=?;".
53a0: 20 20 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 test-id).
53b0: 72 65 73 29 29 0a 0a 0a 28 64 65 66 69 6e 65 20 res))...(define
53c0: 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d (db:test-set-com
53d0: 6d 65 6e 74 20 64 62 20 72 75 6e 2d 69 64 20 74 ment db run-id t
53e0: 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 estname item-pat
53f0: 68 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 73 71 h comment). (sq
5400: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a 20 lite3:execute .
5410: 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 54 45 db . "UPDATE
5420: 20 74 65 73 74 73 20 53 45 54 20 63 6f 6d 6d 65 tests SET comme
5430: 6e 74 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 nt=? WHERE run_i
5440: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
5450: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
5460: 3d 3f 3b 22 0a 20 20 20 63 6f 6d 6d 65 6e 74 20 =?;". comment
5470: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5480: 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a 3b 3b 0a item-path))..;;.
5490: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
54a0: 2d 73 65 74 2d 72 75 6e 64 69 72 21 20 64 62 20 -set-rundir! db
54b0: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
54c0: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 64 69 72 item-path rundir
54d0: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
54e0: 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 cute . db .
54f0: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
5500: 54 20 72 75 6e 64 69 72 3d 3f 20 57 48 45 52 45 T rundir=? WHERE
5510: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 run_id=? AND te
5520: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 stname=? AND ite
5530: 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 20 72 75 m_path=?;". ru
5540: 6e 64 69 72 20 72 75 6e 2d 69 64 20 74 65 73 74 ndir run-id test
5550: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 name item-path))
5560: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
5570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 65 ==========.;; Te
55b0: 73 74 73 20 6d 65 74 61 20 64 61 74 61 0a 3b 3b sts meta data.;;
55c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5600: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 61 64 20 ======..;; read
5610: 74 68 65 20 72 65 63 6f 72 64 20 67 69 76 65 6e the record given
5620: 20 61 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 a testname.(def
5630: 69 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 ine (db:testmeta
5640: 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 -get-record db t
5650: 65 73 74 6e 61 6d 65 29 0a 20 20 28 6c 65 74 20 estname). (let
5660: 28 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 ((res #f)). (
5670: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
5680: 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 -row. (lambd
5690: 61 20 28 69 64 20 74 65 73 74 6e 61 6d 65 20 61 a (id testname a
56a0: 75 74 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 uthor owner desc
56b0: 72 69 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 ription reviewed
56c0: 20 69 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 iterated avg_ru
56d0: 6e 74 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 ntime avg_disk t
56e0: 61 67 73 29 0a 20 20 20 20 20 20 20 28 73 65 74 ags). (set
56f0: 21 20 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 ! res (vector id
5700: 20 74 65 73 74 6e 61 6d 65 20 61 75 74 68 6f 72 testname author
5710: 20 6f 77 6e 65 72 20 64 65 73 63 72 69 70 74 69 owner descripti
5720: 6f 6e 20 72 65 76 69 65 77 65 64 20 69 74 65 72 on reviewed iter
5730: 61 74 65 64 20 61 76 67 5f 72 75 6e 74 69 6d 65 ated avg_runtime
5740: 20 61 76 67 5f 64 69 73 6b 20 74 61 67 73 29 29 avg_disk tags))
5750: 29 0a 20 20 20 20 20 64 62 20 22 53 45 4c 45 43 ). db "SELEC
5760: 54 20 69 64 2c 74 65 73 74 6e 61 6d 65 2c 61 75 T id,testname,au
5770: 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 thor,owner,descr
5780: 69 70 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c iption,reviewed,
5790: 69 74 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e iterated,avg_run
57a0: 74 69 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 time,avg_disk,ta
57b0: 67 73 20 46 52 4f 4d 20 74 65 73 74 5f 6d 65 74 gs FROM test_met
57c0: 61 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 a WHERE testname
57d0: 3d 3f 3b 22 0a 20 20 20 20 20 74 65 73 74 6e 61 =?;". testna
57e0: 6d 65 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b me). res))..;
57f0: 3b 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 72 ; create a new r
5800: 65 63 6f 72 64 20 66 6f 72 20 61 20 67 69 76 65 ecord for a give
5810: 6e 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 n testname.(defi
5820: 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d ne (db:testmeta-
5830: 61 64 64 2d 72 65 63 6f 72 64 20 64 62 20 74 65 add-record db te
5840: 73 74 6e 61 6d 65 29 0a 20 20 28 73 71 6c 69 74 stname). (sqlit
5850: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 e3:execute db "I
5860: 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 NSERT OR IGNORE
5870: 49 4e 54 4f 20 74 65 73 74 5f 6d 65 74 61 20 28 INTO test_meta (
5880: 74 65 73 74 6e 61 6d 65 2c 61 75 74 68 6f 72 2c testname,author,
5890: 6f 77 6e 65 72 2c 64 65 73 63 72 69 70 74 69 6f owner,descriptio
58a0: 6e 2c 72 65 76 69 65 77 65 64 2c 69 74 65 72 61 n,reviewed,itera
58b0: 74 65 64 2c 61 76 67 5f 72 75 6e 74 69 6d 65 2c ted,avg_runtime,
58c0: 61 76 67 5f 64 69 73 6b 2c 74 61 67 73 29 20 56 avg_disk,tags) V
58d0: 41 4c 55 45 53 20 28 3f 2c 27 27 2c 27 27 2c 27 ALUES (?,'','','
58e0: 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 ','','','','',''
58f0: 29 3b 22 20 74 65 73 74 6e 61 6d 65 29 29 0a 0a );" testname))..
5900: 3b 3b 20 75 70 64 61 74 65 20 6f 6e 65 20 6f 66 ;; update one of
5910: 20 74 68 65 20 74 65 73 74 6d 65 74 61 20 66 69 the testmeta fi
5920: 65 6c 64 73 0a 28 64 65 66 69 6e 65 20 28 64 62 elds.(define (db
5930: 3a 74 65 73 74 6d 65 74 61 2d 75 70 64 61 74 65 :testmeta-update
5940: 2d 66 69 65 6c 64 20 64 62 20 74 65 73 74 6e 61 -field db testna
5950: 6d 65 20 66 69 65 6c 64 20 76 61 6c 75 65 29 0a me field value).
5960: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
5970: 74 65 20 64 62 20 28 63 6f 6e 63 20 22 55 50 44 te db (conc "UPD
5980: 41 54 45 20 74 65 73 74 5f 6d 65 74 61 20 53 45 ATE test_meta SE
5990: 54 20 22 20 66 69 65 6c 64 20 22 3d 3f 20 57 48 T " field "=? WH
59a0: 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 3b 22 ERE testname=?;"
59b0: 29 20 76 61 6c 75 65 20 74 65 73 74 6e 61 6d 65 ) value testname
59c0: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
59d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
59e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
59f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
5a10: 54 20 45 20 53 20 54 20 20 20 44 20 41 20 54 20 T E S T D A T
5a20: 41 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d A .;;===========
5a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5a40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 ===========..(de
5a70: 66 69 6e 65 20 28 64 62 3a 63 73 76 2d 3e 74 65 fine (db:csv->te
5a80: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
5a90: 69 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 64 id csvdata). (d
5aa0: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 74 65 ebug:print 4 "te
5ab0: 73 74 2d 69 64 20 22 20 74 65 73 74 2d 69 64 20 st-id " test-id
5ac0: 22 2c 20 63 73 76 64 61 74 61 3a 20 22 20 63 73 ", csvdata: " cs
5ad0: 76 64 61 74 61 29 0a 20 20 28 6c 65 74 20 28 28 vdata). (let ((
5ae0: 63 73 76 6c 69 73 74 20 28 63 73 76 2d 3e 6c 69 csvlist (csv->li
5af0: 73 74 20 28 6d 61 6b 65 2d 63 73 76 2d 72 65 61 st (make-csv-rea
5b00: 64 65 72 0a 09 09 09 20 20 20 20 20 28 6f 70 65 der.... (ope
5b10: 6e 2d 69 6e 70 75 74 2d 73 74 72 69 6e 67 20 63 n-input-string c
5b20: 73 76 64 61 74 61 29 0a 09 09 09 20 20 20 20 20 svdata)....
5b30: 27 28 28 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 '((strip-leading
5b40: 2d 77 68 69 74 65 73 70 61 63 65 3f 20 23 74 29 -whitespace? #t)
5b50: 0a 09 09 09 20 20 20 20 20 20 20 28 73 74 72 69 .... (stri
5b60: 70 2d 74 72 61 69 6c 69 6e 67 2d 77 68 69 74 65 p-trailing-white
5b70: 73 70 61 63 65 3f 20 23 74 29 29 20 29 29 29 29 space? #t)) ))))
5b80: 20 3b 3b 20 28 63 73 76 2d 3e 6c 69 73 74 20 63 ;; (csv->list c
5b90: 73 76 64 61 74 61 29 29 29 0a 20 20 20 20 28 66 svdata))). (f
5ba0: 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 6c or-each . (l
5bb0: 61 6d 62 64 61 20 28 63 73 76 72 6f 77 29 0a 20 ambda (csvrow).
5bc0: 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 61 (let* ((pa
5bd0: 64 64 65 64 2d 72 6f 77 20 20 28 74 61 6b 65 20 dded-row (take
5be0: 28 61 70 70 65 6e 64 20 63 73 76 72 6f 77 20 28 (append csvrow (
5bf0: 6c 69 73 74 20 23 66 20 23 66 20 23 66 20 23 66 list #f #f #f #f
5c00: 20 23 66 20 23 66 20 23 66 20 23 66 29 29 20 38 #f #f #f #f)) 8
5c10: 29 29 0a 09 20 20 20 20 20 20 28 63 61 74 65 67 )).. (categ
5c20: 6f 72 79 20 20 20 20 28 6c 69 73 74 2d 72 65 66 ory (list-ref
5c30: 20 70 61 64 64 65 64 2d 72 6f 77 20 30 29 29 0a padded-row 0)).
5c40: 09 20 20 20 20 20 20 28 76 61 72 69 61 62 6c 65 . (variable
5c50: 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 (list-ref pa
5c60: 64 64 65 64 2d 72 6f 77 20 31 29 29 0a 09 20 20 dded-row 1))..
5c70: 20 20 20 20 28 76 61 6c 75 65 20 20 20 20 20 20 (value
5c80: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 (any->number-if
5c90: 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d -possible (list-
5ca0: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 32 ref padded-row 2
5cb0: 29 29 29 0a 09 20 20 20 20 20 20 28 65 78 70 65 ))).. (expe
5cc0: 63 74 65 64 20 20 20 20 28 61 6e 79 2d 3e 6e 75 cted (any->nu
5cd0: 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 mber-if-possible
5ce0: 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 (list-ref padde
5cf0: 64 2d 72 6f 77 20 33 29 29 29 0a 09 20 20 20 20 d-row 3)))..
5d00: 20 20 28 74 6f 6c 20 20 20 20 20 20 20 20 20 28 (tol (
5d10: 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 any->number-if-p
5d20: 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d 72 65 ossible (list-re
5d30: 66 20 70 61 64 64 65 64 2d 72 6f 77 20 34 29 29 f padded-row 4))
5d40: 29 20 3b 3b 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c ) ;; >, <, >=, <
5d50: 3d 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 0a 09 =, or a number..
5d60: 20 20 20 20 20 20 28 75 6e 69 74 73 20 20 20 20 (units
5d70: 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 (list-ref pad
5d80: 64 65 64 2d 72 6f 77 20 35 29 29 0a 09 20 20 20 ded-row 5))..
5d90: 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 20 20 20 (comment
5da0: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
5db0: 2d 72 6f 77 20 36 29 29 0a 09 20 20 20 20 20 20 -row 6))..
5dc0: 28 73 74 61 74 75 73 20 20 20 20 20 20 28 6c 65 (status (le
5dd0: 74 20 28 28 73 20 28 6c 69 73 74 2d 72 65 66 20 t ((s (list-ref
5de0: 70 61 64 64 65 64 2d 72 6f 77 20 37 29 29 29 0a padded-row 7))).
5df0: 09 09 09 20 20 20 20 20 28 69 66 20 28 61 6e 64 ... (if (and
5e00: 20 28 73 74 72 69 6e 67 3f 20 73 29 28 6f 72 20 (string? s)(or
5e10: 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 (string-match (r
5e20: 65 67 65 78 70 20 22 5e 5c 5c 73 2a 24 22 29 20 egexp "^\\s*$")
5e30: 73 29 0a 09 09 09 09 09 09 20 20 20 20 20 28 73 s)....... (s
5e40: 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 tring-match (reg
5e50: 65 78 70 20 22 5e 6e 2f 61 24 22 29 20 73 29 29 exp "^n/a$") s))
5e60: 29 0a 09 09 09 09 20 23 66 0a 09 09 09 09 20 73 )..... #f..... s
5e70: 29 29 29 29 20 3b 3b 20 69 66 20 73 70 65 63 69 )))) ;; if speci
5e80: 66 69 65 64 20 6f 6e 20 74 68 65 20 69 6e 70 75 fied on the inpu
5e90: 74 20 74 68 65 6e 20 75 73 65 2c 20 65 6c 73 65 t then use, else
5ea0: 20 63 61 6c 63 75 6c 61 74 65 0a 09 20 3b 3b 20 calculate.. ;;
5eb0: 6c 6f 6f 6b 20 75 70 20 65 78 70 65 63 74 65 64 look up expected
5ec0: 2c 74 6f 6c 2c 75 6e 69 74 73 20 66 72 6f 6d 20 ,tol,units from
5ed0: 70 72 65 76 69 6f 75 73 20 62 65 73 74 20 66 69 previous best fi
5ee0: 74 20 74 65 73 74 20 69 66 20 74 68 65 79 20 61 t test if they a
5ef0: 72 65 20 61 6c 6c 20 65 69 74 68 65 72 20 23 66 re all either #f
5f00: 20 6f 72 20 27 27 0a 09 20 28 64 65 62 75 67 3a or ''.. (debug:
5f10: 70 72 69 6e 74 20 34 20 22 42 45 46 4f 52 45 3a print 4 "BEFORE:
5f20: 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 category: " cat
5f30: 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 egory " variable
5f40: 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 : " variable " v
5f50: 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 alue: " value ..
5f60: 09 20 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 . ", expect
5f70: 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 ed: " expected "
5f80: 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e tol: " tol " un
5f90: 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 its: " units " s
5fa0: 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 tatus: " status
5fb0: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
5fc0: 6d 65 6e 74 29 0a 0a 09 20 28 69 66 20 28 61 6e ment)... (if (an
5fd0: 64 20 28 6f 72 20 28 6e 6f 74 20 65 78 70 65 63 d (or (not expec
5fe0: 74 65 64 29 28 65 71 75 61 6c 3f 20 65 78 70 65 ted)(equal? expe
5ff0: 63 74 65 64 20 22 22 29 29 0a 09 09 20 20 28 6f cted ""))... (o
6000: 72 20 28 6e 6f 74 20 74 6f 6c 29 20 20 20 20 20 r (not tol)
6010: 28 65 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 (equal? expected
6020: 20 22 22 29 29 0a 09 09 20 20 28 6f 72 20 28 6e ""))... (or (n
6030: 6f 74 20 75 6e 69 74 73 29 20 20 20 28 65 71 75 ot units) (equ
6040: 61 6c 3f 20 65 78 70 65 63 74 65 64 20 22 22 29 al? expected "")
6050: 29 29 0a 09 20 20 20 20 20 28 6c 65 74 2d 76 61 )).. (let-va
6060: 6c 75 65 73 20 28 28 28 6e 65 77 2d 65 78 70 65 lues (((new-expe
6070: 63 74 65 64 20 6e 65 77 2d 74 6f 6c 20 6e 65 77 cted new-tol new
6080: 2d 75 6e 69 74 73 29 28 64 62 3a 67 65 74 2d 70 -units)(db:get-p
6090: 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 rev-tol-for-test
60a0: 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 74 65 db test-id cate
60b0: 67 6f 72 79 20 76 61 72 69 61 62 6c 65 29 29 29 gory variable)))
60c0: 0a 09 09 09 20 28 73 65 74 21 20 65 78 70 65 63 .... (set! expec
60d0: 74 65 64 20 6e 65 77 2d 65 78 70 65 63 74 65 64 ted new-expected
60e0: 29 0a 09 09 09 20 28 73 65 74 21 20 74 6f 6c 20 ).... (set! tol
60f0: 20 20 20 20 20 6e 65 77 2d 74 6f 6c 29 0a 09 09 new-tol)...
6100: 09 20 28 73 65 74 21 20 75 6e 69 74 73 20 20 20 . (set! units
6110: 20 6e 65 77 2d 75 6e 69 74 73 29 29 29 0a 0a 09 new-units)))...
6120: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
6130: 22 41 46 54 45 52 3a 20 20 63 61 74 65 67 6f 72 "AFTER: categor
6140: 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 20 y: " category "
6150: 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 69 variable: " vari
6160: 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 20 able " value: "
6170: 76 61 6c 75 65 20 0a 09 09 20 20 20 20 20 20 22 value ... "
6180: 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 65 78 , expected: " ex
6190: 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 pected " tol: "
61a0: 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 75 tol " units: " u
61b0: 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a 20 22 nits " status: "
61c0: 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e status " commen
61d0: 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 t: " comment)..
61e0: 3b 3b 20 63 61 6c 63 75 6c 61 74 65 20 73 74 61 ;; calculate sta
61f0: 74 75 73 20 69 66 20 4e 4f 54 20 73 70 65 63 69 tus if NOT speci
6200: 66 69 65 64 0a 09 20 28 69 66 20 28 61 6e 64 20 fied.. (if (and
6210: 28 6e 6f 74 20 73 74 61 74 75 73 29 28 6e 75 6d (not status)(num
6220: 62 65 72 3f 20 65 78 70 65 63 74 65 64 29 28 6e ber? expected)(n
6230: 75 6d 62 65 72 3f 20 76 61 6c 75 65 29 29 20 3b umber? value)) ;
6240: 3b 20 6e 65 65 64 20 65 78 70 65 63 74 65 64 20 ; need expected
6250: 61 6e 64 20 76 61 6c 75 65 20 74 6f 20 62 65 20 and value to be
6260: 6e 75 6d 62 65 72 73 0a 09 20 20 20 20 20 28 69 numbers.. (i
6270: 66 20 28 6e 75 6d 62 65 72 3f 20 74 6f 6c 29 20 f (number? tol)
6280: 3b 3b 20 69 66 20 74 6f 6c 20 69 73 20 61 20 6e ;; if tol is a n
6290: 75 6d 62 65 72 20 74 68 65 6e 20 77 65 20 64 6f umber then we do
62a0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 63 6f the standard co
62b0: 6d 70 61 72 69 73 6f 6e 0a 09 09 20 28 6c 65 74 mparison... (let
62c0: 2a 20 28 28 6d 61 78 2d 76 61 6c 20 28 2b 20 65 * ((max-val (+ e
62d0: 78 70 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 xpected tol))...
62e0: 09 28 6d 69 6e 2d 76 61 6c 20 28 2d 20 65 78 70 .(min-val (- exp
62f0: 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 28 ected tol))....(
6300: 72 65 73 75 6c 74 20 20 28 61 6e 64 20 28 3e 3d result (and (>=
6310: 20 20 76 61 6c 75 65 20 6d 69 6e 2d 76 61 6c 29 value min-val)
6320: 28 3c 3d 20 76 61 6c 75 65 20 6d 61 78 2d 76 61 (<= value max-va
6330: 6c 29 29 29 29 0a 09 09 20 20 20 28 64 65 62 75 l))))... (debu
6340: 67 3a 70 72 69 6e 74 20 34 20 22 6d 61 78 2d 76 g:print 4 "max-v
6350: 61 6c 3a 20 22 20 6d 61 78 2d 76 61 6c 20 22 20 al: " max-val "
6360: 6d 69 6e 2d 76 61 6c 3a 20 22 20 6d 69 6e 2d 76 min-val: " min-v
6370: 61 6c 20 22 20 72 65 73 75 6c 74 3a 20 22 20 72 al " result: " r
6380: 65 73 75 6c 74 29 0a 09 09 20 20 20 28 73 65 74 esult)... (set
6390: 21 20 73 74 61 74 75 73 20 28 69 66 20 72 65 73 ! status (if res
63a0: 75 6c 74 20 22 70 61 73 73 22 20 22 66 61 69 6c ult "pass" "fail
63b0: 22 29 29 29 0a 09 09 20 28 73 65 74 21 20 73 74 ")))... (set! st
63c0: 61 74 75 73 20 3b 3b 20 4e 42 2f 2f 20 6e 65 65 atus ;; NB// nee
63d0: 64 20 74 6f 20 61 73 73 65 73 73 20 65 61 63 68 d to assess each
63e0: 20 6f 6e 65 20 28 69 2e 65 2e 20 6e 6f 74 20 72 one (i.e. not r
63f0: 65 74 75 72 6e 20 6f 70 65 72 61 74 6f 72 20 73 eturn operator s
6400: 69 6e 63 65 20 6e 65 65 64 20 74 6f 20 61 63 74 ince need to act
6410: 20 69 66 20 6e 6f 74 20 76 61 6c 69 64 20 6f 70 if not valid op
6420: 2e 0a 09 09 20 20 20 20 20 20 20 28 63 61 73 65 .... (case
6430: 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c (string->symbol
6440: 20 74 6f 6c 29 20 3b 3b 20 74 6f 6c 20 73 68 6f tol) ;; tol sho
6450: 75 6c 64 20 62 65 20 3e 2c 20 3c 2c 20 3e 3d 2c uld be >, <, >=,
6460: 20 3c 3d 0a 09 09 09 20 28 28 3e 29 20 20 28 69 <=.... ((>) (i
6470: 66 20 28 3e 20 20 76 61 6c 75 65 20 65 78 70 65 f (> value expe
6480: 63 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 cted) "pass" "fa
6490: 69 6c 22 29 29 0a 09 09 09 20 28 28 3c 29 20 20 il")).... ((<)
64a0: 28 69 66 20 28 3c 20 20 76 61 6c 75 65 20 65 78 (if (< value ex
64b0: 70 65 63 74 65 64 29 20 22 70 61 73 73 22 20 22 pected) "pass" "
64c0: 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 3e 3d fail")).... ((>=
64d0: 29 20 28 69 66 20 28 3e 3d 20 76 61 6c 75 65 20 ) (if (>= value
64e0: 65 78 70 65 63 74 65 64 29 20 22 70 61 73 73 22 expected) "pass"
64f0: 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 "fail")).... ((
6500: 3c 3d 29 20 28 69 66 20 28 3c 3d 20 76 61 6c 75 <=) (if (<= valu
6510: 65 20 65 78 70 65 63 74 65 64 29 20 22 70 61 73 e expected) "pas
6520: 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 s" "fail"))....
6530: 28 65 6c 73 65 20 28 63 6f 6e 63 20 22 45 52 52 (else (conc "ERR
6540: 4f 52 3a 20 62 61 64 20 74 6f 6c 20 63 6f 6d 70 OR: bad tol comp
6550: 61 72 61 74 6f 72 20 22 20 74 6f 6c 29 29 29 29 arator " tol))))
6560: 29 29 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e )).. (debug:prin
6570: 74 20 34 20 22 41 46 54 45 52 32 3a 20 63 61 74 t 4 "AFTER2: cat
6580: 65 67 6f 72 79 3a 20 22 20 63 61 74 65 67 6f 72 egory: " categor
6590: 79 20 22 20 76 61 72 69 61 62 6c 65 3a 20 22 20 y " variable: "
65a0: 76 61 72 69 61 62 6c 65 20 22 20 76 61 6c 75 65 variable " value
65b0: 3a 20 22 20 76 61 6c 75 65 20 0a 09 09 20 20 20 : " value ...
65c0: 20 20 20 22 2c 20 65 78 70 65 63 74 65 64 3a 20 ", expected:
65d0: 22 20 65 78 70 65 63 74 65 64 20 22 20 74 6f 6c " expected " tol
65e0: 3a 20 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a : " tol " units:
65f0: 20 22 20 75 6e 69 74 73 20 22 20 73 74 61 74 75 " units " statu
6600: 73 3a 20 22 20 73 74 61 74 75 73 20 22 20 63 6f s: " status " co
6610: 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 mment: " comment
6620: 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ).. (sqlite3:exe
6630: 63 75 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 cute db "INSERT
6640: 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 OR REPLACE INTO
6650: 74 65 73 74 5f 64 61 74 61 20 28 74 65 73 74 5f test_data (test_
6660: 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 id,category,vari
6670: 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 70 65 63 able,value,expec
6680: 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f ted,tol,units,co
6690: 6d 6d 65 6e 74 2c 73 74 61 74 75 73 29 20 56 41 mment,status) VA
66a0: 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c LUES (?,?,?,?,?,
66b0: 3f 2c 3f 2c 3f 2c 3f 29 3b 22 0a 09 09 09 20 20 ?,?,?,?);"....
66c0: 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 test-id category
66d0: 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 variable value
66e0: 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 expected tol uni
66f0: 74 73 20 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 ts (if comment c
6700: 6f 6d 6d 65 6e 74 20 22 22 29 20 73 74 61 74 75 omment "") statu
6710: 73 29 29 29 0a 20 20 20 20 20 63 73 76 6c 69 73 s))). csvlis
6720: 74 29 29 29 0a 0a 3b 3b 20 67 65 74 20 61 20 6c t)))..;; get a l
6730: 69 73 74 20 6f 66 20 74 65 73 74 5f 64 61 74 61 ist of test_data
6740: 20 72 65 63 6f 72 64 73 20 6d 61 74 63 68 69 6e records matchin
6750: 67 20 63 61 74 65 67 6f 72 79 70 61 74 74 0a 28 g categorypatt.(
6760: 64 65 66 69 6e 65 20 28 64 62 3a 72 65 61 64 2d define (db:read-
6770: 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 test-data db tes
6780: 74 2d 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 t-id categorypat
6790: 74 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 t). (let ((res
67a0: 27 28 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 '())). (sqlit
67b0: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
67c0: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 . (lambda (i
67d0: 64 20 74 65 73 74 5f 69 64 20 63 61 74 65 67 6f d test_id catego
67e0: 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 ry variable valu
67f0: 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 e expected tol u
6800: 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 nits comment sta
6810: 74 75 73 29 0a 20 20 20 20 20 20 20 28 73 65 74 tus). (set
6820: 21 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 ! res (cons (vec
6830: 74 6f 72 20 69 64 20 74 65 73 74 5f 69 64 20 63 tor id test_id c
6840: 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 ategory variable
6850: 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 value expected
6860: 74 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e tol units commen
6870: 74 20 73 74 61 74 75 73 29 20 72 65 73 29 29 29 t status) res)))
6880: 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 . db. "S
6890: 45 4c 45 43 54 20 69 64 2c 74 65 73 74 5f 69 64 ELECT id,test_id
68a0: 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 ,category,variab
68b0: 6c 65 2c 76 61 6c 75 65 2c 65 78 70 65 63 74 65 le,value,expecte
68c0: 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f 6d 6d d,tol,units,comm
68d0: 65 6e 74 2c 73 74 61 74 75 73 20 46 52 4f 4d 20 ent,status FROM
68e0: 74 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 test_data WHERE
68f0: 74 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 63 61 test_id=? AND ca
6900: 74 65 67 6f 72 79 20 4c 49 4b 45 20 3f 20 4f 52 tegory LIKE ? OR
6910: 44 45 52 20 42 59 20 63 61 74 65 67 6f 72 79 2c DER BY category,
6920: 76 61 72 69 61 62 6c 65 3b 22 20 74 65 73 74 2d variable;" test-
6930: 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 id categorypatt)
6940: 0a 20 20 20 20 28 72 65 76 65 72 73 65 20 72 65 . (reverse re
6950: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 s)))..(define (d
6960: 62 3a 6c 6f 61 64 2d 74 65 73 74 2d 64 61 74 61 b:load-test-data
6970: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d db run-id test-
6980: 6e 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20 name itemdat).
6990: 28 6c 65 74 2a 20 28 28 69 74 65 6d 2d 70 61 74 (let* ((item-pat
69a0: 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 h (item-list->pa
69b0: 74 68 20 69 74 65 6d 64 61 74 29 29 0a 09 20 28 th itemdat)).. (
69c0: 74 65 73 74 64 61 74 20 28 64 62 3a 67 65 74 2d testdat (db:get-
69d0: 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e test-info db run
69e0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
69f0: 65 6d 2d 70 61 74 68 29 29 0a 09 20 28 74 65 73 em-path)).. (tes
6a00: 74 2d 69 64 20 28 69 66 20 74 65 73 74 64 61 74 t-id (if testdat
6a10: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 (db:test-get-id
6a20: 20 74 65 73 74 64 61 74 29 20 23 66 29 29 29 0a testdat) #f))).
6a30: 20 20 20 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 ;; (debug:pr
6a40: 69 6e 74 20 31 20 22 45 6e 74 65 72 20 72 65 63 int 1 "Enter rec
6a50: 6f 72 64 73 20 74 6f 20 69 6e 73 65 72 74 20 69 ords to insert i
6a60: 6e 20 74 68 65 20 74 65 73 74 5f 64 61 74 61 20 n the test_data
6a70: 74 61 62 6c 65 2c 20 73 65 76 65 6e 20 66 69 65 table, seven fie
6a80: 6c 64 73 2c 20 63 6f 6d 6d 61 20 73 65 70 61 72 lds, comma separ
6a90: 61 74 65 64 20 70 65 72 20 6c 69 6e 65 22 29 0a ated per line").
6aa0: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
6ab0: 20 34 20 22 69 74 65 6d 64 61 74 3a 20 22 20 69 4 "itemdat: " i
6ac0: 74 65 6d 64 61 74 20 22 2c 20 74 65 73 74 2d 6e temdat ", test-n
6ad0: 61 6d 65 3a 20 22 20 74 65 73 74 2d 6e 61 6d 65 ame: " test-name
6ae0: 20 22 2c 20 74 65 73 74 2d 69 64 3a 20 22 20 74 ", test-id: " t
6af0: 65 73 74 2d 69 64 29 0a 20 20 20 20 28 69 66 20 est-id). (if
6b00: 74 65 73 74 2d 69 64 0a 09 28 6c 65 74 20 6c 6f test-id..(let lo
6b10: 6f 70 20 28 28 6c 69 6e 20 28 72 65 61 64 2d 6c op ((lin (read-l
6b20: 69 6e 65 29 29 29 0a 09 20 20 28 69 66 20 28 6e ine))).. (if (n
6b30: 6f 74 20 28 65 6f 66 2d 6f 62 6a 65 63 74 3f 20 ot (eof-object?
6b40: 6c 69 6e 29 29 0a 09 20 20 20 20 20 20 28 62 65 lin)).. (be
6b50: 67 69 6e 0a 09 09 28 64 65 62 75 67 3a 70 72 69 gin...(debug:pri
6b60: 6e 74 20 34 20 6c 69 6e 29 0a 09 09 28 64 62 3a nt 4 lin)...(db:
6b70: 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 csv->test-data d
6b80: 62 20 74 65 73 74 2d 69 64 20 6c 69 6e 29 0a 09 b test-id lin)..
6b90: 09 28 6c 6f 6f 70 20 28 72 65 61 64 2d 6c 69 6e .(loop (read-lin
6ba0: 65 29 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 72 e)))))). ;; r
6bb0: 6f 6c 6c 20 75 70 20 74 68 65 20 63 75 72 72 65 oll up the curre
6bc0: 6e 74 20 72 65 73 75 6c 74 73 2e 0a 20 20 20 20 nt results..
6bd0: 28 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f (db:test-data-ro
6be0: 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 29 llup db test-id)
6bf0: 29 29 0a 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a 20 ))..;; WARNING:
6c00: 44 6f 20 4e 4f 54 20 63 61 6c 6c 20 74 68 69 73 Do NOT call this
6c10: 20 66 6f 72 20 74 68 65 20 70 61 72 65 6e 74 20 for the parent
6c20: 74 65 73 74 20 6f 6e 20 61 6e 20 69 74 65 72 61 test on an itera
6c30: 74 65 64 20 74 65 73 74 0a 3b 3b 20 52 6f 6c 6c ted test.;; Roll
6c40: 20 75 70 20 74 65 73 74 5f 64 61 74 61 20 70 61 up test_data pa
6c50: 73 73 2f 66 61 69 6c 20 72 65 73 75 6c 74 73 0a ss/fail results.
6c60: 3b 3b 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 74 ;; look at the t
6c70: 65 73 74 5f 64 61 74 61 20 73 74 61 74 75 73 20 est_data status
6c80: 66 69 65 6c 64 2c 20 0a 3b 3b 20 20 20 20 69 66 field, .;; if
6c90: 20 61 6c 6c 20 61 72 65 20 70 61 73 73 20 28 61 all are pass (a
6ca0: 6e 79 20 63 61 73 65 29 20 61 6e 64 20 74 68 65 ny case) and the
6cb0: 20 74 65 73 74 20 73 74 61 74 75 73 20 69 73 20 test status is
6cc0: 50 41 53 53 20 6f 72 20 4e 55 4c 4c 20 6f 72 20 PASS or NULL or
6cd0: 27 27 20 74 68 65 6e 20 73 65 74 20 74 65 73 74 '' then set test
6ce0: 20 73 74 61 74 75 73 20 74 6f 20 50 41 53 53 2e status to PASS.
6cf0: 0a 3b 3b 20 20 20 20 69 66 20 6f 6e 65 20 6f 72 .;; if one or
6d00: 20 6d 6f 72 65 20 61 72 65 20 66 61 69 6c 20 28 more are fail (
6d10: 61 6e 79 20 63 61 73 65 29 20 74 68 65 6e 20 73 any case) then s
6d20: 65 74 20 74 65 73 74 20 73 74 61 74 75 73 20 74 et test status t
6d30: 6f 20 50 41 53 53 2c 20 6e 6f 6e 20 22 70 61 73 o PASS, non "pas
6d40: 73 22 20 6f 72 20 22 66 61 69 6c 22 20 61 72 65 s" or "fail" are
6d50: 20 69 67 6e 6f 72 65 64 0a 28 64 65 66 69 6e 65 ignored.(define
6d60: 20 28 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 (db:test-data-r
6d70: 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 ollup db test-id
6d80: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
6d90: 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 cute . db .
6da0: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 0a 20 "UPDATE tests .
6db0: 20 20 20 20 20 53 45 54 20 66 61 69 6c 5f 63 6f SET fail_co
6dc0: 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e unt=(SELECT coun
6dd0: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 5f t(id) FROM test_
6de0: 64 61 74 61 20 57 48 45 52 45 20 74 65 73 74 5f data WHERE test_
6df0: 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 73 20 id=? AND status
6e00: 6c 69 6b 65 20 27 66 61 69 6c 27 29 2c 0a 20 20 like 'fail'),.
6e10: 20 20 20 20 20 20 20 20 70 61 73 73 5f 63 6f 75 pass_cou
6e20: 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 nt=(SELECT count
6e30: 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 5f 64 (id) FROM test_d
6e40: 61 74 61 20 57 48 45 52 45 20 74 65 73 74 5f 69 ata WHERE test_i
6e50: 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 73 20 6c d=? AND status l
6e60: 69 6b 65 20 27 70 61 73 73 27 29 0a 20 20 20 20 ike 'pass').
6e70: 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 WHERE id=?;".
6e80: 20 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 test-id test-i
6e90: 64 20 74 65 73 74 2d 69 64 29 0a 20 20 3b 3b 20 d test-id). ;;
6ea0: 69 66 20 74 68 65 20 74 65 73 74 20 69 73 20 6e if the test is n
6eb0: 6f 74 20 46 41 49 4c 20 74 68 65 6e 20 73 65 74 ot FAIL then set
6ec0: 20 73 74 61 74 75 73 20 62 61 73 65 64 20 6f 6e status based on
6ed0: 20 74 68 65 20 66 61 69 6c 20 61 6e 64 20 70 61 the fail and pa
6ee0: 73 73 20 63 6f 75 6e 74 73 2e 0a 20 20 28 74 68 ss counts.. (th
6ef0: 72 65 61 64 2d 73 6c 65 65 70 21 20 31 29 0a 20 read-sleep! 1).
6f00: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
6f10: 65 0a 20 20 20 64 62 0a 20 20 20 22 55 50 44 41 e. db. "UPDA
6f20: 54 45 20 74 65 73 74 73 0a 20 20 20 20 20 20 53 TE tests. S
6f30: 45 54 20 73 74 61 74 75 73 3d 43 41 53 45 20 57 ET status=CASE W
6f40: 48 45 4e 20 28 53 45 4c 45 43 54 20 66 61 69 6c HEN (SELECT fail
6f50: 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 _count FROM test
6f60: 73 20 57 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 s WHERE id=?) >
6f70: 30 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 0 .
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 54 48 45 4e THEN
6f90: 20 27 46 41 49 4c 27 0a 20 20 20 20 20 20 20 20 'FAIL'.
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 WH
6fb0: 45 4e 20 28 53 45 4c 45 43 54 20 70 61 73 73 5f EN (SELECT pass_
6fc0: 63 6f 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 count FROM tests
6fd0: 20 57 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 WHERE id=?) > 0
6fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6ff0: 20 20 20 20 20 20 20 20 20 20 54 48 45 4e 20 27 THEN '
7000: 50 41 53 53 27 0a 20 20 20 20 20 20 20 20 20 20 PASS'.
7010: 20 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 45 ELSE
7020: 20 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 20 status.
7030: 20 20 20 20 20 20 20 20 20 20 45 4e 44 20 57 48 END WH
7040: 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 74 65 ERE id=?;". te
7050: 73 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 st-id test-id te
7060: 73 74 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 st-id))..(define
7070: 20 28 64 62 3a 67 65 74 2d 70 72 65 76 2d 74 6f (db:get-prev-to
7080: 6c 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 l-for-test db te
7090: 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 20 76 st-id category v
70a0: 61 72 69 61 62 6c 65 29 0a 20 20 3b 3b 20 46 69 ariable). ;; Fi
70b0: 6e 69 73 68 20 6d 65 3f 0a 20 20 28 76 61 6c 75 nish me?. (valu
70c0: 65 73 20 23 66 20 23 66 20 23 66 29 29 0a 0a 3b es #f #f #f))..;
70d0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
70e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
70f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7110: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 53 20 54 20 45 =======.;; S T E
7120: 20 50 20 53 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d P S .;;========
7130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
7170: 28 64 65 66 69 6e 65 20 28 64 62 3a 73 74 65 70 (define (db:step
7180: 2d 67 65 74 2d 74 69 6d 65 2d 61 73 2d 73 74 72 -get-time-as-str
7190: 69 6e 67 20 76 65 63 29 0a 20 20 28 73 65 63 6f ing vec). (seco
71a0: 6e 64 73 2d 3e 74 69 6d 65 2d 73 74 72 69 6e 67 nds->time-string
71b0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 (db:step-get-ev
71c0: 65 6e 74 5f 74 69 6d 65 20 76 65 63 29 29 29 0a ent_time vec))).
71d0: 0a 3b 3b 20 64 62 2d 67 65 74 2d 74 65 73 74 2d .;; db-get-test-
71e0: 73 74 65 70 73 2d 66 6f 72 2d 72 75 6e 0a 28 64 steps-for-run.(d
71f0: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 73 74 efine (db:get-st
7200: 65 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 eps-for-test db
7210: 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 20 test-id). (let
7220: 28 28 72 65 73 20 27 28 29 29 29 0a 20 20 20 20 ((res '())).
7230: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
7240: 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d h-row . (lam
7250: 62 64 61 20 28 69 64 20 74 65 73 74 2d 69 64 20 bda (id test-id
7260: 73 74 65 70 6e 61 6d 65 20 73 74 61 74 65 20 73 stepname state s
7270: 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 tatus event-time
7280: 20 6c 6f 67 66 69 6c 65 29 0a 20 20 20 20 20 20 logfile).
7290: 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 (set! res (cons
72a0: 20 28 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 (vector id test
72b0: 2d 69 64 20 73 74 65 70 6e 61 6d 65 20 73 74 61 -id stepname sta
72c0: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
72d0: 74 69 6d 65 20 28 69 66 20 28 73 74 72 69 6e 67 time (if (string
72e0: 3f 20 6c 6f 67 66 69 6c 65 29 20 6c 6f 67 66 69 ? logfile) logfi
72f0: 6c 65 20 22 22 29 29 20 72 65 73 29 29 29 0a 20 le "")) res))).
7300: 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c db. "SEL
7310: 45 43 54 20 69 64 2c 74 65 73 74 5f 69 64 2c 73 ECT id,test_id,s
7320: 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 tepname,state,st
7330: 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c atus,event_time,
7340: 6c 6f 67 66 69 6c 65 20 46 52 4f 4d 20 74 65 73 logfile FROM tes
7350: 74 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 65 t_steps WHERE te
7360: 73 74 5f 69 64 3d 3f 20 4f 52 44 45 52 20 42 59 st_id=? ORDER BY
7370: 20 69 64 20 41 53 43 3b 22 20 3b 3b 20 65 76 65 id ASC;" ;; eve
7380: 6e 74 5f 74 69 6d 65 20 44 45 53 43 2c 69 64 20 nt_time DESC,id
7390: 41 53 43 3b 0a 20 20 20 20 20 74 65 73 74 2d 69 ASC;. test-i
73a0: 64 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 20 d). (reverse
73b0: 72 65 73 29 29 29 0a 0a 3b 3b 20 67 65 74 20 61 res)))..;; get a
73c0: 20 70 72 65 74 74 79 20 74 61 62 6c 65 20 74 6f pretty table to
73d0: 20 73 75 6d 6d 61 72 69 7a 65 20 73 74 65 70 73 summarize steps
73e0: 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a .;;.(define (db:
73f0: 67 65 74 2d 73 74 65 70 73 2d 74 61 62 6c 65 20 get-steps-table
7400: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c db test-id). (l
7410: 65 74 20 28 28 73 74 65 70 73 20 20 20 28 64 62 et ((steps (db
7420: 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 :get-steps-for-t
7430: 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 29 est db test-id))
7440: 29 0a 20 20 20 20 3b 3b 20 6f 72 67 61 6e 69 73 ). ;; organis
7450: 65 20 74 68 65 20 73 74 65 70 73 20 66 6f 72 20 e the steps for
7460: 62 65 74 74 65 72 20 72 65 61 64 61 62 69 6c 69 better readabili
7470: 74 79 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 ty. (let ((re
7480: 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 s (make-hash-tab
7490: 6c 65 29 29 29 0a 20 20 20 20 20 20 28 66 6f 72 le))). (for
74a0: 2d 65 61 63 68 20 0a 20 20 20 20 20 20 20 28 6c -each . (l
74b0: 61 6d 62 64 61 20 28 73 74 65 70 29 0a 09 20 28 ambda (step).. (
74c0: 64 65 62 75 67 3a 70 72 69 6e 74 20 36 20 22 73 debug:print 6 "s
74d0: 74 65 70 3d 22 20 73 74 65 70 29 0a 09 20 28 6c tep=" step).. (l
74e0: 65 74 20 28 28 72 65 63 6f 72 64 20 28 68 61 73 et ((record (has
74f0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 h-table-ref/defa
7500: 75 6c 74 20 0a 09 09 09 72 65 73 20 0a 09 09 09 ult ....res ....
7510: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 (db:step-get-ste
7520: 70 6e 61 6d 65 20 73 74 65 70 29 20 0a 09 09 09 pname step) ....
7530: 3b 3b 20 20 20 20 20 20 20 20 73 74 65 70 6e 61 ;; stepna
7540: 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 me
7550: 20 20 73 74 61 72 74 20 65 6e 64 20 73 74 61 74 start end stat
7560: 75 73 20 20 20 20 0a 09 09 09 28 76 65 63 74 6f us ....(vecto
7570: 72 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 r (db:step-get-s
7580: 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 22 22 tepname step) ""
7590: 20 20 20 22 22 20 22 22 20 20 20 20 20 22 22 20 "" "" ""
75a0: 22 22 29 29 29 29 0a 09 20 20 20 28 64 65 62 75 "")))).. (debu
75b0: 67 3a 70 72 69 6e 74 20 36 20 22 72 65 63 6f 72 g:print 6 "recor
75c0: 64 28 62 65 66 6f 72 65 29 20 3d 20 22 20 72 65 d(before) = " re
75d0: 63 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 3a 20 cord ...."\nid:
75e0: 20 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 " (db:step
75f0: 2d 67 65 74 2d 69 64 20 73 74 65 70 29 0a 09 09 -get-id step)...
7600: 09 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 22 20 ."\nstepname: "
7610: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 (db:step-get-ste
7620: 70 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 09 22 pname step)...."
7630: 5c 6e 73 74 61 74 65 3a 20 20 20 20 22 20 28 64 \nstate: " (d
7640: 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 b:step-get-state
7650: 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 step)...."\nsta
7660: 74 75 73 3a 20 20 20 22 20 28 64 62 3a 73 74 65 tus: " (db:ste
7670: 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 p-get-status ste
7680: 70 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a 20 20 p)...."\ntime:
7690: 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 " (db:step-ge
76a0: 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 t-event_time ste
76b0: 70 29 29 0a 09 20 20 20 28 63 61 73 65 20 28 73 p)).. (case (s
76c0: 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 64 tring->symbol (d
76d0: 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 b:step-get-state
76e0: 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 28 28 step)).. ((
76f0: 73 74 61 72 74 29 28 76 65 63 74 6f 72 2d 73 65 start)(vector-se
7700: 74 21 20 72 65 63 6f 72 64 20 31 20 28 64 62 3a t! record 1 (db:
7710: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
7720: 69 6d 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 ime step))..
7730: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
7740: 65 63 6f 72 64 20 33 20 28 69 66 20 28 65 71 75 ecord 3 (if (equ
7750: 61 6c 3f 20 28 76 65 63 74 6f 72 2d 72 65 66 20 al? (vector-ref
7760: 72 65 63 6f 72 64 20 33 29 20 22 22 29 0a 09 09 record 3) "")...
7770: 09 09 09 28 64 62 3a 73 74 65 70 2d 67 65 74 2d ...(db:step-get-
7780: 73 74 61 74 75 73 20 73 74 65 70 29 29 29 0a 09 status step)))..
7790: 20 20 20 20 20 20 28 69 66 20 28 3e 20 28 73 74 (if (> (st
77a0: 72 69 6e 67 2d 6c 65 6e 67 74 68 20 28 64 62 3a ring-length (db:
77b0: 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 step-get-logfile
77c0: 20 73 74 65 70 29 29 0a 09 09 20 20 20 20 20 30 step))... 0
77d0: 29 0a 09 09 20 20 28 76 65 63 74 6f 72 2d 73 65 )... (vector-se
77e0: 74 21 20 72 65 63 6f 72 64 20 35 20 28 64 62 3a t! record 5 (db:
77f0: 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 step-get-logfile
7800: 20 73 74 65 70 29 29 29 29 0a 09 20 20 20 20 20 step))))..
7810: 28 28 65 6e 64 29 20 20 0a 09 20 20 20 20 20 20 ((end) ..
7820: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 (vector-set! rec
7830: 6f 72 64 20 32 20 28 61 6e 79 2d 3e 6e 75 6d 62 ord 2 (any->numb
7840: 65 72 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d er (db:step-get-
7850: 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 event_time step)
7860: 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f )).. (vecto
7870: 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 r-set! record 3
7880: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
7890: 74 75 73 20 73 74 65 70 29 29 0a 09 20 20 20 20 tus step))..
78a0: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
78b0: 65 63 6f 72 64 20 34 20 28 6c 65 74 20 28 28 73 ecord 4 (let ((s
78c0: 74 61 72 74 74 20 28 61 6e 79 2d 3e 6e 75 6d 62 tartt (any->numb
78d0: 65 72 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 er (vector-ref r
78e0: 65 63 6f 72 64 20 31 29 29 29 0a 09 09 09 09 09 ecord 1)))......
78f0: 20 20 28 65 6e 64 74 20 20 20 28 61 6e 79 2d 3e (endt (any->
7900: 6e 75 6d 62 65 72 20 28 76 65 63 74 6f 72 2d 72 number (vector-r
7910: 65 66 20 72 65 63 6f 72 64 20 32 29 29 29 29 0a ef record 2)))).
7920: 09 09 09 09 20 20 20 20 20 20 28 64 65 62 75 67 .... (debug
7930: 3a 70 72 69 6e 74 20 34 20 22 72 65 63 6f 72 64 :print 4 "record
7940: 5b 31 5d 3d 22 20 28 76 65 63 74 6f 72 2d 72 65 [1]=" (vector-re
7950: 66 20 72 65 63 6f 72 64 20 31 29 20 0a 09 09 09 f record 1) ....
7960: 09 09 09 20 20 20 22 2c 20 73 74 61 72 74 74 3d ... ", startt=
7970: 22 20 73 74 61 72 74 74 20 22 2c 20 65 6e 64 74 " startt ", endt
7980: 3d 22 20 65 6e 64 74 0a 09 09 09 09 09 09 20 20 =" endt.......
7990: 20 22 2c 20 67 65 74 2d 73 74 61 74 75 73 3a 20 ", get-status:
79a0: 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 " (db:step-get-s
79b0: 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 09 09 tatus step))....
79c0: 09 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 . (if (and
79d0: 28 6e 75 6d 62 65 72 3f 20 73 74 61 72 74 74 29 (number? startt)
79e0: 28 6e 75 6d 62 65 72 3f 20 65 6e 64 74 29 29 0a (number? endt)).
79f0: 09 09 09 09 09 20 20 28 73 65 63 6f 6e 64 73 2d ..... (seconds-
7a00: 3e 68 72 2d 6d 69 6e 2d 73 65 63 20 28 2d 20 65 >hr-min-sec (- e
7a10: 6e 64 74 20 73 74 61 72 74 74 29 29 20 22 2d 31 ndt startt)) "-1
7a20: 22 29 29 29 0a 09 20 20 20 20 20 20 28 69 66 20 "))).. (if
7a30: 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67 74 (> (string-lengt
7a40: 68 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c h (db:step-get-l
7a50: 6f 67 66 69 6c 65 20 73 74 65 70 29 29 0a 09 09 ogfile step))...
7a60: 20 20 20 20 20 30 29 0a 09 09 20 20 28 76 65 63 0)... (vec
7a70: 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 tor-set! record
7a80: 35 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c 5 (db:step-get-l
7a90: 6f 67 66 69 6c 65 20 73 74 65 70 29 29 29 29 0a ogfile step)))).
7aa0: 09 20 20 20 20 20 28 65 6c 73 65 0a 09 20 20 20 . (else..
7ab0: 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 (vector-set!
7ac0: 72 65 63 6f 72 64 20 32 20 28 64 62 3a 73 74 65 record 2 (db:ste
7ad0: 70 2d 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 p-get-state step
7ae0: 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f )).. (vecto
7af0: 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 r-set! record 3
7b00: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
7b10: 74 75 73 20 73 74 65 70 29 29 0a 09 20 20 20 20 tus step))..
7b20: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
7b30: 65 63 6f 72 64 20 34 20 28 64 62 3a 73 74 65 70 ecord 4 (db:step
7b40: 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
7b50: 73 74 65 70 29 29 29 29 0a 09 20 20 20 28 68 61 step)))).. (ha
7b60: 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 72 65 sh-table-set! re
7b70: 73 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 s (db:step-get-s
7b80: 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 72 65 tepname step) re
7b90: 63 6f 72 64 29 0a 09 20 20 20 28 64 65 62 75 67 cord).. (debug
7ba0: 3a 70 72 69 6e 74 20 36 20 22 72 65 63 6f 72 64 :print 6 "record
7bb0: 28 61 66 74 65 72 29 20 20 3d 20 22 20 72 65 63 (after) = " rec
7bc0: 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 3a 20 20 ord ...."\nid:
7bd0: 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d " (db:step-
7be0: 67 65 74 2d 69 64 20 73 74 65 70 29 0a 09 09 09 get-id step)....
7bf0: 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 22 20 28 "\nstepname: " (
7c00: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 db:step-get-step
7c10: 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 09 22 5c name step)...."\
7c20: 6e 73 74 61 74 65 3a 20 20 20 20 22 20 28 64 62 nstate: " (db
7c30: 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 :step-get-state
7c40: 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 step)...."\nstat
7c50: 75 73 3a 20 20 20 22 20 28 64 62 3a 73 74 65 70 us: " (db:step
7c60: 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 -get-status step
7c70: 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a 20 20 20 )...."\ntime:
7c80: 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 " (db:step-get
7c90: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 -event_time step
7ca0: 29 29 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 28 )))). ;; (
7cb0: 65 6c 73 65 20 20 20 28 76 65 63 74 6f 72 2d 73 else (vector-s
7cc0: 65 74 21 20 72 65 63 6f 72 64 20 31 20 28 64 62 et! record 1 (db
7cd0: 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f :step-get-event_
7ce0: 74 69 6d 65 20 73 74 65 70 29 29 29 0a 20 20 20 time step))).
7cf0: 20 20 20 20 28 73 6f 72 74 20 73 74 65 70 73 20 (sort steps
7d00: 28 6c 61 6d 62 64 61 20 28 61 20 62 29 28 3c 20 (lambda (a b)(<
7d10: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 (db:step-get-eve
7d20: 6e 74 5f 74 69 6d 65 20 61 29 28 64 62 3a 73 74 nt_time a)(db:st
7d30: 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d ep-get-event_tim
7d40: 65 20 62 29 29 29 29 29 0a 20 20 20 20 20 20 72 e b))))). r
7d50: 65 73 29 29 29 0a 0a 3b 3b 20 55 53 45 3a 20 28 es)))..;; USE: (
7d60: 6c 73 65 74 2d 64 69 66 66 65 72 65 6e 63 65 20 lset-difference
7d70: 73 74 72 69 6e 67 3d 3f 20 27 28 22 61 22 20 22 string=? '("a" "
7d80: 62 22 20 22 63 22 29 20 27 28 22 64 22 20 22 63 b" "c") '("d" "c
7d90: 22 20 22 65 22 20 22 61 22 29 29 0a 3b 3b 0a 3b " "e" "a")).;;.;
7da0: 3b 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 ; Return a list
7db0: 6f 66 20 70 72 65 72 65 71 73 20 74 68 61 74 20 of prereqs that
7dc0: 77 65 72 65 20 4e 4f 54 20 6d 65 74 0a 3b 3b 20 were NOT met.;;
7dd0: 20 54 65 73 74 73 20 28 61 6e 64 20 61 6c 6c 20 Tests (and all
7de0: 69 74 65 6d 73 29 20 69 6e 20 77 61 69 74 6f 6e items) in waiton
7df0: 20 6c 69 73 74 20 6d 75 73 74 20 62 65 20 22 43 list must be "C
7e00: 4f 4d 50 4c 45 54 45 44 22 20 61 6e 64 20 22 50 OMPLETED" and "P
7e10: 41 53 53 22 0a 28 64 65 66 69 6e 65 20 28 64 62 ASS".(define (db
7e20: 2d 67 65 74 2d 70 72 65 72 65 71 73 2d 6e 6f 74 -get-prereqs-not
7e30: 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 64 20 77 -met db run-id w
7e40: 61 69 74 6f 6e 29 0a 20 20 28 69 66 20 28 6e 75 aiton). (if (nu
7e50: 6c 6c 3f 20 77 61 69 74 6f 6e 29 0a 20 20 20 20 ll? waiton).
7e60: 20 20 27 28 29 0a 20 20 20 20 20 20 28 6c 65 74 '(). (let
7e70: 2a 20 28 28 75 6e 6d 65 74 2d 70 72 65 2d 72 65 * ((unmet-pre-re
7e80: 71 73 20 27 28 29 29 0a 09 20 20 20 20 20 28 74 qs '()).. (t
7e90: 65 73 74 73 20 20 20 20 20 20 20 20 20 20 20 28 ests (
7ea0: 64 62 2d 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db-get-tests-for
7eb0: 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 23 -run db run-id #
7ec0: 66 20 23 66 20 27 28 29 20 27 28 29 29 29 0a 09 f #f '() '()))..
7ed0: 20 20 20 20 20 28 72 65 73 75 6c 74 20 20 20 20 (result
7ee0: 20 20 20 20 20 27 28 29 29 29 0a 09 28 66 6f 72 '()))..(for
7ef0: 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 77 -each (lambda (w
7f00: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 29 0a aitontest-name).
7f10: 09 09 20 20 20 20 28 6c 65 74 20 28 28 65 76 65 .. (let ((eve
7f20: 72 2d 73 65 65 6e 20 23 66 29 29 0a 09 09 20 20 r-seen #f))...
7f30: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c (for-each (l
7f40: 61 6d 62 64 61 20 28 74 65 73 74 29 0a 09 09 09 ambda (test)....
7f50: 09 20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 77 . (if (equal? w
7f60: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 28 aitontest-name (
7f70: 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 db:test-get-test
7f80: 6e 61 6d 65 20 74 65 73 74 29 29 0a 09 09 09 09 name test)).....
7f90: 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 (begin....
7fa0: 09 09 28 73 65 74 21 20 65 76 65 72 2d 73 65 65 ..(set! ever-see
7fb0: 6e 20 23 74 29 0a 09 09 09 09 09 28 69 66 20 28 n #t)......(if (
7fc0: 6e 6f 74 20 28 61 6e 64 20 28 65 71 75 61 6c 3f not (and (equal?
7fd0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 (db:test-get-st
7fe0: 61 74 65 20 74 65 73 74 29 20 22 43 4f 4d 50 4c ate test) "COMPL
7ff0: 45 54 45 44 22 29 0a 09 09 09 09 09 09 20 20 20 ETED").......
8000: 20 20 20 28 6d 65 6d 62 65 72 20 28 64 62 3a 74 (member (db:t
8010: 65 73 74 2d 67 65 74 2d 73 74 61 74 75 73 20 74 est-get-status t
8020: 65 73 74 29 20 27 28 22 50 41 53 53 22 20 22 57 est) '("PASS" "W
8030: 41 52 4e 22 20 22 43 48 45 43 4b 22 29 29 29 29 ARN" "CHECK"))))
8040: 0a 09 09 09 09 09 20 20 20 20 28 73 65 74 21 20 ...... (set!
8050: 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 result (cons wai
8060: 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 tontest-name res
8070: 75 6c 74 29 29 29 29 29 29 0a 09 09 09 09 74 65 ult)))))).....te
8080: 73 74 73 29 0a 09 09 20 20 20 20 20 20 28 69 66 sts)... (if
8090: 20 28 6e 6f 74 20 65 76 65 72 2d 73 65 65 6e 29 (not ever-seen)
80a0: 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 63 6f (set! result (co
80b0: 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 ns waitontest-na
80c0: 6d 65 20 72 65 73 75 6c 74 29 29 29 29 29 0a 09 me result)))))..
80d0: 09 20 20 77 61 69 74 6f 6e 29 0a 09 28 64 65 6c . waiton)..(del
80e0: 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 72 ete-duplicates r
80f0: 65 73 75 6c 74 29 29 29 29 0a 0a 3b 3b 20 74 68 esult))))..;; th
8100: 65 20 6e 65 77 20 70 72 65 72 65 71 73 20 63 61 e new prereqs ca
8110: 6c 63 75 6c 61 74 69 6f 6e 2c 20 6c 6f 6f 6b 73 lculation, looks
8120: 20 61 6c 73 6f 20 61 74 20 69 74 65 6d 70 61 74 also at itempat
8130: 68 20 69 66 20 73 70 65 63 69 66 69 65 64 0a 3b h if specified.;
8140: 3b 20 61 6c 6c 20 70 72 65 72 65 71 73 20 6d 75 ; all prereqs mu
8150: 73 74 20 62 65 20 6d 65 74 3a 0a 3b 3b 20 20 20 st be met:.;;
8160: 20 69 66 20 70 72 65 72 65 71 20 74 65 73 74 20 if prereq test
8170: 77 69 74 68 20 69 74 65 6d 70 61 74 68 3d 27 27 with itempath=''
8180: 20 69 73 20 43 4f 4d 50 4c 45 54 45 44 20 61 6e is COMPLETED an
8190: 64 20 50 41 53 53 2c 20 57 41 52 4e 2c 20 43 48 d PASS, WARN, CH
81a0: 45 43 4b 2c 20 6f 72 20 57 41 49 56 45 44 20 74 ECK, or WAIVED t
81b0: 68 65 6e 20 70 72 65 72 65 71 20 69 73 20 6d 65 hen prereq is me
81c0: 74 0a 3b 3b 20 20 20 20 69 66 20 70 72 65 72 65 t.;; if prere
81d0: 71 20 74 65 73 74 20 77 69 74 68 20 69 74 65 6d q test with item
81e0: 70 61 74 68 3d 72 65 66 2d 69 74 65 6d 2d 70 61 path=ref-item-pa
81f0: 74 68 20 61 6e 64 20 43 4f 4d 50 4c 45 54 45 44 th and COMPLETED
8200: 20 77 69 74 68 20 50 41 53 53 2c 20 57 41 52 4e with PASS, WARN
8210: 2c 20 43 48 45 43 4b 2c 20 6f 72 20 57 41 49 56 , CHECK, or WAIV
8220: 45 44 20 74 68 65 6e 20 70 72 65 72 65 71 20 69 ED then prereq i
8230: 73 20 6d 65 74 0a 28 64 65 66 69 6e 65 20 28 64 s met.(define (d
8240: 62 3a 67 65 74 2d 70 72 65 72 65 71 73 2d 6e 6f b:get-prereqs-no
8250: 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 64 20 t-met db run-id
8260: 77 61 69 74 6f 6e 73 20 72 65 66 2d 69 74 65 6d waitons ref-item
8270: 2d 70 61 74 68 29 0a 20 20 28 69 66 20 28 6f 72 -path). (if (or
8280: 20 28 6e 6f 74 20 77 61 69 74 6f 6e 73 29 0a 09 (not waitons)..
8290: 20 20 28 6e 75 6c 6c 3f 20 77 61 69 74 6f 6e 73 (null? waitons
82a0: 29 29 0a 20 20 20 20 20 20 27 28 29 0a 20 20 20 )). '().
82b0: 20 20 20 28 6c 65 74 2a 20 28 28 75 6e 6d 65 74 (let* ((unmet
82c0: 2d 70 72 65 2d 72 65 71 73 20 27 28 29 29 0a 09 -pre-reqs '())..
82d0: 20 20 20 20 20 28 72 65 73 75 6c 74 20 20 20 20 (result
82e0: 20 20 20 20 20 27 28 29 29 29 0a 09 28 66 6f 72 '()))..(for
82f0: 2d 65 61 63 68 20 0a 09 20 28 6c 61 6d 62 64 61 -each .. (lambda
8300: 20 28 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d (waitontest-nam
8310: 65 29 0a 09 20 20 20 3b 3b 20 62 79 20 67 65 74 e).. ;; by get
8320: 74 69 6e 67 20 74 68 65 20 74 65 73 74 73 20 77 ting the tests w
8330: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d ith matching nam
8340: 65 20 77 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 e we are looking
8350: 20 6f 6e 6c 79 20 61 74 20 74 68 65 20 6d 61 74 only at the mat
8360: 63 68 69 6e 67 20 74 65 73 74 20 0a 09 20 20 20 ching test ..
8370: 3b 3b 20 61 6e 64 20 72 65 6c 61 74 65 64 20 73 ;; and related s
8380: 75 62 20 69 74 65 6d 73 0a 09 20 20 20 28 6c 65 ub items.. (le
8390: 74 20 28 28 74 65 73 74 73 20 20 20 20 20 20 20 t ((tests
83a0: 20 20 20 20 20 20 28 64 62 2d 67 65 74 2d 74 65 (db-get-te
83b0: 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 sts-for-run db r
83c0: 75 6e 2d 69 64 20 77 61 69 74 6f 6e 74 65 73 74 un-id waitontest
83d0: 2d 6e 61 6d 65 20 23 66 20 27 28 29 20 27 28 29 -name #f '() '()
83e0: 29 29 0a 09 09 20 28 65 76 65 72 2d 73 65 65 6e ))... (ever-seen
83f0: 20 20 20 20 20 20 20 20 20 23 66 29 0a 09 09 20 #f)...
8400: 28 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d (parent-waiton-m
8410: 65 74 20 23 66 29 0a 09 09 20 28 69 74 65 6d 2d et #f)... (item-
8420: 77 61 69 74 6f 6e 2d 6d 65 74 20 20 20 23 66 29 waiton-met #f)
8430: 29 0a 09 20 20 20 20 20 28 66 6f 72 2d 65 61 63 ).. (for-eac
8440: 68 20 0a 09 20 20 20 20 20 20 28 6c 61 6d 62 64 h .. (lambd
8450: 61 20 28 74 65 73 74 29 0a 09 09 3b 3b 20 28 69 a (test)...;; (i
8460: 66 20 28 65 71 75 61 6c 3f 20 77 61 69 74 6f 6e f (equal? waiton
8470: 74 65 73 74 2d 6e 61 6d 65 20 28 64 62 3a 74 65 test-name (db:te
8480: 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 6d 65 20 st-get-testname
8490: 74 65 73 74 29 29 20 3b 3b 20 62 79 20 64 65 66 test)) ;; by def
84a0: 69 6e 74 69 6f 6e 20 74 68 69 73 20 68 61 64 20 intion this had
84b0: 62 65 74 74 65 72 20 62 65 20 74 72 75 65 20 2e better be true .
84c0: 2e 2e 0a 09 09 28 6c 65 74 2a 20 28 28 73 74 61 .....(let* ((sta
84d0: 74 65 20 20 20 20 20 20 20 20 20 20 20 20 20 28 te (
84e0: 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 db:test-get-stat
84f0: 65 20 74 65 73 74 29 29 0a 09 09 20 20 20 20 20 e test))...
8500: 20 20 28 73 74 61 74 75 73 20 20 20 20 20 20 20 (status
8510: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 (db:test-ge
8520: 74 2d 73 74 61 74 75 73 20 74 65 73 74 29 29 0a t-status test)).
8530: 09 09 20 20 20 20 20 20 20 28 69 74 65 6d 2d 70 .. (item-p
8540: 61 74 68 20 20 20 20 20 20 20 20 20 28 64 62 3a ath (db:
8550: 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70 61 test-get-item-pa
8560: 74 68 20 74 65 73 74 29 29 0a 09 09 20 20 20 20 th test))...
8570: 20 20 20 28 69 73 2d 63 6f 6d 70 6c 65 74 65 64 (is-completed
8580: 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73 74 (equal? st
8590: 61 74 65 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 ate "COMPLETED")
85a0: 29 0a 09 09 20 20 20 20 20 20 20 28 69 73 2d 6f )... (is-o
85b0: 6b 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d k (m
85c0: 65 6d 62 65 72 20 73 74 61 74 75 73 20 27 28 22 ember status '("
85d0: 50 41 53 53 22 20 22 57 41 52 4e 22 20 22 43 48 PASS" "WARN" "CH
85e0: 45 43 4b 22 20 22 57 41 49 56 45 44 22 29 29 29 ECK" "WAIVED")))
85f0: 0a 09 09 20 20 20 20 20 20 20 28 73 61 6d 65 2d ... (same-
8600: 69 74 65 6d 70 61 74 68 20 20 20 20 20 28 65 71 itempath (eq
8610: 75 61 6c 3f 20 72 65 66 2d 69 74 65 6d 2d 70 61 ual? ref-item-pa
8620: 74 68 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a th item-path))).
8630: 09 09 20 20 28 73 65 74 21 20 65 76 65 72 2d 73 .. (set! ever-s
8640: 65 65 6e 20 23 74 29 0a 09 09 20 20 28 63 6f 6e een #t)... (con
8650: 64 0a 09 09 20 20 20 3b 3b 20 63 61 73 65 20 31 d... ;; case 1
8660: 2c 20 6e 6f 6e 2d 69 74 65 6d 20 28 70 61 72 65 , non-item (pare
8670: 6e 74 20 74 65 73 74 29 20 69 73 20 0a 09 09 20 nt test) is ...
8680: 20 20 28 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 ((and (equal?
8690: 69 74 65 6d 2d 70 61 74 68 20 22 22 29 20 3b 3b item-path "") ;;
86a0: 20 74 68 69 73 20 69 73 20 74 68 65 20 70 61 72 this is the par
86b0: 65 6e 74 20 74 65 73 74 0a 09 09 09 20 69 73 2d ent test.... is-
86c0: 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 20 69 73 completed.... is
86d0: 2d 6f 6b 29 0a 09 09 20 20 20 20 28 73 65 74 21 -ok)... (set!
86e0: 20 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d parent-waiton-m
86f0: 65 74 20 23 74 29 29 0a 09 09 20 20 20 28 28 61 et #t))... ((a
8700: 6e 64 20 73 61 6d 65 2d 69 74 65 6d 70 61 74 68 nd same-itempath
8710: 0a 09 09 09 20 69 73 2d 63 6f 6d 70 6c 65 74 65 .... is-complete
8720: 64 0a 09 09 09 20 69 73 2d 6f 6b 29 0a 09 09 20 d.... is-ok)...
8730: 20 20 20 28 73 65 74 21 20 69 74 65 6d 2d 77 61 (set! item-wa
8740: 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 29 29 29 iton-met #t)))))
8750: 0a 09 20 20 20 20 20 20 74 65 73 74 73 29 0a 09 .. tests)..
8760: 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6f (if (not (o
8770: 72 20 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d r parent-waiton-
8780: 6d 65 74 20 69 74 65 6d 2d 77 61 69 74 6f 6e 2d met item-waiton-
8790: 6d 65 74 29 29 0a 09 09 20 28 73 65 74 21 20 72 met))... (set! r
87a0: 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 74 esult (cons wait
87b0: 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 75 ontest-name resu
87c0: 6c 74 29 29 29 0a 09 20 20 20 20 20 3b 3b 20 69 lt))).. ;; i
87d0: 66 20 74 68 65 20 74 65 73 74 20 69 73 20 6e 6f f the test is no
87e0: 74 20 66 6f 75 6e 64 20 74 68 65 6e 20 63 6c 65 t found then cle
87f0: 61 72 6c 79 20 74 68 65 20 77 61 69 74 6f 6e 20 arly the waiton
8800: 69 73 20 6e 6f 74 20 6d 65 74 2e 2e 2e 0a 09 20 is not met.....
8810: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 65 76 65 (if (not eve
8820: 72 2d 73 65 65 6e 29 28 73 65 74 21 20 72 65 73 r-seen)(set! res
8830: 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 74 6f 6e ult (cons waiton
8840: 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 75 6c 74 test-name result
8850: 29 29 29 29 29 0a 09 77 61 69 74 6f 6e 73 29 0a )))))..waitons).
8860: 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 64 75 (delete-du
8870: 70 6c 69 63 61 74 65 73 20 72 65 73 75 6c 74 29 plicates result)
8880: 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d )))..;;=========
8890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
88a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
88b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
88c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
88d0: 20 45 78 74 72 61 63 74 20 6f 64 73 20 66 69 6c Extract ods fil
88e0: 65 20 66 72 6f 6d 20 74 68 65 20 64 62 0a 3b 3b e from the db.;;
88f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8930: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 75 6e 73 70 ======..;; runsp
8940: 61 74 74 20 69 73 20 61 20 63 6f 6d 6d 61 20 64 att is a comma d
8950: 65 6c 69 6d 69 74 65 64 20 6c 69 73 74 20 6f 66 elimited list of
8960: 20 72 75 6e 20 70 61 74 74 65 72 6e 73 0a 3b 3b run patterns.;;
8970: 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 20 6d keypatt-alist m
8980: 75 73 74 20 63 6f 6e 74 61 69 6e 20 2a 61 6c 6c ust contain *all
8990: 2a 20 6b 65 79 73 20 77 69 74 68 20 61 6e 20 61 * keys with an a
89a0: 73 73 6f 63 69 61 74 65 64 20 70 61 74 74 65 72 ssociated patter
89b0: 6e 3a 20 27 28 20 28 22 4b 45 59 31 22 20 22 25 n: '( ("KEY1" "%
89c0: 22 29 20 2e 2e 20 29 0a 28 64 65 66 69 6e 65 20 ") .. ).(define
89d0: 28 64 62 3a 65 78 74 72 61 63 74 2d 6f 64 73 2d (db:extract-ods-
89e0: 66 69 6c 65 20 64 62 20 6f 75 74 70 75 74 66 69 file db outputfi
89f0: 6c 65 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 le keypatt-alist
8a00: 20 72 75 6e 73 70 61 74 74 20 70 61 74 68 6d 6f runspatt pathmo
8a10: 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 d). (let* ((key
8a20: 73 73 74 72 20 20 28 73 74 72 69 6e 67 2d 69 6e sstr (string-in
8a30: 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 63 tersperse (map c
8a40: 61 72 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 ar keypatt-alist
8a50: 29 20 22 2c 22 29 29 0a 09 20 28 6b 65 79 71 72 ) ",")).. (keyqr
8a60: 79 20 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 y (string-inte
8a70: 72 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c 61 rsperse (map (la
8a80: 6d 62 64 61 20 28 70 29 28 63 6f 6e 63 20 28 63 mbda (p)(conc (c
8a90: 61 72 20 70 29 20 22 20 4c 49 4b 45 20 3f 20 22 ar p) " LIKE ? "
8aa0: 29 29 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 )) keypatt-alist
8ab0: 29 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28 6e ) " AND ")).. (n
8ac0: 75 6d 6b 65 79 73 20 20 28 6c 65 6e 67 74 68 20 umkeys (length
8ad0: 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 29 0a keypatt-alist)).
8ae0: 09 20 28 74 65 73 74 2d 69 64 73 20 27 28 29 29 . (test-ids '())
8af0: 0a 09 20 28 77 69 6e 64 6f 77 73 20 20 28 61 6e .. (windows (an
8b00: 64 20 70 61 74 68 6d 6f 64 20 28 73 75 62 73 74 d pathmod (subst
8b10: 72 69 6e 67 2d 69 6e 64 65 78 20 22 5c 5c 22 20 ring-index "\\"
8b20: 70 61 74 68 6d 6f 64 29 29 29 0a 09 20 28 74 65 pathmod))).. (te
8b30: 6d 70 64 69 72 20 20 28 63 6f 6e 63 20 22 2f 74 mpdir (conc "/t
8b40: 6d 70 2f 22 20 28 63 75 72 72 65 6e 74 2d 75 73 mp/" (current-us
8b50: 65 72 2d 6e 61 6d 65 29 20 22 2f 22 20 72 75 6e er-name) "/" run
8b60: 73 70 61 74 74 20 22 5f 22 20 28 72 61 6e 64 6f spatt "_" (rando
8b70: 6d 20 31 30 30 30 30 29 20 22 5f 22 20 28 63 75 m 10000) "_" (cu
8b80: 72 72 65 6e 74 2d 70 72 6f 63 65 73 73 2d 69 64 rrent-process-id
8b90: 29 29 29 0a 09 20 28 72 75 6e 73 68 65 61 64 65 ))).. (runsheade
8ba0: 72 20 28 61 70 70 65 6e 64 20 28 6c 69 73 74 20 r (append (list
8bb0: 22 52 75 6e 20 49 64 22 20 22 52 75 6e 6e 61 6d "Run Id" "Runnam
8bc0: 65 22 29 20 3b 20 30 20 31 0a 09 09 09 20 20 20 e") ; 0 1....
8bd0: 20 20 28 6d 61 70 20 63 61 72 20 6b 65 79 70 61 (map car keypa
8be0: 74 74 2d 61 6c 69 73 74 29 20 20 20 3b 20 2b 20 tt-alist) ; +
8bf0: 4e 20 3d 20 6c 65 6e 67 74 68 20 6b 65 79 70 61 N = length keypa
8c00: 74 74 2d 61 6c 69 73 74 0a 09 09 09 20 20 20 20 tt-alist....
8c10: 20 28 6c 69 73 74 20 22 54 65 73 74 6e 61 6d 65 (list "Testname
8c20: 22 20 20 20 20 20 20 20 20 20 20 3b 20 32 0a 09 " ; 2..
8c30: 09 09 09 20 20 20 22 49 74 65 6d 20 50 61 74 68 ... "Item Path
8c40: 22 20 20 20 20 20 20 20 20 20 3b 20 33 20 0a 09 " ; 3 ..
8c50: 09 09 09 20 20 20 22 44 65 73 63 72 69 70 74 69 ... "Descripti
8c60: 6f 6e 22 20 20 20 20 20 20 20 3b 20 34 20 0a 09 on" ; 4 ..
8c70: 09 09 09 20 20 20 22 53 74 61 74 65 22 20 20 20 ... "State"
8c80: 20 20 20 20 20 20 20 20 20 20 3b 20 35 20 0a 09 ; 5 ..
8c90: 09 09 09 20 20 20 22 53 74 61 74 75 73 22 20 20 ... "Status"
8ca0: 20 20 20 20 20 20 20 20 20 20 3b 20 36 20 20 0a ; 6 .
8cb0: 09 09 09 09 20 20 20 22 46 69 6e 61 6c 20 4c 6f .... "Final Lo
8cc0: 67 22 20 20 20 20 20 20 20 20 20 3b 20 37 20 0a g" ; 7 .
8cd0: 09 09 09 09 20 20 20 22 52 75 6e 20 44 75 72 61 .... "Run Dura
8ce0: 74 69 6f 6e 22 20 20 20 20 20 20 3b 20 38 20 0a tion" ; 8 .
8cf0: 09 09 09 09 20 20 20 22 57 68 65 6e 20 52 75 6e .... "When Run
8d00: 22 20 20 20 20 20 20 20 20 20 20 3b 20 39 20 0a " ; 9 .
8d10: 09 09 09 09 20 20 20 22 54 61 67 73 22 20 20 20 .... "Tags"
8d20: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 30 0a ; 10.
8d30: 09 09 09 09 20 20 20 22 52 75 6e 20 4f 77 6e 65 .... "Run Owne
8d40: 72 22 20 20 20 20 20 20 20 20 20 3b 20 31 31 0a r" ; 11.
8d50: 09 09 09 09 20 20 20 22 43 6f 6d 6d 65 6e 74 22 .... "Comment"
8d60: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 32 0a ; 12.
8d70: 09 09 09 09 20 20 20 22 41 75 74 68 6f 72 22 20 .... "Author"
8d80: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 33 0a ; 13.
8d90: 09 09 09 09 20 20 20 22 54 65 73 74 20 4f 77 6e .... "Test Own
8da0: 65 72 22 20 20 20 20 20 20 20 20 3b 20 31 34 0a er" ; 14.
8db0: 09 09 09 09 20 20 20 22 52 65 76 69 65 77 65 64 .... "Reviewed
8dc0: 22 20 20 20 20 20 20 20 20 20 20 3b 20 31 35 0a " ; 15.
8dd0: 09 09 09 09 20 20 20 22 44 69 73 6b 66 72 65 65 .... "Diskfree
8de0: 22 20 20 20 20 20 20 20 20 20 20 3b 20 31 36 0a " ; 16.
8df0: 09 09 09 09 20 20 20 22 55 6e 61 6d 65 22 20 20 .... "Uname"
8e00: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 37 0a ; 17.
8e10: 09 09 09 09 20 20 20 22 52 75 6e 64 69 72 22 20 .... "Rundir"
8e20: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 38 0a ; 18.
8e30: 09 09 09 09 20 20 20 22 48 6f 73 74 22 20 20 20 .... "Host"
8e40: 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 39 0a ; 19.
8e50: 09 09 09 09 20 20 20 22 43 70 75 20 4c 6f 61 64 .... "Cpu Load
8e60: 22 20 20 20 20 20 20 20 20 20 20 3b 20 32 30 0a " ; 20.
8e70: 09 09 09 09 20 20 20 29 29 29 0a 09 20 28 72 65 .... ))).. (re
8e80: 73 75 6c 74 73 20 28 6c 69 73 74 20 72 75 6e 73 sults (list runs
8e90: 68 65 61 64 65 72 29 29 09 09 09 20 0a 09 20 28 header))... .. (
8ea0: 74 65 73 74 64 61 74 61 2d 68 65 61 64 65 72 20 testdata-header
8eb0: 28 6c 69 73 74 20 22 52 75 6e 20 49 64 22 20 22 (list "Run Id" "
8ec0: 54 65 73 74 6e 61 6d 65 22 20 22 49 74 65 6d 20 Testname" "Item
8ed0: 50 61 74 68 22 20 22 43 61 74 65 67 6f 72 79 22 Path" "Category"
8ee0: 20 22 56 61 72 69 61 62 6c 65 22 20 22 56 61 6c "Variable" "Val
8ef0: 75 65 22 20 22 45 78 70 65 63 74 65 64 22 20 22 ue" "Expected" "
8f00: 54 6f 6c 22 20 22 55 6e 69 74 73 22 20 22 53 74 Tol" "Units" "St
8f10: 61 74 75 73 22 20 22 43 6f 6d 6d 65 6e 74 22 29 atus" "Comment")
8f20: 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 )). (debug:pr
8f30: 69 6e 74 20 32 20 22 55 73 69 6e 67 20 22 20 74 int 2 "Using " t
8f40: 65 6d 70 64 69 72 20 22 20 66 6f 72 20 63 6f 6e empdir " for con
8f50: 73 74 72 75 63 74 69 6e 67 20 74 68 65 20 6f 64 structing the od
8f60: 73 20 66 69 6c 65 2e 20 6b 65 79 71 72 79 3a 20 s file. keyqry:
8f70: 22 20 6b 65 79 71 72 79 20 22 20 6b 65 79 73 74 " keyqry " keyst
8f80: 72 3a 20 22 20 6b 65 79 73 73 74 72 20 22 20 77 r: " keysstr " w
8f90: 69 74 68 20 6b 65 79 73 3a 20 22 20 28 6d 61 70 ith keys: " (map
8fa0: 20 63 61 64 72 20 6b 65 79 70 61 74 74 2d 61 6c cadr keypatt-al
8fb0: 69 73 74 29 29 0a 20 20 20 20 3b 3b 20 22 45 78 ist)). ;; "Ex
8fc0: 70 65 63 74 65 64 20 56 61 6c 75 65 22 0a 20 20 pected Value".
8fd0: 20 20 3b 3b 20 22 56 61 6c 75 65 20 46 6f 75 6e ;; "Value Foun
8fe0: 64 22 0a 20 20 20 20 3b 3b 20 22 54 6f 6c 65 72 d". ;; "Toler
8ff0: 61 6e 63 65 22 0a 20 20 20 20 28 61 70 70 6c 79 ance". (apply
9000: 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 sqlite3:for-eac
9010: 68 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d 62 64 h-row.. (lambd
9020: 61 20 28 74 65 73 74 2d 69 64 20 2e 20 62 29 0a a (test-id . b).
9030: 09 20 20 20 20 20 28 73 65 74 21 20 74 65 73 74 . (set! test
9040: 2d 69 64 73 20 28 63 6f 6e 73 20 74 65 73 74 2d -ids (cons test-
9050: 69 64 20 74 65 73 74 2d 69 64 73 29 29 20 20 20 id test-ids))
9060: 3b 3b 20 74 65 73 74 2d 69 64 20 69 73 20 6e 6f ;; test-id is no
9070: 77 20 74 65 73 74 6e 61 6d 65 0a 09 20 20 20 20 w testname..
9080: 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 20 28 (set! results (
9090: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 3b append results ;
90a0: 3b 20 6e 6f 74 65 2c 20 64 72 6f 70 20 74 68 65 ; note, drop the
90b0: 20 74 65 73 74 2d 69 64 0a 09 09 09 09 20 20 20 test-id.....
90c0: 28 6c 69 73 74 0a 09 09 09 09 20 20 20 20 28 69 (list..... (i
90d0: 66 20 70 61 74 68 6d 6f 64 0a 09 09 09 09 09 28 f pathmod......(
90e0: 6c 65 74 2a 20 28 28 76 62 20 20 20 20 20 20 20 let* ((vb
90f0: 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 62 (apply vector b
9100: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
9110: 6b 65 79 76 61 6c 73 20 20 20 28 6c 65 74 20 6c keyvals (let l
9120: 6f 6f 70 20 28 28 69 20 20 20 20 30 29 0a 09 09 oop ((i 0)...
9130: 09 09 09 09 09 09 20 20 20 20 20 28 72 65 73 20 ...... (res
9140: 27 28 29 29 29 0a 09 09 09 09 09 09 09 20 20 20 '()))........
9150: 20 28 69 66 20 28 3e 3d 20 69 20 6e 75 6d 6b 65 (if (>= i numke
9160: 79 73 29 0a 09 09 09 09 09 09 09 09 72 65 73 0a ys).........res.
9170: 09 09 09 09 09 09 09 09 28 6c 6f 6f 70 20 28 2b ........(loop (+
9180: 20 69 20 31 29 0a 09 09 09 09 09 09 09 09 20 20 i 1).........
9190: 20 20 20 20 28 61 70 70 65 6e 64 20 72 65 73 20 (append res
91a0: 28 6c 69 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (list (vector-re
91b0: 66 20 76 62 20 28 2b 20 69 20 32 29 29 29 29 29 f vb (+ i 2)))))
91c0: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 )))......
91d0: 28 72 75 6e 6e 61 6d 65 20 20 20 28 76 65 63 74 (runname (vect
91e0: 6f 72 2d 72 65 66 20 76 62 20 31 29 29 0a 09 09 or-ref vb 1))...
91f0: 09 09 09 20 20 20 20 20 20 20 28 74 65 73 74 6e ... (testn
9200: 61 6d 65 20 20 28 76 65 63 74 6f 72 2d 72 65 66 ame (vector-ref
9210: 20 76 62 20 28 2b 20 20 32 20 6e 75 6d 6b 65 79 vb (+ 2 numkey
9220: 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 s)))......
9230: 20 28 69 74 65 6d 2d 70 61 74 68 20 28 76 65 63 (item-path (vec
9240: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 33 tor-ref vb (+ 3
9250: 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 numkeys))).....
9260: 09 20 20 20 20 20 20 20 28 66 69 6e 61 6c 2d 6c . (final-l
9270: 6f 67 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 og (vector-ref v
9280: 62 20 28 2b 20 20 37 20 6e 75 6d 6b 65 79 73 29 b (+ 7 numkeys)
9290: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
92a0: 72 75 6e 2d 64 69 72 20 20 20 28 76 65 63 74 6f run-dir (vecto
92b0: 72 2d 72 65 66 20 76 62 20 28 2b 20 31 38 20 6e r-ref vb (+ 18 n
92c0: 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 20 umkeys)))......
92d0: 20 20 20 20 20 20 28 6c 6f 67 2d 66 70 61 74 68 (log-fpath
92e0: 20 28 63 6f 6e 63 20 72 75 6e 2d 64 69 72 20 22 (conc run-dir "
92f0: 2f 22 20 20 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 /" final-log)))
9300: 20 3b 3b 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 ;; (string-inte
9310: 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c 73 20 rsperse keyvals
9320: 22 2f 22 29 20 22 2f 22 20 74 65 73 74 6e 61 6d "/") "/" testnam
9330: 65 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 68 20 e "/" item-path
9340: 22 2f 22 0a 09 09 09 09 09 20 20 28 64 65 62 75 "/"...... (debu
9350: 67 3a 70 72 69 6e 74 20 34 20 22 6c 6f 67 3a 20 g:print 4 "log:
9360: 22 20 6c 6f 67 2d 66 70 61 74 68 20 22 20 65 78 " log-fpath " ex
9370: 69 73 74 73 3a 20 22 20 28 66 69 6c 65 2d 65 78 ists: " (file-ex
9380: 69 73 74 73 3f 20 6c 6f 67 2d 66 70 61 74 68 29 ists? log-fpath)
9390: 29 0a 09 09 09 09 09 20 20 28 76 65 63 74 6f 72 )...... (vector
93a0: 2d 73 65 74 21 20 76 62 20 28 2b 20 37 20 6e 75 -set! vb (+ 7 nu
93b0: 6d 6b 65 79 73 29 20 28 69 66 20 28 66 69 6c 65 mkeys) (if (file
93c0: 2d 65 78 69 73 74 73 3f 20 6c 6f 67 2d 66 70 61 -exists? log-fpa
93d0: 74 68 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 th)..........
93e0: 20 28 6c 65 74 20 28 28 6e 65 77 70 61 74 68 20 (let ((newpath
93f0: 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 22 2f (conc pathmod "/
9400: 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 28 "............. (
9410: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
9420: 73 65 20 6b 65 79 76 61 6c 73 20 22 2f 22 29 0a se keyvals "/").
9430: 09 09 09 09 09 09 09 09 09 09 09 09 20 22 2f 22 ............ "/"
9440: 20 72 75 6e 6e 61 6d 65 20 22 2f 22 20 74 65 73 runname "/" tes
9450: 74 6e 61 6d 65 20 22 2f 22 0a 09 09 09 09 09 09 tname "/".......
9460: 09 09 09 09 09 09 20 28 69 66 20 28 73 74 72 69 ...... (if (stri
9470: 6e 67 3d 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 ng=? item-path "
9480: 22 29 20 22 22 20 28 63 6f 6e 63 20 22 2f 22 20 ") "" (conc "/"
9490: 69 74 65 6d 2d 70 61 74 68 29 29 0a 09 09 09 09 item-path)).....
94a0: 09 09 09 09 09 09 09 09 20 66 69 6e 61 6c 2d 6c ........ final-l
94b0: 6f 67 29 29 29 0a 09 09 09 09 09 09 09 09 09 20 og)))..........
94c0: 20 20 20 20 20 3b 3b 20 66 6f 72 20 6e 6f 77 20 ;; for now
94d0: 74 68 72 6f 77 20 61 77 61 79 20 6e 65 77 70 61 throw away newpa
94e0: 74 68 20 61 6e 64 20 75 73 65 20 74 68 65 20 6c th and use the l
94f0: 6f 67 2d 66 70 61 74 68 20 63 6f 6e 63 27 64 20 og-fpath conc'd
9500: 77 69 74 68 20 70 61 74 68 6d 6f 64 0a 09 09 09 with pathmod....
9510: 09 09 09 09 09 09 20 20 20 20 20 20 28 73 65 74 ...... (set
9520: 21 20 6e 65 77 70 61 74 68 20 28 63 6f 6e 63 20 ! newpath (conc
9530: 70 61 74 68 6d 6f 64 20 6c 6f 67 2d 66 70 61 74 pathmod log-fpat
9540: 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 h))..........
9550: 20 20 20 28 69 66 20 77 69 6e 64 6f 77 73 20 28 (if windows (
9560: 73 74 72 69 6e 67 2d 74 72 61 6e 73 6c 61 74 65 string-translate
9570: 20 6e 65 77 70 61 74 68 20 22 2f 22 20 22 5c 5c newpath "/" "\\
9580: 22 29 20 6e 65 77 70 61 74 68 29 29 0a 09 09 09 ") newpath))....
9590: 09 09 09 09 09 09 20 20 20 20 28 69 66 20 28 3e ...... (if (>
95a0: 20 2a 76 65 72 62 6f 73 69 74 79 2a 20 31 29 0a *verbosity* 1).
95b0: 09 09 09 09 09 09 09 09 09 09 28 63 6f 6e 63 20 ..........(conc
95c0: 66 69 6e 61 6c 2d 6c 6f 67 20 22 20 6e 6f 74 2d final-log " not-
95d0: 66 6f 75 6e 64 22 29 0a 09 09 09 09 09 09 09 09 found").........
95e0: 09 09 22 22 29 29 29 0a 09 09 09 09 09 20 20 28 .."")))...... (
95f0: 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 76 62 29 vector->list vb)
9600: 29 0a 09 09 09 09 09 62 29 29 29 29 29 0a 09 20 )......b)))))..
9610: 20 20 64 62 0a 09 20 20 20 28 63 6f 6e 63 20 22 db.. (conc "
9620: 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 20 20 SELECT.
9630: 20 20 20 20 20 74 2e 74 65 73 74 6e 61 6d 65 2c t.testname,
9640: 72 2e 69 64 2c 72 75 6e 6e 61 6d 65 2c 22 20 6b r.id,runname," k
9650: 65 79 73 73 74 72 20 22 2c 74 2e 74 65 73 74 6e eysstr ",t.testn
9660: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ame,.
9670: 20 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 2c 74 t.item_path,t
9680: 6d 2e 64 65 73 63 72 69 70 74 69 6f 6e 2c 74 2e m.description,t.
9690: 73 74 61 74 65 2c 74 2e 73 74 61 74 75 73 2c 0a state,t.status,.
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 fi
96b0: 6e 61 6c 5f 6c 6f 67 66 2c 72 75 6e 5f 64 75 72 nal_logf,run_dur
96c0: 61 74 69 6f 6e 2c 20 0a 20 20 20 20 20 20 20 20 ation, .
96d0: 20 20 20 20 20 20 73 74 72 66 74 69 6d 65 28 27 strftime('
96e0: 25 6d 2f 25 64 2f 25 59 20 25 48 3a 25 4d 3a 25 %m/%d/%Y %H:%M:%
96f0: 53 27 2c 64 61 74 65 74 69 6d 65 28 74 2e 65 76 S',datetime(t.ev
9700: 65 6e 74 5f 74 69 6d 65 2c 27 75 6e 69 78 65 70 ent_time,'unixep
9710: 6f 63 68 27 29 2c 27 6c 6f 63 61 6c 74 69 6d 65 och'),'localtime
9720: 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '),.
9730: 20 20 74 6d 2e 74 61 67 73 2c 72 2e 6f 77 6e 65 tm.tags,r.owne
9740: 72 2c 74 2e 63 6f 6d 6d 65 6e 74 2c 0a 20 20 20 r,t.comment,.
9750: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f autho
9760: 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r,.
9770: 20 74 6d 2e 6f 77 6e 65 72 2c 72 65 76 69 65 77 tm.owner,review
9780: 65 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed,.
9790: 20 20 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 diskfree,uname
97a0: 2c 72 75 6e 64 69 72 2c 0a 20 20 20 20 20 20 20 ,rundir,.
97b0: 20 20 20 20 20 20 20 68 6f 73 74 2c 63 70 75 6c host,cpul
97c0: 6f 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 oad.
97d0: 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 74 20 FROM tests AS t
97e0: 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e 73 20 INNER JOIN runs
97f0: 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 AS r ON t.run_id
9800: 3d 72 2e 69 64 20 49 4e 4e 45 52 20 4a 4f 49 4e =r.id INNER JOIN
9810: 20 74 65 73 74 5f 6d 65 74 61 20 41 53 20 74 6d test_meta AS tm
9820: 20 4f 4e 20 74 6d 2e 74 65 73 74 6e 61 6d 65 3d ON tm.testname=
9830: 74 2e 74 65 73 74 6e 61 6d 65 0a 20 20 20 20 20 t.testname.
9840: 20 20 20 20 20 20 20 57 48 45 52 45 20 72 75 6e WHERE run
9850: 6e 61 6d 65 20 4c 49 4b 45 20 3f 20 41 4e 44 20 name LIKE ? AND
9860: 22 20 6b 65 79 71 72 79 20 22 3b 22 29 0a 09 20 " keyqry ";")..
9870: 20 20 72 75 6e 73 70 61 74 74 20 28 6d 61 70 20 runspatt (map
9880: 63 61 64 72 20 6b 65 79 70 61 74 74 2d 61 6c 69 cadr keypatt-ali
9890: 73 74 29 29 0a 20 20 20 20 28 73 65 74 21 20 72 st)). (set! r
98a0: 65 73 75 6c 74 73 20 28 6c 69 73 74 20 28 63 6f esults (list (co
98b0: 6e 73 20 22 52 75 6e 73 22 20 72 65 73 75 6c 74 ns "Runs" result
98c0: 73 29 29 29 0a 20 20 20 20 3b 3b 20 6e 6f 77 2c s))). ;; now,
98d0: 20 66 6f 72 20 65 61 63 68 20 74 65 73 74 2c 20 for each test,
98e0: 63 6f 6c 6c 65 63 74 20 74 68 65 20 74 65 73 74 collect the test
98f0: 5f 64 61 74 61 20 69 6e 66 6f 20 61 6e 64 20 61 _data info and a
9900: 64 64 20 61 20 6e 65 77 20 73 68 65 65 74 0a 20 dd a new sheet.
9910: 20 20 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 (for-each.
9920: 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 2d (lambda (test-
9930: 69 64 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 id). (let
9940: 28 28 74 65 73 74 2d 64 61 74 61 20 28 6c 69 73 ((test-data (lis
9950: 74 20 74 65 73 74 64 61 74 61 2d 68 65 61 64 65 t testdata-heade
9960: 72 29 29 0a 09 20 20 20 20 20 28 63 75 72 72 2d r)).. (curr-
9970: 74 65 73 74 2d 6e 61 6d 65 20 23 66 29 29 0a 09 test-name #f))..
9980: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
9990: 63 68 2d 72 6f 77 0a 09 20 20 28 6c 61 6d 62 64 ch-row.. (lambd
99a0: 61 20 28 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 a (run-id testna
99b0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 61 74 me item-path cat
99c0: 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 egory variable v
99d0: 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f alue expected to
99e0: 6c 20 75 6e 69 74 73 20 73 74 61 74 75 73 20 63 l units status c
99f0: 6f 6d 6d 65 6e 74 29 0a 09 20 20 20 20 28 73 65 omment).. (se
9a00: 74 21 20 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d t! curr-test-nam
9a10: 65 20 74 65 73 74 6e 61 6d 65 29 0a 09 20 20 20 e testname)..
9a20: 20 28 73 65 74 21 20 74 65 73 74 2d 64 61 74 61 (set! test-data
9a30: 20 28 61 70 70 65 6e 64 20 74 65 73 74 2d 64 61 (append test-da
9a40: 74 61 20 28 6c 69 73 74 20 28 6c 69 73 74 20 72 ta (list (list r
9a50: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 un-id testname i
9a60: 74 65 6d 2d 70 61 74 68 20 63 61 74 65 67 6f 72 tem-path categor
9a70: 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 y variable value
9a80: 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e expected tol un
9a90: 69 74 73 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 its status comme
9aa0: 6e 74 29 29 29 29 29 0a 09 20 20 64 62 20 0a 09 nt))))).. db ..
9ab0: 20 20 3b 3b 20 22 53 45 4c 45 43 54 20 72 75 6e ;; "SELECT run
9ac0: 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 69 74 65 _id,testname,ite
9ad0: 6d 5f 70 61 74 68 2c 63 61 74 65 67 6f 72 79 2c m_path,category,
9ae0: 76 61 72 69 61 62 6c 65 2c 74 64 2e 76 61 6c 75 variable,td.valu
9af0: 65 20 41 53 20 76 61 6c 75 65 2c 65 78 70 65 63 e AS value,expec
9b00: 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 74 64 ted,tol,units,td
9b10: 2e 73 74 61 74 75 73 20 41 53 20 73 74 61 74 75 .status AS statu
9b20: 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 s,td.comment AS
9b30: 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 comment FROM tes
9b40: 74 5f 64 61 74 61 20 41 53 20 74 64 20 49 4e 4e t_data AS td INN
9b50: 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e ER JOIN tests ON
9b60: 20 74 65 73 74 73 2e 69 64 3d 74 64 2e 74 65 73 tests.id=td.tes
9b70: 74 5f 69 64 20 57 48 45 52 45 20 74 65 73 74 5f t_id WHERE test_
9b80: 69 64 3d 3f 3b 22 0a 09 20 20 22 53 45 4c 45 43 id=?;".. "SELEC
9b90: 54 20 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d T run_id,testnam
9ba0: 65 2c 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 e,item_path,cate
9bb0: 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 gory,variable,td
9bc0: 2e 76 61 6c 75 65 20 41 53 20 76 61 6c 75 65 2c .value AS value,
9bd0: 74 64 2e 65 78 70 65 63 74 65 64 2c 74 64 2e 74 td.expected,td.t
9be0: 6f 6c 2c 74 64 2e 75 6e 69 74 73 2c 74 64 2e 73 ol,td.units,td.s
9bf0: 74 61 74 75 73 20 41 53 20 73 74 61 74 75 73 2c tatus AS status,
9c00: 74 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 63 6f td.comment AS co
9c10: 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 5f mment FROM test_
9c20: 64 61 74 61 20 41 53 20 74 64 20 49 4e 4e 45 52 data AS td INNER
9c30: 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 74 JOIN tests ON t
9c40: 65 73 74 73 2e 69 64 3d 74 64 2e 74 65 73 74 5f ests.id=td.test_
9c50: 69 64 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d id WHERE testnam
9c60: 65 3d 3f 3b 22 0a 09 20 20 74 65 73 74 2d 69 64 e=?;".. test-id
9c70: 29 0a 09 20 28 69 66 20 63 75 72 72 2d 74 65 73 ).. (if curr-tes
9c80: 74 2d 6e 61 6d 65 0a 09 20 20 20 20 20 28 73 65 t-name.. (se
9c90: 74 21 20 72 65 73 75 6c 74 73 20 28 61 70 70 65 t! results (appe
9ca0: 6e 64 20 72 65 73 75 6c 74 73 20 28 6c 69 73 74 nd results (list
9cb0: 20 28 63 6f 6e 73 20 63 75 72 72 2d 74 65 73 74 (cons curr-test
9cc0: 2d 6e 61 6d 65 20 74 65 73 74 2d 64 61 74 61 29 -name test-data)
9cd0: 29 29 29 29 0a 09 20 29 29 0a 20 20 20 20 20 28 )))).. )). (
9ce0: 73 6f 72 74 20 28 64 65 6c 65 74 65 2d 64 75 70 sort (delete-dup
9cf0: 6c 69 63 61 74 65 73 20 74 65 73 74 2d 69 64 73 licates test-ids
9d00: 29 20 73 74 72 69 6e 67 3c 3d 29 29 0a 20 20 20 ) string<=)).
9d10: 20 28 73 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 (system (conc "
9d20: 6d 6b 64 69 72 20 2d 70 20 22 20 74 65 6d 70 64 mkdir -p " tempd
9d30: 69 72 29 29 0a 20 20 20 20 3b 3b 20 28 70 70 20 ir)). ;; (pp
9d40: 72 65 73 75 6c 74 73 29 0a 20 20 20 20 28 6f 64 results). (od
9d50: 73 3a 6c 69 73 74 2d 3e 6f 64 73 20 0a 20 20 20 s:list->ods .
9d60: 20 20 74 65 6d 70 64 69 72 0a 20 20 20 20 20 28 tempdir. (
9d70: 69 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 if (string-match
9d80: 20 28 72 65 67 65 78 70 20 22 5e 5b 2f 7e 5d 2b (regexp "^[/~]+
9d90: 2e 2a 22 29 20 6f 75 74 70 75 74 66 69 6c 65 29 .*") outputfile)
9da0: 20 3b 3b 20 66 75 6c 6c 20 70 61 74 68 3f 0a 09 ;; full path?..
9db0: 20 6f 75 74 70 75 74 66 69 6c 65 0a 09 20 28 62 outputfile.. (b
9dc0: 65 67 69 6e 0a 09 20 20 20 28 64 65 62 75 67 3a egin.. (debug:
9dd0: 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 print 0 "WARNING
9de0: 3a 20 70 61 74 68 20 67 69 76 65 6e 2c 20 22 20 : path given, "
9df0: 6f 75 74 70 75 74 66 69 6c 65 20 22 20 69 73 20 outputfile " is
9e00: 72 65 6c 61 74 69 76 65 2c 20 70 72 65 66 69 78 relative, prefix
9e10: 69 6e 67 20 77 69 74 68 20 63 75 72 72 65 6e 74 ing with current
9e20: 20 64 69 72 65 63 74 6f 72 79 22 29 0a 09 20 20 directory")..
9e30: 20 28 63 6f 6e 63 20 28 63 75 72 72 65 6e 74 2d (conc (current-
9e40: 64 69 72 65 63 74 6f 72 79 29 20 22 2f 22 20 6f directory) "/" o
9e50: 75 74 70 75 74 66 69 6c 65 29 29 29 0a 20 20 20 utputfile))).
9e60: 20 20 72 65 73 75 6c 74 73 29 29 29 0a 0a 3b 3b results)))..;;
9e70: 20 28 64 62 3a 65 78 74 72 61 63 74 2d 6f 64 73 (db:extract-ods
9e80: 2d 66 69 6c 65 20 64 62 20 22 6f 75 74 70 75 74 -file db "output
9e90: 66 69 6c 65 2e 6f 64 73 22 20 27 28 28 22 73 79 file.ods" '(("sy
9ea0: 73 6e 61 6d 65 22 20 22 25 22 29 28 22 66 73 6e sname" "%")("fsn
9eb0: 61 6d 65 22 20 22 25 22 29 28 22 64 61 74 61 70 ame" "%")("datap
9ec0: 61 74 68 22 20 22 25 22 29 29 20 22 25 22 29 0a ath" "%")) "%").