0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79 ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 32 2c right 2006-2012,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64 Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70 ..;; .;; This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61 rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74 vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69 he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72 on 2.0 or.;; gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61 eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65 ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74 COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 ails..;; .;; Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55 stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 T ANY WARRANTY;
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72 .;; implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45 ULAR.;; PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 3d 3d ==========..;;==
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0220: 3d 3d 3d 3d 0a 3b 3b 20 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 72 65 71 75 69 72 65 2d 65 78 74 65 6e ..(require-exten
0290: 73 69 6f 6e 20 28 73 72 66 69 20 31 38 29 20 65 sion (srfi 18) e
02a0: 78 74 72 61 73 20 74 63 70 20 72 70 63 29 0a 28 xtras tcp rpc).(
02b0: 69 6d 70 6f 72 74 20 28 70 72 65 66 69 78 20 72 import (prefix r
02c0: 70 63 20 72 70 63 3a 29 29 0a 0a 28 75 73 65 20 pc rpc:))..(use
02d0: 73 71 6c 69 74 65 33 20 73 72 66 69 2d 31 20 70 sqlite3 srfi-1 p
02e0: 6f 73 69 78 20 72 65 67 65 78 20 72 65 67 65 78 osix regex regex
02f0: 2d 63 61 73 65 20 73 72 66 69 2d 36 39 20 63 73 -case srfi-69 cs
0300: 76 2d 78 6d 6c 29 0a 28 69 6d 70 6f 72 74 20 28 v-xml).(import (
0310: 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20 73 prefix sqlite3 s
0320: 71 6c 69 74 65 33 3a 29 29 0a 0a 28 64 65 63 6c qlite3:))..(decl
0330: 61 72 65 20 28 75 6e 69 74 20 64 62 29 29 0a 28 are (unit db)).(
0340: 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 63 6f declare (uses co
0350: 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c 61 72 65 20 mmon)).(declare
0360: 28 75 73 65 73 20 6b 65 79 73 29 29 0a 28 64 65 (uses keys)).(de
0370: 63 6c 61 72 65 20 28 75 73 65 73 20 6f 64 73 29 clare (uses ods)
0380: 29 0a 0a 28 69 6e 63 6c 75 64 65 20 22 63 6f 6d )..(include "com
0390: 6d 6f 6e 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 mon_records.scm"
03a0: 29 0a 28 69 6e 63 6c 75 64 65 20 22 64 62 5f 72 ).(include "db_r
03b0: 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e ecords.scm").(in
03c0: 63 6c 75 64 65 20 22 6b 65 79 5f 72 65 63 6f 72 clude "key_recor
03d0: 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 ds.scm").(includ
03e0: 65 20 22 72 75 6e 5f 72 65 63 6f 72 64 73 2e 73 e "run_records.s
03f0: 63 6d 22 29 0a 0a 3b 3b 20 74 69 6d 65 73 74 61 cm")..;; timesta
0400: 6d 70 20 74 79 70 65 20 28 76 61 6c 31 20 76 61 mp type (val1 va
0410: 6c 32 20 2e 2e 2e 29 0a 3b 3b 20 74 79 70 65 3a l2 ...).;; type:
0420: 20 6d 65 74 61 2d 69 6e 66 6f 2c 20 73 74 65 70 meta-info, step
0430: 0a 28 64 65 66 69 6e 65 20 2a 69 6e 63 6f 6d 69 .(define *incomi
0440: 6e 67 2d 64 61 74 61 2a 20 20 20 20 20 20 27 28 ng-data* '(
0450: 29 29 0a 28 64 65 66 69 6e 65 20 2a 69 6e 63 6f )).(define *inco
0460: 6d 69 6e 67 2d 6c 61 73 74 2d 74 69 6d 65 2a 20 ming-last-time*
0470: 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 (current-seconds
0480: 29 29 0a 28 64 65 66 69 6e 65 20 2a 69 6e 63 6f )).(define *inco
0490: 6d 69 6e 67 2d 6d 75 74 65 78 2a 20 20 20 20 20 ming-mutex*
04a0: 28 6d 61 6b 65 2d 6d 75 74 65 78 29 29 0a 28 64 (make-mutex)).(d
04b0: 65 66 69 6e 65 20 2a 63 61 63 68 65 2d 6f 6e 2a efine *cache-on*
04c0: 20 23 66 29 0a 0a 28 64 65 66 69 6e 65 20 28 6f #f)..(define (o
04d0: 70 65 6e 2d 64 62 29 20 3b 3b 20 20 28 63 6f 6e pen-db) ;; (con
04e0: 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 6d 65 c *toppath* "/me
04f0: 67 61 74 65 73 74 2e 64 62 22 29 20 28 63 61 72 gatest.db") (car
0500: 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 29 *configinfo*)))
0510: 0a 20 20 28 6c 65 74 2a 20 28 28 64 62 70 61 74 . (let* ((dbpat
0520: 68 20 20 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 h (conc *topp
0530: 61 74 68 2a 20 22 2f 6d 65 67 61 74 65 73 74 2e ath* "/megatest.
0540: 64 62 22 29 29 20 3b 3b 20 66 6e 61 6d 65 29 0a db")) ;; fname).
0550: 09 20 28 64 62 65 78 69 73 74 73 20 20 28 66 69 . (dbexists (fi
0560: 6c 65 2d 65 78 69 73 74 73 3f 20 64 62 70 61 74 le-exists? dbpat
0570: 68 29 29 0a 09 20 28 64 62 20 20 20 20 20 20 20 h)).. (db
0580: 20 28 73 71 6c 69 74 65 33 3a 6f 70 65 6e 2d 64 (sqlite3:open-d
0590: 61 74 61 62 61 73 65 20 64 62 70 61 74 68 29 29 atabase dbpath))
05a0: 20 3b 3b 20 28 6e 65 76 65 72 2d 67 69 76 65 2d ;; (never-give-
05b0: 75 70 2d 6f 70 65 6e 2d 64 62 20 64 62 70 61 74 up-open-db dbpat
05c0: 68 29 29 0a 09 20 28 68 61 6e 64 6c 65 72 20 20 h)).. (handler
05d0: 20 28 6d 61 6b 65 2d 62 75 73 79 2d 74 69 6d 65 (make-busy-time
05e0: 6f 75 74 20 28 69 66 20 28 61 72 67 73 3a 67 65 out (if (args:ge
05f0: 74 2d 61 72 67 20 22 2d 6f 76 65 72 72 69 64 65 t-arg "-override
0600: 2d 74 69 6d 65 6f 75 74 22 29 0a 09 09 09 09 09 -timeout")......
0610: 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 (string->numb
0620: 65 72 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 er (args:get-arg
0630: 20 22 2d 6f 76 65 72 72 69 64 65 2d 74 69 6d 65 "-override-time
0640: 6f 75 74 22 29 29 0a 09 09 09 09 09 20 20 20 33 out"))...... 3
0650: 36 30 30 30 29 29 29 29 20 3b 3b 20 31 33 36 30 6000)))) ;; 1360
0660: 30 30 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 00))). (sqlit
0670: 65 33 3a 73 65 74 2d 62 75 73 79 2d 68 61 6e 64 e3:set-busy-hand
0680: 6c 65 72 21 20 64 62 20 68 61 6e 64 6c 65 72 29 ler! db handler)
0690: 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 64 62 . (if (not db
06a0: 65 78 69 73 74 73 29 0a 09 28 64 62 3a 69 6e 69 exists)..(db:ini
06b0: 74 69 61 6c 69 7a 65 20 64 62 29 29 0a 20 20 20 tialize db)).
06c0: 20 64 62 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 db))..(define (
06d0: 64 62 3a 69 6e 69 74 69 61 6c 69 7a 65 20 64 62 db:initialize db
06e0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 66 ). (let* ((conf
06f0: 69 67 64 61 74 20 28 63 61 72 20 2a 63 6f 6e 66 igdat (car *conf
0700: 69 67 69 6e 66 6f 2a 29 29 20 20 3b 3b 20 74 75 iginfo*)) ;; tu
0710: 74 20 74 75 74 2c 20 67 6c 6f 62 61 6c 20 77 61 t tut, global wa
0720: 72 6e 69 6e 67 2e 2e 2e 0a 09 20 28 6b 65 79 73 rning..... (keys
0730: 20 20 20 20 20 28 63 6f 6e 66 69 67 2d 67 65 74 (config-get
0740: 2d 66 69 65 6c 64 73 20 63 6f 6e 66 69 67 64 61 -fields configda
0750: 74 29 29 0a 09 20 28 68 61 76 65 6b 65 79 73 20 t)).. (havekeys
0760: 28 3e 20 28 6c 65 6e 67 74 68 20 6b 65 79 73 29 (> (length keys)
0770: 20 30 29 29 0a 09 20 28 6b 65 79 73 74 72 20 20 0)).. (keystr
0780: 20 28 6b 65 79 73 2d 3e 6b 65 79 73 74 72 20 6b (keys->keystr k
0790: 65 79 73 29 29 0a 09 20 28 66 69 65 6c 64 73 74 eys)).. (fieldst
07a0: 72 20 28 6b 65 79 73 2d 3e 6b 65 79 2f 66 69 65 r (keys->key/fie
07b0: 6c 64 20 6b 65 79 73 29 29 29 0a 20 20 20 20 28 ld keys))). (
07c0: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 for-each (lambda
07d0: 20 28 6b 65 79 29 0a 09 09 28 6c 65 74 20 28 28 (key)...(let ((
07e0: 6b 65 79 6e 20 28 76 65 63 74 6f 72 2d 72 65 66 keyn (vector-ref
07f0: 20 6b 65 79 20 30 29 29 29 0a 09 09 20 20 28 69 key 0)))... (i
0800: 66 20 28 6d 65 6d 62 65 72 20 28 73 74 72 69 6e f (member (strin
0810: 67 2d 64 6f 77 6e 63 61 73 65 20 6b 65 79 6e 29 g-downcase keyn)
0820: 0a 09 09 09 20 20 20 20 20 20 28 6c 69 73 74 20 .... (list
0830: 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 "runname" "state
0840: 22 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 " "status" "owne
0850: 72 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 20 r" "event_time"
0860: 22 63 6f 6d 6d 65 6e 74 22 20 22 66 61 69 6c 5f "comment" "fail_
0870: 63 6f 75 6e 74 22 0a 09 09 09 09 20 20 20 20 22 count"..... "
0880: 70 61 73 73 5f 63 6f 75 6e 74 22 29 29 0a 09 09 pass_count"))...
0890: 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 (begin....
08a0: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 79 (print "ERROR: y
08b0: 6f 75 72 20 6b 65 79 20 63 61 6e 6e 6f 74 20 62 our key cannot b
08c0: 65 20 6e 61 6d 65 64 20 22 20 6b 65 79 6e 20 22 e named " keyn "
08d0: 20 61 73 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 as this conflic
08e0: 74 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 ts with the same
08f0: 20 6e 61 6d 65 64 20 66 69 65 6c 64 20 69 6e 20 named field in
0900: 74 68 65 20 72 75 6e 73 20 74 61 62 6c 65 22 29 the runs table")
0910: 0a 09 09 09 28 73 79 73 74 65 6d 20 28 63 6f 6e ....(system (con
0920: 63 20 22 72 6d 20 2d 66 20 22 20 64 62 70 61 74 c "rm -f " dbpat
0930: 68 29 29 0a 09 09 09 28 65 78 69 74 20 31 29 29 h))....(exit 1))
0940: 29 29 29 0a 09 20 20 20 20 20 20 6b 65 79 73 29 ))).. keys)
0950: 0a 20 20 20 20 3b 3b 20 28 73 71 6c 69 74 65 33 . ;; (sqlite3
0960: 3a 65 78 65 63 75 74 65 20 64 62 20 22 50 52 41 :execute db "PRA
0970: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 GMA synchronous
0980: 3d 20 4f 46 46 3b 22 29 0a 20 20 20 20 28 73 71 = OFF;"). (sq
0990: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
09a0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
09b0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6b 65 79 F NOT EXISTS key
09c0: 73 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 s (id INTEGER PR
09d0: 49 4d 41 52 59 20 4b 45 59 2c 20 66 69 65 6c 64 IMARY KEY, field
09e0: 6e 61 6d 65 20 54 45 58 54 2c 20 66 69 65 6c 64 name TEXT, field
09f0: 74 79 70 65 20 54 45 58 54 2c 20 43 4f 4e 53 54 type TEXT, CONST
0a00: 52 41 49 4e 54 20 6b 65 79 63 6f 6e 73 74 72 61 RAINT keyconstra
0a10: 69 6e 74 20 55 4e 49 51 55 45 20 28 66 69 65 6c int UNIQUE (fiel
0a20: 64 6e 61 6d 65 29 29 3b 22 29 0a 20 20 20 20 28 dname));"). (
0a30: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 for-each (lambda
0a40: 20 28 6b 65 79 29 0a 09 09 28 73 71 6c 69 74 65 (key)...(sqlite
0a50: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 3:execute db "IN
0a60: 53 45 52 54 20 49 4e 54 4f 20 6b 65 79 73 20 28 SERT INTO keys (
0a70: 66 69 65 6c 64 6e 61 6d 65 2c 66 69 65 6c 64 74 fieldname,fieldt
0a80: 79 70 65 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f ype) VALUES (?,?
0a90: 29 3b 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 65 );" (key:get-fie
0aa0: 6c 64 6e 61 6d 65 20 6b 65 79 29 28 6b 65 79 3a ldname key)(key:
0ab0: 67 65 74 2d 66 69 65 6c 64 74 79 70 65 20 6b 65 get-fieldtype ke
0ac0: 79 29 29 29 0a 09 20 20 20 20 20 20 6b 65 79 73 y))).. keys
0ad0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ). (sqlite3:e
0ae0: 78 65 63 75 74 65 20 64 62 20 28 63 6f 6e 63 20 xecute db (conc
0af0: 0a 09 09 09 20 22 43 52 45 41 54 45 20 54 41 42 .... "CREATE TAB
0b00: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 LE IF NOT EXISTS
0b10: 20 72 75 6e 73 20 28 69 64 20 49 4e 54 45 47 45 runs (id INTEGE
0b20: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 22 R PRIMARY KEY, "
0b30: 20 0a 09 09 09 20 66 69 65 6c 64 73 74 72 20 28 .... fieldstr (
0b40: 69 66 20 68 61 76 65 6b 65 79 73 20 22 2c 22 20 if havekeys ","
0b50: 22 22 29 0a 09 09 09 20 22 72 75 6e 6e 61 6d 65 "").... "runname
0b60: 20 54 45 58 54 2c 22 0a 09 09 09 20 22 73 74 61 TEXT,".... "sta
0b70: 74 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 te TEXT DEFAULT
0b80: 27 27 2c 22 0a 09 09 09 20 22 73 74 61 74 75 73 '',".... "status
0b90: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
0ba0: 2c 22 0a 09 09 09 20 22 6f 77 6e 65 72 20 54 45 ,".... "owner TE
0bb0: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 22 0a XT DEFAULT '',".
0bc0: 09 09 09 20 22 65 76 65 6e 74 5f 74 69 6d 65 20 ... "event_time
0bd0: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 09 09 09 20 TIMESTAMP,"....
0be0: 22 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 "comment TEXT DE
0bf0: 46 41 55 4c 54 20 27 27 2c 22 0a 09 09 09 20 22 FAULT '',".... "
0c00: 66 61 69 6c 5f 63 6f 75 6e 74 20 49 4e 54 45 47 fail_count INTEG
0c10: 45 52 20 44 45 46 41 55 4c 54 20 30 2c 22 0a 09 ER DEFAULT 0,"..
0c20: 09 09 20 22 70 61 73 73 5f 63 6f 75 6e 74 20 49 .. "pass_count I
0c30: 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 NTEGER DEFAULT 0
0c40: 2c 22 0a 09 09 09 20 22 43 4f 4e 53 54 52 41 49 ,".... "CONSTRAI
0c50: 4e 54 20 72 75 6e 73 63 6f 6e 73 74 72 61 69 6e NT runsconstrain
0c60: 74 20 55 4e 49 51 55 45 20 28 72 75 6e 6e 61 6d t UNIQUE (runnam
0c70: 65 22 20 28 69 66 20 68 61 76 65 6b 65 79 73 20 e" (if havekeys
0c80: 22 2c 22 20 22 22 29 20 6b 65 79 73 74 72 20 22 "," "") keystr "
0c90: 29 29 3b 22 29 29 0a 20 20 20 20 28 73 71 6c 69 ));")). (sqli
0ca0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 28 te3:execute db (
0cb0: 63 6f 6e 63 20 22 43 52 45 41 54 45 20 49 4e 44 conc "CREATE IND
0cc0: 45 58 20 72 75 6e 73 5f 69 6e 64 65 78 20 4f 4e EX runs_index ON
0cd0: 20 72 75 6e 73 20 28 72 75 6e 6e 61 6d 65 22 20 runs (runname"
0ce0: 28 69 66 20 68 61 76 65 6b 65 79 73 20 22 2c 22 (if havekeys ","
0cf0: 20 22 22 29 20 6b 65 79 73 74 72 20 22 29 3b 22 "") keystr ");"
0d00: 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a )). (sqlite3:
0d10: 65 78 65 63 75 74 65 20 64 62 20 0a 09 09 20 20 execute db ...
0d20: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 "CREATE TABLE
0d30: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 IF NOT EXISTS t
0d40: 65 73 74 73 20 0a 20 20 20 20 20 20 20 20 20 20 ests .
0d50: 20 20 20 20 20 20 20 20 20 20 28 69 64 20 49 4e (id IN
0d60: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
0d70: 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 Y,.
0d80: 20 20 20 20 20 20 20 20 72 75 6e 5f 69 64 20 20 run_id
0d90: 20 20 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 INTEGER,.
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0db0: 20 74 65 73 74 6e 61 6d 65 20 20 20 54 45 58 54 testname TEXT
0dc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0dd0: 20 20 20 20 20 20 20 68 6f 73 74 20 20 20 20 20 host
0de0: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
0df0: 6e 2f 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 n/a',.
0e00: 20 20 20 20 20 20 20 20 20 20 20 63 70 75 6c 6f cpulo
0e10: 61 64 20 20 20 20 52 45 41 4c 20 44 45 46 41 55 ad REAL DEFAU
0e20: 4c 54 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 LT -1,.
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 6b disk
0e40: 66 72 65 65 20 20 20 49 4e 54 45 47 45 52 20 44 free INTEGER D
0e50: 45 46 41 55 4c 54 20 2d 31 2c 0a 20 20 20 20 20 EFAULT -1,.
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e70: 75 6e 61 6d 65 20 20 20 20 20 20 54 45 58 54 20 uname TEXT
0e80: 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 20 0a DEFAULT 'n/a', .
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ea0: 20 20 20 20 20 72 75 6e 64 69 72 20 20 20 20 20 rundir
0eb0: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f TEXT DEFAULT 'n/
0ec0: 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 a',.
0ed0: 20 20 20 20 20 20 20 20 20 73 68 6f 72 74 64 69 shortdi
0ee0: 72 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 r TEXT DEFAULT
0ef0: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
0f00: 20 20 20 20 20 20 20 20 20 20 69 74 65 6d 5f 70 item_p
0f10: 61 74 68 20 20 54 45 58 54 20 44 45 46 41 55 4c ath TEXT DEFAUL
0f20: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
0f30: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 state
0f40: 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 TEXT DEFAU
0f50: 4c 54 20 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 LT 'NOT_STARTED'
0f60: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0f70: 20 20 20 20 20 20 20 73 74 61 74 75 73 20 20 20 status
0f80: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
0f90: 46 41 49 4c 27 2c 0a 20 20 20 20 20 20 20 20 20 FAIL',.
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 61 74 74 65 atte
0fb0: 6d 70 74 6e 75 6d 20 49 4e 54 45 47 45 52 20 44 mptnum INTEGER D
0fc0: 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20 20 20 EFAULT 0,.
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
0fe0: 69 6e 61 6c 5f 6c 6f 67 66 20 54 45 58 54 20 44 inal_logf TEXT D
0ff0: 45 46 41 55 4c 54 20 27 6c 6f 67 73 2f 66 69 6e EFAULT 'logs/fin
1000: 61 6c 2e 6c 6f 67 27 2c 0a 20 20 20 20 20 20 20 al.log',.
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f lo
1020: 67 64 61 74 20 20 20 20 20 42 4c 4f 42 2c 20 0a gdat BLOB, .
1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1040: 20 20 20 20 20 72 75 6e 5f 64 75 72 61 74 69 6f run_duratio
1050: 6e 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c n INTEGER DEFAUL
1060: 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 T 0,.
1070: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e commen
1080: 74 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c t TEXT DEFAUL
1090: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
10a0: 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 event
10b0: 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 2c _time TIMESTAMP,
10c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10d0: 20 20 20 20 20 20 66 61 69 6c 5f 63 6f 75 6e 74 fail_count
10e0: 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 INTEGER DEFAULT
10f0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 0,.
1100: 20 20 20 20 20 20 20 20 20 70 61 73 73 5f 63 6f pass_co
1110: 75 6e 74 20 49 4e 54 45 47 45 52 20 44 45 46 41 unt INTEGER DEFA
1120: 55 4c 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 ULT 0,.
1130: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 63 68 arch
1140: 69 76 65 64 20 20 20 49 4e 54 45 47 45 52 20 44 ived INTEGER D
1150: 45 46 41 55 4c 54 20 30 2c 20 2d 2d 20 30 3d 6e EFAULT 0, -- 0=n
1160: 6f 2c 20 31 3d 69 6e 20 70 72 6f 67 72 65 73 73 o, 1=in progress
1170: 2c 20 32 3d 79 65 73 0a 20 20 20 20 20 20 20 20 , 2=yes.
1180: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e CON
1190: 53 54 52 41 49 4e 54 20 74 65 73 74 73 63 6f 6e STRAINT testscon
11a0: 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 straint UNIQUE (
11b0: 72 75 6e 5f 69 64 2c 20 74 65 73 74 6e 61 6d 65 run_id, testname
11c0: 2c 20 69 74 65 6d 5f 70 61 74 68 29 0a 20 20 20 , item_path).
11d0: 20 20 20 20 20 20 20 29 3b 22 29 0a 20 20 20 20 );").
11e0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
11f0: 20 64 62 20 22 43 52 45 41 54 45 20 49 4e 44 45 db "CREATE INDE
1200: 58 20 74 65 73 74 73 5f 69 6e 64 65 78 20 4f 4e X tests_index ON
1210: 20 74 65 73 74 73 20 28 72 75 6e 5f 69 64 2c 20 tests (run_id,
1220: 74 65 73 74 6e 61 6d 65 2c 20 69 74 65 6d 5f 70 testname, item_p
1230: 61 74 68 29 3b 22 29 0a 20 20 20 20 28 73 71 6c ath);"). (sql
1240: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
1250: 22 43 52 45 41 54 45 20 56 49 45 57 20 72 75 6e "CREATE VIEW run
1260: 73 5f 74 65 73 74 73 20 41 53 20 53 45 4c 45 43 s_tests AS SELEC
1270: 54 20 2a 20 46 52 4f 4d 20 72 75 6e 73 20 49 4e T * FROM runs IN
1280: 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f NER JOIN tests O
1290: 4e 20 72 75 6e 73 2e 69 64 3d 74 65 73 74 73 2e N runs.id=tests.
12a0: 72 75 6e 5f 69 64 3b 22 29 0a 20 20 20 20 28 73 run_id;"). (s
12b0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
12c0: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 b "CREATE TABLE
12d0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 IF NOT EXISTS te
12e0: 73 74 5f 73 74 65 70 73 20 0a 20 20 20 20 20 20 st_steps .
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1300: 20 20 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 (id INTE
1310: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
1320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1340: 74 65 73 74 5f 69 64 20 49 4e 54 45 47 45 52 2c test_id INTEGER,
1350: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1370: 20 73 74 65 70 6e 61 6d 65 20 54 45 58 54 2c 20 stepname TEXT,
1380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a0: 73 74 61 74 65 20 54 45 58 54 20 44 45 46 41 55 state TEXT DEFAU
13b0: 4c 54 20 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 LT 'NOT_STARTED'
13c0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 , .
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e0: 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 45 status TEXT DE
13f0: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1410: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e even
1420: 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 t_time TIMESTAMP
1430: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1450: 20 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 comment TEXT DE
1460: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 FAULT '',.
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1480: 20 20 20 20 20 20 20 20 20 6c 6f 67 66 69 6c 65 logfile
1490: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
14a0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14c0: 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 CONSTRAINT test
14d0: 5f 73 74 65 70 73 5f 63 6f 6e 73 74 72 61 69 6e _steps_constrain
14e0: 74 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 t UNIQUE (test_i
14f0: 64 2c 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 d,stepname,state
1500: 29 29 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 74 ));"). (sqlit
1510: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1520: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e REATE TABLE IF N
1530: 4f 54 20 45 58 49 53 54 53 20 65 78 74 72 61 64 OT EXISTS extrad
1540: 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 at (id INTEGER P
1550: 52 49 4d 41 52 59 20 4b 45 59 2c 20 72 75 6e 5f RIMARY KEY, run_
1560: 69 64 20 49 4e 54 45 47 45 52 2c 20 6b 65 79 20 id INTEGER, key
1570: 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 29 3b TEXT, val TEXT);
1580: 22 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a "). (sqlite3:
1590: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
15a0: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
15b0: 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 28 EXISTS metadat (
15c0: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
15d0: 52 59 20 4b 45 59 2c 20 76 61 72 20 54 45 58 54 RY KEY, var TEXT
15e0: 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 , val TEXT,.
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f CO
1610: 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 64 61 74 NSTRAINT metadat
1620: 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 _constraint UNIQ
1630: 55 45 20 28 76 61 72 29 29 3b 22 29 0a 20 20 20 UE (var));").
1640: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
1650: 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 e db "CREATE TAB
1660: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 LE IF NOT EXISTS
1670: 20 61 63 63 65 73 73 5f 6c 6f 67 20 28 69 64 20 access_log (id
1680: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
1690: 4b 45 59 2c 20 75 73 65 72 20 54 45 58 54 2c 20 KEY, user TEXT,
16a0: 61 63 63 65 73 73 65 64 20 54 49 4d 45 53 54 41 accessed TIMESTA
16b0: 4d 50 2c 20 61 72 67 73 20 54 45 58 54 29 3b 22 MP, args TEXT);"
16c0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ). (sqlite3:e
16d0: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
16e0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
16f0: 58 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 20 XISTS test_meta
1700: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
1710: 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 ARY KEY,.
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 te
1740: 73 74 6e 61 6d 65 20 20 20 20 54 45 58 54 20 44 stname TEXT D
1750: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 EFAULT '',.
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1780: 61 75 74 68 6f 72 20 20 20 20 20 20 54 45 58 54 author TEXT
1790: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c0: 20 20 6f 77 6e 65 72 20 20 20 20 20 20 20 54 45 owner TE
17d0: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1800: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 description
1810: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
1820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1840: 20 20 20 20 20 20 72 65 76 69 65 77 65 64 20 20 reviewed
1850: 20 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 20 TIMESTAMP,.
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1880: 20 20 69 74 65 72 61 74 65 64 20 20 20 20 54 45 iterated TE
1890: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c0: 20 20 20 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 avg_runtime
18d0: 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 REAL,.
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f0: 20 20 20 20 20 20 20 20 20 20 20 61 76 67 5f 64 avg_d
1900: 69 73 6b 20 20 20 20 52 45 41 4c 2c 0a 20 20 20 isk REAL,.
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1930: 20 20 74 61 67 73 20 20 20 20 20 20 20 20 54 45 tags TE
1940: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
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 20 20 20 20 20 20 20 20 20
1970: 20 20 20 20 6a 6f 62 67 72 6f 75 70 20 20 20 20 jobgroup
1980: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 64 65 TEXT DEFAULT 'de
1990: 66 61 75 6c 74 27 2c 0a 20 20 20 20 20 20 20 20 fault',.
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19b0: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
19c0: 4e 54 20 74 65 73 74 5f 6d 65 74 61 5f 63 6f 6e NT test_meta_con
19d0: 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 straint UNIQUE (
19e0: 74 65 73 74 6e 61 6d 65 29 29 3b 22 29 0a 20 20 testname));").
19f0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
1a00: 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 te db "CREATE TA
1a10: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 BLE IF NOT EXIST
1a20: 53 20 74 65 73 74 5f 64 61 74 61 20 28 69 64 20 S test_data (id
1a30: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
1a40: 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 KEY,.
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a60: 20 20 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 test_id INT
1a70: 45 47 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 EGER,.
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a90: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 20 54 category T
1aa0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad0: 76 61 72 69 61 62 6c 65 20 54 45 58 54 2c 0a 09 variable TEXT,..
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1af0: 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 52 45 value RE
1b00: 41 4c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 AL,..
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70 exp
1b20: 65 63 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 20 ected REAL,..
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b40: 20 20 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 tol REAL,.
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 u
1b70: 6e 69 74 73 20 54 45 58 54 2c 0a 20 20 20 20 20 nits TEXT,.
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b90: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 comme
1ba0: 6e 74 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 nt TEXT DEFAULT
1bb0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bd0: 20 20 20 20 73 74 61 74 75 73 20 54 45 58 54 20 status TEXT
1be0: 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 DEFAULT 'n/a',.
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1c10: 79 70 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 ype TEXT DEFAULT
1c20: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c40: 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 CONSTRAINT te
1c50: 73 74 5f 64 61 74 61 5f 63 6f 6e 73 74 72 61 69 st_data_constrai
1c60: 6e 74 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f nt UNIQUE (test_
1c70: 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 id,category,vari
1c80: 61 62 6c 65 29 29 3b 22 29 0a 20 20 20 20 3b 3b able));"). ;;
1c90: 20 4d 75 73 74 20 64 6f 20 74 68 69 73 20 2a 61 Must do this *a
1ca0: 66 74 65 72 2a 20 72 75 6e 6e 69 6e 67 20 70 61 fter* running pa
1cb0: 74 63 68 20 64 62 20 21 21 20 4e 6f 20 6d 6f 72 tch db !! No mor
1cc0: 65 2e 20 0a 20 20 20 20 28 64 62 3a 73 65 74 2d e. . (db:set-
1cd0: 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 var db "MEGATEST
1ce0: 5f 56 45 52 53 49 4f 4e 22 20 6d 65 67 61 74 65 _VERSION" megate
1cf0: 73 74 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 st-version).
1d00: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
1d10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
1d50: 54 4f 44 4f 3a 0a 3b 3b 20 20 20 70 75 74 20 64 TODO:.;; put d
1d60: 65 6c 74 61 73 20 69 6e 74 6f 20 61 6e 20 61 73 eltas into an as
1d70: 73 6f 63 20 6c 69 73 74 20 77 69 74 68 20 76 65 soc list with ve
1d80: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 0a 3b 3b rsion numbers.;;
1d90: 20 20 20 61 70 70 6c 79 20 61 6c 6c 20 66 72 6f apply all fro
1da0: 6d 20 6c 61 73 74 20 74 6f 20 63 75 72 72 65 6e m last to curren
1db0: 74 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d t.;;============
1dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 28 64 65 66 69 ==========.(defi
1e00: 6e 65 20 28 70 61 74 63 68 2d 64 62 20 64 62 29 ne (patch-db db)
1e10: 0a 20 20 28 68 61 6e 64 6c 65 2d 65 78 63 65 70 . (handle-excep
1e20: 74 69 6f 6e 73 0a 20 20 20 65 78 6e 0a 20 20 20 tions. exn.
1e30: 28 62 65 67 69 6e 0a 20 20 20 20 20 28 70 72 69 (begin. (pri
1e40: 6e 74 20 22 45 78 63 65 70 74 69 6f 6e 3a 20 22 nt "Exception: "
1e50: 20 65 78 6e 29 0a 20 20 20 20 20 28 70 72 69 6e exn). (prin
1e60: 74 20 22 45 52 52 4f 52 3a 20 50 6f 73 73 69 62 t "ERROR: Possib
1e70: 6c 65 20 6f 75 74 20 6f 66 20 64 61 74 65 20 73 le out of date s
1e80: 63 68 65 6d 61 2c 20 61 74 74 65 6d 70 74 69 6e chema, attemptin
1e90: 67 20 74 6f 20 61 64 64 20 74 61 62 6c 65 20 6d g to add table m
1ea0: 65 74 61 64 61 74 61 2e 2e 2e 22 29 0a 20 20 20 etadata...").
1eb0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
1ec0: 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 te db "CREATE TA
1ed0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 BLE IF NOT EXIST
1ee0: 53 20 6d 65 74 61 64 61 74 20 28 69 64 20 49 4e S metadat (id IN
1ef0: 54 45 47 45 52 2c 20 76 61 72 20 54 45 58 54 2c TEGER, var TEXT,
1f00: 20 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 val TEXT,.
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 CONS
1f30: 54 52 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 TRAINT metadat_c
1f40: 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 onstraint UNIQUE
1f50: 20 28 76 61 72 29 29 3b 22 29 0a 20 20 20 20 20 (var));").
1f60: 28 69 66 20 28 6e 6f 74 20 28 64 62 3a 67 65 74 (if (not (db:get
1f70: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
1f80: 54 5f 56 45 52 53 49 4f 4e 22 29 29 0a 09 20 28 T_VERSION")).. (
1f90: 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d db:set-var db "M
1fa0: 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 EGATEST_VERSION"
1fb0: 20 31 2e 31 37 29 29 29 0a 20 20 20 28 6c 65 74 1.17))). (let
1fc0: 20 28 28 6d 76 65 72 20 28 64 62 3a 67 65 74 2d ((mver (db:get-
1fd0: 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 var db "MEGATEST
1fe0: 5f 56 45 52 53 49 4f 4e 22 29 29 0a 09 20 28 74 _VERSION")).. (t
1ff0: 65 73 74 2d 6d 65 74 61 2d 64 65 66 20 22 43 52 est-meta-def "CR
2000: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f EATE TABLE IF NO
2010: 54 20 45 58 49 53 54 53 20 74 65 73 74 5f 6d 65 T EXISTS test_me
2020: 74 61 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 ta (id INTEGER P
2030: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 RIMARY KEY,.
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2060: 20 74 65 73 74 6e 61 6d 65 20 20 20 20 54 45 58 testname TEX
2070: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20a0: 20 20 20 61 75 74 68 6f 72 20 20 20 20 20 20 54 author T
20b0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20e0: 20 20 20 20 20 6f 77 6e 65 72 20 20 20 20 20 20 owner
20f0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
2100: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2120: 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69 descripti
2130: 6f 6e 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 on TEXT DEFAULT
2140: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2160: 20 20 20 20 20 20 20 20 20 72 65 76 69 65 77 65 reviewe
2170: 64 20 20 20 20 54 49 4d 45 53 54 41 4d 50 2c 0a d TIMESTAMP,.
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21a0: 20 20 20 20 20 69 74 65 72 61 74 65 64 20 20 20 iterated
21b0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
21c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21e0: 20 20 20 20 20 20 20 61 76 67 5f 72 75 6e 74 69 avg_runti
21f0: 6d 65 20 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 me REAL,.
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 76 av
2220: 67 5f 64 69 73 6b 20 20 20 20 52 45 41 4c 2c 0a g_disk REAL,.
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 20 20 20 20 74 61 67 73 20 20 20 20 20 20 20 tags
2260: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
2270: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2290: 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 CONSTRAINT tes
22a0: 74 5f 6d 65 74 61 5f 63 6f 6e 73 74 72 61 69 6e t_meta_constrain
22b0: 74 20 55 4e 49 51 55 45 20 28 74 65 73 74 6e 61 t UNIQUE (testna
22c0: 6d 65 29 29 3b 22 29 29 0a 20 20 20 20 20 28 70 me));")). (p
22d0: 72 69 6e 74 20 22 43 75 72 72 65 6e 74 20 73 63 rint "Current sc
22e0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 3a 20 22 20 hema version: "
22f0: 6d 76 65 72 20 22 20 63 75 72 72 65 6e 74 20 6d mver " current m
2300: 65 67 61 74 65 73 74 20 76 65 72 73 69 6f 6e 3a egatest version:
2310: 20 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 " megatest-vers
2320: 69 6f 6e 29 0a 20 20 20 20 20 28 63 6f 6e 64 0a ion). (cond.
2330: 20 20 20 20 20 20 28 28 6e 6f 74 20 6d 76 65 72 ((not mver
2340: 29 0a 20 20 20 20 20 20 20 28 70 72 69 6e 74 20 ). (print
2350: 22 41 64 64 69 6e 67 20 6d 65 67 61 74 65 73 74 "Adding megatest
2360: 2d 76 65 72 73 69 6f 6e 20 74 6f 20 6d 65 74 61 -version to meta
2370: 64 61 74 61 22 29 20 3b 3b 20 4e 65 65 64 20 74 data") ;; Need t
2380: 6f 20 72 65 63 72 65 61 74 65 20 74 68 65 20 74 o recreate the t
2390: 61 62 6c 65 0a 20 20 20 20 20 20 20 28 73 71 6c able. (sql
23a0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
23b0: 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 "DROP TABLE IF E
23c0: 58 49 53 54 53 20 6d 65 74 61 64 61 74 3b 22 29 XISTS metadat;")
23d0: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
23e0: 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 :execute db "CRE
23f0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 ATE TABLE IF NOT
2400: 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 EXISTS metadat
2410: 28 69 64 20 49 4e 54 45 47 45 52 2c 20 76 61 72 (id INTEGER, var
2420: 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c TEXT, val TEXT,
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2450: 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 CONSTRAINT me
2460: 74 61 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 tadat_constraint
2470: 20 55 4e 49 51 55 45 20 28 76 61 72 29 29 3b 22 UNIQUE (var));"
2480: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 ). (db:set
2490: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
24a0: 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 31 37 29 T_VERSION" 1.17)
24b0: 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 . (patch-d
24c0: 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 b)). ((< mv
24d0: 65 72 20 31 2e 32 31 29 0a 20 20 20 20 20 20 20 er 1.21).
24e0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
24f0: 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 db "DROP TABLE
2500: 49 46 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 IF EXISTS metada
2510: 74 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c t;"). (sql
2520: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
2530: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
2540: 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 74 61 NOT EXISTS meta
2550: 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 2c dat (id INTEGER,
2560: 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c 20 54 var TEXT, val T
2570: 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 EXT,.
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2590: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e CONSTRAIN
25a0: 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 72 T metadat_constr
25b0: 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 61 72 aint UNIQUE (var
25c0: 29 29 3b 22 29 0a 20 20 20 20 20 20 20 28 64 62 ));"). (db
25d0: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
25e0: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 ATEST_VERSION" 1
25f0: 2e 32 31 29 20 3b 3b 20 73 65 74 20 62 65 66 6f .21) ;; set befo
2600: 72 65 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 65 re, just in case
2610: 20 74 68 65 20 63 68 61 6e 67 65 73 20 61 72 65 the changes are
2620: 20 61 6c 72 65 61 64 79 20 61 70 70 6c 69 65 64 already applied
2630: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2640: 3a 65 78 65 63 75 74 65 20 64 62 20 74 65 73 74 :execute db test
2650: 2d 6d 65 74 61 2d 64 65 66 29 0a 09 09 09 09 09 -meta-def)......
2660: 3b 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 09 09 ;(for-each .....
2670: 09 3b 20 28 6c 61 6d 62 64 61 20 28 73 74 6d 74 .; (lambda (stmt
2680: 29 0a 09 09 09 09 09 3b 20 20 20 28 73 71 6c 69 )......; (sqli
2690: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 73 te3:execute db s
26a0: 74 6d 74 29 29 0a 09 09 09 09 09 3b 20 28 6c 69 tmt))......; (li
26b0: 73 74 20 0a 09 09 09 09 09 3b 20 20 22 41 4c 54 st ......; "ALT
26c0: 45 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 ER TABLE tests A
26d0: 44 44 20 43 4f 4c 55 4d 4e 20 66 69 72 73 74 5f DD COLUMN first_
26e0: 65 72 72 20 54 45 58 54 3b 22 0a 09 09 09 09 09 err TEXT;"......
26f0: 3b 20 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 ; "ALTER TABLE
2700: 74 65 73 74 73 20 41 44 44 20 43 4f 4c 55 4d 4e tests ADD COLUMN
2710: 20 66 69 72 73 74 5f 77 61 72 6e 20 54 45 58 54 first_warn TEXT
2720: 3b 22 0a 09 09 09 09 09 3b 20 20 29 29 0a 20 20 ;"......; )).
2730: 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 (patch-db))
2740: 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 . ((< mver
2750: 31 2e 32 34 29 0a 20 20 20 20 20 20 20 28 64 62 1.24). (db
2760: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
2770: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 ATEST_VERSION" 1
2780: 2e 32 34 29 0a 20 20 20 20 20 20 20 28 73 71 6c .24). (sql
2790: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
27a0: 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 "DROP TABLE IF E
27b0: 58 49 53 54 53 20 74 65 73 74 5f 64 61 74 61 3b XISTS test_data;
27c0: 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 "). (sqlit
27d0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
27e0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 ROP TABLE IF EXI
27f0: 53 54 53 20 74 65 73 74 5f 6d 65 74 61 3b 22 29 STS test_meta;")
2800: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2810: 3a 65 78 65 63 75 74 65 20 64 62 20 74 65 73 74 :execute db test
2820: 2d 6d 65 74 61 2d 64 65 66 29 0a 20 20 20 20 20 -meta-def).
2830: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
2840: 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 te db "CREATE TA
2850: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 BLE IF NOT EXIST
2860: 53 20 74 65 73 74 5f 64 61 74 61 20 28 69 64 20 S test_data (id
2870: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
2880: 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 KEY,.
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a0: 20 20 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 test_id INT
28b0: 45 47 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 EGER,.
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28d0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 20 54 category T
28e0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2910: 76 61 72 69 61 62 6c 65 20 54 45 58 54 2c 0a 09 variable TEXT,..
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2930: 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 52 45 value RE
2940: 41 4c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 AL,..
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70 exp
2960: 65 63 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 20 ected REAL,..
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2980: 20 20 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 tol REAL,.
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 u
29b0: 6e 69 74 73 20 54 45 58 54 2c 0a 20 20 20 20 20 nits TEXT,.
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29d0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 comme
29e0: 6e 74 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 nt TEXT DEFAULT
29f0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a10: 20 20 20 20 73 74 61 74 75 73 20 54 45 58 54 20 status TEXT
2a20: 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 DEFAULT 'n/a',.
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e CON
2a50: 53 54 52 41 49 4e 54 20 74 65 73 74 5f 64 61 74 STRAINT test_dat
2a60: 61 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 a UNIQUE (test_i
2a70: 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 d,category,varia
2a80: 62 6c 65 29 29 3b 22 29 0a 20 20 20 20 20 20 20 ble));").
2a90: 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e 47 3a (print "WARNING:
2aa0: 20 54 61 62 6c 65 20 74 65 73 74 5f 64 61 74 61 Table test_data
2ab0: 20 61 6e 64 20 74 65 73 74 5f 6d 65 74 61 20 77 and test_meta w
2ac0: 65 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 50 ere recreated. P
2ad0: 6c 65 61 73 65 20 64 6f 20 6d 65 67 61 74 65 73 lease do megates
2ae0: 74 20 2d 75 70 64 61 74 65 2d 6d 65 74 61 22 29 t -update-meta")
2af0: 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 . (patch-d
2b00: 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 b)). ((< mv
2b10: 65 72 20 31 2e 32 37 29 0a 20 20 20 20 20 20 20 er 1.27).
2b20: 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 (db:set-var db "
2b30: 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e MEGATEST_VERSION
2b40: 22 20 31 2e 32 37 29 0a 20 20 20 20 20 20 20 28 " 1.27). (
2b50: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
2b60: 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 db "ALTER TABLE
2b70: 74 65 73 74 5f 64 61 74 61 20 41 44 44 20 43 4f test_data ADD CO
2b80: 4c 55 4d 4e 20 74 79 70 65 20 54 45 58 54 20 44 LUMN type TEXT D
2b90: 45 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 EFAULT '';").
2ba0: 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 0a (patch-db)).
2bb0: 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 31 ((< mver 1
2bc0: 2e 32 39 29 0a 20 20 20 20 20 20 20 28 64 62 3a .29). (db:
2bd0: 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 set-var db "MEGA
2be0: 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e TEST_VERSION" 1.
2bf0: 32 39 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 29). (sqli
2c00: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
2c10: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 ALTER TABLE test
2c20: 5f 73 74 65 70 73 20 41 44 44 20 43 4f 4c 55 4d _steps ADD COLUM
2c30: 4e 20 6c 6f 67 66 69 6c 65 20 54 45 58 54 20 44 N logfile TEXT D
2c40: 45 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 EFAULT '';").
2c50: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
2c60: 63 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 cute db "ALTER T
2c70: 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 ABLE tests ADD C
2c80: 4f 4c 55 4d 4e 20 73 68 6f 72 74 64 69 72 20 54 OLUMN shortdir T
2c90: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 EXT DEFAULT '';"
2ca0: 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 )). ((< mve
2cb0: 72 20 31 2e 33 36 29 0a 20 20 20 20 20 20 20 28 r 1.36). (
2cc0: 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d db:set-var db "M
2cd0: 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 EGATEST_VERSION"
2ce0: 20 31 2e 33 36 29 0a 20 20 20 20 20 20 20 28 73 1.36). (s
2cf0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
2d00: 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 b "ALTER TABLE t
2d10: 65 73 74 5f 6d 65 74 61 20 41 44 44 20 43 4f 4c est_meta ADD COL
2d20: 55 4d 4e 20 6a 6f 62 67 72 6f 75 70 20 54 45 58 UMN jobgroup TEX
2d30: 54 20 44 45 46 41 55 4c 54 20 27 64 65 66 61 75 T DEFAULT 'defau
2d40: 6c 74 27 3b 22 29 29 0a 20 20 20 20 20 20 28 28 lt';")). ((
2d50: 3c 20 6d 76 65 72 20 31 2e 33 37 29 0a 20 20 20 < mver 1.37).
2d60: 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 (db:set-var
2d70: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
2d80: 53 49 4f 4e 22 20 31 2e 33 37 29 0a 20 20 20 20 SION" 1.37).
2d90: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
2da0: 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 ute db "ALTER TA
2db0: 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 4f BLE tests ADD CO
2dc0: 4c 55 4d 4e 20 61 72 63 68 69 76 65 64 20 49 4e LUMN archived IN
2dd0: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 3b TEGER DEFAULT 0;
2de0: 22 29 29 20 0a 20 20 20 20 20 20 28 28 3c 20 6d ")) . ((< m
2df0: 76 65 72 20 6d 65 67 61 74 65 73 74 2d 76 65 72 ver megatest-ver
2e00: 73 69 6f 6e 29 0a 20 20 20 20 20 20 20 28 64 62 sion). (db
2e10: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
2e20: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 6d ATEST_VERSION" m
2e30: 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f 6e 29 egatest-version)
2e40: 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d )))))..;;=======
2e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2e60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2e70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2e80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
2e90: 3b 3b 20 6d 65 74 61 20 67 65 74 20 61 6e 64 20 ;; meta get and
2ea0: 73 65 74 20 76 61 72 73 0a 3b 3b 3d 3d 3d 3d 3d set vars.;;=====
2eb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ee0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ef0: 3d 0a 0a 3b 3b 20 72 65 74 75 72 6e 73 20 6e 75 =..;; returns nu
2f00: 6d 62 65 72 20 69 66 20 73 74 72 69 6e 67 2d 3e mber if string->
2f10: 6e 75 6d 62 65 72 20 69 73 20 73 75 63 63 65 73 number is succes
2f20: 73 66 75 6c 2c 20 73 74 72 69 6e 67 20 6f 74 68 sful, string oth
2f30: 65 72 77 69 73 65 0a 28 64 65 66 69 6e 65 20 28 erwise.(define (
2f40: 64 62 3a 67 65 74 2d 76 61 72 20 64 62 20 76 61 db:get-var db va
2f50: 72 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 r). (let ((res
2f60: 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 #f)). (sqlite
2f70: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 3:for-each-row.
2f80: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 76 61 6c (lambda (val
2f90: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
2fa0: 65 73 20 76 61 6c 29 29 0a 20 20 20 20 20 64 62 es val)). db
2fb0: 20 22 53 45 4c 45 43 54 20 76 61 6c 20 46 52 4f "SELECT val FRO
2fc0: 4d 20 6d 65 74 61 64 61 74 20 57 48 45 52 45 20 M metadat WHERE
2fd0: 76 61 72 3d 3f 3b 22 20 76 61 72 29 0a 20 20 20 var=?;" var).
2fe0: 20 28 69 66 20 28 73 74 72 69 6e 67 3f 20 72 65 (if (string? re
2ff0: 73 29 0a 09 28 6c 65 74 20 28 28 76 61 6c 6e 75 s)..(let ((valnu
3000: 6d 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 m (string->numbe
3010: 72 20 72 65 73 29 29 29 0a 09 20 20 28 69 66 20 r res))).. (if
3020: 76 61 6c 6e 75 6d 20 76 61 6c 6e 75 6d 20 72 65 valnum valnum re
3030: 73 29 29 0a 09 72 65 73 29 29 29 0a 0a 28 64 65 s))..res)))..(de
3040: 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 76 61 72 fine (db:set-var
3050: 20 64 62 20 76 61 72 20 76 61 6c 29 0a 20 20 28 db var val). (
3060: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
3070: 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 db "INSERT OR RE
3080: 50 4c 41 43 45 20 49 4e 54 4f 20 6d 65 74 61 64 PLACE INTO metad
3090: 61 74 20 28 76 61 72 2c 76 61 6c 29 20 56 41 4c at (var,val) VAL
30a0: 55 45 53 20 28 3f 2c 3f 29 3b 22 20 76 61 72 20 UES (?,?);" var
30b0: 76 61 6c 29 29 0a 0a 3b 3b 20 75 73 65 20 61 20 val))..;; use a
30c0: 67 6c 6f 62 61 6c 20 66 6f 72 20 73 6f 6d 65 20 global for some
30d0: 70 72 69 6d 69 74 69 76 65 20 63 61 63 68 69 6e primitive cachin
30e0: 67 2c 20 69 74 20 69 73 20 6a 75 73 74 20 73 69 g, it is just si
30f0: 6c 6c 79 20 74 6f 20 72 65 2d 72 65 61 64 20 74 lly to re-read t
3100: 68 65 20 64 62 20 0a 3b 3b 20 6f 76 65 72 20 61 he db .;; over a
3110: 6e 64 20 6f 76 65 72 20 61 67 61 69 6e 20 66 6f nd over again fo
3120: 72 20 74 68 65 20 6b 65 79 73 20 73 69 6e 63 65 r the keys since
3130: 20 74 68 65 79 20 6e 65 76 65 72 20 63 68 61 6e they never chan
3140: 67 65 0a 0a 28 64 65 66 69 6e 65 20 2a 64 62 2d ge..(define *db-
3150: 6b 65 79 73 2a 20 23 66 29 0a 0a 28 64 65 66 69 keys* #f)..(defi
3160: 6e 65 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 ne (db:get-keys
3170: 64 62 29 0a 20 20 28 69 66 20 2a 64 62 2d 6b 65 db). (if *db-ke
3180: 79 73 2a 20 2a 64 62 2d 6b 65 79 73 2a 20 0a 20 ys* *db-keys* .
3190: 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 (let ((res
31a0: 27 28 29 29 29 0a 09 28 73 71 6c 69 74 65 33 3a '()))..(sqlite3:
31b0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 for-each-row ..
31c0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 6b 65 79 (lambda (key key
31d0: 74 79 70 65 29 0a 09 20 20 20 28 73 65 74 21 20 type).. (set!
31e0: 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f res (cons (vecto
31f0: 72 20 6b 65 79 20 6b 65 79 74 79 70 65 29 20 72 r key keytype) r
3200: 65 73 29 29 29 0a 09 20 64 62 0a 09 20 22 53 45 es))).. db.. "SE
3210: 4c 45 43 54 20 66 69 65 6c 64 6e 61 6d 65 2c 66 LECT fieldname,f
3220: 69 65 6c 64 74 79 70 65 20 46 52 4f 4d 20 6b 65 ieldtype FROM ke
3230: 79 73 20 4f 52 44 45 52 20 42 59 20 69 64 20 44 ys ORDER BY id D
3240: 45 53 43 3b 22 29 0a 09 28 73 65 74 21 20 2a 64 ESC;")..(set! *d
3250: 62 2d 6b 65 79 73 2a 20 72 65 73 29 0a 09 72 65 b-keys* res)..re
3260: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 s)))..(define (d
3270: 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 b:get-value-by-h
3280: 65 61 64 65 72 20 72 6f 77 20 68 65 61 64 65 72 eader row header
3290: 20 66 69 65 6c 64 29 0a 20 20 3b 3b 20 28 64 65 field). ;; (de
32a0: 62 75 67 3a 70 72 69 6e 74 20 32 20 22 64 62 3a bug:print 2 "db:
32b0: 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 get-value-by-hea
32c0: 64 65 72 20 72 6f 77 3a 20 22 20 72 6f 77 20 22 der row: " row "
32d0: 20 68 65 61 64 65 72 3a 20 22 20 68 65 61 64 65 header: " heade
32e0: 72 20 22 20 66 69 65 6c 64 3a 20 22 20 66 69 65 r " field: " fie
32f0: 6c 64 29 0a 20 20 28 69 66 20 28 6e 75 6c 6c 3f ld). (if (null?
3300: 20 68 65 61 64 65 72 29 20 23 66 0a 20 20 20 20 header) #f.
3310: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 68 65 (let loop ((he
3320: 64 20 28 63 61 72 20 68 65 61 64 65 72 29 29 0a d (car header)).
3330: 09 09 20 28 74 61 6c 20 28 63 64 72 20 68 65 61 .. (tal (cdr hea
3340: 64 65 72 29 29 0a 09 09 20 28 6e 20 20 20 30 29 der))... (n 0)
3350: 29 0a 09 28 69 66 20 28 65 71 75 61 6c 3f 20 68 )..(if (equal? h
3360: 65 64 20 66 69 65 6c 64 29 0a 09 20 20 20 20 28 ed field).. (
3370: 76 65 63 74 6f 72 2d 72 65 66 20 72 6f 77 20 6e vector-ref row n
3380: 29 0a 09 20 20 20 20 28 69 66 20 28 6e 75 6c 6c ).. (if (null
3390: 3f 20 74 61 6c 29 20 23 66 20 28 6c 6f 6f 70 20 ? tal) #f (loop
33a0: 28 63 61 72 20 74 61 6c 29 28 63 64 72 20 74 61 (car tal)(cdr ta
33b0: 6c 29 28 2b 20 6e 20 31 29 29 29 29 29 29 29 0a l)(+ n 1))))))).
33c0: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
33d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
33e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
33f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3400: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 52 20 =========.;; R
3410: 55 20 4e 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d U N S.;;========
3420: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
3460: 28 64 65 66 69 6e 65 20 28 72 75 6e 73 3a 67 65 (define (runs:ge
3470: 74 2d 73 74 64 2d 72 75 6e 2d 66 69 65 6c 64 73 t-std-run-fields
3480: 20 6b 65 79 73 20 72 65 6d 66 69 65 6c 64 73 29 keys remfields)
3490: 0a 20 20 28 6c 65 74 2a 20 28 28 68 65 61 64 65 . (let* ((heade
34a0: 72 20 20 20 20 28 61 70 70 65 6e 64 20 28 6d 61 r (append (ma
34b0: 70 20 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e p key:get-fieldn
34c0: 61 6d 65 20 6b 65 79 73 29 0a 09 09 09 20 20 20 ame keys)....
34d0: 20 72 65 6d 66 69 65 6c 64 73 29 29 0a 09 20 28 remfields)).. (
34e0: 6b 65 79 73 74 72 20 20 20 20 28 63 6f 6e 63 20 keystr (conc
34f0: 28 6b 65 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 (keys->keystr ke
3500: 79 73 29 20 22 2c 22 0a 09 09 09 20 20 28 73 74 ys) ",".... (st
3510: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse
3520: 20 72 65 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 remfields ","))
3530: 29 29 0a 20 20 20 20 28 6c 69 73 74 20 6b 65 79 )). (list key
3540: 73 74 72 20 68 65 61 64 65 72 29 29 29 0a 0a 3b str header)))..;
3550: 3b 20 6d 61 6b 65 20 61 20 71 75 65 72 79 20 28 ; make a query (
3560: 66 69 65 6c 64 6e 61 6d 65 20 6c 69 6b 65 20 27 fieldname like '
3570: 70 61 74 74 31 27 20 4f 52 20 66 69 65 6c 64 6e patt1' OR fieldn
3580: 61 6d 65 20 0a 28 64 65 66 69 6e 65 20 28 64 62 ame .(define (db
3590: 3a 70 61 74 74 2d 3e 6c 69 6b 65 20 66 69 65 6c :patt->like fiel
35a0: 64 6e 61 6d 65 20 70 61 74 74 73 74 72 20 23 21 dname pattstr #!
35b0: 6b 65 79 20 28 63 6f 6d 70 61 72 61 74 6f 72 20 key (comparator
35c0: 22 20 4f 52 20 22 29 29 0a 20 20 28 6c 65 74 20 " OR ")). (let
35d0: 28 28 70 61 74 74 73 20 28 69 66 20 28 73 74 72 ((patts (if (str
35e0: 69 6e 67 3f 20 70 61 74 74 73 74 72 29 0a 09 09 ing? pattstr)...
35f0: 20 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 (string-split
3600: 20 70 61 74 74 73 74 72 20 22 2c 22 29 0a 09 09 pattstr ",")...
3610: 20 20 20 27 28 22 25 22 29 29 29 29 0a 20 20 20 '("%")))).
3620: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 (string-intersp
3630: 65 72 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 erse (map (lambd
3640: 61 20 28 70 61 74 74 29 0a 09 09 09 20 20 20 20 a (patt)....
3650: 20 20 20 28 63 6f 6e 63 20 66 69 65 6c 64 6e 61 (conc fieldna
3660: 6d 65 20 22 20 4c 49 4b 45 20 27 22 20 70 61 74 me " LIKE '" pat
3670: 74 20 22 27 22 29 29 0a 09 09 09 20 20 20 20 20 t "'"))....
3680: 28 69 66 20 28 6e 75 6c 6c 3f 20 70 61 74 74 73 (if (null? patts
3690: 29 0a 09 09 09 09 20 27 28 22 22 29 0a 09 09 09 )..... '("")....
36a0: 09 20 70 61 74 74 73 29 29 0a 09 09 09 63 6f 6d . patts))....com
36b0: 70 61 72 61 74 6f 72 29 29 29 0a 0a 3b 3b 20 72 parator)))..;; r
36c0: 65 70 6c 61 63 65 20 68 65 61 64 65 72 20 61 6e eplace header an
36d0: 64 20 6b 65 79 73 74 72 20 77 69 74 68 20 61 20 d keystr with a
36e0: 63 61 6c 6c 20 74 6f 20 72 75 6e 73 3a 67 65 74 call to runs:get
36f0: 2d 73 74 64 2d 72 75 6e 2d 66 69 65 6c 64 73 0a -std-run-fields.
3700: 3b 3b 0a 3b 3b 20 6b 65 79 70 61 74 74 73 3a 20 ;;.;; keypatts:
3710: 28 20 28 4b 45 59 31 20 22 61 62 63 25 64 65 66 ( (KEY1 "abc%def
3720: 22 29 28 4b 45 59 32 20 22 25 22 29 20 29 0a 3b ")(KEY2 "%") ).;
3730: 3b 20 72 75 6e 70 61 74 74 73 3a 20 70 61 74 74 ; runpatts: patt
3740: 31 2c 70 61 74 74 32 20 2e 2e 2e 0a 3b 3b 0a 28 1,patt2 ....;;.(
3750: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 72 define (db:get-r
3760: 75 6e 73 20 64 62 20 72 75 6e 70 61 74 74 20 63 uns db runpatt c
3770: 6f 75 6e 74 20 6f 66 66 73 65 74 20 6b 65 79 70 ount offset keyp
3780: 61 74 74 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 atts). (let* ((
3790: 72 65 73 20 20 20 20 20 20 20 27 28 29 29 0a 09 res '())..
37a0: 20 28 6b 65 79 73 20 20 20 20 20 20 20 28 64 62 (keys (db
37b0: 3a 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 :get-keys db))..
37c0: 20 28 72 75 6e 70 61 74 74 73 74 72 20 28 64 62 (runpattstr (db
37d0: 3a 70 61 74 74 2d 3e 6c 69 6b 65 20 22 72 75 6e :patt->like "run
37e0: 6e 61 6d 65 22 20 72 75 6e 70 61 74 74 29 29 0a name" runpatt)).
37f0: 09 20 28 72 65 6d 66 69 65 6c 64 73 20 20 28 6c . (remfields (l
3800: 69 73 74 20 22 69 64 22 20 22 72 75 6e 6e 61 6d ist "id" "runnam
3810: 65 22 20 22 73 74 61 74 65 22 20 22 73 74 61 74 e" "state" "stat
3820: 75 73 22 20 22 6f 77 6e 65 72 22 20 22 65 76 65 us" "owner" "eve
3830: 6e 74 5f 74 69 6d 65 22 29 29 0a 09 20 28 68 65 nt_time")).. (he
3840: 61 64 65 72 20 20 20 20 20 28 61 70 70 65 6e 64 ader (append
3850: 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 69 (map key:get-fi
3860: 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 09 eldname keys)...
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d rem
3880: 66 69 65 6c 64 73 29 29 0a 09 20 28 6b 65 79 73 fields)).. (keys
3890: 74 72 20 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 tr (conc (ke
38a0: 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 ys->keystr keys)
38b0: 20 22 2c 22 0a 09 09 20 20 20 20 20 20 20 20 20 ","...
38c0: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
38d0: 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 perse remfields
38e0: 22 2c 22 29 29 29 0a 09 20 28 71 72 79 73 74 72 ","))).. (qrystr
38f0: 20 20 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 (conc "SELE
3900: 43 54 20 22 20 6b 65 79 73 74 72 20 22 20 46 52 CT " keystr " FR
3910: 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 28 22 OM runs WHERE ("
3920: 20 72 75 6e 70 61 74 74 73 74 72 20 22 29 20 22 runpattstr ") "
3930: 20 3b 3b 20 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 ;; runname LIKE
3940: 20 3f 20 22 0a 09 09 20 20 20 20 20 20 20 20 20 ? "...
3950: 20 20 3b 3b 20 47 65 6e 65 72 61 74 65 3a 20 22 ;; Generate: "
3960: 20 41 4e 44 20 78 20 4c 49 4b 45 20 27 6b 65 79 AND x LIKE 'key
3970: 70 61 74 74 27 20 2e 2e 2e 22 0a 09 09 20 20 20 patt' ..."...
3980: 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 75 6c (if (nul
3990: 6c 3f 20 6b 65 79 70 61 74 74 73 29 20 22 22 0a l? keypatts) "".
39a0: 09 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
39b0: 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 0a 09 (conc " AND "..
39c0: 09 20 20 20 20 20 20 20 20 20 09 20 20 20 20 28 . . (
39d0: 73 74 72 69 6e 67 2d 6a 6f 69 6e 20 0a 09 09 20 string-join ...
39e0: 20 20 20 20 20 20 20 20 09 20 20 20 20 20 28 6d . (m
39f0: 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 70 ap (lambda (keyp
3a00: 61 74 74 29 0a 09 09 20 20 20 20 20 20 20 20 20 att)...
3a10: 09 09 20 20 20 20 28 6c 65 74 20 28 28 6b 65 79 .. (let ((key
3a20: 20 20 28 63 61 72 20 6b 65 79 70 61 74 74 29 29 (car keypatt))
3a30: 0a 09 09 20 20 20 20 20 20 20 20 20 09 09 09 20 ... ...
3a40: 20 28 70 61 74 74 20 28 63 61 64 72 20 6b 65 79 (patt (cadr key
3a50: 70 61 74 74 29 29 29 0a 09 09 20 20 20 20 20 20 patt)))...
3a60: 20 20 20 09 09 20 20 20 20 20 20 28 64 62 3a 70 .. (db:p
3a70: 61 74 74 2d 3e 6c 69 6b 65 20 6b 65 79 20 70 61 att->like key pa
3a80: 74 74 29 29 29 0a 09 09 20 20 20 20 20 20 20 20 tt)))...
3a90: 20 09 09 20 20 6b 65 79 70 61 74 74 73 29 0a 09 .. keypatts)..
3aa0: 09 20 20 20 20 20 20 20 20 20 09 20 20 20 20 20 . .
3ab0: 22 20 41 4e 44 20 22 29 29 29 0a 09 09 20 20 20 " AND ")))...
3ac0: 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 " ORDER
3ad0: 42 59 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 45 BY event_time DE
3ae0: 53 43 20 22 0a 09 09 20 20 20 20 20 20 20 20 20 SC "...
3af0: 20 20 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 63 (if (number? c
3b00: 6f 75 6e 74 29 0a 09 09 20 20 20 20 20 20 20 20 ount)...
3b10: 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20 4c (conc " L
3b20: 49 4d 49 54 20 22 20 63 6f 75 6e 74 29 0a 09 09 IMIT " count)...
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
3b40: 22 29 0a 09 09 20 20 20 20 20 20 20 20 20 20 20 ")...
3b50: 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 6f 66 66 (if (number? off
3b60: 73 65 74 29 0a 09 09 20 20 20 20 20 20 20 20 20 set)...
3b70: 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20 4f 46 (conc " OF
3b80: 46 53 45 54 20 22 20 6f 66 66 73 65 74 29 0a 09 FSET " offset)..
3b90: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3ba0: 22 22 29 29 29 29 0a 20 20 20 20 28 64 65 62 75 "")))). (debu
3bb0: 67 3a 70 72 69 6e 74 20 38 20 22 49 4e 46 4f 3a g:print 8 "INFO:
3bc0: 20 64 62 3a 67 65 74 2d 72 75 6e 73 20 71 72 79 db:get-runs qry
3bd0: 73 74 72 3a 20 22 20 71 72 79 73 74 72 20 22 5c str: " qrystr "\
3be0: 6e 6b 65 79 70 61 74 74 73 3a 20 22 20 6b 65 79 nkeypatts: " key
3bf0: 70 61 74 74 73 20 22 5c 6e 20 20 6f 66 66 73 65 patts "\n offse
3c00: 74 3a 20 22 20 6f 66 66 73 65 74 20 22 20 6c 69 t: " offset " li
3c10: 6d 69 74 3a 20 22 20 63 6f 75 6e 74 29 0a 20 20 mit: " count).
3c20: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
3c30: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
3c40: 6d 62 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 mbda (a . x).
3c50: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 (set! res (c
3c60: 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 6f ons (apply vecto
3c70: 72 20 61 20 78 29 20 72 65 73 29 29 29 0a 20 20 r a x) res))).
3c80: 20 20 20 64 62 0a 20 20 20 20 20 71 72 79 73 74 db. qryst
3c90: 72 0a 20 20 20 20 20 29 0a 20 20 20 20 28 76 65 r. ). (ve
3ca0: 63 74 6f 72 20 68 65 61 64 65 72 20 72 65 73 29 ctor header res)
3cb0: 29 29 0a 0a 3b 3b 20 6a 75 73 74 20 67 65 74 20 ))..;; just get
3cc0: 63 6f 75 6e 74 20 6f 66 20 72 75 6e 73 0a 28 64 count of runs.(d
3cd0: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 6e 75 efine (db:get-nu
3ce0: 6d 2d 72 75 6e 73 20 64 62 20 72 75 6e 70 61 74 m-runs db runpat
3cf0: 74 29 0a 20 20 28 6c 65 74 20 28 28 6e 75 6d 72 t). (let ((numr
3d00: 75 6e 73 20 30 29 29 0a 20 20 20 20 28 73 71 6c uns 0)). (sql
3d10: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
3d20: 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 w . (lambda
3d30: 28 63 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 28 (count). (
3d40: 73 65 74 21 20 6e 75 6d 72 75 6e 73 20 63 6f 75 set! numruns cou
3d50: 6e 74 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 nt)). db.
3d60: 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 "SELECT COUNT(
3d70: 69 64 29 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 id) FROM runs WH
3d80: 45 52 45 20 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 ERE runname LIKE
3d90: 20 3f 3b 22 20 72 75 6e 70 61 74 74 29 0a 20 20 ?;" runpatt).
3da0: 20 20 6e 75 6d 72 75 6e 73 29 29 0a 0a 3b 3b 20 numruns))..;;
3db0: 75 73 65 20 28 67 65 74 2d 76 61 6c 75 65 2d 62 use (get-value-b
3dc0: 79 2d 68 65 61 64 65 72 20 28 64 62 3a 67 65 74 y-header (db:get
3dd0: 2d 68 65 61 64 65 72 20 72 75 6e 69 6e 66 6f 29 -header runinfo)
3de0: 28 64 62 3a 67 65 74 2d 72 6f 77 20 72 75 6e 69 (db:get-row runi
3df0: 6e 66 6f 29 29 0a 28 64 65 66 69 6e 65 20 28 64 nfo)).(define (d
3e00: 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 64 b:get-run-info d
3e10: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 69 66 20 b run-id). (if
3e20: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f (hash-table-ref/
3e30: 64 65 66 61 75 6c 74 20 2a 72 75 6e 2d 69 6e 66 default *run-inf
3e40: 6f 2d 63 61 63 68 65 2a 20 72 75 6e 2d 69 64 20 o-cache* run-id
3e50: 23 66 29 0a 20 20 20 20 20 20 28 68 61 73 68 2d #f). (hash-
3e60: 74 61 62 6c 65 2d 72 65 66 20 2a 72 75 6e 2d 69 table-ref *run-i
3e70: 6e 66 6f 2d 63 61 63 68 65 2a 20 72 75 6e 2d 69 nfo-cache* run-i
3e80: 64 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 d). (let* (
3e90: 28 72 65 73 20 20 20 20 20 20 23 66 29 0a 09 20 (res #f)..
3ea0: 20 20 20 20 28 6b 65 79 73 20 20 20 20 20 20 28 (keys (
3eb0: 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 29 29 db:get-keys db))
3ec0: 0a 09 20 20 20 20 20 28 72 65 6d 66 69 65 6c 64 .. (remfield
3ed0: 73 20 28 6c 69 73 74 20 22 69 64 22 20 22 72 75 s (list "id" "ru
3ee0: 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 nname" "state" "
3ef0: 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 status" "owner"
3f00: 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 29 0a 09 "event_time"))..
3f10: 20 20 20 20 20 28 68 65 61 64 65 72 20 20 20 20 (header
3f20: 28 61 70 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 (append (map key
3f30: 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b :get-fieldname k
3f40: 65 79 73 29 0a 09 09 09 09 72 65 6d 66 69 65 6c eys).....remfiel
3f50: 64 73 29 29 0a 09 20 20 20 20 20 28 6b 65 79 73 ds)).. (keys
3f60: 74 72 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 79 tr (conc (key
3f70: 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 20 s->keystr keys)
3f80: 22 2c 22 0a 09 09 09 20 20 20 20 20 20 28 73 74 ",".... (st
3f90: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse
3fa0: 20 72 65 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 remfields ","))
3fb0: 29 29 0a 09 3b 3b 20 28 64 65 62 75 67 3a 70 72 ))..;; (debug:pr
3fc0: 69 6e 74 20 30 20 22 64 62 3a 67 65 74 2d 72 75 int 0 "db:get-ru
3fd0: 6e 2d 69 6e 66 6f 20 72 75 6e 2d 69 64 3a 20 22 n-info run-id: "
3fe0: 20 72 75 6e 2d 69 64 20 22 20 68 65 61 64 65 72 run-id " header
3ff0: 3a 20 22 20 68 65 61 64 65 72 20 22 20 6b 65 79 : " header " key
4000: 73 74 72 3a 20 22 20 6b 65 79 73 74 72 29 0a 09 str: " keystr)..
4010: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
4020: 68 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 64 61 20 h-row.. (lambda
4030: 28 61 20 2e 20 78 29 0a 09 20 20 20 28 73 65 74 (a . x).. (set
4040: 21 20 72 65 73 20 28 61 70 70 6c 79 20 76 65 63 ! res (apply vec
4050: 74 6f 72 20 61 20 78 29 29 29 0a 09 20 64 62 0a tor a x))).. db.
4060: 09 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 . (conc "SELECT
4070: 22 20 6b 65 79 73 74 72 20 22 20 46 52 4f 4d 20 " keystr " FROM
4080: 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 3b runs WHERE id=?;
4090: 22 29 0a 09 20 72 75 6e 2d 69 64 29 0a 09 28 6c ").. run-id)..(l
40a0: 65 74 20 28 28 66 69 6e 61 6c 72 65 73 20 28 76 et ((finalres (v
40b0: 65 63 74 6f 72 20 68 65 61 64 65 72 20 72 65 73 ector header res
40c0: 29 29 29 0a 09 20 20 28 68 61 73 68 2d 74 61 62 ))).. (hash-tab
40d0: 6c 65 2d 73 65 74 21 20 2a 72 75 6e 2d 69 6e 66 le-set! *run-inf
40e0: 6f 2d 63 61 63 68 65 2a 20 72 75 6e 2d 69 64 20 o-cache* run-id
40f0: 66 69 6e 61 6c 72 65 73 29 0a 09 20 20 66 69 6e finalres).. fin
4100: 61 6c 72 65 73 29 29 29 29 0a 20 20 0a 28 64 65 alres)))). .(de
4110: 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 63 6f 6d fine (db:set-com
4120: 6d 65 6e 74 2d 66 6f 72 2d 72 75 6e 20 64 62 20 ment-for-run db
4130: 72 75 6e 2d 69 64 20 63 6f 6d 6d 65 6e 74 29 0a run-id comment).
4140: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
4150: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 72 75 te db "UPDATE ru
4160: 6e 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f ns SET comment=?
4170: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 63 6f WHERE id=?;" co
4180: 6d 6d 65 6e 74 20 72 75 6e 2d 69 64 29 29 0a 0a mment run-id))..
4190: 3b 3b 20 64 6f 65 73 20 6e 6f 74 20 28 6f 62 76 ;; does not (obv
41a0: 69 6f 75 73 6c 79 21 29 20 72 65 6d 6f 76 65 64 iously!) removed
41b0: 20 64 65 70 65 6e 64 65 6e 74 20 64 61 74 61 2e dependent data.
41c0: 20 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 .(define (db:de
41d0: 6c 65 74 65 2d 72 75 6e 20 64 62 20 72 75 6e 2d lete-run db run-
41e0: 69 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 id). (sqlite3:e
41f0: 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 xecute db "DELET
4200: 45 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 E FROM runs WHER
4210: 45 20 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 E id=?;" run-id)
4220: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 75 )..(define (db:u
4230: 70 64 61 74 65 2d 72 75 6e 2d 65 76 65 6e 74 5f pdate-run-event_
4240: 74 69 6d 65 20 64 62 20 72 75 6e 2d 69 64 29 0a time db run-id).
4250: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
4260: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 72 75 te db "UPDATE ru
4270: 6e 73 20 53 45 54 20 65 76 65 6e 74 5f 74 69 6d ns SET event_tim
4280: 65 3d 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c e=strftime('%s',
4290: 27 6e 6f 77 27 29 20 57 48 45 52 45 20 69 64 3d 'now') WHERE id=
42a0: 3f 3b 22 20 72 75 6e 2d 69 64 29 29 20 0a 0a 28 ?;" run-id)) ..(
42b0: 64 65 66 69 6e 65 20 28 64 62 3a 6c 6f 63 6b 2f define (db:lock/
42c0: 75 6e 6c 6f 63 6b 2d 72 75 6e 20 64 62 20 72 75 unlock-run db ru
42d0: 6e 2d 69 64 20 6c 6f 63 6b 20 75 6e 6c 6f 63 6b n-id lock unlock
42e0: 20 75 73 65 72 29 0a 20 20 28 6c 65 74 20 28 28 user). (let ((
42f0: 6e 65 77 6c 6f 63 6b 76 61 6c 20 28 69 66 20 6c newlockval (if l
4300: 6f 63 6b 20 22 6c 6f 63 6b 65 64 22 0a 09 09 09 ock "locked"....
4310: 28 69 66 20 75 6e 6c 6f 63 6b 0a 09 09 09 20 20 (if unlock....
4320: 20 20 22 75 6e 6c 6f 63 6b 65 64 22 0a 09 09 09 "unlocked"....
4330: 20 20 20 20 22 6c 6f 63 6b 65 64 22 29 29 29 29 "locked"))))
4340: 20 3b 3b 20 73 65 6d 69 2d 66 61 69 6c 73 61 66 ;; semi-failsaf
4350: 65 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 e. (sqlite3:e
4360: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
4370: 45 20 72 75 6e 73 20 53 45 54 20 73 74 61 74 65 E runs SET state
4380: 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 =? WHERE id=?;"
4390: 6e 65 77 6c 6f 63 6b 76 61 6c 20 72 75 6e 2d 69 newlockval run-i
43a0: 64 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a d). (sqlite3:
43b0: 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 45 execute db "INSE
43c0: 52 54 20 49 4e 54 4f 20 61 63 63 65 73 73 5f 6c RT INTO access_l
43d0: 6f 67 20 28 75 73 65 72 2c 61 63 63 65 73 73 65 og (user,accesse
43e0: 64 2c 61 72 67 73 29 20 56 41 4c 55 45 53 28 3f d,args) VALUES(?
43f0: 2c 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 ,strftime('%s','
4400: 6e 6f 77 27 29 2c 3f 29 3b 22 0a 09 09 20 20 20 now'),?);"...
4410: 20 20 75 73 65 72 20 28 63 6f 6e 63 20 6e 65 77 user (conc new
4420: 6c 6f 63 6b 76 61 6c 20 22 20 22 20 72 75 6e 2d lockval " " run-
4430: 69 64 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a id)). (debug:
4440: 70 72 69 6e 74 20 31 20 22 49 4e 46 4f 3a 20 22 print 1 "INFO: "
4450: 20 6e 65 77 6c 6f 63 6b 76 61 6c 20 22 20 72 75 newlockval " ru
4460: 6e 20 6e 75 6d 62 65 72 20 22 20 72 75 6e 2d 69 n number " run-i
4470: 64 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d d)))..;;========
4480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4490: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
44c0: 3b 20 4b 20 45 20 59 20 53 0a 3b 3b 3d 3d 3d 3d ; K E Y S.;;====
44d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4510: 3d 3d 0a 0a 3b 3b 20 67 65 74 20 6b 65 79 20 76 ==..;; get key v
4520: 61 6c 20 70 61 69 72 73 20 66 6f 72 20 61 20 67 al pairs for a g
4530: 69 76 65 6e 20 72 75 6e 2d 69 64 0a 3b 3b 20 28 iven run-id.;; (
4540: 20 28 46 49 45 4c 44 4e 41 4d 45 31 20 6b 65 79 (FIELDNAME1 key
4550: 76 61 6c 31 29 20 28 46 49 45 4c 44 4e 41 4d 45 val1) (FIELDNAME
4560: 32 20 6b 65 79 76 61 6c 32 29 20 2e 2e 2e 20 29 2 keyval2) ... )
4570: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
4580: 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 64 -key-val-pairs d
4590: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 b run-id). (let
45a0: 2a 20 28 28 6b 65 79 73 20 28 67 65 74 2d 6b 65 * ((keys (get-ke
45b0: 79 73 20 64 62 29 29 0a 09 20 28 72 65 73 20 20 ys db)).. (res
45c0: 27 28 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 '())). (debug
45d0: 3a 70 72 69 6e 74 20 36 20 22 6b 65 79 73 3a 20 :print 6 "keys:
45e0: 22 20 6b 65 79 73 20 22 20 72 75 6e 2d 69 64 3a " keys " run-id:
45f0: 20 22 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 " run-id). (
4600: 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 for-each . (
4610: 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a 20 20 20 lambda (key).
4620: 20 20 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 (let ((qry (
4630: 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 28 conc "SELECT " (
4640: 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d key:get-fieldnam
4650: 65 20 6b 65 79 29 20 22 20 46 52 4f 4d 20 72 75 e key) " FROM ru
4660: 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 ns WHERE id=?;")
4670: 29 29 0a 09 20 3b 3b 20 28 64 65 62 75 67 3a 70 )).. ;; (debug:p
4680: 72 69 6e 74 20 30 20 22 71 72 79 3a 20 22 20 71 rint 0 "qry: " q
4690: 72 79 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 ry).. (sqlite3:f
46a0: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 20 or-each-row ..
46b0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 2d 76 61 6c (lambda (key-val
46c0: 29 0a 09 20 20 20 20 28 73 65 74 21 20 72 65 73 ).. (set! res
46d0: 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 28 6b 65 (cons (list (ke
46e0: 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 y:get-fieldname
46f0: 6b 65 79 29 20 6b 65 79 2d 76 61 6c 29 20 72 65 key) key-val) re
4700: 73 29 29 29 0a 09 20 20 64 62 20 71 72 79 20 72 s))).. db qry r
4710: 75 6e 2d 69 64 29 29 29 0a 20 20 20 20 20 6b 65 un-id))). ke
4720: 79 73 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 ys). (reverse
4730: 20 72 65 73 29 29 29 0a 0a 3b 3b 20 67 65 74 20 res)))..;; get
4740: 6b 65 79 20 76 61 6c 73 20 66 6f 72 20 61 20 67 key vals for a g
4750: 69 76 65 6e 20 72 75 6e 2d 69 64 0a 28 64 65 66 iven run-id.(def
4760: 69 6e 65 20 28 64 62 3a 67 65 74 2d 6b 65 79 2d ine (db:get-key-
4770: 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 0a vals db run-id).
4780: 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 28 (let* ((keys (
4790: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 get-keys db))..
47a0: 28 72 65 73 20 20 27 28 29 29 29 0a 20 20 20 20 (res '())).
47b0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 20 22 (debug:print 6 "
47c0: 6b 65 79 73 3a 20 22 20 6b 65 79 73 20 22 20 72 keys: " keys " r
47d0: 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 un-id: " run-id)
47e0: 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a . (for-each .
47f0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6b 65 (lambda (ke
4800: 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 y). (let (
4810: 28 71 72 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 (qry (conc "SELE
4820: 43 54 20 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 CT " (key:get-fi
4830: 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 22 20 46 eldname key) " F
4840: 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 69 ROM runs WHERE i
4850: 64 3d 3f 3b 22 29 29 29 0a 09 20 3b 3b 20 28 64 d=?;"))).. ;; (d
4860: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 71 72 ebug:print 0 "qr
4870: 79 3a 20 22 20 71 72 79 29 0a 09 20 28 73 71 6c y: " qry).. (sql
4880: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
4890: 77 20 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 6b w .. (lambda (k
48a0: 65 79 2d 76 61 6c 29 0a 09 20 20 20 20 28 73 65 ey-val).. (se
48b0: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 6b 65 79 t! res (cons key
48c0: 2d 76 61 6c 20 72 65 73 29 29 29 0a 09 20 20 64 -val res))).. d
48d0: 62 20 71 72 79 20 72 75 6e 2d 69 64 29 29 29 0a b qry run-id))).
48e0: 20 20 20 20 20 6b 65 79 73 29 0a 20 20 20 20 28 keys). (
48f0: 72 65 76 65 72 73 65 20 72 65 73 29 29 29 0a 0a reverse res)))..
4900: 3b 3b 20 54 68 65 20 74 61 72 67 65 74 20 69 73 ;; The target is
4910: 20 6b 65 79 76 61 6c 31 2f 6b 65 79 76 61 6c 32 keyval1/keyval2
4920: 2e 2e 2e 2c 20 63 61 63 68 65 64 20 69 6e 20 2a ..., cached in *
4930: 74 61 72 67 65 74 2a 20 61 73 20 69 74 20 69 73 target* as it is
4940: 20 75 73 65 64 20 6f 66 74 65 6e 0a 28 64 65 66 used often.(def
4950: 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 61 72 67 ine (db:get-targ
4960: 65 74 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 et db run-id).
4970: 28 69 66 20 2a 74 61 72 67 65 74 2a 0a 20 20 20 (if *target*.
4980: 20 20 20 2a 74 61 72 67 65 74 2a 0a 20 20 20 20 *target*.
4990: 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 76 61 6c (let* ((keyval
49a0: 73 20 28 72 64 62 3a 67 65 74 2d 6b 65 79 2d 76 s (rdb:get-key-v
49b0: 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 29 0a als db run-id)).
49c0: 09 20 20 20 20 20 28 74 68 65 6b 65 79 20 20 28 . (thekey (
49d0: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
49e0: 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 se (map (lambda
49f0: 28 78 29 28 69 66 20 78 20 78 20 22 2d 6e 61 2d (x)(if x x "-na-
4a00: 22 29 29 20 6b 65 79 76 61 6c 73 29 20 22 2f 22 ")) keyvals) "/"
4a10: 29 29 29 0a 09 28 73 65 74 21 20 2a 74 61 72 67 )))..(set! *targ
4a20: 65 74 2a 20 74 68 65 6b 65 79 29 0a 09 74 68 65 et* thekey)..the
4a30: 6b 65 79 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d key)))..;;======
4a40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4a70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4a80: 0a 3b 3b 20 20 54 20 45 20 53 20 54 20 53 0a 3b .;; T E S T S.;
4a90: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
4aa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4ab0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4ac0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4ad0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 73 74 61 74 =======..;; stat
4ae0: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
4af0: 61 72 65 20 6c 69 73 74 73 2c 20 74 75 72 6e 20 are lists, turn
4b00: 74 68 65 6d 20 69 6e 74 6f 20 28 22 50 41 53 53 them into ("PASS
4b10: 22 2c 22 46 41 49 4c 22 2e 2e 2e 29 20 61 6e 64 ","FAIL"...) and
4b20: 20 75 73 65 20 4e 4f 54 20 49 4e 0a 3b 3b 20 69 use NOT IN.;; i
4b30: 2e 65 2e 20 74 68 65 73 65 20 6c 69 73 74 73 20 .e. these lists
4b40: 64 65 66 69 6e 65 20 77 68 61 74 20 74 6f 20 4e define what to N
4b50: 4f 54 20 73 68 6f 77 2e 0a 3b 3b 20 73 74 61 74 OT show..;; stat
4b60: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
4b70: 61 72 65 20 72 65 71 75 69 72 65 64 20 74 6f 20 are required to
4b80: 62 65 20 6c 69 73 74 73 2c 20 65 6d 70 74 79 20 be lists, empty
4b90: 69 73 20 6f 6b 0a 3b 3b 20 6e 6f 74 2d 69 6e 20 is ok.;; not-in
4ba0: 23 74 20 3d 20 61 62 6f 76 65 20 62 65 68 61 76 #t = above behav
4bb0: 69 6f 75 72 2c 20 23 66 20 3d 20 6d 75 73 74 20 iour, #f = must
4bc0: 6d 61 74 63 68 0a 28 64 65 66 69 6e 65 20 28 64 match.(define (d
4bd0: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b:get-tests-for-
4be0: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 run db run-id te
4bf0: 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 stpatt itempatt
4c00: 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 20 states statuses
4c10: 0a 09 09 09 20 20 20 20 20 20 23 21 6b 65 79 20 .... #!key
4c20: 28 6e 6f 74 2d 69 6e 20 23 74 29 0a 09 09 09 20 (not-in #t)....
4c30: 20 20 20 20 20 28 73 6f 72 74 2d 62 79 20 23 66 (sort-by #f
4c40: 29 20 3b 3b 20 27 72 75 6e 64 69 72 20 27 65 76 ) ;; 'rundir 'ev
4c50: 65 6e 74 5f 74 69 6d 65 0a 09 09 09 20 20 20 20 ent_time....
4c60: 20 20 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 ). (let* ((re
4c70: 73 20 27 28 29 29 0a 09 20 3b 3b 20 69 66 20 73 s '()).. ;; if s
4c80: 74 61 74 65 73 20 6f 72 20 73 74 61 74 75 73 65 tates or statuse
4c90: 73 20 61 72 65 20 6e 75 6c 6c 20 74 68 65 6e 20 s are null then
4ca0: 61 73 73 75 6d 65 20 6d 61 74 63 68 20 61 6c 6c assume match all
4cb0: 20 77 68 65 6e 20 6e 6f 74 2d 69 6e 20 69 73 20 when not-in is
4cc0: 66 61 6c 73 65 0a 09 20 28 73 74 61 74 65 73 2d false.. (states-
4cd0: 73 74 72 20 20 20 20 28 63 6f 6e 63 20 22 20 73 str (conc " s
4ce0: 74 61 74 65 20 69 6e 20 28 27 22 20 28 73 74 72 tate in ('" (str
4cf0: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 ing-intersperse
4d00: 73 74 61 74 65 73 20 20 20 22 27 2c 27 22 29 20 states "','")
4d10: 22 27 29 22 29 29 0a 09 20 28 73 74 61 74 75 73 "')")).. (status
4d20: 65 73 2d 73 74 72 20 20 28 63 6f 6e 63 20 22 20 es-str (conc "
4d30: 73 74 61 74 75 73 20 69 6e 20 28 27 22 20 28 73 status in ('" (s
4d40: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 tring-interspers
4d50: 65 20 73 74 61 74 75 73 65 73 20 22 27 2c 27 22 e statuses "','"
4d60: 29 20 22 27 29 22 29 29 0a 09 20 28 73 74 61 74 ) "')")).. (stat
4d70: 65 2d 73 74 61 74 75 73 2d 71 72 79 20 28 69 66 e-status-qry (if
4d80: 20 28 6f 72 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f (or (not (null?
4d90: 20 73 74 61 74 65 73 29 29 0a 09 09 09 09 20 20 states)).....
4da0: 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 73 74 61 (not (null? sta
4db0: 74 65 73 29 29 29 0a 09 09 09 20 20 20 20 20 20 tes)))....
4dc0: 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 20 28 (conc " AND " (
4dd0: 69 66 20 6e 6f 74 2d 69 6e 20 22 4e 4f 54 22 20 if not-in "NOT"
4de0: 22 22 29 20 22 20 28 22 20 73 74 61 74 65 73 2d "") " (" states-
4df0: 73 74 72 20 22 20 41 4e 44 20 22 20 73 74 61 74 str " AND " stat
4e00: 75 73 65 73 2d 73 74 72 20 22 29 20 22 29 0a 09 uses-str ") ")..
4e10: 09 09 20 20 20 20 20 20 20 22 22 29 29 0a 09 20 .. ""))..
4e20: 28 71 72 79 20 20 20 20 20 20 28 63 6f 6e 63 20 (qry (conc
4e30: 22 53 45 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 "SELECT id,run_i
4e40: 64 2c 74 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 d,testname,state
4e50: 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 ,status,event_ti
4e60: 6d 65 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c me,host,cpuload,
4e70: 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 diskfree,uname,r
4e80: 75 6e 64 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c undir,item_path,
4e90: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e run_duration,fin
4ea0: 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 al_logf,comment
4eb0: 22 0a 09 09 09 20 22 20 46 52 4f 4d 20 74 65 73 ".... " FROM tes
4ec0: 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d ts WHERE run_id=
4ed0: 3f 20 41 4e 44 20 22 0a 09 09 09 20 3b 3b 20 74 ? AND ".... ;; t
4ee0: 65 73 74 6e 61 6d 65 20 6c 69 6b 65 20 3f 20 41 estname like ? A
4ef0: 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b ND item_path LIK
4f00: 45 20 3f 20 22 20 0a 09 09 09 20 28 64 62 3a 70 E ? " .... (db:p
4f10: 61 74 74 2d 3e 6c 69 6b 65 20 22 74 65 73 74 6e att->like "testn
4f20: 61 6d 65 22 20 74 65 73 74 70 61 74 74 29 20 22 ame" testpatt) "
4f30: 20 41 4e 44 20 22 0a 09 09 09 20 28 64 62 3a 70 AND ".... (db:p
4f40: 61 74 74 2d 3e 6c 69 6b 65 20 22 69 74 65 6d 5f att->like "item_
4f50: 70 61 74 68 22 20 69 74 65 6d 70 61 74 74 29 0a path" itempatt).
4f60: 09 09 09 20 73 74 61 74 65 2d 73 74 61 74 75 73 ... state-status
4f70: 2d 71 72 79 0a 09 09 09 20 28 63 61 73 65 20 73 -qry.... (case s
4f80: 6f 72 74 2d 62 79 0a 09 09 09 20 20 20 28 28 72 ort-by.... ((r
4f90: 75 6e 64 69 72 29 20 20 20 20 20 22 20 4f 52 44 undir) " ORD
4fa0: 45 52 20 42 59 20 6c 65 6e 67 74 68 28 72 75 6e ER BY length(run
4fb0: 64 69 72 29 20 44 45 53 43 3b 22 29 0a 09 09 09 dir) DESC;")....
4fc0: 20 20 20 28 28 65 76 65 6e 74 5f 74 69 6d 65 29 ((event_time)
4fd0: 20 22 20 4f 52 44 45 52 20 42 59 20 65 76 65 6e " ORDER BY even
4fe0: 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 0a 09 09 t_time ASC;")...
4ff0: 09 20 20 20 28 65 6c 73 65 20 20 20 20 20 20 20 . (else
5000: 20 20 22 3b 22 29 29 0a 09 09 09 20 29 29 29 0a ";")).... ))).
5010: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
5020: 20 38 20 22 49 4e 46 4f 3a 20 64 62 3a 67 65 74 8 "INFO: db:get
5030: 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 71 -tests-for-run q
5040: 72 79 3d 22 20 71 72 79 29 0a 20 20 20 20 28 73 ry=" qry). (s
5050: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
5060: 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 row . (lambd
5070: 61 20 28 61 20 2e 20 62 29 20 3b 3b 20 69 64 20 a (a . b) ;; id
5080: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5090: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
50a0: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
50b0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
50c0: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
50d0: 70 61 74 68 20 72 75 6e 2d 64 75 72 61 74 69 6f path run-duratio
50e0: 6e 20 66 69 6e 61 6c 2d 6c 6f 67 66 20 63 6f 6d n final-logf com
50f0: 6d 65 6e 74 29 0a 20 20 20 20 20 20 20 28 73 65 ment). (se
5100: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 61 70 t! res (cons (ap
5110: 70 6c 79 20 76 65 63 74 6f 72 20 61 20 62 29 20 ply vector a b)
5120: 72 65 73 29 29 29 20 3b 3b 20 69 64 20 72 75 6e res))) ;; id run
5130: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
5140: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
5150: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
5160: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
5170: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
5180: 68 20 72 75 6e 2d 64 75 72 61 74 69 6f 6e 20 66 h run-duration f
5190: 69 6e 61 6c 2d 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal-logf commen
51a0: 74 29 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 t) res))). d
51b0: 62 20 0a 20 20 20 20 20 71 72 79 0a 20 20 20 20 b . qry.
51c0: 20 72 75 6e 2d 69 64 0a 20 20 20 20 20 3b 3b 20 run-id. ;;
51d0: 28 69 66 20 74 65 73 74 70 61 74 74 20 74 65 73 (if testpatt tes
51e0: 74 70 61 74 74 20 22 25 22 29 0a 20 20 20 20 20 tpatt "%").
51f0: 3b 3b 20 28 69 66 20 69 74 65 6d 70 61 74 74 20 ;; (if itempatt
5200: 69 74 65 6d 70 61 74 74 20 22 25 22 29 29 0a 20 itempatt "%")).
5210: 20 20 20 20 29 0a 20 20 20 20 72 65 73 29 29 0a ). res)).
5220: 0a 3b 3b 20 74 68 69 73 20 6f 6e 65 20 69 73 20 .;; this one is
5230: 61 20 62 69 74 20 62 72 6f 6b 65 6e 20 42 55 47 a bit broken BUG
5240: 20 46 49 58 4d 45 0a 28 64 65 66 69 6e 65 20 28 FIXME.(define (
5250: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 73 db:delete-test-s
5260: 74 65 70 2d 72 65 63 6f 72 64 73 20 64 62 20 72 tep-records db r
5270: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
5280: 69 74 65 6d 64 61 74 29 0a 20 20 3b 3b 20 42 72 itemdat). ;; Br
5290: 65 61 6b 69 6e 67 20 69 74 20 69 6e 74 6f 20 74 eaking it into t
52a0: 77 6f 20 71 75 65 72 69 65 73 20 66 6f 72 20 62 wo queries for b
52b0: 65 74 74 65 72 20 66 69 6c 65 20 61 63 63 65 73 etter file acces
52c0: 73 20 69 6e 74 65 72 6c 65 61 76 69 6e 67 0a 20 s interleaving.
52d0: 20 28 6c 65 74 20 28 28 69 64 73 20 27 28 29 29 (let ((ids '())
52e0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
52f0: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 28 6c 61 6d or-each-row (lam
5300: 62 64 61 20 28 69 64 29 0a 09 09 09 20 20 20 20 bda (id)....
5310: 28 73 65 74 21 20 69 64 73 20 28 63 6f 6e 73 20 (set! ids (cons
5320: 69 64 20 69 64 73 29 29 29 0a 09 09 09 20 20 64 id ids))).... d
5330: 62 0a 09 09 09 20 20 22 53 45 4c 45 43 54 20 69 b.... "SELECT i
5340: 64 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 d FROM tests WHE
5350: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
5360: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
5370: 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 09 09 09 tem_path=?;"....
5380: 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 run-id test-na
5390: 6d 65 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 me (item-list->p
53a0: 61 74 68 20 69 74 65 6d 64 61 74 29 29 0a 20 20 ath itemdat)).
53b0: 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d (for-each (lam
53c0: 62 64 61 20 28 69 64 29 0a 09 09 28 73 71 6c 69 bda (id)...(sqli
53d0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
53e0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
53f0: 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 65 73 _steps WHERE tes
5400: 74 5f 69 64 3d 3f 3b 22 20 69 64 29 0a 09 09 28 t_id=?;" id)...(
5410: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 30 2e thread-sleep! 0.
5420: 31 29 20 3b 3b 20 67 69 76 65 20 6f 74 68 65 72 1) ;; give other
5430: 73 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 s access to the
5440: 64 62 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 db.
5450: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
5460: 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 ute db "DELETE F
5470: 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 ROM test_data WH
5480: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 ERE test_id=?;"
5490: 69 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 id).
54a0: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 (thread-slee
54b0: 70 21 20 30 2e 31 29 29 20 3b 3b 20 67 69 76 65 p! 0.1)) ;; give
54c0: 20 6f 74 68 65 72 73 20 61 63 63 65 73 73 20 74 others access t
54d0: 6f 20 74 68 65 20 64 62 0a 09 20 20 20 20 20 20 o the db..
54e0: 69 64 73 29 29 29 0a 3b 3b 22 44 45 4c 45 54 45 ids))).;;"DELETE
54f0: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
5500: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 20 69 WHERE test_id i
5510: 6e 20 28 53 45 4c 45 43 54 20 69 64 20 46 52 4f n (SELECT id FRO
5520: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
5530: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
5540: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
5550: 61 74 68 3d 3f 29 3b 22 20 0a 09 09 20 20 20 0a ath=?);" ... .
5560: 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ;; .(define (db:
5570: 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 65 63 6f delete-test-reco
5580: 72 64 73 20 64 62 20 74 65 73 74 2d 69 64 29 0a rds db test-id).
5590: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
55a0: 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 te db "DELETE FR
55b0: 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 OM test_steps WH
55c0: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 ERE test_id=?;"
55d0: 74 65 73 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 test-id). (sqli
55e0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
55f0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
5600: 5f 64 61 74 61 20 20 57 48 45 52 45 20 74 65 73 _data WHERE tes
5610: 74 5f 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 t_id=?;" test-id
5620: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
5630: 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 cute db "DELETE
5640: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
5650: 20 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 29 id=?;" test-id)
5660: 29 0a 0a 3b 3b 20 73 65 74 20 74 65 73 74 73 20 )..;; set tests
5670: 77 69 74 68 20 73 74 61 74 65 20 63 75 72 72 73 with state currs
5680: 74 61 74 65 20 61 6e 64 20 73 74 61 74 75 73 20 tate and status
5690: 63 75 72 72 73 74 61 74 75 73 20 74 6f 20 6e 65 currstatus to ne
56a0: 77 73 74 61 74 65 20 61 6e 64 20 6e 65 77 73 74 wstate and newst
56b0: 61 74 75 73 0a 3b 3b 20 75 73 65 20 63 75 72 72 atus.;; use curr
56c0: 73 74 61 74 65 20 3d 20 23 66 20 61 6e 64 20 6f state = #f and o
56d0: 72 20 63 75 72 72 73 74 61 74 75 73 20 3d 20 23 r currstatus = #
56e0: 66 20 74 6f 20 61 70 70 6c 79 20 74 6f 20 61 6e f to apply to an
56f0: 79 20 73 74 61 74 65 20 6f 72 20 73 74 61 74 75 y state or statu
5700: 73 20 72 65 73 70 65 63 74 69 76 65 6c 79 0a 3b s respectively.;
5710: 3b 20 57 41 52 4e 49 4e 47 3a 20 53 51 4c 20 69 ; WARNING: SQL i
5720: 6e 6a 65 63 74 69 6f 6e 20 72 69 73 6b 0a 28 64 njection risk.(d
5730: 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 74 65 efine (db:set-te
5740: 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 sts-state-status
5750: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e db run-id testn
5760: 61 6d 65 73 20 63 75 72 72 73 74 61 74 65 20 63 ames currstate c
5770: 75 72 72 73 74 61 74 75 73 20 6e 65 77 73 74 61 urrstatus newsta
5780: 74 65 20 6e 65 77 73 74 61 74 75 73 29 0a 20 20 te newstatus).
5790: 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 (for-each (lambd
57a0: 61 20 28 74 65 73 74 6e 61 6d 65 29 0a 09 20 20 a (testname)..
57b0: 20 20 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 (let ((qry (
57c0: 63 6f 6e 63 20 22 55 50 44 41 54 45 20 74 65 73 conc "UPDATE tes
57d0: 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f 2c 73 ts SET state=?,s
57e0: 74 61 74 75 73 3d 3f 20 57 48 45 52 45 20 22 0a tatus=? WHERE ".
57f0: 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 75 ... (if cu
5800: 72 72 73 74 61 74 65 20 20 28 63 6f 6e 63 20 22 rrstate (conc "
5810: 73 74 61 74 65 3d 27 22 20 63 75 72 72 73 74 61 state='" currsta
5820: 74 65 20 22 27 20 41 4e 44 20 22 29 20 22 22 29 te "' AND ") "")
5830: 0a 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 .... (if c
5840: 75 72 72 73 74 61 74 75 73 20 28 63 6f 6e 63 20 urrstatus (conc
5850: 22 73 74 61 74 75 73 3d 27 22 20 63 75 72 72 73 "status='" currs
5860: 74 61 74 75 73 20 22 27 20 41 4e 44 20 22 29 20 tatus "' AND ")
5870: 22 22 29 0a 09 09 09 20 20 20 20 20 20 20 22 20 "").... "
5880: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
5890: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 4e 4f 54 20 tname=? AND NOT
58a0: 28 69 74 65 6d 5f 70 61 74 68 3d 27 27 20 41 4e (item_path='' AN
58b0: 44 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 D testname in (S
58c0: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74 ELECT DISTINCT t
58d0: 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 74 65 73 estname FROM tes
58e0: 74 73 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d ts WHERE testnam
58f0: 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 e=? AND item_pat
5900: 68 20 21 3d 20 27 27 29 29 3b 22 29 29 29 0a 09 h != ''));")))..
5910: 09 3b 3b 28 64 65 62 75 67 3a 70 72 69 6e 74 20 .;;(debug:print
5920: 30 20 22 51 52 59 3a 20 22 20 71 72 79 29 0a 09 0 "QRY: " qry)..
5930: 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 .(sqlite3:execut
5940: 65 20 64 62 20 71 72 79 20 72 75 6e 2d 69 64 20 e db qry run-id
5950: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
5960: 75 73 20 74 65 73 74 6e 61 6d 65 20 74 65 73 74 us testname test
5970: 6e 61 6d 65 29 29 29 0a 09 20 20 20 20 74 65 73 name))).. tes
5980: 74 6e 61 6d 65 73 29 29 0a 0a 28 64 65 66 69 6e tnames))..(defin
5990: 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 e (db:delete-tes
59a0: 74 73 2d 69 6e 2d 73 74 61 74 65 20 64 62 20 72 ts-in-state db r
59b0: 75 6e 2d 69 64 20 73 74 61 74 65 29 0a 20 20 28 un-id state). (
59c0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
59d0: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
59e0: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
59f0: 65 3d 3f 20 41 4e 44 20 72 75 6e 5f 69 64 3d 3f e=? AND run_id=?
5a00: 3b 22 20 73 74 61 74 65 20 72 75 6e 2d 69 64 29 ;" state run-id)
5a10: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
5a20: 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 est-set-state-st
5a30: 61 74 75 73 2d 62 79 2d 69 64 20 64 62 20 74 65 atus-by-id db te
5a40: 73 74 2d 69 64 20 6e 65 77 73 74 61 74 65 20 6e st-id newstate n
5a50: 65 77 73 74 61 74 75 73 20 6e 65 77 63 6f 6d 6d ewstatus newcomm
5a60: 65 6e 74 29 0a 20 20 28 69 66 20 6e 65 77 73 74 ent). (if newst
5a70: 61 74 65 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ate (sqlite3:e
5a80: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
5a90: 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 74 E tests SET stat
5aa0: 65 3d 3f 20 20 20 57 48 45 52 45 20 69 64 3d 3f e=? WHERE id=?
5ab0: 3b 22 20 6e 65 77 73 74 61 74 65 20 20 20 74 65 ;" newstate te
5ac0: 73 74 2d 69 64 29 29 0a 20 20 28 69 66 20 6e 65 st-id)). (if ne
5ad0: 77 73 74 61 74 75 73 20 20 28 73 71 6c 69 74 65 wstatus (sqlite
5ae0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
5af0: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
5b00: 74 61 74 75 73 3d 3f 20 20 57 48 45 52 45 20 69 tatus=? WHERE i
5b10: 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 75 73 20 d=?;" newstatus
5b20: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 28 69 66 test-id)). (if
5b30: 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 28 73 71 6c newcomment (sql
5b40: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
5b50: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
5b60: 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 T comment=? WHER
5b70: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 63 6f 6d 6d E id=?;" newcomm
5b80: 65 6e 74 20 74 65 73 74 2d 69 64 29 29 29 0a 0a ent test-id)))..
5b90: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
5ba0: 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 -set-state-statu
5bb0: 73 2d 62 79 2d 72 75 6e 2d 69 64 2d 74 65 73 74 s-by-run-id-test
5bc0: 6e 61 6d 65 20 64 62 20 72 75 6e 2d 69 64 20 74 name db run-id t
5bd0: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
5be0: 74 68 20 73 74 61 74 75 73 20 73 74 61 74 65 29 th status state)
5bf0: 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 . (sqlite3:exec
5c00: 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 ute db "UPDATE t
5c10: 65 73 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f ests SET state=?
5c20: 2c 73 74 61 74 75 73 3d 3f 2c 65 76 65 6e 74 5f ,status=?,event_
5c30: 74 69 6d 65 3d 73 74 72 66 74 69 6d 65 28 27 25 time=strftime('%
5c40: 73 27 2c 27 6e 6f 77 27 29 20 57 48 45 52 45 20 s','now') WHERE
5c50: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
5c60: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d tname=? AND item
5c70: 5f 70 61 74 68 3d 3f 3b 22 20 0a 09 09 20 20 20 _path=?;" ...
5c80: 73 74 61 74 65 20 73 74 61 74 75 73 20 72 75 6e state status run
5c90: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
5ca0: 65 6d 2d 70 61 74 68 29 29 0a 0a 28 64 65 66 69 em-path))..(defi
5cb0: 6e 65 20 28 64 62 3a 67 65 74 2d 63 6f 75 6e 74 ne (db:get-count
5cc0: 2d 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 20 64 -tests-running d
5cd0: 62 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 b). (let ((res
5ce0: 30 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 0)). (sqlite3
5cf0: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 :for-each-row.
5d00: 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e (lambda (coun
5d10: 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 t). (set!
5d20: 72 65 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 res count)).
5d30: 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 db. "SELECT
5d40: 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 count(id) FROM
5d50: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
5d60: 65 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 e = 'RUNNING' OR
5d70: 20 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 state = 'LAUNCH
5d80: 45 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 ED' OR state = '
5d90: 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 REMOTEHOSTSTART'
5da0: 3b 22 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 28 ;"). res))..(
5db0: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 63 define (db:get-c
5dc0: 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e 69 ount-tests-runni
5dd0: 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 64 ng-in-jobgroup d
5de0: 62 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 28 69 b jobgroup). (i
5df0: 66 20 28 6e 6f 74 20 6a 6f 62 67 72 6f 75 70 29 f (not jobgroup)
5e00: 0a 20 20 20 20 20 20 30 20 3b 3b 20 0a 20 20 20 . 0 ;; .
5e10: 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 29 (let ((res 0)
5e20: 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d )..(sqlite3:for-
5e30: 65 61 63 68 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 each-row.. (lamb
5e40: 64 61 20 28 63 6f 75 6e 74 29 0a 09 20 20 20 28 da (count).. (
5e50: 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 set! res count))
5e60: 0a 09 20 64 62 0a 09 20 22 53 45 4c 45 43 54 20 .. db.. "SELECT
5e70: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
5e80: 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 ests WHERE state
5e90: 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 20 = 'RUNNING' OR
5ea0: 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 45 state = 'LAUNCHE
5eb0: 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 52 D' OR state = 'R
5ec0: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 0a EMOTEHOSTSTART'.
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 AND
5ee0: 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 45 testname in (SE
5ef0: 4c 45 43 54 20 74 65 73 74 6e 61 6d 65 20 46 52 LECT testname FR
5f00: 4f 4d 20 74 65 73 74 5f 6d 65 74 61 20 57 48 45 OM test_meta WHE
5f10: 52 45 20 6a 6f 62 67 72 6f 75 70 3d 3f 3b 22 0a RE jobgroup=?;".
5f20: 09 20 6a 6f 62 67 72 6f 75 70 29 0a 09 72 65 73 . jobgroup)..res
5f30: 29 29 29 0a 0a 3b 3b 20 64 6f 6e 65 20 77 69 74 )))..;; done wit
5f40: 68 20 72 75 6e 20 77 68 65 6e 3a 0a 3b 3b 20 20 h run when:.;;
5f50: 20 30 20 74 65 73 74 73 20 69 6e 20 4c 41 55 4e 0 tests in LAUN
5f60: 43 48 45 44 2c 20 4e 4f 54 5f 53 54 41 52 54 45 CHED, NOT_STARTE
5f70: 44 2c 20 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 D, REMOTEHOSTSTA
5f80: 52 54 2c 20 52 55 4e 4e 49 4e 47 0a 28 64 65 66 RT, RUNNING.(def
5f90: 69 6e 65 20 28 64 62 3a 65 73 74 69 6d 61 74 65 ine (db:estimate
5fa0: 64 2d 74 65 73 74 73 2d 72 65 6d 61 69 6e 69 6e d-tests-remainin
5fb0: 67 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 g db run-id). (
5fc0: 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a 20 20 let ((res 0)).
5fd0: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
5fe0: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
5ff0: 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 20 mbda (count).
6000: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 63 6f (set! res co
6010: 75 6e 74 29 29 0a 20 20 20 20 20 64 62 20 3b 3b unt)). db ;;
6020: 20 4e 42 2f 2f 20 4b 49 4c 4c 52 45 51 20 6d 65 NB// KILLREQ me
6030: 61 6e 73 20 74 68 65 20 6a 6f 62 73 20 69 73 20 ans the jobs is
6040: 73 74 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 72 still probably r
6050: 75 6e 6e 69 6e 67 0a 20 20 20 20 20 22 53 45 4c unning. "SEL
6060: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 ECT count(id) FR
6070: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 OM tests WHERE s
6080: 74 61 74 65 20 69 6e 20 28 27 4c 41 55 4e 43 48 tate in ('LAUNCH
6090: 45 44 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 44 ED','NOT_STARTED
60a0: 27 2c 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 ','REMOTEHOSTSTA
60b0: 52 54 27 2c 27 52 55 4e 4e 49 4e 47 27 2c 27 4b RT','RUNNING','K
60c0: 49 4c 4c 52 45 51 27 29 20 41 4e 44 20 72 75 6e ILLREQ') AND run
60d0: 5f 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 0a _id=?;" run-id).
60e0: 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 4e 42 res))..;; NB
60f0: 2f 2f 20 53 79 6e 63 20 74 68 69 73 20 77 69 74 // Sync this wit
6100: 68 20 72 75 6e 73 3a 67 65 74 2d 74 65 73 74 2d h runs:get-test-
6110: 69 6e 66 6f 0a 28 64 65 66 69 6e 65 20 28 64 62 info.(define (db
6120: 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 :get-test-info d
6130: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d b run-id testnam
6140: 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 e item-path). (
6150: 6c 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 let ((res #f)).
6160: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
6170: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
6180: 61 6d 62 64 61 20 28 69 64 20 72 75 6e 2d 69 64 ambda (id run-id
6190: 20 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 testname state
61a0: 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d status event-tim
61b0: 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 e host cpuload d
61c0: 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 iskfree uname ru
61d0: 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 ndir item-path r
61e0: 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 un_duration fina
61f0: 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 l_logf comment )
6200: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 . (set! re
6210: 73 20 28 76 65 63 74 6f 72 20 69 64 20 72 75 6e s (vector id run
6220: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
6230: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
6240: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
6250: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
6260: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
6270: 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 h run_duration f
6280: 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal_logf commen
6290: 74 20 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 t ))). db .
62a0: 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 72 "SELECT id,r
62b0: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 un_id,testname,s
62c0: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
62d0: 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c t_time,host,cpul
62e0: 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 oad,diskfree,una
62f0: 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 me,rundir,item_p
6300: 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e ath,run_duration
6310: 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d ,final_logf,comm
6320: 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 ent FROM tests W
6330: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
6340: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
6350: 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 item_path=?;".
6360: 20 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 6e run-id testn
6370: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 ame item-path).
6380: 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 47 65 74 res))..;; Get
6390: 20 74 65 73 74 20 64 61 74 61 20 75 73 69 6e 67 test data using
63a0: 20 74 65 73 74 5f 69 64 0a 28 64 65 66 69 6e 65 test_id.(define
63b0: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 (db:get-test-da
63c0: 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 ta-by-id db test
63d0: 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 -id). (let ((re
63e0: 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 s #f)). (sqli
63f0: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
6400: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 . (lambda (i
6410: 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d d run-id testnam
6420: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 e state status e
6430: 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 vent-time host c
6440: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
6450: 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 uname rundir ite
6460: 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 m-path run_durat
6470: 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 ion final_logf c
6480: 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 20 20 28 omment). (
6490: 73 65 74 21 20 72 65 73 20 28 76 65 63 74 6f 72 set! res (vector
64a0: 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e id run-id testn
64b0: 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 ame state status
64c0: 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 event-time host
64d0: 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 cpuload diskfre
64e0: 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 e uname rundir i
64f0: 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 tem-path run_dur
6500: 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 ation final_logf
6510: 20 63 6f 6d 6d 65 6e 74 29 29 29 0a 20 20 20 20 comment))).
6520: 20 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45 43 db . "SELEC
6530: 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 T id,run_id,test
6540: 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 name,state,statu
6550: 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 s,event_time,hos
6560: 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 t,cpuload,diskfr
6570: 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c ee,uname,rundir,
6580: 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 item_path,run_du
6590: 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 ration,final_log
65a0: 66 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 f,comment FROM t
65b0: 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 3b ests WHERE id=?;
65c0: 22 0a 20 20 20 20 20 74 65 73 74 2d 69 64 29 0a ". test-id).
65d0: 20 20 20 20 72 65 73 29 29 0a 0a 0a 28 64 65 66 res))...(def
65e0: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 ine (db:test-set
65f0: 2d 63 6f 6d 6d 65 6e 74 20 64 62 20 74 65 73 74 -comment db test
6600: 2d 69 64 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 -id comment). (
6610: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
6620: 0a 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 . db . "UPDA
6630: 54 45 20 74 65 73 74 73 20 53 45 54 20 63 6f 6d TE tests SET com
6640: 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 3d ment=? WHERE id=
6650: 3f 3b 22 0a 20 20 20 63 6f 6d 6d 65 6e 74 20 74 ?;". comment t
6660: 65 73 74 2d 69 64 29 29 0a 0a 3b 3b 0a 28 64 65 est-id))..;;.(de
6670: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 fine (db:test-se
6680: 74 2d 72 75 6e 64 69 72 21 20 64 62 20 72 75 6e t-rundir! db run
6690: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
66a0: 65 6d 2d 70 61 74 68 20 72 75 6e 64 69 72 29 0a em-path rundir).
66b0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
66c0: 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 22 55 te . db . "U
66d0: 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 PDATE tests SET
66e0: 72 75 6e 64 69 72 3d 3f 20 57 48 45 52 45 20 72 rundir=? WHERE r
66f0: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 un_id=? AND test
6700: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f name=? AND item_
6710: 70 61 74 68 3d 3f 3b 22 0a 20 20 20 72 75 6e 64 path=?;". rund
6720: 69 72 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e ir run-id test-n
6730: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a ame item-path)).
6740: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 .(define (db:tes
6750: 74 2d 73 65 74 2d 6c 6f 67 21 20 64 62 20 74 65 t-set-log! db te
6760: 73 74 2d 69 64 20 6c 6f 67 66 29 0a 20 20 28 69 st-id logf). (i
6770: 66 20 28 73 74 72 69 6e 67 3f 20 6c 6f 67 66 29 f (string? logf)
6780: 0a 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a . (sqlite3:
6790: 65 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 execute db "UPDA
67a0: 54 45 20 74 65 73 74 73 20 53 45 54 20 66 69 6e TE tests SET fin
67b0: 61 6c 5f 6c 6f 67 66 3d 3f 20 57 48 45 52 45 20 al_logf=? WHERE
67c0: 69 64 3d 3f 3b 22 0a 09 09 20 20 20 6c 6f 67 66 id=?;"... logf
67d0: 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 test-id).
67e0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
67f0: 45 52 52 4f 52 3a 20 64 62 3a 74 65 73 74 2d 73 ERROR: db:test-s
6800: 65 74 2d 6c 6f 67 21 20 63 61 6c 6c 65 64 20 77 et-log! called w
6810: 69 74 68 20 6e 6f 6e 2d 73 74 72 69 6e 67 20 6c ith non-string l
6820: 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20 22 20 6c og file name " l
6830: 6f 67 66 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d ogf)))..;;======
6840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6880: 0a 3b 3b 20 4d 69 73 63 2e 20 74 65 73 74 20 72 .;; Misc. test r
6890: 65 6c 61 74 65 64 20 71 75 65 72 69 65 73 0a 3b elated queries.;
68a0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
68b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68e0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
68f0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 (db:test-get-pa
6900: 74 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 ths-matching db
6910: 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 20 keynames target
6920: 66 6e 61 6d 65 70 61 74 74 20 23 21 6b 65 79 20 fnamepatt #!key
6930: 28 72 65 73 20 27 28 29 29 29 0a 20 20 28 6c 65 (res '())). (le
6940: 74 2a 20 28 28 69 74 65 6d 70 61 74 74 20 20 20 t* ((itempatt
6950: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
6960: 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 28 61 g "-itempatt")(a
6970: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 69 74 rgs:get-arg "-it
6980: 65 6d 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 empatt") "%"))..
6990: 20 28 74 65 73 74 70 61 74 74 20 20 20 28 69 66 (testpatt (if
69a0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
69b0: 2d 74 65 73 74 70 61 74 74 22 29 28 61 72 67 73 -testpatt")(args
69c0: 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 73 74 70 :get-arg "-testp
69d0: 61 74 74 22 29 20 22 25 22 29 29 0a 09 20 28 73 att") "%")).. (s
69e0: 74 61 74 65 70 61 74 74 20 20 28 69 66 20 28 61 tatepatt (if (a
69f0: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
6a00: 61 74 65 22 29 20 20 20 28 61 72 67 73 3a 67 65 ate") (args:ge
6a10: 74 2d 61 72 67 20 22 3a 73 74 61 74 65 22 29 20 t-arg ":state")
6a20: 20 20 20 22 25 22 29 29 0a 09 20 28 73 74 61 74 "%")).. (stat
6a30: 75 73 70 61 74 74 20 28 69 66 20 28 61 72 67 73 uspatt (if (args
6a40: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 75 :get-arg ":statu
6a50: 73 22 29 20 20 28 61 72 67 73 3a 67 65 74 2d 61 s") (args:get-a
6a60: 72 67 20 22 3a 73 74 61 74 75 73 22 29 20 20 20 rg ":status")
6a70: 22 25 22 29 29 0a 09 20 28 72 75 6e 6e 61 6d 65 "%")).. (runname
6a80: 20 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 (if (args:ge
6a90: 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 t-arg ":runname"
6aa0: 29 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 ) (args:get-arg
6ab0: 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 22 25 22 ":runname") "%"
6ac0: 29 29 0a 09 20 28 6b 65 79 73 74 72 20 28 73 74 )).. (keystr (st
6ad0: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse
6ae0: 20 0a 09 09 20 20 28 6d 61 70 20 28 6c 61 6d 62 ... (map (lamb
6af0: 64 61 20 28 6b 65 79 20 76 61 6c 29 0a 09 09 09 da (key val)....
6b00: 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b 65 79 20 (conc "r." key
6b10: 22 20 6c 69 6b 65 20 27 22 20 76 61 6c 20 22 27 " like '" val "'
6b20: 22 29 29 0a 09 09 20 20 20 20 20 20 20 6b 65 79 "))... key
6b30: 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 20 20 20 names ...
6b40: 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 74 61 (string-split ta
6b50: 72 67 65 74 20 22 2f 22 29 29 0a 09 09 20 20 22 rget "/"))... "
6b60: 20 41 4e 44 20 22 29 29 0a 09 20 28 71 72 79 73 AND ")).. (qrys
6b70: 74 72 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 tr (conc "SELECT
6b80: 20 74 2e 72 75 6e 64 69 72 20 46 52 4f 4d 20 74 t.rundir FROM t
6b90: 65 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 ests AS t INNER
6ba0: 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f JOIN runs AS r O
6bb0: 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 N t.run_id=r.id
6bc0: 57 48 45 52 45 20 22 0a 09 09 20 20 20 20 20 20 WHERE "...
6bd0: 20 6b 65 79 73 74 72 20 22 20 41 4e 44 20 72 2e keystr " AND r.
6be0: 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 runname LIKE '"
6bf0: 72 75 6e 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 runname "' AND i
6c00: 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 tem_path LIKE '"
6c10: 20 69 74 65 6d 70 61 74 74 20 22 27 20 41 4e 44 itempatt "' AND
6c20: 20 74 65 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 testname LIKE '
6c30: 22 0a 09 09 20 20 20 20 20 20 20 74 65 73 74 70 "... testp
6c40: 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 att "' AND t.sta
6c50: 74 65 20 4c 49 4b 45 20 27 22 20 73 74 61 74 65 te LIKE '" state
6c60: 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 patt "' AND t.st
6c70: 61 74 75 73 20 4c 49 4b 45 20 27 22 20 73 74 61 atus LIKE '" sta
6c80: 74 75 73 70 61 74 74 20 0a 09 09 20 20 20 20 20 tuspatt ...
6c90: 20 20 22 27 4f 52 44 45 52 20 42 59 20 74 2e 65 "'ORDER BY t.e
6ca0: 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 vent_time ASC;")
6cb0: 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 )). (debug:pr
6cc0: 69 6e 74 20 33 20 22 71 72 79 73 74 72 3a 20 22 int 3 "qrystr: "
6cd0: 20 71 72 79 73 74 72 29 0a 20 20 20 20 28 73 71 qrystr). (sq
6ce0: 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 lite3:for-each-r
6cf0: 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 ow . (lambda
6d00: 20 28 70 29 0a 20 20 20 20 20 20 20 28 73 65 74 (p). (set
6d10: 21 20 72 65 73 20 28 63 6f 6e 73 20 70 20 72 65 ! res (cons p re
6d20: 73 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 s))). db .
6d30: 20 20 20 71 72 79 73 74 72 29 0a 20 20 20 20 28 qrystr). (
6d40: 69 66 20 66 6e 61 6d 65 70 61 74 74 0a 09 28 61 if fnamepatt..(a
6d50: 70 70 6c 79 20 61 70 70 65 6e 64 20 0a 09 20 20 pply append ..
6d60: 20 20 20 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 (map (lambd
6d70: 61 20 28 70 29 0a 09 09 20 20 20 20 20 20 28 67 a (p)... (g
6d80: 6c 6f 62 20 28 63 6f 6e 63 20 70 20 22 2f 22 20 lob (conc p "/"
6d90: 66 6e 61 6d 65 70 61 74 74 29 29 29 0a 09 09 20 fnamepatt)))...
6da0: 20 20 20 72 65 73 29 29 0a 09 72 65 73 29 29 29 res))..res)))
6db0: 0a 0a 3b 3b 20 6c 6f 6f 6b 20 74 68 72 6f 75 67 ..;; look throug
6dc0: 68 20 74 65 73 74 73 20 66 72 6f 6d 20 6d 61 74 h tests from mat
6dd0: 63 68 69 6e 67 20 72 75 6e 73 20 66 6f 72 20 61 ching runs for a
6de0: 20 66 69 6c 65 0a 28 64 65 66 69 6e 65 20 28 64 file.(define (d
6df0: 62 3a 74 65 73 74 2d 67 65 74 2d 66 69 72 73 74 b:test-get-first
6e00: 2d 70 61 74 68 2d 6d 61 74 63 68 69 6e 67 20 64 -path-matching d
6e10: 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 b keynames targe
6e20: 74 20 66 6e 61 6d 65 29 0a 20 20 3b 3b 20 5b 72 t fname). ;; [r
6e30: 65 66 70 61 74 68 73 5d 20 69 73 20 74 68 65 20 efpaths] is the
6e40: 73 65 63 74 69 6f 6e 20 77 68 65 72 65 20 72 65 section where re
6e50: 66 65 72 65 6e 63 65 73 20 74 6f 20 6f 74 68 65 ferences to othe
6e60: 72 20 6d 65 67 61 74 65 73 74 20 64 61 74 61 62 r megatest datab
6e70: 61 73 65 73 20 61 72 65 20 73 74 6f 72 65 64 0a ases are stored.
6e80: 20 20 28 6c 65 74 20 28 28 6d 74 2d 70 61 74 68 (let ((mt-path
6e90: 73 20 28 63 6f 6e 66 69 67 66 3a 67 65 74 2d 73 s (configf:get-s
6ea0: 65 63 74 69 6f 6e 20 22 72 65 66 70 61 74 68 73 ection "refpaths
6eb0: 22 29 29 0a 09 28 72 65 73 20 20 20 20 20 20 20 "))..(res
6ec0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 (db:test-get-pat
6ed0: 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b hs-matching db k
6ee0: 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 20 66 eynames target f
6ef0: 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 6c 65 74 name))). (let
6f00: 20 6c 6f 6f 70 20 28 28 70 61 74 68 64 61 74 20 loop ((pathdat
6f10: 28 69 66 20 28 6e 75 6c 6c 3f 20 70 61 74 68 73 (if (null? paths
6f20: 29 20 23 66 20 28 63 61 72 20 6d 74 2d 70 61 74 ) #f (car mt-pat
6f30: 68 73 29 29 29 0a 09 20 20 20 20 20 20 20 28 74 hs))).. (t
6f40: 61 6c 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c al (if (null
6f50: 3f 20 70 61 74 68 73 29 20 27 28 29 28 63 64 72 ? paths) '()(cdr
6f60: 20 6d 74 2d 70 61 74 68 73 29 29 29 29 0a 20 20 mt-paths)))).
6f70: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6e 75 (if (not (nu
6f80: 6c 6c 3f 20 72 65 73 29 29 0a 09 20 20 28 63 61 ll? res)).. (ca
6f90: 72 20 72 65 73 29 20 3b 3b 20 72 65 74 75 72 6e r res) ;; return
6fa0: 20 66 69 72 73 74 20 66 6f 75 6e 64 0a 09 20 20 first found..
6fb0: 28 69 66 20 70 61 74 68 0a 09 20 20 20 20 20 20 (if path..
6fc0: 28 6c 65 74 2a 20 28 28 64 62 20 20 20 20 20 28 (let* ((db (
6fd0: 6f 70 65 6e 2d 64 62 20 70 61 74 68 3a 20 28 63 open-db path: (c
6fe0: 61 64 72 20 70 61 74 68 64 61 74 29 29 29 0a 09 adr pathdat)))..
6ff0: 09 20 20 20 20 20 28 6e 65 77 72 65 73 20 28 64 . (newres (d
7000: 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 b:test-get-paths
7010: 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 -matching db key
7020: 6e 61 6d 65 73 20 74 61 72 67 65 74 20 66 6e 61 names target fna
7030: 6d 65 29 29 29 0a 09 09 28 64 65 62 75 67 3a 70 me)))...(debug:p
7040: 72 69 6e 74 20 34 20 22 49 4e 46 4f 3a 20 54 72 rint 4 "INFO: Tr
7050: 79 69 6e 67 20 22 20 28 63 61 72 20 70 61 74 68 ying " (car path
7060: 64 61 74 29 20 22 20 61 74 20 22 20 28 63 61 64 dat) " at " (cad
7070: 72 20 70 61 74 68 64 61 74 29 29 0a 09 09 28 73 r pathdat))...(s
7080: 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 qlite3:finalize!
7090: 20 64 62 29 0a 09 09 28 69 66 20 28 6e 6f 74 20 db)...(if (not
70a0: 28 6e 75 6c 6c 3f 20 6e 65 77 72 65 73 29 29 0a (null? newres)).
70b0: 09 09 20 20 20 20 28 63 61 72 20 6e 65 77 72 65 .. (car newre
70c0: 73 29 0a 09 09 20 20 20 20 28 69 66 20 28 6e 75 s)... (if (nu
70d0: 6c 6c 3f 20 74 61 6c 29 0a 09 09 09 23 66 0a 09 ll? tal)....#f..
70e0: 09 09 28 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c ..(loop (car tal
70f0: 29 28 63 64 72 20 74 61 6c 29 29 29 29 29 29 29 )(cdr tal)))))))
7100: 29 29 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 64 )))...(define (d
7110: 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 2d b:test-get-test-
7120: 72 65 63 6f 72 64 73 2d 6d 61 74 63 68 69 6e 67 records-matching
7130: 20 64 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 db keynames tar
7140: 67 65 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 get). (let* ((r
7150: 65 73 20 27 28 29 29 0a 09 20 28 69 74 65 6d 70 es '()).. (itemp
7160: 61 74 74 20 20 20 28 69 66 20 28 61 72 67 73 3a att (if (args:
7170: 67 65 74 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 get-arg "-itempa
7180: 74 74 22 29 28 61 72 67 73 3a 67 65 74 2d 61 72 tt")(args:get-ar
7190: 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 20 22 g "-itempatt") "
71a0: 25 22 29 29 0a 09 20 28 74 65 73 74 70 61 74 74 %")).. (testpatt
71b0: 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 (if (args:get
71c0: 2d 61 72 67 20 22 2d 74 65 73 74 70 61 74 74 22 -arg "-testpatt"
71d0: 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 )(args:get-arg "
71e0: 2d 74 65 73 74 70 61 74 74 22 29 20 22 25 22 29 -testpatt") "%")
71f0: 29 0a 09 20 28 73 74 61 74 65 70 61 74 74 20 20 ).. (statepatt
7200: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
7210: 67 20 22 3a 73 74 61 74 65 22 29 20 20 20 28 61 g ":state") (a
7220: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
7230: 61 74 65 22 29 20 20 20 20 22 25 22 29 29 0a 09 ate") "%"))..
7240: 20 28 73 74 61 74 75 73 70 61 74 74 20 28 69 66 (statuspatt (if
7250: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
7260: 3a 73 74 61 74 75 73 22 29 20 20 28 61 72 67 73 :status") (args
7270: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 75 :get-arg ":statu
7280: 73 22 29 20 20 20 22 25 22 29 29 0a 09 20 28 72 s") "%")).. (r
7290: 75 6e 6e 61 6d 65 20 20 20 20 28 69 66 20 28 61 unname (if (a
72a0: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 rgs:get-arg ":ru
72b0: 6e 6e 61 6d 65 22 29 20 28 61 72 67 73 3a 67 65 nname") (args:ge
72c0: 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 t-arg ":runname"
72d0: 29 20 20 22 25 22 29 29 0a 09 20 28 6b 65 79 73 ) "%")).. (keys
72e0: 74 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 tr (string-inter
72f0: 73 70 65 72 73 65 20 0a 09 09 20 20 28 6d 61 70 sperse ... (map
7300: 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 76 61 (lambda (key va
7310: 6c 29 0a 09 09 09 20 28 63 6f 6e 63 20 22 72 2e l).... (conc "r.
7320: 22 20 6b 65 79 20 22 20 6c 69 6b 65 20 27 22 20 " key " like '"
7330: 76 61 6c 20 22 27 22 29 29 0a 09 09 20 20 20 20 val "'"))...
7340: 20 20 20 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 keynames ...
7350: 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 73 70 (string-sp
7360: 6c 69 74 20 74 61 72 67 65 74 20 22 2f 22 29 29 lit target "/"))
7370: 0a 09 09 20 20 22 20 41 4e 44 20 22 29 29 0a 09 ... " AND "))..
7380: 20 28 71 72 79 73 74 72 20 28 63 6f 6e 63 20 22 (qrystr (conc "
7390: 53 45 4c 45 43 54 20 0a 20 20 20 20 20 20 20 20 SELECT .
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
73b0: 20 20 20 20 74 2e 69 64 0a 20 20 20 20 20 20 20 t.id.
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
73d0: 20 20 20 20 20 74 2e 72 75 6e 5f 69 64 20 20 20 t.run_id
73e0: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
7400: 2e 74 65 73 74 6e 61 6d 65 20 20 20 0a 20 20 20 .testname .
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7420: 20 20 20 20 20 20 20 20 20 74 2e 68 6f 73 74 20 t.host
7430: 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 .
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7450: 20 20 20 74 2e 63 70 75 6c 6f 61 64 20 20 20 20 t.cpuload
7460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7470: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 64 t.d
7480: 69 73 6b 66 72 65 65 20 20 20 0a 20 20 20 20 20 iskfree .
7490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74a0: 20 20 20 20 20 20 20 74 2e 75 6e 61 6d 65 20 20 t.uname
74b0: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 .
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74d0: 20 74 2e 72 75 6e 64 69 72 20 20 20 20 20 0a 20 t.rundir .
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74f0: 20 20 20 20 20 20 20 20 20 20 20 74 2e 73 68 6f t.sho
7500: 72 74 64 69 72 20 20 20 0a 20 20 20 20 20 20 20 rtdir .
7510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7520: 20 20 20 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 t.item_path
7530: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
7550: 2e 73 74 61 74 65 20 20 20 20 20 20 0a 20 20 20 .state .
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7570: 20 20 20 20 20 20 20 20 20 74 2e 73 74 61 74 75 t.statu
7580: 73 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 s .
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
75a0: 20 20 20 74 2e 61 74 74 65 6d 70 74 6e 75 6d 20 t.attemptnum
75b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 66 t.f
75d0: 69 6e 61 6c 5f 6c 6f 67 66 20 0a 20 20 20 20 20 inal_logf .
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
75f0: 20 20 20 20 20 20 20 74 2e 6c 6f 67 64 61 74 20 t.logdat
7600: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 .
7610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7620: 20 74 2e 72 75 6e 5f 64 75 72 61 74 69 6f 0a 20 t.run_duratio.
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7640: 20 20 20 20 20 20 20 20 20 20 20 74 2e 63 6f 6d t.com
7650: 6d 65 6e 74 20 20 20 20 0a 20 20 20 20 20 20 20 ment .
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7670: 20 20 20 20 20 74 2e 65 76 65 6e 74 5f 74 69 6d t.event_tim
7680: 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e .
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
76a0: 2e 66 61 69 6c 5f 63 6f 75 6e 74 20 0a 20 20 20 .fail_count .
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
76c0: 20 20 20 20 20 20 20 20 20 74 2e 70 61 73 73 5f t.pass_
76d0: 63 6f 75 6e 74 20 0a 20 20 20 20 20 20 20 20 20 count .
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
76f0: 20 20 20 74 2e 61 72 63 68 69 76 65 64 20 20 20 t.archived
7700: 0a 0a 0a 0a 20 46 52 4f 4d 20 74 65 73 74 73 20 .... FROM tests
7710: 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 AS t INNER JOIN
7720: 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 runs AS r ON t.r
7730: 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 45 52 45 un_id=r.id WHERE
7740: 20 22 0a 09 09 20 20 20 20 20 20 20 6b 65 79 73 "... keys
7750: 74 72 20 22 20 41 4e 44 20 72 2e 72 75 6e 6e 61 tr " AND r.runna
7760: 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 6e 6e 61 me LIKE '" runna
7770: 6d 65 20 22 27 20 41 4e 44 20 69 74 65 6d 5f 70 me "' AND item_p
7780: 61 74 68 20 4c 49 4b 45 20 27 22 20 69 74 65 6d ath LIKE '" item
7790: 70 61 74 74 20 22 27 20 41 4e 44 20 74 65 73 74 patt "' AND test
77a0: 6e 61 6d 65 20 4c 49 4b 45 20 27 22 0a 09 09 20 name LIKE '"...
77b0: 20 20 20 20 20 20 74 65 73 74 70 61 74 74 20 22 testpatt "
77c0: 27 20 41 4e 44 20 74 2e 73 74 61 74 65 20 4c 49 ' AND t.state LI
77d0: 4b 45 20 27 22 20 73 74 61 74 65 70 61 74 74 20 KE '" statepatt
77e0: 22 27 20 41 4e 44 20 74 2e 73 74 61 74 75 73 20 "' AND t.status
77f0: 4c 49 4b 45 20 27 22 20 73 74 61 74 75 73 70 61 LIKE '" statuspa
7800: 74 74 20 0a 09 09 20 20 20 20 20 20 20 22 27 4f tt ... "'O
7810: 52 44 45 52 20 42 59 20 74 2e 65 76 65 6e 74 5f RDER BY t.event_
7820: 74 69 6d 65 20 41 53 43 3b 22 29 29 29 0a 20 20 time ASC;"))).
7830: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 33 (debug:print 3
7840: 20 22 71 72 79 73 74 72 3a 20 22 20 71 72 79 73 "qrystr: " qrys
7850: 74 72 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 tr). (sqlite3
7860: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 :for-each-row .
7870: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 29 0a (lambda (p).
7880: 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 (set! res
7890: 20 28 63 6f 6e 73 20 70 20 72 65 73 29 29 29 0a (cons p res))).
78a0: 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 71 72 db . qr
78b0: 79 73 74 72 29 0a 20 20 20 20 72 65 73 29 29 0a ystr). res)).
78c0: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
78d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
78e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
78f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 51 55 45 =========.;; QUE
7910: 55 45 20 55 50 20 4d 45 54 41 2c 20 54 45 53 54 UE UP META, TEST
7920: 20 53 54 41 54 55 53 20 41 4e 44 20 53 54 45 50 STATUS AND STEP
7930: 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d S.;;============
7940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 ==========..(def
7980: 69 6e 65 20 28 64 62 3a 75 70 64 61 74 65 72 20 ine (db:updater
7990: 64 62 29 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20 db). (let loop
79a0: 28 28 73 74 61 72 74 2d 74 69 6d 65 20 28 63 75 ((start-time (cu
79b0: 72 72 65 6e 74 2d 74 69 6d 65 29 29 29 0a 20 20 rrent-time))).
79c0: 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21 (thread-sleep!
79d0: 20 30 2e 35 29 20 3b 3b 20 6d 6f 76 65 20 73 61 0.5) ;; move sa
79e0: 76 65 20 74 69 6d 65 20 61 72 6f 75 6e 64 20 74 ve time around t
79f0: 6f 20 6d 69 6e 69 6d 69 7a 65 20 72 65 67 75 6c o minimize regul
7a00: 61 72 20 63 6f 6c 6c 69 73 69 6f 6e 73 3f 0a 20 ar collisions?.
7a10: 20 20 20 28 64 62 3a 77 72 69 74 65 2d 63 61 63 (db:write-cac
7a20: 68 65 64 2d 64 61 74 61 20 64 62 29 0a 20 20 20 hed-data db).
7a30: 20 28 6c 6f 6f 70 20 73 74 61 72 74 2d 74 69 6d (loop start-tim
7a40: 65 29 29 29 0a 20 20 20 20 0a 28 64 65 66 69 6e e))). .(defin
7a50: 65 20 28 64 62 3a 74 65 73 74 2d 75 70 64 61 74 e (db:test-updat
7a60: 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 74 e-meta-info db t
7a70: 65 73 74 2d 69 64 20 6d 69 6e 75 74 65 73 20 63 est-id minutes c
7a80: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
7a90: 74 6d 70 66 72 65 65 29 0a 20 20 28 6d 75 74 65 tmpfree). (mute
7aa0: 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e x-lock! *incomin
7ab0: 67 2d 6d 75 74 65 78 2a 29 0a 20 20 28 73 65 74 g-mutex*). (set
7ac0: 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 ! *incoming-data
7ad0: 2a 20 28 63 6f 6e 73 20 28 76 65 63 74 6f 72 20 * (cons (vector
7ae0: 27 6d 65 74 61 2d 69 6e 66 6f 0a 09 09 09 09 20 'meta-info.....
7af0: 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 73 65 (current-se
7b00: 63 6f 6e 64 73 29 0a 09 09 09 09 20 20 20 20 20 conds).....
7b10: 20 28 6c 69 73 74 20 63 70 75 6c 6f 61 64 0a 09 (list cpuload..
7b20: 09 09 09 09 20 20 20 20 64 69 73 6b 66 72 65 65 .... diskfree
7b30: 0a 09 09 09 09 09 20 20 20 20 6d 69 6e 75 74 65 ...... minute
7b40: 73 0a 09 09 09 09 09 20 20 20 20 74 65 73 74 2d s...... test-
7b50: 69 64 29 29 20 3b 3b 20 72 75 6e 2d 69 64 20 74 id)) ;; run-id t
7b60: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
7b70: 74 68 20 6d 69 6e 75 74 65 73 20 63 70 75 6c 6f th minutes cpulo
7b80: 61 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 66 ad diskfree tmpf
7b90: 72 65 65 29 20 0a 09 09 09 20 20 20 20 20 20 2a ree) .... *
7ba0: 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 29 29 incoming-data*))
7bb0: 0a 20 20 28 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b . (mutex-unlock
7bc0: 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 74 65 ! *incoming-mute
7bd0: 78 2a 29 0a 20 20 28 69 66 20 2a 63 61 63 68 65 x*). (if *cache
7be0: 2d 6f 6e 2a 0a 20 20 20 20 20 20 28 64 65 62 75 -on*. (debu
7bf0: 67 3a 70 72 69 6e 74 20 36 20 22 49 4e 46 4f 3a g:print 6 "INFO:
7c00: 20 2a 63 61 63 68 65 2d 6f 6e 2a 20 69 73 20 22 *cache-on* is "
7c10: 20 2a 63 61 63 68 65 2d 6f 6e 2a 20 22 2c 20 73 *cache-on* ", s
7c20: 6b 69 70 70 69 6e 67 20 63 61 63 68 65 20 77 72 kipping cache wr
7c30: 69 74 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 ite as part of t
7c40: 65 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d est-update-meta-
7c50: 69 6e 66 6f 22 29 0a 20 20 20 20 20 20 28 64 62 info"). (db
7c60: 3a 77 72 69 74 65 2d 63 61 63 68 65 64 2d 64 61 :write-cached-da
7c70: 74 61 20 64 62 29 29 29 0a 0a 28 64 65 66 69 6e ta db)))..(defin
7c80: 65 20 28 64 62 3a 77 72 69 74 65 2d 63 61 63 68 e (db:write-cach
7c90: 65 64 2d 64 61 74 61 20 64 62 29 0a 20 20 28 6c ed-data db). (l
7ca0: 65 74 20 28 28 6d 65 74 61 2d 73 74 6d 74 20 28 et ((meta-stmt (
7cb0: 73 71 6c 69 74 65 33 3a 70 72 65 70 61 72 65 20 sqlite3:prepare
7cc0: 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 db "UPDATE tests
7cd0: 20 53 45 54 20 63 70 75 6c 6f 61 64 3d 3f 2c 64 SET cpuload=?,d
7ce0: 69 73 6b 66 72 65 65 3d 3f 2c 72 75 6e 5f 64 75 iskfree=?,run_du
7cf0: 72 61 74 69 6f 6e 3d 3f 2c 73 74 61 74 65 3d 27 ration=?,state='
7d00: 52 55 4e 4e 49 4e 47 27 20 57 48 45 52 45 20 69 RUNNING' WHERE i
7d10: 64 3d 3f 20 41 4e 44 20 73 74 61 74 65 20 4e 4f d=? AND state NO
7d20: 54 20 49 4e 20 28 27 43 4f 4d 50 4c 45 54 45 44 T IN ('COMPLETED
7d30: 27 2c 27 4b 49 4c 4c 52 45 51 27 2c 27 4b 49 4c ','KILLREQ','KIL
7d40: 4c 45 44 27 29 3b 22 29 29 0a 09 28 73 74 65 70 LED');"))..(step
7d50: 2d 73 74 6d 74 20 28 73 71 6c 69 74 65 33 3a 70 -stmt (sqlite3:p
7d60: 72 65 70 61 72 65 20 64 62 20 22 49 4e 53 45 52 repare db "INSER
7d70: 54 20 4f 52 20 52 45 50 4c 41 43 45 20 69 6e 74 T OR REPLACE int
7d80: 6f 20 74 65 73 74 5f 73 74 65 70 73 20 28 74 65 o test_steps (te
7d90: 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c 73 st_id,stepname,s
7da0: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
7db0: 74 5f 74 69 6d 65 2c 63 6f 6d 6d 65 6e 74 2c 6c t_time,comment,l
7dc0: 6f 67 66 69 6c 65 29 20 56 41 4c 55 45 53 28 3f ogfile) VALUES(?
7dd0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 3b 22 29 ,?,?,?,?,?,?);")
7de0: 29 20 3b 3b 20 73 74 72 66 74 69 6d 65 28 27 25 ) ;; strftime('%
7df0: 73 27 2c 27 6e 6f 77 27 29 23 66 29 0a 09 28 64 s','now')#f)..(d
7e00: 61 74 61 20 28 73 6f 72 74 20 2a 69 6e 63 6f 6d ata (sort *incom
7e10: 69 6e 67 2d 64 61 74 61 2a 20 28 6c 61 6d 62 64 ing-data* (lambd
7e20: 61 20 28 61 20 62 29 28 3c 20 28 76 65 63 74 6f a (a b)(< (vecto
7e30: 72 2d 72 65 66 20 61 20 31 29 28 76 65 63 74 6f r-ref a 1)(vecto
7e40: 72 2d 72 65 66 20 62 20 31 29 29 29 29 29 29 0a r-ref b 1)))))).
7e50: 20 20 20 20 28 69 66 20 28 3e 20 28 6c 65 6e 67 (if (> (leng
7e60: 74 68 20 64 61 74 61 29 20 30 29 0a 09 28 64 65 th data) 0)..(de
7e70: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 57 72 69 bug:print 4 "Wri
7e80: 74 69 6e 67 20 63 61 63 68 65 64 20 64 61 74 61 ting cached data
7e90: 20 22 20 64 61 74 61 29 29 0a 20 20 20 20 28 6d " data)). (m
7ea0: 75 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 6f utex-lock! *inco
7eb0: 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 ming-mutex*).
7ec0: 20 28 73 71 6c 69 74 65 33 3a 77 69 74 68 2d 74 (sqlite3:with-t
7ed0: 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 ransaction .
7ee0: 20 64 62 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 db. (lambda
7ef0: 20 28 29 0a 20 20 20 20 20 20 20 28 66 6f 72 2d (). (for-
7f00: 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 65 6e each (lambda (en
7f10: 74 72 79 29 0a 09 09 20 20 20 28 63 61 73 65 20 try)... (case
7f20: 28 76 65 63 74 6f 72 2d 72 65 66 20 65 6e 74 72 (vector-ref entr
7f30: 79 20 30 29 0a 09 09 20 20 20 20 20 28 28 6d 65 y 0)... ((me
7f40: 74 61 2d 69 6e 66 6f 29 0a 09 09 20 20 20 20 20 ta-info)...
7f50: 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 3a (apply sqlite3:
7f60: 65 78 65 63 75 74 65 20 6d 65 74 61 2d 73 74 6d execute meta-stm
7f70: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 6e t (vector-ref en
7f80: 74 72 79 20 32 29 29 29 0a 09 09 20 20 20 20 20 try 2)))...
7f90: 28 28 73 74 65 70 2d 73 74 61 74 75 73 29 0a 09 ((step-status)..
7fa0: 09 20 20 20 20 20 20 28 61 70 70 6c 79 20 73 71 . (apply sq
7fb0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 73 74 lite3:execute st
7fc0: 65 70 2d 73 74 6d 74 20 28 76 65 63 74 6f 72 2d ep-stmt (vector-
7fd0: 72 65 66 20 65 6e 74 72 79 20 32 29 29 29 0a 09 ref entry 2)))..
7fe0: 09 20 20 20 20 20 28 65 6c 73 65 0a 09 09 20 20 . (else...
7ff0: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
8000: 20 30 20 22 45 52 52 4f 52 3a 20 51 75 65 75 65 0 "ERROR: Queue
8010: 64 20 65 6e 74 72 79 20 6e 6f 74 20 72 65 63 6f d entry not reco
8020: 67 6e 69 73 65 64 20 22 20 65 6e 74 72 79 29 29 gnised " entry))
8030: 29 29 0a 09 09 20 64 61 74 61 29 29 29 0a 20 20 ))... data))).
8040: 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c (sqlite3:final
8050: 69 7a 65 21 20 6d 65 74 61 2d 73 74 6d 74 29 20 ize! meta-stmt)
8060: 3b 3b 20 73 71 6c 69 74 65 20 69 73 20 74 68 65 ;; sqlite is the
8070: 20 62 6f 74 74 6c 65 6e 65 63 6b 2c 20 63 6c 65 bottleneck, cle
8080: 61 72 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 ar the statement
8090: 73 20 61 73 61 70 3f 0a 20 20 20 20 28 73 71 6c s asap?. (sql
80a0: 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 73 ite3:finalize! s
80b0: 74 65 70 2d 73 74 6d 74 29 0a 20 20 20 20 28 73 tep-stmt). (s
80c0: 65 74 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 et! *incoming-da
80d0: 74 61 2a 20 27 28 29 29 0a 20 20 20 20 28 6d 75 ta* '()). (mu
80e0: 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 tex-unlock! *inc
80f0: 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 29 29 0a oming-mutex*))).
8100: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 72 6f 6c .(define (db:rol
8110: 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 6c 2d 63 l-up-pass-fail-c
8120: 6f 75 6e 74 73 20 64 62 20 72 75 6e 2d 69 64 20 ounts db run-id
8130: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
8140: 61 74 68 20 73 74 61 74 75 73 29 0a 20 20 28 69 ath status). (i
8150: 66 20 28 61 6e 64 20 28 6e 6f 74 20 28 65 71 75 f (and (not (equ
8160: 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 22 al? item-path ""
8170: 29 29 0a 09 20 20 20 28 6f 72 20 28 65 71 75 61 )).. (or (equa
8180: 6c 3f 20 73 74 61 74 75 73 20 22 50 41 53 53 22 l? status "PASS"
8190: 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 6c ).. (equal
81a0: 3f 20 73 74 61 74 75 73 20 22 57 41 52 4e 22 29 ? status "WARN")
81b0: 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f .. (equal?
81c0: 20 73 74 61 74 75 73 20 22 46 41 49 4c 22 29 0a status "FAIL").
81d0: 09 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 . (equal?
81e0: 73 74 61 74 75 73 20 22 57 41 49 56 45 44 22 29 status "WAIVED")
81f0: 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f .. (equal?
8200: 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 status "RUNNING
8210: 22 29 29 29 0a 20 20 20 20 20 20 28 62 65 67 69 "))). (begi
8220: 6e 0a 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 n..(sqlite3:exec
8230: 75 74 65 20 0a 09 20 64 62 0a 09 20 22 55 50 44 ute .. db.. "UPD
8240: 41 54 45 20 74 65 73 74 73 20 0a 20 20 20 20 20 ATE tests .
8250: 20 20 20 20 20 20 20 20 53 45 54 20 66 61 69 6c SET fail
8260: 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 _count=(SELECT c
8270: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
8280: 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 sts WHERE run_id
8290: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d =? AND testname=
82a0: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 ? AND item_path
82b0: 21 3d 20 27 27 20 41 4e 44 20 73 74 61 74 75 73 != '' AND status
82c0: 3d 27 46 41 49 4c 27 29 2c 0a 20 20 20 20 20 20 ='FAIL'),.
82d0: 20 20 20 20 20 20 20 20 20 20 20 70 61 73 73 5f pass_
82e0: 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f count=(SELECT co
82f0: 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 unt(id) FROM tes
8300: 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d ts WHERE run_id=
8310: 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f ? AND testname=?
8320: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21 AND item_path !
8330: 3d 20 27 27 20 41 4e 44 20 28 73 74 61 74 75 73 = '' AND (status
8340: 3d 27 50 41 53 53 27 20 4f 52 20 73 74 61 74 75 ='PASS' OR statu
8350: 73 3d 27 57 41 52 4e 27 20 4f 52 20 73 74 61 74 s='WARN' OR stat
8360: 75 73 3d 27 57 41 49 56 45 44 27 29 29 0a 20 20 us='WAIVED')).
8370: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 WHERE
8380: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 run_id=? AND te
8390: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 stname=? AND ite
83a0: 6d 5f 70 61 74 68 3d 27 27 3b 22 0a 09 20 72 75 m_path='';".. ru
83b0: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 n-id test-name r
83c0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
83d0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
83e0: 29 0a 20 20 20 20 20 20 20 20 28 74 68 72 65 61 ). (threa
83f0: 64 2d 73 6c 65 65 70 21 20 30 2e 31 29 20 3b 3b d-sleep! 0.1) ;;
8400: 20 67 69 76 65 20 6f 74 68 65 72 20 70 72 6f 63 give other proc
8410: 65 73 73 65 73 20 61 20 63 68 61 6e 63 65 20 68 esses a chance h
8420: 65 72 65 0a 09 28 69 66 20 28 65 71 75 61 6c 3f ere..(if (equal?
8430: 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 status "RUNNING
8440: 22 29 20 3b 3b 20 72 75 6e 6e 69 6e 67 20 74 61 ") ;; running ta
8450: 6b 65 73 20 70 72 69 6f 72 69 74 79 20 6f 76 65 kes priority ove
8460: 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 74 61 74 r all other stat
8470: 65 73 2c 20 66 6f 72 63 65 20 74 68 65 20 74 65 es, force the te
8480: 73 74 20 73 74 61 74 65 20 74 6f 20 52 55 4e 4e st state to RUNN
8490: 49 4e 47 0a 09 20 20 20 20 28 73 71 6c 69 74 65 ING.. (sqlite
84a0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
84b0: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
84c0: 74 61 74 65 3d 3f 20 57 48 45 52 45 20 72 75 6e tate=? WHERE run
84d0: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 _id=? AND testna
84e0: 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 me=? AND item_pa
84f0: 74 68 3d 27 27 3b 22 20 22 52 55 4e 4e 49 4e 47 th='';" "RUNNING
8500: 22 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 " run-id test-na
8510: 6d 65 29 0a 09 20 20 20 20 28 73 71 6c 69 74 65 me).. (sqlite
8520: 33 3a 65 78 65 63 75 74 65 0a 09 20 20 20 20 20 3:execute..
8530: 64 62 0a 09 20 20 20 20 20 22 55 50 44 41 54 45 db.. "UPDATE
8540: 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 20 20 tests.
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 SE
8560: 54 20 73 74 61 74 65 3d 43 41 53 45 20 57 48 45 T state=CASE WHE
8570: 4e 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 N (SELECT count(
8580: 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 20 57 id) FROM tests W
8590: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
85a0: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
85b0: 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 item_path != ''
85c0: 20 41 4e 44 20 73 74 61 74 65 20 69 6e 20 28 27 AND state in ('
85d0: 52 55 4e 4e 49 4e 47 27 2c 27 4e 4f 54 5f 53 54 RUNNING','NOT_ST
85e0: 41 52 54 45 44 27 29 29 20 3e 20 30 20 54 48 45 ARTED')) > 0 THE
85f0: 4e 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 N .
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 52 55 'RU
8610: 4e 4e 49 4e 47 27 0a 20 20 20 20 20 20 20 20 20 NNING'.
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c EL
8630: 53 45 20 27 43 4f 4d 50 4c 45 54 45 44 27 20 45 SE 'COMPLETED' E
8640: 4e 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ND,.
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
8660: 61 74 75 73 3d 43 41 53 45 20 57 48 45 4e 20 66 atus=CASE WHEN f
8670: 61 69 6c 5f 63 6f 75 6e 74 20 3e 20 30 20 54 48 ail_count > 0 TH
8680: 45 4e 20 27 46 41 49 4c 27 20 57 48 45 4e 20 70 EN 'FAIL' WHEN p
8690: 61 73 73 5f 63 6f 75 6e 74 20 3e 20 30 20 41 4e ass_count > 0 AN
86a0: 44 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 30 20 54 D fail_count=0 T
86b0: 48 45 4e 20 27 50 41 53 53 27 20 45 4c 53 45 20 HEN 'PASS' ELSE
86c0: 27 55 4e 4b 4e 4f 57 4e 27 20 45 4e 44 0a 20 20 'UNKNOWN' END.
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
86e0: 20 20 20 20 20 57 48 45 52 45 20 72 75 6e 5f 69 WHERE run_i
86f0: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
8700: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
8710: 3d 27 27 3b 22 0a 09 20 20 20 20 20 72 75 6e 2d ='';".. run-
8720: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 75 6e id test-name run
8730: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 29 0a -id test-name)).
8740: 09 23 66 29 0a 20 20 20 20 20 20 23 66 29 29 0a .#f). #f)).
8750: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
8760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 65 ==========.;; Te
87a0: 73 74 73 20 6d 65 74 61 20 64 61 74 61 0a 3b 3b sts meta data.;;
87b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
87c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
87d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
87e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
87f0: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 61 64 20 ======..;; read
8800: 74 68 65 20 72 65 63 6f 72 64 20 67 69 76 65 6e the record given
8810: 20 61 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 a testname.(def
8820: 69 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 ine (db:testmeta
8830: 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 -get-record db t
8840: 65 73 74 6e 61 6d 65 29 0a 20 20 28 6c 65 74 20 estname). (let
8850: 28 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 ((res #f)). (
8860: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
8870: 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 -row. (lambd
8880: 61 20 28 69 64 20 74 65 73 74 6e 61 6d 65 20 61 a (id testname a
8890: 75 74 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 uthor owner desc
88a0: 72 69 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 ription reviewed
88b0: 20 69 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 iterated avg_ru
88c0: 6e 74 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 ntime avg_disk t
88d0: 61 67 73 29 0a 20 20 20 20 20 20 20 28 73 65 74 ags). (set
88e0: 21 20 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 ! res (vector id
88f0: 20 74 65 73 74 6e 61 6d 65 20 61 75 74 68 6f 72 testname author
8900: 20 6f 77 6e 65 72 20 64 65 73 63 72 69 70 74 69 owner descripti
8910: 6f 6e 20 72 65 76 69 65 77 65 64 20 69 74 65 72 on reviewed iter
8920: 61 74 65 64 20 61 76 67 5f 72 75 6e 74 69 6d 65 ated avg_runtime
8930: 20 61 76 67 5f 64 69 73 6b 20 74 61 67 73 29 29 avg_disk tags))
8940: 29 0a 20 20 20 20 20 64 62 20 22 53 45 4c 45 43 ). db "SELEC
8950: 54 20 69 64 2c 74 65 73 74 6e 61 6d 65 2c 61 75 T id,testname,au
8960: 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 thor,owner,descr
8970: 69 70 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c iption,reviewed,
8980: 69 74 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e iterated,avg_run
8990: 74 69 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 time,avg_disk,ta
89a0: 67 73 20 46 52 4f 4d 20 74 65 73 74 5f 6d 65 74 gs FROM test_met
89b0: 61 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 a WHERE testname
89c0: 3d 3f 3b 22 0a 20 20 20 20 20 74 65 73 74 6e 61 =?;". testna
89d0: 6d 65 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b me). res))..;
89e0: 3b 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 72 ; create a new r
89f0: 65 63 6f 72 64 20 66 6f 72 20 61 20 67 69 76 65 ecord for a give
8a00: 6e 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 n testname.(defi
8a10: 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d ne (db:testmeta-
8a20: 61 64 64 2d 72 65 63 6f 72 64 20 64 62 20 74 65 add-record db te
8a30: 73 74 6e 61 6d 65 29 0a 20 20 28 73 71 6c 69 74 stname). (sqlit
8a40: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 e3:execute db "I
8a50: 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 NSERT OR IGNORE
8a60: 49 4e 54 4f 20 74 65 73 74 5f 6d 65 74 61 20 28 INTO test_meta (
8a70: 74 65 73 74 6e 61 6d 65 2c 61 75 74 68 6f 72 2c testname,author,
8a80: 6f 77 6e 65 72 2c 64 65 73 63 72 69 70 74 69 6f owner,descriptio
8a90: 6e 2c 72 65 76 69 65 77 65 64 2c 69 74 65 72 61 n,reviewed,itera
8aa0: 74 65 64 2c 61 76 67 5f 72 75 6e 74 69 6d 65 2c ted,avg_runtime,
8ab0: 61 76 67 5f 64 69 73 6b 2c 74 61 67 73 29 20 56 avg_disk,tags) V
8ac0: 41 4c 55 45 53 20 28 3f 2c 27 27 2c 27 27 2c 27 ALUES (?,'','','
8ad0: 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 ','','','','',''
8ae0: 29 3b 22 20 74 65 73 74 6e 61 6d 65 29 29 0a 0a );" testname))..
8af0: 3b 3b 20 75 70 64 61 74 65 20 6f 6e 65 20 6f 66 ;; update one of
8b00: 20 74 68 65 20 74 65 73 74 6d 65 74 61 20 66 69 the testmeta fi
8b10: 65 6c 64 73 0a 28 64 65 66 69 6e 65 20 28 64 62 elds.(define (db
8b20: 3a 74 65 73 74 6d 65 74 61 2d 75 70 64 61 74 65 :testmeta-update
8b30: 2d 66 69 65 6c 64 20 64 62 20 74 65 73 74 6e 61 -field db testna
8b40: 6d 65 20 66 69 65 6c 64 20 76 61 6c 75 65 29 0a me field value).
8b50: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
8b60: 74 65 20 64 62 20 28 63 6f 6e 63 20 22 55 50 44 te db (conc "UPD
8b70: 41 54 45 20 74 65 73 74 5f 6d 65 74 61 20 53 45 ATE test_meta SE
8b80: 54 20 22 20 66 69 65 6c 64 20 22 3d 3f 20 57 48 T " field "=? WH
8b90: 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 3b 22 ERE testname=?;"
8ba0: 29 20 76 61 6c 75 65 20 74 65 73 74 6e 61 6d 65 ) value testname
8bb0: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
8bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
8c00: 54 20 45 20 53 20 54 20 20 20 44 20 41 20 54 20 T E S T D A T
8c10: 41 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d A .;;===========
8c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 ===========..(de
8c60: 66 69 6e 65 20 28 64 62 3a 63 73 76 2d 3e 74 65 fine (db:csv->te
8c70: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
8c80: 69 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 64 id csvdata). (d
8c90: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 74 65 ebug:print 4 "te
8ca0: 73 74 2d 69 64 20 22 20 74 65 73 74 2d 69 64 20 st-id " test-id
8cb0: 22 2c 20 63 73 76 64 61 74 61 3a 20 22 20 63 73 ", csvdata: " cs
8cc0: 76 64 61 74 61 29 0a 20 20 28 6c 65 74 20 28 28 vdata). (let ((
8cd0: 63 73 76 6c 69 73 74 20 28 63 73 76 2d 3e 6c 69 csvlist (csv->li
8ce0: 73 74 20 28 6d 61 6b 65 2d 63 73 76 2d 72 65 61 st (make-csv-rea
8cf0: 64 65 72 0a 09 09 09 20 20 20 20 20 28 6f 70 65 der.... (ope
8d00: 6e 2d 69 6e 70 75 74 2d 73 74 72 69 6e 67 20 63 n-input-string c
8d10: 73 76 64 61 74 61 29 0a 09 09 09 20 20 20 20 20 svdata)....
8d20: 27 28 28 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 '((strip-leading
8d30: 2d 77 68 69 74 65 73 70 61 63 65 3f 20 23 74 29 -whitespace? #t)
8d40: 0a 09 09 09 20 20 20 20 20 20 20 28 73 74 72 69 .... (stri
8d50: 70 2d 74 72 61 69 6c 69 6e 67 2d 77 68 69 74 65 p-trailing-white
8d60: 73 70 61 63 65 3f 20 23 74 29 29 20 29 29 29 29 space? #t)) ))))
8d70: 20 3b 3b 20 28 63 73 76 2d 3e 6c 69 73 74 20 63 ;; (csv->list c
8d80: 73 76 64 61 74 61 29 29 29 0a 20 20 20 20 28 66 svdata))). (f
8d90: 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 6c or-each . (l
8da0: 61 6d 62 64 61 20 28 63 73 76 72 6f 77 29 0a 20 ambda (csvrow).
8db0: 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 61 (let* ((pa
8dc0: 64 64 65 64 2d 72 6f 77 20 20 28 74 61 6b 65 20 dded-row (take
8dd0: 28 61 70 70 65 6e 64 20 63 73 76 72 6f 77 20 28 (append csvrow (
8de0: 6c 69 73 74 20 23 66 20 23 66 20 23 66 20 23 66 list #f #f #f #f
8df0: 20 23 66 20 23 66 20 23 66 20 23 66 20 23 66 29 #f #f #f #f #f)
8e00: 29 20 39 29 29 0a 09 20 20 20 20 20 20 28 63 61 ) 9)).. (ca
8e10: 74 65 67 6f 72 79 20 20 20 20 28 6c 69 73 74 2d tegory (list-
8e20: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 30 ref padded-row 0
8e30: 29 29 0a 09 20 20 20 20 20 20 28 76 61 72 69 61 )).. (varia
8e40: 62 6c 65 20 20 20 20 28 6c 69 73 74 2d 72 65 66 ble (list-ref
8e50: 20 70 61 64 64 65 64 2d 72 6f 77 20 31 29 29 0a padded-row 1)).
8e60: 09 20 20 20 20 20 20 28 76 61 6c 75 65 20 20 20 . (value
8e70: 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 (any->number
8e80: 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 -if-possible (li
8e90: 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f st-ref padded-ro
8ea0: 77 20 32 29 29 29 0a 09 20 20 20 20 20 20 28 65 w 2))).. (e
8eb0: 78 70 65 63 74 65 64 20 20 20 20 28 61 6e 79 2d xpected (any-
8ec0: 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 >number-if-possi
8ed0: 62 6c 65 20 28 6c 69 73 74 2d 72 65 66 20 70 61 ble (list-ref pa
8ee0: 64 64 65 64 2d 72 6f 77 20 33 29 29 29 0a 09 20 dded-row 3)))..
8ef0: 20 20 20 20 20 28 74 6f 6c 20 20 20 20 20 20 20 (tol
8f00: 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 (any->number-i
8f10: 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 f-possible (list
8f20: 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 -ref padded-row
8f30: 34 29 29 29 20 3b 3b 20 3e 2c 20 3c 2c 20 3e 3d 4))) ;; >, <, >=
8f40: 2c 20 3c 3d 2c 20 6f 72 20 61 20 6e 75 6d 62 65 , <=, or a numbe
8f50: 72 0a 09 20 20 20 20 20 20 28 75 6e 69 74 73 20 r.. (units
8f60: 20 20 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 (list-ref
8f70: 70 61 64 64 65 64 2d 72 6f 77 20 35 29 29 0a 09 padded-row 5))..
8f80: 20 20 20 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 (comment
8f90: 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 (list-ref pad
8fa0: 64 65 64 2d 72 6f 77 20 36 29 29 0a 09 20 20 20 ded-row 6))..
8fb0: 20 20 20 28 73 74 61 74 75 73 20 20 20 20 20 20 (status
8fc0: 28 6c 65 74 20 28 28 73 20 28 6c 69 73 74 2d 72 (let ((s (list-r
8fd0: 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 37 29 ef padded-row 7)
8fe0: 29 29 0a 09 09 09 20 20 20 20 20 28 69 66 20 28 )).... (if (
8ff0: 61 6e 64 20 28 73 74 72 69 6e 67 3f 20 73 29 28 and (string? s)(
9000: 6f 72 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 or (string-match
9010: 20 28 72 65 67 65 78 70 20 22 5e 5c 5c 73 2a 24 (regexp "^\\s*$
9020: 22 29 20 73 29 0a 09 09 09 09 09 09 20 20 20 20 ") s).......
9030: 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 (string-match (
9040: 72 65 67 65 78 70 20 22 5e 6e 2f 61 24 22 29 20 regexp "^n/a$")
9050: 73 29 29 29 0a 09 09 09 09 20 23 66 0a 09 09 09 s)))..... #f....
9060: 09 20 73 29 29 29 20 3b 3b 20 69 66 20 73 70 65 . s))) ;; if spe
9070: 63 69 66 69 65 64 20 6f 6e 20 74 68 65 20 69 6e cified on the in
9080: 70 75 74 20 74 68 65 6e 20 75 73 65 2c 20 65 6c put then use, el
9090: 73 65 20 63 61 6c 63 75 6c 61 74 65 0a 09 20 20 se calculate..
90a0: 20 20 20 20 28 74 79 70 65 20 20 20 20 20 20 20 (type
90b0: 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 (list-ref padde
90c0: 64 2d 72 6f 77 20 38 29 29 29 0a 09 20 3b 3b 20 d-row 8))).. ;;
90d0: 6c 6f 6f 6b 20 75 70 20 65 78 70 65 63 74 65 64 look up expected
90e0: 2c 74 6f 6c 2c 75 6e 69 74 73 20 66 72 6f 6d 20 ,tol,units from
90f0: 70 72 65 76 69 6f 75 73 20 62 65 73 74 20 66 69 previous best fi
9100: 74 20 74 65 73 74 20 69 66 20 74 68 65 79 20 61 t test if they a
9110: 72 65 20 61 6c 6c 20 65 69 74 68 65 72 20 23 66 re all either #f
9120: 20 6f 72 20 27 27 0a 09 20 28 64 65 62 75 67 3a or ''.. (debug:
9130: 70 72 69 6e 74 20 34 20 22 42 45 46 4f 52 45 3a print 4 "BEFORE:
9140: 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 category: " cat
9150: 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 egory " variable
9160: 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 : " variable " v
9170: 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 alue: " value ..
9180: 09 20 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 . ", expect
9190: 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 ed: " expected "
91a0: 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e tol: " tol " un
91b0: 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 its: " units " s
91c0: 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 tatus: " status
91d0: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
91e0: 6d 65 6e 74 20 22 20 74 79 70 65 3a 20 22 20 74 ment " type: " t
91f0: 79 70 65 29 0a 0a 09 20 28 69 66 20 28 61 6e 64 ype)... (if (and
9200: 20 28 6f 72 20 28 6e 6f 74 20 65 78 70 65 63 74 (or (not expect
9210: 65 64 29 28 65 71 75 61 6c 3f 20 65 78 70 65 63 ed)(equal? expec
9220: 74 65 64 20 22 22 29 29 0a 09 09 20 20 28 6f 72 ted ""))... (or
9230: 20 28 6e 6f 74 20 74 6f 6c 29 20 20 20 20 20 28 (not tol) (
9240: 65 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 20 equal? expected
9250: 22 22 29 29 0a 09 09 20 20 28 6f 72 20 28 6e 6f ""))... (or (no
9260: 74 20 75 6e 69 74 73 29 20 20 20 28 65 71 75 61 t units) (equa
9270: 6c 3f 20 65 78 70 65 63 74 65 64 20 22 22 29 29 l? expected ""))
9280: 29 0a 09 20 20 20 20 20 28 6c 65 74 2d 76 61 6c ).. (let-val
9290: 75 65 73 20 28 28 28 6e 65 77 2d 65 78 70 65 63 ues (((new-expec
92a0: 74 65 64 20 6e 65 77 2d 74 6f 6c 20 6e 65 77 2d ted new-tol new-
92b0: 75 6e 69 74 73 29 28 64 62 3a 67 65 74 2d 70 72 units)(db:get-pr
92c0: 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 ev-tol-for-test
92d0: 64 62 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 db test-id categ
92e0: 6f 72 79 20 76 61 72 69 61 62 6c 65 29 29 29 0a ory variable))).
92f0: 09 09 09 20 28 73 65 74 21 20 65 78 70 65 63 74 ... (set! expect
9300: 65 64 20 6e 65 77 2d 65 78 70 65 63 74 65 64 29 ed new-expected)
9310: 0a 09 09 09 20 28 73 65 74 21 20 74 6f 6c 20 20 .... (set! tol
9320: 20 20 20 20 6e 65 77 2d 74 6f 6c 29 0a 09 09 09 new-tol)....
9330: 20 28 73 65 74 21 20 75 6e 69 74 73 20 20 20 20 (set! units
9340: 6e 65 77 2d 75 6e 69 74 73 29 29 29 0a 0a 09 20 new-units)))...
9350: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 (debug:print 4 "
9360: 41 46 54 45 52 3a 20 20 63 61 74 65 67 6f 72 79 AFTER: category
9370: 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 20 76 : " category " v
9380: 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 69 61 ariable: " varia
9390: 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 20 76 ble " value: " v
93a0: 61 6c 75 65 20 0a 09 09 20 20 20 20 20 20 22 2c alue ... ",
93b0: 20 65 78 70 65 63 74 65 64 3a 20 22 20 65 78 70 expected: " exp
93c0: 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 74 ected " tol: " t
93d0: 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 75 6e ol " units: " un
93e0: 69 74 73 20 22 20 73 74 61 74 75 73 3a 20 22 20 its " status: "
93f0: 73 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e 74 status " comment
9400: 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 3b : " comment).. ;
9410: 3b 20 63 61 6c 63 75 6c 61 74 65 20 73 74 61 74 ; calculate stat
9420: 75 73 20 69 66 20 4e 4f 54 20 73 70 65 63 69 66 us if NOT specif
9430: 69 65 64 0a 09 20 28 69 66 20 28 61 6e 64 20 28 ied.. (if (and (
9440: 6e 6f 74 20 73 74 61 74 75 73 29 28 6e 75 6d 62 not status)(numb
9450: 65 72 3f 20 65 78 70 65 63 74 65 64 29 28 6e 75 er? expected)(nu
9460: 6d 62 65 72 3f 20 76 61 6c 75 65 29 29 20 3b 3b mber? value)) ;;
9470: 20 6e 65 65 64 20 65 78 70 65 63 74 65 64 20 61 need expected a
9480: 6e 64 20 76 61 6c 75 65 20 74 6f 20 62 65 20 6e nd value to be n
9490: 75 6d 62 65 72 73 0a 09 20 20 20 20 20 28 69 66 umbers.. (if
94a0: 20 28 6e 75 6d 62 65 72 3f 20 74 6f 6c 29 20 3b (number? tol) ;
94b0: 3b 20 69 66 20 74 6f 6c 20 69 73 20 61 20 6e 75 ; if tol is a nu
94c0: 6d 62 65 72 20 74 68 65 6e 20 77 65 20 64 6f 20 mber then we do
94d0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 63 6f 6d the standard com
94e0: 70 61 72 69 73 6f 6e 0a 09 09 20 28 6c 65 74 2a parison... (let*
94f0: 20 28 28 6d 61 78 2d 76 61 6c 20 28 2b 20 65 78 ((max-val (+ ex
9500: 70 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 pected tol))....
9510: 28 6d 69 6e 2d 76 61 6c 20 28 2d 20 65 78 70 65 (min-val (- expe
9520: 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 28 72 cted tol))....(r
9530: 65 73 75 6c 74 20 20 28 61 6e 64 20 28 3e 3d 20 esult (and (>=
9540: 20 76 61 6c 75 65 20 6d 69 6e 2d 76 61 6c 29 28 value min-val)(
9550: 3c 3d 20 76 61 6c 75 65 20 6d 61 78 2d 76 61 6c <= value max-val
9560: 29 29 29 29 0a 09 09 20 20 20 28 64 65 62 75 67 ))))... (debug
9570: 3a 70 72 69 6e 74 20 34 20 22 6d 61 78 2d 76 61 :print 4 "max-va
9580: 6c 3a 20 22 20 6d 61 78 2d 76 61 6c 20 22 20 6d l: " max-val " m
9590: 69 6e 2d 76 61 6c 3a 20 22 20 6d 69 6e 2d 76 61 in-val: " min-va
95a0: 6c 20 22 20 72 65 73 75 6c 74 3a 20 22 20 72 65 l " result: " re
95b0: 73 75 6c 74 29 0a 09 09 20 20 20 28 73 65 74 21 sult)... (set!
95c0: 20 73 74 61 74 75 73 20 28 69 66 20 72 65 73 75 status (if resu
95d0: 6c 74 20 22 70 61 73 73 22 20 22 66 61 69 6c 22 lt "pass" "fail"
95e0: 29 29 29 0a 09 09 20 28 73 65 74 21 20 73 74 61 )))... (set! sta
95f0: 74 75 73 20 3b 3b 20 4e 42 2f 2f 20 6e 65 65 64 tus ;; NB// need
9600: 20 74 6f 20 61 73 73 65 73 73 20 65 61 63 68 20 to assess each
9610: 6f 6e 65 20 28 69 2e 65 2e 20 6e 6f 74 20 72 65 one (i.e. not re
9620: 74 75 72 6e 20 6f 70 65 72 61 74 6f 72 20 73 69 turn operator si
9630: 6e 63 65 20 6e 65 65 64 20 74 6f 20 61 63 74 20 nce need to act
9640: 69 66 20 6e 6f 74 20 76 61 6c 69 64 20 6f 70 2e if not valid op.
9650: 0a 09 09 20 20 20 20 20 20 20 28 63 61 73 65 20 ... (case
9660: 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 (string->symbol
9670: 74 6f 6c 29 20 3b 3b 20 74 6f 6c 20 73 68 6f 75 tol) ;; tol shou
9680: 6c 64 20 62 65 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 ld be >, <, >=,
9690: 3c 3d 0a 09 09 09 20 28 28 3e 29 20 20 28 69 66 <=.... ((>) (if
96a0: 20 28 3e 20 20 76 61 6c 75 65 20 65 78 70 65 63 (> value expec
96b0: 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 ted) "pass" "fai
96c0: 6c 22 29 29 0a 09 09 09 20 28 28 3c 29 20 20 28 l")).... ((<) (
96d0: 69 66 20 28 3c 20 20 76 61 6c 75 65 20 65 78 70 if (< value exp
96e0: 65 63 74 65 64 29 20 22 70 61 73 73 22 20 22 66 ected) "pass" "f
96f0: 61 69 6c 22 29 29 0a 09 09 09 20 28 28 3e 3d 29 ail")).... ((>=)
9700: 20 28 69 66 20 28 3e 3d 20 76 61 6c 75 65 20 65 (if (>= value e
9710: 78 70 65 63 74 65 64 29 20 22 70 61 73 73 22 20 xpected) "pass"
9720: 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 3c "fail")).... ((<
9730: 3d 29 20 28 69 66 20 28 3c 3d 20 76 61 6c 75 65 =) (if (<= value
9740: 20 65 78 70 65 63 74 65 64 29 20 22 70 61 73 73 expected) "pass
9750: 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 " "fail")).... (
9760: 65 6c 73 65 20 28 63 6f 6e 63 20 22 45 52 52 4f else (conc "ERRO
9770: 52 3a 20 62 61 64 20 74 6f 6c 20 63 6f 6d 70 61 R: bad tol compa
9780: 72 61 74 6f 72 20 22 20 74 6f 6c 29 29 29 29 29 rator " tol)))))
9790: 29 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ).. (debug:print
97a0: 20 34 20 22 41 46 54 45 52 32 3a 20 63 61 74 65 4 "AFTER2: cate
97b0: 67 6f 72 79 3a 20 22 20 63 61 74 65 67 6f 72 79 gory: " category
97c0: 20 22 20 76 61 72 69 61 62 6c 65 3a 20 22 20 76 " variable: " v
97d0: 61 72 69 61 62 6c 65 20 22 20 76 61 6c 75 65 3a ariable " value:
97e0: 20 22 20 76 61 6c 75 65 20 0a 09 09 20 20 20 20 " value ...
97f0: 20 20 22 2c 20 65 78 70 65 63 74 65 64 3a 20 22 ", expected: "
9800: 20 65 78 70 65 63 74 65 64 20 22 20 74 6f 6c 3a expected " tol:
9810: 20 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 " tol " units:
9820: 22 20 75 6e 69 74 73 20 22 20 73 74 61 74 75 73 " units " status
9830: 3a 20 22 20 73 74 61 74 75 73 20 22 20 63 6f 6d : " status " com
9840: 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 ment: " comment)
9850: 0a 09 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 .. (sqlite3:exec
9860: 75 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f ute db "INSERT O
9870: 52 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 R REPLACE INTO t
9880: 65 73 74 5f 64 61 74 61 20 28 74 65 73 74 5f 69 est_data (test_i
9890: 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 d,category,varia
98a0: 62 6c 65 2c 76 61 6c 75 65 2c 65 78 70 65 63 74 ble,value,expect
98b0: 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f 6d ed,tol,units,com
98c0: 6d 65 6e 74 2c 73 74 61 74 75 73 2c 74 79 70 65 ment,status,type
98d0: 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c ) VALUES (?,?,?,
98e0: 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 3b 22 ?,?,?,?,?,?,?);"
98f0: 0a 09 09 09 20 20 74 65 73 74 2d 69 64 20 63 61 .... test-id ca
9900: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 tegory variable
9910: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 value expected t
9920: 6f 6c 20 75 6e 69 74 73 20 28 69 66 20 63 6f 6d ol units (if com
9930: 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 22 22 29 ment comment "")
9940: 20 73 74 61 74 75 73 20 74 79 70 65 29 29 29 0a status type))).
9950: 20 20 20 20 20 63 73 76 6c 69 73 74 29 29 29 0a csvlist))).
9960: 0a 3b 3b 20 67 65 74 20 61 20 6c 69 73 74 20 6f .;; get a list o
9970: 66 20 74 65 73 74 5f 64 61 74 61 20 72 65 63 6f f test_data reco
9980: 72 64 73 20 6d 61 74 63 68 69 6e 67 20 63 61 74 rds matching cat
9990: 65 67 6f 72 79 70 61 74 74 0a 28 64 65 66 69 6e egorypatt.(defin
99a0: 65 20 28 64 62 3a 72 65 61 64 2d 74 65 73 74 2d e (db:read-test-
99b0: 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 data db test-id
99c0: 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 20 categorypatt).
99d0: 28 6c 65 74 20 28 28 72 65 73 20 27 28 29 29 29 (let ((res '()))
99e0: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f . (sqlite3:fo
99f0: 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 r-each-row .
9a00: 20 28 6c 61 6d 62 64 61 20 28 69 64 20 74 65 73 (lambda (id tes
9a10: 74 5f 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 t_id category va
9a20: 72 69 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 riable value exp
9a30: 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 ected tol units
9a40: 63 6f 6d 6d 65 6e 74 20 73 74 61 74 75 73 20 74 comment status t
9a50: 79 70 65 29 0a 20 20 20 20 20 20 20 28 73 65 74 ype). (set
9a60: 21 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 ! res (cons (vec
9a70: 74 6f 72 20 69 64 20 74 65 73 74 5f 69 64 20 63 tor id test_id c
9a80: 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 ategory variable
9a90: 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 value expected
9aa0: 74 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e tol units commen
9ab0: 74 20 73 74 61 74 75 73 20 74 79 70 65 29 20 72 t status type) r
9ac0: 65 73 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 es))). db.
9ad0: 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 74 65 "SELECT id,te
9ae0: 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 st_id,category,v
9af0: 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 ariable,value,ex
9b00: 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 pected,tol,units
9b10: 2c 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 75 73 2c ,comment,status,
9b20: 74 79 70 65 20 46 52 4f 4d 20 74 65 73 74 5f 64 type FROM test_d
9b30: 61 74 61 20 57 48 45 52 45 20 74 65 73 74 5f 69 ata WHERE test_i
9b40: 64 3d 3f 20 41 4e 44 20 63 61 74 65 67 6f 72 79 d=? AND category
9b50: 20 4c 49 4b 45 20 3f 20 4f 52 44 45 52 20 42 59 LIKE ? ORDER BY
9b60: 20 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 category,variab
9b70: 6c 65 3b 22 20 74 65 73 74 2d 69 64 20 63 61 74 le;" test-id cat
9b80: 65 67 6f 72 79 70 61 74 74 29 0a 20 20 20 20 28 egorypatt). (
9b90: 72 65 76 65 72 73 65 20 72 65 73 29 29 29 0a 0a reverse res)))..
9ba0: 28 64 65 66 69 6e 65 20 28 64 62 3a 6c 6f 61 64 (define (db:load
9bb0: 2d 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 -test-data db te
9bc0: 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 20 6c 6f st-id). (let lo
9bd0: 6f 70 20 28 28 6c 69 6e 20 28 72 65 61 64 2d 6c op ((lin (read-l
9be0: 69 6e 65 29 29 29 0a 20 20 20 20 28 69 66 20 28 ine))). (if (
9bf0: 6e 6f 74 20 28 65 6f 66 2d 6f 62 6a 65 63 74 3f not (eof-object?
9c00: 20 6c 69 6e 29 29 0a 09 28 62 65 67 69 6e 0a 09 lin))..(begin..
9c10: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 (debug:print 4
9c20: 20 6c 69 6e 29 0a 09 20 20 28 72 64 62 3a 63 73 lin).. (rdb:cs
9c30: 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 62 20 v->test-data db
9c40: 74 65 73 74 2d 69 64 20 6c 69 6e 29 0a 09 20 20 test-id lin)..
9c50: 28 6c 6f 6f 70 20 28 72 65 61 64 2d 6c 69 6e 65 (loop (read-line
9c60: 29 29 29 29 29 0a 20 20 3b 3b 20 72 6f 6c 6c 20 ))))). ;; roll
9c70: 75 70 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 up the current r
9c80: 65 73 75 6c 74 73 2e 0a 20 20 3b 3b 20 46 49 58 esults.. ;; FIX
9c90: 4d 45 3a 20 41 64 64 20 74 68 65 20 73 74 61 74 ME: Add the stat
9ca0: 75 73 20 74 6f 20 0a 20 20 28 72 64 62 3a 74 65 us to . (rdb:te
9cb0: 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 20 64 st-data-rollup d
9cc0: 62 20 74 65 73 74 2d 69 64 20 23 66 29 29 0a 0a b test-id #f))..
9cd0: 3b 3b 20 57 41 52 4e 49 4e 47 3a 20 44 6f 20 4e ;; WARNING: Do N
9ce0: 4f 54 20 63 61 6c 6c 20 74 68 69 73 20 66 6f 72 OT call this for
9cf0: 20 74 68 65 20 70 61 72 65 6e 74 20 74 65 73 74 the parent test
9d00: 20 6f 6e 20 61 6e 20 69 74 65 72 61 74 65 64 20 on an iterated
9d10: 74 65 73 74 0a 3b 3b 20 52 6f 6c 6c 20 75 70 20 test.;; Roll up
9d20: 74 65 73 74 5f 64 61 74 61 20 70 61 73 73 2f 66 test_data pass/f
9d30: 61 69 6c 20 72 65 73 75 6c 74 73 0a 3b 3b 20 6c ail results.;; l
9d40: 6f 6f 6b 20 61 74 20 74 68 65 20 74 65 73 74 5f ook at the test_
9d50: 64 61 74 61 20 73 74 61 74 75 73 20 66 69 65 6c data status fiel
9d60: 64 2c 20 0a 3b 3b 20 20 20 20 69 66 20 61 6c 6c d, .;; if all
9d70: 20 61 72 65 20 70 61 73 73 20 28 61 6e 79 20 63 are pass (any c
9d80: 61 73 65 29 20 61 6e 64 20 74 68 65 20 74 65 73 ase) and the tes
9d90: 74 20 73 74 61 74 75 73 20 69 73 20 50 41 53 53 t status is PASS
9da0: 20 6f 72 20 4e 55 4c 4c 20 6f 72 20 27 27 20 74 or NULL or '' t
9db0: 68 65 6e 20 73 65 74 20 74 65 73 74 20 73 74 61 hen set test sta
9dc0: 74 75 73 20 74 6f 20 50 41 53 53 2e 0a 3b 3b 20 tus to PASS..;;
9dd0: 20 20 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 if one or mor
9de0: 65 20 61 72 65 20 66 61 69 6c 20 28 61 6e 79 20 e are fail (any
9df0: 63 61 73 65 29 20 74 68 65 6e 20 73 65 74 20 74 case) then set t
9e00: 65 73 74 20 73 74 61 74 75 73 20 74 6f 20 50 41 est status to PA
9e10: 53 53 2c 20 6e 6f 6e 20 22 70 61 73 73 22 20 6f SS, non "pass" o
9e20: 72 20 22 66 61 69 6c 22 20 61 72 65 20 69 67 6e r "fail" are ign
9e30: 6f 72 65 64 0a 28 64 65 66 69 6e 65 20 28 64 62 ored.(define (db
9e40: 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 :test-data-rollu
9e50: 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 61 p db test-id sta
9e60: 74 75 73 29 0a 20 20 28 73 71 6c 69 74 65 33 3a tus). (sqlite3:
9e70: 65 78 65 63 75 74 65 20 0a 20 20 20 64 62 20 0a execute . db .
9e80: 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 73 "UPDATE tests
9e90: 20 0a 20 20 20 20 20 20 53 45 54 20 66 61 69 6c . SET fail
9ea0: 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 _count=(SELECT c
9eb0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
9ec0: 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 st_data WHERE te
9ed0: 73 74 5f 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 st_id=? AND stat
9ee0: 75 73 20 6c 69 6b 65 20 27 66 61 69 6c 27 29 2c us like 'fail'),
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 70 61 73 73 5f . pass_
9f00: 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f count=(SELECT co
9f10: 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 unt(id) FROM tes
9f20: 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 73 t_data WHERE tes
9f30: 74 5f 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 t_id=? AND statu
9f40: 73 20 6c 69 6b 65 20 27 70 61 73 73 27 29 0a 20 s like 'pass').
9f50: 20 20 20 20 20 57 48 45 52 45 20 69 64 3d 3f 3b WHERE id=?;
9f60: 22 0a 20 20 20 74 65 73 74 2d 69 64 20 74 65 73 ". test-id tes
9f70: 74 2d 69 64 20 74 65 73 74 2d 69 64 29 0a 20 20 t-id test-id).
9f80: 3b 3b 20 69 66 20 74 68 65 20 74 65 73 74 20 69 ;; if the test i
9f90: 73 20 6e 6f 74 20 46 41 49 4c 20 74 68 65 6e 20 s not FAIL then
9fa0: 73 65 74 20 73 74 61 74 75 73 20 62 61 73 65 64 set status based
9fb0: 20 6f 6e 20 74 68 65 20 66 61 69 6c 20 61 6e 64 on the fail and
9fc0: 20 70 61 73 73 20 63 6f 75 6e 74 73 2e 0a 20 20 pass counts..
9fd0: 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 31 (thread-sleep! 1
9fe0: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
9ff0: 63 75 74 65 0a 20 20 20 64 62 20 20 20 3b 3b 3b cute. db ;;;
a000: 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64 20 74 68 NOTE: Should th
a010: 69 73 20 62 65 20 57 41 52 4e 2c 46 41 49 4c 3f is be WARN,FAIL?
a020: 20 41 20 57 41 52 4e 20 69 73 20 6e 6f 74 20 61 A WARN is not a
a030: 20 46 41 49 4c 3f 3f 3f 3f 3f 20 42 55 47 20 46 FAIL????? BUG F
a040: 49 58 4d 45 0a 20 20 20 22 55 50 44 41 54 45 20 IXME. "UPDATE
a050: 74 65 73 74 73 0a 20 20 20 20 20 20 53 45 54 20 tests. SET
a060: 73 74 61 74 75 73 3d 43 41 53 45 20 57 48 45 4e status=CASE WHEN
a070: 20 28 53 45 4c 45 43 54 20 66 61 69 6c 5f 63 6f (SELECT fail_co
a080: 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 unt FROM tests W
a090: 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 0a HERE id=?) > 0 .
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a0b0: 20 20 20 20 20 20 20 20 20 54 48 45 4e 20 27 46 THEN 'F
a0c0: 41 49 4c 27 0a 20 20 20 20 20 20 20 20 20 20 20 AIL'.
a0d0: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 4e 20 WHEN
a0e0: 28 53 45 4c 45 43 54 20 70 61 73 73 5f 63 6f 75 (SELECT pass_cou
a0f0: 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 nt FROM tests WH
a100: 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 41 4e ERE id=?) > 0 AN
a110: 44 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 D .
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 53 (S
a130: 45 4c 45 43 54 20 73 74 61 74 75 73 20 46 52 4f ELECT status FRO
a140: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 M tests WHERE id
a150: 3d 3f 29 20 4e 4f 54 20 49 4e 20 28 27 57 41 52 =?) NOT IN ('WAR
a160: 4e 27 2c 27 46 41 49 4c 27 29 0a 20 20 20 20 20 N','FAIL').
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a180: 20 20 20 20 54 48 45 4e 20 27 50 41 53 53 27 0a THEN 'PASS'.
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a1a0: 20 20 20 20 20 20 45 4c 53 45 20 73 74 61 74 75 ELSE statu
a1b0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.
a1c0: 20 20 20 20 45 4e 44 20 57 48 45 52 45 20 69 64 END WHERE id
a1d0: 3d 3f 3b 22 0a 20 20 20 74 65 73 74 2d 69 64 20 =?;". test-id
a1e0: 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 20 test-id test-id
a1f0: 74 65 73 74 2d 69 64 29 29 0a 0a 28 64 65 66 69 test-id))..(defi
a200: 6e 65 20 28 64 62 3a 67 65 74 2d 70 72 65 76 2d ne (db:get-prev-
a210: 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 tol-for-test db
a220: 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 test-id category
a230: 20 76 61 72 69 61 62 6c 65 29 0a 20 20 3b 3b 20 variable). ;;
a240: 46 69 6e 69 73 68 20 6d 65 3f 0a 20 20 28 76 61 Finish me?. (va
a250: 6c 75 65 73 20 23 66 20 23 66 20 23 66 29 29 0a lues #f #f #f)).
a260: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
a270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a2a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 53 20 54 =========.;; S T
a2b0: 20 45 20 50 20 53 20 0a 3b 3b 3d 3d 3d 3d 3d 3d E P S .;;======
a2c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a2d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a2e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a2f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a300: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 73 74 ..(define (db:st
a310: 65 70 2d 67 65 74 2d 74 69 6d 65 2d 61 73 2d 73 ep-get-time-as-s
a320: 74 72 69 6e 67 20 76 65 63 29 0a 20 20 28 73 65 tring vec). (se
a330: 63 6f 6e 64 73 2d 3e 74 69 6d 65 2d 73 74 72 69 conds->time-stri
a340: 6e 67 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d ng (db:step-get-
a350: 65 76 65 6e 74 5f 74 69 6d 65 20 76 65 63 29 29 event_time vec))
a360: 29 0a 0a 3b 3b 20 64 62 2d 67 65 74 2d 74 65 73 )..;; db-get-tes
a370: 74 2d 73 74 65 70 73 2d 66 6f 72 2d 72 75 6e 0a t-steps-for-run.
a380: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
a390: 73 74 65 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 steps-for-test d
a3a0: 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 b test-id). (le
a3b0: 74 20 28 28 72 65 73 20 27 28 29 29 29 0a 20 20 t ((res '())).
a3c0: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
a3d0: 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c ach-row . (l
a3e0: 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 2d 69 ambda (id test-i
a3f0: 64 20 73 74 65 70 6e 61 6d 65 20 73 74 61 74 65 d stepname state
a400: 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 status event-ti
a410: 6d 65 20 6c 6f 67 66 69 6c 65 29 0a 20 20 20 20 me logfile).
a420: 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 6f (set! res (co
a430: 6e 73 20 28 76 65 63 74 6f 72 20 69 64 20 74 65 ns (vector id te
a440: 73 74 2d 69 64 20 73 74 65 70 6e 61 6d 65 20 73 st-id stepname s
a450: 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 6e tate status even
a460: 74 2d 74 69 6d 65 20 28 69 66 20 28 73 74 72 69 t-time (if (stri
a470: 6e 67 3f 20 6c 6f 67 66 69 6c 65 29 20 6c 6f 67 ng? logfile) log
a480: 66 69 6c 65 20 22 22 29 29 20 72 65 73 29 29 29 file "")) res)))
a490: 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 . db. "S
a4a0: 45 4c 45 43 54 20 69 64 2c 74 65 73 74 5f 69 64 ELECT id,test_id
a4b0: 2c 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c ,stepname,state,
a4c0: 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d status,event_tim
a4d0: 65 2c 6c 6f 67 66 69 6c 65 20 46 52 4f 4d 20 74 e,logfile FROM t
a4e0: 65 73 74 5f 73 74 65 70 73 20 57 48 45 52 45 20 est_steps WHERE
a4f0: 74 65 73 74 5f 69 64 3d 3f 20 4f 52 44 45 52 20 test_id=? ORDER
a500: 42 59 20 69 64 20 41 53 43 3b 22 20 3b 3b 20 65 BY id ASC;" ;; e
a510: 76 65 6e 74 5f 74 69 6d 65 20 44 45 53 43 2c 69 vent_time DESC,i
a520: 64 20 41 53 43 3b 0a 20 20 20 20 20 74 65 73 74 d ASC;. test
a530: 2d 69 64 29 0a 20 20 20 20 28 72 65 76 65 72 73 -id). (revers
a540: 65 20 72 65 73 29 29 29 0a 0a 3b 3b 20 67 65 74 e res)))..;; get
a550: 20 61 20 70 72 65 74 74 79 20 74 61 62 6c 65 20 a pretty table
a560: 74 6f 20 73 75 6d 6d 61 72 69 7a 65 20 73 74 65 to summarize ste
a570: 70 73 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 ps.;;.(define (d
a580: 62 3a 67 65 74 2d 73 74 65 70 73 2d 74 61 62 6c b:get-steps-tabl
a590: 65 20 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 e db test-id).
a5a0: 28 6c 65 74 20 28 28 73 74 65 70 73 20 20 20 28 (let ((steps (
a5b0: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 db:get-steps-for
a5c0: 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 -test db test-id
a5d0: 29 29 29 0a 20 20 20 20 3b 3b 20 6f 72 67 61 6e ))). ;; organ
a5e0: 69 73 65 20 74 68 65 20 73 74 65 70 73 20 66 6f ise the steps fo
a5f0: 72 20 62 65 74 74 65 72 20 72 65 61 64 61 62 69 r better readabi
a600: 6c 69 74 79 0a 20 20 20 20 28 6c 65 74 20 28 28 lity. (let ((
a610: 72 65 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 res (make-hash-t
a620: 61 62 6c 65 29 29 29 0a 20 20 20 20 20 20 28 66 able))). (f
a630: 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 20 20 or-each .
a640: 28 6c 61 6d 62 64 61 20 28 73 74 65 70 29 0a 09 (lambda (step)..
a650: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 20 (debug:print 6
a660: 22 73 74 65 70 3d 22 20 73 74 65 70 29 0a 09 20 "step=" step)..
a670: 28 6c 65 74 20 28 28 72 65 63 6f 72 64 20 28 68 (let ((record (h
a680: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 ash-table-ref/de
a690: 66 61 75 6c 74 20 0a 09 09 09 72 65 73 20 0a 09 fault ....res ..
a6a0: 09 09 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 ..(db:step-get-s
a6b0: 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 0a 09 tepname step) ..
a6c0: 09 09 3b 3b 20 20 20 20 20 20 20 20 73 74 65 70 ..;; step
a6d0: 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 name
a6e0: 20 20 20 20 73 74 61 72 74 20 65 6e 64 20 73 74 start end st
a6f0: 61 74 75 73 20 20 20 20 0a 09 09 09 28 76 65 63 atus ....(vec
a700: 74 6f 72 20 28 64 62 3a 73 74 65 70 2d 67 65 74 tor (db:step-get
a710: 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 -stepname step)
a720: 22 22 20 20 20 22 22 20 22 22 20 20 20 20 20 22 "" "" "" "
a730: 22 20 22 22 29 29 29 29 0a 09 20 20 20 28 64 65 " "")))).. (de
a740: 62 75 67 3a 70 72 69 6e 74 20 36 20 22 72 65 63 bug:print 6 "rec
a750: 6f 72 64 28 62 65 66 6f 72 65 29 20 3d 20 22 20 ord(before) = "
a760: 72 65 63 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 record ...."\nid
a770: 3a 20 20 20 20 20 20 20 22 20 28 64 62 3a 73 74 : " (db:st
a780: 65 70 2d 67 65 74 2d 69 64 20 73 74 65 70 29 0a ep-get-id step).
a790: 09 09 09 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 ..."\nstepname:
a7a0: 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 " (db:step-get-s
a7b0: 74 65 70 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 tepname step)...
a7c0: 09 22 5c 6e 73 74 61 74 65 3a 20 20 20 20 22 20 ."\nstate: "
a7d0: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
a7e0: 74 65 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 te step)...."\ns
a7f0: 74 61 74 75 73 3a 20 20 20 22 20 28 64 62 3a 73 tatus: " (db:s
a800: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
a810: 74 65 70 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a tep)...."\ntime:
a820: 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d " (db:step-
a830: 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 get-event_time s
a840: 74 65 70 29 29 0a 09 20 20 20 28 63 61 73 65 20 tep)).. (case
a850: 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 (string->symbol
a860: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
a870: 74 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 te step))..
a880: 28 28 73 74 61 72 74 29 28 76 65 63 74 6f 72 2d ((start)(vector-
a890: 73 65 74 21 20 72 65 63 6f 72 64 20 31 20 28 64 set! record 1 (d
a8a0: 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 b:step-get-event
a8b0: 5f 74 69 6d 65 20 73 74 65 70 29 29 0a 09 20 20 _time step))..
a8c0: 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 (vector-set!
a8d0: 20 72 65 63 6f 72 64 20 33 20 28 69 66 20 28 65 record 3 (if (e
a8e0: 71 75 61 6c 3f 20 28 76 65 63 74 6f 72 2d 72 65 qual? (vector-re
a8f0: 66 20 72 65 63 6f 72 64 20 33 29 20 22 22 29 0a f record 3) "").
a900: 09 09 09 09 09 28 64 62 3a 73 74 65 70 2d 67 65 .....(db:step-ge
a910: 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 29 29 t-status step)))
a920: 0a 09 20 20 20 20 20 20 28 69 66 20 28 3e 20 28 .. (if (> (
a930: 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 20 28 64 string-length (d
a940: 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 b:step-get-logfi
a950: 6c 65 20 73 74 65 70 29 29 0a 09 09 20 20 20 20 le step))...
a960: 20 30 29 0a 09 09 20 20 28 76 65 63 74 6f 72 2d 0)... (vector-
a970: 73 65 74 21 20 72 65 63 6f 72 64 20 35 20 28 64 set! record 5 (d
a980: 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 b:step-get-logfi
a990: 6c 65 20 73 74 65 70 29 29 29 29 0a 09 20 20 20 le step))))..
a9a0: 20 20 28 28 65 6e 64 29 20 20 0a 09 20 20 20 20 ((end) ..
a9b0: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
a9c0: 65 63 6f 72 64 20 32 20 28 61 6e 79 2d 3e 6e 75 ecord 2 (any->nu
a9d0: 6d 62 65 72 20 28 64 62 3a 73 74 65 70 2d 67 65 mber (db:step-ge
a9e0: 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 t-event_time ste
a9f0: 70 29 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 p))).. (vec
aa00: 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 tor-set! record
aa10: 33 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 3 (db:step-get-s
aa20: 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 20 20 tatus step))..
aa30: 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 (vector-set!
aa40: 20 72 65 63 6f 72 64 20 34 20 28 6c 65 74 20 28 record 4 (let (
aa50: 28 73 74 61 72 74 74 20 28 61 6e 79 2d 3e 6e 75 (startt (any->nu
aa60: 6d 62 65 72 20 28 76 65 63 74 6f 72 2d 72 65 66 mber (vector-ref
aa70: 20 72 65 63 6f 72 64 20 31 29 29 29 0a 09 09 09 record 1)))....
aa80: 09 09 20 20 28 65 6e 64 74 20 20 20 28 61 6e 79 .. (endt (any
aa90: 2d 3e 6e 75 6d 62 65 72 20 28 76 65 63 74 6f 72 ->number (vector
aaa0: 2d 72 65 66 20 72 65 63 6f 72 64 20 32 29 29 29 -ref record 2)))
aab0: 29 0a 09 09 09 09 20 20 20 20 20 20 28 64 65 62 )..... (deb
aac0: 75 67 3a 70 72 69 6e 74 20 34 20 22 72 65 63 6f ug:print 4 "reco
aad0: 72 64 5b 31 5d 3d 22 20 28 76 65 63 74 6f 72 2d rd[1]=" (vector-
aae0: 72 65 66 20 72 65 63 6f 72 64 20 31 29 20 0a 09 ref record 1) ..
aaf0: 09 09 09 09 09 20 20 20 22 2c 20 73 74 61 72 74 ..... ", start
ab00: 74 3d 22 20 73 74 61 72 74 74 20 22 2c 20 65 6e t=" startt ", en
ab10: 64 74 3d 22 20 65 6e 64 74 0a 09 09 09 09 09 09 dt=" endt.......
ab20: 20 20 20 22 2c 20 67 65 74 2d 73 74 61 74 75 73 ", get-status
ab30: 3a 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 : " (db:step-get
ab40: 2d 73 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 -status step))..
ab50: 09 09 09 20 20 20 20 20 20 28 69 66 20 28 61 6e ... (if (an
ab60: 64 20 28 6e 75 6d 62 65 72 3f 20 73 74 61 72 74 d (number? start
ab70: 74 29 28 6e 75 6d 62 65 72 3f 20 65 6e 64 74 29 t)(number? endt)
ab80: 29 0a 09 09 09 09 09 20 20 28 73 65 63 6f 6e 64 )...... (second
ab90: 73 2d 3e 68 72 2d 6d 69 6e 2d 73 65 63 20 28 2d s->hr-min-sec (-
aba0: 20 65 6e 64 74 20 73 74 61 72 74 74 29 29 20 22 endt startt)) "
abb0: 2d 31 22 29 29 29 0a 09 20 20 20 20 20 20 28 69 -1"))).. (i
abc0: 66 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e f (> (string-len
abd0: 67 74 68 20 28 64 62 3a 73 74 65 70 2d 67 65 74 gth (db:step-get
abe0: 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 0a -logfile step)).
abf0: 09 09 20 20 20 20 20 30 29 0a 09 09 20 20 28 76 .. 0)... (v
ac00: 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 ector-set! recor
ac10: 64 20 35 20 28 64 62 3a 73 74 65 70 2d 67 65 74 d 5 (db:step-get
ac20: 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 29 -logfile step)))
ac30: 29 0a 09 20 20 20 20 20 28 65 6c 73 65 0a 09 20 ).. (else..
ac40: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
ac50: 21 20 72 65 63 6f 72 64 20 32 20 28 64 62 3a 73 ! record 2 (db:s
ac60: 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 73 74 tep-get-state st
ac70: 65 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 ep)).. (vec
ac80: 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 tor-set! record
ac90: 33 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 3 (db:step-get-s
aca0: 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 20 20 tatus step))..
acb0: 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 (vector-set!
acc0: 20 72 65 63 6f 72 64 20 34 20 28 64 62 3a 73 74 record 4 (db:st
acd0: 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d ep-get-event_tim
ace0: 65 20 73 74 65 70 29 29 29 29 0a 09 20 20 20 28 e step)))).. (
acf0: 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 hash-table-set!
ad00: 72 65 73 20 28 64 62 3a 73 74 65 70 2d 67 65 74 res (db:step-get
ad10: 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 -stepname step)
ad20: 72 65 63 6f 72 64 29 0a 09 20 20 20 28 64 65 62 record).. (deb
ad30: 75 67 3a 70 72 69 6e 74 20 36 20 22 72 65 63 6f ug:print 6 "reco
ad40: 72 64 28 61 66 74 65 72 29 20 20 3d 20 22 20 72 rd(after) = " r
ad50: 65 63 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 3a ecord ...."\nid:
ad60: 20 20 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 " (db:ste
ad70: 70 2d 67 65 74 2d 69 64 20 73 74 65 70 29 0a 09 p-get-id step)..
ad80: 09 09 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 22 .."\nstepname: "
ad90: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
ada0: 65 70 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 09 epname step)....
adb0: 22 5c 6e 73 74 61 74 65 3a 20 20 20 20 22 20 28 "\nstate: " (
adc0: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 db:step-get-stat
add0: 65 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 e step)...."\nst
ade0: 61 74 75 73 3a 20 20 20 22 20 28 64 62 3a 73 74 atus: " (db:st
adf0: 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 ep-get-status st
ae00: 65 70 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a 20 ep)...."\ntime:
ae10: 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 " (db:step-g
ae20: 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 et-event_time st
ae30: 65 70 29 29 29 29 0a 20 20 20 20 20 20 20 3b 3b ep)))). ;;
ae40: 20 28 65 6c 73 65 20 20 20 28 76 65 63 74 6f 72 (else (vector
ae50: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 31 20 28 -set! record 1 (
ae60: 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e db:step-get-even
ae70: 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 0a 20 t_time step))).
ae80: 20 20 20 20 20 20 28 73 6f 72 74 20 73 74 65 70 (sort step
ae90: 73 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 28 s (lambda (a b)(
aea0: 3c 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 < (db:step-get-e
aeb0: 76 65 6e 74 5f 74 69 6d 65 20 61 29 28 64 62 3a vent_time a)(db:
aec0: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
aed0: 69 6d 65 20 62 29 29 29 29 29 0a 20 20 20 20 20 ime b))))).
aee0: 20 72 65 73 29 29 29 0a 0a 3b 3b 20 74 68 65 20 res)))..;; the
aef0: 6e 65 77 20 70 72 65 72 65 71 73 20 63 61 6c 63 new prereqs calc
af00: 75 6c 61 74 69 6f 6e 2c 20 6c 6f 6f 6b 73 20 61 ulation, looks a
af10: 6c 73 6f 20 61 74 20 69 74 65 6d 70 61 74 68 20 lso at itempath
af20: 69 66 20 73 70 65 63 69 66 69 65 64 0a 3b 3b 20 if specified.;;
af30: 61 6c 6c 20 70 72 65 72 65 71 73 20 6d 75 73 74 all prereqs must
af40: 20 62 65 20 6d 65 74 3a 0a 3b 3b 20 20 20 20 69 be met:.;; i
af50: 66 20 70 72 65 72 65 71 20 74 65 73 74 20 77 69 f prereq test wi
af60: 74 68 20 69 74 65 6d 70 61 74 68 3d 27 27 20 69 th itempath='' i
af70: 73 20 43 4f 4d 50 4c 45 54 45 44 20 61 6e 64 20 s COMPLETED and
af80: 50 41 53 53 2c 20 57 41 52 4e 2c 20 43 48 45 43 PASS, WARN, CHEC
af90: 4b 2c 20 6f 72 20 57 41 49 56 45 44 20 74 68 65 K, or WAIVED the
afa0: 6e 20 70 72 65 72 65 71 20 69 73 20 6d 65 74 0a n prereq is met.
afb0: 3b 3b 20 20 20 20 69 66 20 70 72 65 72 65 71 20 ;; if prereq
afc0: 74 65 73 74 20 77 69 74 68 20 69 74 65 6d 70 61 test with itempa
afd0: 74 68 3d 72 65 66 2d 69 74 65 6d 2d 70 61 74 68 th=ref-item-path
afe0: 20 61 6e 64 20 43 4f 4d 50 4c 45 54 45 44 20 77 and COMPLETED w
aff0: 69 74 68 20 50 41 53 53 2c 20 57 41 52 4e 2c 20 ith PASS, WARN,
b000: 43 48 45 43 4b 2c 20 6f 72 20 57 41 49 56 45 44 CHECK, or WAIVED
b010: 20 74 68 65 6e 20 70 72 65 72 65 71 20 69 73 20 then prereq is
b020: 6d 65 74 0a 3b 3b 0a 3b 3b 20 4e 6f 74 65 3a 20 met.;;.;; Note:
b030: 64 6f 20 6e 6f 74 20 63 6f 6e 76 65 72 74 20 74 do not convert t
b040: 6f 20 72 65 6d 6f 74 65 20 61 73 20 69 74 20 63 o remote as it c
b050: 61 6c 6c 73 20 72 65 6d 6f 74 65 20 75 6e 64 65 alls remote unde
b060: 72 20 74 68 65 20 68 6f 6f 64 0a 3b 3b 0a 28 64 r the hood.;;.(d
b070: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 70 72 efine (db:get-pr
b080: 65 72 65 71 73 2d 6e 6f 74 2d 6d 65 74 20 64 62 ereqs-not-met db
b090: 20 72 75 6e 2d 69 64 20 77 61 69 74 6f 6e 73 20 run-id waitons
b0a0: 72 65 66 2d 69 74 65 6d 2d 70 61 74 68 29 0a 20 ref-item-path).
b0b0: 20 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 77 61 (if (or (not wa
b0c0: 69 74 6f 6e 73 29 0a 09 20 20 28 6e 75 6c 6c 3f itons).. (null?
b0d0: 20 77 61 69 74 6f 6e 73 29 29 0a 20 20 20 20 20 waitons)).
b0e0: 20 27 28 29 0a 20 20 20 20 20 20 28 6c 65 74 2a '(). (let*
b0f0: 20 28 28 75 6e 6d 65 74 2d 70 72 65 2d 72 65 71 ((unmet-pre-req
b100: 73 20 27 28 29 29 0a 09 20 20 20 20 20 28 72 65 s '()).. (re
b110: 73 75 6c 74 20 20 20 20 20 20 20 20 20 27 28 29 sult '()
b120: 29 29 0a 09 28 66 6f 72 2d 65 61 63 68 20 0a 09 ))..(for-each ..
b130: 20 28 6c 61 6d 62 64 61 20 28 77 61 69 74 6f 6e (lambda (waiton
b140: 74 65 73 74 2d 6e 61 6d 65 29 0a 09 20 20 20 3b test-name).. ;
b150: 3b 20 62 79 20 67 65 74 74 69 6e 67 20 74 68 65 ; by getting the
b160: 20 74 65 73 74 73 20 77 69 74 68 20 6d 61 74 63 tests with matc
b170: 68 69 6e 67 20 6e 61 6d 65 20 77 65 20 61 72 65 hing name we are
b180: 20 6c 6f 6f 6b 69 6e 67 20 6f 6e 6c 79 20 61 74 looking only at
b190: 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 74 65 the matching te
b1a0: 73 74 20 0a 09 20 20 20 3b 3b 20 61 6e 64 20 72 st .. ;; and r
b1b0: 65 6c 61 74 65 64 20 73 75 62 20 69 74 65 6d 73 elated sub items
b1c0: 0a 09 20 20 20 28 6c 65 74 20 28 28 74 65 73 74 .. (let ((test
b1d0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 s (r
b1e0: 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db:get-tests-for
b1f0: 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 77 -run db run-id w
b200: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 23 aitontest-name #
b210: 66 20 27 28 29 20 27 28 29 29 29 0a 09 09 20 28 f '() '()))... (
b220: 65 76 65 72 2d 73 65 65 6e 20 20 20 20 20 20 20 ever-seen
b230: 20 20 23 66 29 0a 09 09 20 28 70 61 72 65 6e 74 #f)... (parent
b240: 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 66 29 0a -waiton-met #f).
b250: 09 09 20 28 69 74 65 6d 2d 77 61 69 74 6f 6e 2d .. (item-waiton-
b260: 6d 65 74 20 20 20 23 66 29 29 0a 09 20 20 20 20 met #f))..
b270: 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 20 20 (for-each ..
b280: 20 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 (lambda (test
b290: 29 0a 09 09 3b 3b 20 28 69 66 20 28 65 71 75 61 )...;; (if (equa
b2a0: 6c 3f 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 l? waitontest-na
b2b0: 6d 65 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d me (db:test-get-
b2c0: 74 65 73 74 6e 61 6d 65 20 74 65 73 74 29 29 20 testname test))
b2d0: 3b 3b 20 62 79 20 64 65 66 69 6e 74 69 6f 6e 20 ;; by defintion
b2e0: 74 68 69 73 20 68 61 64 20 62 65 74 74 65 72 20 this had better
b2f0: 62 65 20 74 72 75 65 20 2e 2e 2e 0a 09 09 28 6c be true ......(l
b300: 65 74 2a 20 28 28 73 74 61 74 65 20 20 20 20 20 et* ((state
b310: 20 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 (db:test
b320: 2d 67 65 74 2d 73 74 61 74 65 20 74 65 73 74 29 -get-state test)
b330: 29 0a 09 09 20 20 20 20 20 20 20 28 73 74 61 74 )... (stat
b340: 75 73 20 20 20 20 20 20 20 20 20 20 20 20 28 64 us (d
b350: 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 75 b:test-get-statu
b360: 73 20 74 65 73 74 29 29 0a 09 09 20 20 20 20 20 s test))...
b370: 20 20 28 69 74 65 6d 2d 70 61 74 68 20 20 20 20 (item-path
b380: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 (db:test-ge
b390: 74 2d 69 74 65 6d 2d 70 61 74 68 20 74 65 73 74 t-item-path test
b3a0: 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 73 2d ))... (is-
b3b0: 63 6f 6d 70 6c 65 74 65 64 20 20 20 20 20 20 28 completed (
b3c0: 65 71 75 61 6c 3f 20 73 74 61 74 65 20 22 43 4f equal? state "CO
b3d0: 4d 50 4c 45 54 45 44 22 29 29 0a 09 09 20 20 20 MPLETED"))...
b3e0: 20 20 20 20 28 69 73 2d 6f 6b 20 20 20 20 20 20 (is-ok
b3f0: 20 20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 73 (member s
b400: 74 61 74 75 73 20 27 28 22 50 41 53 53 22 20 22 tatus '("PASS" "
b410: 57 41 52 4e 22 20 22 43 48 45 43 4b 22 20 22 57 WARN" "CHECK" "W
b420: 41 49 56 45 44 22 29 29 29 0a 09 09 20 20 20 20 AIVED")))...
b430: 20 20 20 28 73 61 6d 65 2d 69 74 65 6d 70 61 74 (same-itempat
b440: 68 20 20 20 20 20 28 65 71 75 61 6c 3f 20 72 65 h (equal? re
b450: 66 2d 69 74 65 6d 2d 70 61 74 68 20 69 74 65 6d f-item-path item
b460: 2d 70 61 74 68 29 29 29 0a 09 09 20 20 28 73 65 -path)))... (se
b470: 74 21 20 65 76 65 72 2d 73 65 65 6e 20 23 74 29 t! ever-seen #t)
b480: 0a 09 09 20 20 28 63 6f 6e 64 0a 09 09 20 20 20 ... (cond...
b490: 3b 3b 20 63 61 73 65 20 31 2c 20 6e 6f 6e 2d 69 ;; case 1, non-i
b4a0: 74 65 6d 20 28 70 61 72 65 6e 74 20 74 65 73 74 tem (parent test
b4b0: 29 20 69 73 20 0a 09 09 20 20 20 28 28 61 6e 64 ) is ... ((and
b4c0: 20 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 (equal? item-pa
b4d0: 74 68 20 22 22 29 20 3b 3b 20 74 68 69 73 20 69 th "") ;; this i
b4e0: 73 20 74 68 65 20 70 61 72 65 6e 74 20 74 65 73 s the parent tes
b4f0: 74 0a 09 09 09 20 69 73 2d 63 6f 6d 70 6c 65 74 t.... is-complet
b500: 65 64 0a 09 09 09 20 69 73 2d 6f 6b 29 0a 09 09 ed.... is-ok)...
b510: 20 20 20 20 28 73 65 74 21 20 70 61 72 65 6e 74 (set! parent
b520: 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 -waiton-met #t))
b530: 0a 09 09 20 20 20 28 28 61 6e 64 20 73 61 6d 65 ... ((and same
b540: 2d 69 74 65 6d 70 61 74 68 0a 09 09 09 20 69 73 -itempath.... is
b550: 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 20 69 -completed.... i
b560: 73 2d 6f 6b 29 0a 09 09 20 20 20 20 28 73 65 74 s-ok)... (set
b570: 21 20 69 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 ! item-waiton-me
b580: 74 20 23 74 29 29 29 29 29 0a 09 20 20 20 20 20 t #t)))))..
b590: 20 74 65 73 74 73 29 0a 09 20 20 20 20 20 28 69 tests).. (i
b5a0: 66 20 28 6e 6f 74 20 28 6f 72 20 70 61 72 65 6e f (not (or paren
b5b0: 74 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 69 74 65 t-waiton-met ite
b5c0: 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 29 29 0a 09 m-waiton-met))..
b5d0: 09 20 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 . (set! result (
b5e0: 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 2d cons waitontest-
b5f0: 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 29 0a 09 name result)))..
b600: 20 20 20 20 20 3b 3b 20 69 66 20 74 68 65 20 74 ;; if the t
b610: 65 73 74 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 est is not found
b620: 20 74 68 65 6e 20 63 6c 65 61 72 6c 79 20 74 68 then clearly th
b630: 65 20 77 61 69 74 6f 6e 20 69 73 20 6e 6f 74 20 e waiton is not
b640: 6d 65 74 2e 2e 2e 0a 09 20 20 20 20 20 28 69 66 met..... (if
b650: 20 28 6e 6f 74 20 65 76 65 72 2d 73 65 65 6e 29 (not ever-seen)
b660: 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 63 6f (set! result (co
b670: 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 ns waitontest-na
b680: 6d 65 20 72 65 73 75 6c 74 29 29 29 29 29 0a 09 me result)))))..
b690: 77 61 69 74 6f 6e 73 29 0a 20 20 20 20 20 20 28 waitons). (
b6a0: 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65 delete-duplicate
b6b0: 73 20 72 65 73 75 6c 74 29 29 29 29 0a 0a 28 64 s result))))..(d
b6c0: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 73 74 efine (db:testst
b6d0: 65 70 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 ep-set-status! d
b6e0: 62 20 74 65 73 74 2d 69 64 20 74 65 73 74 73 74 b test-id testst
b6f0: 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e ep-name state-in
b700: 20 73 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d status-in item-
b710: 70 61 74 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 path comment log
b720: 66 69 6c 65 29 0a 20 20 28 64 65 62 75 67 3a 70 file). (debug:p
b730: 72 69 6e 74 20 34 20 22 74 65 73 74 2d 69 64 3a rint 4 "test-id:
b740: 20 22 20 74 65 73 74 2d 69 64 20 22 20 74 65 73 " test-id " tes
b750: 74 73 74 65 70 2d 6e 61 6d 65 3a 20 22 20 74 65 tstep-name: " te
b760: 73 74 73 74 65 70 2d 6e 61 6d 65 29 0a 20 20 28 ststep-name). (
b770: 6c 65 74 2a 20 28 28 73 74 61 74 65 20 20 20 20 let* ((state
b780: 20 28 63 68 65 63 6b 2d 76 61 6c 69 64 2d 69 74 (check-valid-it
b790: 65 6d 73 20 22 73 74 61 74 65 22 20 73 74 61 74 ems "state" stat
b7a0: 65 2d 69 6e 29 29 0a 09 20 28 73 74 61 74 75 73 e-in)).. (status
b7b0: 20 20 20 20 28 63 68 65 63 6b 2d 76 61 6c 69 64 (check-valid
b7c0: 2d 69 74 65 6d 73 20 22 73 74 61 74 75 73 22 20 -items "status"
b7d0: 73 74 61 74 75 73 2d 69 6e 29 29 29 0a 20 20 20 status-in))).
b7e0: 20 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 73 74 (if (or (not st
b7f0: 61 74 65 29 28 6e 6f 74 20 73 74 61 74 75 73 29 ate)(not status)
b800: 29 0a 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 )..(debug:print
b810: 30 20 22 57 41 52 4e 49 4e 47 3a 20 49 6e 76 61 0 "WARNING: Inva
b820: 6c 69 64 20 22 20 28 69 66 20 73 74 61 74 75 73 lid " (if status
b830: 20 22 73 74 61 74 75 73 22 20 22 73 74 61 74 65 "status" "state
b840: 22 29 0a 09 09 20 20 20 20 20 22 20 76 61 6c 75 ")... " valu
b850: 65 20 5c 22 22 20 28 69 66 20 73 74 61 74 75 73 e \"" (if status
b860: 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 state-in status
b870: 2d 69 6e 29 20 22 5c 22 2c 20 75 70 64 61 74 65 -in) "\", update
b880: 20 79 6f 75 72 20 76 61 6c 69 64 76 61 6c 75 65 your validvalue
b890: 73 20 73 65 63 74 69 6f 6e 20 69 6e 20 6d 65 67 s section in meg
b8a0: 61 74 65 73 74 2e 63 6f 6e 66 69 67 22 29 29 0a atest.config")).
b8b0: 20 20 20 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 (mutex-lock!
b8c0: 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 74 65 78 *incoming-mutex
b8d0: 2a 29 0a 20 20 20 20 28 73 65 74 21 20 2a 69 6e *). (set! *in
b8e0: 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 28 63 6f coming-data* (co
b8f0: 6e 73 20 28 76 65 63 74 6f 72 20 27 73 74 65 70 ns (vector 'step
b900: 2d 73 74 61 74 75 73 0a 09 09 09 09 09 28 63 75 -status......(cu
b910: 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 0a 09 rrent-seconds)..
b920: 09 09 09 09 3b 3b 20 46 49 58 4d 45 20 2d 20 74 ....;; FIXME - t
b930: 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 his should not u
b940: 70 64 61 74 65 20 74 68 65 20 6c 6f 67 66 69 6c pdate the logfil
b950: 65 20 75 6e 6c 65 73 73 20 69 74 20 69 73 20 73 e unless it is s
b960: 70 65 63 69 66 69 65 64 2e 0a 09 09 09 09 09 28 pecified.......(
b970: 6c 69 73 74 20 74 65 73 74 2d 69 64 20 74 65 73 list test-id tes
b980: 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 tstep-name state
b990: 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 28 63 -in status-in (c
b9a0: 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 urrent-seconds)
b9b0: 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d (if comment comm
b9c0: 65 6e 74 20 22 22 29 20 28 69 66 20 6c 6f 67 66 ent "") (if logf
b9d0: 69 6c 65 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 ile logfile ""))
b9e0: 29 0a 09 09 09 09 2a 69 6e 63 6f 6d 69 6e 67 2d ).....*incoming-
b9f0: 64 61 74 61 2a 29 29 0a 20 20 20 20 28 6d 75 74 data*)). (mut
ba00: 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f ex-unlock! *inco
ba10: 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 ming-mutex*).
ba20: 20 28 69 66 20 28 6e 6f 74 20 2a 63 61 63 68 65 (if (not *cache
ba30: 2d 6f 6e 2a 29 28 64 62 3a 77 72 69 74 65 2d 63 -on*)(db:write-c
ba40: 61 63 68 65 64 2d 64 61 74 61 20 64 62 29 29 0a ached-data db)).
ba50: 20 20 20 20 23 74 29 29 0a 0a 3b 3b 3d 3d 3d 3d #t))..;;====
ba60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
ba70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
ba80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
ba90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
baa0: 3d 3d 0a 3b 3b 20 45 78 74 72 61 63 74 20 6f 64 ==.;; Extract od
bab0: 73 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 s file from the
bac0: 64 62 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d db.;;===========
bad0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
bae0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
baf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
bb00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 ===========..;;
bb10: 72 75 6e 73 70 61 74 74 20 69 73 20 61 20 63 6f runspatt is a co
bb20: 6d 6d 61 20 64 65 6c 69 6d 69 74 65 64 20 6c 69 mma delimited li
bb30: 73 74 20 6f 66 20 72 75 6e 20 70 61 74 74 65 72 st of run patter
bb40: 6e 73 0a 3b 3b 20 6b 65 79 70 61 74 74 2d 61 6c ns.;; keypatt-al
bb50: 69 73 74 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e ist must contain
bb60: 20 2a 61 6c 6c 2a 20 6b 65 79 73 20 77 69 74 68 *all* keys with
bb70: 20 61 6e 20 61 73 73 6f 63 69 61 74 65 64 20 70 an associated p
bb80: 61 74 74 65 72 6e 3a 20 27 28 20 28 22 4b 45 59 attern: '( ("KEY
bb90: 31 22 20 22 25 22 29 20 2e 2e 20 29 0a 28 64 65 1" "%") .. ).(de
bba0: 66 69 6e 65 20 28 64 62 3a 65 78 74 72 61 63 74 fine (db:extract
bbb0: 2d 6f 64 73 2d 66 69 6c 65 20 64 62 20 6f 75 74 -ods-file db out
bbc0: 70 75 74 66 69 6c 65 20 6b 65 79 70 61 74 74 2d putfile keypatt-
bbd0: 61 6c 69 73 74 20 72 75 6e 73 70 61 74 74 20 70 alist runspatt p
bbe0: 61 74 68 6d 6f 64 29 0a 20 20 28 6c 65 74 2a 20 athmod). (let*
bbf0: 28 28 6b 65 79 73 73 74 72 20 20 28 73 74 72 69 ((keysstr (stri
bc00: 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 ng-intersperse (
bc10: 6d 61 70 20 63 61 72 20 6b 65 79 70 61 74 74 2d map car keypatt-
bc20: 61 6c 69 73 74 29 20 22 2c 22 29 29 0a 09 20 28 alist) ",")).. (
bc30: 6b 65 79 71 72 79 20 20 20 28 73 74 72 69 6e 67 keyqry (string
bc40: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 -intersperse (ma
bc50: 70 20 28 6c 61 6d 62 64 61 20 28 70 29 28 63 6f p (lambda (p)(co
bc60: 6e 63 20 28 63 61 72 20 70 29 20 22 20 4c 49 4b nc (car p) " LIK
bc70: 45 20 3f 20 22 29 29 20 6b 65 79 70 61 74 74 2d E ? ")) keypatt-
bc80: 61 6c 69 73 74 29 20 22 20 41 4e 44 20 22 29 29 alist) " AND "))
bc90: 0a 09 20 28 6e 75 6d 6b 65 79 73 20 20 28 6c 65 .. (numkeys (le
bca0: 6e 67 74 68 20 6b 65 79 70 61 74 74 2d 61 6c 69 ngth keypatt-ali
bcb0: 73 74 29 29 0a 09 20 28 74 65 73 74 2d 69 64 73 st)).. (test-ids
bcc0: 20 27 28 29 29 0a 09 20 28 77 69 6e 64 6f 77 73 '()).. (windows
bcd0: 20 20 28 61 6e 64 20 70 61 74 68 6d 6f 64 20 28 (and pathmod (
bce0: 73 75 62 73 74 72 69 6e 67 2d 69 6e 64 65 78 20 substring-index
bcf0: 22 5c 5c 22 20 70 61 74 68 6d 6f 64 29 29 29 0a "\\" pathmod))).
bd00: 09 20 28 74 65 6d 70 64 69 72 20 20 28 63 6f 6e . (tempdir (con
bd10: 63 20 22 2f 74 6d 70 2f 22 20 28 63 75 72 72 65 c "/tmp/" (curre
bd20: 6e 74 2d 75 73 65 72 2d 6e 61 6d 65 29 20 22 2f nt-user-name) "/
bd30: 22 20 72 75 6e 73 70 61 74 74 20 22 5f 22 20 28 " runspatt "_" (
bd40: 72 61 6e 64 6f 6d 20 31 30 30 30 30 29 20 22 5f random 10000) "_
bd50: 22 20 28 63 75 72 72 65 6e 74 2d 70 72 6f 63 65 " (current-proce
bd60: 73 73 2d 69 64 29 29 29 0a 09 20 28 72 75 6e 73 ss-id))).. (runs
bd70: 68 65 61 64 65 72 20 28 61 70 70 65 6e 64 20 28 header (append (
bd80: 6c 69 73 74 20 22 52 75 6e 20 49 64 22 20 22 52 list "Run Id" "R
bd90: 75 6e 6e 61 6d 65 22 29 20 3b 20 30 20 31 0a 09 unname") ; 0 1..
bda0: 09 09 20 20 20 20 20 28 6d 61 70 20 63 61 72 20 .. (map car
bdb0: 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 20 keypatt-alist)
bdc0: 20 3b 20 2b 20 4e 20 3d 20 6c 65 6e 67 74 68 20 ; + N = length
bdd0: 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 0a 09 09 keypatt-alist...
bde0: 09 20 20 20 20 20 28 6c 69 73 74 20 22 54 65 73 . (list "Tes
bdf0: 74 6e 61 6d 65 22 20 20 20 20 20 20 20 20 20 20 tname"
be00: 3b 20 32 0a 09 09 09 09 20 20 20 22 49 74 65 6d ; 2..... "Item
be10: 20 50 61 74 68 22 20 20 20 20 20 20 20 20 20 3b Path" ;
be20: 20 33 20 0a 09 09 09 09 20 20 20 22 44 65 73 63 3 ..... "Desc
be30: 72 69 70 74 69 6f 6e 22 20 20 20 20 20 20 20 3b ription" ;
be40: 20 34 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 4 ..... "Stat
be50: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 3b e" ;
be60: 20 35 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 5 ..... "Stat
be70: 75 73 22 20 20 20 20 20 20 20 20 20 20 20 20 3b us" ;
be80: 20 36 20 20 0a 09 09 09 09 20 20 20 22 46 69 6e 6 ..... "Fin
be90: 61 6c 20 4c 6f 67 22 20 20 20 20 20 20 20 20 20 al Log"
bea0: 3b 20 37 20 0a 09 09 09 09 20 20 20 22 52 75 6e ; 7 ..... "Run
beb0: 20 44 75 72 61 74 69 6f 6e 22 20 20 20 20 20 20 Duration"
bec0: 3b 20 38 20 0a 09 09 09 09 20 20 20 22 57 68 65 ; 8 ..... "Whe
bed0: 6e 20 52 75 6e 22 20 20 20 20 20 20 20 20 20 20 n Run"
bee0: 3b 20 39 20 0a 09 09 09 09 20 20 20 22 54 61 67 ; 9 ..... "Tag
bef0: 73 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s"
bf00: 3b 20 31 30 0a 09 09 09 09 20 20 20 22 52 75 6e ; 10..... "Run
bf10: 20 4f 77 6e 65 72 22 20 20 20 20 20 20 20 20 20 Owner"
bf20: 3b 20 31 31 0a 09 09 09 09 20 20 20 22 43 6f 6d ; 11..... "Com
bf30: 6d 65 6e 74 22 20 20 20 20 20 20 20 20 20 20 20 ment"
bf40: 3b 20 31 32 0a 09 09 09 09 20 20 20 22 41 75 74 ; 12..... "Aut
bf50: 68 6f 72 22 20 20 20 20 20 20 20 20 20 20 20 20 hor"
bf60: 3b 20 31 33 0a 09 09 09 09 20 20 20 22 54 65 73 ; 13..... "Tes
bf70: 74 20 4f 77 6e 65 72 22 20 20 20 20 20 20 20 20 t Owner"
bf80: 3b 20 31 34 0a 09 09 09 09 20 20 20 22 52 65 76 ; 14..... "Rev
bf90: 69 65 77 65 64 22 20 20 20 20 20 20 20 20 20 20 iewed"
bfa0: 3b 20 31 35 0a 09 09 09 09 20 20 20 22 44 69 73 ; 15..... "Dis
bfb0: 6b 66 72 65 65 22 20 20 20 20 20 20 20 20 20 20 kfree"
bfc0: 3b 20 31 36 0a 09 09 09 09 20 20 20 22 55 6e 61 ; 16..... "Una
bfd0: 6d 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 me"
bfe0: 3b 20 31 37 0a 09 09 09 09 20 20 20 22 52 75 6e ; 17..... "Run
bff0: 64 69 72 22 20 20 20 20 20 20 20 20 20 20 20 20 dir"
c000: 3b 20 31 38 0a 09 09 09 09 20 20 20 22 48 6f 73 ; 18..... "Hos
c010: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t"
c020: 3b 20 31 39 0a 09 09 09 09 20 20 20 22 43 70 75 ; 19..... "Cpu
c030: 20 4c 6f 61 64 22 20 20 20 20 20 20 20 20 20 20 Load"
c040: 3b 20 32 30 0a 09 09 09 09 20 20 20 29 29 29 0a ; 20..... ))).
c050: 09 20 28 72 65 73 75 6c 74 73 20 28 6c 69 73 74 . (results (list
c060: 20 72 75 6e 73 68 65 61 64 65 72 29 29 09 09 09 runsheader))...
c070: 20 0a 09 20 28 74 65 73 74 64 61 74 61 2d 68 65 .. (testdata-he
c080: 61 64 65 72 20 28 6c 69 73 74 20 22 52 75 6e 20 ader (list "Run
c090: 49 64 22 20 22 54 65 73 74 6e 61 6d 65 22 20 22 Id" "Testname" "
c0a0: 49 74 65 6d 20 50 61 74 68 22 20 22 43 61 74 65 Item Path" "Cate
c0b0: 67 6f 72 79 22 20 22 56 61 72 69 61 62 6c 65 22 gory" "Variable"
c0c0: 20 22 56 61 6c 75 65 22 20 22 45 78 70 65 63 74 "Value" "Expect
c0d0: 65 64 22 20 22 54 6f 6c 22 20 22 55 6e 69 74 73 ed" "Tol" "Units
c0e0: 22 20 22 53 74 61 74 75 73 22 20 22 43 6f 6d 6d " "Status" "Comm
c0f0: 65 6e 74 22 29 29 0a 09 20 28 6d 61 69 6e 71 72 ent")).. (mainqr
c100: 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 0a y (conc "SELECT.
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
c120: 74 65 73 74 6e 61 6d 65 2c 72 2e 69 64 2c 72 75 testname,r.id,ru
c130: 6e 6e 61 6d 65 2c 22 20 6b 65 79 73 73 74 72 20 nname," keysstr
c140: 22 2c 74 2e 74 65 73 74 6e 61 6d 65 2c 0a 20 20 ",t.testname,.
c150: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 69 74 t.it
c160: 65 6d 5f 70 61 74 68 2c 74 6d 2e 64 65 73 63 72 em_path,tm.descr
c170: 69 70 74 69 6f 6e 2c 74 2e 73 74 61 74 65 2c 74 iption,t.state,t
c180: 2e 73 74 61 74 75 73 2c 0a 20 20 20 20 20 20 20 .status,.
c190: 20 20 20 20 20 20 20 66 69 6e 61 6c 5f 6c 6f 67 final_log
c1a0: 66 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 20 f,run_duration,
c1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s
c1c0: 74 72 66 74 69 6d 65 28 27 25 6d 2f 25 64 2f 25 trftime('%m/%d/%
c1d0: 59 20 25 48 3a 25 4d 3a 25 53 27 2c 64 61 74 65 Y %H:%M:%S',date
c1e0: 74 69 6d 65 28 74 2e 65 76 65 6e 74 5f 74 69 6d time(t.event_tim
c1f0: 65 2c 27 75 6e 69 78 65 70 6f 63 68 27 29 2c 27 e,'unixepoch'),'
c200: 6c 6f 63 61 6c 74 69 6d 65 27 29 2c 0a 20 20 20 localtime'),.
c210: 20 20 20 20 20 20 20 20 20 20 20 74 6d 2e 74 61 tm.ta
c220: 67 73 2c 72 2e 6f 77 6e 65 72 2c 74 2e 63 6f 6d gs,r.owner,t.com
c230: 6d 65 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 ment,.
c240: 20 20 20 20 61 75 74 68 6f 72 2c 0a 20 20 20 20 author,.
c250: 20 20 20 20 20 20 20 20 20 20 74 6d 2e 6f 77 6e tm.own
c260: 65 72 2c 72 65 76 69 65 77 65 64 2c 0a 20 20 20 er,reviewed,.
c270: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 6b 66 diskf
c280: 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 ree,uname,rundir
c290: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
c2a0: 68 6f 73 74 2c 63 70 75 6c 6f 61 64 0a 20 20 20 host,cpuload.
c2b0: 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 FROM te
c2c0: 73 74 73 20 41 53 20 74 20 4a 4f 49 4e 20 72 75 sts AS t JOIN ru
c2d0: 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e ns AS r ON t.run
c2e0: 5f 69 64 3d 72 2e 69 64 20 4a 4f 49 4e 20 74 65 _id=r.id JOIN te
c2f0: 73 74 5f 6d 65 74 61 20 41 53 20 74 6d 20 4f 4e st_meta AS tm ON
c300: 20 74 6d 2e 74 65 73 74 6e 61 6d 65 3d 74 2e 74 tm.testname=t.t
c310: 65 73 74 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 estname.
c320: 20 20 20 20 57 48 45 52 45 20 72 75 6e 6e 61 6d WHERE runnam
c330: 65 20 4c 49 4b 45 20 3f 20 41 4e 44 20 22 20 6b e LIKE ? AND " k
c340: 65 79 71 72 79 20 22 3b 22 29 29 29 0a 20 20 20 eyqry ";"))).
c350: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 (debug:print 2
c360: 22 55 73 69 6e 67 20 22 20 74 65 6d 70 64 69 72 "Using " tempdir
c370: 20 22 20 66 6f 72 20 63 6f 6e 73 74 72 75 63 74 " for construct
c380: 69 6e 67 20 74 68 65 20 6f 64 73 20 66 69 6c 65 ing the ods file
c390: 2e 20 6b 65 79 71 72 79 3a 20 22 20 6b 65 79 71 . keyqry: " keyq
c3a0: 72 79 20 22 20 6b 65 79 73 74 72 3a 20 22 20 6b ry " keystr: " k
c3b0: 65 79 73 73 74 72 20 22 20 77 69 74 68 20 6b 65 eysstr " with ke
c3c0: 79 73 3a 20 22 20 28 6d 61 70 20 63 61 64 72 20 ys: " (map cadr
c3d0: 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 0a 09 keypatt-alist)..
c3e0: 09 20 22 5c 6e 20 20 20 20 20 20 6d 61 69 6e 71 . "\n mainq
c3f0: 72 79 3a 20 22 20 6d 61 69 6e 71 72 79 29 0a 20 ry: " mainqry).
c400: 20 20 20 3b 3b 20 22 45 78 70 65 63 74 65 64 20 ;; "Expected
c410: 56 61 6c 75 65 22 0a 20 20 20 20 3b 3b 20 22 56 Value". ;; "V
c420: 61 6c 75 65 20 46 6f 75 6e 64 22 0a 20 20 20 20 alue Found".
c430: 3b 3b 20 22 54 6f 6c 65 72 61 6e 63 65 22 0a 20 ;; "Tolerance".
c440: 20 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 (apply sqlite
c450: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 3:for-each-row..
c460: 20 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 (lambda (test
c470: 2d 69 64 20 2e 20 62 29 0a 09 20 20 20 20 20 28 -id . b).. (
c480: 73 65 74 21 20 74 65 73 74 2d 69 64 73 20 28 63 set! test-ids (c
c490: 6f 6e 73 20 74 65 73 74 2d 69 64 20 74 65 73 74 ons test-id test
c4a0: 2d 69 64 73 29 29 20 20 20 3b 3b 20 74 65 73 74 -ids)) ;; test
c4b0: 2d 69 64 20 69 73 20 6e 6f 77 20 74 65 73 74 6e -id is now testn
c4c0: 61 6d 65 0a 09 20 20 20 20 20 28 73 65 74 21 20 ame.. (set!
c4d0: 72 65 73 75 6c 74 73 20 28 61 70 70 65 6e 64 20 results (append
c4e0: 72 65 73 75 6c 74 73 20 3b 3b 20 6e 6f 74 65 2c results ;; note,
c4f0: 20 64 72 6f 70 20 74 68 65 20 74 65 73 74 2d 69 drop the test-i
c500: 64 0a 09 09 09 09 20 20 20 28 6c 69 73 74 0a 09 d..... (list..
c510: 09 09 09 20 20 20 20 28 69 66 20 70 61 74 68 6d ... (if pathm
c520: 6f 64 0a 09 09 09 09 09 28 6c 65 74 2a 20 28 28 od......(let* ((
c530: 76 62 20 20 20 20 20 20 20 20 28 61 70 70 6c 79 vb (apply
c540: 20 76 65 63 74 6f 72 20 62 29 29 0a 09 09 09 09 vector b)).....
c550: 09 20 20 20 20 20 20 20 28 6b 65 79 76 61 6c 73 . (keyvals
c560: 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 69 (let loop ((i
c570: 20 20 20 20 30 29 0a 09 09 09 09 09 09 09 09 20 0).........
c580: 20 20 20 20 28 72 65 73 20 27 28 29 29 29 0a 09 (res '()))..
c590: 09 09 09 09 09 09 20 20 20 20 28 69 66 20 28 3e ...... (if (>
c5a0: 3d 20 69 20 6e 75 6d 6b 65 79 73 29 0a 09 09 09 = i numkeys)....
c5b0: 09 09 09 09 09 72 65 73 0a 09 09 09 09 09 09 09 .....res........
c5c0: 09 28 6c 6f 6f 70 20 28 2b 20 69 20 31 29 0a 09 .(loop (+ i 1)..
c5d0: 09 09 09 09 09 09 09 20 20 20 20 20 20 28 61 70 ....... (ap
c5e0: 70 65 6e 64 20 72 65 73 20 28 6c 69 73 74 20 28 pend res (list (
c5f0: 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b vector-ref vb (+
c600: 20 69 20 32 29 29 29 29 29 29 29 29 0a 09 09 09 i 2))))))))....
c610: 09 09 20 20 20 20 20 20 20 28 72 75 6e 6e 61 6d .. (runnam
c620: 65 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 e (vector-ref
c630: 76 62 20 31 29 29 0a 09 09 09 09 09 20 20 20 20 vb 1))......
c640: 20 20 20 28 74 65 73 74 6e 61 6d 65 20 20 28 76 (testname (v
c650: 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 ector-ref vb (+
c660: 20 32 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 2 numkeys)))...
c670: 09 09 09 20 20 20 20 20 20 20 28 69 74 65 6d 2d ... (item-
c680: 70 61 74 68 20 28 76 65 63 74 6f 72 2d 72 65 66 path (vector-ref
c690: 20 76 62 20 28 2b 20 20 33 20 6e 75 6d 6b 65 79 vb (+ 3 numkey
c6a0: 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 s)))......
c6b0: 20 28 66 69 6e 61 6c 2d 6c 6f 67 20 28 76 65 63 (final-log (vec
c6c0: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 37 tor-ref vb (+ 7
c6d0: 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 numkeys))).....
c6e0: 09 20 20 20 20 20 20 20 28 72 75 6e 2d 64 69 72 . (run-dir
c6f0: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 (vector-ref v
c700: 62 20 28 2b 20 31 38 20 6e 75 6d 6b 65 79 73 29 b (+ 18 numkeys)
c710: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
c720: 6c 6f 67 2d 66 70 61 74 68 20 28 63 6f 6e 63 20 log-fpath (conc
c730: 72 75 6e 2d 64 69 72 20 22 2f 22 20 20 66 69 6e run-dir "/" fin
c740: 61 6c 2d 6c 6f 67 29 29 29 20 3b 3b 20 28 73 74 al-log))) ;; (st
c750: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse
c760: 20 6b 65 79 76 61 6c 73 20 22 2f 22 29 20 22 2f keyvals "/") "/
c770: 22 20 74 65 73 74 6e 61 6d 65 20 22 2f 22 20 69 " testname "/" i
c780: 74 65 6d 2d 70 61 74 68 20 22 2f 22 0a 09 09 09 tem-path "/"....
c790: 09 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 .. (debug:print
c7a0: 20 34 20 22 6c 6f 67 3a 20 22 20 6c 6f 67 2d 66 4 "log: " log-f
c7b0: 70 61 74 68 20 22 20 65 78 69 73 74 73 3a 20 22 path " exists: "
c7c0: 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c (file-exists? l
c7d0: 6f 67 2d 66 70 61 74 68 29 29 0a 09 09 09 09 09 og-fpath))......
c7e0: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 (vector-set! v
c7f0: 62 20 28 2b 20 37 20 6e 75 6d 6b 65 79 73 29 20 b (+ 7 numkeys)
c800: 28 69 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 (if (file-exists
c810: 3f 20 6c 6f 67 2d 66 70 61 74 68 29 0a 09 09 09 ? log-fpath)....
c820: 09 09 09 09 09 09 20 20 20 20 28 6c 65 74 20 28 ...... (let (
c830: 28 6e 65 77 70 61 74 68 20 28 63 6f 6e 63 20 70 (newpath (conc p
c840: 61 74 68 6d 6f 64 20 22 2f 22 0a 09 09 09 09 09 athmod "/"......
c850: 09 09 09 09 09 09 09 20 28 73 74 72 69 6e 67 2d ....... (string-
c860: 69 6e 74 65 72 73 70 65 72 73 65 20 6b 65 79 76 intersperse keyv
c870: 61 6c 73 20 22 2f 22 29 0a 09 09 09 09 09 09 09 als "/")........
c880: 09 09 09 09 09 20 22 2f 22 20 72 75 6e 6e 61 6d ..... "/" runnam
c890: 65 20 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 e "/" testname "
c8a0: 2f 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 /".............
c8b0: 28 69 66 20 28 73 74 72 69 6e 67 3d 3f 20 69 74 (if (string=? it
c8c0: 65 6d 2d 70 61 74 68 20 22 22 29 20 22 22 20 28 em-path "") "" (
c8d0: 63 6f 6e 63 20 22 2f 22 20 69 74 65 6d 2d 70 61 conc "/" item-pa
c8e0: 74 68 29 29 0a 09 09 09 09 09 09 09 09 09 09 09 th))............
c8f0: 09 20 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 0a 09 . final-log)))..
c900: 09 09 09 09 09 09 09 09 20 20 20 20 20 20 3b 3b ........ ;;
c910: 20 66 6f 72 20 6e 6f 77 20 74 68 72 6f 77 20 61 for now throw a
c920: 77 61 79 20 6e 65 77 70 61 74 68 20 61 6e 64 20 way newpath and
c930: 75 73 65 20 74 68 65 20 6c 6f 67 2d 66 70 61 74 use the log-fpat
c940: 68 20 63 6f 6e 63 27 64 20 77 69 74 68 20 70 61 h conc'd with pa
c950: 74 68 6d 6f 64 0a 09 09 09 09 09 09 09 09 09 20 thmod..........
c960: 20 20 20 20 20 28 73 65 74 21 20 6e 65 77 70 61 (set! newpa
c970: 74 68 20 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 th (conc pathmod
c980: 20 6c 6f 67 2d 66 70 61 74 68 29 29 0a 09 09 09 log-fpath))....
c990: 09 09 09 09 09 09 20 20 20 20 20 20 28 69 66 20 ...... (if
c9a0: 77 69 6e 64 6f 77 73 20 28 73 74 72 69 6e 67 2d windows (string-
c9b0: 74 72 61 6e 73 6c 61 74 65 20 6e 65 77 70 61 74 translate newpat
c9c0: 68 20 22 2f 22 20 22 5c 5c 22 29 20 6e 65 77 70 h "/" "\\") newp
c9d0: 61 74 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 ath))..........
c9e0: 20 20 20 28 69 66 20 28 3e 20 2a 76 65 72 62 6f (if (> *verbo
c9f0: 73 69 74 79 2a 20 31 29 0a 09 09 09 09 09 09 09 sity* 1)........
ca00: 09 09 09 28 63 6f 6e 63 20 66 69 6e 61 6c 2d 6c ...(conc final-l
ca10: 6f 67 20 22 20 6e 6f 74 2d 66 6f 75 6e 64 22 29 og " not-found")
ca20: 0a 09 09 09 09 09 09 09 09 09 09 22 22 29 29 29 ..........."")))
ca30: 0a 09 09 09 09 09 20 20 28 76 65 63 74 6f 72 2d ...... (vector-
ca40: 3e 6c 69 73 74 20 76 62 29 29 0a 09 09 09 09 09 >list vb))......
ca50: 62 29 29 29 29 29 0a 09 20 20 20 64 62 0a 09 20 b))))).. db..
ca60: 20 20 6d 61 69 6e 71 72 79 0a 09 20 20 20 72 75 mainqry.. ru
ca70: 6e 73 70 61 74 74 20 28 6d 61 70 20 63 61 64 72 nspatt (map cadr
ca80: 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 29 keypatt-alist))
ca90: 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e . (debug:prin
caa0: 74 20 32 20 22 46 6f 75 6e 64 20 22 20 28 6c 65 t 2 "Found " (le
cab0: 6e 67 74 68 20 74 65 73 74 2d 69 64 73 29 20 22 ngth test-ids) "
cac0: 20 72 65 63 6f 72 64 73 22 29 0a 20 20 20 20 28 records"). (
cad0: 73 65 74 21 20 72 65 73 75 6c 74 73 20 28 6c 69 set! results (li
cae0: 73 74 20 28 63 6f 6e 73 20 22 52 75 6e 73 22 20 st (cons "Runs"
caf0: 72 65 73 75 6c 74 73 29 29 29 0a 20 20 20 20 3b results))). ;
cb00: 3b 20 6e 6f 77 2c 20 66 6f 72 20 65 61 63 68 20 ; now, for each
cb10: 74 65 73 74 2c 20 63 6f 6c 6c 65 63 74 20 74 68 test, collect th
cb20: 65 20 74 65 73 74 5f 64 61 74 61 20 69 6e 66 6f e test_data info
cb30: 20 61 6e 64 20 61 64 64 20 61 20 6e 65 77 20 73 and add a new s
cb40: 68 65 65 74 0a 20 20 20 20 28 66 6f 72 2d 65 61 heet. (for-ea
cb50: 63 68 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 ch. (lambda
cb60: 28 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 (test-id).
cb70: 20 28 6c 65 74 20 28 28 74 65 73 74 2d 64 61 74 (let ((test-dat
cb80: 61 20 28 6c 69 73 74 20 74 65 73 74 64 61 74 61 a (list testdata
cb90: 2d 68 65 61 64 65 72 29 29 0a 09 20 20 20 20 20 -header))..
cba0: 28 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 (curr-test-name
cbb0: 23 66 29 29 0a 09 20 28 73 71 6c 69 74 65 33 3a #f)).. (sqlite3:
cbc0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 for-each-row..
cbd0: 28 6c 61 6d 62 64 61 20 28 72 75 6e 2d 69 64 20 (lambda (run-id
cbe0: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 testname item-pa
cbf0: 74 68 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 th category vari
cc00: 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 able value expec
cc10: 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 73 74 ted tol units st
cc20: 61 74 75 73 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 atus comment)..
cc30: 20 20 20 28 73 65 74 21 20 63 75 72 72 2d 74 65 (set! curr-te
cc40: 73 74 2d 6e 61 6d 65 20 74 65 73 74 6e 61 6d 65 st-name testname
cc50: 29 0a 09 20 20 20 20 28 73 65 74 21 20 74 65 73 ).. (set! tes
cc60: 74 2d 64 61 74 61 20 28 61 70 70 65 6e 64 20 74 t-data (append t
cc70: 65 73 74 2d 64 61 74 61 20 28 6c 69 73 74 20 28 est-data (list (
cc80: 6c 69 73 74 20 72 75 6e 2d 69 64 20 74 65 73 74 list run-id test
cc90: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 name item-path c
cca0: 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 ategory variable
ccb0: 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 value expected
ccc0: 74 6f 6c 20 75 6e 69 74 73 20 73 74 61 74 75 73 tol units status
ccd0: 20 63 6f 6d 6d 65 6e 74 29 29 29 29 29 0a 09 20 comment)))))..
cce0: 20 64 62 20 0a 09 20 20 3b 3b 20 22 53 45 4c 45 db .. ;; "SELE
ccf0: 43 54 20 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 CT run_id,testna
cd00: 6d 65 2c 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 me,item_path,cat
cd10: 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 egory,variable,t
cd20: 64 2e 76 61 6c 75 65 20 41 53 20 76 61 6c 75 65 d.value AS value
cd30: 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e ,expected,tol,un
cd40: 69 74 73 2c 74 64 2e 73 74 61 74 75 73 20 41 53 its,td.status AS
cd50: 20 73 74 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 status,td.comme
cd60: 6e 74 20 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 nt AS comment FR
cd70: 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 41 53 20 OM test_data AS
cd80: 74 64 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 td INNER JOIN te
cd90: 73 74 73 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d sts ON tests.id=
cda0: 74 64 2e 74 65 73 74 5f 69 64 20 57 48 45 52 45 td.test_id WHERE
cdb0: 20 74 65 73 74 5f 69 64 3d 3f 3b 22 0a 09 20 20 test_id=?;"..
cdc0: 22 53 45 4c 45 43 54 20 72 75 6e 5f 69 64 2c 74 "SELECT run_id,t
cdd0: 65 73 74 6e 61 6d 65 2c 69 74 65 6d 5f 70 61 74 estname,item_pat
cde0: 68 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 h,category,varia
cdf0: 62 6c 65 2c 74 64 2e 76 61 6c 75 65 20 41 53 20 ble,td.value AS
ce00: 76 61 6c 75 65 2c 74 64 2e 65 78 70 65 63 74 65 value,td.expecte
ce10: 64 2c 74 64 2e 74 6f 6c 2c 74 64 2e 75 6e 69 74 d,td.tol,td.unit
ce20: 73 2c 74 64 2e 73 74 61 74 75 73 20 41 53 20 73 s,td.status AS s
ce30: 74 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 tatus,td.comment
ce40: 20 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d AS comment FROM
ce50: 20 74 65 73 74 5f 64 61 74 61 20 41 53 20 74 64 test_data AS td
ce60: 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 INNER JOIN test
ce70: 73 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 s ON tests.id=td
ce80: 2e 74 65 73 74 5f 69 64 20 57 48 45 52 45 20 74 .test_id WHERE t
ce90: 65 73 74 6e 61 6d 65 3d 3f 3b 22 0a 09 20 20 74 estname=?;".. t
cea0: 65 73 74 2d 69 64 29 0a 09 20 28 69 66 20 63 75 est-id).. (if cu
ceb0: 72 72 2d 74 65 73 74 2d 6e 61 6d 65 0a 09 20 20 rr-test-name..
cec0: 20 20 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 (set! results
ced0: 20 28 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 (append results
cee0: 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 63 75 72 (list (cons cur
cef0: 72 2d 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 r-test-name test
cf00: 2d 64 61 74 61 29 29 29 29 29 0a 09 20 29 29 0a -data))))).. )).
cf10: 20 20 20 20 20 28 73 6f 72 74 20 28 64 65 6c 65 (sort (dele
cf20: 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 74 65 te-duplicates te
cf30: 73 74 2d 69 64 73 29 20 73 74 72 69 6e 67 3c 3d st-ids) string<=
cf40: 29 29 0a 20 20 20 20 28 73 79 73 74 65 6d 20 28 )). (system (
cf50: 63 6f 6e 63 20 22 6d 6b 64 69 72 20 2d 70 20 22 conc "mkdir -p "
cf60: 20 74 65 6d 70 64 69 72 29 29 0a 20 20 20 20 3b tempdir)). ;
cf70: 3b 20 28 70 70 20 72 65 73 75 6c 74 73 29 0a 20 ; (pp results).
cf80: 20 20 20 28 6f 64 73 3a 6c 69 73 74 2d 3e 6f 64 (ods:list->od
cf90: 73 20 0a 20 20 20 20 20 74 65 6d 70 64 69 72 0a s . tempdir.
cfa0: 20 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 (if (string
cfb0: 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 20 22 -match (regexp "
cfc0: 5e 5b 2f 7e 5d 2b 2e 2a 22 29 20 6f 75 74 70 75 ^[/~]+.*") outpu
cfd0: 74 66 69 6c 65 29 20 3b 3b 20 66 75 6c 6c 20 70 tfile) ;; full p
cfe0: 61 74 68 3f 0a 09 20 6f 75 74 70 75 74 66 69 6c ath?.. outputfil
cff0: 65 0a 09 20 28 62 65 67 69 6e 0a 09 20 20 20 28 e.. (begin.. (
d000: 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 debug:print 0 "W
d010: 41 52 4e 49 4e 47 3a 20 70 61 74 68 20 67 69 76 ARNING: path giv
d020: 65 6e 2c 20 22 20 6f 75 74 70 75 74 66 69 6c 65 en, " outputfile
d030: 20 22 20 69 73 20 72 65 6c 61 74 69 76 65 2c 20 " is relative,
d040: 70 72 65 66 69 78 69 6e 67 20 77 69 74 68 20 63 prefixing with c
d050: 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 urrent directory
d060: 22 29 0a 09 20 20 20 28 63 6f 6e 63 20 28 63 75 ").. (conc (cu
d070: 72 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 rrent-directory)
d080: 20 22 2f 22 20 6f 75 74 70 75 74 66 69 6c 65 29 "/" outputfile)
d090: 29 29 0a 20 20 20 20 20 72 65 73 75 6c 74 73 29 )). results)
d0a0: 0a 20 20 20 20 3b 3b 20 62 72 75 74 61 6c 20 63 . ;; brutal c
d0b0: 6c 65 61 6e 20 75 70 0a 20 20 20 20 28 73 79 73 lean up. (sys
d0c0: 74 65 6d 20 22 72 6d 20 2d 72 66 20 74 65 6d 70 tem "rm -rf temp
d0d0: 64 69 72 22 29 29 29 0a 0a 3b 3b 20 28 64 62 3a dir")))..;; (db:
d0e0: 65 78 74 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 extract-ods-file
d0f0: 20 64 62 20 22 6f 75 74 70 75 74 66 69 6c 65 2e db "outputfile.
d100: 6f 64 73 22 20 27 28 28 22 73 79 73 6e 61 6d 65 ods" '(("sysname
d110: 22 20 22 25 22 29 28 22 66 73 6e 61 6d 65 22 20 " "%")("fsname"
d120: 22 25 22 29 28 22 64 61 74 61 70 61 74 68 22 20 "%")("datapath"
d130: 22 25 22 29 29 20 22 25 22 29 0a 0a 0a 3b 3b 3d "%")) "%")...;;=
d140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d180: 3d 3d 3d 3d 3d 0a 3b 3b 20 52 45 4d 4f 54 45 20 =====.;; REMOTE
d190: 44 42 20 41 43 43 45 53 53 20 56 49 41 20 52 50 DB ACCESS VIA RP
d1a0: 43 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d C.;;============
d1b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d1c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d1d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d1e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 ==========..(def
d1f0: 69 6e 65 20 28 72 64 62 3a 73 65 74 2d 74 65 73 ine (rdb:set-tes
d200: 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 20 ts-state-status
d210: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 db run-id testna
d220: 6d 65 73 20 63 75 72 72 73 74 61 74 65 20 63 75 mes currstate cu
d230: 72 72 73 74 61 74 75 73 20 6e 65 77 73 74 61 74 rrstatus newstat
d240: 65 20 6e 65 77 73 74 61 74 75 73 29 0a 20 20 28 e newstatus). (
d250: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
d260: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
d270: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d280: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
d290: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
d2a0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d2b0: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
d2c0: 65 64 75 72 65 20 27 72 64 62 3a 73 65 74 2d 74 edure 'rdb:set-t
d2d0: 65 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 ests-state-statu
d2e0: 73 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 72 s host port).. r
d2f0: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 un-id testnames
d300: 63 75 72 72 73 74 61 74 65 20 63 75 72 72 73 74 currstate currst
d310: 61 74 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 atus newstate ne
d320: 77 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 wstatus)).
d330: 28 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 (db:set-tests-st
d340: 61 74 65 2d 73 74 61 74 75 73 20 64 62 20 72 75 ate-status db ru
d350: 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 n-id testnames c
d360: 75 72 72 73 74 61 74 65 20 63 75 72 72 73 74 61 urrstate currsta
d370: 74 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 tus newstate new
d380: 73 74 61 74 75 73 29 29 29 0a 0a 28 64 65 66 69 status)))..(defi
d390: 6e 65 20 28 72 64 62 3a 74 65 73 74 73 74 65 70 ne (rdb:teststep
d3a0: 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 -set-status! db
d3b0: 74 65 73 74 2d 69 64 20 74 65 73 74 73 74 65 70 test-id teststep
d3c0: 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 -name state-in s
d3d0: 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 64 61 74 tatus-in itemdat
d3e0: 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 comment logfile
d3f0: 29 0a 20 20 28 6c 65 74 20 28 28 69 74 65 6d 2d ). (let ((item-
d400: 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d path (item-list-
d410: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 29 >path itemdat)))
d420: 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d . (if *runrem
d430: 6f 74 65 2a 0a 09 28 6c 65 74 20 28 28 68 6f 73 ote*..(let ((hos
d440: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
d450: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
d460: 20 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 (port (vect
d470: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
d480: 65 2a 20 31 29 29 29 0a 09 20 20 28 28 72 70 63 e* 1))).. ((rpc
d490: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
d4a0: 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 teststep-set-sta
d4b0: 74 75 73 21 20 68 6f 73 74 20 70 6f 72 74 29 0a tus! host port).
d4c0: 09 20 20 20 74 65 73 74 2d 69 64 20 74 65 73 74 . test-id test
d4d0: 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d step-name state-
d4e0: 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 69 74 65 in status-in ite
d4f0: 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 6e 74 20 6c m-path comment l
d500: 6f 67 66 69 6c 65 29 29 0a 09 28 64 62 3a 74 65 ogfile))..(db:te
d510: 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75 ststep-set-statu
d520: 73 21 20 64 62 20 74 65 73 74 2d 69 64 20 74 65 s! db test-id te
d530: 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 ststep-name stat
d540: 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 69 e-in status-in i
d550: 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 6e 74 tem-path comment
d560: 20 6c 6f 67 66 69 6c 65 29 29 29 29 0a 0a 28 64 logfile))))..(d
d570: 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 2d efine (rdb:test-
d580: 75 70 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f update-meta-info
d590: 20 64 62 20 74 65 73 74 2d 69 64 20 6d 69 6e 75 db test-id minu
d5a0: 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 6b tes cpuload disk
d5b0: 66 72 65 65 20 74 6d 70 66 72 65 65 29 0a 20 20 free tmpfree).
d5c0: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
d5d0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
d5e0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
d5f0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
d600: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
d610: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
d620: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
d630: 63 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 cedure 'rdb:test
d640: 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 -update-meta-inf
d650: 6f 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 74 o host port).. t
d660: 65 73 74 2d 69 64 20 6d 69 6e 75 74 65 73 20 63 est-id minutes c
d670: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
d680: 74 6d 70 66 72 65 65 29 29 0a 20 20 20 20 20 20 tmpfree)).
d690: 28 64 62 3a 74 65 73 74 2d 75 70 64 61 74 65 2d (db:test-update-
d6a0: 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 74 65 73 meta-info db tes
d6b0: 74 2d 69 64 20 6d 69 6e 75 74 65 73 20 63 70 75 t-id minutes cpu
d6c0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 74 6d load diskfree tm
d6d0: 70 66 72 65 65 29 29 29 0a 0a 28 64 65 66 69 6e pfree)))..(defin
d6e0: 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d e (rdb:test-set-
d6f0: 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d state-status-by-
d700: 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 run-id-testname
d710: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
d720: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 ame item-path st
d730: 61 74 75 73 20 73 74 61 74 65 29 0a 20 20 28 69 atus state). (i
d740: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
d750: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
d760: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
d770: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
d780: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
d790: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
d7a0: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
d7b0: 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 73 dure 'rdb:test-s
d7c0: 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d et-state-status-
d7d0: 62 79 2d 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 by-run-id-testna
d7e0: 6d 65 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 me host port)..
d7f0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d800: 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 e item-path stat
d810: 75 73 20 73 74 61 74 65 29 29 0a 20 20 20 20 20 us state)).
d820: 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 (db:test-set-st
d830: 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 ate-status-by-ru
d840: 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 n-id-testname db
d850: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d860: 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 e item-path stat
d870: 75 73 20 73 74 61 74 65 29 29 29 0a 0a 28 64 65 us state)))..(de
d880: 66 69 6e 65 20 28 72 64 62 3a 63 73 76 2d 3e 74 fine (rdb:csv->t
d890: 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 est-data db test
d8a0: 2d 69 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 -id csvdata). (
d8b0: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
d8c0: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
d8d0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d8e0: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
d8f0: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
d900: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d910: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
d920: 65 64 75 72 65 20 27 72 64 62 3a 63 73 76 2d 3e edure 'rdb:csv->
d930: 74 65 73 74 2d 64 61 74 61 20 68 6f 73 74 20 70 test-data host p
d940: 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 63 ort).. test-id c
d950: 73 76 64 61 74 61 29 29 0a 20 20 20 20 20 20 28 svdata)). (
d960: 64 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 db:csv->test-dat
d970: 61 20 64 62 20 74 65 73 74 2d 69 64 20 63 73 76 a db test-id csv
d980: 64 61 74 61 29 29 29 0a 0a 28 64 65 66 69 6e 65 data)))..(define
d990: 20 28 72 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 (rdb:roll-up-pa
d9a0: 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 ss-fail-counts d
d9b0: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
d9c0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 me item-path sta
d9d0: 74 75 73 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 tus). (if *runr
d9e0: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
d9f0: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
da00: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
da10: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
da20: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
da30: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
da40: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
da50: 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d db:roll-up-pass-
da60: 66 61 69 6c 2d 63 6f 75 6e 74 73 20 68 6f 73 74 fail-counts host
da70: 20 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 port).. run-id
da80: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
da90: 61 74 68 20 73 74 61 74 75 73 29 29 0a 20 20 20 ath status)).
daa0: 20 20 20 28 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 (db:roll-up-p
dab0: 61 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 ass-fail-counts
dac0: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
dad0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 ame item-path st
dae0: 61 74 75 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 atus)))..(define
daf0: 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 (rdb:test-set-c
db00: 6f 6d 6d 65 6e 74 20 64 62 20 74 65 73 74 2d 69 omment db test-i
db10: 64 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 66 d comment). (if
db20: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
db30: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
db40: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
db50: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
db60: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
db70: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
db80: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
db90: 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 73 65 ure 'rdb:test-se
dba0: 74 2d 63 6f 6d 6d 65 6e 74 20 68 6f 73 74 20 70 t-comment host p
dbb0: 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 63 ort).. test-id c
dbc0: 6f 6d 6d 65 6e 74 29 29 0a 20 20 20 20 20 20 28 omment)). (
dbd0: 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d db:test-set-comm
dbe0: 65 6e 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 ent db test-id c
dbf0: 6f 6d 6d 65 6e 74 29 29 29 0a 0a 28 64 65 66 69 omment)))..(defi
dc00: 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 ne (rdb:test-set
dc10: 2d 6c 6f 67 21 20 64 62 20 74 65 73 74 2d 69 64 -log! db test-id
dc20: 20 6c 6f 67 66 29 0a 20 20 28 69 66 20 2a 72 75 logf). (if *ru
dc30: 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 nremote*. (
dc40: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 let ((host (vect
dc50: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
dc60: 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 e* 0)).. (por
dc70: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
dc80: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 unremote* 1)))..
dc90: 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 ((rpc:procedure
dca0: 27 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f 'rdb:test-set-lo
dcb0: 67 21 20 68 6f 73 74 20 70 6f 72 74 29 20 74 65 g! host port) te
dcc0: 73 74 2d 69 64 20 6c 6f 67 66 29 29 0a 20 20 20 st-id logf)).
dcd0: 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d (db:test-set-
dce0: 6c 6f 67 21 20 64 62 20 74 65 73 74 2d 69 64 20 log! db test-id
dcf0: 6c 6f 67 66 29 29 29 0a 0a 28 64 65 66 69 6e 65 logf)))..(define
dd00: 20 28 72 64 62 3a 67 65 74 2d 72 75 6e 73 20 64 (rdb:get-runs d
dd10: 62 20 72 75 6e 6e 61 6d 65 70 61 74 74 20 6e 75 b runnamepatt nu
dd20: 6d 72 75 6e 73 20 73 74 61 72 74 72 75 6e 6f 66 mruns startrunof
dd30: 66 73 65 74 20 6b 65 79 70 61 74 74 73 29 0a 20 fset keypatts).
dd40: 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a (if *runremote*
dd50: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f . (let ((ho
dd60: 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a st (vector-ref *
dd70: 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 runremote* 0))..
dd80: 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f (port (vecto
dd90: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
dda0: 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 * 1)))..((rpc:pr
ddb0: 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 ocedure 'rdb:get
ddc0: 2d 72 75 6e 73 20 68 6f 73 74 20 70 6f 72 74 29 -runs host port)
ddd0: 0a 09 20 72 75 6e 6e 61 6d 65 70 61 74 74 20 6e .. runnamepatt n
dde0: 75 6d 72 75 6e 73 20 73 74 61 72 74 72 75 6e 6f umruns startruno
ddf0: 66 66 73 65 74 20 6b 65 79 70 61 74 74 73 29 29 ffset keypatts))
de00: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 72 . (db:get-r
de10: 75 6e 73 20 64 62 20 72 75 6e 6e 61 6d 65 70 61 uns db runnamepa
de20: 74 74 20 6e 75 6d 72 75 6e 73 20 73 74 61 72 74 tt numruns start
de30: 72 75 6e 6f 66 66 73 65 74 20 6b 65 79 70 61 74 runoffset keypat
de40: 74 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ts)))..(define (
de50: 72 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f rdb:get-tests-fo
de60: 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 r-run db run-id
de70: 74 65 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 testpatt itempat
de80: 74 20 73 74 61 74 65 73 20 73 74 61 74 75 73 65 t states statuse
de90: 73 20 23 21 6b 65 79 20 28 6e 6f 74 2d 69 6e 20 s #!key (not-in
dea0: 23 74 29 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 #t)). (if *runr
deb0: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
dec0: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
ded0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
dee0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
def0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
df00: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
df10: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
df20: 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db:get-tests-for
df30: 2d 72 75 6e 20 68 6f 73 74 20 70 6f 72 74 29 0a -run host port).
df40: 09 20 20 72 75 6e 2d 69 64 20 74 65 73 74 70 61 . run-id testpa
df50: 74 74 20 69 74 65 6d 70 61 74 74 20 73 74 61 74 tt itempatt stat
df60: 65 73 20 73 74 61 74 75 73 65 73 20 6e 6f 74 2d es statuses not-
df70: 69 6e 3a 20 6e 6f 74 2d 69 6e 29 29 0a 20 20 20 in: not-in)).
df80: 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 74 73 (db:get-tests
df90: 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d -for-run db run-
dfa0: 69 64 20 74 65 73 74 70 61 74 74 20 69 74 65 6d id testpatt item
dfb0: 70 61 74 74 20 73 74 61 74 65 73 20 73 74 61 74 patt states stat
dfc0: 75 73 65 73 20 6e 6f 74 2d 69 6e 3a 20 6e 6f 74 uses not-in: not
dfd0: 2d 69 6e 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 -in)))..(define
dfe0: 28 72 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 (rdb:get-test-da
dff0: 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 ta-by-id db test
e000: 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 -id). (if *runr
e010: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
e020: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
e030: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
e040: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
e050: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e060: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
e070: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
e080: 70 63 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 61 pc:get-test-data
e090: 2d 62 79 2d 69 64 20 68 6f 73 74 20 70 6f 72 74 -by-id host port
e0a0: 29 0a 09 20 74 65 73 74 2d 69 64 29 29 0a 20 20 ).. test-id)).
e0b0: 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 74 (db:get-test
e0c0: 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 74 -data-by-id db t
e0d0: 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 20 20 est-id))).
e0e0: 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 .(define (rdb:ge
e0f0: 74 2d 6b 65 79 73 20 64 62 29 0a 20 20 28 69 66 t-keys db). (if
e100: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
e110: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
e120: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
e130: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
e140: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
e150: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
e160: 29 29 0a 09 28 69 66 20 2a 64 62 2d 6b 65 79 73 ))..(if *db-keys
e170: 2a 20 2a 64 62 2d 6b 65 79 73 2a 20 0a 09 20 20 * *db-keys* ..
e180: 20 20 28 6c 65 74 20 28 28 6b 65 79 73 20 28 28 (let ((keys ((
e190: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
e1a0: 64 62 3a 67 65 74 2d 6b 65 79 73 20 68 6f 73 74 db:get-keys host
e1b0: 20 70 6f 72 74 29 29 29 29 0a 09 20 20 20 20 20 port))))..
e1c0: 20 28 73 65 74 21 20 2a 64 62 2d 6b 65 79 73 2a (set! *db-keys*
e1d0: 20 6b 65 79 73 29 0a 09 20 20 20 20 20 20 6b 65 keys).. ke
e1e0: 79 73 29 29 29 0a 20 20 20 20 20 20 28 64 62 3a ys))). (db:
e1f0: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 29 0a 09 get-keys db)))..
e200: 20 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 .(define (rdb:g
e210: 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 et-num-runs db r
e220: 75 6e 70 61 74 74 29 0a 20 20 28 69 66 20 2a 72 unpatt). (if *r
e230: 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 unremote*.
e240: 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
e250: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
e260: 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f te* 0)).. (po
e270: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
e280: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
e290: 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 .((rpc:procedure
e2a0: 20 27 72 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 'rdb:get-num-ru
e2b0: 6e 73 20 68 6f 73 74 20 70 6f 72 74 29 20 72 75 ns host port) ru
e2c0: 6e 70 61 74 74 29 29 0a 20 20 20 20 20 20 28 64 npatt)). (d
e2d0: 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 b:get-num-runs d
e2e0: 62 20 72 75 6e 70 61 74 74 29 29 29 0a 0a 28 64 b runpatt)))..(d
e2f0: 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 2d efine (rdb:test-
e300: 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 set-state-status
e310: 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 -by-id db test-i
e320: 64 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 d newstate newst
e330: 61 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 atus newcomment)
e340: 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d . (if *runrem
e350: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
e360: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
e370: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
e380: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
e390: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
e3a0: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
e3b0: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
e3c0: 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d :test-set-state-
e3d0: 73 74 61 74 75 73 2d 62 79 2d 69 64 20 68 6f 73 status-by-id hos
e3e0: 74 20 70 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 t port).. test-i
e3f0: 64 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 d newstate newst
e400: 61 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 atus newcomment)
e410: 29 0a 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 ). (db:test
e420: 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 -set-state-statu
e430: 73 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d s-by-id db test-
e440: 69 64 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 id newstate news
e450: 74 61 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 tatus newcomment
e460: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
e470: 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 b:get-key-val-pa
e480: 69 72 73 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 irs db run-id).
e490: 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a (if *runremote*
e4a0: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f . (let ((ho
e4b0: 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a st (vector-ref *
e4c0: 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 runremote* 0))..
e4d0: 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f (port (vecto
e4e0: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
e4f0: 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 * 1)))..((rpc:pr
e500: 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 ocedure 'rdb:get
e510: 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 68 -key-val-pairs h
e520: 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 ost port) run-id
e530: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 )). (db:get
e540: 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 64 -key-val-pairs d
e550: 62 20 72 75 6e 2d 69 64 29 29 29 0a 09 20 0a 28 b run-id))).. .(
e560: 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d define (rdb:get-
e570: 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d key-vals db run-
e580: 69 64 29 0a 20 20 20 20 28 69 66 20 2a 72 75 6e id). (if *run
e590: 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c remote*. (l
e5a0: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
e5b0: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
e5c0: 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 * 0)).. (port
e5d0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
e5e0: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 nremote* 1)))..(
e5f0: 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 (rpc:procedure '
e600: 72 64 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 73 rdb:get-key-vals
e610: 20 68 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 2d host port) run-
e620: 69 64 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 id)). (db:g
e630: 65 74 2d 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 et-key-vals db r
e640: 75 6e 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e un-id)))..(defin
e650: 65 20 28 72 64 62 3a 74 65 73 74 6d 65 74 61 2d e (rdb:testmeta-
e660: 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 65 get-record db te
e670: 73 74 6e 61 6d 65 29 0a 20 20 20 28 69 66 20 2a stname). (if *
e680: 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 runremote*.
e690: 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 (let ((host (ve
e6a0: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
e6b0: 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 ote* 0)).. (p
e6c0: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
e6d0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
e6e0: 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 ..((rpc:procedur
e6f0: 65 20 27 72 64 62 3a 74 65 73 74 6d 65 74 61 2d e 'rdb:testmeta-
e700: 67 65 74 2d 72 65 63 6f 72 64 20 68 6f 73 74 20 get-record host
e710: 70 6f 72 74 29 20 74 65 73 74 6e 61 6d 65 29 29 port) testname))
e720: 0a 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 6d . (db:testm
e730: 65 74 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 eta-get-record d
e740: 62 20 74 65 73 74 6e 61 6d 65 29 29 29 0a 0a 28 b testname)))..(
e750: 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d define (rdb:get-
e760: 74 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 test-data-by-id
e770: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 69 db test-id). (i
e780: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
e790: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
e7a0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e7b0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
e7c0: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
e7d0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
e7e0: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
e7f0: 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 74 65 dure 'rdb:get-te
e800: 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 68 6f st-data-by-id ho
e810: 73 74 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 st port) test-id
e820: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 )). (db:get
e830: 2d 74 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 -test-data-by-id
e840: 20 64 62 20 74 65 73 74 2d 69 64 29 29 29 0a 0a db test-id)))..
e850: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 (define (rdb:get
e860: 2d 72 75 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e -run-info db run
e870: 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 -id). (if *runr
e880: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
e890: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
e8a0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
e8b0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
e8c0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e8d0: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
e8e0: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
e8f0: 64 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 db:get-run-info
e900: 68 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 host port) run-i
e910: 64 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 d)). (db:ge
e920: 74 2d 72 75 6e 2d 69 6e 66 6f 20 64 62 20 72 75 t-run-info db ru
e930: 6e 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 n-id)))..(define
e940: 20 28 72 64 62 3a 67 65 74 2d 73 74 65 70 73 2d (rdb:get-steps-
e950: 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 for-test db test
e960: 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 -id). (if *runr
e970: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
e980: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
e990: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
e9a0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
e9b0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e9c0: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
e9d0: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
e9e0: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 db:get-steps-for
e9f0: 2d 74 65 73 74 20 68 6f 73 74 20 70 6f 72 74 29 -test host port)
ea00: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 20 test-id)).
ea10: 20 28 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 (db:get-steps-f
ea20: 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d or-test db test-
ea30: 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 id)))..(define (
ea40: 72 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 74 61 rdb:get-steps-ta
ea50: 62 6c 65 20 64 62 20 74 65 73 74 2d 69 64 29 0a ble db test-id).
ea60: 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 (if *runremote
ea70: 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 *. (let ((h
ea80: 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ost (vector-ref
ea90: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a *runremote* 0)).
eaa0: 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 . (port (vect
eab0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
eac0: 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 e* 1)))..((rpc:p
ead0: 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 rocedure 'rdb:ge
eae0: 74 2d 73 74 65 70 73 2d 74 61 62 6c 65 20 68 6f t-steps-table ho
eaf0: 73 74 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 st port) test-id
eb00: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 )). (db:get
eb10: 2d 73 74 65 70 73 2d 74 61 62 6c 65 20 64 62 20 -steps-table db
eb20: 74 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 test-id)))..(def
eb30: 69 6e 65 20 28 72 64 62 3a 72 65 61 64 2d 74 65 ine (rdb:read-te
eb40: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
eb50: 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 id categorypatt)
eb60: 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 . (if *runremot
eb70: 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 e*. (let ((
eb80: 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 host (vector-ref
eb90: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 *runremote* 0))
eba0: 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 .. (port (vec
ebb0: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
ebc0: 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a te* 1)))..((rpc:
ebd0: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 72 procedure 'rdb:r
ebe0: 65 61 64 2d 74 65 73 74 2d 64 61 74 61 20 68 6f ead-test-data ho
ebf0: 73 74 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 st port) test-id
ec00: 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 29 0a categorypatt)).
ec10: 20 20 20 20 20 20 28 64 62 3a 72 65 61 64 2d 74 (db:read-t
ec20: 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 est-data db test
ec30: 2d 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 -id categorypatt
ec40: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
ec50: 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 b:get-test-info
ec60: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 db run-id testna
ec70: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 me item-path).
ec80: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
ec90: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
eca0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
ecb0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
ecc0: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
ecd0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
ece0: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
ecf0: 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d cedure 'rdb:get-
ed00: 74 65 73 74 2d 69 6e 66 6f 20 68 6f 73 74 20 70 test-info host p
ed10: 6f 72 74 29 20 72 75 6e 2d 69 64 20 74 65 73 74 ort) run-id test
ed20: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 name item-path))
ed30: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 . (db:get-t
ed40: 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d est-info db run-
ed50: 69 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d id testname item
ed60: 2d 70 61 74 68 29 29 29 0a 0a 28 64 65 66 69 6e -path)))..(defin
ed70: 65 20 28 72 64 62 3a 64 65 6c 65 74 65 2d 74 65 e (rdb:delete-te
ed80: 73 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 st-records db te
ed90: 73 74 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 75 st-id). (if *ru
eda0: 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 nremote*. (
edb0: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 let ((host (vect
edc0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
edd0: 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 e* 0)).. (por
ede0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
edf0: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 unremote* 1)))..
ee00: 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 ((rpc:procedure
ee10: 27 72 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 'rdb:delete-test
ee20: 2d 72 65 63 6f 72 64 73 20 68 6f 73 74 20 70 6f -records host po
ee30: 72 74 29 20 74 65 73 74 2d 69 64 29 29 0a 20 20 rt) test-id)).
ee40: 20 20 20 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 (db:delete-t
ee50: 65 73 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 est-records db t
ee60: 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 est-id)))..(defi
ee70: 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 64 61 74 ne (rdb:test-dat
ee80: 61 2d 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 a-rollup db test
ee90: 2d 69 64 20 73 74 61 74 75 73 29 0a 20 20 20 20 -id status).
eea0: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
eeb0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
eec0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
eed0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
eee0: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
eef0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
ef00: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
ef10: 63 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 cedure 'rdb:test
ef20: 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 20 68 6f 73 -data-rollup hos
ef30: 74 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 20 t port) test-id
ef40: 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 28 status)). (
ef50: 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c db:test-data-rol
ef60: 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 lup db test-id s
ef70: 74 61 74 75 73 29 29 29 0a 0a 28 64 65 66 69 6e tatus)))..(defin
ef80: 65 20 28 72 64 62 3a 74 65 73 74 2d 67 65 74 2d e (rdb:test-get-
ef90: 70 61 74 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 paths-matching d
efa0: 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 b keynames targe
efb0: 74 20 66 6e 61 6d 65 29 0a 20 20 20 28 69 66 20 t fname). (if
efc0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
efd0: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
efe0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
eff0: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
f000: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
f010: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
f020: 29 29 29 0a 09 20 28 28 72 70 63 3a 70 72 6f 63 ))).. ((rpc:proc
f030: 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d edure 'rdb:test-
f040: 67 65 74 2d 70 61 74 68 73 2d 6d 61 74 63 68 69 get-paths-matchi
f050: 6e 67 20 68 6f 73 74 20 70 6f 72 74 29 20 6b 65 ng host port) ke
f060: 79 6e 61 6d 65 73 20 74 61 72 67 65 74 20 66 6e ynames target fn
f070: 61 6d 65 29 29 0a 20 20 20 20 20 20 20 28 64 62 ame)). (db
f080: 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 2d :test-get-paths-
f090: 6d 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 6e matching db keyn
f0a0: 61 6d 65 73 20 74 61 72 67 65 74 20 66 6e 61 6d ames target fnam
f0b0: 65 29 29 29 0a 0a 20 0a e))).. .