0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79 ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 31 2c right 2006-2011,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64 Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70 ..;; .;; This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61 rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74 vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69 he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72 on 2.0 or.;; gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61 eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65 ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74 COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 ails..;; .;; Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55 stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 T ANY WARRANTY;
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72 .;; implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45 ULAR.;; PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 3d 3d ==========..;;==
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0220: 3d 3d 3d 3d 0a 3b 3b 20 44 61 74 61 62 61 73 65 ====.;; Database
0230: 20 61 63 63 65 73 73 0a 3b 3b 3d 3d 3d 3d 3d 3d access.;;======
0240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0280: 0a 0a 28 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 57 41 53 20 64 62 2d 67 65 74 2d 72 75 6e ; WAS db-get-run
3560: 73 20 46 49 58 4d 45 20 49 4e 20 52 45 4d 41 49 s FIXME IN REMAI
3570: 4e 49 4e 47 20 43 4f 44 45 0a 3b 3b 0a 3b 3b 20 NING CODE.;;.;;
3580: 4d 45 52 47 45 20 54 48 49 53 20 57 49 54 48 20 MERGE THIS WITH
3590: 64 62 3a 67 65 74 2d 72 75 6e 73 2c 20 61 63 63 db:get-runs, acc
35a0: 69 64 65 6e 74 6c 79 20 77 72 6f 74 65 20 69 74 idently wrote it
35b0: 20 74 77 69 63 65 0a 3b 3b 0a 3b 3b 20 72 65 70 twice.;;.;; rep
35c0: 6c 61 63 65 20 68 65 61 64 65 72 20 61 6e 64 20 lace header and
35d0: 6b 65 79 73 74 72 20 77 69 74 68 20 61 20 63 61 keystr with a ca
35e0: 6c 6c 20 74 6f 20 72 75 6e 73 3a 67 65 74 2d 73 ll to runs:get-s
35f0: 74 64 2d 72 75 6e 2d 66 69 65 6c 64 73 0a 3b 3b td-run-fields.;;
3600: 0a 3b 3b 20 6b 65 79 70 61 74 74 73 3a 20 28 20 .;; keypatts: (
3610: 28 4b 45 59 31 20 22 61 62 63 25 64 65 66 22 29 (KEY1 "abc%def")
3620: 28 4b 45 59 32 20 22 25 22 29 20 29 0a 3b 3b 0a (KEY2 "%") ).;;.
3630: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
3640: 72 75 6e 73 20 64 62 20 72 75 6e 70 61 74 74 20 runs db runpatt
3650: 63 6f 75 6e 74 20 6f 66 66 73 65 74 20 6b 65 79 count offset key
3660: 70 61 74 74 73 29 0a 20 20 28 6c 65 74 2a 20 28 patts). (let* (
3670: 28 72 65 73 20 20 20 20 20 20 27 28 29 29 0a 09 (res '())..
3680: 20 28 6b 65 79 73 20 20 20 20 20 20 28 64 62 3a (keys (db:
3690: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 get-keys db))..
36a0: 28 72 65 6d 66 69 65 6c 64 73 20 28 6c 69 73 74 (remfields (list
36b0: 20 22 69 64 22 20 22 72 75 6e 6e 61 6d 65 22 20 "id" "runname"
36c0: 22 73 74 61 74 65 22 20 22 73 74 61 74 75 73 22 "state" "status"
36d0: 20 22 6f 77 6e 65 72 22 20 22 65 76 65 6e 74 5f "owner" "event_
36e0: 74 69 6d 65 22 29 29 0a 09 20 28 68 65 61 64 65 time")).. (heade
36f0: 72 20 20 20 20 28 61 70 70 65 6e 64 20 28 6d 61 r (append (ma
3700: 70 20 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e p key:get-fieldn
3710: 61 6d 65 20 6b 65 79 73 29 0a 09 09 09 20 20 20 ame keys)....
3720: 20 72 65 6d 66 69 65 6c 64 73 29 29 0a 09 20 28 remfields)).. (
3730: 6b 65 79 73 74 72 20 20 20 20 28 63 6f 6e 63 20 keystr (conc
3740: 28 6b 65 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 (keys->keystr ke
3750: 79 73 29 20 22 2c 22 0a 09 09 09 20 20 28 73 74 ys) ",".... (st
3760: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse
3770: 20 72 65 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 remfields ","))
3780: 29 0a 09 20 28 71 72 79 73 74 72 20 20 20 20 28 ).. (qrystr (
3790: 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 6b conc "SELECT " k
37a0: 65 79 73 74 72 20 22 20 46 52 4f 4d 20 72 75 6e eystr " FROM run
37b0: 73 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 20 s WHERE runname
37c0: 4c 49 4b 45 20 3f 20 22 0a 09 09 09 20 20 3b 3b LIKE ? ".... ;;
37d0: 20 47 65 6e 65 72 61 74 65 3a 20 22 20 41 4e 44 Generate: " AND
37e0: 20 78 20 4c 49 4b 45 20 27 6b 65 79 70 61 74 74 x LIKE 'keypatt
37f0: 27 20 2e 2e 2e 22 0a 09 09 09 20 20 28 69 66 20 ' ...".... (if
3800: 28 6e 75 6c 6c 3f 20 6b 65 79 70 61 74 74 73 29 (null? keypatts)
3810: 20 22 22 0a 09 09 09 20 20 20 20 20 20 28 63 6f "".... (co
3820: 6e 63 20 22 20 41 4e 44 20 22 0a 09 09 09 09 20 nc " AND ".....
3830: 20 20 20 28 73 74 72 69 6e 67 2d 6a 6f 69 6e 20 (string-join
3840: 0a 09 09 09 09 20 20 20 20 20 28 6d 61 70 20 28 ..... (map (
3850: 6c 61 6d 62 64 61 20 28 6b 65 79 70 61 74 74 29 lambda (keypatt)
3860: 0a 09 09 09 09 09 20 20 20 20 28 6c 65 74 20 28 ...... (let (
3870: 28 6b 65 79 20 20 28 63 61 72 20 6b 65 79 70 61 (key (car keypa
3880: 74 74 29 29 0a 09 09 09 09 09 09 20 20 28 70 61 tt))....... (pa
3890: 74 74 20 28 63 61 64 72 20 6b 65 79 70 61 74 74 tt (cadr keypatt
38a0: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 28 )))...... (
38b0: 63 6f 6e 63 20 6b 65 79 20 22 20 4c 49 4b 45 20 conc key " LIKE
38c0: 27 22 20 70 61 74 74 20 22 27 22 29 29 29 0a 09 '" patt "'")))..
38d0: 09 09 09 09 20 20 6b 65 79 70 61 74 74 73 29 0a .... keypatts).
38e0: 09 09 09 09 20 20 20 20 20 22 20 41 4e 44 20 22 .... " AND "
38f0: 29 29 29 0a 09 09 09 20 20 22 20 4f 52 44 45 52 ))).... " ORDER
3900: 20 42 59 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 BY event_time D
3910: 45 53 43 20 22 0a 09 09 09 20 20 28 69 66 20 28 ESC ".... (if (
3920: 6e 75 6d 62 65 72 3f 20 63 6f 75 6e 74 29 0a 09 number? count)..
3930: 09 09 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20 .. (conc "
3940: 4c 49 4d 49 54 20 22 20 63 6f 75 6e 74 29 0a 09 LIMIT " count)..
3950: 09 09 20 20 20 20 20 20 22 22 29 0a 09 09 09 20 .. "")....
3960: 20 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 6f 66 (if (number? of
3970: 66 73 65 74 29 0a 09 09 09 20 20 20 20 20 20 28 fset).... (
3980: 63 6f 6e 63 20 22 20 4f 46 46 53 45 54 20 22 20 conc " OFFSET "
3990: 6f 66 66 73 65 74 29 0a 09 09 09 20 20 20 20 20 offset)....
39a0: 20 22 22 29 29 29 29 0a 20 20 20 20 28 64 65 62 "")))). (deb
39b0: 75 67 3a 70 72 69 6e 74 20 38 20 22 49 4e 46 4f ug:print 8 "INFO
39c0: 3a 20 64 62 3a 67 65 74 2d 72 75 6e 73 20 71 72 : db:get-runs qr
39d0: 79 73 74 72 3a 20 22 20 71 72 79 73 74 72 20 22 ystr: " qrystr "
39e0: 5c 6e 6b 65 79 70 61 74 74 73 3a 20 22 20 6b 65 \nkeypatts: " ke
39f0: 79 70 61 74 74 73 20 22 5c 6e 20 20 6f 66 66 73 ypatts "\n offs
3a00: 65 74 3a 20 22 20 6f 66 66 73 65 74 20 22 20 6c et: " offset " l
3a10: 69 6d 69 74 3a 20 22 20 63 6f 75 6e 74 29 0a 20 imit: " count).
3a20: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
3a30: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
3a40: 61 6d 62 64 61 20 28 61 20 2e 20 78 29 0a 20 20 ambda (a . x).
3a50: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
3a60: 63 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 cons (apply vect
3a70: 6f 72 20 61 20 78 29 20 72 65 73 29 29 29 0a 20 or a x) res))).
3a80: 20 20 20 20 64 62 0a 20 20 20 20 20 71 72 79 73 db. qrys
3a90: 74 72 0a 20 20 20 20 20 72 75 6e 70 61 74 74 29 tr. runpatt)
3aa0: 0a 20 20 20 20 28 76 65 63 74 6f 72 20 68 65 61 . (vector hea
3ab0: 64 65 72 20 72 65 73 29 29 29 0a 0a 3b 3b 20 6a der res)))..;; j
3ac0: 75 73 74 20 67 65 74 20 63 6f 75 6e 74 20 6f 66 ust get count of
3ad0: 20 72 75 6e 73 0a 28 64 65 66 69 6e 65 20 28 64 runs.(define (d
3ae0: 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 b:get-num-runs d
3af0: 62 20 72 75 6e 70 61 74 74 29 0a 20 20 28 6c 65 b runpatt). (le
3b00: 74 20 28 28 6e 75 6d 72 75 6e 73 20 30 29 29 0a t ((numruns 0)).
3b10: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 (sqlite3:for
3b20: 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 -each-row .
3b30: 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a (lambda (count).
3b40: 20 20 20 20 20 20 20 28 73 65 74 21 20 6e 75 6d (set! num
3b50: 72 75 6e 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 runs count)).
3b60: 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 db. "SELEC
3b70: 54 20 43 4f 55 4e 54 28 69 64 29 20 46 52 4f 4d T COUNT(id) FROM
3b80: 20 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e 6e runs WHERE runn
3b90: 61 6d 65 20 4c 49 4b 45 20 3f 3b 22 20 72 75 6e ame LIKE ?;" run
3ba0: 70 61 74 74 29 0a 20 20 20 20 6e 75 6d 72 75 6e patt). numrun
3bb0: 73 29 29 0a 0a 3b 3b 20 75 73 65 20 28 67 65 74 s))..;; use (get
3bc0: 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 -value-by-header
3bd0: 20 28 64 62 3a 67 65 74 2d 68 65 61 64 65 72 20 (db:get-header
3be0: 72 75 6e 69 6e 66 6f 29 28 64 62 3a 67 65 74 2d runinfo)(db:get-
3bf0: 72 6f 77 20 72 75 6e 69 6e 66 6f 29 29 0a 28 64 row runinfo)).(d
3c00: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 72 75 efine (db:get-ru
3c10: 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 n-info db run-id
3c20: 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 ). (let* ((res
3c30: 20 20 20 20 20 23 66 29 0a 09 20 28 6b 65 79 73 #f).. (keys
3c40: 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 6b 65 (db:get-ke
3c50: 79 73 20 64 62 29 29 0a 09 20 28 72 65 6d 66 69 ys db)).. (remfi
3c60: 65 6c 64 73 20 28 6c 69 73 74 20 22 69 64 22 20 elds (list "id"
3c70: 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 "runname" "state
3c80: 22 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 " "status" "owne
3c90: 72 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 r" "event_time")
3ca0: 29 0a 09 20 28 68 65 61 64 65 72 20 20 20 20 28 ).. (header (
3cb0: 61 70 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a append (map key:
3cc0: 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 get-fieldname ke
3cd0: 79 73 29 0a 09 09 09 20 20 20 20 72 65 6d 66 69 ys).... remfi
3ce0: 65 6c 64 73 29 29 0a 09 20 28 6b 65 79 73 74 72 elds)).. (keystr
3cf0: 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 79 73 2d (conc (keys-
3d00: 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 20 22 2c >keystr keys) ",
3d10: 22 0a 09 09 09 20 20 28 73 74 72 69 6e 67 2d 69 ".... (string-i
3d20: 6e 74 65 72 73 70 65 72 73 65 20 72 65 6d 66 69 ntersperse remfi
3d30: 65 6c 64 73 20 22 2c 22 29 29 29 29 0a 20 20 20 elds ",")))).
3d40: 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ;; (debug:print
3d50: 20 30 20 22 64 62 3a 67 65 74 2d 72 75 6e 2d 69 0 "db:get-run-i
3d60: 6e 66 6f 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 nfo run-id: " ru
3d70: 6e 2d 69 64 20 22 20 68 65 61 64 65 72 3a 20 22 n-id " header: "
3d80: 20 68 65 61 64 65 72 20 22 20 6b 65 79 73 74 72 header " keystr
3d90: 3a 20 22 20 6b 65 79 73 74 72 29 0a 20 20 20 20 : " keystr).
3da0: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
3db0: 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 h-row. (lamb
3dc0: 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 20 20 da (a . x).
3dd0: 20 20 28 73 65 74 21 20 72 65 73 20 28 61 70 70 (set! res (app
3de0: 6c 79 20 76 65 63 74 6f 72 20 61 20 78 29 29 29 ly vector a x)))
3df0: 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 28 63 . db. (c
3e00: 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 6b 65 onc "SELECT " ke
3e10: 79 73 74 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 ystr " FROM runs
3e20: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 0a 20 WHERE id=?;").
3e30: 20 20 20 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 run-id).
3e40: 28 76 65 63 74 6f 72 20 68 65 61 64 65 72 20 72 (vector header r
3e50: 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 es)))..(define (
3e60: 64 62 3a 73 65 74 2d 63 6f 6d 6d 65 6e 74 2d 66 db:set-comment-f
3e70: 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 or-run db run-id
3e80: 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 73 71 6c comment). (sql
3e90: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
3ea0: 22 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 "UPDATE runs SET
3eb0: 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 comment=? WHERE
3ec0: 20 69 64 3d 3f 3b 22 20 63 6f 6d 6d 65 6e 74 20 id=?;" comment
3ed0: 72 75 6e 2d 69 64 29 29 0a 0a 3b 3b 20 64 6f 65 run-id))..;; doe
3ee0: 73 20 6e 6f 74 20 28 6f 62 76 69 6f 75 73 6c 79 s not (obviously
3ef0: 21 29 20 72 65 6d 6f 76 65 64 20 64 65 70 65 6e !) removed depen
3f00: 64 65 6e 74 20 64 61 74 61 2e 20 0a 28 64 65 66 dent data. .(def
3f10: 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 72 ine (db:delete-r
3f20: 75 6e 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 un db run-id).
3f30: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
3f40: 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d db "DELETE FROM
3f50: 20 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f runs WHERE id=?
3f60: 3b 22 20 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 ;" run-id))..(de
3f70: 66 69 6e 65 20 28 64 62 3a 75 70 64 61 74 65 2d fine (db:update-
3f80: 72 75 6e 2d 65 76 65 6e 74 5f 74 69 6d 65 20 64 run-event_time d
3f90: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 71 6c b run-id). (sql
3fa0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
3fb0: 22 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 "UPDATE runs SET
3fc0: 20 65 76 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 event_time=strf
3fd0: 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 time('%s','now')
3fe0: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 72 75 WHERE id=?;" ru
3ff0: 6e 2d 69 64 29 29 20 0a 0a 3b 3b 3d 3d 3d 3d 3d n-id)) ..;;=====
4000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4040: 3d 0a 3b 3b 20 4b 20 45 20 59 20 53 0a 3b 3b 3d =.;; K E Y S.;;=
4050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4090: 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 67 65 74 20 6b 65 =====..;; get ke
40a0: 79 20 76 61 6c 20 70 61 69 72 73 20 66 6f 72 20 y val pairs for
40b0: 61 20 67 69 76 65 6e 20 72 75 6e 2d 69 64 0a 3b a given run-id.;
40c0: 3b 20 28 20 28 46 49 45 4c 44 4e 41 4d 45 31 20 ; ( (FIELDNAME1
40d0: 6b 65 79 76 61 6c 31 29 20 28 46 49 45 4c 44 4e keyval1) (FIELDN
40e0: 41 4d 45 32 20 6b 65 79 76 61 6c 32 29 20 2e 2e AME2 keyval2) ..
40f0: 2e 20 29 0a 28 64 65 66 69 6e 65 20 28 64 62 3a . ).(define (db:
4100: 67 65 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 get-key-val-pair
4110: 73 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 s db run-id). (
4120: 6c 65 74 2a 20 28 28 6b 65 79 73 20 28 67 65 74 let* ((keys (get
4130: 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 28 72 65 -keys db)).. (re
4140: 73 20 20 27 28 29 29 29 0a 20 20 20 20 28 64 65 s '())). (de
4150: 62 75 67 3a 70 72 69 6e 74 20 36 20 22 6b 65 79 bug:print 6 "key
4160: 73 3a 20 22 20 6b 65 79 73 20 22 20 72 75 6e 2d s: " keys " run-
4170: 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 0a 20 20 id: " run-id).
4180: 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 (for-each .
4190: 20 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a (lambda (key).
41a0: 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 71 72 (let ((qr
41b0: 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 y (conc "SELECT
41c0: 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 " (key:get-field
41d0: 6e 61 6d 65 20 6b 65 79 29 20 22 20 46 52 4f 4d name key) " FROM
41e0: 20 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f runs WHERE id=?
41f0: 3b 22 29 29 29 0a 09 20 3b 3b 20 28 64 65 62 75 ;"))).. ;; (debu
4200: 67 3a 70 72 69 6e 74 20 30 20 22 71 72 79 3a 20 g:print 0 "qry:
4210: 22 20 71 72 79 29 0a 09 20 28 73 71 6c 69 74 65 " qry).. (sqlite
4220: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 3:for-each-row .
4230: 09 20 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 2d . (lambda (key-
4240: 76 61 6c 29 0a 09 20 20 20 20 28 73 65 74 21 20 val).. (set!
4250: 72 65 73 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 res (cons (list
4260: 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 (key:get-fieldna
4270: 6d 65 20 6b 65 79 29 20 6b 65 79 2d 76 61 6c 29 me key) key-val)
4280: 20 72 65 73 29 29 29 0a 09 20 20 64 62 20 71 72 res))).. db qr
4290: 79 20 72 75 6e 2d 69 64 29 29 29 0a 20 20 20 20 y run-id))).
42a0: 20 6b 65 79 73 29 0a 20 20 20 20 28 72 65 76 65 keys). (reve
42b0: 72 73 65 20 72 65 73 29 29 29 0a 0a 3b 3b 20 67 rse res)))..;; g
42c0: 65 74 20 6b 65 79 20 76 61 6c 73 20 66 6f 72 20 et key vals for
42d0: 61 20 67 69 76 65 6e 20 72 75 6e 2d 69 64 0a 28 a given run-id.(
42e0: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 6b define (db:get-k
42f0: 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 ey-vals db run-i
4300: 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 d). (let* ((key
4310: 73 20 28 67 65 74 2d 6b 65 79 73 20 64 62 29 29 s (get-keys db))
4320: 0a 09 20 28 72 65 73 20 20 27 28 29 29 29 0a 20 .. (res '())).
4330: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
4340: 36 20 22 6b 65 79 73 3a 20 22 20 6b 65 79 73 20 6 "keys: " keys
4350: 22 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d " run-id: " run-
4360: 69 64 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 id). (for-eac
4370: 68 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 h . (lambda
4380: 28 6b 65 79 29 0a 20 20 20 20 20 20 20 28 6c 65 (key). (le
4390: 74 20 28 28 71 72 79 20 28 63 6f 6e 63 20 22 53 t ((qry (conc "S
43a0: 45 4c 45 43 54 20 22 20 28 6b 65 79 3a 67 65 74 ELECT " (key:get
43b0: 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 -fieldname key)
43c0: 22 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 " FROM runs WHER
43d0: 45 20 69 64 3d 3f 3b 22 29 29 29 0a 09 20 3b 3b E id=?;"))).. ;;
43e0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 (debug:print 0
43f0: 22 71 72 79 3a 20 22 20 71 72 79 29 0a 09 20 28 "qry: " qry).. (
4400: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
4410: 2d 72 6f 77 20 0a 09 20 20 28 6c 61 6d 62 64 61 -row .. (lambda
4420: 20 28 6b 65 79 2d 76 61 6c 29 0a 09 20 20 20 20 (key-val)..
4430: 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 (set! res (cons
4440: 6b 65 79 2d 76 61 6c 20 72 65 73 29 29 29 0a 09 key-val res)))..
4450: 20 20 64 62 20 71 72 79 20 72 75 6e 2d 69 64 29 db qry run-id)
4460: 29 29 0a 20 20 20 20 20 6b 65 79 73 29 0a 20 20 )). keys).
4470: 20 20 28 72 65 76 65 72 73 65 20 72 65 73 29 29 (reverse res))
4480: 29 0a 0a 3b 3b 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 3d 3d ================
44c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 ===========.;;
44d0: 54 20 45 20 53 20 54 20 53 0a 3b 3b 3d 3d 3d 3d T E S T S.;;====
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 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4520: 3d 3d 0a 0a 3b 3b 20 73 74 61 74 65 73 20 61 6e ==..;; states an
4530: 64 20 73 74 61 74 75 73 65 73 20 61 72 65 20 6c d statuses are l
4540: 69 73 74 73 2c 20 74 75 72 6e 20 74 68 65 6d 20 ists, turn them
4550: 69 6e 74 6f 20 28 22 50 41 53 53 22 2c 22 46 41 into ("PASS","FA
4560: 49 4c 22 2e 2e 2e 29 20 61 6e 64 20 75 73 65 20 IL"...) and use
4570: 4e 4f 54 20 49 4e 0a 3b 3b 20 69 2e 65 2e 20 74 NOT IN.;; i.e. t
4580: 68 65 73 65 20 6c 69 73 74 73 20 64 65 66 69 6e hese lists defin
4590: 65 20 77 68 61 74 20 74 6f 20 4e 4f 54 20 73 68 e what to NOT sh
45a0: 6f 77 2e 0a 3b 3b 20 73 74 61 74 65 73 20 61 6e ow..;; states an
45b0: 64 20 73 74 61 74 75 73 65 73 20 61 72 65 20 72 d statuses are r
45c0: 65 71 75 69 72 65 64 20 74 6f 20 62 65 20 6c 69 equired to be li
45d0: 73 74 73 2c 20 65 6d 70 74 79 20 69 73 20 6f 6b sts, empty is ok
45e0: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
45f0: 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 -tests-for-run d
4600: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 70 61 74 b run-id testpat
4610: 74 20 69 74 65 6d 70 61 74 74 20 73 74 61 74 65 t itempatt state
4620: 73 20 73 74 61 74 75 73 65 73 29 0a 20 20 28 6c s statuses). (l
4630: 65 74 2a 20 28 28 72 65 73 20 27 28 29 29 0a 09 et* ((res '())..
4640: 20 28 73 74 61 74 65 73 2d 73 74 72 20 20 20 20 (states-str
4650: 28 63 6f 6e 63 20 22 28 27 22 20 28 73 74 72 69 (conc "('" (stri
4660: 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 73 ng-intersperse s
4670: 74 61 74 65 73 20 20 20 22 27 2c 27 22 29 20 22 tates "','") "
4680: 27 29 22 29 29 0a 09 20 28 73 74 61 74 75 73 65 ')")).. (statuse
4690: 73 2d 73 74 72 20 20 28 63 6f 6e 63 20 22 28 27 s-str (conc "('
46a0: 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 " (string-inters
46b0: 70 65 72 73 65 20 73 74 61 74 75 73 65 73 20 22 perse statuses "
46c0: 27 2c 27 22 29 20 22 27 29 22 29 29 0a 09 20 28 ','") "')")).. (
46d0: 71 72 79 20 20 20 20 20 20 28 63 6f 6e 63 20 22 qry (conc "
46e0: 53 45 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 64 SELECT id,run_id
46f0: 2c 74 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 2c ,testname,state,
4700: 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d status,event_tim
4710: 65 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 e,host,cpuload,d
4720: 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 iskfree,uname,ru
4730: 6e 64 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c 72 ndir,item_path,r
4740: 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61 un_duration,fina
4750: 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 22 l_logf,comment "
4760: 0a 09 09 09 20 22 20 46 52 4f 4d 20 74 65 73 74 .... " FROM test
4770: 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f s WHERE run_id=?
4780: 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 6c 69 AND testname li
4790: 6b 65 20 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 ke ? AND item_pa
47a0: 74 68 20 4c 49 4b 45 20 3f 20 22 20 0a 09 09 09 th LIKE ? " ....
47b0: 20 22 20 41 4e 44 20 4e 4f 54 20 28 73 74 61 74 " AND NOT (stat
47c0: 65 20 69 6e 20 22 20 73 74 61 74 65 73 2d 73 74 e in " states-st
47d0: 72 20 22 20 41 4e 44 20 73 74 61 74 75 73 20 49 r " AND status I
47e0: 4e 20 22 20 73 74 61 74 75 73 65 73 2d 73 74 72 N " statuses-str
47f0: 20 22 29 20 22 0a 09 09 09 20 3b 3b 20 22 20 4f ") ".... ;; " O
4800: 52 44 45 52 20 42 59 20 69 64 20 44 45 53 43 3b RDER BY id DESC;
4810: 22 0a 09 09 09 20 22 20 4f 52 44 45 52 20 42 59 ".... " ORDER BY
4820: 20 65 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b event_time ASC;
4830: 22 20 3b 3b 20 50 4f 54 45 4e 54 49 41 4c 20 49 " ;; POTENTIAL I
4840: 53 53 55 45 21 20 43 48 45 43 4b 20 4d 45 21 20 SSUE! CHECK ME!
4850: 44 6f 65 73 20 61 6e 79 74 69 6e 67 20 64 65 70 Does anyting dep
4860: 65 6e 64 20 6f 6e 20 74 68 69 73 20 62 65 69 6e end on this bein
4870: 67 20 73 6f 72 74 65 64 20 62 79 20 69 64 3f 0a g sorted by id?.
4880: 09 09 09 20 29 29 29 0a 20 20 20 20 28 64 65 62 ... ))). (deb
4890: 75 67 3a 70 72 69 6e 74 20 38 20 22 49 4e 46 4f ug:print 8 "INFO
48a0: 3a 20 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 : db:get-tests-f
48b0: 6f 72 2d 72 75 6e 20 71 72 79 3d 22 20 71 72 79 or-run qry=" qry
48c0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
48d0: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 or-each-row .
48e0: 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 62 (lambda (a . b
48f0: 29 20 3b 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 ) ;; id run-id t
4900: 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 estname state st
4910: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
4920: 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 host cpuload dis
4930: 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 kfree uname rund
4940: 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e ir item-path run
4950: 2d 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d -duration final-
4960: 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 logf comment).
4970: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
4980: 63 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 cons (apply vect
4990: 6f 72 20 61 20 62 29 20 72 65 73 29 29 29 20 3b or a b) res))) ;
49a0: 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 ; id run-id test
49b0: 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 name state statu
49c0: 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 s event-time hos
49d0: 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 t cpuload diskfr
49e0: 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 ee uname rundir
49f0: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 2d 64 75 item-path run-du
4a00: 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f 67 ration final-log
4a10: 66 20 63 6f 6d 6d 65 6e 74 29 20 72 65 73 29 29 f comment) res))
4a20: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
4a30: 71 72 79 0a 20 20 20 20 20 72 75 6e 2d 69 64 0a qry. run-id.
4a40: 20 20 20 20 20 28 69 66 20 74 65 73 74 70 61 74 (if testpat
4a50: 74 20 74 65 73 74 70 61 74 74 20 22 25 22 29 0a t testpatt "%").
4a60: 20 20 20 20 20 28 69 66 20 69 74 65 6d 70 61 74 (if itempat
4a70: 74 20 69 74 65 6d 70 61 74 74 20 22 25 22 29 29 t itempatt "%"))
4a80: 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 74 . res))..;; t
4a90: 68 69 73 20 6f 6e 65 20 69 73 20 61 20 62 69 74 his one is a bit
4aa0: 20 62 72 6f 6b 65 6e 20 42 55 47 20 46 49 58 4d broken BUG FIXM
4ab0: 45 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 E.(define (db:de
4ac0: 6c 65 74 65 2d 74 65 73 74 2d 73 74 65 70 2d 72 lete-test-step-r
4ad0: 65 63 6f 72 64 73 20 64 62 20 72 75 6e 2d 69 64 ecords db run-id
4ae0: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 test-name itemd
4af0: 61 74 29 0a 20 20 3b 3b 20 42 72 65 61 6b 69 6e at). ;; Breakin
4b00: 67 20 69 74 20 69 6e 74 6f 20 74 77 6f 20 71 75 g it into two qu
4b10: 65 72 69 65 73 20 66 6f 72 20 62 65 74 74 65 72 eries for better
4b20: 20 66 69 6c 65 20 61 63 63 65 73 73 20 69 6e 74 file access int
4b30: 65 72 6c 65 61 76 69 6e 67 0a 20 20 28 6c 65 74 erleaving. (let
4b40: 20 28 28 69 64 73 20 27 28 29 29 29 0a 20 20 20 ((ids '())).
4b50: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
4b60: 63 68 2d 72 6f 77 20 28 6c 61 6d 62 64 61 20 28 ch-row (lambda (
4b70: 69 64 29 0a 09 09 09 20 20 20 20 28 73 65 74 21 id).... (set!
4b80: 20 69 64 73 20 28 63 6f 6e 73 20 69 64 20 69 64 ids (cons id id
4b90: 73 29 29 29 0a 09 09 09 20 20 64 62 0a 09 09 09 s))).... db....
4ba0: 20 20 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f "SELECT id FRO
4bb0: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
4bc0: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
4bd0: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
4be0: 61 74 68 3d 3f 3b 22 0a 09 09 09 20 20 72 75 6e ath=?;".... run
4bf0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 28 69 -id test-name (i
4c00: 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 tem-list->path i
4c10: 74 65 6d 64 61 74 29 29 0a 20 20 20 20 28 66 6f temdat)). (fo
4c20: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
4c30: 69 64 29 0a 09 09 28 73 71 6c 69 74 65 33 3a 65 id)...(sqlite3:e
4c40: 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 xecute db "DELET
4c50: 45 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 E FROM test_step
4c60: 73 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d s WHERE test_id=
4c70: 3f 3b 22 20 69 64 29 0a 09 09 28 74 68 72 65 61 ?;" id)...(threa
4c80: 64 2d 73 6c 65 65 70 21 20 30 2e 31 29 20 3b 3b d-sleep! 0.1) ;;
4c90: 20 67 69 76 65 20 6f 74 68 65 72 73 20 61 63 63 give others acc
4ca0: 65 73 73 20 74 6f 20 74 68 65 20 64 62 0a 20 20 ess to the db.
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
4cc0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
4cd0: 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 b "DELETE FROM t
4ce0: 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 est_data WHERE t
4cf0: 65 73 74 5f 69 64 3d 3f 3b 22 20 69 64 29 0a 20 est_id=?;" id).
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
4d10: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 30 2e thread-sleep! 0.
4d20: 31 29 29 20 3b 3b 20 67 69 76 65 20 6f 74 68 65 1)) ;; give othe
4d30: 72 73 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 rs access to the
4d40: 20 64 62 0a 09 20 20 20 20 20 20 69 64 73 29 29 db.. ids))
4d50: 29 0a 3b 3b 22 44 45 4c 45 54 45 20 46 52 4f 4d ).;;"DELETE FROM
4d60: 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 45 52 test_steps WHER
4d70: 45 20 74 65 73 74 5f 69 64 20 69 6e 20 28 53 45 E test_id in (SE
4d80: 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 74 65 73 LECT id FROM tes
4d90: 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d ts WHERE run_id=
4da0: 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f ? AND testname=?
4db0: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f AND item_path=?
4dc0: 29 3b 22 20 0a 09 09 20 20 20 0a 3b 3b 20 0a 28 );" ... .;; .(
4dd0: 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 define (db:delet
4de0: 65 2d 74 65 73 74 2d 72 65 63 6f 72 64 73 20 64 e-test-records d
4df0: 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 73 71 b test-id). (sq
4e00: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
4e10: 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 "DELETE FROM te
4e20: 73 74 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 st_steps WHERE t
4e30: 65 73 74 5f 69 64 3d 3f 3b 22 20 74 65 73 74 2d est_id=?;" test-
4e40: 69 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 id). (sqlite3:e
4e50: 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 xecute db "DELET
4e60: 45 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 E FROM test_data
4e70: 20 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d WHERE test_id=
4e80: 3f 3b 22 20 74 65 73 74 2d 69 64 29 0a 20 20 28 ?;" test-id). (
4e90: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
4ea0: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
4eb0: 74 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f tests WHERE id=?
4ec0: 3b 22 20 74 65 73 74 2d 69 64 29 29 0a 0a 3b 3b ;" test-id))..;;
4ed0: 20 73 65 74 20 74 65 73 74 73 20 77 69 74 68 20 set tests with
4ee0: 73 74 61 74 65 20 63 75 72 72 73 74 61 74 65 20 state currstate
4ef0: 61 6e 64 20 73 74 61 74 75 73 20 63 75 72 72 73 and status currs
4f00: 74 61 74 75 73 20 74 6f 20 6e 65 77 73 74 61 74 tatus to newstat
4f10: 65 20 61 6e 64 20 6e 65 77 73 74 61 74 75 73 0a e and newstatus.
4f20: 3b 3b 20 75 73 65 20 63 75 72 72 73 74 61 74 65 ;; use currstate
4f30: 20 3d 20 23 66 20 61 6e 64 20 6f 72 20 63 75 72 = #f and or cur
4f40: 72 73 74 61 74 75 73 20 3d 20 23 66 20 74 6f 20 rstatus = #f to
4f50: 61 70 70 6c 79 20 74 6f 20 61 6e 79 20 73 74 61 apply to any sta
4f60: 74 65 20 6f 72 20 73 74 61 74 75 73 20 72 65 73 te or status res
4f70: 70 65 63 74 69 76 65 6c 79 0a 3b 3b 20 57 41 52 pectively.;; WAR
4f80: 4e 49 4e 47 3a 20 53 51 4c 20 69 6e 6a 65 63 74 NING: SQL inject
4f90: 69 6f 6e 20 72 69 73 6b 0a 28 64 65 66 69 6e 65 ion risk.(define
4fa0: 20 28 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 (db:set-tests-s
4fb0: 74 61 74 65 2d 73 74 61 74 75 73 20 64 62 20 72 tate-status db r
4fc0: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 un-id testnames
4fd0: 63 75 72 72 73 74 61 74 65 20 63 75 72 72 73 74 currstate currst
4fe0: 61 74 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 atus newstate ne
4ff0: 77 73 74 61 74 75 73 29 0a 20 20 28 66 6f 72 2d wstatus). (for-
5000: 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 74 65 each (lambda (te
5010: 73 74 6e 61 6d 65 29 0a 09 20 20 20 20 20 20 28 stname).. (
5020: 6c 65 74 20 28 28 71 72 79 20 28 63 6f 6e 63 20 let ((qry (conc
5030: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
5040: 54 20 73 74 61 74 65 3d 3f 2c 73 74 61 74 75 73 T state=?,status
5050: 3d 3f 20 57 48 45 52 45 20 22 0a 09 09 09 20 20 =? WHERE "....
5060: 20 20 20 20 20 28 69 66 20 63 75 72 72 73 74 61 (if currsta
5070: 74 65 20 20 28 63 6f 6e 63 20 22 73 74 61 74 65 te (conc "state
5080: 3d 27 22 20 63 75 72 72 73 74 61 74 65 20 22 27 ='" currstate "'
5090: 20 41 4e 44 20 22 29 20 22 22 29 0a 09 09 09 20 AND ") "")....
50a0: 20 20 20 20 20 20 28 69 66 20 63 75 72 72 73 74 (if currst
50b0: 61 74 75 73 20 28 63 6f 6e 63 20 22 73 74 61 74 atus (conc "stat
50c0: 75 73 3d 27 22 20 63 75 72 72 73 74 61 74 75 73 us='" currstatus
50d0: 20 22 27 20 41 4e 44 20 22 29 20 22 22 29 0a 09 "' AND ") "")..
50e0: 09 09 20 20 20 20 20 20 20 22 20 72 75 6e 5f 69 .. " run_i
50f0: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
5100: 3d 3f 20 41 4e 44 20 4e 4f 54 20 28 69 74 65 6d =? AND NOT (item
5110: 5f 70 61 74 68 3d 27 27 20 41 4e 44 20 74 65 73 _path='' AND tes
5120: 74 6e 61 6d 65 20 69 6e 20 28 53 45 4c 45 43 54 tname in (SELECT
5130: 20 44 49 53 54 49 4e 43 54 20 74 65 73 74 6e 61 DISTINCT testna
5140: 6d 65 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 me FROM tests WH
5150: 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 ERE testname=? A
5160: 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 ND item_path !=
5170: 27 27 29 29 3b 22 29 29 29 0a 09 09 3b 3b 28 64 ''));")))...;;(d
5180: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 51 52 ebug:print 0 "QR
5190: 59 3a 20 22 20 71 72 79 29 0a 09 09 28 73 71 6c Y: " qry)...(sql
51a0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
51b0: 71 72 79 20 72 75 6e 2d 69 64 20 6e 65 77 73 74 qry run-id newst
51c0: 61 74 65 20 6e 65 77 73 74 61 74 75 73 20 74 65 ate newstatus te
51d0: 73 74 6e 61 6d 65 20 74 65 73 74 6e 61 6d 65 29 stname testname)
51e0: 29 29 0a 09 20 20 20 20 74 65 73 74 6e 61 6d 65 )).. testname
51f0: 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 s))..(define (db
5200: 3a 64 65 6c 65 74 65 2d 74 65 73 74 73 2d 69 6e :delete-tests-in
5210: 2d 73 74 61 74 65 20 64 62 20 72 75 6e 2d 69 64 -state db run-id
5220: 20 73 74 61 74 65 29 0a 20 20 28 73 71 6c 69 74 state). (sqlit
5230: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
5240: 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 73 ELETE FROM tests
5250: 20 57 48 45 52 45 20 73 74 61 74 65 3d 3f 20 41 WHERE state=? A
5260: 4e 44 20 72 75 6e 5f 69 64 3d 3f 3b 22 20 73 74 ND run_id=?;" st
5270: 61 74 65 20 72 75 6e 2d 69 64 29 29 0a 0a 28 64 ate run-id))..(d
5280: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 efine (db:test-s
5290: 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d et-state-status-
52a0: 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 by-id db test-id
52b0: 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 newstate newsta
52c0: 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a tus newcomment).
52d0: 20 20 28 69 66 20 6e 65 77 73 74 61 74 65 20 20 (if newstate
52e0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
52f0: 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73 e db "UPDATE tes
5300: 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f 20 20 ts SET state=?
5310: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 WHERE id=?;" ne
5320: 77 73 74 61 74 65 20 20 20 74 65 73 74 2d 69 64 wstate test-id
5330: 29 29 0a 20 20 28 69 66 20 6e 65 77 73 74 61 74 )). (if newstat
5340: 75 73 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 us (sqlite3:exe
5350: 63 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 cute db "UPDATE
5360: 74 65 73 74 73 20 53 45 54 20 73 74 61 74 75 73 tests SET status
5370: 3d 3f 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 =? WHERE id=?;"
5380: 20 6e 65 77 73 74 61 74 75 73 20 20 74 65 73 74 newstatus test
5390: 2d 69 64 29 29 0a 20 20 28 69 66 20 6e 65 77 63 -id)). (if newc
53a0: 6f 6d 6d 65 6e 74 20 28 73 71 6c 69 74 65 33 3a omment (sqlite3:
53b0: 65 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 execute db "UPDA
53c0: 54 45 20 74 65 73 74 73 20 53 45 54 20 63 6f 6d TE tests SET com
53d0: 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 3d ment=? WHERE id=
53e0: 3f 3b 22 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 74 ?;" newcomment t
53f0: 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 est-id)))..(defi
5400: 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d ne (db:test-set-
5410: 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d state-status-by-
5420: 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 run-id-testname
5430: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
5440: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 ame item-path st
5450: 61 74 75 73 20 73 74 61 74 65 29 0a 20 20 28 73 atus state). (s
5460: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
5470: 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 b "UPDATE tests
5480: 53 45 54 20 73 74 61 74 65 3d 3f 2c 73 74 61 74 SET state=?,stat
5490: 75 73 3d 3f 2c 65 76 65 6e 74 5f 74 69 6d 65 3d us=?,event_time=
54a0: 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e strftime('%s','n
54b0: 6f 77 27 29 20 57 48 45 52 45 20 72 75 6e 5f 69 ow') WHERE run_i
54c0: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
54d0: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
54e0: 3d 3f 3b 22 20 0a 09 09 20 20 20 73 74 61 74 65 =?;" ... state
54f0: 20 73 74 61 74 75 73 20 72 75 6e 2d 69 64 20 74 status run-id t
5500: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
5510: 74 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 th))..(define (d
5520: 62 3a 67 65 74 2d 63 6f 75 6e 74 2d 74 65 73 74 b:get-count-test
5530: 73 2d 72 75 6e 6e 69 6e 67 20 64 62 29 0a 20 20 s-running db).
5540: 28 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a 20 (let ((res 0)).
5550: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
5560: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
5570: 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 ambda (count).
5580: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 63 (set! res c
5590: 6f 75 6e 74 29 29 0a 20 20 20 20 20 64 62 0a 20 ount)). db.
55a0: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e "SELECT coun
55b0: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 t(id) FROM tests
55c0: 20 57 48 45 52 45 20 73 74 61 74 65 20 3d 20 27 WHERE state = '
55d0: 52 55 4e 4e 49 4e 47 27 20 4f 52 20 73 74 61 74 RUNNING' OR stat
55e0: 65 20 3d 20 27 4c 41 55 4e 43 48 45 44 27 20 4f e = 'LAUNCHED' O
55f0: 52 20 73 74 61 74 65 20 3d 20 27 52 45 4d 4f 54 R state = 'REMOT
5600: 45 48 4f 53 54 53 54 41 52 54 27 3b 22 29 0a 20 EHOSTSTART';").
5610: 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 69 6e res))..(defin
5620: 65 20 28 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d e (db:get-count-
5630: 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 2d 69 6e tests-running-in
5640: 2d 6a 6f 62 67 72 6f 75 70 20 64 62 20 6a 6f 62 -jobgroup db job
5650: 67 72 6f 75 70 29 0a 20 20 28 69 66 20 28 6e 6f group). (if (no
5660: 74 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 20 20 t jobgroup).
5670: 20 20 30 20 3b 3b 20 0a 20 20 20 20 20 20 28 6c 0 ;; . (l
5680: 65 74 20 28 28 72 65 73 20 30 29 29 0a 09 28 73 et ((res 0))..(s
5690: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
56a0: 72 6f 77 0a 09 20 28 6c 61 6d 62 64 61 20 28 63 row.. (lambda (c
56b0: 6f 75 6e 74 29 0a 09 20 20 20 28 73 65 74 21 20 ount).. (set!
56c0: 72 65 73 20 63 6f 75 6e 74 29 29 0a 09 20 64 62 res count)).. db
56d0: 0a 09 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 .. "SELECT count
56e0: 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 20 (id) FROM tests
56f0: 57 48 45 52 45 20 73 74 61 74 65 20 3d 20 27 52 WHERE state = 'R
5700: 55 4e 4e 49 4e 47 27 20 4f 52 20 73 74 61 74 65 UNNING' OR state
5710: 20 3d 20 27 4c 41 55 4e 43 48 45 44 27 20 4f 52 = 'LAUNCHED' OR
5720: 20 73 74 61 74 65 20 3d 20 27 52 45 4d 4f 54 45 state = 'REMOTE
5730: 48 4f 53 54 53 54 41 52 54 27 0a 20 20 20 20 20 HOSTSTART'.
5740: 20 20 20 20 20 20 20 20 41 4e 44 20 74 65 73 74 AND test
5750: 6e 61 6d 65 20 69 6e 20 28 53 45 4c 45 43 54 20 name in (SELECT
5760: 74 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 74 65 testname FROM te
5770: 73 74 5f 6d 65 74 61 20 57 48 45 52 45 20 6a 6f st_meta WHERE jo
5780: 62 67 72 6f 75 70 3d 3f 3b 22 0a 09 20 6a 6f 62 bgroup=?;".. job
5790: 67 72 6f 75 70 29 0a 09 72 65 73 29 29 29 0a 0a group)..res)))..
57a0: 3b 3b 20 64 6f 6e 65 20 77 69 74 68 20 72 75 6e ;; done with run
57b0: 20 77 68 65 6e 3a 0a 3b 3b 20 20 20 30 20 74 65 when:.;; 0 te
57c0: 73 74 73 20 69 6e 20 4c 41 55 4e 43 48 45 44 2c sts in LAUNCHED,
57d0: 20 4e 4f 54 5f 53 54 41 52 54 45 44 2c 20 52 45 NOT_STARTED, RE
57e0: 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 2c 20 52 MOTEHOSTSTART, R
57f0: 55 4e 4e 49 4e 47 0a 28 64 65 66 69 6e 65 20 28 UNNING.(define (
5800: 64 62 3a 65 73 74 69 6d 61 74 65 64 2d 74 65 73 db:estimated-tes
5810: 74 73 2d 72 65 6d 61 69 6e 69 6e 67 20 64 62 20 ts-remaining db
5820: 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 run-id). (let (
5830: 28 72 65 73 20 30 29 29 0a 20 20 20 20 28 73 71 (res 0)). (sq
5840: 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 lite3:for-each-r
5850: 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 ow. (lambda
5860: 28 63 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 28 (count). (
5870: 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 set! res count))
5880: 0a 20 20 20 20 20 64 62 20 3b 3b 20 4e 42 2f 2f . db ;; NB//
5890: 20 4b 49 4c 4c 52 45 51 20 6d 65 61 6e 73 20 74 KILLREQ means t
58a0: 68 65 20 6a 6f 62 73 20 69 73 20 73 74 69 6c 6c he jobs is still
58b0: 20 70 72 6f 62 61 62 6c 79 20 72 75 6e 6e 69 6e probably runnin
58c0: 67 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 g. "SELECT c
58d0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
58e0: 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 20 sts WHERE state
58f0: 69 6e 20 28 27 4c 41 55 4e 43 48 45 44 27 2c 27 in ('LAUNCHED','
5900: 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 27 52 45 NOT_STARTED','RE
5910: 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 2c 27 MOTEHOSTSTART','
5920: 52 55 4e 4e 49 4e 47 27 2c 27 4b 49 4c 4c 52 45 RUNNING','KILLRE
5930: 51 27 29 20 41 4e 44 20 72 75 6e 5f 69 64 3d 3f Q') AND run_id=?
5940: 3b 22 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 72 ;" run-id). r
5950: 65 73 29 29 0a 0a 3b 3b 20 4e 42 2f 2f 20 53 79 es))..;; NB// Sy
5960: 6e 63 20 74 68 69 73 20 77 69 74 68 20 72 75 6e nc this with run
5970: 73 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 0a s:get-test-info.
5980: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
5990: 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e test-info db run
59a0: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 -id testname ite
59b0: 6d 2d 70 61 74 68 29 0a 20 20 28 6c 65 74 20 28 m-path). (let (
59c0: 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 (res #f)). (s
59d0: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
59e0: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
59f0: 20 28 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 (id run-id test
5a00: 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 name state statu
5a10: 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 s event-time hos
5a20: 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 t cpuload diskfr
5a30: 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 ee uname rundir
5a40: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 item-path run_du
5a50: 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 ration final_log
5a60: 66 20 63 6f 6d 6d 65 6e 74 20 29 0a 20 20 20 20 f comment ).
5a70: 20 20 20 28 73 65 74 21 20 72 65 73 20 28 76 65 (set! res (ve
5a80: 63 74 6f 72 20 69 64 20 72 75 6e 2d 69 64 20 74 ctor id run-id t
5a90: 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 estname state st
5aa0: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
5ab0: 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 host cpuload dis
5ac0: 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 kfree uname rund
5ad0: 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e ir item-path run
5ae0: 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f _duration final_
5af0: 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 29 29 logf comment )))
5b00: 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 22 . db . "
5b10: 53 45 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 64 SELECT id,run_id
5b20: 2c 74 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 2c ,testname,state,
5b30: 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d status,event_tim
5b40: 65 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 e,host,cpuload,d
5b50: 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 iskfree,uname,ru
5b60: 6e 64 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c 72 ndir,item_path,r
5b70: 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61 un_duration,fina
5b80: 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 46 l_logf,comment F
5b90: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
5ba0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
5bb0: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d tname=? AND item
5bc0: 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 20 20 20 72 _path=?;". r
5bd0: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 un-id testname i
5be0: 74 65 6d 2d 70 61 74 68 29 0a 20 20 20 20 72 65 tem-path). re
5bf0: 73 29 29 0a 0a 3b 3b 20 47 65 74 20 74 65 73 74 s))..;; Get test
5c00: 20 64 61 74 61 20 75 73 69 6e 67 20 74 65 73 74 data using test
5c10: 5f 69 64 0a 28 64 65 66 69 6e 65 20 28 64 62 3a _id.(define (db:
5c20: 67 65 74 2d 74 65 73 74 2d 64 61 74 61 2d 62 79 get-test-data-by
5c30: 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 29 0a -id db test-id).
5c40: 20 20 28 6c 65 74 20 28 28 72 65 73 20 23 66 29 (let ((res #f)
5c50: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
5c60: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 or-each-row.
5c70: 20 28 6c 61 6d 62 64 61 20 28 69 64 20 72 75 6e (lambda (id run
5c80: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
5c90: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
5ca0: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
5cb0: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
5cc0: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
5cd0: 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 h run_duration f
5ce0: 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal_logf commen
5cf0: 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 t). (set!
5d00: 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 20 72 res (vector id r
5d10: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 un-id testname s
5d20: 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 6e tate status even
5d30: 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c t-time host cpul
5d40: 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 oad diskfree una
5d50: 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 me rundir item-p
5d60: 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e ath run_duration
5d70: 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d final_logf comm
5d80: 65 6e 74 29 29 29 0a 20 20 20 20 20 64 62 20 0a ent))). db .
5d90: 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c "SELECT id,
5da0: 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c run_id,testname,
5db0: 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 state,status,eve
5dc0: 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 nt_time,host,cpu
5dd0: 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e load,diskfree,un
5de0: 61 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f ame,rundir,item_
5df0: 70 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f path,run_duratio
5e00: 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d n,final_logf,com
5e10: 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 ment FROM tests
5e20: 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 WHERE id=?;".
5e30: 20 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 72 test-id). r
5e40: 65 73 29 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 es))...(define (
5e50: 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d db:test-set-comm
5e60: 65 6e 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 ent db test-id c
5e70: 6f 6d 6d 65 6e 74 29 0a 20 20 28 73 71 6c 69 74 omment). (sqlit
5e80: 65 33 3a 65 78 65 63 75 74 65 20 0a 20 20 20 64 e3:execute . d
5e90: 62 20 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 b . "UPDATE te
5ea0: 73 74 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d sts SET comment=
5eb0: 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 ? WHERE id=?;".
5ec0: 20 20 63 6f 6d 6d 65 6e 74 20 74 65 73 74 2d 69 comment test-i
5ed0: 64 29 29 0a 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 d))..;;.(define
5ee0: 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 72 75 6e (db:test-set-run
5ef0: 64 69 72 21 20 64 62 20 72 75 6e 2d 69 64 20 74 dir! db run-id t
5f00: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
5f10: 74 68 20 72 75 6e 64 69 72 29 0a 20 20 28 73 71 th rundir). (sq
5f20: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a 20 lite3:execute .
5f30: 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 54 45 db . "UPDATE
5f40: 20 74 65 73 74 73 20 53 45 54 20 72 75 6e 64 69 tests SET rundi
5f50: 72 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 64 r=? WHERE run_id
5f60: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d =? AND testname=
5f70: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d ? AND item_path=
5f80: 3f 3b 22 0a 20 20 20 72 75 6e 64 69 72 20 72 75 ?;". rundir ru
5f90: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
5fa0: 74 65 6d 2d 70 61 74 68 29 29 0a 0a 28 64 65 66 tem-path))..(def
5fb0: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 ine (db:test-set
5fc0: 2d 6c 6f 67 21 20 64 62 20 74 65 73 74 2d 69 64 -log! db test-id
5fd0: 20 6c 6f 67 66 29 0a 20 20 28 69 66 20 28 73 74 logf). (if (st
5fe0: 72 69 6e 67 3f 20 6c 6f 67 66 29 0a 20 20 20 20 ring? logf).
5ff0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
6000: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 te db "UPDATE te
6010: 73 74 73 20 53 45 54 20 66 69 6e 61 6c 5f 6c 6f sts SET final_lo
6020: 67 66 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b gf=? WHERE id=?;
6030: 22 0a 09 09 20 20 20 6c 6f 67 66 20 74 65 73 74 "... logf test
6040: 2d 69 64 29 0a 20 20 20 20 20 20 28 64 65 62 75 -id). (debu
6050: 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52 4f 52 g:print 0 "ERROR
6060: 3a 20 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f : db:test-set-lo
6070: 67 21 20 63 61 6c 6c 65 64 20 77 69 74 68 20 6e g! called with n
6080: 6f 6e 2d 73 74 72 69 6e 67 20 6c 6f 67 20 66 69 on-string log fi
6090: 6c 65 20 6e 61 6d 65 20 22 20 6c 6f 67 66 29 29 le name " logf))
60a0: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
60b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
60c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
60d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
60e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4d ===========.;; M
60f0: 69 73 63 2e 20 74 65 73 74 20 72 65 6c 61 74 65 isc. test relate
6100: 64 20 71 75 65 72 69 65 73 0a 3b 3b 3d 3d 3d 3d d queries.;;====
6110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6150: 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ==..(define (db:
6160: 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 2d 6d test-get-paths-m
6170: 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 6e 61 atching db keyna
6180: 6d 65 73 20 74 61 72 67 65 74 29 0a 20 20 28 6c mes target). (l
6190: 65 74 2a 20 28 28 72 65 73 20 27 28 29 29 0a 09 et* ((res '())..
61a0: 20 28 69 74 65 6d 70 61 74 74 20 20 20 28 69 66 (itempatt (if
61b0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
61c0: 2d 69 74 65 6d 70 61 74 74 22 29 28 61 72 67 73 -itempatt")(args
61d0: 3a 67 65 74 2d 61 72 67 20 22 2d 69 74 65 6d 70 :get-arg "-itemp
61e0: 61 74 74 22 29 20 22 25 22 29 29 0a 09 20 28 74 att") "%")).. (t
61f0: 65 73 74 70 61 74 74 20 20 20 28 69 66 20 28 61 estpatt (if (a
6200: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 rgs:get-arg "-te
6210: 73 74 70 61 74 74 22 29 28 61 72 67 73 3a 67 65 stpatt")(args:ge
6220: 74 2d 61 72 67 20 22 2d 74 65 73 74 70 61 74 74 t-arg "-testpatt
6230: 22 29 20 22 25 22 29 29 0a 09 20 28 73 74 61 74 ") "%")).. (stat
6240: 65 70 61 74 74 20 20 28 69 66 20 28 61 72 67 73 epatt (if (args
6250: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 :get-arg ":state
6260: 22 29 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61 ") (args:get-a
6270: 72 67 20 22 3a 73 74 61 74 65 22 29 20 20 20 20 rg ":state")
6280: 22 25 22 29 29 0a 09 20 28 73 74 61 74 75 73 70 "%")).. (statusp
6290: 61 74 74 20 28 69 66 20 28 61 72 67 73 3a 67 65 att (if (args:ge
62a0: 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 t-arg ":status")
62b0: 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 (args:get-arg
62c0: 22 3a 73 74 61 74 75 73 22 29 20 20 20 22 25 22 ":status") "%"
62d0: 29 29 0a 09 20 28 72 75 6e 6e 61 6d 65 20 20 20 )).. (runname
62e0: 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 (if (args:get-a
62f0: 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 28 rg ":runname") (
6300: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 args:get-arg ":r
6310: 75 6e 6e 61 6d 65 22 29 20 20 22 25 22 29 29 0a unname") "%")).
6320: 09 20 28 6b 65 79 73 74 72 20 28 73 74 72 69 6e . (keystr (strin
6330: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 0a 09 g-intersperse ..
6340: 09 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 . (map (lambda
6350: 28 6b 65 79 20 76 61 6c 29 0a 09 09 09 20 28 63 (key val).... (c
6360: 6f 6e 63 20 22 72 2e 22 20 6b 65 79 20 22 20 6c onc "r." key " l
6370: 69 6b 65 20 27 22 20 76 61 6c 20 22 27 22 29 29 ike '" val "'"))
6380: 0a 09 09 20 20 20 20 20 20 20 6b 65 79 6e 61 6d ... keynam
6390: 65 73 20 0a 09 09 20 20 20 20 20 20 20 28 73 74 es ... (st
63a0: 72 69 6e 67 2d 73 70 6c 69 74 20 74 61 72 67 65 ring-split targe
63b0: 74 20 22 2f 22 29 29 0a 09 09 20 20 22 20 41 4e t "/"))... " AN
63c0: 44 20 22 29 29 0a 09 20 28 71 72 79 73 74 72 20 D ")).. (qrystr
63d0: 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 74 2e (conc "SELECT t.
63e0: 72 75 6e 64 69 72 20 46 52 4f 4d 20 74 65 73 74 rundir FROM test
63f0: 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 s AS t INNER JOI
6400: 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 N runs AS r ON t
6410: 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 45 .run_id=r.id WHE
6420: 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 6b 65 RE "... ke
6430: 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 75 6e ystr " AND r.run
6440: 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 6e name LIKE '" run
6450: 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 74 65 6d name "' AND item
6460: 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 20 69 74 _path LIKE '" it
6470: 65 6d 70 61 74 74 20 22 27 20 41 4e 44 20 74 65 empatt "' AND te
6480: 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 22 0a 09 stname LIKE '"..
6490: 09 20 20 20 20 20 20 20 74 65 73 74 70 61 74 74 . testpatt
64a0: 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 65 20 "' AND t.state
64b0: 4c 49 4b 45 20 27 22 20 73 74 61 74 65 70 61 74 LIKE '" statepat
64c0: 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 75 t "' AND t.statu
64d0: 73 20 4c 49 4b 45 20 27 22 20 73 74 61 74 75 73 s LIKE '" status
64e0: 70 61 74 74 20 0a 09 09 20 20 20 20 20 20 20 22 patt ... "
64f0: 27 4f 52 44 45 52 20 42 59 20 74 2e 65 76 65 6e 'ORDER BY t.even
6500: 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 29 0a t_time ASC;"))).
6510: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
6520: 20 33 20 22 71 72 79 73 74 72 3a 20 22 20 71 72 3 "qrystr: " qr
6530: 79 73 74 72 29 0a 20 20 20 20 28 73 71 6c 69 74 ystr). (sqlit
6540: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
6550: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 . (lambda (p
6560: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
6570: 65 73 20 28 63 6f 6e 73 20 70 20 72 65 73 29 29 es (cons p res))
6580: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
6590: 71 72 79 73 74 72 29 0a 20 20 20 20 72 65 73 29 qrystr). res)
65a0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
65b0: 65 73 74 2d 67 65 74 2d 74 65 73 74 2d 72 65 63 est-get-test-rec
65c0: 6f 72 64 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 ords-matching db
65d0: 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 keynames target
65e0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 ). (let* ((res
65f0: 27 28 29 29 0a 09 20 28 69 74 65 6d 70 61 74 74 '()).. (itempatt
6600: 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 (if (args:get
6610: 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 -arg "-itempatt"
6620: 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 )(args:get-arg "
6630: 2d 69 74 65 6d 70 61 74 74 22 29 20 22 25 22 29 -itempatt") "%")
6640: 29 0a 09 20 28 74 65 73 74 70 61 74 74 20 20 20 ).. (testpatt
6650: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
6660: 67 20 22 2d 74 65 73 74 70 61 74 74 22 29 28 61 g "-testpatt")(a
6670: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 rgs:get-arg "-te
6680: 73 74 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 stpatt") "%"))..
6690: 20 28 73 74 61 74 65 70 61 74 74 20 20 28 69 66 (statepatt (if
66a0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
66b0: 3a 73 74 61 74 65 22 29 20 20 20 28 61 72 67 73 :state") (args
66c0: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 :get-arg ":state
66d0: 22 29 20 20 20 20 22 25 22 29 29 0a 09 20 28 73 ") "%")).. (s
66e0: 74 61 74 75 73 70 61 74 74 20 28 69 66 20 28 61 tatuspatt (if (a
66f0: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
6700: 61 74 75 73 22 29 20 20 28 61 72 67 73 3a 67 65 atus") (args:ge
6710: 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 t-arg ":status")
6720: 20 20 20 22 25 22 29 29 0a 09 20 28 72 75 6e 6e "%")).. (runn
6730: 61 6d 65 20 20 20 20 28 69 66 20 28 61 72 67 73 ame (if (args
6740: 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 :get-arg ":runna
6750: 6d 65 22 29 20 28 61 72 67 73 3a 67 65 74 2d 61 me") (args:get-a
6760: 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 rg ":runname")
6770: 22 25 22 29 29 0a 09 20 28 6b 65 79 73 74 72 20 "%")).. (keystr
6780: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
6790: 72 73 65 20 0a 09 09 20 20 28 6d 61 70 20 28 6c rse ... (map (l
67a0: 61 6d 62 64 61 20 28 6b 65 79 20 76 61 6c 29 0a ambda (key val).
67b0: 09 09 09 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b ... (conc "r." k
67c0: 65 79 20 22 20 6c 69 6b 65 20 27 22 20 76 61 6c ey " like '" val
67d0: 20 22 27 22 29 29 0a 09 09 20 20 20 20 20 20 20 "'"))...
67e0: 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 keynames ...
67f0: 20 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 (string-split
6800: 20 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 09 target "/"))...
6810: 20 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28 71 " AND ")).. (q
6820: 72 79 73 74 72 20 28 63 6f 6e 63 20 22 53 45 4c rystr (conc "SEL
6830: 45 43 54 20 0a 20 20 20 20 20 20 20 20 20 20 20 ECT .
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6850: 20 74 2e 69 64 0a 20 20 20 20 20 20 20 20 20 20 t.id.
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6870: 20 20 74 2e 72 75 6e 5f 69 64 20 20 20 20 20 0a t.run_id .
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6890: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 74 65 t.te
68a0: 73 74 6e 61 6d 65 20 20 20 0a 20 20 20 20 20 20 stname .
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68c0: 20 20 20 20 20 20 74 2e 68 6f 73 74 20 20 20 20 t.host
68d0: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68f0: 74 2e 63 70 75 6c 6f 61 64 20 20 20 20 0a 20 20 t.cpuload .
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6910: 20 20 20 20 20 20 20 20 20 20 74 2e 64 69 73 6b t.disk
6920: 66 72 65 65 20 20 20 0a 20 20 20 20 20 20 20 20 free .
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6940: 20 20 20 20 74 2e 75 6e 61 6d 65 20 20 20 20 20 t.uname
6950: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
6970: 72 75 6e 64 69 72 20 20 20 20 20 0a 20 20 20 20 rundir .
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6990: 20 20 20 20 20 20 20 20 74 2e 73 68 6f 72 74 64 t.shortd
69a0: 69 72 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 ir .
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69c0: 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 20 20 0a t.item_path .
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 73 74 t.st
69f0: 61 74 65 20 20 20 20 20 20 0a 20 20 20 20 20 20 ate .
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a10: 20 20 20 20 20 20 74 2e 73 74 61 74 75 73 20 20 t.status
6a20: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a40: 74 2e 61 74 74 65 6d 70 74 6e 75 6d 20 0a 20 20 t.attemptnum .
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a60: 20 20 20 20 20 20 20 20 20 20 74 2e 66 69 6e 61 t.fina
6a70: 6c 5f 6c 6f 67 66 20 0a 20 20 20 20 20 20 20 20 l_logf .
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a90: 20 20 20 20 74 2e 6c 6f 67 64 61 74 20 20 20 20 t.logdat
6aa0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
6ac0: 72 75 6e 5f 64 75 72 61 74 69 6f 0a 20 20 20 20 run_duratio.
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ae0: 20 20 20 20 20 20 20 20 74 2e 63 6f 6d 6d 65 6e t.commen
6af0: 74 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 t .
6b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b10: 20 20 74 2e 65 76 65 6e 74 5f 74 69 6d 65 20 0a t.event_time .
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 66 61 t.fa
6b40: 69 6c 5f 63 6f 75 6e 74 20 0a 20 20 20 20 20 20 il_count .
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b60: 20 20 20 20 20 20 74 2e 70 61 73 73 5f 63 6f 75 t.pass_cou
6b70: 6e 74 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 nt .
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b90: 74 2e 61 72 63 68 69 76 65 64 20 20 20 0a 0a 0a t.archived ...
6ba0: 0a 20 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 . FROM tests AS
6bb0: 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e t INNER JOIN run
6bc0: 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f s AS r ON t.run_
6bd0: 69 64 3d 72 2e 69 64 20 57 48 45 52 45 20 22 0a id=r.id WHERE ".
6be0: 09 09 20 20 20 20 20 20 20 6b 65 79 73 74 72 20 .. keystr
6bf0: 22 20 41 4e 44 20 72 2e 72 75 6e 6e 61 6d 65 20 " AND r.runname
6c00: 4c 49 4b 45 20 27 22 20 72 75 6e 6e 61 6d 65 20 LIKE '" runname
6c10: 22 27 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 "' AND item_path
6c20: 20 4c 49 4b 45 20 27 22 20 69 74 65 6d 70 61 74 LIKE '" itempat
6c30: 74 20 22 27 20 41 4e 44 20 74 65 73 74 6e 61 6d t "' AND testnam
6c40: 65 20 4c 49 4b 45 20 27 22 0a 09 09 20 20 20 20 e LIKE '"...
6c50: 20 20 20 74 65 73 74 70 61 74 74 20 22 27 20 41 testpatt "' A
6c60: 4e 44 20 74 2e 73 74 61 74 65 20 4c 49 4b 45 20 ND t.state LIKE
6c70: 27 22 20 73 74 61 74 65 70 61 74 74 20 22 27 20 '" statepatt "'
6c80: 41 4e 44 20 74 2e 73 74 61 74 75 73 20 4c 49 4b AND t.status LIK
6c90: 45 20 27 22 20 73 74 61 74 75 73 70 61 74 74 20 E '" statuspatt
6ca0: 0a 09 09 20 20 20 20 20 20 20 22 27 4f 52 44 45 ... "'ORDE
6cb0: 52 20 42 59 20 74 2e 65 76 65 6e 74 5f 74 69 6d R BY t.event_tim
6cc0: 65 20 41 53 43 3b 22 29 29 29 0a 20 20 20 20 28 e ASC;"))). (
6cd0: 64 65 62 75 67 3a 70 72 69 6e 74 20 33 20 22 71 debug:print 3 "q
6ce0: 72 79 73 74 72 3a 20 22 20 71 72 79 73 74 72 29 rystr: " qrystr)
6cf0: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f . (sqlite3:fo
6d00: 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 r-each-row .
6d10: 20 28 6c 61 6d 62 64 61 20 28 70 29 0a 20 20 20 (lambda (p).
6d20: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 (set! res (c
6d30: 6f 6e 73 20 70 20 72 65 73 29 29 29 0a 20 20 20 ons p res))).
6d40: 20 20 64 62 20 0a 20 20 20 20 20 71 72 79 73 74 db . qryst
6d50: 72 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b r). res))..;;
6d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6da0: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 51 55 45 55 45 20 ======.;; QUEUE
6db0: 55 50 20 4d 45 54 41 2c 20 54 45 53 54 20 53 54 UP META, TEST ST
6dc0: 41 54 55 53 20 41 4e 44 20 53 54 45 50 53 0a 3b ATUS AND STEPS.;
6dd0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
6de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6e10: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
6e20: 20 28 64 62 3a 75 70 64 61 74 65 72 20 64 62 29 (db:updater db)
6e30: 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 73 . (let loop ((s
6e40: 74 61 72 74 2d 74 69 6d 65 20 28 63 75 72 72 65 tart-time (curre
6e50: 6e 74 2d 74 69 6d 65 29 29 29 0a 20 20 20 20 28 nt-time))). (
6e60: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 30 2e thread-sleep! 0.
6e70: 35 29 20 3b 3b 20 6d 6f 76 65 20 73 61 76 65 20 5) ;; move save
6e80: 74 69 6d 65 20 61 72 6f 75 6e 64 20 74 6f 20 6d time around to m
6e90: 69 6e 69 6d 69 7a 65 20 72 65 67 75 6c 61 72 20 inimize regular
6ea0: 63 6f 6c 6c 69 73 69 6f 6e 73 3f 0a 20 20 20 20 collisions?.
6eb0: 28 64 62 3a 77 72 69 74 65 2d 63 61 63 68 65 64 (db:write-cached
6ec0: 2d 64 61 74 61 20 64 62 29 0a 20 20 20 20 28 6c -data db). (l
6ed0: 6f 6f 70 20 73 74 61 72 74 2d 74 69 6d 65 29 29 oop start-time))
6ee0: 29 0a 20 20 20 20 0a 28 64 65 66 69 6e 65 20 28 ). .(define (
6ef0: 64 62 3a 74 65 73 74 2d 75 70 64 61 74 65 2d 6d db:test-update-m
6f00: 65 74 61 2d 69 6e 66 6f 20 64 62 20 74 65 73 74 eta-info db test
6f10: 2d 69 64 20 6d 69 6e 75 74 65 73 20 63 70 75 6c -id minutes cpul
6f20: 6f 61 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 oad diskfree tmp
6f30: 66 72 65 65 29 0a 20 20 28 6d 75 74 65 78 2d 6c free). (mutex-l
6f40: 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d ock! *incoming-m
6f50: 75 74 65 78 2a 29 0a 20 20 28 73 65 74 21 20 2a utex*). (set! *
6f60: 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 28 incoming-data* (
6f70: 63 6f 6e 73 20 28 76 65 63 74 6f 72 20 27 6d 65 cons (vector 'me
6f80: 74 61 2d 69 6e 66 6f 0a 09 09 09 09 20 20 20 20 ta-info.....
6f90: 20 20 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e (current-secon
6fa0: 64 73 29 0a 09 09 09 09 20 20 20 20 20 20 28 6c ds)..... (l
6fb0: 69 73 74 20 63 70 75 6c 6f 61 64 0a 09 09 09 09 ist cpuload.....
6fc0: 09 20 20 20 20 64 69 73 6b 66 72 65 65 0a 09 09 . diskfree...
6fd0: 09 09 09 20 20 20 20 6d 69 6e 75 74 65 73 0a 09 ... minutes..
6fe0: 09 09 09 09 20 20 20 20 74 65 73 74 2d 69 64 29 .... test-id)
6ff0: 29 20 3b 3b 20 72 75 6e 2d 69 64 20 74 65 73 74 ) ;; run-id test
7000: 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 -name item-path
7010: 6d 69 6e 75 74 65 73 20 63 70 75 6c 6f 61 64 20 minutes cpuload
7020: 64 69 73 6b 66 72 65 65 20 74 6d 70 66 72 65 65 diskfree tmpfree
7030: 29 20 0a 09 09 09 20 20 20 20 20 20 2a 69 6e 63 ) .... *inc
7040: 6f 6d 69 6e 67 2d 64 61 74 61 2a 29 29 0a 20 20 oming-data*)).
7050: 28 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a (mutex-unlock! *
7060: 69 6e 63 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 incoming-mutex*)
7070: 0a 20 20 28 69 66 20 2a 63 61 63 68 65 2d 6f 6e . (if *cache-on
7080: 2a 0a 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 *. (debug:p
7090: 72 69 6e 74 20 36 20 22 49 4e 46 4f 3a 20 2a 63 rint 6 "INFO: *c
70a0: 61 63 68 65 2d 6f 6e 2a 20 69 73 20 22 20 2a 63 ache-on* is " *c
70b0: 61 63 68 65 2d 6f 6e 2a 20 22 2c 20 73 6b 69 70 ache-on* ", skip
70c0: 70 69 6e 67 20 63 61 63 68 65 20 77 72 69 74 65 ping cache write
70d0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 65 73 74 as part of test
70e0: 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 -update-meta-inf
70f0: 6f 22 29 0a 20 20 20 20 20 20 28 64 62 3a 77 72 o"). (db:wr
7100: 69 74 65 2d 63 61 63 68 65 64 2d 64 61 74 61 20 ite-cached-data
7110: 64 62 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 db)))..(define (
7120: 64 62 3a 77 72 69 74 65 2d 63 61 63 68 65 64 2d db:write-cached-
7130: 64 61 74 61 20 64 62 29 0a 20 20 28 6c 65 74 20 data db). (let
7140: 28 28 6d 65 74 61 2d 73 74 6d 74 20 28 73 71 6c ((meta-stmt (sql
7150: 69 74 65 33 3a 70 72 65 70 61 72 65 20 64 62 20 ite3:prepare db
7160: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
7170: 54 20 63 70 75 6c 6f 61 64 3d 3f 2c 64 69 73 6b T cpuload=?,disk
7180: 66 72 65 65 3d 3f 2c 72 75 6e 5f 64 75 72 61 74 free=?,run_durat
7190: 69 6f 6e 3d 3f 2c 73 74 61 74 65 3d 27 52 55 4e ion=?,state='RUN
71a0: 4e 49 4e 47 27 20 57 48 45 52 45 20 69 64 3d 3f NING' WHERE id=?
71b0: 20 41 4e 44 20 73 74 61 74 65 20 4e 4f 54 20 49 AND state NOT I
71c0: 4e 20 28 27 43 4f 4d 50 4c 45 54 45 44 27 2c 27 N ('COMPLETED','
71d0: 4b 49 4c 4c 52 45 51 27 2c 27 4b 49 4c 4c 45 44 KILLREQ','KILLED
71e0: 27 29 3b 22 29 29 0a 09 28 73 74 65 70 2d 73 74 ');"))..(step-st
71f0: 6d 74 20 28 73 71 6c 69 74 65 33 3a 70 72 65 70 mt (sqlite3:prep
7200: 61 72 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f are db "INSERT O
7210: 52 20 52 45 50 4c 41 43 45 20 69 6e 74 6f 20 74 R REPLACE into t
7220: 65 73 74 5f 73 74 65 70 73 20 28 74 65 73 74 5f est_steps (test_
7230: 69 64 2c 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 id,stepname,stat
7240: 65 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 e,status,event_t
7250: 69 6d 65 2c 63 6f 6d 6d 65 6e 74 2c 6c 6f 67 66 ime,comment,logf
7260: 69 6c 65 29 20 56 41 4c 55 45 53 28 3f 2c 3f 2c ile) VALUES(?,?,
7270: 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 3b 22 29 29 20 3b ?,?,?,?,?);")) ;
7280: 3b 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c ; strftime('%s',
7290: 27 6e 6f 77 27 29 23 66 29 0a 09 28 64 61 74 61 'now')#f)..(data
72a0: 20 28 73 6f 72 74 20 2a 69 6e 63 6f 6d 69 6e 67 (sort *incoming
72b0: 2d 64 61 74 61 2a 20 28 6c 61 6d 62 64 61 20 28 -data* (lambda (
72c0: 61 20 62 29 28 3c 20 28 76 65 63 74 6f 72 2d 72 a b)(< (vector-r
72d0: 65 66 20 61 20 31 29 28 76 65 63 74 6f 72 2d 72 ef a 1)(vector-r
72e0: 65 66 20 62 20 31 29 29 29 29 29 29 0a 20 20 20 ef b 1)))))).
72f0: 20 28 69 66 20 28 3e 20 28 6c 65 6e 67 74 68 20 (if (> (length
7300: 64 61 74 61 29 20 30 29 0a 09 28 64 65 62 75 67 data) 0)..(debug
7310: 3a 70 72 69 6e 74 20 34 20 22 57 72 69 74 69 6e :print 4 "Writin
7320: 67 20 63 61 63 68 65 64 20 64 61 74 61 20 22 20 g cached data "
7330: 64 61 74 61 29 29 0a 20 20 20 20 28 6d 75 74 65 data)). (mute
7340: 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e x-lock! *incomin
7350: 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 20 28 73 g-mutex*). (s
7360: 71 6c 69 74 65 33 3a 77 69 74 68 2d 74 72 61 6e qlite3:with-tran
7370: 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 64 62 saction . db
7380: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 . (lambda ()
7390: 0a 20 20 20 20 20 20 20 28 66 6f 72 2d 65 61 63 . (for-eac
73a0: 68 20 28 6c 61 6d 62 64 61 20 28 65 6e 74 72 79 h (lambda (entry
73b0: 29 0a 09 09 20 20 20 28 63 61 73 65 20 28 76 65 )... (case (ve
73c0: 63 74 6f 72 2d 72 65 66 20 65 6e 74 72 79 20 30 ctor-ref entry 0
73d0: 29 0a 09 09 20 20 20 20 20 28 28 6d 65 74 61 2d )... ((meta-
73e0: 69 6e 66 6f 29 0a 09 09 20 20 20 20 20 20 28 61 info)... (a
73f0: 70 70 6c 79 20 73 71 6c 69 74 65 33 3a 65 78 65 pply sqlite3:exe
7400: 63 75 74 65 20 6d 65 74 61 2d 73 74 6d 74 20 28 cute meta-stmt (
7410: 76 65 63 74 6f 72 2d 72 65 66 20 65 6e 74 72 79 vector-ref entry
7420: 20 32 29 29 29 0a 09 09 20 20 20 20 20 28 28 73 2)))... ((s
7430: 74 65 70 2d 73 74 61 74 75 73 29 0a 09 09 20 20 tep-status)...
7440: 20 20 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 (apply sqlit
7450: 65 33 3a 65 78 65 63 75 74 65 20 73 74 65 70 2d e3:execute step-
7460: 73 74 6d 74 20 28 76 65 63 74 6f 72 2d 72 65 66 stmt (vector-ref
7470: 20 65 6e 74 72 79 20 32 29 29 29 0a 09 09 20 20 entry 2)))...
7480: 20 20 20 28 65 6c 73 65 0a 09 09 20 20 20 20 20 (else...
7490: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 (debug:print 0
74a0: 22 45 52 52 4f 52 3a 20 51 75 65 75 65 64 20 65 "ERROR: Queued e
74b0: 6e 74 72 79 20 6e 6f 74 20 72 65 63 6f 67 6e 69 ntry not recogni
74c0: 73 65 64 20 22 20 65 6e 74 72 79 29 29 29 29 0a sed " entry)))).
74d0: 09 09 20 64 61 74 61 29 29 29 0a 20 20 20 20 28 .. data))). (
74e0: 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 sqlite3:finalize
74f0: 21 20 6d 65 74 61 2d 73 74 6d 74 29 20 3b 3b 20 ! meta-stmt) ;;
7500: 73 71 6c 69 74 65 20 69 73 20 74 68 65 20 62 6f sqlite is the bo
7510: 74 74 6c 65 6e 65 63 6b 2c 20 63 6c 65 61 72 20 ttleneck, clear
7520: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 the statements a
7530: 73 61 70 3f 0a 20 20 20 20 28 73 71 6c 69 74 65 sap?. (sqlite
7540: 33 3a 66 69 6e 61 6c 69 7a 65 21 20 73 74 65 70 3:finalize! step
7550: 2d 73 74 6d 74 29 0a 20 20 20 20 28 73 65 74 21 -stmt). (set!
7560: 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a *incoming-data*
7570: 20 27 28 29 29 0a 20 20 20 20 28 6d 75 74 65 78 '()). (mutex
7580: 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 -unlock! *incomi
7590: 6e 67 2d 6d 75 74 65 78 2a 29 29 29 0a 0a 28 64 ng-mutex*)))..(d
75a0: 65 66 69 6e 65 20 28 64 62 3a 72 6f 6c 6c 2d 75 efine (db:roll-u
75b0: 70 2d 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75 6e p-pass-fail-coun
75c0: 74 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 ts db run-id tes
75d0: 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 t-name item-path
75e0: 20 73 74 61 74 75 73 29 0a 20 20 28 69 66 20 28 status). (if (
75f0: 61 6e 64 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f and (not (equal?
7600: 20 69 74 65 6d 2d 70 61 74 68 20 22 22 29 29 0a item-path "")).
7610: 09 20 20 20 28 6f 72 20 28 65 71 75 61 6c 3f 20 . (or (equal?
7620: 73 74 61 74 75 73 20 22 50 41 53 53 22 29 0a 09 status "PASS")..
7630: 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73 (equal? s
7640: 74 61 74 75 73 20 22 57 41 52 4e 22 29 0a 09 20 tatus "WARN")..
7650: 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73 74 (equal? st
7660: 61 74 75 73 20 22 46 41 49 4c 22 29 0a 09 20 20 atus "FAIL")..
7670: 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73 74 61 (equal? sta
7680: 74 75 73 20 22 57 41 49 56 45 44 22 29 0a 09 20 tus "WAIVED")..
7690: 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73 74 (equal? st
76a0: 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 22 29 29 atus "RUNNING"))
76b0: 29 0a 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 ). (begin..
76c0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
76d0: 20 0a 09 20 64 62 0a 09 20 22 55 50 44 41 54 45 .. db.. "UPDATE
76e0: 20 74 65 73 74 73 20 0a 20 20 20 20 20 20 20 20 tests .
76f0: 20 20 20 20 20 53 45 54 20 66 61 69 6c 5f 63 6f SET fail_co
7700: 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e unt=(SELECT coun
7710: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 t(id) FROM tests
7720: 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 WHERE run_id=?
7730: 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 AND testname=? A
7740: 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 ND item_path !=
7750: 27 27 20 41 4e 44 20 73 74 61 74 75 73 3d 27 46 '' AND status='F
7760: 41 49 4c 27 29 2c 0a 20 20 20 20 20 20 20 20 20 AIL'),.
7770: 20 20 20 20 20 20 20 20 70 61 73 73 5f 63 6f 75 pass_cou
7780: 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 nt=(SELECT count
7790: 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 20 (id) FROM tests
77a0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
77b0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
77c0: 44 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 27 D item_path != '
77d0: 27 20 41 4e 44 20 28 73 74 61 74 75 73 3d 27 50 ' AND (status='P
77e0: 41 53 53 27 20 4f 52 20 73 74 61 74 75 73 3d 27 ASS' OR status='
77f0: 57 41 52 4e 27 20 4f 52 20 73 74 61 74 75 73 3d WARN' OR status=
7800: 27 57 41 49 56 45 44 27 29 29 0a 20 20 20 20 20 'WAIVED')).
7810: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 72 75 WHERE ru
7820: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
7830: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
7840: 61 74 68 3d 27 27 3b 22 0a 09 20 72 75 6e 2d 69 ath='';".. run-i
7850: 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 75 6e 2d d test-name run-
7860: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 75 6e id test-name run
7870: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 0a 20 -id test-name).
7880: 20 20 20 20 20 20 20 28 74 68 72 65 61 64 2d 73 (thread-s
7890: 6c 65 65 70 21 20 30 2e 31 29 20 3b 3b 20 67 69 leep! 0.1) ;; gi
78a0: 76 65 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 ve other process
78b0: 65 73 20 61 20 63 68 61 6e 63 65 20 68 65 72 65 es a chance here
78c0: 0a 09 28 69 66 20 28 65 71 75 61 6c 3f 20 73 74 ..(if (equal? st
78d0: 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 22 29 20 atus "RUNNING")
78e0: 3b 3b 20 72 75 6e 6e 69 6e 67 20 74 61 6b 65 73 ;; running takes
78f0: 20 70 72 69 6f 72 69 74 79 20 6f 76 65 72 20 61 priority over a
7900: 6c 6c 20 6f 74 68 65 72 20 73 74 61 74 65 73 2c ll other states,
7910: 20 66 6f 72 63 65 20 74 68 65 20 74 65 73 74 20 force the test
7920: 73 74 61 74 65 20 74 6f 20 52 55 4e 4e 49 4e 47 state to RUNNING
7930: 0a 09 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 .. (sqlite3:e
7940: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
7950: 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 74 E tests SET stat
7960: 65 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 64 e=? WHERE run_id
7970: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d =? AND testname=
7980: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d ? AND item_path=
7990: 27 27 3b 22 20 22 52 55 4e 4e 49 4e 47 22 20 72 '';" "RUNNING" r
79a0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 un-id test-name)
79b0: 0a 09 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 .. (sqlite3:e
79c0: 78 65 63 75 74 65 0a 09 20 20 20 20 20 64 62 0a xecute.. db.
79d0: 09 20 20 20 20 20 22 55 50 44 41 54 45 20 74 65 . "UPDATE te
79e0: 73 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 sts.
79f0: 20 20 20 20 20 20 20 20 20 20 20 53 45 54 20 73 SET s
7a00: 74 61 74 65 3d 43 41 53 45 20 57 48 45 4e 20 28 tate=CASE WHEN (
7a10: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 SELECT count(id)
7a20: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
7a30: 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 E run_id=? AND t
7a40: 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 estname=? AND it
7a50: 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 20 41 4e em_path != '' AN
7a60: 44 20 73 74 61 74 65 20 69 6e 20 28 27 52 55 4e D state in ('RUN
7a70: 4e 49 4e 47 27 2c 27 4e 4f 54 5f 53 54 41 52 54 NING','NOT_START
7a80: 45 44 27 29 29 20 3e 20 30 20 54 48 45 4e 20 0a ED')) > 0 THEN .
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7aa0: 20 20 20 20 20 20 20 20 20 20 27 52 55 4e 4e 49 'RUNNI
7ab0: 4e 47 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 NG'.
7ac0: 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 45 20 ELSE
7ad0: 27 43 4f 4d 50 4c 45 54 45 44 27 20 45 4e 44 2c 'COMPLETED' END,
7ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7af0: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 75 statu
7b00: 73 3d 43 41 53 45 20 57 48 45 4e 20 66 61 69 6c s=CASE WHEN fail
7b10: 5f 63 6f 75 6e 74 20 3e 20 30 20 54 48 45 4e 20 _count > 0 THEN
7b20: 27 46 41 49 4c 27 20 57 48 45 4e 20 70 61 73 73 'FAIL' WHEN pass
7b30: 5f 63 6f 75 6e 74 20 3e 20 30 20 41 4e 44 20 66 _count > 0 AND f
7b40: 61 69 6c 5f 63 6f 75 6e 74 3d 30 20 54 48 45 4e ail_count=0 THEN
7b50: 20 27 50 41 53 53 27 20 45 4c 53 45 20 27 55 4e 'PASS' ELSE 'UN
7b60: 4b 4e 4f 57 4e 27 20 45 4e 44 0a 20 20 20 20 20 KNOWN' END.
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b80: 20 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f WHERE run_id=?
7b90: 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 AND testname=?
7ba0: 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 AND item_path=''
7bb0: 3b 22 0a 09 20 20 20 20 20 72 75 6e 2d 69 64 20 ;".. run-id
7bc0: 74 65 73 74 2d 6e 61 6d 65 20 72 75 6e 2d 69 64 test-name run-id
7bd0: 20 74 65 73 74 2d 6e 61 6d 65 29 29 0a 09 23 66 test-name))..#f
7be0: 29 0a 20 20 20 20 20 20 23 66 29 29 0a 0a 0a 3b ). #f))...;
7bf0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
7c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c30: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 65 73 74 73 =======.;; Tests
7c40: 20 6d 65 74 61 20 64 61 74 61 0a 3b 3b 3d 3d 3d meta data.;;===
7c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7c90: 3d 3d 3d 0a 0a 3b 3b 20 72 65 61 64 20 74 68 65 ===..;; read the
7ca0: 20 72 65 63 6f 72 64 20 67 69 76 65 6e 20 61 20 record given a
7cb0: 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 6e 65 testname.(define
7cc0: 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 (db:testmeta-ge
7cd0: 74 2d 72 65 63 6f 72 64 20 64 62 20 74 65 73 74 t-record db test
7ce0: 6e 61 6d 65 29 0a 20 20 28 6c 65 74 20 28 28 72 name). (let ((r
7cf0: 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c es #f)). (sql
7d00: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
7d10: 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 w. (lambda (
7d20: 69 64 20 74 65 73 74 6e 61 6d 65 20 61 75 74 68 id testname auth
7d30: 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 72 69 70 or owner descrip
7d40: 74 69 6f 6e 20 72 65 76 69 65 77 65 64 20 69 74 tion reviewed it
7d50: 65 72 61 74 65 64 20 61 76 67 5f 72 75 6e 74 69 erated avg_runti
7d60: 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 61 67 73 me avg_disk tags
7d70: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
7d80: 65 73 20 28 76 65 63 74 6f 72 20 69 64 20 74 65 es (vector id te
7d90: 73 74 6e 61 6d 65 20 61 75 74 68 6f 72 20 6f 77 stname author ow
7da0: 6e 65 72 20 64 65 73 63 72 69 70 74 69 6f 6e 20 ner description
7db0: 72 65 76 69 65 77 65 64 20 69 74 65 72 61 74 65 reviewed iterate
7dc0: 64 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 61 76 d avg_runtime av
7dd0: 67 5f 64 69 73 6b 20 74 61 67 73 29 29 29 0a 20 g_disk tags))).
7de0: 20 20 20 20 64 62 20 22 53 45 4c 45 43 54 20 69 db "SELECT i
7df0: 64 2c 74 65 73 74 6e 61 6d 65 2c 61 75 74 68 6f d,testname,autho
7e00: 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 69 70 74 r,owner,descript
7e10: 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c 69 74 65 ion,reviewed,ite
7e20: 72 61 74 65 64 2c 61 76 67 5f 72 75 6e 74 69 6d rated,avg_runtim
7e30: 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 67 73 20 e,avg_disk,tags
7e40: 46 52 4f 4d 20 74 65 73 74 5f 6d 65 74 61 20 57 FROM test_meta W
7e50: 48 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 3b HERE testname=?;
7e60: 22 0a 20 20 20 20 20 74 65 73 74 6e 61 6d 65 29 ". testname)
7e70: 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 63 . res))..;; c
7e80: 72 65 61 74 65 20 61 20 6e 65 77 20 72 65 63 6f reate a new reco
7e90: 72 64 20 66 6f 72 20 61 20 67 69 76 65 6e 20 74 rd for a given t
7ea0: 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 6e 65 20 estname.(define
7eb0: 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 61 64 64 (db:testmeta-add
7ec0: 2d 72 65 63 6f 72 64 20 64 62 20 74 65 73 74 6e -record db testn
7ed0: 61 6d 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a ame). (sqlite3:
7ee0: 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 45 execute db "INSE
7ef0: 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 RT OR IGNORE INT
7f00: 4f 20 74 65 73 74 5f 6d 65 74 61 20 28 74 65 73 O test_meta (tes
7f10: 74 6e 61 6d 65 2c 61 75 74 68 6f 72 2c 6f 77 6e tname,author,own
7f20: 65 72 2c 64 65 73 63 72 69 70 74 69 6f 6e 2c 72 er,description,r
7f30: 65 76 69 65 77 65 64 2c 69 74 65 72 61 74 65 64 eviewed,iterated
7f40: 2c 61 76 67 5f 72 75 6e 74 69 6d 65 2c 61 76 67 ,avg_runtime,avg
7f50: 5f 64 69 73 6b 2c 74 61 67 73 29 20 56 41 4c 55 _disk,tags) VALU
7f60: 45 53 20 28 3f 2c 27 27 2c 27 27 2c 27 27 2c 27 ES (?,'','','','
7f70: 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 29 3b 22 ','','','','');"
7f80: 20 74 65 73 74 6e 61 6d 65 29 29 0a 0a 3b 3b 20 testname))..;;
7f90: 75 70 64 61 74 65 20 6f 6e 65 20 6f 66 20 74 68 update one of th
7fa0: 65 20 74 65 73 74 6d 65 74 61 20 66 69 65 6c 64 e testmeta field
7fb0: 73 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 s.(define (db:te
7fc0: 73 74 6d 65 74 61 2d 75 70 64 61 74 65 2d 66 69 stmeta-update-fi
7fd0: 65 6c 64 20 64 62 20 74 65 73 74 6e 61 6d 65 20 eld db testname
7fe0: 66 69 65 6c 64 20 76 61 6c 75 65 29 0a 20 20 28 field value). (
7ff0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
8000: 64 62 20 28 63 6f 6e 63 20 22 55 50 44 41 54 45 db (conc "UPDATE
8010: 20 74 65 73 74 5f 6d 65 74 61 20 53 45 54 20 22 test_meta SET "
8020: 20 66 69 65 6c 64 20 22 3d 3f 20 57 48 45 52 45 field "=? WHERE
8030: 20 74 65 73 74 6e 61 6d 65 3d 3f 3b 22 29 20 76 testname=?;") v
8040: 61 6c 75 65 20 74 65 73 74 6e 61 6d 65 29 29 0a alue testname)).
8050: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
8060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 20 45 =========.;; T E
80a0: 20 53 20 54 20 20 20 44 20 41 20 54 20 41 20 0a S T D A T A .
80b0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
80c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
80d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
80e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
80f0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e ========..(defin
8100: 65 20 28 64 62 3a 63 73 76 2d 3e 74 65 73 74 2d e (db:csv->test-
8110: 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 data db test-id
8120: 63 73 76 64 61 74 61 29 0a 20 20 28 64 65 62 75 csvdata). (debu
8130: 67 3a 70 72 69 6e 74 20 34 20 22 74 65 73 74 2d g:print 4 "test-
8140: 69 64 20 22 20 74 65 73 74 2d 69 64 20 22 2c 20 id " test-id ",
8150: 63 73 76 64 61 74 61 3a 20 22 20 63 73 76 64 61 csvdata: " csvda
8160: 74 61 29 0a 20 20 28 6c 65 74 20 28 28 63 73 76 ta). (let ((csv
8170: 6c 69 73 74 20 28 63 73 76 2d 3e 6c 69 73 74 20 list (csv->list
8180: 28 6d 61 6b 65 2d 63 73 76 2d 72 65 61 64 65 72 (make-csv-reader
8190: 0a 09 09 09 20 20 20 20 20 28 6f 70 65 6e 2d 69 .... (open-i
81a0: 6e 70 75 74 2d 73 74 72 69 6e 67 20 63 73 76 64 nput-string csvd
81b0: 61 74 61 29 0a 09 09 09 20 20 20 20 20 27 28 28 ata).... '((
81c0: 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 2d 77 68 strip-leading-wh
81d0: 69 74 65 73 70 61 63 65 3f 20 23 74 29 0a 09 09 itespace? #t)...
81e0: 09 20 20 20 20 20 20 20 28 73 74 72 69 70 2d 74 . (strip-t
81f0: 72 61 69 6c 69 6e 67 2d 77 68 69 74 65 73 70 61 railing-whitespa
8200: 63 65 3f 20 23 74 29 29 20 29 29 29 29 20 3b 3b ce? #t)) )))) ;;
8210: 20 28 63 73 76 2d 3e 6c 69 73 74 20 63 73 76 64 (csv->list csvd
8220: 61 74 61 29 29 29 0a 20 20 20 20 28 66 6f 72 2d ata))). (for-
8230: 65 61 63 68 20 0a 20 20 20 20 20 28 6c 61 6d 62 each . (lamb
8240: 64 61 20 28 63 73 76 72 6f 77 29 0a 20 20 20 20 da (csvrow).
8250: 20 20 20 28 6c 65 74 2a 20 28 28 70 61 64 64 65 (let* ((padde
8260: 64 2d 72 6f 77 20 20 28 74 61 6b 65 20 28 61 70 d-row (take (ap
8270: 70 65 6e 64 20 63 73 76 72 6f 77 20 28 6c 69 73 pend csvrow (lis
8280: 74 20 23 66 20 23 66 20 23 66 20 23 66 20 23 66 t #f #f #f #f #f
8290: 20 23 66 20 23 66 20 23 66 20 23 66 29 29 20 39 #f #f #f #f)) 9
82a0: 29 29 0a 09 20 20 20 20 20 20 28 63 61 74 65 67 )).. (categ
82b0: 6f 72 79 20 20 20 20 28 6c 69 73 74 2d 72 65 66 ory (list-ref
82c0: 20 70 61 64 64 65 64 2d 72 6f 77 20 30 29 29 0a padded-row 0)).
82d0: 09 20 20 20 20 20 20 28 76 61 72 69 61 62 6c 65 . (variable
82e0: 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 (list-ref pa
82f0: 64 64 65 64 2d 72 6f 77 20 31 29 29 0a 09 20 20 dded-row 1))..
8300: 20 20 20 20 28 76 61 6c 75 65 20 20 20 20 20 20 (value
8310: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 (any->number-if
8320: 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d -possible (list-
8330: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 32 ref padded-row 2
8340: 29 29 29 0a 09 20 20 20 20 20 20 28 65 78 70 65 ))).. (expe
8350: 63 74 65 64 20 20 20 20 28 61 6e 79 2d 3e 6e 75 cted (any->nu
8360: 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 mber-if-possible
8370: 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 (list-ref padde
8380: 64 2d 72 6f 77 20 33 29 29 29 0a 09 20 20 20 20 d-row 3)))..
8390: 20 20 28 74 6f 6c 20 20 20 20 20 20 20 20 20 28 (tol (
83a0: 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 any->number-if-p
83b0: 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d 72 65 ossible (list-re
83c0: 66 20 70 61 64 64 65 64 2d 72 6f 77 20 34 29 29 f padded-row 4))
83d0: 29 20 3b 3b 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c ) ;; >, <, >=, <
83e0: 3d 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 0a 09 =, or a number..
83f0: 20 20 20 20 20 20 28 75 6e 69 74 73 20 20 20 20 (units
8400: 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 (list-ref pad
8410: 64 65 64 2d 72 6f 77 20 35 29 29 0a 09 20 20 20 ded-row 5))..
8420: 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 20 20 20 (comment
8430: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
8440: 2d 72 6f 77 20 36 29 29 0a 09 20 20 20 20 20 20 -row 6))..
8450: 28 73 74 61 74 75 73 20 20 20 20 20 20 28 6c 65 (status (le
8460: 74 20 28 28 73 20 28 6c 69 73 74 2d 72 65 66 20 t ((s (list-ref
8470: 70 61 64 64 65 64 2d 72 6f 77 20 37 29 29 29 0a padded-row 7))).
8480: 09 09 09 20 20 20 20 20 28 69 66 20 28 61 6e 64 ... (if (and
8490: 20 28 73 74 72 69 6e 67 3f 20 73 29 28 6f 72 20 (string? s)(or
84a0: 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 (string-match (r
84b0: 65 67 65 78 70 20 22 5e 5c 5c 73 2a 24 22 29 20 egexp "^\\s*$")
84c0: 73 29 0a 09 09 09 09 09 09 20 20 20 20 20 28 73 s)....... (s
84d0: 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 tring-match (reg
84e0: 65 78 70 20 22 5e 6e 2f 61 24 22 29 20 73 29 29 exp "^n/a$") s))
84f0: 29 0a 09 09 09 09 20 23 66 0a 09 09 09 09 20 73 )..... #f..... s
8500: 29 29 29 20 3b 3b 20 69 66 20 73 70 65 63 69 66 ))) ;; if specif
8510: 69 65 64 20 6f 6e 20 74 68 65 20 69 6e 70 75 74 ied on the input
8520: 20 74 68 65 6e 20 75 73 65 2c 20 65 6c 73 65 20 then use, else
8530: 63 61 6c 63 75 6c 61 74 65 0a 09 20 20 20 20 20 calculate..
8540: 20 28 74 79 70 65 20 20 20 20 20 20 20 20 28 6c (type (l
8550: 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 ist-ref padded-r
8560: 6f 77 20 38 29 29 29 0a 09 20 3b 3b 20 6c 6f 6f ow 8))).. ;; loo
8570: 6b 20 75 70 20 65 78 70 65 63 74 65 64 2c 74 6f k up expected,to
8580: 6c 2c 75 6e 69 74 73 20 66 72 6f 6d 20 70 72 65 l,units from pre
8590: 76 69 6f 75 73 20 62 65 73 74 20 66 69 74 20 74 vious best fit t
85a0: 65 73 74 20 69 66 20 74 68 65 79 20 61 72 65 20 est if they are
85b0: 61 6c 6c 20 65 69 74 68 65 72 20 23 66 20 6f 72 all either #f or
85c0: 20 27 27 0a 09 20 28 64 65 62 75 67 3a 70 72 69 ''.. (debug:pri
85d0: 6e 74 20 34 20 22 42 45 46 4f 52 45 3a 20 63 61 nt 4 "BEFORE: ca
85e0: 74 65 67 6f 72 79 3a 20 22 20 63 61 74 65 67 6f tegory: " catego
85f0: 72 79 20 22 20 76 61 72 69 61 62 6c 65 3a 20 22 ry " variable: "
8600: 20 76 61 72 69 61 62 6c 65 20 22 20 76 61 6c 75 variable " valu
8610: 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 09 20 20 e: " value ...
8620: 20 20 20 20 22 2c 20 65 78 70 65 63 74 65 64 3a ", expected:
8630: 20 22 20 65 78 70 65 63 74 65 64 20 22 20 74 6f " expected " to
8640: 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 l: " tol " units
8650: 3a 20 22 20 75 6e 69 74 73 20 22 20 73 74 61 74 : " units " stat
8660: 75 73 3a 20 22 20 73 74 61 74 75 73 20 22 20 63 us: " status " c
8670: 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e omment: " commen
8680: 74 20 22 20 74 79 70 65 3a 20 22 20 74 79 70 65 t " type: " type
8690: 29 0a 0a 09 20 28 69 66 20 28 61 6e 64 20 28 6f )... (if (and (o
86a0: 72 20 28 6e 6f 74 20 65 78 70 65 63 74 65 64 29 r (not expected)
86b0: 28 65 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 (equal? expected
86c0: 20 22 22 29 29 0a 09 09 20 20 28 6f 72 20 28 6e ""))... (or (n
86d0: 6f 74 20 74 6f 6c 29 20 20 20 20 20 28 65 71 75 ot tol) (equ
86e0: 61 6c 3f 20 65 78 70 65 63 74 65 64 20 22 22 29 al? expected "")
86f0: 29 0a 09 09 20 20 28 6f 72 20 28 6e 6f 74 20 75 )... (or (not u
8700: 6e 69 74 73 29 20 20 20 28 65 71 75 61 6c 3f 20 nits) (equal?
8710: 65 78 70 65 63 74 65 64 20 22 22 29 29 29 0a 09 expected "")))..
8720: 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 (let-values
8730: 20 28 28 28 6e 65 77 2d 65 78 70 65 63 74 65 64 (((new-expected
8740: 20 6e 65 77 2d 74 6f 6c 20 6e 65 77 2d 75 6e 69 new-tol new-uni
8750: 74 73 29 28 64 62 3a 67 65 74 2d 70 72 65 76 2d ts)(db:get-prev-
8760: 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 tol-for-test db
8770: 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 test-id category
8780: 20 76 61 72 69 61 62 6c 65 29 29 29 0a 09 09 09 variable)))....
8790: 20 28 73 65 74 21 20 65 78 70 65 63 74 65 64 20 (set! expected
87a0: 6e 65 77 2d 65 78 70 65 63 74 65 64 29 0a 09 09 new-expected)...
87b0: 09 20 28 73 65 74 21 20 74 6f 6c 20 20 20 20 20 . (set! tol
87c0: 20 6e 65 77 2d 74 6f 6c 29 0a 09 09 09 20 28 73 new-tol).... (s
87d0: 65 74 21 20 75 6e 69 74 73 20 20 20 20 6e 65 77 et! units new
87e0: 2d 75 6e 69 74 73 29 29 29 0a 0a 09 20 28 64 65 -units)))... (de
87f0: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 41 46 54 bug:print 4 "AFT
8800: 45 52 3a 20 20 63 61 74 65 67 6f 72 79 3a 20 22 ER: category: "
8810: 20 63 61 74 65 67 6f 72 79 20 22 20 76 61 72 69 category " vari
8820: 61 62 6c 65 3a 20 22 20 76 61 72 69 61 62 6c 65 able: " variable
8830: 20 22 20 76 61 6c 75 65 3a 20 22 20 76 61 6c 75 " value: " valu
8840: 65 20 0a 09 09 20 20 20 20 20 20 22 2c 20 65 78 e ... ", ex
8850: 70 65 63 74 65 64 3a 20 22 20 65 78 70 65 63 74 pected: " expect
8860: 65 64 20 22 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 ed " tol: " tol
8870: 22 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 74 73 " units: " units
8880: 20 22 20 73 74 61 74 75 73 3a 20 22 20 73 74 61 " status: " sta
8890: 74 75 73 20 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 tus " comment: "
88a0: 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 3b 3b 20 63 comment).. ;; c
88b0: 61 6c 63 75 6c 61 74 65 20 73 74 61 74 75 73 20 alculate status
88c0: 69 66 20 4e 4f 54 20 73 70 65 63 69 66 69 65 64 if NOT specified
88d0: 0a 09 20 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 .. (if (and (not
88e0: 20 73 74 61 74 75 73 29 28 6e 75 6d 62 65 72 3f status)(number?
88f0: 20 65 78 70 65 63 74 65 64 29 28 6e 75 6d 62 65 expected)(numbe
8900: 72 3f 20 76 61 6c 75 65 29 29 20 3b 3b 20 6e 65 r? value)) ;; ne
8910: 65 64 20 65 78 70 65 63 74 65 64 20 61 6e 64 20 ed expected and
8920: 76 61 6c 75 65 20 74 6f 20 62 65 20 6e 75 6d 62 value to be numb
8930: 65 72 73 0a 09 20 20 20 20 20 28 69 66 20 28 6e ers.. (if (n
8940: 75 6d 62 65 72 3f 20 74 6f 6c 29 20 3b 3b 20 69 umber? tol) ;; i
8950: 66 20 74 6f 6c 20 69 73 20 61 20 6e 75 6d 62 65 f tol is a numbe
8960: 72 20 74 68 65 6e 20 77 65 20 64 6f 20 74 68 65 r then we do the
8970: 20 73 74 61 6e 64 61 72 64 20 63 6f 6d 70 61 72 standard compar
8980: 69 73 6f 6e 0a 09 09 20 28 6c 65 74 2a 20 28 28 ison... (let* ((
8990: 6d 61 78 2d 76 61 6c 20 28 2b 20 65 78 70 65 63 max-val (+ expec
89a0: 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 28 6d 69 ted tol))....(mi
89b0: 6e 2d 76 61 6c 20 28 2d 20 65 78 70 65 63 74 65 n-val (- expecte
89c0: 64 20 74 6f 6c 29 29 0a 09 09 09 28 72 65 73 75 d tol))....(resu
89d0: 6c 74 20 20 28 61 6e 64 20 28 3e 3d 20 20 76 61 lt (and (>= va
89e0: 6c 75 65 20 6d 69 6e 2d 76 61 6c 29 28 3c 3d 20 lue min-val)(<=
89f0: 76 61 6c 75 65 20 6d 61 78 2d 76 61 6c 29 29 29 value max-val)))
8a00: 29 0a 09 09 20 20 20 28 64 65 62 75 67 3a 70 72 )... (debug:pr
8a10: 69 6e 74 20 34 20 22 6d 61 78 2d 76 61 6c 3a 20 int 4 "max-val:
8a20: 22 20 6d 61 78 2d 76 61 6c 20 22 20 6d 69 6e 2d " max-val " min-
8a30: 76 61 6c 3a 20 22 20 6d 69 6e 2d 76 61 6c 20 22 val: " min-val "
8a40: 20 72 65 73 75 6c 74 3a 20 22 20 72 65 73 75 6c result: " resul
8a50: 74 29 0a 09 09 20 20 20 28 73 65 74 21 20 73 74 t)... (set! st
8a60: 61 74 75 73 20 28 69 66 20 72 65 73 75 6c 74 20 atus (if result
8a70: 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 29 29 "pass" "fail")))
8a80: 0a 09 09 20 28 73 65 74 21 20 73 74 61 74 75 73 ... (set! status
8a90: 20 3b 3b 20 4e 42 2f 2f 20 6e 65 65 64 20 74 6f ;; NB// need to
8aa0: 20 61 73 73 65 73 73 20 65 61 63 68 20 6f 6e 65 assess each one
8ab0: 20 28 69 2e 65 2e 20 6e 6f 74 20 72 65 74 75 72 (i.e. not retur
8ac0: 6e 20 6f 70 65 72 61 74 6f 72 20 73 69 6e 63 65 n operator since
8ad0: 20 6e 65 65 64 20 74 6f 20 61 63 74 20 69 66 20 need to act if
8ae0: 6e 6f 74 20 76 61 6c 69 64 20 6f 70 2e 0a 09 09 not valid op....
8af0: 20 20 20 20 20 20 20 28 63 61 73 65 20 28 73 74 (case (st
8b00: 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 74 6f 6c ring->symbol tol
8b10: 29 20 3b 3b 20 74 6f 6c 20 73 68 6f 75 6c 64 20 ) ;; tol should
8b20: 62 65 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c 3d 0a be >, <, >=, <=.
8b30: 09 09 09 20 28 28 3e 29 20 20 28 69 66 20 28 3e ... ((>) (if (>
8b40: 20 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 value expected
8b50: 29 20 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 ) "pass" "fail")
8b60: 29 0a 09 09 09 20 28 28 3c 29 20 20 28 69 66 20 ).... ((<) (if
8b70: 28 3c 20 20 76 61 6c 75 65 20 65 78 70 65 63 74 (< value expect
8b80: 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 6c ed) "pass" "fail
8b90: 22 29 29 0a 09 09 09 20 28 28 3e 3d 29 20 28 69 ")).... ((>=) (i
8ba0: 66 20 28 3e 3d 20 76 61 6c 75 65 20 65 78 70 65 f (>= value expe
8bb0: 63 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 cted) "pass" "fa
8bc0: 69 6c 22 29 29 0a 09 09 09 20 28 28 3c 3d 29 20 il")).... ((<=)
8bd0: 28 69 66 20 28 3c 3d 20 76 61 6c 75 65 20 65 78 (if (<= value ex
8be0: 70 65 63 74 65 64 29 20 22 70 61 73 73 22 20 22 pected) "pass" "
8bf0: 66 61 69 6c 22 29 29 0a 09 09 09 20 28 65 6c 73 fail")).... (els
8c00: 65 20 28 63 6f 6e 63 20 22 45 52 52 4f 52 3a 20 e (conc "ERROR:
8c10: 62 61 64 20 74 6f 6c 20 63 6f 6d 70 61 72 61 74 bad tol comparat
8c20: 6f 72 20 22 20 74 6f 6c 29 29 29 29 29 29 0a 09 or " tol))))))..
8c30: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
8c40: 22 41 46 54 45 52 32 3a 20 63 61 74 65 67 6f 72 "AFTER2: categor
8c50: 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 20 y: " category "
8c60: 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 69 variable: " vari
8c70: 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 20 able " value: "
8c80: 76 61 6c 75 65 20 0a 09 09 20 20 20 20 20 20 22 value ... "
8c90: 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 65 78 , expected: " ex
8ca0: 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 pected " tol: "
8cb0: 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 75 tol " units: " u
8cc0: 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a 20 22 nits " status: "
8cd0: 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e status " commen
8ce0: 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 t: " comment)..
8cf0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
8d00: 20 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 52 db "INSERT OR R
8d10: 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 65 73 74 EPLACE INTO test
8d20: 5f 64 61 74 61 20 28 74 65 73 74 5f 69 64 2c 63 _data (test_id,c
8d30: 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 ategory,variable
8d40: 2c 76 61 6c 75 65 2c 65 78 70 65 63 74 65 64 2c ,value,expected,
8d50: 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f 6d 6d 65 6e tol,units,commen
8d60: 74 2c 73 74 61 74 75 73 2c 74 79 70 65 29 20 56 t,status,type) V
8d70: 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f ALUES (?,?,?,?,?
8d80: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 3b 22 0a 09 09 ,?,?,?,?,?);"...
8d90: 09 20 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 . test-id categ
8da0: 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c ory variable val
8db0: 75 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 ue expected tol
8dc0: 75 6e 69 74 73 20 28 69 66 20 63 6f 6d 6d 65 6e units (if commen
8dd0: 74 20 63 6f 6d 6d 65 6e 74 20 22 22 29 20 73 74 t comment "") st
8de0: 61 74 75 73 20 74 79 70 65 29 29 29 0a 20 20 20 atus type))).
8df0: 20 20 63 73 76 6c 69 73 74 29 29 29 0a 0a 3b 3b csvlist)))..;;
8e00: 20 67 65 74 20 61 20 6c 69 73 74 20 6f 66 20 74 get a list of t
8e10: 65 73 74 5f 64 61 74 61 20 72 65 63 6f 72 64 73 est_data records
8e20: 20 6d 61 74 63 68 69 6e 67 20 63 61 74 65 67 6f matching catego
8e30: 72 79 70 61 74 74 0a 28 64 65 66 69 6e 65 20 28 rypatt.(define (
8e40: 64 62 3a 72 65 61 64 2d 74 65 73 74 2d 64 61 74 db:read-test-dat
8e50: 61 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 74 a db test-id cat
8e60: 65 67 6f 72 79 70 61 74 74 29 0a 20 20 28 6c 65 egorypatt). (le
8e70: 74 20 28 28 72 65 73 20 27 28 29 29 29 0a 20 20 t ((res '())).
8e80: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
8e90: 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c ach-row . (l
8ea0: 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 5f 69 ambda (id test_i
8eb0: 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 d category varia
8ec0: 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 ble value expect
8ed0: 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 6f 6d ed tol units com
8ee0: 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 70 65 ment status type
8ef0: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
8f00: 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f 72 es (cons (vector
8f10: 20 69 64 20 74 65 73 74 5f 69 64 20 63 61 74 65 id test_id cate
8f20: 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 gory variable va
8f30: 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c lue expected tol
8f40: 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 20 73 units comment s
8f50: 74 61 74 75 73 20 74 79 70 65 29 20 72 65 73 29 tatus type) res)
8f60: 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 )). db.
8f70: 22 53 45 4c 45 43 54 20 69 64 2c 74 65 73 74 5f "SELECT id,test_
8f80: 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 id,category,vari
8f90: 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 70 65 63 able,value,expec
8fa0: 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f ted,tol,units,co
8fb0: 6d 6d 65 6e 74 2c 73 74 61 74 75 73 2c 74 79 70 mment,status,typ
8fc0: 65 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 e FROM test_data
8fd0: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f WHERE test_id=?
8fe0: 20 41 4e 44 20 63 61 74 65 67 6f 72 79 20 4c 49 AND category LI
8ff0: 4b 45 20 3f 20 4f 52 44 45 52 20 42 59 20 63 61 KE ? ORDER BY ca
9000: 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 3b tegory,variable;
9010: 22 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f " test-id catego
9020: 72 79 70 61 74 74 29 0a 20 20 20 20 28 72 65 76 rypatt). (rev
9030: 65 72 73 65 20 72 65 73 29 29 29 0a 0a 28 64 65 erse res)))..(de
9040: 66 69 6e 65 20 28 64 62 3a 6c 6f 61 64 2d 74 65 fine (db:load-te
9050: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
9060: 69 64 29 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20 id). (let loop
9070: 28 28 6c 69 6e 20 28 72 65 61 64 2d 6c 69 6e 65 ((lin (read-line
9080: 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 ))). (if (not
9090: 20 28 65 6f 66 2d 6f 62 6a 65 63 74 3f 20 6c 69 (eof-object? li
90a0: 6e 29 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 n))..(begin.. (
90b0: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 6c 69 debug:print 4 li
90c0: 6e 29 0a 09 20 20 28 72 64 62 3a 63 73 76 2d 3e n).. (rdb:csv->
90d0: 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 test-data db tes
90e0: 74 2d 69 64 20 6c 69 6e 29 0a 09 20 20 28 6c 6f t-id lin).. (lo
90f0: 6f 70 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 op (read-line)))
9100: 29 29 0a 20 20 3b 3b 20 72 6f 6c 6c 20 75 70 20 )). ;; roll up
9110: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 the current resu
9120: 6c 74 73 2e 0a 20 20 3b 3b 20 46 49 58 4d 45 3a lts.. ;; FIXME:
9130: 20 41 64 64 20 74 68 65 20 73 74 61 74 75 73 20 Add the status
9140: 74 6f 20 0a 20 20 28 72 64 62 3a 74 65 73 74 2d to . (rdb:test-
9150: 64 61 74 61 2d 72 6f 6c 6c 75 70 20 64 62 20 74 data-rollup db t
9160: 65 73 74 2d 69 64 20 23 66 29 29 0a 0a 3b 3b 20 est-id #f))..;;
9170: 57 41 52 4e 49 4e 47 3a 20 44 6f 20 4e 4f 54 20 WARNING: Do NOT
9180: 63 61 6c 6c 20 74 68 69 73 20 66 6f 72 20 74 68 call this for th
9190: 65 20 70 61 72 65 6e 74 20 74 65 73 74 20 6f 6e e parent test on
91a0: 20 61 6e 20 69 74 65 72 61 74 65 64 20 74 65 73 an iterated tes
91b0: 74 0a 3b 3b 20 52 6f 6c 6c 20 75 70 20 74 65 73 t.;; Roll up tes
91c0: 74 5f 64 61 74 61 20 70 61 73 73 2f 66 61 69 6c t_data pass/fail
91d0: 20 72 65 73 75 6c 74 73 0a 3b 3b 20 6c 6f 6f 6b results.;; look
91e0: 20 61 74 20 74 68 65 20 74 65 73 74 5f 64 61 74 at the test_dat
91f0: 61 20 73 74 61 74 75 73 20 66 69 65 6c 64 2c 20 a status field,
9200: 0a 3b 3b 20 20 20 20 69 66 20 61 6c 6c 20 61 72 .;; if all ar
9210: 65 20 70 61 73 73 20 28 61 6e 79 20 63 61 73 65 e pass (any case
9220: 29 20 61 6e 64 20 74 68 65 20 74 65 73 74 20 73 ) and the test s
9230: 74 61 74 75 73 20 69 73 20 50 41 53 53 20 6f 72 tatus is PASS or
9240: 20 4e 55 4c 4c 20 6f 72 20 27 27 20 74 68 65 6e NULL or '' then
9250: 20 73 65 74 20 74 65 73 74 20 73 74 61 74 75 73 set test status
9260: 20 74 6f 20 50 41 53 53 2e 0a 3b 3b 20 20 20 20 to PASS..;;
9270: 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 if one or more a
9280: 72 65 20 66 61 69 6c 20 28 61 6e 79 20 63 61 73 re fail (any cas
9290: 65 29 20 74 68 65 6e 20 73 65 74 20 74 65 73 74 e) then set test
92a0: 20 73 74 61 74 75 73 20 74 6f 20 50 41 53 53 2c status to PASS,
92b0: 20 6e 6f 6e 20 22 70 61 73 73 22 20 6f 72 20 22 non "pass" or "
92c0: 66 61 69 6c 22 20 61 72 65 20 69 67 6e 6f 72 65 fail" are ignore
92d0: 64 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 d.(define (db:te
92e0: 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 20 64 st-data-rollup d
92f0: 62 20 74 65 73 74 2d 69 64 20 73 74 61 74 75 73 b test-id status
9300: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
9310: 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 cute . db .
9320: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 0a 20 "UPDATE tests .
9330: 20 20 20 20 20 53 45 54 20 66 61 69 6c 5f 63 6f SET fail_co
9340: 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e unt=(SELECT coun
9350: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 5f t(id) FROM test_
9360: 64 61 74 61 20 57 48 45 52 45 20 74 65 73 74 5f data WHERE test_
9370: 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 73 20 id=? AND status
9380: 6c 69 6b 65 20 27 66 61 69 6c 27 29 2c 0a 20 20 like 'fail'),.
9390: 20 20 20 20 20 20 20 20 70 61 73 73 5f 63 6f 75 pass_cou
93a0: 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 nt=(SELECT count
93b0: 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 5f 64 (id) FROM test_d
93c0: 61 74 61 20 57 48 45 52 45 20 74 65 73 74 5f 69 ata WHERE test_i
93d0: 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 73 20 6c d=? AND status l
93e0: 69 6b 65 20 27 70 61 73 73 27 29 0a 20 20 20 20 ike 'pass').
93f0: 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 WHERE id=?;".
9400: 20 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 test-id test-i
9410: 64 20 74 65 73 74 2d 69 64 29 0a 20 20 3b 3b 20 d test-id). ;;
9420: 69 66 20 74 68 65 20 74 65 73 74 20 69 73 20 6e if the test is n
9430: 6f 74 20 46 41 49 4c 20 74 68 65 6e 20 73 65 74 ot FAIL then set
9440: 20 73 74 61 74 75 73 20 62 61 73 65 64 20 6f 6e status based on
9450: 20 74 68 65 20 66 61 69 6c 20 61 6e 64 20 70 61 the fail and pa
9460: 73 73 20 63 6f 75 6e 74 73 2e 0a 20 20 28 74 68 ss counts.. (th
9470: 72 65 61 64 2d 73 6c 65 65 70 21 20 31 29 0a 20 read-sleep! 1).
9480: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
9490: 65 0a 20 20 20 64 62 20 20 20 3b 3b 3b 20 4e 4f e. db ;;; NO
94a0: 54 45 3a 20 53 68 6f 75 6c 64 20 74 68 69 73 20 TE: Should this
94b0: 62 65 20 57 41 52 4e 2c 46 41 49 4c 3f 20 41 20 be WARN,FAIL? A
94c0: 57 41 52 4e 20 69 73 20 6e 6f 74 20 61 20 46 41 WARN is not a FA
94d0: 49 4c 3f 3f 3f 3f 3f 20 42 55 47 20 46 49 58 4d IL????? BUG FIXM
94e0: 45 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 E. "UPDATE tes
94f0: 74 73 0a 20 20 20 20 20 20 53 45 54 20 73 74 61 ts. SET sta
9500: 74 75 73 3d 43 41 53 45 20 57 48 45 4e 20 28 53 tus=CASE WHEN (S
9510: 45 4c 45 43 54 20 66 61 69 6c 5f 63 6f 75 6e 74 ELECT fail_count
9520: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
9530: 45 20 69 64 3d 3f 29 20 3e 20 30 20 0a 20 20 20 E id=?) > 0 .
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9550: 20 20 20 20 20 20 54 48 45 4e 20 27 46 41 49 4c THEN 'FAIL
9560: 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 '.
9570: 20 20 20 20 20 20 20 20 57 48 45 4e 20 28 53 45 WHEN (SE
9580: 4c 45 43 54 20 70 61 73 73 5f 63 6f 75 6e 74 20 LECT pass_count
9590: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
95a0: 20 69 64 3d 3f 29 20 3e 20 30 20 41 4e 44 20 0a id=?) > 0 AND .
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95c0: 20 20 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 (SELE
95d0: 43 54 20 73 74 61 74 75 73 20 46 52 4f 4d 20 74 CT status FROM t
95e0: 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 29 ests WHERE id=?)
95f0: 20 4e 4f 54 20 49 4e 20 28 27 57 41 52 4e 27 2c NOT IN ('WARN',
9600: 27 46 41 49 4c 27 29 0a 20 20 20 20 20 20 20 20 'FAIL').
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9620: 20 54 48 45 4e 20 27 50 41 53 53 27 0a 20 20 20 THEN 'PASS'.
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9640: 20 20 20 45 4c 53 45 20 73 74 61 74 75 73 0a 20 ELSE status.
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9660: 20 45 4e 44 20 57 48 45 52 45 20 69 64 3d 3f 3b END WHERE id=?;
9670: 22 0a 20 20 20 74 65 73 74 2d 69 64 20 74 65 73 ". test-id tes
9680: 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 73 t-id test-id tes
9690: 74 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 t-id))..(define
96a0: 28 64 62 3a 67 65 74 2d 70 72 65 76 2d 74 6f 6c (db:get-prev-tol
96b0: 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 -for-test db tes
96c0: 74 2d 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 t-id category va
96d0: 72 69 61 62 6c 65 29 0a 20 20 3b 3b 20 46 69 6e riable). ;; Fin
96e0: 69 73 68 20 6d 65 3f 0a 20 20 28 76 61 6c 75 65 ish me?. (value
96f0: 73 20 23 66 20 23 66 20 23 66 29 29 0a 0a 3b 3b s #f #f #f))..;;
9700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9740: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 53 20 54 20 45 20 ======.;; S T E
9750: 50 20 53 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d P S .;;=========
9760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 =============..(
97a0: 64 65 66 69 6e 65 20 28 64 62 3a 73 74 65 70 2d define (db:step-
97b0: 67 65 74 2d 74 69 6d 65 2d 61 73 2d 73 74 72 69 get-time-as-stri
97c0: 6e 67 20 76 65 63 29 0a 20 20 28 73 65 63 6f 6e ng vec). (secon
97d0: 64 73 2d 3e 74 69 6d 65 2d 73 74 72 69 6e 67 20 ds->time-string
97e0: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 (db:step-get-eve
97f0: 6e 74 5f 74 69 6d 65 20 76 65 63 29 29 29 0a 0a nt_time vec)))..
9800: 3b 3b 20 64 62 2d 67 65 74 2d 74 65 73 74 2d 73 ;; db-get-test-s
9810: 74 65 70 73 2d 66 6f 72 2d 72 75 6e 0a 28 64 65 teps-for-run.(de
9820: 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 73 74 65 fine (db:get-ste
9830: 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 ps-for-test db t
9840: 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 est-id). (let (
9850: 28 72 65 73 20 27 28 29 29 29 0a 20 20 20 20 28 (res '())). (
9860: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
9870: 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 -row . (lamb
9880: 64 61 20 28 69 64 20 74 65 73 74 2d 69 64 20 73 da (id test-id s
9890: 74 65 70 6e 61 6d 65 20 73 74 61 74 65 20 73 74 tepname state st
98a0: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
98b0: 6c 6f 67 66 69 6c 65 29 0a 20 20 20 20 20 20 20 logfile).
98c0: 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 (set! res (cons
98d0: 28 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 2d (vector id test-
98e0: 69 64 20 73 74 65 70 6e 61 6d 65 20 73 74 61 74 id stepname stat
98f0: 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 e status event-t
9900: 69 6d 65 20 28 69 66 20 28 73 74 72 69 6e 67 3f ime (if (string?
9910: 20 6c 6f 67 66 69 6c 65 29 20 6c 6f 67 66 69 6c logfile) logfil
9920: 65 20 22 22 29 29 20 72 65 73 29 29 29 0a 20 20 e "")) res))).
9930: 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 db. "SELE
9940: 43 54 20 69 64 2c 74 65 73 74 5f 69 64 2c 73 74 CT id,test_id,st
9950: 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 epname,state,sta
9960: 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 6c tus,event_time,l
9970: 6f 67 66 69 6c 65 20 46 52 4f 4d 20 74 65 73 74 ogfile FROM test
9980: 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 65 73 _steps WHERE tes
9990: 74 5f 69 64 3d 3f 20 4f 52 44 45 52 20 42 59 20 t_id=? ORDER BY
99a0: 69 64 20 41 53 43 3b 22 20 3b 3b 20 65 76 65 6e id ASC;" ;; even
99b0: 74 5f 74 69 6d 65 20 44 45 53 43 2c 69 64 20 41 t_time DESC,id A
99c0: 53 43 3b 0a 20 20 20 20 20 74 65 73 74 2d 69 64 SC;. test-id
99d0: 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 20 72 ). (reverse r
99e0: 65 73 29 29 29 0a 0a 3b 3b 20 67 65 74 20 61 20 es)))..;; get a
99f0: 70 72 65 74 74 79 20 74 61 62 6c 65 20 74 6f 20 pretty table to
9a00: 73 75 6d 6d 61 72 69 7a 65 20 73 74 65 70 73 0a summarize steps.
9a10: 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 ;;.(define (db:g
9a20: 65 74 2d 73 74 65 70 73 2d 74 61 62 6c 65 20 64 et-steps-table d
9a30: 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 b test-id). (le
9a40: 74 20 28 28 73 74 65 70 73 20 20 20 28 64 62 3a t ((steps (db:
9a50: 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 65 get-steps-for-te
9a60: 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 29 29 st db test-id)))
9a70: 0a 20 20 20 20 3b 3b 20 6f 72 67 61 6e 69 73 65 . ;; organise
9a80: 20 74 68 65 20 73 74 65 70 73 20 66 6f 72 20 62 the steps for b
9a90: 65 74 74 65 72 20 72 65 61 64 61 62 69 6c 69 74 etter readabilit
9aa0: 79 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 y. (let ((res
9ab0: 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c (make-hash-tabl
9ac0: 65 29 29 29 0a 20 20 20 20 20 20 28 66 6f 72 2d e))). (for-
9ad0: 65 61 63 68 20 0a 20 20 20 20 20 20 20 28 6c 61 each . (la
9ae0: 6d 62 64 61 20 28 73 74 65 70 29 0a 09 20 28 64 mbda (step).. (d
9af0: 65 62 75 67 3a 70 72 69 6e 74 20 36 20 22 73 74 ebug:print 6 "st
9b00: 65 70 3d 22 20 73 74 65 70 29 0a 09 20 28 6c 65 ep=" step).. (le
9b10: 74 20 28 28 72 65 63 6f 72 64 20 28 68 61 73 68 t ((record (hash
9b20: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 -table-ref/defau
9b30: 6c 74 20 0a 09 09 09 72 65 73 20 0a 09 09 09 28 lt ....res ....(
9b40: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 db:step-get-step
9b50: 6e 61 6d 65 20 73 74 65 70 29 20 0a 09 09 09 3b name step) ....;
9b60: 3b 20 20 20 20 20 20 20 20 73 74 65 70 6e 61 6d ; stepnam
9b70: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e
9b80: 20 73 74 61 72 74 20 65 6e 64 20 73 74 61 74 75 start end statu
9b90: 73 20 20 20 20 0a 09 09 09 28 76 65 63 74 6f 72 s ....(vector
9ba0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
9bb0: 65 70 6e 61 6d 65 20 73 74 65 70 29 20 22 22 20 epname step) ""
9bc0: 20 20 22 22 20 22 22 20 20 20 20 20 22 22 20 22 "" "" "" "
9bd0: 22 29 29 29 29 0a 09 20 20 20 28 64 65 62 75 67 ")))).. (debug
9be0: 3a 70 72 69 6e 74 20 36 20 22 72 65 63 6f 72 64 :print 6 "record
9bf0: 28 62 65 66 6f 72 65 29 20 3d 20 22 20 72 65 63 (before) = " rec
9c00: 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 3a 20 20 ord ...."\nid:
9c10: 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d " (db:step-
9c20: 67 65 74 2d 69 64 20 73 74 65 70 29 0a 09 09 09 get-id step)....
9c30: 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 22 20 28 "\nstepname: " (
9c40: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 db:step-get-step
9c50: 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 09 22 5c name step)...."\
9c60: 6e 73 74 61 74 65 3a 20 20 20 20 22 20 28 64 62 nstate: " (db
9c70: 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 :step-get-state
9c80: 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 step)...."\nstat
9c90: 75 73 3a 20 20 20 22 20 28 64 62 3a 73 74 65 70 us: " (db:step
9ca0: 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 -get-status step
9cb0: 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a 20 20 20 )...."\ntime:
9cc0: 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 " (db:step-get
9cd0: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 -event_time step
9ce0: 29 29 0a 09 20 20 20 28 63 61 73 65 20 28 73 74 )).. (case (st
9cf0: 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 64 62 ring->symbol (db
9d00: 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 :step-get-state
9d10: 73 74 65 70 29 29 0a 09 20 20 20 20 20 28 28 73 step)).. ((s
9d20: 74 61 72 74 29 28 76 65 63 74 6f 72 2d 73 65 74 tart)(vector-set
9d30: 21 20 72 65 63 6f 72 64 20 31 20 28 64 62 3a 73 ! record 1 (db:s
9d40: 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 tep-get-event_ti
9d50: 6d 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 me step))..
9d60: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
9d70: 63 6f 72 64 20 33 20 28 69 66 20 28 65 71 75 61 cord 3 (if (equa
9d80: 6c 3f 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 l? (vector-ref r
9d90: 65 63 6f 72 64 20 33 29 20 22 22 29 0a 09 09 09 ecord 3) "")....
9da0: 09 09 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 ..(db:step-get-s
9db0: 74 61 74 75 73 20 73 74 65 70 29 29 29 0a 09 20 tatus step)))..
9dc0: 20 20 20 20 20 28 69 66 20 28 3e 20 28 73 74 72 (if (> (str
9dd0: 69 6e 67 2d 6c 65 6e 67 74 68 20 28 64 62 3a 73 ing-length (db:s
9de0: 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 tep-get-logfile
9df0: 73 74 65 70 29 29 0a 09 09 20 20 20 20 20 30 29 step))... 0)
9e00: 0a 09 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 ... (vector-set
9e10: 21 20 72 65 63 6f 72 64 20 35 20 28 64 62 3a 73 ! record 5 (db:s
9e20: 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 tep-get-logfile
9e30: 73 74 65 70 29 29 29 29 0a 09 20 20 20 20 20 28 step)))).. (
9e40: 28 65 6e 64 29 20 20 0a 09 20 20 20 20 20 20 28 (end) .. (
9e50: 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f vector-set! reco
9e60: 72 64 20 32 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 rd 2 (any->numbe
9e70: 72 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 r (db:step-get-e
9e80: 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 vent_time step))
9e90: 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 ).. (vector
9ea0: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 28 -set! record 3 (
9eb0: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 db:step-get-stat
9ec0: 75 73 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 us step))..
9ed0: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
9ee0: 63 6f 72 64 20 34 20 28 6c 65 74 20 28 28 73 74 cord 4 (let ((st
9ef0: 61 72 74 74 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 artt (any->numbe
9f00: 72 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 r (vector-ref re
9f10: 63 6f 72 64 20 31 29 29 29 0a 09 09 09 09 09 20 cord 1)))......
9f20: 20 28 65 6e 64 74 20 20 20 28 61 6e 79 2d 3e 6e (endt (any->n
9f30: 75 6d 62 65 72 20 28 76 65 63 74 6f 72 2d 72 65 umber (vector-re
9f40: 66 20 72 65 63 6f 72 64 20 32 29 29 29 29 0a 09 f record 2))))..
9f50: 09 09 09 20 20 20 20 20 20 28 64 65 62 75 67 3a ... (debug:
9f60: 70 72 69 6e 74 20 34 20 22 72 65 63 6f 72 64 5b print 4 "record[
9f70: 31 5d 3d 22 20 28 76 65 63 74 6f 72 2d 72 65 66 1]=" (vector-ref
9f80: 20 72 65 63 6f 72 64 20 31 29 20 0a 09 09 09 09 record 1) .....
9f90: 09 09 20 20 20 22 2c 20 73 74 61 72 74 74 3d 22 .. ", startt="
9fa0: 20 73 74 61 72 74 74 20 22 2c 20 65 6e 64 74 3d startt ", endt=
9fb0: 22 20 65 6e 64 74 0a 09 09 09 09 09 09 20 20 20 " endt.......
9fc0: 22 2c 20 67 65 74 2d 73 74 61 74 75 73 3a 20 22 ", get-status: "
9fd0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
9fe0: 61 74 75 73 20 73 74 65 70 29 29 0a 09 09 09 09 atus step)).....
9ff0: 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 (if (and (
a000: 6e 75 6d 62 65 72 3f 20 73 74 61 72 74 74 29 28 number? startt)(
a010: 6e 75 6d 62 65 72 3f 20 65 6e 64 74 29 29 0a 09 number? endt))..
a020: 09 09 09 09 20 20 28 73 65 63 6f 6e 64 73 2d 3e .... (seconds->
a030: 68 72 2d 6d 69 6e 2d 73 65 63 20 28 2d 20 65 6e hr-min-sec (- en
a040: 64 74 20 73 74 61 72 74 74 29 29 20 22 2d 31 22 dt startt)) "-1"
a050: 29 29 29 0a 09 20 20 20 20 20 20 28 69 66 20 28 ))).. (if (
a060: 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 > (string-length
a070: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f (db:step-get-lo
a080: 67 66 69 6c 65 20 73 74 65 70 29 29 0a 09 09 20 gfile step))...
a090: 20 20 20 20 30 29 0a 09 09 20 20 28 76 65 63 74 0)... (vect
a0a0: 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 35 or-set! record 5
a0b0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f (db:step-get-lo
a0c0: 67 66 69 6c 65 20 73 74 65 70 29 29 29 29 0a 09 gfile step))))..
a0d0: 20 20 20 20 20 28 65 6c 73 65 0a 09 20 20 20 20 (else..
a0e0: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
a0f0: 65 63 6f 72 64 20 32 20 28 64 62 3a 73 74 65 70 ecord 2 (db:step
a100: 2d 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 -get-state step)
a110: 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 ).. (vector
a120: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 28 -set! record 3 (
a130: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 db:step-get-stat
a140: 75 73 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 us step))..
a150: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
a160: 63 6f 72 64 20 34 20 28 64 62 3a 73 74 65 70 2d cord 4 (db:step-
a170: 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 get-event_time s
a180: 74 65 70 29 29 29 29 0a 09 20 20 20 28 68 61 73 tep)))).. (has
a190: 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 72 65 73 h-table-set! res
a1a0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
a1b0: 65 70 6e 61 6d 65 20 73 74 65 70 29 20 72 65 63 epname step) rec
a1c0: 6f 72 64 29 0a 09 20 20 20 28 64 65 62 75 67 3a ord).. (debug:
a1d0: 70 72 69 6e 74 20 36 20 22 72 65 63 6f 72 64 28 print 6 "record(
a1e0: 61 66 74 65 72 29 20 20 3d 20 22 20 72 65 63 6f after) = " reco
a1f0: 72 64 20 0a 09 09 09 22 5c 6e 69 64 3a 20 20 20 rd ...."\nid:
a200: 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 " (db:step-g
a210: 65 74 2d 69 64 20 73 74 65 70 29 0a 09 09 09 22 et-id step)...."
a220: 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 22 20 28 64 \nstepname: " (d
a230: 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 6e b:step-get-stepn
a240: 61 6d 65 20 73 74 65 70 29 0a 09 09 09 22 5c 6e ame step)...."\n
a250: 73 74 61 74 65 3a 20 20 20 20 22 20 28 64 62 3a state: " (db:
a260: 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 73 step-get-state s
a270: 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 75 tep)...."\nstatu
a280: 73 3a 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d s: " (db:step-
a290: 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 get-status step)
a2a0: 0a 09 09 09 22 5c 6e 74 69 6d 65 3a 20 20 20 20 ...."\ntime:
a2b0: 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d " (db:step-get-
a2c0: 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 event_time step)
a2d0: 29 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 28 65 ))). ;; (e
a2e0: 6c 73 65 20 20 20 28 76 65 63 74 6f 72 2d 73 65 lse (vector-se
a2f0: 74 21 20 72 65 63 6f 72 64 20 31 20 28 64 62 3a t! record 1 (db:
a300: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
a310: 69 6d 65 20 73 74 65 70 29 29 29 0a 20 20 20 20 ime step))).
a320: 20 20 20 28 73 6f 72 74 20 73 74 65 70 73 20 28 (sort steps (
a330: 6c 61 6d 62 64 61 20 28 61 20 62 29 28 3c 20 28 lambda (a b)(< (
a340: 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e db:step-get-even
a350: 74 5f 74 69 6d 65 20 61 29 28 64 62 3a 73 74 65 t_time a)(db:ste
a360: 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 p-get-event_time
a370: 20 62 29 29 29 29 29 0a 20 20 20 20 20 20 72 65 b))))). re
a380: 73 29 29 29 0a 0a 3b 3b 20 74 68 65 20 6e 65 77 s)))..;; the new
a390: 20 70 72 65 72 65 71 73 20 63 61 6c 63 75 6c 61 prereqs calcula
a3a0: 74 69 6f 6e 2c 20 6c 6f 6f 6b 73 20 61 6c 73 6f tion, looks also
a3b0: 20 61 74 20 69 74 65 6d 70 61 74 68 20 69 66 20 at itempath if
a3c0: 73 70 65 63 69 66 69 65 64 0a 3b 3b 20 61 6c 6c specified.;; all
a3d0: 20 70 72 65 72 65 71 73 20 6d 75 73 74 20 62 65 prereqs must be
a3e0: 20 6d 65 74 3a 0a 3b 3b 20 20 20 20 69 66 20 70 met:.;; if p
a3f0: 72 65 72 65 71 20 74 65 73 74 20 77 69 74 68 20 rereq test with
a400: 69 74 65 6d 70 61 74 68 3d 27 27 20 69 73 20 43 itempath='' is C
a410: 4f 4d 50 4c 45 54 45 44 20 61 6e 64 20 50 41 53 OMPLETED and PAS
a420: 53 2c 20 57 41 52 4e 2c 20 43 48 45 43 4b 2c 20 S, WARN, CHECK,
a430: 6f 72 20 57 41 49 56 45 44 20 74 68 65 6e 20 70 or WAIVED then p
a440: 72 65 72 65 71 20 69 73 20 6d 65 74 0a 3b 3b 20 rereq is met.;;
a450: 20 20 20 69 66 20 70 72 65 72 65 71 20 74 65 73 if prereq tes
a460: 74 20 77 69 74 68 20 69 74 65 6d 70 61 74 68 3d t with itempath=
a470: 72 65 66 2d 69 74 65 6d 2d 70 61 74 68 20 61 6e ref-item-path an
a480: 64 20 43 4f 4d 50 4c 45 54 45 44 20 77 69 74 68 d COMPLETED with
a490: 20 50 41 53 53 2c 20 57 41 52 4e 2c 20 43 48 45 PASS, WARN, CHE
a4a0: 43 4b 2c 20 6f 72 20 57 41 49 56 45 44 20 74 68 CK, or WAIVED th
a4b0: 65 6e 20 70 72 65 72 65 71 20 69 73 20 6d 65 74 en prereq is met
a4c0: 0a 3b 3b 0a 3b 3b 20 4e 6f 74 65 3a 20 64 6f 20 .;;.;; Note: do
a4d0: 6e 6f 74 20 63 6f 6e 76 65 72 74 20 74 6f 20 72 not convert to r
a4e0: 65 6d 6f 74 65 20 61 73 20 69 74 20 63 61 6c 6c emote as it call
a4f0: 73 20 72 65 6d 6f 74 65 20 75 6e 64 65 72 20 74 s remote under t
a500: 68 65 20 68 6f 6f 64 0a 3b 3b 0a 28 64 65 66 69 he hood.;;.(defi
a510: 6e 65 20 28 64 62 3a 67 65 74 2d 70 72 65 72 65 ne (db:get-prere
a520: 71 73 2d 6e 6f 74 2d 6d 65 74 20 64 62 20 72 75 qs-not-met db ru
a530: 6e 2d 69 64 20 77 61 69 74 6f 6e 73 20 72 65 66 n-id waitons ref
a540: 2d 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69 -item-path). (i
a550: 66 20 28 6f 72 20 28 6e 6f 74 20 77 61 69 74 6f f (or (not waito
a560: 6e 73 29 0a 09 20 20 28 6e 75 6c 6c 3f 20 77 61 ns).. (null? wa
a570: 69 74 6f 6e 73 29 29 0a 20 20 20 20 20 20 27 28 itons)). '(
a580: 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 ). (let* ((
a590: 75 6e 6d 65 74 2d 70 72 65 2d 72 65 71 73 20 27 unmet-pre-reqs '
a5a0: 28 29 29 0a 09 20 20 20 20 20 28 72 65 73 75 6c ()).. (resul
a5b0: 74 20 20 20 20 20 20 20 20 20 27 28 29 29 29 0a t '())).
a5c0: 09 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 28 6c .(for-each .. (l
a5d0: 61 6d 62 64 61 20 28 77 61 69 74 6f 6e 74 65 73 ambda (waitontes
a5e0: 74 2d 6e 61 6d 65 29 0a 09 20 20 20 3b 3b 20 62 t-name).. ;; b
a5f0: 79 20 67 65 74 74 69 6e 67 20 74 68 65 20 74 65 y getting the te
a600: 73 74 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e sts with matchin
a610: 67 20 6e 61 6d 65 20 77 65 20 61 72 65 20 6c 6f g name we are lo
a620: 6f 6b 69 6e 67 20 6f 6e 6c 79 20 61 74 20 74 68 oking only at th
a630: 65 20 6d 61 74 63 68 69 6e 67 20 74 65 73 74 20 e matching test
a640: 0a 09 20 20 20 3b 3b 20 61 6e 64 20 72 65 6c 61 .. ;; and rela
a650: 74 65 64 20 73 75 62 20 69 74 65 6d 73 0a 09 20 ted sub items..
a660: 20 20 28 6c 65 74 20 28 28 74 65 73 74 73 20 20 (let ((tests
a670: 20 20 20 20 20 20 20 20 20 20 20 28 72 64 62 3a (rdb:
a680: 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 get-tests-for-ru
a690: 6e 20 64 62 20 72 75 6e 2d 69 64 20 77 61 69 74 n db run-id wait
a6a0: 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 23 66 20 27 ontest-name #f '
a6b0: 28 29 20 27 28 29 29 29 0a 09 09 20 28 65 76 65 () '()))... (eve
a6c0: 72 2d 73 65 65 6e 20 20 20 20 20 20 20 20 20 23 r-seen #
a6d0: 66 29 0a 09 09 20 28 70 61 72 65 6e 74 2d 77 61 f)... (parent-wa
a6e0: 69 74 6f 6e 2d 6d 65 74 20 23 66 29 0a 09 09 20 iton-met #f)...
a6f0: 28 69 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 (item-waiton-met
a700: 20 20 20 23 66 29 29 0a 09 20 20 20 20 20 28 66 #f)).. (f
a710: 6f 72 2d 65 61 63 68 20 0a 09 20 20 20 20 20 20 or-each ..
a720: 28 6c 61 6d 62 64 61 20 28 74 65 73 74 29 0a 09 (lambda (test)..
a730: 09 3b 3b 20 28 69 66 20 28 65 71 75 61 6c 3f 20 .;; (if (equal?
a740: 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 waitontest-name
a750: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 (db:test-get-tes
a760: 74 6e 61 6d 65 20 74 65 73 74 29 29 20 3b 3b 20 tname test)) ;;
a770: 62 79 20 64 65 66 69 6e 74 69 6f 6e 20 74 68 69 by defintion thi
a780: 73 20 68 61 64 20 62 65 74 74 65 72 20 62 65 20 s had better be
a790: 74 72 75 65 20 2e 2e 2e 0a 09 09 28 6c 65 74 2a true ......(let*
a7a0: 20 28 28 73 74 61 74 65 20 20 20 20 20 20 20 20 ((state
a7b0: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 (db:test-ge
a7c0: 74 2d 73 74 61 74 65 20 74 65 73 74 29 29 0a 09 t-state test))..
a7d0: 09 20 20 20 20 20 20 20 28 73 74 61 74 75 73 20 . (status
a7e0: 20 20 20 20 20 20 20 20 20 20 20 28 64 62 3a 74 (db:t
a7f0: 65 73 74 2d 67 65 74 2d 73 74 61 74 75 73 20 74 est-get-status t
a800: 65 73 74 29 29 0a 09 09 20 20 20 20 20 20 20 28 est))... (
a810: 69 74 65 6d 2d 70 61 74 68 20 20 20 20 20 20 20 item-path
a820: 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 (db:test-get-i
a830: 74 65 6d 2d 70 61 74 68 20 74 65 73 74 29 29 0a tem-path test)).
a840: 09 09 20 20 20 20 20 20 20 28 69 73 2d 63 6f 6d .. (is-com
a850: 70 6c 65 74 65 64 20 20 20 20 20 20 28 65 71 75 pleted (equ
a860: 61 6c 3f 20 73 74 61 74 65 20 22 43 4f 4d 50 4c al? state "COMPL
a870: 45 54 45 44 22 29 29 0a 09 09 20 20 20 20 20 20 ETED"))...
a880: 20 28 69 73 2d 6f 6b 20 20 20 20 20 20 20 20 20 (is-ok
a890: 20 20 20 20 28 6d 65 6d 62 65 72 20 73 74 61 74 (member stat
a8a0: 75 73 20 27 28 22 50 41 53 53 22 20 22 57 41 52 us '("PASS" "WAR
a8b0: 4e 22 20 22 43 48 45 43 4b 22 20 22 57 41 49 56 N" "CHECK" "WAIV
a8c0: 45 44 22 29 29 29 0a 09 09 20 20 20 20 20 20 20 ED")))...
a8d0: 28 73 61 6d 65 2d 69 74 65 6d 70 61 74 68 20 20 (same-itempath
a8e0: 20 20 20 28 65 71 75 61 6c 3f 20 72 65 66 2d 69 (equal? ref-i
a8f0: 74 65 6d 2d 70 61 74 68 20 69 74 65 6d 2d 70 61 tem-path item-pa
a900: 74 68 29 29 29 0a 09 09 20 20 28 73 65 74 21 20 th)))... (set!
a910: 65 76 65 72 2d 73 65 65 6e 20 23 74 29 0a 09 09 ever-seen #t)...
a920: 20 20 28 63 6f 6e 64 0a 09 09 20 20 20 3b 3b 20 (cond... ;;
a930: 63 61 73 65 20 31 2c 20 6e 6f 6e 2d 69 74 65 6d case 1, non-item
a940: 20 28 70 61 72 65 6e 74 20 74 65 73 74 29 20 69 (parent test) i
a950: 73 20 0a 09 09 20 20 20 28 28 61 6e 64 20 28 65 s ... ((and (e
a960: 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 qual? item-path
a970: 22 22 29 20 3b 3b 20 74 68 69 73 20 69 73 20 74 "") ;; this is t
a980: 68 65 20 70 61 72 65 6e 74 20 74 65 73 74 0a 09 he parent test..
a990: 09 09 20 69 73 2d 63 6f 6d 70 6c 65 74 65 64 0a .. is-completed.
a9a0: 09 09 09 20 69 73 2d 6f 6b 29 0a 09 09 20 20 20 ... is-ok)...
a9b0: 20 28 73 65 74 21 20 70 61 72 65 6e 74 2d 77 61 (set! parent-wa
a9c0: 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 0a 09 09 iton-met #t))...
a9d0: 20 20 20 28 28 61 6e 64 20 73 61 6d 65 2d 69 74 ((and same-it
a9e0: 65 6d 70 61 74 68 0a 09 09 09 20 69 73 2d 63 6f empath.... is-co
a9f0: 6d 70 6c 65 74 65 64 0a 09 09 09 20 69 73 2d 6f mpleted.... is-o
aa00: 6b 29 0a 09 09 20 20 20 20 28 73 65 74 21 20 69 k)... (set! i
aa10: 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 tem-waiton-met #
aa20: 74 29 29 29 29 29 0a 09 20 20 20 20 20 20 74 65 t))))).. te
aa30: 73 74 73 29 0a 09 20 20 20 20 20 28 69 66 20 28 sts).. (if (
aa40: 6e 6f 74 20 28 6f 72 20 70 61 72 65 6e 74 2d 77 not (or parent-w
aa50: 61 69 74 6f 6e 2d 6d 65 74 20 69 74 65 6d 2d 77 aiton-met item-w
aa60: 61 69 74 6f 6e 2d 6d 65 74 29 29 0a 09 09 20 28 aiton-met))... (
aa70: 73 65 74 21 20 72 65 73 75 6c 74 20 28 63 6f 6e set! result (con
aa80: 73 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d s waitontest-nam
aa90: 65 20 72 65 73 75 6c 74 29 29 29 0a 09 20 20 20 e result)))..
aaa0: 20 20 3b 3b 20 69 66 20 74 68 65 20 74 65 73 74 ;; if the test
aab0: 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 20 74 68 is not found th
aac0: 65 6e 20 63 6c 65 61 72 6c 79 20 74 68 65 20 77 en clearly the w
aad0: 61 69 74 6f 6e 20 69 73 20 6e 6f 74 20 6d 65 74 aiton is not met
aae0: 2e 2e 2e 0a 09 20 20 20 20 20 28 69 66 20 28 6e ..... (if (n
aaf0: 6f 74 20 65 76 65 72 2d 73 65 65 6e 29 28 73 65 ot ever-seen)(se
ab00: 74 21 20 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 t! result (cons
ab10: 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 waitontest-name
ab20: 72 65 73 75 6c 74 29 29 29 29 29 0a 09 77 61 69 result)))))..wai
ab30: 74 6f 6e 73 29 0a 20 20 20 20 20 20 28 64 65 6c tons). (del
ab40: 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 72 ete-duplicates r
ab50: 65 73 75 6c 74 29 29 29 29 0a 0a 28 64 65 66 69 esult))))..(defi
ab60: 6e 65 20 28 64 62 3a 74 65 73 74 73 74 65 70 2d ne (db:teststep-
ab70: 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 74 set-status! db t
ab80: 65 73 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d est-id teststep-
ab90: 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 name state-in st
aba0: 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 atus-in item-pat
abb0: 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c h comment logfil
abc0: 65 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 6e e). (debug:prin
abd0: 74 20 34 20 22 74 65 73 74 2d 69 64 3a 20 22 20 t 4 "test-id: "
abe0: 74 65 73 74 2d 69 64 20 22 20 74 65 73 74 73 74 test-id " testst
abf0: 65 70 2d 6e 61 6d 65 3a 20 22 20 74 65 73 74 73 ep-name: " tests
ac00: 74 65 70 2d 6e 61 6d 65 29 0a 20 20 28 6c 65 74 tep-name). (let
ac10: 2a 20 28 28 73 74 61 74 65 20 20 20 20 20 28 63 * ((state (c
ac20: 68 65 63 6b 2d 76 61 6c 69 64 2d 69 74 65 6d 73 heck-valid-items
ac30: 20 22 73 74 61 74 65 22 20 73 74 61 74 65 2d 69 "state" state-i
ac40: 6e 29 29 0a 09 20 28 73 74 61 74 75 73 20 20 20 n)).. (status
ac50: 20 28 63 68 65 63 6b 2d 76 61 6c 69 64 2d 69 74 (check-valid-it
ac60: 65 6d 73 20 22 73 74 61 74 75 73 22 20 73 74 61 ems "status" sta
ac70: 74 75 73 2d 69 6e 29 29 29 0a 20 20 20 20 28 69 tus-in))). (i
ac80: 66 20 28 6f 72 20 28 6e 6f 74 20 73 74 61 74 65 f (or (not state
ac90: 29 28 6e 6f 74 20 73 74 61 74 75 73 29 29 0a 09 )(not status))..
aca0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
acb0: 57 41 52 4e 49 4e 47 3a 20 49 6e 76 61 6c 69 64 WARNING: Invalid
acc0: 20 22 20 28 69 66 20 73 74 61 74 75 73 20 22 73 " (if status "s
acd0: 74 61 74 75 73 22 20 22 73 74 61 74 65 22 29 0a tatus" "state").
ace0: 09 09 20 20 20 20 20 22 20 76 61 6c 75 65 20 5c .. " value \
acf0: 22 22 20 28 69 66 20 73 74 61 74 75 73 20 73 74 "" (if status st
ad00: 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e ate-in status-in
ad10: 29 20 22 5c 22 2c 20 75 70 64 61 74 65 20 79 6f ) "\", update yo
ad20: 75 72 20 76 61 6c 69 64 76 61 6c 75 65 73 20 73 ur validvalues s
ad30: 65 63 74 69 6f 6e 20 69 6e 20 6d 65 67 61 74 65 ection in megate
ad40: 73 74 2e 63 6f 6e 66 69 67 22 29 29 0a 20 20 20 st.config")).
ad50: 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 (mutex-lock! *i
ad60: 6e 63 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a ncoming-mutex*).
ad70: 20 20 20 20 28 73 65 74 21 20 2a 69 6e 63 6f 6d (set! *incom
ad80: 69 6e 67 2d 64 61 74 61 2a 20 28 63 6f 6e 73 20 ing-data* (cons
ad90: 28 76 65 63 74 6f 72 20 27 73 74 65 70 2d 73 74 (vector 'step-st
ada0: 61 74 75 73 0a 09 09 09 09 09 28 63 75 72 72 65 atus......(curre
adb0: 6e 74 2d 73 65 63 6f 6e 64 73 29 0a 09 09 09 09 nt-seconds).....
adc0: 09 3b 3b 20 46 49 58 4d 45 20 2d 20 74 68 69 73 .;; FIXME - this
add0: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 70 64 61 should not upda
ade0: 74 65 20 74 68 65 20 6c 6f 67 66 69 6c 65 20 75 te the logfile u
adf0: 6e 6c 65 73 73 20 69 74 20 69 73 20 73 70 65 63 nless it is spec
ae00: 69 66 69 65 64 2e 0a 09 09 09 09 09 28 6c 69 73 ified.......(lis
ae10: 74 20 74 65 73 74 2d 69 64 20 74 65 73 74 73 74 t test-id testst
ae20: 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e ep-name state-in
ae30: 20 73 74 61 74 75 73 2d 69 6e 20 28 63 75 72 72 status-in (curr
ae40: 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 28 69 66 ent-seconds) (if
ae50: 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 comment comment
ae60: 20 22 22 29 20 28 69 66 20 6c 6f 67 66 69 6c 65 "") (if logfile
ae70: 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 29 0a 09 logfile "")))..
ae80: 09 09 09 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 ...*incoming-dat
ae90: 61 2a 29 29 0a 20 20 20 20 28 6d 75 74 65 78 2d a*)). (mutex-
aea0: 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e unlock! *incomin
aeb0: 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 20 28 69 g-mutex*). (i
aec0: 66 20 28 6e 6f 74 20 2a 63 61 63 68 65 2d 6f 6e f (not *cache-on
aed0: 2a 29 28 64 62 3a 77 72 69 74 65 2d 63 61 63 68 *)(db:write-cach
aee0: 65 64 2d 64 61 74 61 20 64 62 29 29 0a 20 20 20 ed-data db)).
aef0: 20 23 74 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d #t))..;;=======
af00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
af40: 3b 3b 20 45 78 74 72 61 63 74 20 6f 64 73 20 66 ;; Extract ods f
af50: 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 62 0a ile from the db.
af60: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
af70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
afa0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 75 6e ========..;; run
afb0: 73 70 61 74 74 20 69 73 20 61 20 63 6f 6d 6d 61 spatt is a comma
afc0: 20 64 65 6c 69 6d 69 74 65 64 20 6c 69 73 74 20 delimited list
afd0: 6f 66 20 72 75 6e 20 70 61 74 74 65 72 6e 73 0a of run patterns.
afe0: 3b 3b 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 ;; keypatt-alist
aff0: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 2a 61 must contain *a
b000: 6c 6c 2a 20 6b 65 79 73 20 77 69 74 68 20 61 6e ll* keys with an
b010: 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 74 74 associated patt
b020: 65 72 6e 3a 20 27 28 20 28 22 4b 45 59 31 22 20 ern: '( ("KEY1"
b030: 22 25 22 29 20 2e 2e 20 29 0a 28 64 65 66 69 6e "%") .. ).(defin
b040: 65 20 28 64 62 3a 65 78 74 72 61 63 74 2d 6f 64 e (db:extract-od
b050: 73 2d 66 69 6c 65 20 64 62 20 6f 75 74 70 75 74 s-file db output
b060: 66 69 6c 65 20 6b 65 79 70 61 74 74 2d 61 6c 69 file keypatt-ali
b070: 73 74 20 72 75 6e 73 70 61 74 74 20 70 61 74 68 st runspatt path
b080: 6d 6f 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 6b mod). (let* ((k
b090: 65 79 73 73 74 72 20 20 28 73 74 72 69 6e 67 2d eysstr (string-
b0a0: 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 intersperse (map
b0b0: 20 63 61 72 20 6b 65 79 70 61 74 74 2d 61 6c 69 car keypatt-ali
b0c0: 73 74 29 20 22 2c 22 29 29 0a 09 20 28 6b 65 79 st) ",")).. (key
b0d0: 71 72 79 20 20 20 28 73 74 72 69 6e 67 2d 69 6e qry (string-in
b0e0: 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 28 tersperse (map (
b0f0: 6c 61 6d 62 64 61 20 28 70 29 28 63 6f 6e 63 20 lambda (p)(conc
b100: 28 63 61 72 20 70 29 20 22 20 4c 49 4b 45 20 3f (car p) " LIKE ?
b110: 20 22 29 29 20 6b 65 79 70 61 74 74 2d 61 6c 69 ")) keypatt-ali
b120: 73 74 29 20 22 20 41 4e 44 20 22 29 29 0a 09 20 st) " AND "))..
b130: 28 6e 75 6d 6b 65 79 73 20 20 28 6c 65 6e 67 74 (numkeys (lengt
b140: 68 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 h keypatt-alist)
b150: 29 0a 09 20 28 74 65 73 74 2d 69 64 73 20 27 28 ).. (test-ids '(
b160: 29 29 0a 09 20 28 77 69 6e 64 6f 77 73 20 20 28 )).. (windows (
b170: 61 6e 64 20 70 61 74 68 6d 6f 64 20 28 73 75 62 and pathmod (sub
b180: 73 74 72 69 6e 67 2d 69 6e 64 65 78 20 22 5c 5c string-index "\\
b190: 22 20 70 61 74 68 6d 6f 64 29 29 29 0a 09 20 28 " pathmod))).. (
b1a0: 74 65 6d 70 64 69 72 20 20 28 63 6f 6e 63 20 22 tempdir (conc "
b1b0: 2f 74 6d 70 2f 22 20 28 63 75 72 72 65 6e 74 2d /tmp/" (current-
b1c0: 75 73 65 72 2d 6e 61 6d 65 29 20 22 2f 22 20 72 user-name) "/" r
b1d0: 75 6e 73 70 61 74 74 20 22 5f 22 20 28 72 61 6e unspatt "_" (ran
b1e0: 64 6f 6d 20 31 30 30 30 30 29 20 22 5f 22 20 28 dom 10000) "_" (
b1f0: 63 75 72 72 65 6e 74 2d 70 72 6f 63 65 73 73 2d current-process-
b200: 69 64 29 29 29 0a 09 20 28 72 75 6e 73 68 65 61 id))).. (runshea
b210: 64 65 72 20 28 61 70 70 65 6e 64 20 28 6c 69 73 der (append (lis
b220: 74 20 22 52 75 6e 20 49 64 22 20 22 52 75 6e 6e t "Run Id" "Runn
b230: 61 6d 65 22 29 20 3b 20 30 20 31 0a 09 09 09 20 ame") ; 0 1....
b240: 20 20 20 20 28 6d 61 70 20 63 61 72 20 6b 65 79 (map car key
b250: 70 61 74 74 2d 61 6c 69 73 74 29 20 20 20 3b 20 patt-alist) ;
b260: 2b 20 4e 20 3d 20 6c 65 6e 67 74 68 20 6b 65 79 + N = length key
b270: 70 61 74 74 2d 61 6c 69 73 74 0a 09 09 09 20 20 patt-alist....
b280: 20 20 20 28 6c 69 73 74 20 22 54 65 73 74 6e 61 (list "Testna
b290: 6d 65 22 20 20 20 20 20 20 20 20 20 20 3b 20 32 me" ; 2
b2a0: 0a 09 09 09 09 20 20 20 22 49 74 65 6d 20 50 61 ..... "Item Pa
b2b0: 74 68 22 20 20 20 20 20 20 20 20 20 3b 20 33 20 th" ; 3
b2c0: 0a 09 09 09 09 20 20 20 22 44 65 73 63 72 69 70 ..... "Descrip
b2d0: 74 69 6f 6e 22 20 20 20 20 20 20 20 3b 20 34 20 tion" ; 4
b2e0: 0a 09 09 09 09 20 20 20 22 53 74 61 74 65 22 20 ..... "State"
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 35 20 ; 5
b300: 0a 09 09 09 09 20 20 20 22 53 74 61 74 75 73 22 ..... "Status"
b310: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 36 20 ; 6
b320: 20 0a 09 09 09 09 20 20 20 22 46 69 6e 61 6c 20 ..... "Final
b330: 4c 6f 67 22 20 20 20 20 20 20 20 20 20 3b 20 37 Log" ; 7
b340: 20 0a 09 09 09 09 20 20 20 22 52 75 6e 20 44 75 ..... "Run Du
b350: 72 61 74 69 6f 6e 22 20 20 20 20 20 20 3b 20 38 ration" ; 8
b360: 20 0a 09 09 09 09 20 20 20 22 57 68 65 6e 20 52 ..... "When R
b370: 75 6e 22 20 20 20 20 20 20 20 20 20 20 3b 20 39 un" ; 9
b380: 20 0a 09 09 09 09 20 20 20 22 54 61 67 73 22 20 ..... "Tags"
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 ; 1
b3a0: 30 0a 09 09 09 09 20 20 20 22 52 75 6e 20 4f 77 0..... "Run Ow
b3b0: 6e 65 72 22 20 20 20 20 20 20 20 20 20 3b 20 31 ner" ; 1
b3c0: 31 0a 09 09 09 09 20 20 20 22 43 6f 6d 6d 65 6e 1..... "Commen
b3d0: 74 22 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 t" ; 1
b3e0: 32 0a 09 09 09 09 20 20 20 22 41 75 74 68 6f 72 2..... "Author
b3f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 " ; 1
b400: 33 0a 09 09 09 09 20 20 20 22 54 65 73 74 20 4f 3..... "Test O
b410: 77 6e 65 72 22 20 20 20 20 20 20 20 20 3b 20 31 wner" ; 1
b420: 34 0a 09 09 09 09 20 20 20 22 52 65 76 69 65 77 4..... "Review
b430: 65 64 22 20 20 20 20 20 20 20 20 20 20 3b 20 31 ed" ; 1
b440: 35 0a 09 09 09 09 20 20 20 22 44 69 73 6b 66 72 5..... "Diskfr
b450: 65 65 22 20 20 20 20 20 20 20 20 20 20 3b 20 31 ee" ; 1
b460: 36 0a 09 09 09 09 20 20 20 22 55 6e 61 6d 65 22 6..... "Uname"
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 ; 1
b480: 37 0a 09 09 09 09 20 20 20 22 52 75 6e 64 69 72 7..... "Rundir
b490: 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 " ; 1
b4a0: 38 0a 09 09 09 09 20 20 20 22 48 6f 73 74 22 20 8..... "Host"
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 31 ; 1
b4c0: 39 0a 09 09 09 09 20 20 20 22 43 70 75 20 4c 6f 9..... "Cpu Lo
b4d0: 61 64 22 20 20 20 20 20 20 20 20 20 20 3b 20 32 ad" ; 2
b4e0: 30 0a 09 09 09 09 20 20 20 29 29 29 0a 09 20 28 0..... ))).. (
b4f0: 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 72 75 results (list ru
b500: 6e 73 68 65 61 64 65 72 29 29 09 09 09 20 0a 09 nsheader))... ..
b510: 20 28 74 65 73 74 64 61 74 61 2d 68 65 61 64 65 (testdata-heade
b520: 72 20 28 6c 69 73 74 20 22 52 75 6e 20 49 64 22 r (list "Run Id"
b530: 20 22 54 65 73 74 6e 61 6d 65 22 20 22 49 74 65 "Testname" "Ite
b540: 6d 20 50 61 74 68 22 20 22 43 61 74 65 67 6f 72 m Path" "Categor
b550: 79 22 20 22 56 61 72 69 61 62 6c 65 22 20 22 56 y" "Variable" "V
b560: 61 6c 75 65 22 20 22 45 78 70 65 63 74 65 64 22 alue" "Expected"
b570: 20 22 54 6f 6c 22 20 22 55 6e 69 74 73 22 20 22 "Tol" "Units" "
b580: 53 74 61 74 75 73 22 20 22 43 6f 6d 6d 65 6e 74 Status" "Comment
b590: 22 29 29 0a 09 20 28 6d 61 69 6e 71 72 79 20 28 ")).. (mainqry (
b5a0: 63 6f 6e 63 20 22 53 45 4c 45 43 54 0a 20 20 20 conc "SELECT.
b5b0: 20 20 20 20 20 20 20 20 20 20 20 74 2e 74 65 73 t.tes
b5c0: 74 6e 61 6d 65 2c 72 2e 69 64 2c 72 75 6e 6e 61 tname,r.id,runna
b5d0: 6d 65 2c 22 20 6b 65 79 73 73 74 72 20 22 2c 74 me," keysstr ",t
b5e0: 2e 74 65 73 74 6e 61 6d 65 2c 0a 20 20 20 20 20 .testname,.
b5f0: 20 20 20 20 20 20 20 20 20 74 2e 69 74 65 6d 5f t.item_
b600: 70 61 74 68 2c 74 6d 2e 64 65 73 63 72 69 70 74 path,tm.descript
b610: 69 6f 6e 2c 74 2e 73 74 61 74 65 2c 74 2e 73 74 ion,t.state,t.st
b620: 61 74 75 73 2c 0a 20 20 20 20 20 20 20 20 20 20 atus,.
b630: 20 20 20 20 66 69 6e 61 6c 5f 6c 6f 67 66 2c 72 final_logf,r
b640: 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 20 0a 20 20 un_duration, .
b650: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 66 strf
b660: 74 69 6d 65 28 27 25 6d 2f 25 64 2f 25 59 20 25 time('%m/%d/%Y %
b670: 48 3a 25 4d 3a 25 53 27 2c 64 61 74 65 74 69 6d H:%M:%S',datetim
b680: 65 28 74 2e 65 76 65 6e 74 5f 74 69 6d 65 2c 27 e(t.event_time,'
b690: 75 6e 69 78 65 70 6f 63 68 27 29 2c 27 6c 6f 63 unixepoch'),'loc
b6a0: 61 6c 74 69 6d 65 27 29 2c 0a 20 20 20 20 20 20 altime'),.
b6b0: 20 20 20 20 20 20 20 20 74 6d 2e 74 61 67 73 2c tm.tags,
b6c0: 72 2e 6f 77 6e 65 72 2c 74 2e 63 6f 6d 6d 65 6e r.owner,t.commen
b6d0: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t,.
b6e0: 20 61 75 74 68 6f 72 2c 0a 20 20 20 20 20 20 20 author,.
b6f0: 20 20 20 20 20 20 20 74 6d 2e 6f 77 6e 65 72 2c tm.owner,
b700: 72 65 76 69 65 77 65 64 2c 0a 20 20 20 20 20 20 reviewed,.
b710: 20 20 20 20 20 20 20 20 64 69 73 6b 66 72 65 65 diskfree
b720: 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 0a 20 ,uname,rundir,.
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 73 hos
b740: 74 2c 63 70 75 6c 6f 61 64 0a 20 20 20 20 20 20 t,cpuload.
b750: 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74 73 FROM tests
b760: 20 41 53 20 74 20 4a 4f 49 4e 20 72 75 6e 73 20 AS t JOIN runs
b770: 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 AS r ON t.run_id
b780: 3d 72 2e 69 64 20 4a 4f 49 4e 20 74 65 73 74 5f =r.id JOIN test_
b790: 6d 65 74 61 20 41 53 20 74 6d 20 4f 4e 20 74 6d meta AS tm ON tm
b7a0: 2e 74 65 73 74 6e 61 6d 65 3d 74 2e 74 65 73 74 .testname=t.test
b7b0: 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 name.
b7c0: 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 20 4c WHERE runname L
b7d0: 49 4b 45 20 3f 20 41 4e 44 20 22 20 6b 65 79 71 IKE ? AND " keyq
b7e0: 72 79 20 22 3b 22 29 29 29 0a 20 20 20 20 28 64 ry ";"))). (d
b7f0: 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 55 73 ebug:print 2 "Us
b800: 69 6e 67 20 22 20 74 65 6d 70 64 69 72 20 22 20 ing " tempdir "
b810: 66 6f 72 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 for constructing
b820: 20 74 68 65 20 6f 64 73 20 66 69 6c 65 2e 20 6b the ods file. k
b830: 65 79 71 72 79 3a 20 22 20 6b 65 79 71 72 79 20 eyqry: " keyqry
b840: 22 20 6b 65 79 73 74 72 3a 20 22 20 6b 65 79 73 " keystr: " keys
b850: 73 74 72 20 22 20 77 69 74 68 20 6b 65 79 73 3a str " with keys:
b860: 20 22 20 28 6d 61 70 20 63 61 64 72 20 6b 65 79 " (map cadr key
b870: 70 61 74 74 2d 61 6c 69 73 74 29 0a 09 09 20 22 patt-alist)... "
b880: 5c 6e 20 20 20 20 20 20 6d 61 69 6e 71 72 79 3a \n mainqry:
b890: 20 22 20 6d 61 69 6e 71 72 79 29 0a 20 20 20 20 " mainqry).
b8a0: 3b 3b 20 22 45 78 70 65 63 74 65 64 20 56 61 6c ;; "Expected Val
b8b0: 75 65 22 0a 20 20 20 20 3b 3b 20 22 56 61 6c 75 ue". ;; "Valu
b8c0: 65 20 46 6f 75 6e 64 22 0a 20 20 20 20 3b 3b 20 e Found". ;;
b8d0: 22 54 6f 6c 65 72 61 6e 63 65 22 0a 20 20 20 20 "Tolerance".
b8e0: 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 3a 66 (apply sqlite3:f
b8f0: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 20 or-each-row..
b900: 28 6c 61 6d 62 64 61 20 28 74 65 73 74 2d 69 64 (lambda (test-id
b910: 20 2e 20 62 29 0a 09 20 20 20 20 20 28 73 65 74 . b).. (set
b920: 21 20 74 65 73 74 2d 69 64 73 20 28 63 6f 6e 73 ! test-ids (cons
b930: 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 test-id test-id
b940: 73 29 29 20 20 20 3b 3b 20 74 65 73 74 2d 69 64 s)) ;; test-id
b950: 20 69 73 20 6e 6f 77 20 74 65 73 74 6e 61 6d 65 is now testname
b960: 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 65 73 .. (set! res
b970: 75 6c 74 73 20 28 61 70 70 65 6e 64 20 72 65 73 ults (append res
b980: 75 6c 74 73 20 3b 3b 20 6e 6f 74 65 2c 20 64 72 ults ;; note, dr
b990: 6f 70 20 74 68 65 20 74 65 73 74 2d 69 64 0a 09 op the test-id..
b9a0: 09 09 09 20 20 20 28 6c 69 73 74 0a 09 09 09 09 ... (list.....
b9b0: 20 20 20 20 28 69 66 20 70 61 74 68 6d 6f 64 0a (if pathmod.
b9c0: 09 09 09 09 09 28 6c 65 74 2a 20 28 28 76 62 20 .....(let* ((vb
b9d0: 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 76 65 (apply ve
b9e0: 63 74 6f 72 20 62 29 29 0a 09 09 09 09 09 20 20 ctor b))......
b9f0: 20 20 20 20 20 28 6b 65 79 76 61 6c 73 20 20 20 (keyvals
ba00: 28 6c 65 74 20 6c 6f 6f 70 20 28 28 69 20 20 20 (let loop ((i
ba10: 20 30 29 0a 09 09 09 09 09 09 09 09 20 20 20 20 0).........
ba20: 20 28 72 65 73 20 27 28 29 29 29 0a 09 09 09 09 (res '())).....
ba30: 09 09 09 20 20 20 20 28 69 66 20 28 3e 3d 20 69 ... (if (>= i
ba40: 20 6e 75 6d 6b 65 79 73 29 0a 09 09 09 09 09 09 numkeys).......
ba50: 09 09 72 65 73 0a 09 09 09 09 09 09 09 09 28 6c ..res.........(l
ba60: 6f 6f 70 20 28 2b 20 69 20 31 29 0a 09 09 09 09 oop (+ i 1).....
ba70: 09 09 09 09 20 20 20 20 20 20 28 61 70 70 65 6e .... (appen
ba80: 64 20 72 65 73 20 28 6c 69 73 74 20 28 76 65 63 d res (list (vec
ba90: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 69 20 tor-ref vb (+ i
baa0: 32 29 29 29 29 29 29 29 29 0a 09 09 09 09 09 20 2))))))))......
bab0: 20 20 20 20 20 20 28 72 75 6e 6e 61 6d 65 20 20 (runname
bac0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 (vector-ref vb
bad0: 31 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 1))......
bae0: 28 74 65 73 74 6e 61 6d 65 20 20 28 76 65 63 74 (testname (vect
baf0: 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 32 20 or-ref vb (+ 2
bb00: 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 numkeys)))......
bb10: 20 20 20 20 20 20 20 28 69 74 65 6d 2d 70 61 74 (item-pat
bb20: 68 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 h (vector-ref vb
bb30: 20 28 2b 20 20 33 20 6e 75 6d 6b 65 79 73 29 29 (+ 3 numkeys))
bb40: 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 66 )...... (f
bb50: 69 6e 61 6c 2d 6c 6f 67 20 28 76 65 63 74 6f 72 inal-log (vector
bb60: 2d 72 65 66 20 76 62 20 28 2b 20 20 37 20 6e 75 -ref vb (+ 7 nu
bb70: 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 20 20 mkeys)))......
bb80: 20 20 20 20 20 28 72 75 6e 2d 64 69 72 20 20 20 (run-dir
bb90: 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 (vector-ref vb (
bba0: 2b 20 31 38 20 6e 75 6d 6b 65 79 73 29 29 29 0a + 18 numkeys))).
bbb0: 09 09 09 09 09 20 20 20 20 20 20 20 28 6c 6f 67 ..... (log
bbc0: 2d 66 70 61 74 68 20 28 63 6f 6e 63 20 72 75 6e -fpath (conc run
bbd0: 2d 64 69 72 20 22 2f 22 20 20 66 69 6e 61 6c 2d -dir "/" final-
bbe0: 6c 6f 67 29 29 29 20 3b 3b 20 28 73 74 72 69 6e log))) ;; (strin
bbf0: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b 65 g-intersperse ke
bc00: 79 76 61 6c 73 20 22 2f 22 29 20 22 2f 22 20 74 yvals "/") "/" t
bc10: 65 73 74 6e 61 6d 65 20 22 2f 22 20 69 74 65 6d estname "/" item
bc20: 2d 70 61 74 68 20 22 2f 22 0a 09 09 09 09 09 20 -path "/"......
bc30: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
bc40: 22 6c 6f 67 3a 20 22 20 6c 6f 67 2d 66 70 61 74 "log: " log-fpat
bc50: 68 20 22 20 65 78 69 73 74 73 3a 20 22 20 28 66 h " exists: " (f
bc60: 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c 6f 67 2d ile-exists? log-
bc70: 66 70 61 74 68 29 29 0a 09 09 09 09 09 20 20 28 fpath))...... (
bc80: 76 65 63 74 6f 72 2d 73 65 74 21 20 76 62 20 28 vector-set! vb (
bc90: 2b 20 37 20 6e 75 6d 6b 65 79 73 29 20 28 69 66 + 7 numkeys) (if
bca0: 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c (file-exists? l
bcb0: 6f 67 2d 66 70 61 74 68 29 0a 09 09 09 09 09 09 og-fpath).......
bcc0: 09 09 09 20 20 20 20 28 6c 65 74 20 28 28 6e 65 ... (let ((ne
bcd0: 77 70 61 74 68 20 28 63 6f 6e 63 20 70 61 74 68 wpath (conc path
bce0: 6d 6f 64 20 22 2f 22 0a 09 09 09 09 09 09 09 09 mod "/".........
bcf0: 09 09 09 09 20 28 73 74 72 69 6e 67 2d 69 6e 74 .... (string-int
bd00: 65 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c 73 ersperse keyvals
bd10: 20 22 2f 22 29 0a 09 09 09 09 09 09 09 09 09 09 "/")...........
bd20: 09 09 20 22 2f 22 20 72 75 6e 6e 61 6d 65 20 22 .. "/" runname "
bd30: 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 2f 22 0a /" testname "/".
bd40: 09 09 09 09 09 09 09 09 09 09 09 09 20 28 69 66 ............ (if
bd50: 20 28 73 74 72 69 6e 67 3d 3f 20 69 74 65 6d 2d (string=? item-
bd60: 70 61 74 68 20 22 22 29 20 22 22 20 28 63 6f 6e path "") "" (con
bd70: 63 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 68 29 c "/" item-path)
bd80: 29 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 66 )............. f
bd90: 69 6e 61 6c 2d 6c 6f 67 29 29 29 0a 09 09 09 09 inal-log))).....
bda0: 09 09 09 09 09 20 20 20 20 20 20 3b 3b 20 66 6f ..... ;; fo
bdb0: 72 20 6e 6f 77 20 74 68 72 6f 77 20 61 77 61 79 r now throw away
bdc0: 20 6e 65 77 70 61 74 68 20 61 6e 64 20 75 73 65 newpath and use
bdd0: 20 74 68 65 20 6c 6f 67 2d 66 70 61 74 68 20 63 the log-fpath c
bde0: 6f 6e 63 27 64 20 77 69 74 68 20 70 61 74 68 6d onc'd with pathm
bdf0: 6f 64 0a 09 09 09 09 09 09 09 09 09 20 20 20 20 od..........
be00: 20 20 28 73 65 74 21 20 6e 65 77 70 61 74 68 20 (set! newpath
be10: 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 6c 6f (conc pathmod lo
be20: 67 2d 66 70 61 74 68 29 29 0a 09 09 09 09 09 09 g-fpath)).......
be30: 09 09 09 20 20 20 20 20 20 28 69 66 20 77 69 6e ... (if win
be40: 64 6f 77 73 20 28 73 74 72 69 6e 67 2d 74 72 61 dows (string-tra
be50: 6e 73 6c 61 74 65 20 6e 65 77 70 61 74 68 20 22 nslate newpath "
be60: 2f 22 20 22 5c 5c 22 29 20 6e 65 77 70 61 74 68 /" "\\") newpath
be70: 29 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 20 ))..........
be80: 28 69 66 20 28 3e 20 2a 76 65 72 62 6f 73 69 74 (if (> *verbosit
be90: 79 2a 20 31 29 0a 09 09 09 09 09 09 09 09 09 09 y* 1)...........
bea0: 28 63 6f 6e 63 20 66 69 6e 61 6c 2d 6c 6f 67 20 (conc final-log
beb0: 22 20 6e 6f 74 2d 66 6f 75 6e 64 22 29 0a 09 09 " not-found")...
bec0: 09 09 09 09 09 09 09 09 22 22 29 29 29 0a 09 09 ........"")))...
bed0: 09 09 09 20 20 28 76 65 63 74 6f 72 2d 3e 6c 69 ... (vector->li
bee0: 73 74 20 76 62 29 29 0a 09 09 09 09 09 62 29 29 st vb))......b))
bef0: 29 29 29 0a 09 20 20 20 64 62 0a 09 20 20 20 6d ))).. db.. m
bf00: 61 69 6e 71 72 79 0a 09 20 20 20 72 75 6e 73 70 ainqry.. runsp
bf10: 61 74 74 20 28 6d 61 70 20 63 61 64 72 20 6b 65 att (map cadr ke
bf20: 79 70 61 74 74 2d 61 6c 69 73 74 29 29 0a 20 20 ypatt-alist)).
bf30: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 (debug:print 2
bf40: 20 22 46 6f 75 6e 64 20 22 20 28 6c 65 6e 67 74 "Found " (lengt
bf50: 68 20 74 65 73 74 2d 69 64 73 29 20 22 20 72 65 h test-ids) " re
bf60: 63 6f 72 64 73 22 29 0a 20 20 20 20 28 73 65 74 cords"). (set
bf70: 21 20 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 ! results (list
bf80: 28 63 6f 6e 73 20 22 52 75 6e 73 22 20 72 65 73 (cons "Runs" res
bf90: 75 6c 74 73 29 29 29 0a 20 20 20 20 3b 3b 20 6e ults))). ;; n
bfa0: 6f 77 2c 20 66 6f 72 20 65 61 63 68 20 74 65 73 ow, for each tes
bfb0: 74 2c 20 63 6f 6c 6c 65 63 74 20 74 68 65 20 74 t, collect the t
bfc0: 65 73 74 5f 64 61 74 61 20 69 6e 66 6f 20 61 6e est_data info an
bfd0: 64 20 61 64 64 20 61 20 6e 65 77 20 73 68 65 65 d add a new shee
bfe0: 74 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 0a t. (for-each.
bff0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 74 65 (lambda (te
c000: 73 74 2d 69 64 29 0a 20 20 20 20 20 20 20 28 6c st-id). (l
c010: 65 74 20 28 28 74 65 73 74 2d 64 61 74 61 20 28 et ((test-data (
c020: 6c 69 73 74 20 74 65 73 74 64 61 74 61 2d 68 65 list testdata-he
c030: 61 64 65 72 29 29 0a 09 20 20 20 20 20 28 63 75 ader)).. (cu
c040: 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 23 66 29 rr-test-name #f)
c050: 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 ).. (sqlite3:for
c060: 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 28 6c 61 -each-row.. (la
c070: 6d 62 64 61 20 28 72 75 6e 2d 69 64 20 74 65 73 mbda (run-id tes
c080: 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 tname item-path
c090: 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c category variabl
c0a0: 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 e value expected
c0b0: 20 74 6f 6c 20 75 6e 69 74 73 20 73 74 61 74 75 tol units statu
c0c0: 73 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 20 20 20 s comment)..
c0d0: 28 73 65 74 21 20 63 75 72 72 2d 74 65 73 74 2d (set! curr-test-
c0e0: 6e 61 6d 65 20 74 65 73 74 6e 61 6d 65 29 0a 09 name testname)..
c0f0: 20 20 20 20 28 73 65 74 21 20 74 65 73 74 2d 64 (set! test-d
c100: 61 74 61 20 28 61 70 70 65 6e 64 20 74 65 73 74 ata (append test
c110: 2d 64 61 74 61 20 28 6c 69 73 74 20 28 6c 69 73 -data (list (lis
c120: 74 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d t run-id testnam
c130: 65 20 69 74 65 6d 2d 70 61 74 68 20 63 61 74 65 e item-path cate
c140: 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 gory variable va
c150: 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c lue expected tol
c160: 20 75 6e 69 74 73 20 73 74 61 74 75 73 20 63 6f units status co
c170: 6d 6d 65 6e 74 29 29 29 29 29 0a 09 20 20 64 62 mment))))).. db
c180: 20 0a 09 20 20 3b 3b 20 22 53 45 4c 45 43 54 20 .. ;; "SELECT
c190: 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c run_id,testname,
c1a0: 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 67 6f item_path,catego
c1b0: 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 2e 76 ry,variable,td.v
c1c0: 61 6c 75 65 20 41 53 20 76 61 6c 75 65 2c 65 78 alue AS value,ex
c1d0: 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 pected,tol,units
c1e0: 2c 74 64 2e 73 74 61 74 75 73 20 41 53 20 73 74 ,td.status AS st
c1f0: 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 atus,td.comment
c200: 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 AS comment FROM
c210: 74 65 73 74 5f 64 61 74 61 20 41 53 20 74 64 20 test_data AS td
c220: 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 INNER JOIN tests
c230: 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 2e ON tests.id=td.
c240: 74 65 73 74 5f 69 64 20 57 48 45 52 45 20 74 65 test_id WHERE te
c250: 73 74 5f 69 64 3d 3f 3b 22 0a 09 20 20 22 53 45 st_id=?;".. "SE
c260: 4c 45 43 54 20 72 75 6e 5f 69 64 2c 74 65 73 74 LECT run_id,test
c270: 6e 61 6d 65 2c 69 74 65 6d 5f 70 61 74 68 2c 63 name,item_path,c
c280: 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 ategory,variable
c290: 2c 74 64 2e 76 61 6c 75 65 20 41 53 20 76 61 6c ,td.value AS val
c2a0: 75 65 2c 74 64 2e 65 78 70 65 63 74 65 64 2c 74 ue,td.expected,t
c2b0: 64 2e 74 6f 6c 2c 74 64 2e 75 6e 69 74 73 2c 74 d.tol,td.units,t
c2c0: 64 2e 73 74 61 74 75 73 20 41 53 20 73 74 61 74 d.status AS stat
c2d0: 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 us,td.comment AS
c2e0: 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 comment FROM te
c2f0: 73 74 5f 64 61 74 61 20 41 53 20 74 64 20 49 4e st_data AS td IN
c300: 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f NER JOIN tests O
c310: 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 2e 74 65 N tests.id=td.te
c320: 73 74 5f 69 64 20 57 48 45 52 45 20 74 65 73 74 st_id WHERE test
c330: 6e 61 6d 65 3d 3f 3b 22 0a 09 20 20 74 65 73 74 name=?;".. test
c340: 2d 69 64 29 0a 09 20 28 69 66 20 63 75 72 72 2d -id).. (if curr-
c350: 74 65 73 74 2d 6e 61 6d 65 0a 09 20 20 20 20 20 test-name..
c360: 28 73 65 74 21 20 72 65 73 75 6c 74 73 20 28 61 (set! results (a
c370: 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 28 6c ppend results (l
c380: 69 73 74 20 28 63 6f 6e 73 20 63 75 72 72 2d 74 ist (cons curr-t
c390: 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 2d 64 61 est-name test-da
c3a0: 74 61 29 29 29 29 29 0a 09 20 29 29 0a 20 20 20 ta))))).. )).
c3b0: 20 20 28 73 6f 72 74 20 28 64 65 6c 65 74 65 2d (sort (delete-
c3c0: 64 75 70 6c 69 63 61 74 65 73 20 74 65 73 74 2d duplicates test-
c3d0: 69 64 73 29 20 73 74 72 69 6e 67 3c 3d 29 29 0a ids) string<=)).
c3e0: 20 20 20 20 28 73 79 73 74 65 6d 20 28 63 6f 6e (system (con
c3f0: 63 20 22 6d 6b 64 69 72 20 2d 70 20 22 20 74 65 c "mkdir -p " te
c400: 6d 70 64 69 72 29 29 0a 20 20 20 20 3b 3b 20 28 mpdir)). ;; (
c410: 70 70 20 72 65 73 75 6c 74 73 29 0a 20 20 20 20 pp results).
c420: 28 6f 64 73 3a 6c 69 73 74 2d 3e 6f 64 73 20 0a (ods:list->ods .
c430: 20 20 20 20 20 74 65 6d 70 64 69 72 0a 20 20 20 tempdir.
c440: 20 20 28 69 66 20 28 73 74 72 69 6e 67 2d 6d 61 (if (string-ma
c450: 74 63 68 20 28 72 65 67 65 78 70 20 22 5e 5b 2f tch (regexp "^[/
c460: 7e 5d 2b 2e 2a 22 29 20 6f 75 74 70 75 74 66 69 ~]+.*") outputfi
c470: 6c 65 29 20 3b 3b 20 66 75 6c 6c 20 70 61 74 68 le) ;; full path
c480: 3f 0a 09 20 6f 75 74 70 75 74 66 69 6c 65 0a 09 ?.. outputfile..
c490: 20 28 62 65 67 69 6e 0a 09 20 20 20 28 64 65 62 (begin.. (deb
c4a0: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e ug:print 0 "WARN
c4b0: 49 4e 47 3a 20 70 61 74 68 20 67 69 76 65 6e 2c ING: path given,
c4c0: 20 22 20 6f 75 74 70 75 74 66 69 6c 65 20 22 20 " outputfile "
c4d0: 69 73 20 72 65 6c 61 74 69 76 65 2c 20 70 72 65 is relative, pre
c4e0: 66 69 78 69 6e 67 20 77 69 74 68 20 63 75 72 72 fixing with curr
c4f0: 65 6e 74 20 64 69 72 65 63 74 6f 72 79 22 29 0a ent directory").
c500: 09 20 20 20 28 63 6f 6e 63 20 28 63 75 72 72 65 . (conc (curre
c510: 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 20 22 2f nt-directory) "/
c520: 22 20 6f 75 74 70 75 74 66 69 6c 65 29 29 29 0a " outputfile))).
c530: 20 20 20 20 20 72 65 73 75 6c 74 73 29 0a 20 20 results).
c540: 20 20 3b 3b 20 62 72 75 74 61 6c 20 63 6c 65 61 ;; brutal clea
c550: 6e 20 75 70 0a 20 20 20 20 28 73 79 73 74 65 6d n up. (system
c560: 20 22 72 6d 20 2d 72 66 20 74 65 6d 70 64 69 72 "rm -rf tempdir
c570: 22 29 29 29 0a 0a 3b 3b 20 28 64 62 3a 65 78 74 ")))..;; (db:ext
c580: 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 20 64 62 ract-ods-file db
c590: 20 22 6f 75 74 70 75 74 66 69 6c 65 2e 6f 64 73 "outputfile.ods
c5a0: 22 20 27 28 28 22 73 79 73 6e 61 6d 65 22 20 22 " '(("sysname" "
c5b0: 25 22 29 28 22 66 73 6e 61 6d 65 22 20 22 25 22 %")("fsname" "%"
c5c0: 29 28 22 64 61 74 61 70 61 74 68 22 20 22 25 22 )("datapath" "%"
c5d0: 29 29 20 22 25 22 29 0a 0a 0a 3b 3b 3d 3d 3d 3d )) "%")...;;====
c5e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c5f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c620: 3d 3d 0a 3b 3b 20 52 45 4d 4f 54 45 20 44 42 20 ==.;; REMOTE DB
c630: 41 43 43 45 53 53 20 56 49 41 20 52 50 43 0a 3b ACCESS VIA RPC.;
c640: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
c650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c680: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
c690: 20 28 72 64 62 3a 73 65 74 2d 74 65 73 74 73 2d (rdb:set-tests-
c6a0: 73 74 61 74 65 2d 73 74 61 74 75 73 20 64 62 20 state-status db
c6b0: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 run-id testnames
c6c0: 20 63 75 72 72 73 74 61 74 65 20 63 75 72 72 73 currstate currs
c6d0: 74 61 74 75 73 20 6e 65 77 73 74 61 74 65 20 6e tatus newstate n
c6e0: 65 77 73 74 61 74 75 73 29 0a 20 20 28 69 66 20 ewstatus). (if
c6f0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
c700: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
c710: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
c720: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
c730: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
c740: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
c750: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
c760: 72 65 20 27 72 64 62 3a 73 65 74 2d 74 65 73 74 re 'rdb:set-test
c770: 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 20 68 s-state-status h
c780: 6f 73 74 20 70 6f 72 74 29 0a 09 20 72 75 6e 2d ost port).. run-
c790: 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 id testnames cur
c7a0: 72 73 74 61 74 65 20 63 75 72 72 73 74 61 74 75 rstate currstatu
c7b0: 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 s newstate newst
c7c0: 61 74 75 73 29 29 0a 20 20 20 20 20 20 28 64 62 atus)). (db
c7d0: 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 65 :set-tests-state
c7e0: 2d 73 74 61 74 75 73 20 64 62 20 72 75 6e 2d 69 -status db run-i
c7f0: 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 72 d testnames curr
c800: 73 74 61 74 65 20 63 75 72 72 73 74 61 74 75 73 state currstatus
c810: 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 newstate newsta
c820: 74 75 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 tus)))..(define
c830: 28 72 64 62 3a 74 65 73 74 73 74 65 70 2d 73 65 (rdb:teststep-se
c840: 74 2d 73 74 61 74 75 73 21 20 64 62 20 74 65 73 t-status! db tes
c850: 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d 6e 61 t-id teststep-na
c860: 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 me state-in stat
c870: 75 73 2d 69 6e 20 69 74 65 6d 64 61 74 20 63 6f us-in itemdat co
c880: 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 0a 20 mment logfile).
c890: 20 28 6c 65 74 20 28 28 69 74 65 6d 2d 70 61 74 (let ((item-pat
c8a0: 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 h (item-list->pa
c8b0: 74 68 20 69 74 65 6d 64 61 74 29 29 29 0a 20 20 th itemdat))).
c8c0: 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 (if *runremote
c8d0: 2a 0a 09 28 6c 65 74 20 28 28 68 6f 73 74 20 28 *..(let ((host (
c8e0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
c8f0: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
c900: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
c910: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
c920: 31 29 29 29 0a 09 20 20 28 28 72 70 63 3a 70 72 1))).. ((rpc:pr
c930: 6f 63 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 ocedure 'rdb:tes
c940: 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75 73 tstep-set-status
c950: 21 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 ! host port)..
c960: 20 74 65 73 74 2d 69 64 20 74 65 73 74 73 74 65 test-id testste
c970: 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 p-name state-in
c980: 73 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d 70 status-in item-p
c990: 61 74 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 ath comment logf
c9a0: 69 6c 65 29 29 0a 09 28 64 62 3a 74 65 73 74 73 ile))..(db:tests
c9b0: 74 65 70 2d 73 65 74 2d 73 74 61 74 75 73 21 20 tep-set-status!
c9c0: 64 62 20 74 65 73 74 2d 69 64 20 74 65 73 74 73 db test-id tests
c9d0: 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 tep-name state-i
c9e0: 6e 20 73 74 61 74 75 73 2d 69 6e 20 69 74 65 6d n status-in item
c9f0: 2d 70 61 74 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f -path comment lo
ca00: 67 66 69 6c 65 29 29 29 29 0a 0a 28 64 65 66 69 gfile))))..(defi
ca10: 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 75 70 64 ne (rdb:test-upd
ca20: 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 62 ate-meta-info db
ca30: 20 74 65 73 74 2d 69 64 20 6d 69 6e 75 74 65 73 test-id minutes
ca40: 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 cpuload diskfre
ca50: 65 20 74 6d 70 66 72 65 65 29 0a 20 20 28 69 66 e tmpfree). (if
ca60: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
ca70: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
ca80: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
ca90: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
caa0: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
cab0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
cac0: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
cad0: 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 75 70 ure 'rdb:test-up
cae0: 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 68 date-meta-info h
caf0: 6f 73 74 20 70 6f 72 74 29 0a 09 20 74 65 73 74 ost port).. test
cb00: 2d 69 64 20 6d 69 6e 75 74 65 73 20 63 70 75 6c -id minutes cpul
cb10: 6f 61 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 oad diskfree tmp
cb20: 66 72 65 65 29 29 0a 20 20 20 20 20 20 28 64 62 free)). (db
cb30: 3a 74 65 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 :test-update-met
cb40: 61 2d 69 6e 66 6f 20 64 62 20 74 65 73 74 2d 69 a-info db test-i
cb50: 64 20 6d 69 6e 75 74 65 73 20 63 70 75 6c 6f 61 d minutes cpuloa
cb60: 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 66 72 d diskfree tmpfr
cb70: 65 65 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ee)))..(define (
cb80: 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 rdb:test-set-sta
cb90: 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e te-status-by-run
cba0: 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 -id-testname db
cbb0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
cbc0: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
cbd0: 73 20 73 74 61 74 65 29 0a 20 20 28 69 66 20 2a s state). (if *
cbe0: 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 runremote*.
cbf0: 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 (let ((host (ve
cc00: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
cc10: 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 ote* 0)).. (p
cc20: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
cc30: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
cc40: 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 ..((rpc:procedur
cc50: 65 20 27 72 64 62 3a 74 65 73 74 2d 73 65 74 2d e 'rdb:test-set-
cc60: 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d state-status-by-
cc70: 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 run-id-testname
cc80: 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 72 75 host port).. ru
cc90: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
cca0: 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 20 tem-path status
ccb0: 73 74 61 74 65 29 29 0a 20 20 20 20 20 20 28 64 state)). (d
ccc0: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 b:test-set-state
ccd0: 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69 -status-by-run-i
cce0: 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 72 75 d-testname db ru
ccf0: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
cd00: 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 20 tem-path status
cd10: 73 74 61 74 65 29 29 29 0a 0a 28 64 65 66 69 6e state)))..(defin
cd20: 65 20 28 72 64 62 3a 63 73 76 2d 3e 74 65 73 74 e (rdb:csv->test
cd30: 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 -data db test-id
cd40: 20 63 73 76 64 61 74 61 29 0a 20 20 28 69 66 20 csvdata). (if
cd50: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
cd60: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
cd70: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
cd80: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
cd90: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
cda0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
cdb0: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
cdc0: 72 65 20 27 72 64 62 3a 63 73 76 2d 3e 74 65 73 re 'rdb:csv->tes
cdd0: 74 2d 64 61 74 61 20 68 6f 73 74 20 70 6f 72 74 t-data host port
cde0: 29 0a 09 20 74 65 73 74 2d 69 64 20 63 73 76 64 ).. test-id csvd
cdf0: 61 74 61 29 29 0a 20 20 20 20 20 20 28 64 62 3a ata)). (db:
ce00: 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 csv->test-data d
ce10: 62 20 74 65 73 74 2d 69 64 20 63 73 76 64 61 74 b test-id csvdat
ce20: 61 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 a)))..(define (r
ce30: 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d db:roll-up-pass-
ce40: 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 62 20 72 fail-counts db r
ce50: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
ce60: 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 item-path status
ce70: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
ce80: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
ce90: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
cea0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
ceb0: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
cec0: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
ced0: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
cee0: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
cef0: 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 roll-up-pass-fai
cf00: 6c 2d 63 6f 75 6e 74 73 20 68 6f 73 74 20 70 6f l-counts host po
cf10: 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 74 65 73 rt).. run-id tes
cf20: 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 t-name item-path
cf30: 20 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 status)).
cf40: 28 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 (db:roll-up-pass
cf50: 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 62 20 -fail-counts db
cf60: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
cf70: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
cf80: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 s)))..(define (r
cf90: 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d db:test-set-comm
cfa0: 65 6e 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 ent db test-id c
cfb0: 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 66 20 2a 72 omment). (if *r
cfc0: 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 unremote*.
cfd0: 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
cfe0: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
cff0: 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f te* 0)).. (po
d000: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
d010: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
d020: 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 .((rpc:procedure
d030: 20 27 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 'rdb:test-set-c
d040: 6f 6d 6d 65 6e 74 20 68 6f 73 74 20 70 6f 72 74 omment host port
d050: 29 0a 09 20 74 65 73 74 2d 69 64 20 63 6f 6d 6d ).. test-id comm
d060: 65 6e 74 29 29 0a 20 20 20 20 20 20 28 64 62 3a ent)). (db:
d070: 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 test-set-comment
d080: 20 64 62 20 74 65 73 74 2d 69 64 20 63 6f 6d 6d db test-id comm
d090: 65 6e 74 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ent)))..(define
d0a0: 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f (rdb:test-set-lo
d0b0: 67 21 20 64 62 20 74 65 73 74 2d 69 64 20 6c 6f g! db test-id lo
d0c0: 67 66 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 gf). (if *runre
d0d0: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
d0e0: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
d0f0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d100: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
d110: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
d120: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
d130: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
d140: 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f 67 21 20 b:test-set-log!
d150: 68 6f 73 74 20 70 6f 72 74 29 20 74 65 73 74 2d host port) test-
d160: 69 64 20 6c 6f 67 66 29 29 0a 20 20 20 20 20 20 id logf)).
d170: 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f 67 (db:test-set-log
d180: 21 20 64 62 20 74 65 73 74 2d 69 64 20 6c 6f 67 ! db test-id log
d190: 66 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 f)))..(define (r
d1a0: 64 62 3a 67 65 74 2d 72 75 6e 73 20 64 62 20 72 db:get-runs db r
d1b0: 75 6e 6e 61 6d 65 70 61 74 74 20 6e 75 6d 72 75 unnamepatt numru
d1c0: 6e 73 20 73 74 61 72 74 72 75 6e 6f 66 66 73 65 ns startrunoffse
d1d0: 74 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 69 t keypatts). (i
d1e0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
d1f0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
d200: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
d210: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
d220: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
d230: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
d240: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
d250: 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 72 75 dure 'rdb:get-ru
d260: 6e 73 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 ns host port)..
d270: 72 75 6e 6e 61 6d 65 70 61 74 74 20 6e 75 6d 72 runnamepatt numr
d280: 75 6e 73 20 73 74 61 72 74 72 75 6e 6f 66 66 73 uns startrunoffs
d290: 65 74 20 6b 65 79 70 61 74 74 73 29 29 0a 20 20 et keypatts)).
d2a0: 20 20 20 20 28 64 62 3a 67 65 74 2d 72 75 6e 73 (db:get-runs
d2b0: 20 64 62 20 72 75 6e 6e 61 6d 65 70 61 74 74 20 db runnamepatt
d2c0: 6e 75 6d 72 75 6e 73 20 73 74 61 72 74 72 75 6e numruns startrun
d2d0: 6f 66 66 73 65 74 20 6b 65 79 70 61 74 74 73 29 offset keypatts)
d2e0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 ))..(define (rdb
d2f0: 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 :get-tests-for-r
d300: 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 un db run-id tes
d310: 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 73 tpatt itempatt s
d320: 74 61 74 65 73 20 73 74 61 74 75 73 65 73 29 0a tates statuses).
d330: 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 (if *runremote
d340: 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 *. (let ((h
d350: 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ost (vector-ref
d360: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a *runremote* 0)).
d370: 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 . (port (vect
d380: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
d390: 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 e* 1)))..((rpc:p
d3a0: 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 rocedure 'rdb:ge
d3b0: 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 t-tests-for-run
d3c0: 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 72 75 host port).. ru
d3d0: 6e 2d 69 64 20 74 65 73 74 70 61 74 74 20 69 74 n-id testpatt it
d3e0: 65 6d 70 61 74 74 20 73 74 61 74 65 73 20 73 74 empatt states st
d3f0: 61 74 75 73 65 73 29 29 0a 20 20 20 20 20 20 28 atuses)). (
d400: 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db:get-tests-for
d410: 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 -run db run-id t
d420: 65 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 estpatt itempatt
d430: 20 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 states statuses
d440: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
d450: 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 61 2d b:get-test-data-
d460: 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 by-id db test-id
d470: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
d480: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
d490: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
d4a0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
d4b0: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
d4c0: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
d4d0: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
d4e0: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 70 63 3a :procedure 'rpc:
d4f0: 67 65 74 2d 74 65 73 74 2d 64 61 74 61 2d 62 79 get-test-data-by
d500: 2d 69 64 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 -id host port)..
d510: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 20 test-id)).
d520: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 (db:get-test-da
d530: 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 ta-by-id db test
d540: 2d 69 64 29 29 29 0a 20 20 20 20 20 20 0a 28 64 -id))). .(d
d550: 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 6b efine (rdb:get-k
d560: 65 79 73 20 64 62 29 0a 20 20 28 69 66 20 2a 72 eys db). (if *r
d570: 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 unremote*.
d580: 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
d590: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
d5a0: 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f te* 0)).. (po
d5b0: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
d5c0: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
d5d0: 09 28 69 66 20 2a 64 62 2d 6b 65 79 73 2a 20 2a .(if *db-keys* *
d5e0: 64 62 2d 6b 65 79 73 2a 20 0a 09 20 20 20 20 28 db-keys* .. (
d5f0: 6c 65 74 20 28 28 6b 65 79 73 20 28 28 72 70 63 let ((keys ((rpc
d600: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
d610: 67 65 74 2d 6b 65 79 73 20 68 6f 73 74 20 70 6f get-keys host po
d620: 72 74 29 29 29 29 0a 09 20 20 20 20 20 20 28 73 rt)))).. (s
d630: 65 74 21 20 2a 64 62 2d 6b 65 79 73 2a 20 6b 65 et! *db-keys* ke
d640: 79 73 29 0a 09 20 20 20 20 20 20 6b 65 79 73 29 ys).. keys)
d650: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 )). (db:get
d660: 2d 6b 65 79 73 20 64 62 29 29 29 0a 09 20 0a 28 -keys db))).. .(
d670: 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d define (rdb:get-
d680: 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 75 6e 70 num-runs db runp
d690: 61 74 74 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 att). (if *runr
d6a0: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
d6b0: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
d6c0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
d6d0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
d6e0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
d6f0: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
d700: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
d710: 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 db:get-num-runs
d720: 68 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 70 61 host port) runpa
d730: 74 74 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 tt)). (db:g
d740: 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 et-num-runs db r
d750: 75 6e 70 61 74 74 29 29 29 0a 0a 28 64 65 66 69 unpatt)))..(defi
d760: 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 ne (rdb:test-set
d770: 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 -state-status-by
d780: 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 6e -id db test-id n
d790: 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 ewstate newstatu
d7a0: 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 20 s newcomment).
d7b0: 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 (if *runremote
d7c0: 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 *. (let ((h
d7d0: 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ost (vector-ref
d7e0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a *runremote* 0)).
d7f0: 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 . (port (vect
d800: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
d810: 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 e* 1)))..((rpc:p
d820: 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 74 65 rocedure 'rdb:te
d830: 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 st-set-state-sta
d840: 74 75 73 2d 62 79 2d 69 64 20 68 6f 73 74 20 70 tus-by-id host p
d850: 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 6e ort).. test-id n
d860: 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 ewstate newstatu
d870: 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 0a 20 s newcomment)).
d880: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 (db:test-se
d890: 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 t-state-status-b
d8a0: 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 y-id db test-id
d8b0: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
d8c0: 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 29 us newcomment)))
d8d0: 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 ..(define (rdb:g
d8e0: 65 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 et-key-val-pairs
d8f0: 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 69 db run-id). (i
d900: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
d910: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
d920: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
d930: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
d940: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
d950: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
d960: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
d970: 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 6b 65 dure 'rdb:get-ke
d980: 79 2d 76 61 6c 2d 70 61 69 72 73 20 68 6f 73 74 y-val-pairs host
d990: 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 0a port) run-id)).
d9a0: 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 6b 65 (db:get-ke
d9b0: 79 2d 76 61 6c 2d 70 61 69 72 73 20 64 62 20 72 y-val-pairs db r
d9c0: 75 6e 2d 69 64 29 29 29 0a 09 20 0a 28 64 65 66 un-id))).. .(def
d9d0: 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 6b 65 79 ine (rdb:get-key
d9e0: 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 -vals db run-id)
d9f0: 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d . (if *runrem
da00: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
da10: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
da20: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
da30: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
da40: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
da50: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
da60: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
da70: 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20 68 6f :get-key-vals ho
da80: 73 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 st port) run-id)
da90: 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d ). (db:get-
daa0: 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d key-vals db run-
dab0: 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 id)))..(define (
dac0: 72 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 74 rdb:testmeta-get
dad0: 2d 72 65 63 6f 72 64 20 64 62 20 74 65 73 74 6e -record db testn
dae0: 61 6d 65 29 0a 20 20 20 28 69 66 20 2a 72 75 6e ame). (if *run
daf0: 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c remote*. (l
db00: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
db10: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
db20: 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 * 0)).. (port
db30: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
db40: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 nremote* 1)))..(
db50: 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 (rpc:procedure '
db60: 72 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 74 rdb:testmeta-get
db70: 2d 72 65 63 6f 72 64 20 68 6f 73 74 20 70 6f 72 -record host por
db80: 74 29 20 74 65 73 74 6e 61 6d 65 29 29 0a 20 20 t) testname)).
db90: 20 20 20 20 28 64 62 3a 74 65 73 74 6d 65 74 61 (db:testmeta
dba0: 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 -get-record db t
dbb0: 65 73 74 6e 61 6d 65 29 29 29 0a 0a 28 64 65 66 estname)))..(def
dbc0: 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 74 65 73 ine (rdb:get-tes
dbd0: 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 t-data-by-id db
dbe0: 74 65 73 74 2d 69 64 29 0a 20 20 28 69 66 20 2a test-id). (if *
dbf0: 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 runremote*.
dc00: 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 (let ((host (ve
dc10: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
dc20: 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 ote* 0)).. (p
dc30: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
dc40: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
dc50: 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 ..((rpc:procedur
dc60: 65 20 27 72 64 62 3a 67 65 74 2d 74 65 73 74 2d e 'rdb:get-test-
dc70: 64 61 74 61 2d 62 79 2d 69 64 20 68 6f 73 74 20 data-by-id host
dc80: 70 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 0a port) test-id)).
dc90: 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 (db:get-te
dca0: 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 st-data-by-id db
dcb0: 20 74 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 test-id)))..(de
dcc0: 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 72 75 fine (rdb:get-ru
dcd0: 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 n-info db run-id
dce0: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
dcf0: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
dd00: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
dd10: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
dd20: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
dd30: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
dd40: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
dd50: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
dd60: 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 68 6f 73 get-run-info hos
dd70: 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 t port) run-id))
dd80: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 72 . (db:get-r
dd90: 75 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 un-info db run-i
dda0: 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 d)))..(define (r
ddb0: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 db:get-steps-for
ddc0: 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 -test db test-id
ddd0: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
dde0: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
ddf0: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
de00: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
de10: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
de20: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
de30: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
de40: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
de50: 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 65 get-steps-for-te
de60: 73 74 20 68 6f 73 74 20 70 6f 72 74 29 20 74 65 st host port) te
de70: 73 74 2d 69 64 29 29 0a 20 20 20 20 20 20 28 64 st-id)). (d
de80: 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d b:get-steps-for-
de90: 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 test db test-id)
dea0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 ))..(define (rdb
deb0: 3a 67 65 74 2d 73 74 65 70 73 2d 74 61 62 6c 65 :get-steps-table
dec0: 20 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 db test-id). (
ded0: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
dee0: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
def0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
df00: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
df10: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
df20: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
df30: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
df40: 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 73 edure 'rdb:get-s
df50: 74 65 70 73 2d 74 61 62 6c 65 20 68 6f 73 74 20 teps-table host
df60: 70 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 0a port) test-id)).
df70: 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 73 74 (db:get-st
df80: 65 70 73 2d 74 61 62 6c 65 20 64 62 20 74 65 73 eps-table db tes
df90: 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 t-id)))..(define
dfa0: 20 28 72 64 62 3a 72 65 61 64 2d 74 65 73 74 2d (rdb:read-test-
dfb0: 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 data db test-id
dfc0: 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 20 categorypatt).
dfd0: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
dfe0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
dff0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
e000: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
e010: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
e020: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
e030: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
e040: 63 65 64 75 72 65 20 27 72 64 62 3a 72 65 61 64 cedure 'rdb:read
e050: 2d 74 65 73 74 2d 64 61 74 61 20 68 6f 73 74 20 -test-data host
e060: 70 6f 72 74 29 20 74 65 73 74 2d 69 64 20 63 61 port) test-id ca
e070: 74 65 67 6f 72 79 70 61 74 74 29 29 0a 20 20 20 tegorypatt)).
e080: 20 20 20 28 64 62 3a 72 65 61 64 2d 74 65 73 74 (db:read-test
e090: 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 -data db test-id
e0a0: 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 29 29 categorypatt)))
e0b0: 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 ..(define (rdb:g
e0c0: 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 et-test-info db
e0d0: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
e0e0: 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69 66 item-path). (if
e0f0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
e100: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
e110: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
e120: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
e130: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
e140: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
e150: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
e160: 75 72 65 20 27 72 64 62 3a 67 65 74 2d 74 65 73 ure 'rdb:get-tes
e170: 74 2d 69 6e 66 6f 20 68 6f 73 74 20 70 6f 72 74 t-info host port
e180: 29 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d ) run-id testnam
e190: 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 20 20 e item-path)).
e1a0: 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 74 (db:get-test
e1b0: 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 -info db run-id
e1c0: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 testname item-pa
e1d0: 74 68 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 th)))..(define (
e1e0: 72 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d rdb:delete-test-
e1f0: 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 2d records db test-
e200: 69 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 id). (if *runre
e210: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
e220: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
e230: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
e240: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
e250: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
e260: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
e270: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
e280: 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 65 b:delete-test-re
e290: 63 6f 72 64 73 20 68 6f 73 74 20 70 6f 72 74 29 cords host port)
e2a0: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 20 test-id)).
e2b0: 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 (db:delete-test
e2c0: 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 -records db test
e2d0: 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 -id)))..(define
e2e0: 28 72 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 (rdb:test-data-r
e2f0: 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 ollup db test-id
e300: 20 73 74 61 74 75 73 29 0a 20 20 20 20 28 69 66 status). (if
e310: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
e320: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
e330: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
e340: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
e350: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
e360: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
e370: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
e380: 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 64 61 ure 'rdb:test-da
e390: 74 61 2d 72 6f 6c 6c 75 70 20 68 6f 73 74 20 70 ta-rollup host p
e3a0: 6f 72 74 29 20 74 65 73 74 2d 69 64 20 73 74 61 ort) test-id sta
e3b0: 74 75 73 29 29 0a 20 20 20 20 20 20 28 64 62 3a tus)). (db:
e3c0: 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 test-data-rollup
e3d0: 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 61 74 db test-id stat
e3e0: 75 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 us)))..(define (
e3f0: 72 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 rdb:test-get-pat
e400: 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b hs-matching db k
e410: 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 29 0a eynames target).
e420: 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 (if *runremot
e430: 65 2a 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 e*. (let (
e440: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
e450: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
e460: 29 0a 09 20 20 20 20 20 28 70 6f 72 74 20 28 76 ).. (port (v
e470: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
e480: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 20 28 28 72 mote* 1))).. ((r
e490: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
e4a0: 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 b:test-get-paths
e4b0: 2d 6d 61 74 63 68 69 6e 67 20 68 6f 73 74 20 70 -matching host p
e4c0: 6f 72 74 29 20 6b 65 79 6e 61 6d 65 73 20 74 61 ort) keynames ta
e4d0: 72 67 65 74 29 29 0a 20 20 20 20 20 20 20 28 64 rget)). (d
e4e0: 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 b:test-get-paths
e4f0: 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 -matching db key
e500: 6e 61 6d 65 73 20 74 61 72 67 65 74 29 29 29 0a names target))).
e510: 0a 20 0a . .