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 29 3b 22 29 0a 20 20 20 testname);").
1230: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
1240: 65 20 64 62 20 22 43 52 45 41 54 45 20 56 49 45 e db "CREATE VIE
1250: 57 20 72 75 6e 73 5f 74 65 73 74 73 20 41 53 20 W runs_tests AS
1260: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72 75 SELECT * FROM ru
1270: 6e 73 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 ns INNER JOIN te
1280: 73 74 73 20 4f 4e 20 72 75 6e 73 2e 69 64 3d 74 sts ON runs.id=t
1290: 65 73 74 73 2e 72 75 6e 5f 69 64 3b 22 29 0a 20 ests.run_id;").
12a0: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
12b0: 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 ute db "CREATE T
12c0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
12d0: 54 53 20 74 65 73 74 5f 73 74 65 70 73 20 0a 20 TS test_steps .
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 64 (id
1300: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
1310: 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 KEY,.
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1330: 20 20 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 test_id INT
1340: 45 47 45 52 2c 20 0a 20 20 20 20 20 20 20 20 20 EGER, .
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1360: 20 20 20 20 20 20 73 74 65 70 6e 61 6d 65 20 54 stepname T
1370: 45 58 54 2c 20 0a 20 20 20 20 20 20 20 20 20 20 EXT, .
1380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1390: 20 20 20 20 20 73 74 61 74 65 20 54 45 58 54 20 state TEXT
13a0: 44 45 46 41 55 4c 54 20 27 4e 4f 54 5f 53 54 41 DEFAULT 'NOT_STA
13b0: 52 54 45 44 27 2c 20 0a 20 20 20 20 20 20 20 20 RTED', .
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d0: 20 20 20 20 20 20 20 73 74 61 74 75 73 20 54 45 status TE
13e0: 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 XT DEFAULT 'n/a'
13f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1410: 20 65 76 65 6e 74 5f 74 69 6d 65 20 54 49 4d 45 event_time TIME
1420: 53 54 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 STAMP,.
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1440: 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 comment TE
1450: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
1460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f lo
1480: 67 66 69 6c 65 20 54 45 58 54 20 44 45 46 41 55 gfile TEXT DEFAU
1490: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b0: 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 CONSTRAINT
14c0: 20 74 65 73 74 5f 73 74 65 70 73 5f 63 6f 6e 73 test_steps_cons
14d0: 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 traint UNIQUE (t
14e0: 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c est_id,stepname,
14f0: 73 74 61 74 65 29 29 3b 22 29 0a 20 20 20 20 28 state));"). (
1500: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
1510: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 db "CREATE TABLE
1520: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 65 IF NOT EXISTS e
1530: 78 74 72 61 64 61 74 20 28 69 64 20 49 4e 54 45 xtradat (id INTE
1540: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
1550: 20 72 75 6e 5f 69 64 20 49 4e 54 45 47 45 52 2c run_id INTEGER,
1560: 20 6b 65 79 20 54 45 58 54 2c 20 76 61 6c 20 54 key TEXT, val T
1570: 45 58 54 29 3b 22 29 0a 20 20 20 20 28 73 71 6c EXT);"). (sql
1580: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
1590: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
15a0: 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 74 61 NOT EXISTS meta
15b0: 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 20 dat (id INTEGER
15c0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 61 72 PRIMARY KEY, var
15d0: 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c TEXT, val TEXT,
15e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1600: 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 CONSTRAINT me
1610: 74 61 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 tadat_constraint
1620: 20 55 4e 49 51 55 45 20 28 76 61 72 29 29 3b 22 UNIQUE (var));"
1630: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ). (sqlite3:e
1640: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
1650: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
1660: 58 49 53 54 53 20 61 63 63 65 73 73 5f 6c 6f 67 XISTS access_log
1670: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
1680: 4d 41 52 59 20 4b 45 59 2c 20 75 73 65 72 20 54 MARY KEY, user T
1690: 45 58 54 2c 20 61 63 63 65 73 73 65 64 20 54 49 EXT, accessed TI
16a0: 4d 45 53 54 41 4d 50 2c 20 61 72 67 73 20 54 45 MESTAMP, args TE
16b0: 58 54 29 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 XT);"). (sqli
16c0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
16d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 CREATE TABLE IF
16e0: 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 5f NOT EXISTS test_
16f0: 6d 65 74 61 20 28 69 64 20 49 4e 54 45 47 45 52 meta (id INTEGER
1700: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 PRIMARY KEY,.
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1730: 20 20 20 74 65 73 74 6e 61 6d 65 20 20 20 20 54 testname T
1740: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1770: 20 20 20 20 20 61 75 74 68 6f 72 20 20 20 20 20 author
1780: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
1790: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b0: 20 20 20 20 20 20 20 6f 77 6e 65 72 20 20 20 20 owner
17c0: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
17d0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
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 64 65 73 63 72 69 70 descrip
1800: 74 69 6f 6e 20 54 45 58 54 20 44 45 46 41 55 4c tion TEXT DEFAUL
1810: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
1820: 20 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 72 65 76 69 65 revie
1840: 77 65 64 20 20 20 20 54 49 4d 45 53 54 41 4d 50 wed TIMESTAMP
1850: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
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 69 74 65 72 61 74 65 64 20 iterated
1880: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
1890: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
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 61 76 67 5f 72 75 6e avg_run
18c0: 74 69 6d 65 20 52 45 41 4c 2c 0a 20 20 20 20 20 time REAL,.
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f0: 61 76 67 5f 64 69 73 6b 20 20 20 20 52 45 41 4c avg_disk REAL
1900: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
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 74 61 67 73 20 20 20 20 20 tags
1930: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
1940: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
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 6a 6f 62 67 72 6f 75 jobgrou
1970: 70 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c p TEXT DEFAUL
1980: 54 20 27 64 65 66 61 75 6c 74 27 2c 0a 20 20 20 T 'default',.
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e CON
19b0: 53 54 52 41 49 4e 54 20 74 65 73 74 5f 6d 65 74 STRAINT test_met
19c0: 61 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 a_constraint UNI
19d0: 51 55 45 20 28 74 65 73 74 6e 61 6d 65 29 29 3b QUE (testname));
19e0: 22 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a "). (sqlite3:
19f0: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
1a00: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
1a10: 45 58 49 53 54 53 20 74 65 73 74 5f 64 61 74 61 EXISTS test_data
1a20: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
1a30: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 MARY KEY,.
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a50: 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 69 test_i
1a60: 64 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 d INTEGER,.
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a80: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 categ
1a90: 6f 72 79 20 54 45 58 54 20 44 45 46 41 55 4c 54 ory TEXT DEFAULT
1aa0: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ac0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 54 45 variable TE
1ad0: 58 54 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 XT,..
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c val
1af0: 75 65 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 20 ue REAL,..
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b10: 20 20 65 78 70 65 63 74 65 64 20 52 45 41 4c 2c expected REAL,
1b20: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b30: 20 20 20 20 20 20 20 20 20 20 74 6f 6c 20 52 45 tol RE
1b40: 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 AL,.
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b60: 20 20 20 20 75 6e 69 74 73 20 54 45 58 54 2c 0a units TEXT,.
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b90: 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 comment TEXT DEF
1ba0: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bc0: 20 20 20 20 20 20 20 20 20 73 74 61 74 75 73 20 status
1bd0: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f TEXT DEFAULT 'n/
1be0: 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 a',.
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c00: 20 20 20 20 74 79 70 65 20 54 45 58 54 20 44 45 type TEXT DE
1c10: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 FAULT '',.
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c30: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
1c40: 4e 54 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 6e NT test_data_con
1c50: 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 straint UNIQUE (
1c60: 74 65 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 test_id,category
1c70: 2c 76 61 72 69 61 62 6c 65 29 29 3b 22 29 0a 20 ,variable));").
1c80: 20 20 20 3b 3b 20 4d 75 73 74 20 64 6f 20 74 68 ;; Must do th
1c90: 69 73 20 2a 61 66 74 65 72 2a 20 72 75 6e 6e 69 is *after* runni
1ca0: 6e 67 20 70 61 74 63 68 20 64 62 20 21 21 20 4e ng patch db !! N
1cb0: 6f 20 6d 6f 72 65 2e 20 0a 20 20 20 20 28 64 62 o more. . (db
1cc0: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
1cd0: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 6d ATEST_VERSION" m
1ce0: 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f 6e 29 egatest-version)
1cf0: 0a 20 20 20 20 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d . ))..;;=====
1d00: 3d 3d 3d 3d 3d 3d 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 0a 3b 3b 20 54 4f 44 4f 3a 0a 3b 3b 20 20 20 =.;; TODO:.;;
1d50: 70 75 74 20 64 65 6c 74 61 73 20 69 6e 74 6f 20 put deltas into
1d60: 61 6e 20 61 73 73 6f 63 20 6c 69 73 74 20 77 69 an assoc list wi
1d70: 74 68 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 th version numbe
1d80: 72 73 0a 3b 3b 20 20 20 61 70 70 6c 79 20 61 6c rs.;; apply al
1d90: 6c 20 66 72 6f 6d 20 6c 61 73 74 20 74 6f 20 63 l from last to c
1da0: 75 72 72 65 6e 74 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d urrent.;;=======
1db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a ===============.
1df0: 28 64 65 66 69 6e 65 20 28 70 61 74 63 68 2d 64 (define (patch-d
1e00: 62 20 64 62 29 0a 20 20 28 68 61 6e 64 6c 65 2d b db). (handle-
1e10: 65 78 63 65 70 74 69 6f 6e 73 0a 20 20 20 65 78 exceptions. ex
1e20: 6e 0a 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20 n. (begin.
1e30: 20 28 70 72 69 6e 74 20 22 45 78 63 65 70 74 69 (print "Excepti
1e40: 6f 6e 3a 20 22 20 65 78 6e 29 0a 20 20 20 20 20 on: " exn).
1e50: 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 50 (print "ERROR: P
1e60: 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66 20 64 ossible out of d
1e70: 61 74 65 20 73 63 68 65 6d 61 2c 20 61 74 74 65 ate schema, atte
1e80: 6d 70 74 69 6e 67 20 74 6f 20 61 64 64 20 74 61 mpting to add ta
1e90: 62 6c 65 20 6d 65 74 61 64 61 74 61 2e 2e 2e 22 ble metadata..."
1ea0: 29 0a 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a ). (sqlite3:
1eb0: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
1ec0: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
1ed0: 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 28 EXISTS metadat (
1ee0: 69 64 20 49 4e 54 45 47 45 52 2c 20 76 61 72 20 id INTEGER, var
1ef0: 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c 0a TEXT, val TEXT,.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f20: 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 CONSTRAINT meta
1f30: 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 dat_constraint U
1f40: 4e 49 51 55 45 20 28 76 61 72 29 29 3b 22 29 0a NIQUE (var));").
1f50: 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 64 (if (not (d
1f60: 62 3a 67 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:get-var db "ME
1f70: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 29 GATEST_VERSION")
1f80: 29 0a 09 20 28 64 62 3a 73 65 74 2d 76 61 72 20 ).. (db:set-var
1f90: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
1fa0: 53 49 4f 4e 22 20 31 2e 31 37 29 29 29 0a 20 20 SION" 1.17))).
1fb0: 20 28 6c 65 74 20 28 28 6d 76 65 72 20 28 64 62 (let ((mver (db
1fc0: 3a 67 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :get-var db "MEG
1fd0: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 29 29 ATEST_VERSION"))
1fe0: 0a 09 20 28 74 65 73 74 2d 6d 65 74 61 2d 64 65 .. (test-meta-de
1ff0: 66 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 f "CREATE TABLE
2000: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 IF NOT EXISTS te
2010: 73 74 5f 6d 65 74 61 20 28 69 64 20 49 4e 54 45 st_meta (id INTE
2020: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2050: 20 20 20 20 20 20 74 65 73 74 6e 61 6d 65 20 20 testname
2060: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
2070: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2090: 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 20 20 author
20a0: 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 TEXT DEFAULT
20b0: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
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 6f 77 6e 65 72 20 owner
20e0: 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 TEXT DEFAU
20f0: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
2100: 20 20 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 64 65 73 63 desc
2120: 72 69 70 74 69 6f 6e 20 54 45 58 54 20 44 45 46 ription TEXT DEF
2130: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
2140: 20 20 20 20 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 72 65 re
2160: 76 69 65 77 65 64 20 20 20 20 54 49 4d 45 53 54 viewed TIMEST
2170: 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 AMP,.
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 69 74 65 72 61 74 iterat
21a0: 65 64 20 20 20 20 54 45 58 54 20 44 45 46 41 55 ed TEXT DEFAU
21b0: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
21c0: 20 20 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 61 76 67 5f avg_
21e0: 72 75 6e 74 69 6d 65 20 52 45 41 4c 2c 0a 20 20 runtime REAL,.
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2210: 20 20 20 61 76 67 5f 64 69 73 6b 20 20 20 20 52 avg_disk R
2220: 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 EAL,.
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 74 61 67 73 20 20 tags
2250: 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 TEXT DEFAU
2260: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2280: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e CONSTRAIN
2290: 54 20 74 65 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 T test_meta_cons
22a0: 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 traint UNIQUE (t
22b0: 65 73 74 6e 61 6d 65 29 29 3b 22 29 29 0a 20 20 estname));")).
22c0: 20 20 20 28 70 72 69 6e 74 20 22 43 75 72 72 65 (print "Curre
22d0: 6e 74 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f nt schema versio
22e0: 6e 3a 20 22 20 6d 76 65 72 20 22 20 63 75 72 72 n: " mver " curr
22f0: 65 6e 74 20 6d 65 67 61 74 65 73 74 20 76 65 72 ent megatest ver
2300: 73 69 6f 6e 3a 20 22 20 6d 65 67 61 74 65 73 74 sion: " megatest
2310: 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 28 -version). (
2320: 63 6f 6e 64 0a 20 20 20 20 20 20 28 28 6e 6f 74 cond. ((not
2330: 20 6d 76 65 72 29 0a 20 20 20 20 20 20 20 28 70 mver). (p
2340: 72 69 6e 74 20 22 41 64 64 69 6e 67 20 6d 65 67 rint "Adding meg
2350: 61 74 65 73 74 2d 76 65 72 73 69 6f 6e 20 74 6f atest-version to
2360: 20 6d 65 74 61 64 61 74 61 22 29 20 3b 3b 20 4e metadata") ;; N
2370: 65 65 64 20 74 6f 20 72 65 63 72 65 61 74 65 20 eed to recreate
2380: 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 the table.
2390: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
23a0: 65 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 e db "DROP TABLE
23b0: 20 49 46 20 45 58 49 53 54 53 20 6d 65 74 61 64 IF EXISTS metad
23c0: 61 74 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 at;"). (sq
23d0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
23e0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
23f0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 74 F NOT EXISTS met
2400: 61 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 adat (id INTEGER
2410: 2c 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c 20 , var TEXT, val
2420: 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 20 TEXT,.
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2440: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
2450: 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 NT metadat_const
2460: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 61 raint UNIQUE (va
2470: 72 29 29 3b 22 29 0a 20 20 20 20 20 20 20 28 64 r));"). (d
2480: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
2490: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
24a0: 31 2e 31 37 29 0a 20 20 20 20 20 20 20 28 70 61 1.17). (pa
24b0: 74 63 68 2d 64 62 29 29 0a 20 20 20 20 20 20 28 tch-db)). (
24c0: 28 3c 20 6d 76 65 72 20 31 2e 32 31 29 0a 20 20 (< mver 1.21).
24d0: 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 (sqlite3:ex
24e0: 65 63 75 74 65 20 64 62 20 22 44 52 4f 50 20 54 ecute db "DROP T
24f0: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 6d ABLE IF EXISTS m
2500: 65 74 61 64 61 74 3b 22 29 0a 20 20 20 20 20 20 etadat;").
2510: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
2520: 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 e db "CREATE TAB
2530: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 LE IF NOT EXISTS
2540: 20 6d 65 74 61 64 61 74 20 28 69 64 20 49 4e 54 metadat (id INT
2550: 45 47 45 52 2c 20 76 61 72 20 54 45 58 54 2c 20 EGER, var TEXT,
2560: 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 20 val TEXT,.
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2580: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 CONS
2590: 54 52 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 TRAINT metadat_c
25a0: 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 onstraint UNIQUE
25b0: 20 28 76 61 72 29 29 3b 22 29 0a 20 20 20 20 20 (var));").
25c0: 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 (db:set-var db
25d0: 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 "MEGATEST_VERSI
25e0: 4f 4e 22 20 31 2e 32 31 29 20 3b 3b 20 73 65 74 ON" 1.21) ;; set
25f0: 20 62 65 66 6f 72 65 2c 20 6a 75 73 74 20 69 6e before, just in
2600: 20 63 61 73 65 20 74 68 65 20 63 68 61 6e 67 65 case the change
2610: 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 61 70 s are already ap
2620: 70 6c 69 65 64 0a 20 20 20 20 20 20 20 28 73 71 plied. (sq
2630: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2640: 20 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 29 0a test-meta-def).
2650: 09 09 09 09 09 3b 28 66 6f 72 2d 65 61 63 68 20 .....;(for-each
2660: 0a 09 09 09 09 09 3b 20 28 6c 61 6d 62 64 61 20 ......; (lambda
2670: 28 73 74 6d 74 29 0a 09 09 09 09 09 3b 20 20 20 (stmt)......;
2680: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2690: 20 64 62 20 73 74 6d 74 29 29 0a 09 09 09 09 09 db stmt))......
26a0: 3b 20 28 6c 69 73 74 20 0a 09 09 09 09 09 3b 20 ; (list ......;
26b0: 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 "ALTER TABLE te
26c0: 73 74 73 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66 sts ADD COLUMN f
26d0: 69 72 73 74 5f 65 72 72 20 54 45 58 54 3b 22 0a irst_err TEXT;".
26e0: 09 09 09 09 09 3b 20 20 22 41 4c 54 45 52 20 54 .....; "ALTER T
26f0: 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 ABLE tests ADD C
2700: 4f 4c 55 4d 4e 20 66 69 72 73 74 5f 77 61 72 6e OLUMN first_warn
2710: 20 54 45 58 54 3b 22 0a 09 09 09 09 09 3b 20 20 TEXT;"......;
2720: 29 29 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 )). (patch
2730: 2d 64 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 -db)). ((<
2740: 6d 76 65 72 20 31 2e 32 34 29 0a 20 20 20 20 20 mver 1.24).
2750: 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 (db:set-var db
2760: 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 "MEGATEST_VERSI
2770: 4f 4e 22 20 31 2e 32 34 29 0a 20 20 20 20 20 20 ON" 1.24).
2780: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
2790: 65 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 e db "DROP TABLE
27a0: 20 49 46 20 45 58 49 53 54 53 20 74 65 73 74 5f IF EXISTS test_
27b0: 64 61 74 61 3b 22 29 0a 20 20 20 20 20 20 20 28 data;"). (
27c0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
27d0: 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 db "DROP TABLE I
27e0: 46 20 45 58 49 53 54 53 20 74 65 73 74 5f 6d 65 F EXISTS test_me
27f0: 74 61 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 ta;"). (sq
2800: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2810: 20 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 29 0a test-meta-def).
2820: 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a (sqlite3:
2830: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
2840: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 TE TABLE IF NOT
2850: 45 58 49 53 54 53 20 74 65 73 74 5f 64 61 74 61 EXISTS test_data
2860: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
2870: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 MARY KEY,.
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2890: 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 69 test_i
28a0: 64 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 d INTEGER,.
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28c0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 categ
28d0: 6f 72 79 20 54 45 58 54 20 44 45 46 41 55 4c 54 ory TEXT DEFAULT
28e0: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2900: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 54 45 variable TE
2910: 58 54 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 XT,..
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c val
2930: 75 65 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 20 ue REAL,..
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2950: 20 20 65 78 70 65 63 74 65 64 20 52 45 41 4c 2c expected REAL,
2960: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2970: 20 20 20 20 20 20 20 20 20 20 74 6f 6c 20 52 45 tol RE
2980: 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 AL,.
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a0: 20 20 20 20 75 6e 69 74 73 20 54 45 58 54 2c 0a units TEXT,.
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29d0: 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 comment TEXT DEF
29e0: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a00: 20 20 20 20 20 20 20 20 20 73 74 61 74 75 73 20 status
2a10: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f TEXT DEFAULT 'n/
2a20: 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 a',.
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a40: 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 CONSTRAINT tes
2a50: 74 5f 64 61 74 61 20 55 4e 49 51 55 45 20 28 74 t_data UNIQUE (t
2a60: 65 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c est_id,category,
2a70: 76 61 72 69 61 62 6c 65 29 29 3b 22 29 0a 20 20 variable));").
2a80: 20 20 20 20 20 28 70 72 69 6e 74 20 22 57 41 52 (print "WAR
2a90: 4e 49 4e 47 3a 20 54 61 62 6c 65 20 74 65 73 74 NING: Table test
2aa0: 5f 64 61 74 61 20 61 6e 64 20 74 65 73 74 5f 6d _data and test_m
2ab0: 65 74 61 20 77 65 72 65 20 72 65 63 72 65 61 74 eta were recreat
2ac0: 65 64 2e 20 50 6c 65 61 73 65 20 64 6f 20 6d 65 ed. Please do me
2ad0: 67 61 74 65 73 74 20 2d 75 70 64 61 74 65 2d 6d gatest -update-m
2ae0: 65 74 61 22 29 0a 20 20 20 20 20 20 20 28 70 61 eta"). (pa
2af0: 74 63 68 2d 64 62 29 29 0a 20 20 20 20 20 20 28 tch-db)). (
2b00: 28 3c 20 6d 76 65 72 20 31 2e 32 37 29 0a 20 20 (< mver 1.27).
2b10: 20 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 (db:set-var
2b20: 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 db "MEGATEST_VE
2b30: 52 53 49 4f 4e 22 20 31 2e 32 37 29 0a 20 20 20 RSION" 1.27).
2b40: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
2b50: 63 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 cute db "ALTER T
2b60: 41 42 4c 45 20 74 65 73 74 5f 64 61 74 61 20 41 ABLE test_data A
2b70: 44 44 20 43 4f 4c 55 4d 4e 20 74 79 70 65 20 54 DD COLUMN type T
2b80: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 EXT DEFAULT '';"
2b90: 29 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d ). (patch-
2ba0: 64 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d db)). ((< m
2bb0: 76 65 72 20 31 2e 32 39 29 0a 20 20 20 20 20 20 ver 1.29).
2bc0: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
2bd0: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
2be0: 4e 22 20 31 2e 32 39 29 0a 20 20 20 20 20 20 20 N" 1.29).
2bf0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2c00: 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 db "ALTER TABLE
2c10: 20 74 65 73 74 5f 73 74 65 70 73 20 41 44 44 20 test_steps ADD
2c20: 43 4f 4c 55 4d 4e 20 6c 6f 67 66 69 6c 65 20 54 COLUMN logfile T
2c30: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 EXT DEFAULT '';"
2c40: 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 ). (sqlite
2c50: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 41 4c 3:execute db "AL
2c60: 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 TER TABLE tests
2c70: 41 44 44 20 43 4f 4c 55 4d 4e 20 73 68 6f 72 74 ADD COLUMN short
2c80: 64 69 72 20 54 45 58 54 20 44 45 46 41 55 4c 54 dir TEXT DEFAULT
2c90: 20 27 27 3b 22 29 29 0a 20 20 20 20 20 20 28 28 '';")). ((
2ca0: 3c 20 6d 76 65 72 20 31 2e 33 36 29 0a 20 20 20 < mver 1.36).
2cb0: 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 (db:set-var
2cc0: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
2cd0: 53 49 4f 4e 22 20 31 2e 33 36 29 0a 20 20 20 20 SION" 1.36).
2ce0: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
2cf0: 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 ute db "ALTER TA
2d00: 42 4c 45 20 74 65 73 74 5f 6d 65 74 61 20 41 44 BLE test_meta AD
2d10: 44 20 43 4f 4c 55 4d 4e 20 6a 6f 62 67 72 6f 75 D COLUMN jobgrou
2d20: 70 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 p TEXT DEFAULT '
2d30: 64 65 66 61 75 6c 74 27 3b 22 29 29 0a 20 20 20 default';")).
2d40: 20 20 20 28 28 3c 20 6d 76 65 72 20 31 2e 33 37 ((< mver 1.37
2d50: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 ). (db:set
2d60: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
2d70: 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 33 37 29 T_VERSION" 1.37)
2d80: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2d90: 3a 65 78 65 63 75 74 65 20 64 62 20 22 41 4c 54 :execute db "ALT
2da0: 45 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 ER TABLE tests A
2db0: 44 44 20 43 4f 4c 55 4d 4e 20 61 72 63 68 69 76 DD COLUMN archiv
2dc0: 65 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 ed INTEGER DEFAU
2dd0: 4c 54 20 30 3b 22 29 29 20 0a 20 20 20 20 20 20 LT 0;")) .
2de0: 28 28 3c 20 6d 76 65 72 20 6d 65 67 61 74 65 73 ((< mver megates
2df0: 74 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 t-version).
2e00: 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 (db:set-var db
2e10: 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 "MEGATEST_VERSI
2e20: 4f 4e 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72 ON" megatest-ver
2e30: 73 69 6f 6e 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d sion))))))..;;==
2e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 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 0a 3b 3b 20 6d 65 74 61 20 67 65 74 ====.;; meta get
2e90: 20 61 6e 64 20 73 65 74 20 76 61 72 73 0a 3b 3b and set vars.;;
2ea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 0a 3b 3b 20 72 65 74 75 72 ======..;; retur
2ef0: 6e 73 20 6e 75 6d 62 65 72 20 69 66 20 73 74 72 ns number if str
2f00: 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 69 73 20 73 ing->number is s
2f10: 75 63 63 65 73 73 66 75 6c 2c 20 73 74 72 69 6e uccessful, strin
2f20: 67 20 6f 74 68 65 72 77 69 73 65 0a 28 64 65 66 g otherwise.(def
2f30: 69 6e 65 20 28 64 62 3a 67 65 74 2d 76 61 72 20 ine (db:get-var
2f40: 64 62 20 76 61 72 29 0a 20 20 28 6c 65 74 20 28 db var). (let (
2f50: 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 (res #f)). (s
2f60: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
2f70: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
2f80: 20 28 76 61 6c 29 0a 20 20 20 20 20 20 20 28 73 (val). (s
2f90: 65 74 21 20 72 65 73 20 76 61 6c 29 29 0a 20 20 et! res val)).
2fa0: 20 20 20 64 62 20 22 53 45 4c 45 43 54 20 76 61 db "SELECT va
2fb0: 6c 20 46 52 4f 4d 20 6d 65 74 61 64 61 74 20 57 l FROM metadat W
2fc0: 48 45 52 45 20 76 61 72 3d 3f 3b 22 20 76 61 72 HERE var=?;" var
2fd0: 29 0a 20 20 20 20 28 69 66 20 28 73 74 72 69 6e ). (if (strin
2fe0: 67 3f 20 72 65 73 29 0a 09 28 6c 65 74 20 28 28 g? res)..(let ((
2ff0: 76 61 6c 6e 75 6d 20 28 73 74 72 69 6e 67 2d 3e valnum (string->
3000: 6e 75 6d 62 65 72 20 72 65 73 29 29 29 0a 09 20 number res)))..
3010: 20 28 69 66 20 76 61 6c 6e 75 6d 20 76 61 6c 6e (if valnum valn
3020: 75 6d 20 72 65 73 29 29 0a 09 72 65 73 29 29 29 um res))..res)))
3030: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 73 65 ..(define (db:se
3040: 74 2d 76 61 72 20 64 62 20 76 61 72 20 76 61 6c t-var db var val
3050: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
3060: 63 75 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 cute db "INSERT
3070: 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 OR REPLACE INTO
3080: 6d 65 74 61 64 61 74 20 28 76 61 72 2c 76 61 6c metadat (var,val
3090: 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 3b 22 ) VALUES (?,?);"
30a0: 20 76 61 72 20 76 61 6c 29 29 0a 0a 3b 3b 20 75 var val))..;; u
30b0: 73 65 20 61 20 67 6c 6f 62 61 6c 20 66 6f 72 20 se a global for
30c0: 73 6f 6d 65 20 70 72 69 6d 69 74 69 76 65 20 63 some primitive c
30d0: 61 63 68 69 6e 67 2c 20 69 74 20 69 73 20 6a 75 aching, it is ju
30e0: 73 74 20 73 69 6c 6c 79 20 74 6f 20 72 65 2d 72 st silly to re-r
30f0: 65 61 64 20 74 68 65 20 64 62 20 0a 3b 3b 20 6f ead the db .;; o
3100: 76 65 72 20 61 6e 64 20 6f 76 65 72 20 61 67 61 ver and over aga
3110: 69 6e 20 66 6f 72 20 74 68 65 20 6b 65 79 73 20 in for the keys
3120: 73 69 6e 63 65 20 74 68 65 79 20 6e 65 76 65 72 since they never
3130: 20 63 68 61 6e 67 65 0a 0a 28 64 65 66 69 6e 65 change..(define
3140: 20 2a 64 62 2d 6b 65 79 73 2a 20 23 66 29 0a 0a *db-keys* #f)..
3150: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
3160: 6b 65 79 73 20 64 62 29 0a 20 20 28 69 66 20 2a keys db). (if *
3170: 64 62 2d 6b 65 79 73 2a 20 2a 64 62 2d 6b 65 79 db-keys* *db-key
3180: 73 2a 20 0a 20 20 20 20 20 20 28 6c 65 74 20 28 s* . (let (
3190: 28 72 65 73 20 27 28 29 29 29 0a 09 28 73 71 6c (res '()))..(sql
31a0: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
31b0: 77 20 0a 09 20 28 6c 61 6d 62 64 61 20 28 6b 65 w .. (lambda (ke
31c0: 79 20 6b 65 79 74 79 70 65 29 0a 09 20 20 20 28 y keytype).. (
31d0: 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 set! res (cons (
31e0: 76 65 63 74 6f 72 20 6b 65 79 20 6b 65 79 74 79 vector key keyty
31f0: 70 65 29 20 72 65 73 29 29 29 0a 09 20 64 62 0a pe) res))).. db.
3200: 09 20 22 53 45 4c 45 43 54 20 66 69 65 6c 64 6e . "SELECT fieldn
3210: 61 6d 65 2c 66 69 65 6c 64 74 79 70 65 20 46 52 ame,fieldtype FR
3220: 4f 4d 20 6b 65 79 73 20 4f 52 44 45 52 20 42 59 OM keys ORDER BY
3230: 20 69 64 20 44 45 53 43 3b 22 29 0a 09 28 73 65 id DESC;")..(se
3240: 74 21 20 2a 64 62 2d 6b 65 79 73 2a 20 72 65 73 t! *db-keys* res
3250: 29 0a 09 72 65 73 29 29 29 0a 0a 28 64 65 66 69 )..res)))..(defi
3260: 6e 65 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 65 ne (db:get-value
3270: 2d 62 79 2d 68 65 61 64 65 72 20 72 6f 77 20 68 -by-header row h
3280: 65 61 64 65 72 20 66 69 65 6c 64 29 0a 20 20 3b eader field). ;
3290: 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 ; (debug:print 2
32a0: 20 22 64 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 "db:get-value-b
32b0: 79 2d 68 65 61 64 65 72 20 72 6f 77 3a 20 22 20 y-header row: "
32c0: 72 6f 77 20 22 20 68 65 61 64 65 72 3a 20 22 20 row " header: "
32d0: 68 65 61 64 65 72 20 22 20 66 69 65 6c 64 3a 20 header " field:
32e0: 22 20 66 69 65 6c 64 29 0a 20 20 28 69 66 20 28 " field). (if (
32f0: 6e 75 6c 6c 3f 20 68 65 61 64 65 72 29 20 23 66 null? header) #f
3300: 0a 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 . (let loop
3310: 20 28 28 68 65 64 20 28 63 61 72 20 68 65 61 64 ((hed (car head
3320: 65 72 29 29 0a 09 09 20 28 74 61 6c 20 28 63 64 er))... (tal (cd
3330: 72 20 68 65 61 64 65 72 29 29 0a 09 09 20 28 6e r header))... (n
3340: 20 20 20 30 29 29 0a 09 28 69 66 20 28 65 71 75 0))..(if (equ
3350: 61 6c 3f 20 68 65 64 20 66 69 65 6c 64 29 0a 09 al? hed field)..
3360: 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 (vector-ref
3370: 72 6f 77 20 6e 29 0a 09 20 20 20 20 28 69 66 20 row n).. (if
3380: 28 6e 75 6c 6c 3f 20 74 61 6c 29 20 23 66 20 28 (null? tal) #f (
3390: 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 loop (car tal)(c
33a0: 64 72 20 74 61 6c 29 28 2b 20 6e 20 31 29 29 29 dr tal)(+ n 1)))
33b0: 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d ))))..;;========
33c0: 3d 3d 3d 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 0a 3b ==============.;
3400: 3b 20 20 52 20 55 20 4e 20 53 0a 3b 3b 3d 3d 3d ; R U N S.;;===
3410: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 0a 28 64 65 66 69 6e 65 20 28 72 75 ===..(define (ru
3460: 6e 73 3a 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 ns:get-std-run-f
3470: 69 65 6c 64 73 20 6b 65 79 73 20 72 65 6d 66 69 ields keys remfi
3480: 65 6c 64 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 elds). (let* ((
3490: 68 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e header (appen
34a0: 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 d (map key:get-f
34b0: 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 ieldname keys)..
34c0: 09 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 .. remfields)
34d0: 29 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 ).. (keystr (
34e0: 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 conc (keys->keys
34f0: 74 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 tr keys) ","....
3500: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
3510: 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 perse remfields
3520: 22 2c 22 29 29 29 29 0a 20 20 20 20 28 6c 69 73 ",")))). (lis
3530: 74 20 6b 65 79 73 74 72 20 68 65 61 64 65 72 29 t keystr header)
3540: 29 29 0a 0a 3b 3b 20 57 41 53 20 64 62 2d 67 65 ))..;; WAS db-ge
3550: 74 2d 72 75 6e 73 20 46 49 58 4d 45 20 49 4e 20 t-runs FIXME IN
3560: 52 45 4d 41 49 4e 49 4e 47 20 43 4f 44 45 0a 3b REMAINING CODE.;
3570: 3b 0a 3b 3b 20 4d 45 52 47 45 20 54 48 49 53 20 ;.;; MERGE THIS
3580: 57 49 54 48 20 64 62 3a 67 65 74 2d 72 75 6e 73 WITH db:get-runs
3590: 2c 20 61 63 63 69 64 65 6e 74 6c 79 20 77 72 6f , accidently wro
35a0: 74 65 20 69 74 20 74 77 69 63 65 0a 3b 3b 0a 3b te it twice.;;.;
35b0: 3b 20 72 65 70 6c 61 63 65 20 68 65 61 64 65 72 ; replace header
35c0: 20 61 6e 64 20 6b 65 79 73 74 72 20 77 69 74 68 and keystr with
35d0: 20 61 20 63 61 6c 6c 20 74 6f 20 72 75 6e 73 3a a call to runs:
35e0: 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 69 65 6c get-std-run-fiel
35f0: 64 73 0a 3b 3b 0a 3b 3b 20 6b 65 79 70 61 74 74 ds.;;.;; keypatt
3600: 73 3a 20 28 20 28 4b 45 59 31 20 22 61 62 63 25 s: ( (KEY1 "abc%
3610: 64 65 66 22 29 28 4b 45 59 32 20 22 25 22 29 20 def")(KEY2 "%")
3620: 29 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 ).;;.(define (db
3630: 3a 67 65 74 2d 72 75 6e 73 20 64 62 20 72 75 6e :get-runs db run
3640: 70 61 74 74 20 63 6f 75 6e 74 20 6f 66 66 73 65 patt count offse
3650: 74 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 6c t keypatts). (l
3660: 65 74 2a 20 28 28 72 65 73 20 20 20 20 20 20 27 et* ((res '
3670: 28 29 29 0a 09 20 28 6b 65 79 73 20 20 20 20 20 ()).. (keys
3680: 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 (db:get-keys db
3690: 29 29 0a 09 20 28 72 65 6d 66 69 65 6c 64 73 20 )).. (remfields
36a0: 28 6c 69 73 74 20 22 69 64 22 20 22 72 75 6e 6e (list "id" "runn
36b0: 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 73 74 ame" "state" "st
36c0: 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 22 65 atus" "owner" "e
36d0: 76 65 6e 74 5f 74 69 6d 65 22 29 29 0a 09 20 28 vent_time")).. (
36e0: 68 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e header (appen
36f0: 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 d (map key:get-f
3700: 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 ieldname keys)..
3710: 09 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 .. remfields)
3720: 29 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 ).. (keystr (
3730: 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 conc (keys->keys
3740: 74 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 tr keys) ","....
3750: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
3760: 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 perse remfields
3770: 22 2c 22 29 29 29 0a 09 20 28 71 72 79 73 74 72 ","))).. (qrystr
3780: 20 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 (conc "SELEC
3790: 54 20 22 20 6b 65 79 73 74 72 20 22 20 46 52 4f T " keystr " FRO
37a0: 4d 20 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e M runs WHERE run
37b0: 6e 61 6d 65 20 4c 49 4b 45 20 3f 20 22 0a 09 09 name LIKE ? "...
37c0: 09 20 20 3b 3b 20 47 65 6e 65 72 61 74 65 3a 20 . ;; Generate:
37d0: 22 20 41 4e 44 20 78 20 4c 49 4b 45 20 27 6b 65 " AND x LIKE 'ke
37e0: 79 70 61 74 74 27 20 2e 2e 2e 22 0a 09 09 09 20 ypatt' ..."....
37f0: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6b 65 79 70 (if (null? keyp
3800: 61 74 74 73 29 20 22 22 0a 09 09 09 20 20 20 20 atts) ""....
3810: 20 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 0a (conc " AND ".
3820: 09 09 09 09 20 20 20 20 28 73 74 72 69 6e 67 2d .... (string-
3830: 6a 6f 69 6e 20 0a 09 09 09 09 20 20 20 20 20 28 join ..... (
3840: 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 map (lambda (key
3850: 70 61 74 74 29 0a 09 09 09 09 09 20 20 20 20 28 patt)...... (
3860: 6c 65 74 20 28 28 6b 65 79 20 20 28 63 61 72 20 let ((key (car
3870: 6b 65 79 70 61 74 74 29 29 0a 09 09 09 09 09 09 keypatt)).......
3880: 20 20 28 70 61 74 74 20 28 63 61 64 72 20 6b 65 (patt (cadr ke
3890: 79 70 61 74 74 29 29 29 0a 09 09 09 09 09 20 20 ypatt)))......
38a0: 20 20 20 20 28 63 6f 6e 63 20 6b 65 79 20 22 20 (conc key "
38b0: 4c 49 4b 45 20 27 22 20 70 61 74 74 20 22 27 22 LIKE '" patt "'"
38c0: 29 29 29 0a 09 09 09 09 09 20 20 6b 65 79 70 61 )))...... keypa
38d0: 74 74 73 29 0a 09 09 09 09 20 20 20 20 20 22 20 tts)..... "
38e0: 41 4e 44 20 22 29 29 29 0a 09 09 09 20 20 22 20 AND "))).... "
38f0: 4f 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 ORDER BY event_t
3900: 69 6d 65 20 44 45 53 43 20 22 0a 09 09 09 20 20 ime DESC "....
3910: 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 63 6f 75 (if (number? cou
3920: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 28 63 6f nt).... (co
3930: 6e 63 20 22 20 4c 49 4d 49 54 20 22 20 63 6f 75 nc " LIMIT " cou
3940: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 22 22 29 nt).... "")
3950: 0a 09 09 09 20 20 28 69 66 20 28 6e 75 6d 62 65 .... (if (numbe
3960: 72 3f 20 6f 66 66 73 65 74 29 0a 09 09 09 20 20 r? offset)....
3970: 20 20 20 20 28 63 6f 6e 63 20 22 20 4f 46 46 53 (conc " OFFS
3980: 45 54 20 22 20 6f 66 66 73 65 74 29 0a 09 09 09 ET " offset)....
3990: 20 20 20 20 20 20 22 22 29 29 29 29 0a 20 20 20 "")))).
39a0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 38 20 (debug:print 8
39b0: 22 49 4e 46 4f 3a 20 64 62 3a 67 65 74 2d 72 75 "INFO: db:get-ru
39c0: 6e 73 20 71 72 79 73 74 72 3a 20 22 20 71 72 79 ns qrystr: " qry
39d0: 73 74 72 20 22 5c 6e 6b 65 79 70 61 74 74 73 3a str "\nkeypatts:
39e0: 20 22 20 6b 65 79 70 61 74 74 73 20 22 5c 6e 20 " keypatts "\n
39f0: 20 6f 66 66 73 65 74 3a 20 22 20 6f 66 66 73 65 offset: " offse
3a00: 74 20 22 20 6c 69 6d 69 74 3a 20 22 20 63 6f 75 t " limit: " cou
3a10: 6e 74 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 nt). (sqlite3
3a20: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 :for-each-row.
3a30: 20 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 (lambda (a .
3a40: 78 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 x). (set!
3a50: 72 65 73 20 28 63 6f 6e 73 20 28 61 70 70 6c 79 res (cons (apply
3a60: 20 76 65 63 74 6f 72 20 61 20 78 29 20 72 65 73 vector a x) res
3a70: 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 ))). db.
3a80: 20 71 72 79 73 74 72 0a 20 20 20 20 20 72 75 6e qrystr. run
3a90: 70 61 74 74 29 0a 20 20 20 20 28 76 65 63 74 6f patt). (vecto
3aa0: 72 20 68 65 61 64 65 72 20 72 65 73 29 29 29 0a r header res))).
3ab0: 0a 3b 3b 20 6a 75 73 74 20 67 65 74 20 63 6f 75 .;; just get cou
3ac0: 6e 74 20 6f 66 20 72 75 6e 73 0a 28 64 65 66 69 nt of runs.(defi
3ad0: 6e 65 20 28 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 ne (db:get-num-r
3ae0: 75 6e 73 20 64 62 20 72 75 6e 70 61 74 74 29 0a uns db runpatt).
3af0: 20 20 28 6c 65 74 20 28 28 6e 75 6d 72 75 6e 73 (let ((numruns
3b00: 20 30 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 0)). (sqlite
3b10: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 3:for-each-row .
3b20: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f (lambda (co
3b30: 75 6e 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 unt). (set
3b40: 21 20 6e 75 6d 72 75 6e 73 20 63 6f 75 6e 74 29 ! numruns count)
3b50: 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 ). db. "
3b60: 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 69 64 29 SELECT COUNT(id)
3b70: 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 FROM runs WHERE
3b80: 20 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 3f 3b runname LIKE ?;
3b90: 22 20 72 75 6e 70 61 74 74 29 0a 20 20 20 20 6e " runpatt). n
3ba0: 75 6d 72 75 6e 73 29 29 0a 0a 3b 3b 20 75 73 65 umruns))..;; use
3bb0: 20 28 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 (get-value-by-h
3bc0: 65 61 64 65 72 20 28 64 62 3a 67 65 74 2d 68 65 eader (db:get-he
3bd0: 61 64 65 72 20 72 75 6e 69 6e 66 6f 29 28 64 62 ader runinfo)(db
3be0: 3a 67 65 74 2d 72 6f 77 20 72 75 6e 69 6e 66 6f :get-row runinfo
3bf0: 29 29 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 )).(define (db:g
3c00: 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 64 62 20 72 et-run-info db r
3c10: 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 2a 20 28 un-id). (let* (
3c20: 28 72 65 73 20 20 20 20 20 20 23 66 29 0a 09 20 (res #f)..
3c30: 28 6b 65 79 73 20 20 20 20 20 20 28 64 62 3a 67 (keys (db:g
3c40: 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 28 et-keys db)).. (
3c50: 72 65 6d 66 69 65 6c 64 73 20 28 6c 69 73 74 20 remfields (list
3c60: 22 69 64 22 20 22 72 75 6e 6e 61 6d 65 22 20 22 "id" "runname" "
3c70: 73 74 61 74 65 22 20 22 73 74 61 74 75 73 22 20 state" "status"
3c80: 22 6f 77 6e 65 72 22 20 22 65 76 65 6e 74 5f 74 "owner" "event_t
3c90: 69 6d 65 22 29 29 0a 09 20 28 68 65 61 64 65 72 ime")).. (header
3ca0: 20 20 20 20 28 61 70 70 65 6e 64 20 28 6d 61 70 (append (map
3cb0: 20 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 key:get-fieldna
3cc0: 6d 65 20 6b 65 79 73 29 0a 09 09 09 20 20 20 20 me keys)....
3cd0: 72 65 6d 66 69 65 6c 64 73 29 29 0a 09 20 28 6b remfields)).. (k
3ce0: 65 79 73 74 72 20 20 20 20 28 63 6f 6e 63 20 28 eystr (conc (
3cf0: 6b 65 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 keys->keystr key
3d00: 73 29 20 22 2c 22 0a 09 09 09 20 20 28 73 74 72 s) ",".... (str
3d10: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 ing-intersperse
3d20: 72 65 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 29 remfields ",")))
3d30: 29 0a 20 20 20 20 3b 3b 20 28 64 65 62 75 67 3a ). ;; (debug:
3d40: 70 72 69 6e 74 20 30 20 22 64 62 3a 67 65 74 2d print 0 "db:get-
3d50: 72 75 6e 2d 69 6e 66 6f 20 72 75 6e 2d 69 64 3a run-info run-id:
3d60: 20 22 20 72 75 6e 2d 69 64 20 22 20 68 65 61 64 " run-id " head
3d70: 65 72 3a 20 22 20 68 65 61 64 65 72 20 22 20 6b er: " header " k
3d80: 65 79 73 74 72 3a 20 22 20 6b 65 79 73 74 72 29 eystr: " keystr)
3d90: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f . (sqlite3:fo
3da0: 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 r-each-row.
3db0: 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 78 29 0a (lambda (a . x).
3dc0: 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 (set! res
3dd0: 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 61 (apply vector a
3de0: 20 78 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 x))). db.
3df0: 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 (conc "SELECT
3e00: 20 22 20 6b 65 79 73 74 72 20 22 20 46 52 4f 4d " keystr " FROM
3e10: 20 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f runs WHERE id=?
3e20: 3b 22 29 0a 20 20 20 20 20 72 75 6e 2d 69 64 29 ;"). run-id)
3e30: 0a 20 20 20 20 28 76 65 63 74 6f 72 20 68 65 61 . (vector hea
3e40: 64 65 72 20 72 65 73 29 29 29 0a 0a 28 64 65 66 der res)))..(def
3e50: 69 6e 65 20 28 64 62 3a 73 65 74 2d 63 6f 6d 6d ine (db:set-comm
3e60: 65 6e 74 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 ent-for-run db r
3e70: 75 6e 2d 69 64 20 63 6f 6d 6d 65 6e 74 29 0a 20 un-id comment).
3e80: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
3e90: 65 20 64 62 20 22 55 50 44 41 54 45 20 72 75 6e e db "UPDATE run
3ea0: 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 s SET comment=?
3eb0: 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 63 6f 6d WHERE id=?;" com
3ec0: 6d 65 6e 74 20 72 75 6e 2d 69 64 29 29 0a 0a 3b ment run-id))..;
3ed0: 3b 20 64 6f 65 73 20 6e 6f 74 20 28 6f 62 76 69 ; does not (obvi
3ee0: 6f 75 73 6c 79 21 29 20 72 65 6d 6f 76 65 64 20 ously!) removed
3ef0: 64 65 70 65 6e 64 65 6e 74 20 64 61 74 61 2e 20 dependent data.
3f00: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c .(define (db:del
3f10: 65 74 65 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 ete-run db run-i
3f20: 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 d). (sqlite3:ex
3f30: 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 ecute db "DELETE
3f40: 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 FROM runs WHERE
3f50: 20 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 29 id=?;" run-id))
3f60: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 75 70 ..(define (db:up
3f70: 64 61 74 65 2d 72 75 6e 2d 65 76 65 6e 74 5f 74 date-run-event_t
3f80: 69 6d 65 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 ime db run-id).
3f90: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
3fa0: 65 20 64 62 20 22 55 50 44 41 54 45 20 72 75 6e e db "UPDATE run
3fb0: 73 20 53 45 54 20 65 76 65 6e 74 5f 74 69 6d 65 s SET event_time
3fc0: 3d 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 =strftime('%s','
3fd0: 6e 6f 77 27 29 20 57 48 45 52 45 20 69 64 3d 3f now') WHERE id=?
3fe0: 3b 22 20 72 75 6e 2d 69 64 29 29 20 0a 0a 3b 3b ;" run-id)) ..;;
3ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 3b 3b 20 4b 20 45 20 59 20 ======.;; K E Y
4040: 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 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 0a 0a 3b 3b 20 67 ==========..;; g
4090: 65 74 20 6b 65 79 20 76 61 6c 20 70 61 69 72 73 et key val pairs
40a0: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 72 75 6e for a given run
40b0: 2d 69 64 0a 3b 3b 20 28 20 28 46 49 45 4c 44 4e -id.;; ( (FIELDN
40c0: 41 4d 45 31 20 6b 65 79 76 61 6c 31 29 20 28 46 AME1 keyval1) (F
40d0: 49 45 4c 44 4e 41 4d 45 32 20 6b 65 79 76 61 6c IELDNAME2 keyval
40e0: 32 29 20 2e 2e 2e 20 29 0a 28 64 65 66 69 6e 65 2) ... ).(define
40f0: 20 28 64 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c (db:get-key-val
4100: 2d 70 61 69 72 73 20 64 62 20 72 75 6e 2d 69 64 -pairs db run-id
4110: 29 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 ). (let* ((keys
4120: 20 28 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a (get-keys db)).
4130: 09 20 28 72 65 73 20 20 27 28 29 29 29 0a 20 20 . (res '())).
4140: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 (debug:print 6
4150: 20 22 6b 65 79 73 3a 20 22 20 6b 65 79 73 20 22 "keys: " keys "
4160: 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 run-id: " run-i
4170: 64 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 d). (for-each
4180: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda (
4190: 6b 65 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 key). (let
41a0: 20 28 28 71 72 79 20 28 63 6f 6e 63 20 22 53 45 ((qry (conc "SE
41b0: 4c 45 43 54 20 22 20 28 6b 65 79 3a 67 65 74 2d LECT " (key:get-
41c0: 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 22 fieldname key) "
41d0: 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 FROM runs WHERE
41e0: 20 69 64 3d 3f 3b 22 29 29 29 0a 09 20 3b 3b 20 id=?;"))).. ;;
41f0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
4200: 71 72 79 3a 20 22 20 71 72 79 29 0a 09 20 28 73 qry: " qry).. (s
4210: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
4220: 72 6f 77 20 0a 09 20 20 28 6c 61 6d 62 64 61 20 row .. (lambda
4230: 28 6b 65 79 2d 76 61 6c 29 0a 09 20 20 20 20 28 (key-val).. (
4240: 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 set! res (cons (
4250: 6c 69 73 74 20 28 6b 65 79 3a 67 65 74 2d 66 69 list (key:get-fi
4260: 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 6b 65 79 eldname key) key
4270: 2d 76 61 6c 29 20 72 65 73 29 29 29 0a 09 20 20 -val) res)))..
4280: 64 62 20 71 72 79 20 72 75 6e 2d 69 64 29 29 29 db qry run-id)))
4290: 0a 20 20 20 20 20 6b 65 79 73 29 0a 20 20 20 20 . keys).
42a0: 28 72 65 76 65 72 73 65 20 72 65 73 29 29 29 0a (reverse res))).
42b0: 0a 3b 3b 20 67 65 74 20 6b 65 79 20 76 61 6c 73 .;; get key vals
42c0: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 72 75 6e for a given run
42d0: 2d 69 64 0a 28 64 65 66 69 6e 65 20 28 64 62 3a -id.(define (db:
42e0: 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20 64 62 20 get-key-vals db
42f0: 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 2a 20 run-id). (let*
4300: 28 28 6b 65 79 73 20 28 67 65 74 2d 6b 65 79 73 ((keys (get-keys
4310: 20 64 62 29 29 0a 09 20 28 72 65 73 20 20 27 28 db)).. (res '(
4320: 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 ))). (debug:p
4330: 72 69 6e 74 20 36 20 22 6b 65 79 73 3a 20 22 20 rint 6 "keys: "
4340: 6b 65 79 73 20 22 20 72 75 6e 2d 69 64 3a 20 22 keys " run-id: "
4350: 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 66 6f run-id). (fo
4360: 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 6c 61 r-each . (la
4370: 6d 62 64 61 20 28 6b 65 79 29 0a 20 20 20 20 20 mbda (key).
4380: 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 63 6f (let ((qry (co
4390: 6e 63 20 22 53 45 4c 45 43 54 20 22 20 28 6b 65 nc "SELECT " (ke
43a0: 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 y:get-fieldname
43b0: 6b 65 79 29 20 22 20 46 52 4f 4d 20 72 75 6e 73 key) " FROM runs
43c0: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 29 29 WHERE id=?;")))
43d0: 0a 09 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 .. ;; (debug:pri
43e0: 6e 74 20 30 20 22 71 72 79 3a 20 22 20 71 72 79 nt 0 "qry: " qry
43f0: 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 ).. (sqlite3:for
4400: 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 20 28 6c -each-row .. (l
4410: 61 6d 62 64 61 20 28 6b 65 79 2d 76 61 6c 29 0a ambda (key-val).
4420: 09 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 . (set! res (
4430: 63 6f 6e 73 20 6b 65 79 2d 76 61 6c 20 72 65 73 cons key-val res
4440: 29 29 29 0a 09 20 20 64 62 20 71 72 79 20 72 75 ))).. db qry ru
4450: 6e 2d 69 64 29 29 29 0a 20 20 20 20 20 6b 65 79 n-id))). key
4460: 73 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 20 s). (reverse
4470: 72 65 73 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d res)))..;;======
4480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4490: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44c0: 0a 3b 3b 20 20 54 20 45 20 53 20 54 20 53 0a 3b .;; T E S T S.;
44d0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
44e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4510: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 73 74 61 74 =======..;; stat
4520: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
4530: 61 72 65 20 6c 69 73 74 73 2c 20 74 75 72 6e 20 are lists, turn
4540: 74 68 65 6d 20 69 6e 74 6f 20 28 22 50 41 53 53 them into ("PASS
4550: 22 2c 22 46 41 49 4c 22 2e 2e 2e 29 20 61 6e 64 ","FAIL"...) and
4560: 20 75 73 65 20 4e 4f 54 20 49 4e 0a 3b 3b 20 69 use NOT IN.;; i
4570: 2e 65 2e 20 74 68 65 73 65 20 6c 69 73 74 73 20 .e. these lists
4580: 64 65 66 69 6e 65 20 77 68 61 74 20 74 6f 20 4e define what to N
4590: 4f 54 20 73 68 6f 77 2e 0a 3b 3b 20 73 74 61 74 OT show..;; stat
45a0: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
45b0: 61 72 65 20 72 65 71 75 69 72 65 64 20 74 6f 20 are required to
45c0: 62 65 20 6c 69 73 74 73 2c 20 65 6d 70 74 79 20 be lists, empty
45d0: 69 73 20 6f 6b 0a 28 64 65 66 69 6e 65 20 28 64 is ok.(define (d
45e0: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b:get-tests-for-
45f0: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 run db run-id te
4600: 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 stpatt itempatt
4610: 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 29 states statuses)
4620: 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 27 . (let* ((res '
4630: 28 29 29 0a 09 20 28 73 74 61 74 65 73 2d 73 74 ()).. (states-st
4640: 72 20 20 20 20 28 63 6f 6e 63 20 22 28 27 22 20 r (conc "('"
4650: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
4660: 72 73 65 20 73 74 61 74 65 73 20 20 20 22 27 2c rse states "',
4670: 27 22 29 20 22 27 29 22 29 29 0a 09 20 28 73 74 '") "')")).. (st
4680: 61 74 75 73 65 73 2d 73 74 72 20 20 28 63 6f 6e atuses-str (con
4690: 63 20 22 28 27 22 20 28 73 74 72 69 6e 67 2d 69 c "('" (string-i
46a0: 6e 74 65 72 73 70 65 72 73 65 20 73 74 61 74 75 ntersperse statu
46b0: 73 65 73 20 22 27 2c 27 22 29 20 22 27 29 22 29 ses "','") "')")
46c0: 29 0a 09 20 28 71 72 79 20 20 20 20 20 20 28 63 ).. (qry (c
46d0: 6f 6e 63 20 22 53 45 4c 45 43 54 20 69 64 2c 72 onc "SELECT id,r
46e0: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 un_id,testname,s
46f0: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
4700: 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c t_time,host,cpul
4710: 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 oad,diskfree,una
4720: 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 me,rundir,item_p
4730: 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e ath,run_duration
4740: 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d ,final_logf,comm
4750: 65 6e 74 20 22 0a 09 09 09 20 22 20 46 52 4f 4d ent ".... " FROM
4760: 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 6e tests WHERE run
4770: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 _id=? AND testna
4780: 6d 65 20 6c 69 6b 65 20 3f 20 41 4e 44 20 69 74 me like ? AND it
4790: 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 3f 20 22 em_path LIKE ? "
47a0: 20 0a 09 09 09 20 22 20 41 4e 44 20 4e 4f 54 20 .... " AND NOT
47b0: 28 73 74 61 74 65 20 69 6e 20 22 20 73 74 61 74 (state in " stat
47c0: 65 73 2d 73 74 72 20 22 20 41 4e 44 20 73 74 61 es-str " AND sta
47d0: 74 75 73 20 49 4e 20 22 20 73 74 61 74 75 73 65 tus IN " statuse
47e0: 73 2d 73 74 72 20 22 29 20 22 0a 09 09 09 20 3b s-str ") ".... ;
47f0: 3b 20 22 20 4f 52 44 45 52 20 42 59 20 69 64 20 ; " ORDER BY id
4800: 44 45 53 43 3b 22 0a 09 09 09 20 22 20 4f 52 44 DESC;".... " ORD
4810: 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69 6d 65 ER BY event_time
4820: 20 41 53 43 3b 22 20 3b 3b 20 50 4f 54 45 4e 54 ASC;" ;; POTENT
4830: 49 41 4c 20 49 53 53 55 45 21 20 43 48 45 43 4b IAL ISSUE! CHECK
4840: 20 4d 45 21 20 44 6f 65 73 20 61 6e 79 74 69 6e ME! Does anytin
4850: 67 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 69 73 g depend on this
4860: 20 62 65 69 6e 67 20 73 6f 72 74 65 64 20 62 79 being sorted by
4870: 20 69 64 3f 0a 09 09 09 20 29 29 29 0a 20 20 20 id?.... ))).
4880: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 38 20 (debug:print 8
4890: 22 49 4e 46 4f 3a 20 64 62 3a 67 65 74 2d 74 65 "INFO: db:get-te
48a0: 73 74 73 2d 66 6f 72 2d 72 75 6e 20 71 72 79 3d sts-for-run qry=
48b0: 22 20 71 72 79 29 0a 20 20 20 20 28 73 71 6c 69 " qry). (sqli
48c0: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
48d0: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda (
48e0: 61 20 2e 20 62 29 20 3b 3b 20 69 64 20 72 75 6e a . b) ;; id run
48f0: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
4900: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
4910: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
4920: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
4930: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
4940: 68 20 72 75 6e 2d 64 75 72 61 74 69 6f 6e 20 66 h run-duration f
4950: 69 6e 61 6c 2d 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal-logf commen
4960: 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 t). (set!
4970: 72 65 73 20 28 63 6f 6e 73 20 28 61 70 70 6c 79 res (cons (apply
4980: 20 76 65 63 74 6f 72 20 61 20 62 29 20 72 65 73 vector a b) res
4990: 29 29 29 20 3b 3b 20 69 64 20 72 75 6e 2d 69 64 ))) ;; id run-id
49a0: 20 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 testname state
49b0: 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d status event-tim
49c0: 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 e host cpuload d
49d0: 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 iskfree uname ru
49e0: 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 ndir item-path r
49f0: 75 6e 2d 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 un-duration fina
4a00: 6c 2d 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 20 l-logf comment)
4a10: 72 65 73 29 29 29 0a 20 20 20 20 20 64 62 20 0a res))). db .
4a20: 20 20 20 20 20 71 72 79 0a 20 20 20 20 20 72 75 qry. ru
4a30: 6e 2d 69 64 0a 20 20 20 20 20 28 69 66 20 74 65 n-id. (if te
4a40: 73 74 70 61 74 74 20 74 65 73 74 70 61 74 74 20 stpatt testpatt
4a50: 22 25 22 29 0a 20 20 20 20 20 28 69 66 20 69 74 "%"). (if it
4a60: 65 6d 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 empatt itempatt
4a70: 22 25 22 29 29 0a 20 20 20 20 72 65 73 29 29 0a "%")). res)).
4a80: 0a 3b 3b 20 74 68 69 73 20 6f 6e 65 20 69 73 20 .;; this one is
4a90: 61 20 62 69 74 20 62 72 6f 6b 65 6e 20 42 55 47 a bit broken BUG
4aa0: 20 46 49 58 4d 45 0a 28 64 65 66 69 6e 65 20 28 FIXME.(define (
4ab0: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 73 db:delete-test-s
4ac0: 74 65 70 2d 72 65 63 6f 72 64 73 20 64 62 20 72 tep-records db r
4ad0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
4ae0: 69 74 65 6d 64 61 74 29 0a 20 20 3b 3b 20 42 72 itemdat). ;; Br
4af0: 65 61 6b 69 6e 67 20 69 74 20 69 6e 74 6f 20 74 eaking it into t
4b00: 77 6f 20 71 75 65 72 69 65 73 20 66 6f 72 20 62 wo queries for b
4b10: 65 74 74 65 72 20 66 69 6c 65 20 61 63 63 65 73 etter file acces
4b20: 73 20 69 6e 74 65 72 6c 65 61 76 69 6e 67 0a 20 s interleaving.
4b30: 20 28 6c 65 74 20 28 28 69 64 73 20 27 28 29 29 (let ((ids '())
4b40: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
4b50: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 28 6c 61 6d or-each-row (lam
4b60: 62 64 61 20 28 69 64 29 0a 09 09 09 20 20 20 20 bda (id)....
4b70: 28 73 65 74 21 20 69 64 73 20 28 63 6f 6e 73 20 (set! ids (cons
4b80: 69 64 20 69 64 73 29 29 29 0a 09 09 09 20 20 64 id ids))).... d
4b90: 62 0a 09 09 09 20 20 22 53 45 4c 45 43 54 20 69 b.... "SELECT i
4ba0: 64 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 d FROM tests WHE
4bb0: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
4bc0: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
4bd0: 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 09 09 09 tem_path=?;"....
4be0: 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 run-id test-na
4bf0: 6d 65 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 me (item-list->p
4c00: 61 74 68 20 69 74 65 6d 64 61 74 29 29 0a 20 20 ath itemdat)).
4c10: 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d (for-each (lam
4c20: 62 64 61 20 28 69 64 29 0a 09 09 28 73 71 6c 69 bda (id)...(sqli
4c30: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
4c40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
4c50: 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 65 73 _steps WHERE tes
4c60: 74 5f 69 64 3d 3f 3b 22 20 69 64 29 0a 09 09 28 t_id=?;" id)...(
4c70: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 30 2e thread-sleep! 0.
4c80: 31 29 20 3b 3b 20 67 69 76 65 20 6f 74 68 65 72 1) ;; give other
4c90: 73 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 s access to the
4ca0: 64 62 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 db.
4cb0: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
4cc0: 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 ute db "DELETE F
4cd0: 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 ROM test_data WH
4ce0: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 ERE test_id=?;"
4cf0: 69 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 id).
4d00: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 (thread-slee
4d10: 70 21 20 30 2e 31 29 29 20 3b 3b 20 67 69 76 65 p! 0.1)) ;; give
4d20: 20 6f 74 68 65 72 73 20 61 63 63 65 73 73 20 74 others access t
4d30: 6f 20 74 68 65 20 64 62 0a 09 20 20 20 20 20 20 o the db..
4d40: 69 64 73 29 29 29 0a 3b 3b 22 44 45 4c 45 54 45 ids))).;;"DELETE
4d50: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
4d60: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 20 69 WHERE test_id i
4d70: 6e 20 28 53 45 4c 45 43 54 20 69 64 20 46 52 4f n (SELECT id FRO
4d80: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
4d90: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
4da0: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
4db0: 61 74 68 3d 3f 29 3b 22 20 0a 09 09 20 20 20 0a ath=?);" ... .
4dc0: 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ;; .(define (db:
4dd0: 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 65 63 6f delete-test-reco
4de0: 72 64 73 20 64 62 20 74 65 73 74 2d 69 64 29 0a rds db test-id).
4df0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
4e00: 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 te db "DELETE FR
4e10: 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 OM test_steps WH
4e20: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 ERE test_id=?;"
4e30: 74 65 73 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 test-id). (sqli
4e40: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
4e50: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
4e60: 5f 64 61 74 61 20 20 57 48 45 52 45 20 74 65 73 _data WHERE tes
4e70: 74 5f 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 t_id=?;" test-id
4e80: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
4e90: 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 cute db "DELETE
4ea0: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
4eb0: 20 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 29 id=?;" test-id)
4ec0: 29 0a 0a 3b 3b 20 73 65 74 20 74 65 73 74 73 20 )..;; set tests
4ed0: 77 69 74 68 20 73 74 61 74 65 20 63 75 72 72 73 with state currs
4ee0: 74 61 74 65 20 61 6e 64 20 73 74 61 74 75 73 20 tate and status
4ef0: 63 75 72 72 73 74 61 74 75 73 20 74 6f 20 6e 65 currstatus to ne
4f00: 77 73 74 61 74 65 20 61 6e 64 20 6e 65 77 73 74 wstate and newst
4f10: 61 74 75 73 0a 3b 3b 20 75 73 65 20 63 75 72 72 atus.;; use curr
4f20: 73 74 61 74 65 20 3d 20 23 66 20 61 6e 64 20 6f state = #f and o
4f30: 72 20 63 75 72 72 73 74 61 74 75 73 20 3d 20 23 r currstatus = #
4f40: 66 20 74 6f 20 61 70 70 6c 79 20 74 6f 20 61 6e f to apply to an
4f50: 79 20 73 74 61 74 65 20 6f 72 20 73 74 61 74 75 y state or statu
4f60: 73 20 72 65 73 70 65 63 74 69 76 65 6c 79 0a 3b s respectively.;
4f70: 3b 20 57 41 52 4e 49 4e 47 3a 20 53 51 4c 20 69 ; WARNING: SQL i
4f80: 6e 6a 65 63 74 69 6f 6e 20 72 69 73 6b 0a 28 64 njection risk.(d
4f90: 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 74 65 efine (db:set-te
4fa0: 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 sts-state-status
4fb0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e db run-id testn
4fc0: 61 6d 65 73 20 63 75 72 72 73 74 61 74 65 20 63 ames currstate c
4fd0: 75 72 72 73 74 61 74 75 73 20 6e 65 77 73 74 61 urrstatus newsta
4fe0: 74 65 20 6e 65 77 73 74 61 74 75 73 29 0a 20 20 te newstatus).
4ff0: 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 (for-each (lambd
5000: 61 20 28 74 65 73 74 6e 61 6d 65 29 0a 09 20 20 a (testname)..
5010: 20 20 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 (let ((qry (
5020: 63 6f 6e 63 20 22 55 50 44 41 54 45 20 74 65 73 conc "UPDATE tes
5030: 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f 2c 73 ts SET state=?,s
5040: 74 61 74 75 73 3d 3f 20 57 48 45 52 45 20 22 0a tatus=? WHERE ".
5050: 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 75 ... (if cu
5060: 72 72 73 74 61 74 65 20 20 28 63 6f 6e 63 20 22 rrstate (conc "
5070: 73 74 61 74 65 3d 27 22 20 63 75 72 72 73 74 61 state='" currsta
5080: 74 65 20 22 27 20 41 4e 44 20 22 29 20 22 22 29 te "' AND ") "")
5090: 0a 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 .... (if c
50a0: 75 72 72 73 74 61 74 75 73 20 28 63 6f 6e 63 20 urrstatus (conc
50b0: 22 73 74 61 74 75 73 3d 27 22 20 63 75 72 72 73 "status='" currs
50c0: 74 61 74 75 73 20 22 27 20 41 4e 44 20 22 29 20 tatus "' AND ")
50d0: 22 22 29 0a 09 09 09 20 20 20 20 20 20 20 22 20 "").... "
50e0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
50f0: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 4e 4f 54 20 tname=? AND NOT
5100: 28 69 74 65 6d 5f 70 61 74 68 3d 27 27 20 41 4e (item_path='' AN
5110: 44 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 D testname in (S
5120: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74 ELECT DISTINCT t
5130: 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 74 65 73 estname FROM tes
5140: 74 73 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d ts WHERE testnam
5150: 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 e=? AND item_pat
5160: 68 20 21 3d 20 27 27 29 29 3b 22 29 29 29 0a 09 h != ''));")))..
5170: 09 3b 3b 28 64 65 62 75 67 3a 70 72 69 6e 74 20 .;;(debug:print
5180: 30 20 22 51 52 59 3a 20 22 20 71 72 79 29 0a 09 0 "QRY: " qry)..
5190: 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 .(sqlite3:execut
51a0: 65 20 64 62 20 71 72 79 20 72 75 6e 2d 69 64 20 e db qry run-id
51b0: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
51c0: 75 73 20 74 65 73 74 6e 61 6d 65 20 74 65 73 74 us testname test
51d0: 6e 61 6d 65 29 29 29 0a 09 20 20 20 20 74 65 73 name))).. tes
51e0: 74 6e 61 6d 65 73 29 29 0a 0a 28 64 65 66 69 6e tnames))..(defin
51f0: 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 e (db:delete-tes
5200: 74 73 2d 69 6e 2d 73 74 61 74 65 20 64 62 20 72 ts-in-state db r
5210: 75 6e 2d 69 64 20 73 74 61 74 65 29 0a 20 20 28 un-id state). (
5220: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
5230: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
5240: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
5250: 65 3d 3f 20 41 4e 44 20 72 75 6e 5f 69 64 3d 3f e=? AND run_id=?
5260: 3b 22 20 73 74 61 74 65 20 72 75 6e 2d 69 64 29 ;" state run-id)
5270: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
5280: 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 est-set-state-st
5290: 61 74 75 73 2d 62 79 2d 69 64 20 64 62 20 74 65 atus-by-id db te
52a0: 73 74 2d 69 64 20 6e 65 77 73 74 61 74 65 20 6e st-id newstate n
52b0: 65 77 73 74 61 74 75 73 20 6e 65 77 63 6f 6d 6d ewstatus newcomm
52c0: 65 6e 74 29 0a 20 20 28 69 66 20 6e 65 77 73 74 ent). (if newst
52d0: 61 74 65 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ate (sqlite3:e
52e0: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
52f0: 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 74 E tests SET stat
5300: 65 3d 3f 20 20 20 57 48 45 52 45 20 69 64 3d 3f e=? WHERE id=?
5310: 3b 22 20 6e 65 77 73 74 61 74 65 20 20 20 74 65 ;" newstate te
5320: 73 74 2d 69 64 29 29 0a 20 20 28 69 66 20 6e 65 st-id)). (if ne
5330: 77 73 74 61 74 75 73 20 20 28 73 71 6c 69 74 65 wstatus (sqlite
5340: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
5350: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
5360: 74 61 74 75 73 3d 3f 20 20 57 48 45 52 45 20 69 tatus=? WHERE i
5370: 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 75 73 20 d=?;" newstatus
5380: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 28 69 66 test-id)). (if
5390: 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 28 73 71 6c newcomment (sql
53a0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
53b0: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
53c0: 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 T comment=? WHER
53d0: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 63 6f 6d 6d E id=?;" newcomm
53e0: 65 6e 74 20 74 65 73 74 2d 69 64 29 29 29 0a 0a ent test-id)))..
53f0: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
5400: 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 -set-state-statu
5410: 73 2d 62 79 2d 72 75 6e 2d 69 64 2d 74 65 73 74 s-by-run-id-test
5420: 6e 61 6d 65 20 64 62 20 72 75 6e 2d 69 64 20 74 name db run-id t
5430: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
5440: 74 68 20 73 74 61 74 75 73 20 73 74 61 74 65 29 th status state)
5450: 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 . (sqlite3:exec
5460: 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 ute db "UPDATE t
5470: 65 73 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f ests SET state=?
5480: 2c 73 74 61 74 75 73 3d 3f 2c 65 76 65 6e 74 5f ,status=?,event_
5490: 74 69 6d 65 3d 73 74 72 66 74 69 6d 65 28 27 25 time=strftime('%
54a0: 73 27 2c 27 6e 6f 77 27 29 20 57 48 45 52 45 20 s','now') WHERE
54b0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
54c0: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d tname=? AND item
54d0: 5f 70 61 74 68 3d 3f 3b 22 20 0a 09 09 20 20 20 _path=?;" ...
54e0: 73 74 61 74 65 20 73 74 61 74 75 73 20 72 75 6e state status run
54f0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
5500: 65 6d 2d 70 61 74 68 29 29 0a 0a 28 64 65 66 69 em-path))..(defi
5510: 6e 65 20 28 64 62 3a 67 65 74 2d 63 6f 75 6e 74 ne (db:get-count
5520: 2d 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 20 64 -tests-running d
5530: 62 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 b). (let ((res
5540: 30 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 0)). (sqlite3
5550: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 :for-each-row.
5560: 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e (lambda (coun
5570: 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 t). (set!
5580: 72 65 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 res count)).
5590: 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 db. "SELECT
55a0: 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 count(id) FROM
55b0: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
55c0: 65 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 e = 'RUNNING' OR
55d0: 20 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 state = 'LAUNCH
55e0: 45 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 ED' OR state = '
55f0: 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 REMOTEHOSTSTART'
5600: 3b 22 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 28 ;"). res))..(
5610: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 63 define (db:get-c
5620: 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e 69 ount-tests-runni
5630: 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 64 ng-in-jobgroup d
5640: 62 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 28 69 b jobgroup). (i
5650: 66 20 28 6e 6f 74 20 6a 6f 62 67 72 6f 75 70 29 f (not jobgroup)
5660: 0a 20 20 20 20 20 20 30 20 3b 3b 20 0a 20 20 20 . 0 ;; .
5670: 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 29 (let ((res 0)
5680: 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d )..(sqlite3:for-
5690: 65 61 63 68 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 each-row.. (lamb
56a0: 64 61 20 28 63 6f 75 6e 74 29 0a 09 20 20 20 28 da (count).. (
56b0: 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 set! res count))
56c0: 0a 09 20 64 62 0a 09 20 22 53 45 4c 45 43 54 20 .. db.. "SELECT
56d0: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
56e0: 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 ests WHERE state
56f0: 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 20 = 'RUNNING' OR
5700: 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 45 state = 'LAUNCHE
5710: 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 52 D' OR state = 'R
5720: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 0a EMOTEHOSTSTART'.
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 AND
5740: 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 45 testname in (SE
5750: 4c 45 43 54 20 74 65 73 74 6e 61 6d 65 20 46 52 LECT testname FR
5760: 4f 4d 20 74 65 73 74 5f 6d 65 74 61 20 57 48 45 OM test_meta WHE
5770: 52 45 20 6a 6f 62 67 72 6f 75 70 3d 3f 3b 22 0a RE jobgroup=?;".
5780: 09 20 6a 6f 62 67 72 6f 75 70 29 0a 09 72 65 73 . jobgroup)..res
5790: 29 29 29 0a 0a 3b 3b 20 64 6f 6e 65 20 77 69 74 )))..;; done wit
57a0: 68 20 72 75 6e 20 77 68 65 6e 3a 0a 3b 3b 20 20 h run when:.;;
57b0: 20 30 20 74 65 73 74 73 20 69 6e 20 4c 41 55 4e 0 tests in LAUN
57c0: 43 48 45 44 2c 20 4e 4f 54 5f 53 54 41 52 54 45 CHED, NOT_STARTE
57d0: 44 2c 20 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 D, REMOTEHOSTSTA
57e0: 52 54 2c 20 52 55 4e 4e 49 4e 47 0a 28 64 65 66 RT, RUNNING.(def
57f0: 69 6e 65 20 28 64 62 3a 65 73 74 69 6d 61 74 65 ine (db:estimate
5800: 64 2d 74 65 73 74 73 2d 72 65 6d 61 69 6e 69 6e d-tests-remainin
5810: 67 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 g db run-id). (
5820: 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a 20 20 let ((res 0)).
5830: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
5840: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
5850: 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 20 mbda (count).
5860: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 63 6f (set! res co
5870: 75 6e 74 29 29 0a 20 20 20 20 20 64 62 20 3b 3b unt)). db ;;
5880: 20 4e 42 2f 2f 20 4b 49 4c 4c 52 45 51 20 6d 65 NB// KILLREQ me
5890: 61 6e 73 20 74 68 65 20 6a 6f 62 73 20 69 73 20 ans the jobs is
58a0: 73 74 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 72 still probably r
58b0: 75 6e 6e 69 6e 67 0a 20 20 20 20 20 22 53 45 4c unning. "SEL
58c0: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 ECT count(id) FR
58d0: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 OM tests WHERE s
58e0: 74 61 74 65 20 69 6e 20 28 27 4c 41 55 4e 43 48 tate in ('LAUNCH
58f0: 45 44 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 44 ED','NOT_STARTED
5900: 27 2c 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 ','REMOTEHOSTSTA
5910: 52 54 27 2c 27 52 55 4e 4e 49 4e 47 27 2c 27 4b RT','RUNNING','K
5920: 49 4c 4c 52 45 51 27 29 20 41 4e 44 20 72 75 6e ILLREQ') AND run
5930: 5f 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 0a _id=?;" run-id).
5940: 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 4e 42 res))..;; NB
5950: 2f 2f 20 53 79 6e 63 20 74 68 69 73 20 77 69 74 // Sync this wit
5960: 68 20 72 75 6e 73 3a 67 65 74 2d 74 65 73 74 2d h runs:get-test-
5970: 69 6e 66 6f 0a 28 64 65 66 69 6e 65 20 28 64 62 info.(define (db
5980: 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 :get-test-info d
5990: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d b run-id testnam
59a0: 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 e item-path). (
59b0: 6c 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 let ((res #f)).
59c0: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
59d0: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
59e0: 61 6d 62 64 61 20 28 69 64 20 72 75 6e 2d 69 64 ambda (id run-id
59f0: 20 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 testname state
5a00: 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d status event-tim
5a10: 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 e host cpuload d
5a20: 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 iskfree uname ru
5a30: 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 ndir item-path r
5a40: 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 un_duration fina
5a50: 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 l_logf comment )
5a60: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 . (set! re
5a70: 73 20 28 76 65 63 74 6f 72 20 69 64 20 72 75 6e s (vector id run
5a80: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
5a90: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
5aa0: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
5ab0: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
5ac0: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
5ad0: 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 h run_duration f
5ae0: 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal_logf commen
5af0: 74 20 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 t ))). db .
5b00: 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 72 "SELECT id,r
5b10: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 un_id,testname,s
5b20: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
5b30: 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c t_time,host,cpul
5b40: 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 oad,diskfree,una
5b50: 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 me,rundir,item_p
5b60: 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e ath,run_duration
5b70: 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d ,final_logf,comm
5b80: 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 ent FROM tests W
5b90: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
5ba0: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
5bb0: 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 item_path=?;".
5bc0: 20 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 6e run-id testn
5bd0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 ame item-path).
5be0: 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 47 65 74 res))..;; Get
5bf0: 20 74 65 73 74 20 64 61 74 61 20 75 73 69 6e 67 test data using
5c00: 20 74 65 73 74 5f 69 64 0a 28 64 65 66 69 6e 65 test_id.(define
5c10: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 (db:get-test-da
5c20: 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 ta-by-id db test
5c30: 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 -id). (let ((re
5c40: 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 s #f)). (sqli
5c50: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
5c60: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 . (lambda (i
5c70: 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d d run-id testnam
5c80: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 e state status e
5c90: 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 vent-time host c
5ca0: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
5cb0: 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 uname rundir ite
5cc0: 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 m-path run_durat
5cd0: 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 ion final_logf c
5ce0: 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 20 20 28 omment). (
5cf0: 73 65 74 21 20 72 65 73 20 28 76 65 63 74 6f 72 set! res (vector
5d00: 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e id run-id testn
5d10: 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 ame state status
5d20: 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 event-time host
5d30: 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 cpuload diskfre
5d40: 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 e uname rundir i
5d50: 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 tem-path run_dur
5d60: 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 ation final_logf
5d70: 20 63 6f 6d 6d 65 6e 74 29 29 29 0a 20 20 20 20 comment))).
5d80: 20 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45 43 db . "SELEC
5d90: 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 T id,run_id,test
5da0: 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 name,state,statu
5db0: 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 s,event_time,hos
5dc0: 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 t,cpuload,diskfr
5dd0: 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c ee,uname,rundir,
5de0: 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 item_path,run_du
5df0: 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 ration,final_log
5e00: 66 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 f,comment FROM t
5e10: 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 3b ests WHERE id=?;
5e20: 22 0a 20 20 20 20 20 74 65 73 74 2d 69 64 29 0a ". test-id).
5e30: 20 20 20 20 72 65 73 29 29 0a 0a 0a 28 64 65 66 res))...(def
5e40: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 ine (db:test-set
5e50: 2d 63 6f 6d 6d 65 6e 74 20 64 62 20 74 65 73 74 -comment db test
5e60: 2d 69 64 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 -id comment). (
5e70: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
5e80: 0a 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 . db . "UPDA
5e90: 54 45 20 74 65 73 74 73 20 53 45 54 20 63 6f 6d TE tests SET com
5ea0: 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 3d ment=? WHERE id=
5eb0: 3f 3b 22 0a 20 20 20 63 6f 6d 6d 65 6e 74 20 74 ?;". comment t
5ec0: 65 73 74 2d 69 64 29 29 0a 0a 3b 3b 0a 28 64 65 est-id))..;;.(de
5ed0: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 fine (db:test-se
5ee0: 74 2d 72 75 6e 64 69 72 21 20 64 62 20 72 75 6e t-rundir! db run
5ef0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
5f00: 65 6d 2d 70 61 74 68 20 72 75 6e 64 69 72 29 0a em-path rundir).
5f10: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
5f20: 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 22 55 te . db . "U
5f30: 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 PDATE tests SET
5f40: 72 75 6e 64 69 72 3d 3f 20 57 48 45 52 45 20 72 rundir=? WHERE r
5f50: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 un_id=? AND test
5f60: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f name=? AND item_
5f70: 70 61 74 68 3d 3f 3b 22 0a 20 20 20 72 75 6e 64 path=?;". rund
5f80: 69 72 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e ir run-id test-n
5f90: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a ame item-path)).
5fa0: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 .(define (db:tes
5fb0: 74 2d 73 65 74 2d 6c 6f 67 21 20 64 62 20 74 65 t-set-log! db te
5fc0: 73 74 2d 69 64 20 6c 6f 67 66 29 0a 20 20 28 69 st-id logf). (i
5fd0: 66 20 28 73 74 72 69 6e 67 3f 20 6c 6f 67 66 29 f (string? logf)
5fe0: 0a 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a . (sqlite3:
5ff0: 65 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 execute db "UPDA
6000: 54 45 20 74 65 73 74 73 20 53 45 54 20 66 69 6e TE tests SET fin
6010: 61 6c 5f 6c 6f 67 66 3d 3f 20 57 48 45 52 45 20 al_logf=? WHERE
6020: 69 64 3d 3f 3b 22 0a 09 09 20 20 20 6c 6f 67 66 id=?;"... logf
6030: 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 test-id).
6040: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
6050: 45 52 52 4f 52 3a 20 64 62 3a 74 65 73 74 2d 73 ERROR: db:test-s
6060: 65 74 2d 6c 6f 67 21 20 63 61 6c 6c 65 64 20 77 et-log! called w
6070: 69 74 68 20 6e 6f 6e 2d 73 74 72 69 6e 67 20 6c ith non-string l
6080: 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20 22 20 6c og file name " l
6090: 6f 67 66 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d ogf)))..;;======
60a0: 3d 3d 3d 3d 3d 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: 0a 3b 3b 20 4d 69 73 63 2e 20 74 65 73 74 20 72 .;; Misc. test r
60f0: 65 6c 61 74 65 64 20 71 75 65 72 69 65 73 0a 3b elated queries.;
6100: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
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 0a 0a 28 64 65 66 69 6e 65 =======..(define
6150: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 (db:test-get-pa
6160: 74 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 ths-matching db
6170: 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 29 keynames target)
6180: 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 27 . (let* ((res '
6190: 28 29 29 0a 09 20 28 69 74 65 6d 70 61 74 74 20 ()).. (itempatt
61a0: 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d (if (args:get-
61b0: 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 arg "-itempatt")
61c0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "-
61d0: 69 74 65 6d 70 61 74 74 22 29 20 22 25 22 29 29 itempatt") "%"))
61e0: 0a 09 20 28 74 65 73 74 70 61 74 74 20 20 20 28 .. (testpatt (
61f0: 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 if (args:get-arg
6200: 20 22 2d 74 65 73 74 70 61 74 74 22 29 28 61 72 "-testpatt")(ar
6210: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 73 gs:get-arg "-tes
6220: 74 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 20 tpatt") "%"))..
6230: 28 73 74 61 74 65 70 61 74 74 20 20 28 69 66 20 (statepatt (if
6240: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a (args:get-arg ":
6250: 73 74 61 74 65 22 29 20 20 20 28 61 72 67 73 3a state") (args:
6260: 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 22 get-arg ":state"
6270: 29 20 20 20 20 22 25 22 29 29 0a 09 20 28 73 74 ) "%")).. (st
6280: 61 74 75 73 70 61 74 74 20 28 69 66 20 28 61 72 atuspatt (if (ar
6290: 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 gs:get-arg ":sta
62a0: 74 75 73 22 29 20 20 28 61 72 67 73 3a 67 65 74 tus") (args:get
62b0: 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 20 -arg ":status")
62c0: 20 20 22 25 22 29 29 0a 09 20 28 72 75 6e 6e 61 "%")).. (runna
62d0: 6d 65 20 20 20 20 28 69 66 20 28 61 72 67 73 3a me (if (args:
62e0: 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d get-arg ":runnam
62f0: 65 22 29 20 28 61 72 67 73 3a 67 65 74 2d 61 72 e") (args:get-ar
6300: 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 22 g ":runname") "
6310: 25 22 29 29 0a 09 20 28 6b 65 79 73 74 72 20 28 %")).. (keystr (
6320: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
6330: 73 65 20 0a 09 09 20 20 28 6d 61 70 20 28 6c 61 se ... (map (la
6340: 6d 62 64 61 20 28 6b 65 79 20 76 61 6c 29 0a 09 mbda (key val)..
6350: 09 09 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b 65 .. (conc "r." ke
6360: 79 20 22 20 6c 69 6b 65 20 27 22 20 76 61 6c 20 y " like '" val
6370: 22 27 22 29 29 0a 09 09 20 20 20 20 20 20 20 6b "'"))... k
6380: 65 79 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 20 eynames ...
6390: 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 (string-split
63a0: 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 09 20 target "/"))...
63b0: 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28 71 72 " AND ")).. (qr
63c0: 79 73 74 72 20 28 63 6f 6e 63 20 22 53 45 4c 45 ystr (conc "SELE
63d0: 43 54 20 74 2e 72 75 6e 64 69 72 20 46 52 4f 4d CT t.rundir FROM
63e0: 20 74 65 73 74 73 20 41 53 20 74 20 49 4e 4e 45 tests AS t INNE
63f0: 52 20 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 R JOIN runs AS r
6400: 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 ON t.run_id=r.i
6410: 64 20 57 48 45 52 45 20 22 0a 09 09 20 20 20 20 d WHERE "...
6420: 20 20 20 6b 65 79 73 74 72 20 22 20 41 4e 44 20 keystr " AND
6430: 72 2e 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 r.runname LIKE '
6440: 22 20 72 75 6e 6e 61 6d 65 20 22 27 20 41 4e 44 " runname "' AND
6450: 20 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 item_path LIKE
6460: 27 22 20 69 74 65 6d 70 61 74 74 20 22 27 20 41 '" itempatt "' A
6470: 4e 44 20 74 65 73 74 6e 61 6d 65 20 4c 49 4b 45 ND testname LIKE
6480: 20 27 22 0a 09 09 20 20 20 20 20 20 20 74 65 73 '"... tes
6490: 74 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 tpatt "' AND t.s
64a0: 74 61 74 65 20 4c 49 4b 45 20 27 22 20 73 74 61 tate LIKE '" sta
64b0: 74 65 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e tepatt "' AND t.
64c0: 73 74 61 74 75 73 20 4c 49 4b 45 20 27 22 20 73 status LIKE '" s
64d0: 74 61 74 75 73 70 61 74 74 20 0a 09 09 20 20 20 tatuspatt ...
64e0: 20 20 20 20 22 27 4f 52 44 45 52 20 42 59 20 74 "'ORDER BY t
64f0: 2e 65 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b .event_time ASC;
6500: 22 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a "))). (debug:
6510: 70 72 69 6e 74 20 33 20 22 71 72 79 73 74 72 3a print 3 "qrystr:
6520: 20 22 20 71 72 79 73 74 72 29 0a 20 20 20 20 28 " qrystr). (
6530: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
6540: 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 -row . (lamb
6550: 64 61 20 28 70 29 0a 20 20 20 20 20 20 20 28 73 da (p). (s
6560: 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 70 20 et! res (cons p
6570: 72 65 73 29 29 29 0a 20 20 20 20 20 64 62 20 0a res))). db .
6580: 20 20 20 20 20 71 72 79 73 74 72 29 0a 20 20 20 qrystr).
6590: 20 72 65 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 res))..(define
65a0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 (db:test-get-tes
65b0: 74 2d 72 65 63 6f 72 64 73 2d 6d 61 74 63 68 69 t-records-matchi
65c0: 6e 67 20 64 62 20 6b 65 79 6e 61 6d 65 73 20 74 ng db keynames t
65d0: 61 72 67 65 74 29 0a 20 20 28 6c 65 74 2a 20 28 arget). (let* (
65e0: 28 72 65 73 20 27 28 29 29 0a 09 20 28 69 74 65 (res '()).. (ite
65f0: 6d 70 61 74 74 20 20 20 28 69 66 20 28 61 72 67 mpatt (if (arg
6600: 73 3a 67 65 74 2d 61 72 67 20 22 2d 69 74 65 6d s:get-arg "-item
6610: 70 61 74 74 22 29 28 61 72 67 73 3a 67 65 74 2d patt")(args:get-
6620: 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 arg "-itempatt")
6630: 20 22 25 22 29 29 0a 09 20 28 74 65 73 74 70 61 "%")).. (testpa
6640: 74 74 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 tt (if (args:g
6650: 65 74 2d 61 72 67 20 22 2d 74 65 73 74 70 61 74 et-arg "-testpat
6660: 74 22 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 t")(args:get-arg
6670: 20 22 2d 74 65 73 74 70 61 74 74 22 29 20 22 25 "-testpatt") "%
6680: 22 29 29 0a 09 20 28 73 74 61 74 65 70 61 74 74 ")).. (statepatt
6690: 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d (if (args:get-
66a0: 61 72 67 20 22 3a 73 74 61 74 65 22 29 20 20 20 arg ":state")
66b0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a (args:get-arg ":
66c0: 73 74 61 74 65 22 29 20 20 20 20 22 25 22 29 29 state") "%"))
66d0: 0a 09 20 28 73 74 61 74 75 73 70 61 74 74 20 28 .. (statuspatt (
66e0: 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 if (args:get-arg
66f0: 20 22 3a 73 74 61 74 75 73 22 29 20 20 28 61 72 ":status") (ar
6700: 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 gs:get-arg ":sta
6710: 74 75 73 22 29 20 20 20 22 25 22 29 29 0a 09 20 tus") "%"))..
6720: 28 72 75 6e 6e 61 6d 65 20 20 20 20 28 69 66 20 (runname (if
6730: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a (args:get-arg ":
6740: 72 75 6e 6e 61 6d 65 22 29 20 28 61 72 67 73 3a runname") (args:
6750: 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d get-arg ":runnam
6760: 65 22 29 20 20 22 25 22 29 29 0a 09 20 28 6b 65 e") "%")).. (ke
6770: 79 73 74 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 ystr (string-int
6780: 65 72 73 70 65 72 73 65 20 0a 09 09 20 20 28 6d ersperse ... (m
6790: 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 ap (lambda (key
67a0: 76 61 6c 29 0a 09 09 09 20 28 63 6f 6e 63 20 22 val).... (conc "
67b0: 72 2e 22 20 6b 65 79 20 22 20 6c 69 6b 65 20 27 r." key " like '
67c0: 22 20 76 61 6c 20 22 27 22 29 29 0a 09 09 20 20 " val "'"))...
67d0: 20 20 20 20 20 6b 65 79 6e 61 6d 65 73 20 0a 09 keynames ..
67e0: 09 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d . (string-
67f0: 73 70 6c 69 74 20 74 61 72 67 65 74 20 22 2f 22 split target "/"
6800: 29 29 0a 09 09 20 20 22 20 41 4e 44 20 22 29 29 ))... " AND "))
6810: 0a 09 20 28 71 72 79 73 74 72 20 28 63 6f 6e 63 .. (qrystr (conc
6820: 20 22 53 45 4c 45 43 54 20 0a 20 20 20 20 20 20 "SELECT .
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6840: 20 20 20 20 20 20 74 2e 69 64 0a 20 20 20 20 20 t.id.
6850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6860: 20 20 20 20 20 20 20 74 2e 72 75 6e 5f 69 64 20 t.run_id
6870: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 .
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6890: 20 74 2e 74 65 73 74 6e 61 6d 65 20 20 20 0a 20 t.testname .
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68b0: 20 20 20 20 20 20 20 20 20 20 20 74 2e 68 6f 73 t.hos
68c0: 74 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 t .
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68e0: 20 20 20 20 20 74 2e 63 70 75 6c 6f 61 64 20 20 t.cpuload
68f0: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
6910: 2e 64 69 73 6b 66 72 65 65 20 20 20 0a 20 20 20 .diskfree .
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6930: 20 20 20 20 20 20 20 20 20 74 2e 75 6e 61 6d 65 t.uname
6940: 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 .
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6960: 20 20 20 74 2e 72 75 6e 64 69 72 20 20 20 20 20 t.rundir
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 73 t.s
6990: 68 6f 72 74 64 69 72 20 20 20 0a 20 20 20 20 20 hortdir .
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69b0: 20 20 20 20 20 20 20 74 2e 69 74 65 6d 5f 70 61 t.item_pa
69c0: 74 68 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 th .
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69e0: 20 74 2e 73 74 61 74 65 20 20 20 20 20 20 0a 20 t.state .
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a00: 20 20 20 20 20 20 20 20 20 20 20 74 2e 73 74 61 t.sta
6a10: 74 75 73 20 20 20 20 20 0a 20 20 20 20 20 20 20 tus .
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a30: 20 20 20 20 20 74 2e 61 74 74 65 6d 70 74 6e 75 t.attemptnu
6a40: 6d 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m .
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
6a60: 2e 66 69 6e 61 6c 5f 6c 6f 67 66 20 0a 20 20 20 .final_logf .
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a80: 20 20 20 20 20 20 20 20 20 74 2e 6c 6f 67 64 61 t.logda
6a90: 74 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 t .
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ab0: 20 20 20 74 2e 72 75 6e 5f 64 75 72 61 74 69 6f t.run_duratio
6ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 63 t.c
6ae0: 6f 6d 6d 65 6e 74 20 20 20 20 0a 20 20 20 20 20 omment .
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b00: 20 20 20 20 20 20 20 74 2e 65 76 65 6e 74 5f 74 t.event_t
6b10: 69 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 ime .
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b30: 20 74 2e 66 61 69 6c 5f 63 6f 75 6e 74 20 0a 20 t.fail_count .
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b50: 20 20 20 20 20 20 20 20 20 20 20 74 2e 70 61 73 t.pas
6b60: 73 5f 63 6f 75 6e 74 20 0a 20 20 20 20 20 20 20 s_count .
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b80: 20 20 20 20 20 74 2e 61 72 63 68 69 76 65 64 20 t.archived
6b90: 20 20 0a 0a 0a 0a 20 46 52 4f 4d 20 74 65 73 74 .... FROM test
6ba0: 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 s AS t INNER JOI
6bb0: 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 N runs AS r ON t
6bc0: 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 45 .run_id=r.id WHE
6bd0: 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 6b 65 RE "... ke
6be0: 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 75 6e ystr " AND r.run
6bf0: 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 6e name LIKE '" run
6c00: 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 74 65 6d name "' AND item
6c10: 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 20 69 74 _path LIKE '" it
6c20: 65 6d 70 61 74 74 20 22 27 20 41 4e 44 20 74 65 empatt "' AND te
6c30: 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 22 0a 09 stname LIKE '"..
6c40: 09 20 20 20 20 20 20 20 74 65 73 74 70 61 74 74 . testpatt
6c50: 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 65 20 "' AND t.state
6c60: 4c 49 4b 45 20 27 22 20 73 74 61 74 65 70 61 74 LIKE '" statepat
6c70: 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 75 t "' AND t.statu
6c80: 73 20 4c 49 4b 45 20 27 22 20 73 74 61 74 75 73 s LIKE '" status
6c90: 70 61 74 74 20 0a 09 09 20 20 20 20 20 20 20 22 patt ... "
6ca0: 27 4f 52 44 45 52 20 42 59 20 74 2e 65 76 65 6e 'ORDER BY t.even
6cb0: 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 29 0a t_time ASC;"))).
6cc0: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
6cd0: 20 33 20 22 71 72 79 73 74 72 3a 20 22 20 71 72 3 "qrystr: " qr
6ce0: 79 73 74 72 29 0a 20 20 20 20 28 73 71 6c 69 74 ystr). (sqlit
6cf0: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
6d00: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 . (lambda (p
6d10: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
6d20: 65 73 20 28 63 6f 6e 73 20 70 20 72 65 73 29 29 es (cons p res))
6d30: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
6d40: 71 72 79 73 74 72 29 0a 20 20 20 20 72 65 73 29 qrystr). res)
6d50: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
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 0a 3b 3b 20 51 ===========.;; Q
6da0: 55 45 55 45 20 55 50 20 4d 45 54 41 2c 20 54 45 UEUE UP META, TE
6db0: 53 54 20 53 54 41 54 55 53 20 41 4e 44 20 53 54 ST STATUS AND ST
6dc0: 45 50 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d EPS.;;==========
6dd0: 3d 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 0a 0a 28 64 ============..(d
6e10: 65 66 69 6e 65 20 28 64 62 3a 75 70 64 61 74 65 efine (db:update
6e20: 72 20 64 62 29 0a 20 20 28 6c 65 74 20 6c 6f 6f r db). (let loo
6e30: 70 20 28 28 73 74 61 72 74 2d 74 69 6d 65 20 28 p ((start-time (
6e40: 63 75 72 72 65 6e 74 2d 74 69 6d 65 29 29 29 0a current-time))).
6e50: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 (thread-slee
6e60: 70 21 20 30 2e 35 29 20 3b 3b 20 6d 6f 76 65 20 p! 0.5) ;; move
6e70: 73 61 76 65 20 74 69 6d 65 20 61 72 6f 75 6e 64 save time around
6e80: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 72 65 67 to minimize reg
6e90: 75 6c 61 72 20 63 6f 6c 6c 69 73 69 6f 6e 73 3f ular collisions?
6ea0: 0a 20 20 20 20 28 64 62 3a 77 72 69 74 65 2d 63 . (db:write-c
6eb0: 61 63 68 65 64 2d 64 61 74 61 20 64 62 29 0a 20 ached-data db).
6ec0: 20 20 20 28 6c 6f 6f 70 20 73 74 61 72 74 2d 74 (loop start-t
6ed0: 69 6d 65 29 29 29 0a 20 20 20 20 0a 28 64 65 66 ime))). .(def
6ee0: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 75 70 64 ine (db:test-upd
6ef0: 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 62 ate-meta-info db
6f00: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
6f10: 65 20 69 74 65 6d 2d 70 61 74 68 20 6d 69 6e 75 e item-path minu
6f20: 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 6b tes cpuload disk
6f30: 66 72 65 65 20 74 6d 70 66 72 65 65 29 0a 20 20 free tmpfree).
6f40: 28 69 66 20 28 6e 6f 74 20 69 74 65 6d 2d 70 61 (if (not item-pa
6f50: 74 68 29 0a 20 20 20 20 20 20 28 62 65 67 69 6e th). (begin
6f60: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 (debug:print 0
6f70: 22 57 41 52 4e 49 4e 47 3a 20 49 54 45 4d 50 41 "WARNING: ITEMPA
6f80: 54 48 20 6e 6f 74 20 73 65 74 2e 22 29 20 20 20 TH not set.")
6f90: 0a 09 20 20 20 20 20 28 73 65 74 21 20 69 74 65 .. (set! ite
6fa0: 6d 2d 70 61 74 68 20 22 22 29 29 29 0a 20 20 28 m-path ""))). (
6fb0: 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 mutex-lock! *inc
6fc0: 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 oming-mutex*).
6fd0: 28 73 65 74 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d (set! *incoming-
6fe0: 64 61 74 61 2a 20 28 63 6f 6e 73 20 28 76 65 63 data* (cons (vec
6ff0: 74 6f 72 20 27 6d 65 74 61 2d 69 6e 66 6f 0a 09 tor 'meta-info..
7000: 09 09 09 20 20 20 20 20 20 28 63 75 72 72 65 6e ... (curren
7010: 74 2d 73 65 63 6f 6e 64 73 29 0a 09 09 09 09 20 t-seconds).....
7020: 20 20 20 20 20 28 6c 69 73 74 20 63 70 75 6c 6f (list cpulo
7030: 61 64 0a 09 09 09 09 09 20 20 20 20 64 69 73 6b ad...... disk
7040: 66 72 65 65 0a 09 09 09 09 09 20 20 20 20 6d 69 free...... mi
7050: 6e 75 74 65 73 0a 09 09 09 09 09 20 20 20 20 72 nutes...... r
7060: 75 6e 2d 69 64 0a 09 09 09 09 09 20 20 20 20 74 un-id...... t
7070: 65 73 74 2d 6e 61 6d 65 0a 09 09 09 09 09 20 20 est-name......
7080: 20 20 69 74 65 6d 2d 70 61 74 68 29 29 20 3b 3b item-path)) ;;
7090: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
70a0: 65 20 69 74 65 6d 2d 70 61 74 68 20 6d 69 6e 75 e item-path minu
70b0: 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 6b tes cpuload disk
70c0: 66 72 65 65 20 74 6d 70 66 72 65 65 29 20 0a 09 free tmpfree) ..
70d0: 09 09 20 20 20 20 20 20 2a 69 6e 63 6f 6d 69 6e .. *incomin
70e0: 67 2d 64 61 74 61 2a 29 29 0a 20 20 28 6d 75 74 g-data*)). (mut
70f0: 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f ex-unlock! *inco
7100: 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 28 ming-mutex*). (
7110: 69 66 20 28 6e 6f 74 20 2a 63 61 63 68 65 2d 6f if (not *cache-o
7120: 6e 2a 29 28 64 62 3a 77 72 69 74 65 2d 63 61 63 n*)(db:write-cac
7130: 68 65 64 2d 64 61 74 61 20 64 62 29 29 29 0a 0a hed-data db)))..
7140: 28 64 65 66 69 6e 65 20 28 64 62 3a 77 72 69 74 (define (db:writ
7150: 65 2d 63 61 63 68 65 64 2d 64 61 74 61 20 64 62 e-cached-data db
7160: 29 0a 20 20 28 6c 65 74 20 28 28 6d 65 74 61 2d ). (let ((meta-
7170: 73 74 6d 74 20 28 73 71 6c 69 74 65 33 3a 70 72 stmt (sqlite3:pr
7180: 65 70 61 72 65 20 64 62 20 22 55 50 44 41 54 45 epare db "UPDATE
7190: 20 74 65 73 74 73 20 53 45 54 20 63 70 75 6c 6f tests SET cpulo
71a0: 61 64 3d 3f 2c 64 69 73 6b 66 72 65 65 3d 3f 2c ad=?,diskfree=?,
71b0: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 3d 3f 2c 73 run_duration=?,s
71c0: 74 61 74 65 3d 27 52 55 4e 4e 49 4e 47 27 20 57 tate='RUNNING' W
71d0: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
71e0: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
71f0: 20 69 74 65 6d 5f 70 61 74 68 3d 3f 20 41 4e 44 item_path=? AND
7200: 20 73 74 61 74 65 20 4e 4f 54 20 49 4e 20 28 27 state NOT IN ('
7210: 43 4f 4d 50 4c 45 54 45 44 27 2c 27 4b 49 4c 4c COMPLETED','KILL
7220: 52 45 51 27 2c 27 4b 49 4c 4c 45 44 27 29 3b 22 REQ','KILLED');"
7230: 29 29 0a 09 28 73 74 65 70 2d 73 74 6d 74 20 28 ))..(step-stmt (
7240: 73 71 6c 69 74 65 33 3a 70 72 65 70 61 72 65 20 sqlite3:prepare
7250: 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 db "INSERT OR RE
7260: 50 4c 41 43 45 20 69 6e 74 6f 20 74 65 73 74 5f PLACE into test_
7270: 73 74 65 70 73 20 28 74 65 73 74 5f 69 64 2c 73 steps (test_id,s
7280: 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 tepname,state,st
7290: 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c atus,event_time,
72a0: 63 6f 6d 6d 65 6e 74 2c 6c 6f 67 66 69 6c 65 29 comment,logfile)
72b0: 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f 2c VALUES(?,?,?,?,
72c0: 3f 2c 3f 2c 3f 29 3b 22 29 29 20 3b 3b 20 73 74 ?,?,?);")) ;; st
72d0: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 rftime('%s','now
72e0: 27 29 23 66 29 0a 09 28 64 61 74 61 20 28 73 6f ')#f)..(data (so
72f0: 72 74 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 rt *incoming-dat
7300: 61 2a 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 a* (lambda (a b)
7310: 28 3c 20 28 76 65 63 74 6f 72 2d 72 65 66 20 61 (< (vector-ref a
7320: 20 31 29 28 76 65 63 74 6f 72 2d 72 65 66 20 62 1)(vector-ref b
7330: 20 31 29 29 29 29 29 29 0a 20 20 20 20 28 69 66 1)))))). (if
7340: 20 28 3e 20 28 6c 65 6e 67 74 68 20 64 61 74 61 (> (length data
7350: 29 20 30 29 0a 09 28 64 65 62 75 67 3a 70 72 69 ) 0)..(debug:pri
7360: 6e 74 20 34 20 22 57 72 69 74 69 6e 67 20 63 61 nt 4 "Writing ca
7370: 63 68 65 64 20 64 61 74 61 20 22 20 64 61 74 61 ched data " data
7380: 29 29 0a 20 20 20 20 28 6d 75 74 65 78 2d 6c 6f )). (mutex-lo
7390: 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 ck! *incoming-mu
73a0: 74 65 78 2a 29 0a 20 20 20 20 28 73 71 6c 69 74 tex*). (sqlit
73b0: 65 33 3a 77 69 74 68 2d 74 72 61 6e 73 61 63 74 e3:with-transact
73c0: 69 6f 6e 20 0a 20 20 20 20 20 64 62 0a 20 20 20 ion . db.
73d0: 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 (lambda ().
73e0: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c (for-each (l
73f0: 61 6d 62 64 61 20 28 65 6e 74 72 79 29 0a 09 09 ambda (entry)...
7400: 20 20 20 28 63 61 73 65 20 28 76 65 63 74 6f 72 (case (vector
7410: 2d 72 65 66 20 65 6e 74 72 79 20 30 29 0a 09 09 -ref entry 0)...
7420: 20 20 20 20 20 28 28 6d 65 74 61 2d 69 6e 66 6f ((meta-info
7430: 29 0a 09 09 20 20 20 20 20 20 28 61 70 70 6c 79 )... (apply
7440: 20 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 sqlite3:execute
7450: 20 6d 65 74 61 2d 73 74 6d 74 20 28 76 65 63 74 meta-stmt (vect
7460: 6f 72 2d 72 65 66 20 65 6e 74 72 79 20 32 29 29 or-ref entry 2))
7470: 29 0a 09 09 20 20 20 20 20 28 28 73 74 65 70 2d )... ((step-
7480: 73 74 61 74 75 73 29 0a 09 09 20 20 20 20 20 20 status)...
7490: 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 3a 65 (apply sqlite3:e
74a0: 78 65 63 75 74 65 20 73 74 65 70 2d 73 74 6d 74 xecute step-stmt
74b0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 6e 74 (vector-ref ent
74c0: 72 79 20 32 29 29 29 0a 09 09 20 20 20 20 20 28 ry 2)))... (
74d0: 65 6c 73 65 0a 09 09 20 20 20 20 20 20 28 64 65 else... (de
74e0: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52 bug:print 0 "ERR
74f0: 4f 52 3a 20 51 75 65 75 65 64 20 65 6e 74 72 79 OR: Queued entry
7500: 20 6e 6f 74 20 72 65 63 6f 67 6e 69 73 65 64 20 not recognised
7510: 22 20 65 6e 74 72 79 29 29 29 29 0a 09 09 20 64 " entry))))... d
7520: 61 74 61 29 29 29 0a 20 20 20 20 28 73 71 6c 69 ata))). (sqli
7530: 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 6d 65 te3:finalize! me
7540: 74 61 2d 73 74 6d 74 29 20 3b 3b 20 73 71 6c 69 ta-stmt) ;; sqli
7550: 74 65 20 69 73 20 74 68 65 20 62 6f 74 74 6c 65 te is the bottle
7560: 6e 65 63 6b 2c 20 63 6c 65 61 72 20 74 68 65 20 neck, clear the
7570: 73 74 61 74 65 6d 65 6e 74 73 20 61 73 61 70 3f statements asap?
7580: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 69 . (sqlite3:fi
7590: 6e 61 6c 69 7a 65 21 20 73 74 65 70 2d 73 74 6d nalize! step-stm
75a0: 74 29 0a 20 20 20 20 28 73 65 74 21 20 2a 69 6e t). (set! *in
75b0: 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 27 28 29 coming-data* '()
75c0: 29 0a 20 20 20 20 28 6d 75 74 65 78 2d 75 6e 6c ). (mutex-unl
75d0: 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d ock! *incoming-m
75e0: 75 74 65 78 2a 29 29 29 0a 0a 28 64 65 66 69 6e utex*)))..(defin
75f0: 65 20 28 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 e (db:roll-up-pa
7600: 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 ss-fail-counts d
7610: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
7620: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 me item-path sta
7630: 74 75 73 29 0a 20 20 28 69 66 20 28 61 6e 64 20 tus). (if (and
7640: 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 69 74 65 (not (equal? ite
7650: 6d 2d 70 61 74 68 20 22 22 29 29 0a 09 20 20 20 m-path ""))..
7660: 28 6f 72 20 28 65 71 75 61 6c 3f 20 73 74 61 74 (or (equal? stat
7670: 75 73 20 22 50 41 53 53 22 29 0a 09 20 20 20 20 us "PASS")..
7680: 20 20 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 (equal? statu
7690: 73 20 22 57 41 52 4e 22 29 0a 09 20 20 20 20 20 s "WARN")..
76a0: 20 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73 (equal? status
76b0: 20 22 46 41 49 4c 22 29 0a 09 20 20 20 20 20 20 "FAIL")..
76c0: 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73 20 (equal? status
76d0: 22 57 41 49 56 45 44 22 29 0a 09 20 20 20 20 20 "WAIVED")..
76e0: 20 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73 (equal? status
76f0: 20 22 52 55 4e 4e 49 4e 47 22 29 29 29 0a 20 20 "RUNNING"))).
7700: 20 20 20 20 28 62 65 67 69 6e 0a 09 28 73 71 6c (begin..(sql
7710: 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a 09 20 ite3:execute ..
7720: 64 62 0a 09 20 22 55 50 44 41 54 45 20 74 65 73 db.. "UPDATE tes
7730: 74 73 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 ts .
7740: 20 53 45 54 20 66 61 69 6c 5f 63 6f 75 6e 74 3d SET fail_count=
7750: 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 (SELECT count(id
7760: 29 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 ) FROM tests WHE
7770: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
7780: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
7790: 74 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 20 41 tem_path != '' A
77a0: 4e 44 20 73 74 61 74 75 73 3d 27 46 41 49 4c 27 ND status='FAIL'
77b0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ),.
77c0: 20 20 20 20 70 61 73 73 5f 63 6f 75 6e 74 3d 28 pass_count=(
77d0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 SELECT count(id)
77e0: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
77f0: 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 E run_id=? AND t
7800: 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 estname=? AND it
7810: 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 20 41 4e em_path != '' AN
7820: 44 20 28 73 74 61 74 75 73 3d 27 50 41 53 53 27 D (status='PASS'
7830: 20 4f 52 20 73 74 61 74 75 73 3d 27 57 41 52 4e OR status='WARN
7840: 27 20 4f 52 20 73 74 61 74 75 73 3d 27 57 41 49 ' OR status='WAI
7850: 56 45 44 27 29 29 0a 20 20 20 20 20 20 20 20 20 VED')).
7860: 20 20 20 20 57 48 45 52 45 20 72 75 6e 5f 69 64 WHERE run_id
7870: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d =? AND testname=
7880: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d ? AND item_path=
7890: 27 27 3b 22 0a 09 20 72 75 6e 2d 69 64 20 74 65 '';".. run-id te
78a0: 73 74 2d 6e 61 6d 65 20 72 75 6e 2d 69 64 20 74 st-name run-id t
78b0: 65 73 74 2d 6e 61 6d 65 20 72 75 6e 2d 69 64 20 est-name run-id
78c0: 74 65 73 74 2d 6e 61 6d 65 29 0a 20 20 20 20 20 test-name).
78d0: 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 (thread-sleep
78e0: 21 20 30 2e 31 29 20 3b 3b 20 67 69 76 65 20 6f ! 0.1) ;; give o
78f0: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 61 ther processes a
7900: 20 63 68 61 6e 63 65 20 68 65 72 65 0a 09 28 69 chance here..(i
7910: 66 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73 f (equal? status
7920: 20 22 52 55 4e 4e 49 4e 47 22 29 20 3b 3b 20 72 "RUNNING") ;; r
7930: 75 6e 6e 69 6e 67 20 74 61 6b 65 73 20 70 72 69 unning takes pri
7940: 6f 72 69 74 79 20 6f 76 65 72 20 61 6c 6c 20 6f ority over all o
7950: 74 68 65 72 20 73 74 61 74 65 73 2c 20 66 6f 72 ther states, for
7960: 63 65 20 74 68 65 20 74 65 73 74 20 73 74 61 74 ce the test stat
7970: 65 20 74 6f 20 52 55 4e 4e 49 4e 47 0a 09 20 20 e to RUNNING..
7980: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
7990: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 te db "UPDATE te
79a0: 73 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f 20 sts SET state=?
79b0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
79c0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
79d0: 44 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 D item_path='';"
79e0: 20 22 52 55 4e 4e 49 4e 47 22 20 72 75 6e 2d 69 "RUNNING" run-i
79f0: 64 20 74 65 73 74 2d 6e 61 6d 65 29 0a 09 20 20 d test-name)..
7a00: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
7a10: 74 65 0a 09 20 20 20 20 20 64 62 0a 09 20 20 20 te.. db..
7a20: 20 20 22 55 50 44 41 54 45 20 74 65 73 74 73 0a "UPDATE tests.
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a40: 20 20 20 20 20 20 20 53 45 54 20 73 74 61 74 65 SET state
7a50: 3d 43 41 53 45 20 57 48 45 4e 20 28 53 45 4c 45 =CASE WHEN (SELE
7a60: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
7a70: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
7a80: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
7a90: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
7aa0: 61 74 68 20 21 3d 20 27 27 20 41 4e 44 20 73 74 ath != '' AND st
7ab0: 61 74 65 20 69 6e 20 28 27 52 55 4e 4e 49 4e 47 ate in ('RUNNING
7ac0: 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 29 ','NOT_STARTED')
7ad0: 29 20 3e 20 30 20 54 48 45 4e 20 0a 20 20 20 20 ) > 0 THEN .
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7af0: 20 20 20 20 20 20 27 52 55 4e 4e 49 4e 47 27 0a 'RUNNING'.
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b10: 20 20 20 20 20 20 20 45 4c 53 45 20 27 43 4f 4d ELSE 'COM
7b20: 50 4c 45 54 45 44 27 20 45 4e 44 2c 0a 20 20 20 PLETED' END,.
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b40: 20 20 20 20 20 20 20 73 74 61 74 75 73 3d 43 41 status=CA
7b50: 53 45 20 57 48 45 4e 20 66 61 69 6c 5f 63 6f 75 SE WHEN fail_cou
7b60: 6e 74 20 3e 20 30 20 54 48 45 4e 20 27 46 41 49 nt > 0 THEN 'FAI
7b70: 4c 27 20 57 48 45 4e 20 70 61 73 73 5f 63 6f 75 L' WHEN pass_cou
7b80: 6e 74 20 3e 20 30 20 41 4e 44 20 66 61 69 6c 5f nt > 0 AND fail_
7b90: 63 6f 75 6e 74 3d 30 20 54 48 45 4e 20 27 50 41 count=0 THEN 'PA
7ba0: 53 53 27 20 45 4c 53 45 20 27 55 4e 4b 4e 4f 57 SS' ELSE 'UNKNOW
7bb0: 4e 27 20 45 4e 44 0a 20 20 20 20 20 20 20 20 20 N' END.
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 WH
7bd0: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 ERE run_id=? AND
7be0: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 testname=? AND
7bf0: 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 0a 09 item_path='';"..
7c00: 20 20 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 run-id test
7c10: 2d 6e 61 6d 65 20 72 75 6e 2d 69 64 20 74 65 73 -name run-id tes
7c20: 74 2d 6e 61 6d 65 29 29 0a 09 23 66 29 0a 20 20 t-name))..#f).
7c30: 20 20 20 20 23 66 29 29 0a 0a 0a 3b 3b 3d 3d 3d #f))...;;===
7c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 3b 3b 20 54 65 73 74 73 20 6d 65 74 ===.;; Tests met
7c90: 61 20 64 61 74 61 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d a data.;;=======
7ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7cb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7cc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
7ce0: 0a 3b 3b 20 72 65 61 64 20 74 68 65 20 72 65 63 .;; read the rec
7cf0: 6f 72 64 20 67 69 76 65 6e 20 61 20 74 65 73 74 ord given a test
7d00: 6e 61 6d 65 0a 28 64 65 66 69 6e 65 20 28 64 62 name.(define (db
7d10: 3a 74 65 73 74 6d 65 74 61 2d 67 65 74 2d 72 65 :testmeta-get-re
7d20: 63 6f 72 64 20 64 62 20 74 65 73 74 6e 61 6d 65 cord db testname
7d30: 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 23 ). (let ((res #
7d40: 66 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 f)). (sqlite3
7d50: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 :for-each-row.
7d60: 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 74 (lambda (id t
7d70: 65 73 74 6e 61 6d 65 20 61 75 74 68 6f 72 20 6f estname author o
7d80: 77 6e 65 72 20 64 65 73 63 72 69 70 74 69 6f 6e wner description
7d90: 20 72 65 76 69 65 77 65 64 20 69 74 65 72 61 74 reviewed iterat
7da0: 65 64 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 61 ed avg_runtime a
7db0: 76 67 5f 64 69 73 6b 20 74 61 67 73 29 0a 20 20 vg_disk tags).
7dc0: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
7dd0: 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 6e 61 vector id testna
7de0: 6d 65 20 61 75 74 68 6f 72 20 6f 77 6e 65 72 20 me author owner
7df0: 64 65 73 63 72 69 70 74 69 6f 6e 20 72 65 76 69 description revi
7e00: 65 77 65 64 20 69 74 65 72 61 74 65 64 20 61 76 ewed iterated av
7e10: 67 5f 72 75 6e 74 69 6d 65 20 61 76 67 5f 64 69 g_runtime avg_di
7e20: 73 6b 20 74 61 67 73 29 29 29 0a 20 20 20 20 20 sk tags))).
7e30: 64 62 20 22 53 45 4c 45 43 54 20 69 64 2c 74 65 db "SELECT id,te
7e40: 73 74 6e 61 6d 65 2c 61 75 74 68 6f 72 2c 6f 77 stname,author,ow
7e50: 6e 65 72 2c 64 65 73 63 72 69 70 74 69 6f 6e 2c ner,description,
7e60: 72 65 76 69 65 77 65 64 2c 69 74 65 72 61 74 65 reviewed,iterate
7e70: 64 2c 61 76 67 5f 72 75 6e 74 69 6d 65 2c 61 76 d,avg_runtime,av
7e80: 67 5f 64 69 73 6b 2c 74 61 67 73 20 46 52 4f 4d g_disk,tags FROM
7e90: 20 74 65 73 74 5f 6d 65 74 61 20 57 48 45 52 45 test_meta WHERE
7ea0: 20 74 65 73 74 6e 61 6d 65 3d 3f 3b 22 0a 20 20 testname=?;".
7eb0: 20 20 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 20 testname).
7ec0: 20 72 65 73 29 29 0a 0a 3b 3b 20 63 72 65 61 74 res))..;; creat
7ed0: 65 20 61 20 6e 65 77 20 72 65 63 6f 72 64 20 66 e a new record f
7ee0: 6f 72 20 61 20 67 69 76 65 6e 20 74 65 73 74 6e or a given testn
7ef0: 61 6d 65 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ame.(define (db:
7f00: 74 65 73 74 6d 65 74 61 2d 61 64 64 2d 72 65 63 testmeta-add-rec
7f10: 6f 72 64 20 64 62 20 74 65 73 74 6e 61 6d 65 29 ord db testname)
7f20: 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 . (sqlite3:exec
7f30: 75 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f ute db "INSERT O
7f40: 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74 65 R IGNORE INTO te
7f50: 73 74 5f 6d 65 74 61 20 28 74 65 73 74 6e 61 6d st_meta (testnam
7f60: 65 2c 61 75 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 e,author,owner,d
7f70: 65 73 63 72 69 70 74 69 6f 6e 2c 72 65 76 69 65 escription,revie
7f80: 77 65 64 2c 69 74 65 72 61 74 65 64 2c 61 76 67 wed,iterated,avg
7f90: 5f 72 75 6e 74 69 6d 65 2c 61 76 67 5f 64 69 73 _runtime,avg_dis
7fa0: 6b 2c 74 61 67 73 29 20 56 41 4c 55 45 53 20 28 k,tags) VALUES (
7fb0: 3f 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 ?,'','','','',''
7fc0: 2c 27 27 2c 27 27 2c 27 27 29 3b 22 20 74 65 73 ,'','','');" tes
7fd0: 74 6e 61 6d 65 29 29 0a 0a 3b 3b 20 75 70 64 61 tname))..;; upda
7fe0: 74 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 te one of the te
7ff0: 73 74 6d 65 74 61 20 66 69 65 6c 64 73 0a 28 64 stmeta fields.(d
8000: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 efine (db:testme
8010: 74 61 2d 75 70 64 61 74 65 2d 66 69 65 6c 64 20 ta-update-field
8020: 64 62 20 74 65 73 74 6e 61 6d 65 20 66 69 65 6c db testname fiel
8030: 64 20 76 61 6c 75 65 29 0a 20 20 28 73 71 6c 69 d value). (sqli
8040: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 28 te3:execute db (
8050: 63 6f 6e 63 20 22 55 50 44 41 54 45 20 74 65 73 conc "UPDATE tes
8060: 74 5f 6d 65 74 61 20 53 45 54 20 22 20 66 69 65 t_meta SET " fie
8070: 6c 64 20 22 3d 3f 20 57 48 45 52 45 20 74 65 73 ld "=? WHERE tes
8080: 74 6e 61 6d 65 3d 3f 3b 22 29 20 76 61 6c 75 65 tname=?;") value
8090: 20 74 65 73 74 6e 61 6d 65 29 29 0a 0a 3b 3b 3d testname))..;;=
80a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
80b0: 3d 3d 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 0a 3b 3b 20 54 20 45 20 53 20 54 =====.;; T E S T
80f0: 20 20 20 44 20 41 20 54 20 41 20 0a 3b 3b 3d 3d D A T A .;;==
8100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8140: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 64 ====..(define (d
8150: 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 b:csv->test-data
8160: 20 64 62 20 74 65 73 74 2d 69 64 20 63 73 76 64 db test-id csvd
8170: 61 74 61 29 0a 20 20 28 64 65 62 75 67 3a 70 72 ata). (debug:pr
8180: 69 6e 74 20 34 20 22 74 65 73 74 2d 69 64 20 22 int 4 "test-id "
8190: 20 74 65 73 74 2d 69 64 20 22 2c 20 63 73 76 64 test-id ", csvd
81a0: 61 74 61 3a 20 22 20 63 73 76 64 61 74 61 29 0a ata: " csvdata).
81b0: 20 20 28 6c 65 74 20 28 28 63 73 76 6c 69 73 74 (let ((csvlist
81c0: 20 28 63 73 76 2d 3e 6c 69 73 74 20 28 6d 61 6b (csv->list (mak
81d0: 65 2d 63 73 76 2d 72 65 61 64 65 72 0a 09 09 09 e-csv-reader....
81e0: 20 20 20 20 20 28 6f 70 65 6e 2d 69 6e 70 75 74 (open-input
81f0: 2d 73 74 72 69 6e 67 20 63 73 76 64 61 74 61 29 -string csvdata)
8200: 0a 09 09 09 20 20 20 20 20 27 28 28 73 74 72 69 .... '((stri
8210: 70 2d 6c 65 61 64 69 6e 67 2d 77 68 69 74 65 73 p-leading-whites
8220: 70 61 63 65 3f 20 23 74 29 0a 09 09 09 20 20 20 pace? #t)....
8230: 20 20 20 20 28 73 74 72 69 70 2d 74 72 61 69 6c (strip-trail
8240: 69 6e 67 2d 77 68 69 74 65 73 70 61 63 65 3f 20 ing-whitespace?
8250: 23 74 29 29 20 29 29 29 29 20 3b 3b 20 28 63 73 #t)) )))) ;; (cs
8260: 76 2d 3e 6c 69 73 74 20 63 73 76 64 61 74 61 29 v->list csvdata)
8270: 29 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 )). (for-each
8280: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda (
8290: 63 73 76 72 6f 77 29 0a 20 20 20 20 20 20 20 28 csvrow). (
82a0: 6c 65 74 2a 20 28 28 70 61 64 64 65 64 2d 72 6f let* ((padded-ro
82b0: 77 20 20 28 74 61 6b 65 20 28 61 70 70 65 6e 64 w (take (append
82c0: 20 63 73 76 72 6f 77 20 28 6c 69 73 74 20 23 66 csvrow (list #f
82d0: 20 23 66 20 23 66 20 23 66 20 23 66 20 23 66 20 #f #f #f #f #f
82e0: 23 66 20 23 66 20 23 66 29 29 20 39 29 29 0a 09 #f #f #f)) 9))..
82f0: 20 20 20 20 20 20 28 63 61 74 65 67 6f 72 79 20 (category
8300: 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 (list-ref pad
8310: 64 65 64 2d 72 6f 77 20 30 29 29 0a 09 20 20 20 ded-row 0))..
8320: 20 20 20 28 76 61 72 69 61 62 6c 65 20 20 20 20 (variable
8330: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
8340: 2d 72 6f 77 20 31 29 29 0a 09 20 20 20 20 20 20 -row 1))..
8350: 28 76 61 6c 75 65 20 20 20 20 20 20 20 28 61 6e (value (an
8360: 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 6f 73 y->number-if-pos
8370: 73 69 62 6c 65 20 28 6c 69 73 74 2d 72 65 66 20 sible (list-ref
8380: 70 61 64 64 65 64 2d 72 6f 77 20 32 29 29 29 0a padded-row 2))).
8390: 09 20 20 20 20 20 20 28 65 78 70 65 63 74 65 64 . (expected
83a0: 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 (any->number
83b0: 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 -if-possible (li
83c0: 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f st-ref padded-ro
83d0: 77 20 33 29 29 29 0a 09 20 20 20 20 20 20 28 74 w 3))).. (t
83e0: 6f 6c 20 20 20 20 20 20 20 20 20 28 61 6e 79 2d ol (any-
83f0: 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 >number-if-possi
8400: 62 6c 65 20 28 6c 69 73 74 2d 72 65 66 20 70 61 ble (list-ref pa
8410: 64 64 65 64 2d 72 6f 77 20 34 29 29 29 20 3b 3b dded-row 4))) ;;
8420: 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c 3d 2c 20 6f >, <, >=, <=, o
8430: 72 20 61 20 6e 75 6d 62 65 72 0a 09 20 20 20 20 r a number..
8440: 20 20 28 75 6e 69 74 73 20 20 20 20 20 20 20 28 (units (
8450: 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d list-ref padded-
8460: 72 6f 77 20 35 29 29 0a 09 20 20 20 20 20 20 28 row 5)).. (
8470: 63 6f 6d 6d 65 6e 74 20 20 20 20 20 28 6c 69 73 comment (lis
8480: 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 t-ref padded-row
8490: 20 36 29 29 0a 09 20 20 20 20 20 20 28 73 74 61 6)).. (sta
84a0: 74 75 73 20 20 20 20 20 20 28 6c 65 74 20 28 28 tus (let ((
84b0: 73 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 s (list-ref padd
84c0: 65 64 2d 72 6f 77 20 37 29 29 29 0a 09 09 09 20 ed-row 7)))....
84d0: 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 73 74 (if (and (st
84e0: 72 69 6e 67 3f 20 73 29 28 6f 72 20 28 73 74 72 ring? s)(or (str
84f0: 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 ing-match (regex
8500: 70 20 22 5e 5c 5c 73 2a 24 22 29 20 73 29 0a 09 p "^\\s*$") s)..
8510: 09 09 09 09 09 20 20 20 20 20 28 73 74 72 69 6e ..... (strin
8520: 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 20 g-match (regexp
8530: 22 5e 6e 2f 61 24 22 29 20 73 29 29 29 0a 09 09 "^n/a$") s)))...
8540: 09 09 20 23 66 0a 09 09 09 09 20 73 29 29 29 20 .. #f..... s)))
8550: 3b 3b 20 69 66 20 73 70 65 63 69 66 69 65 64 20 ;; if specified
8560: 6f 6e 20 74 68 65 20 69 6e 70 75 74 20 74 68 65 on the input the
8570: 6e 20 75 73 65 2c 20 65 6c 73 65 20 63 61 6c 63 n use, else calc
8580: 75 6c 61 74 65 0a 09 20 20 20 20 20 20 28 74 79 ulate.. (ty
8590: 70 65 20 20 20 20 20 20 20 20 28 6c 69 73 74 2d pe (list-
85a0: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 38 ref padded-row 8
85b0: 29 29 29 0a 09 20 3b 3b 20 6c 6f 6f 6b 20 75 70 ))).. ;; look up
85c0: 20 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e expected,tol,un
85d0: 69 74 73 20 66 72 6f 6d 20 70 72 65 76 69 6f 75 its from previou
85e0: 73 20 62 65 73 74 20 66 69 74 20 74 65 73 74 20 s best fit test
85f0: 69 66 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20 if they are all
8600: 65 69 74 68 65 72 20 23 66 20 6f 72 20 27 27 0a either #f or ''.
8610: 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 . (debug:print 4
8620: 20 22 42 45 46 4f 52 45 3a 20 63 61 74 65 67 6f "BEFORE: catego
8630: 72 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 ry: " category "
8640: 20 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 variable: " var
8650: 69 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 iable " value: "
8660: 20 76 61 6c 75 65 20 0a 09 09 20 20 20 20 20 20 value ...
8670: 22 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 65 ", expected: " e
8680: 78 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 xpected " tol: "
8690: 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 tol " units: "
86a0: 75 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a 20 units " status:
86b0: 22 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 " status " comme
86c0: 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 20 22 20 nt: " comment "
86d0: 74 79 70 65 3a 20 22 20 74 79 70 65 29 0a 0a 09 type: " type)...
86e0: 20 28 69 66 20 28 61 6e 64 20 28 6f 72 20 28 6e (if (and (or (n
86f0: 6f 74 20 65 78 70 65 63 74 65 64 29 28 65 71 75 ot expected)(equ
8700: 61 6c 3f 20 65 78 70 65 63 74 65 64 20 22 22 29 al? expected "")
8710: 29 0a 09 09 20 20 28 6f 72 20 28 6e 6f 74 20 74 )... (or (not t
8720: 6f 6c 29 20 20 20 20 20 28 65 71 75 61 6c 3f 20 ol) (equal?
8730: 65 78 70 65 63 74 65 64 20 22 22 29 29 0a 09 09 expected ""))...
8740: 20 20 28 6f 72 20 28 6e 6f 74 20 75 6e 69 74 73 (or (not units
8750: 29 20 20 20 28 65 71 75 61 6c 3f 20 65 78 70 65 ) (equal? expe
8760: 63 74 65 64 20 22 22 29 29 29 0a 09 20 20 20 20 cted "")))..
8770: 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 28 (let-values (((
8780: 6e 65 77 2d 65 78 70 65 63 74 65 64 20 6e 65 77 new-expected new
8790: 2d 74 6f 6c 20 6e 65 77 2d 75 6e 69 74 73 29 28 -tol new-units)(
87a0: 64 62 3a 67 65 74 2d 70 72 65 76 2d 74 6f 6c 2d db:get-prev-tol-
87b0: 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 for-test db test
87c0: 2d 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 -id category var
87d0: 69 61 62 6c 65 29 29 29 0a 09 09 09 20 28 73 65 iable))).... (se
87e0: 74 21 20 65 78 70 65 63 74 65 64 20 6e 65 77 2d t! expected new-
87f0: 65 78 70 65 63 74 65 64 29 0a 09 09 09 20 28 73 expected).... (s
8800: 65 74 21 20 74 6f 6c 20 20 20 20 20 20 6e 65 77 et! tol new
8810: 2d 74 6f 6c 29 0a 09 09 09 20 28 73 65 74 21 20 -tol).... (set!
8820: 75 6e 69 74 73 20 20 20 20 6e 65 77 2d 75 6e 69 units new-uni
8830: 74 73 29 29 29 0a 0a 09 20 28 64 65 62 75 67 3a ts)))... (debug:
8840: 70 72 69 6e 74 20 34 20 22 41 46 54 45 52 3a 20 print 4 "AFTER:
8850: 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 category: " cat
8860: 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 egory " variable
8870: 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 : " variable " v
8880: 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 alue: " value ..
8890: 09 20 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 . ", expect
88a0: 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 ed: " expected "
88b0: 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e tol: " tol " un
88c0: 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 its: " units " s
88d0: 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 tatus: " status
88e0: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
88f0: 6d 65 6e 74 29 0a 09 20 3b 3b 20 63 61 6c 63 75 ment).. ;; calcu
8900: 6c 61 74 65 20 73 74 61 74 75 73 20 69 66 20 4e late status if N
8910: 4f 54 20 73 70 65 63 69 66 69 65 64 0a 09 20 28 OT specified.. (
8920: 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 73 74 61 if (and (not sta
8930: 74 75 73 29 28 6e 75 6d 62 65 72 3f 20 65 78 70 tus)(number? exp
8940: 65 63 74 65 64 29 28 6e 75 6d 62 65 72 3f 20 76 ected)(number? v
8950: 61 6c 75 65 29 29 20 3b 3b 20 6e 65 65 64 20 65 alue)) ;; need e
8960: 78 70 65 63 74 65 64 20 61 6e 64 20 76 61 6c 75 xpected and valu
8970: 65 20 74 6f 20 62 65 20 6e 75 6d 62 65 72 73 0a e to be numbers.
8980: 09 20 20 20 20 20 28 69 66 20 28 6e 75 6d 62 65 . (if (numbe
8990: 72 3f 20 74 6f 6c 29 20 3b 3b 20 69 66 20 74 6f r? tol) ;; if to
89a0: 6c 20 69 73 20 61 20 6e 75 6d 62 65 72 20 74 68 l is a number th
89b0: 65 6e 20 77 65 20 64 6f 20 74 68 65 20 73 74 61 en we do the sta
89c0: 6e 64 61 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e ndard comparison
89d0: 0a 09 09 20 28 6c 65 74 2a 20 28 28 6d 61 78 2d ... (let* ((max-
89e0: 76 61 6c 20 28 2b 20 65 78 70 65 63 74 65 64 20 val (+ expected
89f0: 74 6f 6c 29 29 0a 09 09 09 28 6d 69 6e 2d 76 61 tol))....(min-va
8a00: 6c 20 28 2d 20 65 78 70 65 63 74 65 64 20 74 6f l (- expected to
8a10: 6c 29 29 0a 09 09 09 28 72 65 73 75 6c 74 20 20 l))....(result
8a20: 28 61 6e 64 20 28 3e 3d 20 20 76 61 6c 75 65 20 (and (>= value
8a30: 6d 69 6e 2d 76 61 6c 29 28 3c 3d 20 76 61 6c 75 min-val)(<= valu
8a40: 65 20 6d 61 78 2d 76 61 6c 29 29 29 29 0a 09 09 e max-val))))...
8a50: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
8a60: 34 20 22 6d 61 78 2d 76 61 6c 3a 20 22 20 6d 61 4 "max-val: " ma
8a70: 78 2d 76 61 6c 20 22 20 6d 69 6e 2d 76 61 6c 3a x-val " min-val:
8a80: 20 22 20 6d 69 6e 2d 76 61 6c 20 22 20 72 65 73 " min-val " res
8a90: 75 6c 74 3a 20 22 20 72 65 73 75 6c 74 29 0a 09 ult: " result)..
8aa0: 09 20 20 20 28 73 65 74 21 20 73 74 61 74 75 73 . (set! status
8ab0: 20 28 69 66 20 72 65 73 75 6c 74 20 22 70 61 73 (if result "pas
8ac0: 73 22 20 22 66 61 69 6c 22 29 29 29 0a 09 09 20 s" "fail")))...
8ad0: 28 73 65 74 21 20 73 74 61 74 75 73 20 3b 3b 20 (set! status ;;
8ae0: 4e 42 2f 2f 20 6e 65 65 64 20 74 6f 20 61 73 73 NB// need to ass
8af0: 65 73 73 20 65 61 63 68 20 6f 6e 65 20 28 69 2e ess each one (i.
8b00: 65 2e 20 6e 6f 74 20 72 65 74 75 72 6e 20 6f 70 e. not return op
8b10: 65 72 61 74 6f 72 20 73 69 6e 63 65 20 6e 65 65 erator since nee
8b20: 64 20 74 6f 20 61 63 74 20 69 66 20 6e 6f 74 20 d to act if not
8b30: 76 61 6c 69 64 20 6f 70 2e 0a 09 09 20 20 20 20 valid op....
8b40: 20 20 20 28 63 61 73 65 20 28 73 74 72 69 6e 67 (case (string
8b50: 2d 3e 73 79 6d 62 6f 6c 20 74 6f 6c 29 20 3b 3b ->symbol tol) ;;
8b60: 20 74 6f 6c 20 73 68 6f 75 6c 64 20 62 65 20 3e tol should be >
8b70: 2c 20 3c 2c 20 3e 3d 2c 20 3c 3d 0a 09 09 09 20 , <, >=, <=....
8b80: 28 28 3e 29 20 20 28 69 66 20 28 3e 20 20 76 61 ((>) (if (> va
8b90: 6c 75 65 20 65 78 70 65 63 74 65 64 29 20 22 70 lue expected) "p
8ba0: 61 73 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 ass" "fail"))...
8bb0: 09 20 28 28 3c 29 20 20 28 69 66 20 28 3c 20 20 . ((<) (if (<
8bc0: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 29 20 value expected)
8bd0: 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 29 0a "pass" "fail")).
8be0: 09 09 09 20 28 28 3e 3d 29 20 28 69 66 20 28 3e ... ((>=) (if (>
8bf0: 3d 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 = value expected
8c00: 29 20 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 ) "pass" "fail")
8c10: 29 0a 09 09 09 20 28 28 3c 3d 29 20 28 69 66 20 ).... ((<=) (if
8c20: 28 3c 3d 20 76 61 6c 75 65 20 65 78 70 65 63 74 (<= value expect
8c30: 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 6c ed) "pass" "fail
8c40: 22 29 29 0a 09 09 09 20 28 65 6c 73 65 20 28 63 ")).... (else (c
8c50: 6f 6e 63 20 22 45 52 52 4f 52 3a 20 62 61 64 20 onc "ERROR: bad
8c60: 74 6f 6c 20 63 6f 6d 70 61 72 61 74 6f 72 20 22 tol comparator "
8c70: 20 74 6f 6c 29 29 29 29 29 29 0a 09 20 28 64 65 tol)))))).. (de
8c80: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 41 46 54 bug:print 4 "AFT
8c90: 45 52 32 3a 20 63 61 74 65 67 6f 72 79 3a 20 22 ER2: category: "
8ca0: 20 63 61 74 65 67 6f 72 79 20 22 20 76 61 72 69 category " vari
8cb0: 61 62 6c 65 3a 20 22 20 76 61 72 69 61 62 6c 65 able: " variable
8cc0: 20 22 20 76 61 6c 75 65 3a 20 22 20 76 61 6c 75 " value: " valu
8cd0: 65 20 0a 09 09 20 20 20 20 20 20 22 2c 20 65 78 e ... ", ex
8ce0: 70 65 63 74 65 64 3a 20 22 20 65 78 70 65 63 74 pected: " expect
8cf0: 65 64 20 22 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 ed " tol: " tol
8d00: 22 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 74 73 " units: " units
8d10: 20 22 20 73 74 61 74 75 73 3a 20 22 20 73 74 61 " status: " sta
8d20: 74 75 73 20 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 tus " comment: "
8d30: 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 28 73 71 6c comment).. (sql
8d40: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
8d50: 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 "INSERT OR REPLA
8d60: 43 45 20 49 4e 54 4f 20 74 65 73 74 5f 64 61 74 CE INTO test_dat
8d70: 61 20 28 74 65 73 74 5f 69 64 2c 63 61 74 65 67 a (test_id,categ
8d80: 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 76 61 6c ory,variable,val
8d90: 75 65 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c ue,expected,tol,
8da0: 75 6e 69 74 73 2c 63 6f 6d 6d 65 6e 74 2c 73 74 units,comment,st
8db0: 61 74 75 73 2c 74 79 70 65 29 20 56 41 4c 55 45 atus,type) VALUE
8dc0: 53 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f S (?,?,?,?,?,?,?
8dd0: 2c 3f 2c 3f 2c 3f 29 3b 22 0a 09 09 09 20 20 74 ,?,?,?);".... t
8de0: 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 20 est-id category
8df0: 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 65 variable value e
8e00: 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 xpected tol unit
8e10: 73 20 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 6f s (if comment co
8e20: 6d 6d 65 6e 74 20 22 22 29 20 73 74 61 74 75 73 mment "") status
8e30: 20 74 79 70 65 29 29 29 0a 20 20 20 20 20 63 73 type))). cs
8e40: 76 6c 69 73 74 29 29 29 0a 0a 3b 3b 20 67 65 74 vlist)))..;; get
8e50: 20 61 20 6c 69 73 74 20 6f 66 20 74 65 73 74 5f a list of test_
8e60: 64 61 74 61 20 72 65 63 6f 72 64 73 20 6d 61 74 data records mat
8e70: 63 68 69 6e 67 20 63 61 74 65 67 6f 72 79 70 61 ching categorypa
8e80: 74 74 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 72 tt.(define (db:r
8e90: 65 61 64 2d 74 65 73 74 2d 64 61 74 61 20 64 62 ead-test-data db
8ea0: 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 test-id categor
8eb0: 79 70 61 74 74 29 0a 20 20 28 6c 65 74 20 28 28 ypatt). (let ((
8ec0: 72 65 73 20 27 28 29 29 29 0a 20 20 20 20 28 73 res '())). (s
8ed0: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
8ee0: 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 row . (lambd
8ef0: 61 20 28 69 64 20 74 65 73 74 5f 69 64 20 63 61 a (id test_id ca
8f00: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 tegory variable
8f10: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 value expected t
8f20: 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 ol units comment
8f30: 20 73 74 61 74 75 73 20 74 79 70 65 29 0a 20 20 status type).
8f40: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
8f50: 63 6f 6e 73 20 28 76 65 63 74 6f 72 20 69 64 20 cons (vector id
8f60: 74 65 73 74 5f 69 64 20 63 61 74 65 67 6f 72 79 test_id category
8f70: 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 variable value
8f80: 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 expected tol uni
8f90: 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 74 75 ts comment statu
8fa0: 73 20 74 79 70 65 29 20 72 65 73 29 29 29 0a 20 s type) res))).
8fb0: 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c db. "SEL
8fc0: 45 43 54 20 69 64 2c 74 65 73 74 5f 69 64 2c 63 ECT id,test_id,c
8fd0: 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 ategory,variable
8fe0: 2c 76 61 6c 75 65 2c 65 78 70 65 63 74 65 64 2c ,value,expected,
8ff0: 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f 6d 6d 65 6e tol,units,commen
9000: 74 2c 73 74 61 74 75 73 2c 74 79 70 65 20 46 52 t,status,type FR
9010: 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 45 OM test_data WHE
9020: 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 41 4e 44 RE test_id=? AND
9030: 20 63 61 74 65 67 6f 72 79 20 4c 49 4b 45 20 3f category LIKE ?
9040: 20 4f 52 44 45 52 20 42 59 20 63 61 74 65 67 6f ORDER BY catego
9050: 72 79 2c 76 61 72 69 61 62 6c 65 3b 22 20 74 65 ry,variable;" te
9060: 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 70 61 st-id categorypa
9070: 74 74 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 tt). (reverse
9080: 20 72 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 res)))..(define
9090: 20 28 64 62 3a 6c 6f 61 64 2d 74 65 73 74 2d 64 (db:load-test-d
90a0: 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 29 0a ata db test-id).
90b0: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6c 69 (let loop ((li
90c0: 6e 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 0a n (read-line))).
90d0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 6f (if (not (eo
90e0: 66 2d 6f 62 6a 65 63 74 3f 20 6c 69 6e 29 29 0a f-object? lin)).
90f0: 09 28 62 65 67 69 6e 0a 09 20 20 28 64 65 62 75 .(begin.. (debu
9100: 67 3a 70 72 69 6e 74 20 34 20 6c 69 6e 29 0a 09 g:print 4 lin)..
9110: 20 20 28 72 64 62 3a 63 73 76 2d 3e 74 65 73 74 (rdb:csv->test
9120: 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 -data db test-id
9130: 20 6c 69 6e 29 0a 09 20 20 28 6c 6f 6f 70 20 28 lin).. (loop (
9140: 72 65 61 64 2d 6c 69 6e 65 29 29 29 29 29 0a 20 read-line))))).
9150: 20 3b 3b 20 72 6f 6c 6c 20 75 70 20 74 68 65 20 ;; roll up the
9160: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 2e current results.
9170: 0a 20 20 3b 3b 20 46 49 58 4d 45 3a 20 41 64 64 . ;; FIXME: Add
9180: 20 74 68 65 20 73 74 61 74 75 73 20 74 6f 20 0a the status to .
9190: 20 20 28 72 64 62 3a 74 65 73 74 2d 64 61 74 61 (rdb:test-data
91a0: 2d 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d -rollup db test-
91b0: 69 64 20 23 66 29 29 0a 0a 3b 3b 20 57 41 52 4e id #f))..;; WARN
91c0: 49 4e 47 3a 20 44 6f 20 4e 4f 54 20 63 61 6c 6c ING: Do NOT call
91d0: 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 70 61 this for the pa
91e0: 72 65 6e 74 20 74 65 73 74 20 6f 6e 20 61 6e 20 rent test on an
91f0: 69 74 65 72 61 74 65 64 20 74 65 73 74 0a 3b 3b iterated test.;;
9200: 20 52 6f 6c 6c 20 75 70 20 74 65 73 74 5f 64 61 Roll up test_da
9210: 74 61 20 70 61 73 73 2f 66 61 69 6c 20 72 65 73 ta pass/fail res
9220: 75 6c 74 73 0a 3b 3b 20 6c 6f 6f 6b 20 61 74 20 ults.;; look at
9230: 74 68 65 20 74 65 73 74 5f 64 61 74 61 20 73 74 the test_data st
9240: 61 74 75 73 20 66 69 65 6c 64 2c 20 0a 3b 3b 20 atus field, .;;
9250: 20 20 20 69 66 20 61 6c 6c 20 61 72 65 20 70 61 if all are pa
9260: 73 73 20 28 61 6e 79 20 63 61 73 65 29 20 61 6e ss (any case) an
9270: 64 20 74 68 65 20 74 65 73 74 20 73 74 61 74 75 d the test statu
9280: 73 20 69 73 20 50 41 53 53 20 6f 72 20 4e 55 4c s is PASS or NUL
9290: 4c 20 6f 72 20 27 27 20 74 68 65 6e 20 73 65 74 L or '' then set
92a0: 20 74 65 73 74 20 73 74 61 74 75 73 20 74 6f 20 test status to
92b0: 50 41 53 53 2e 0a 3b 3b 20 20 20 20 69 66 20 6f PASS..;; if o
92c0: 6e 65 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 66 ne or more are f
92d0: 61 69 6c 20 28 61 6e 79 20 63 61 73 65 29 20 74 ail (any case) t
92e0: 68 65 6e 20 73 65 74 20 74 65 73 74 20 73 74 61 hen set test sta
92f0: 74 75 73 20 74 6f 20 50 41 53 53 2c 20 6e 6f 6e tus to PASS, non
9300: 20 22 70 61 73 73 22 20 6f 72 20 22 66 61 69 6c "pass" or "fail
9310: 22 20 61 72 65 20 69 67 6e 6f 72 65 64 0a 28 64 " are ignored.(d
9320: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 64 efine (db:test-d
9330: 61 74 61 2d 72 6f 6c 6c 75 70 20 64 62 20 74 65 ata-rollup db te
9340: 73 74 2d 69 64 20 73 74 61 74 75 73 29 0a 20 20 st-id status).
9350: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
9360: 20 0a 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 . db . "UPD
9370: 41 54 45 20 74 65 73 74 73 20 0a 20 20 20 20 20 ATE tests .
9380: 20 53 45 54 20 66 61 69 6c 5f 63 6f 75 6e 74 3d SET fail_count=
9390: 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 (SELECT count(id
93a0: 29 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 ) FROM test_data
93b0: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f WHERE test_id=?
93c0: 20 41 4e 44 20 73 74 61 74 75 73 20 6c 69 6b 65 AND status like
93d0: 20 27 66 61 69 6c 27 29 2c 0a 20 20 20 20 20 20 'fail'),.
93e0: 20 20 20 20 70 61 73 73 5f 63 6f 75 6e 74 3d 28 pass_count=(
93f0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 SELECT count(id)
9400: 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 FROM test_data
9410: 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 WHERE test_id=?
9420: 41 4e 44 20 73 74 61 74 75 73 20 6c 69 6b 65 20 AND status like
9430: 27 70 61 73 73 27 29 0a 20 20 20 20 20 20 57 48 'pass'). WH
9440: 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 74 65 ERE id=?;". te
9450: 73 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 st-id test-id te
9460: 73 74 2d 69 64 29 0a 20 20 3b 3b 20 69 66 20 74 st-id). ;; if t
9470: 68 65 20 74 65 73 74 20 69 73 20 6e 6f 74 20 46 he test is not F
9480: 41 49 4c 20 74 68 65 6e 20 73 65 74 20 73 74 61 AIL then set sta
9490: 74 75 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 tus based on the
94a0: 20 66 61 69 6c 20 61 6e 64 20 70 61 73 73 20 63 fail and pass c
94b0: 6f 75 6e 74 73 2e 0a 20 20 28 74 68 72 65 61 64 ounts.. (thread
94c0: 2d 73 6c 65 65 70 21 20 31 29 0a 20 20 28 73 71 -sleep! 1). (sq
94d0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 0a 20 20 lite3:execute.
94e0: 20 64 62 20 20 20 3b 3b 3b 20 4e 4f 54 45 3a 20 db ;;; NOTE:
94f0: 53 68 6f 75 6c 64 20 74 68 69 73 20 62 65 20 57 Should this be W
9500: 41 52 4e 2c 46 41 49 4c 3f 20 41 20 57 41 52 4e ARN,FAIL? A WARN
9510: 20 69 73 20 6e 6f 74 20 61 20 46 41 49 4c 3f 3f is not a FAIL??
9520: 3f 3f 3f 20 42 55 47 20 46 49 58 4d 45 0a 20 20 ??? BUG FIXME.
9530: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 0a 20 "UPDATE tests.
9540: 20 20 20 20 20 53 45 54 20 73 74 61 74 75 73 3d SET status=
9550: 43 41 53 45 20 57 48 45 4e 20 28 53 45 4c 45 43 CASE WHEN (SELEC
9560: 54 20 66 61 69 6c 5f 63 6f 75 6e 74 20 46 52 4f T fail_count FRO
9570: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 M tests WHERE id
9580: 3d 3f 29 20 3e 20 30 20 0a 20 20 20 20 20 20 20 =?) > 0 .
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95a0: 20 20 54 48 45 4e 20 27 46 41 49 4c 27 0a 20 20 THEN 'FAIL'.
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95c0: 20 20 20 20 57 48 45 4e 20 28 53 45 4c 45 43 54 WHEN (SELECT
95d0: 20 70 61 73 73 5f 63 6f 75 6e 74 20 46 52 4f 4d pass_count FROM
95e0: 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 3d tests WHERE id=
95f0: 3f 29 20 3e 20 30 20 41 4e 44 20 0a 20 20 20 20 ?) > 0 AND .
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9610: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 73 (SELECT s
9620: 74 61 74 75 73 20 46 52 4f 4d 20 74 65 73 74 73 tatus FROM tests
9630: 20 57 48 45 52 45 20 69 64 3d 3f 29 20 4e 4f 54 WHERE id=?) NOT
9640: 20 49 4e 20 28 27 57 41 52 4e 27 2c 27 46 41 49 IN ('WARN','FAI
9650: 4c 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 L').
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 48 45 THE
9670: 4e 20 27 50 41 53 53 27 0a 20 20 20 20 20 20 20 N 'PASS'.
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 E
9690: 4c 53 45 20 73 74 61 74 75 73 0a 20 20 20 20 20 LSE status.
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4e 44 END
96b0: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 WHERE id=?;".
96c0: 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 test-id test-id
96d0: 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 test-id test-id
96e0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
96f0: 67 65 74 2d 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 get-prev-tol-for
9700: 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 -test db test-id
9710: 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 category variab
9720: 6c 65 29 0a 20 20 3b 3b 20 46 69 6e 69 73 68 20 le). ;; Finish
9730: 6d 65 3f 0a 20 20 28 76 61 6c 75 65 73 20 23 66 me?. (values #f
9740: 20 23 66 20 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d #f #f))..;;====
9750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 3b 3b 20 53 20 54 20 45 20 50 20 53 20 ==.;; S T E P S
97a0: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
97b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
97c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
97d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
97e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 =========..(defi
97f0: 6e 65 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d ne (db:step-get-
9800: 74 69 6d 65 2d 61 73 2d 73 74 72 69 6e 67 20 76 time-as-string v
9810: 65 63 29 0a 20 20 28 73 65 63 6f 6e 64 73 2d 3e ec). (seconds->
9820: 74 69 6d 65 2d 73 74 72 69 6e 67 20 28 64 62 3a time-string (db:
9830: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
9840: 69 6d 65 20 76 65 63 29 29 29 0a 0a 3b 3b 20 64 ime vec)))..;; d
9850: 62 2d 67 65 74 2d 74 65 73 74 2d 73 74 65 70 73 b-get-test-steps
9860: 2d 66 6f 72 2d 72 75 6e 0a 28 64 65 66 69 6e 65 -for-run.(define
9870: 20 28 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 (db:get-steps-f
9880: 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d or-test db test-
9890: 69 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 id). (let ((res
98a0: 20 27 28 29 29 29 0a 20 20 20 20 28 73 71 6c 69 '())). (sqli
98b0: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
98c0: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda (
98d0: 69 64 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e id test-id stepn
98e0: 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 ame state status
98f0: 20 65 76 65 6e 74 2d 74 69 6d 65 20 6c 6f 67 66 event-time logf
9900: 69 6c 65 29 0a 20 20 20 20 20 20 20 28 73 65 74 ile). (set
9910: 21 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 ! res (cons (vec
9920: 74 6f 72 20 69 64 20 74 65 73 74 2d 69 64 20 73 tor id test-id s
9930: 74 65 70 6e 61 6d 65 20 73 74 61 74 65 20 73 74 tepname state st
9940: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
9950: 28 69 66 20 28 73 74 72 69 6e 67 3f 20 6c 6f 67 (if (string? log
9960: 66 69 6c 65 29 20 6c 6f 67 66 69 6c 65 20 22 22 file) logfile ""
9970: 29 29 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 )) res))). d
9980: 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 b. "SELECT i
9990: 64 2c 74 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 d,test_id,stepna
99a0: 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c me,state,status,
99b0: 65 76 65 6e 74 5f 74 69 6d 65 2c 6c 6f 67 66 69 event_time,logfi
99c0: 6c 65 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 le FROM test_ste
99d0: 70 73 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 ps WHERE test_id
99e0: 3d 3f 20 4f 52 44 45 52 20 42 59 20 69 64 20 41 =? ORDER BY id A
99f0: 53 43 3b 22 20 3b 3b 20 65 76 65 6e 74 5f 74 69 SC;" ;; event_ti
9a00: 6d 65 20 44 45 53 43 2c 69 64 20 41 53 43 3b 0a me DESC,id ASC;.
9a10: 20 20 20 20 20 74 65 73 74 2d 69 64 29 0a 20 20 test-id).
9a20: 20 20 28 72 65 76 65 72 73 65 20 72 65 73 29 29 (reverse res))
9a30: 29 0a 0a 3b 3b 20 67 65 74 20 61 20 70 72 65 74 )..;; get a pret
9a40: 74 79 20 74 61 62 6c 65 20 74 6f 20 73 75 6d 6d ty table to summ
9a50: 61 72 69 7a 65 20 73 74 65 70 73 0a 3b 3b 0a 28 arize steps.;;.(
9a60: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 73 define (db:get-s
9a70: 74 65 70 73 2d 74 61 62 6c 65 20 64 62 20 74 65 teps-table db te
9a80: 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 st-id). (let ((
9a90: 73 74 65 70 73 20 20 20 28 64 62 3a 67 65 74 2d steps (db:get-
9aa0: 73 74 65 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 steps-for-test d
9ab0: 62 20 74 65 73 74 2d 69 64 29 29 29 0a 20 20 20 b test-id))).
9ac0: 20 3b 3b 20 6f 72 67 61 6e 69 73 65 20 74 68 65 ;; organise the
9ad0: 20 73 74 65 70 73 20 66 6f 72 20 62 65 74 74 65 steps for bette
9ae0: 72 20 72 65 61 64 61 62 69 6c 69 74 79 0a 20 20 r readability.
9af0: 20 20 28 6c 65 74 20 28 28 72 65 73 20 28 6d 61 (let ((res (ma
9b00: 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 ke-hash-table)))
9b10: 0a 20 20 20 20 20 20 28 66 6f 72 2d 65 61 63 68 . (for-each
9b20: 20 0a 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 . (lambda
9b30: 20 28 73 74 65 70 29 0a 09 20 28 64 65 62 75 67 (step).. (debug
9b40: 3a 70 72 69 6e 74 20 36 20 22 73 74 65 70 3d 22 :print 6 "step="
9b50: 20 73 74 65 70 29 0a 09 20 28 6c 65 74 20 28 28 step).. (let ((
9b60: 72 65 63 6f 72 64 20 28 68 61 73 68 2d 74 61 62 record (hash-tab
9b70: 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 0a le-ref/default .
9b80: 09 09 09 72 65 73 20 0a 09 09 09 28 64 62 3a 73 ...res ....(db:s
9b90: 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 tep-get-stepname
9ba0: 20 73 74 65 70 29 20 0a 09 09 09 3b 3b 20 20 20 step) ....;;
9bb0: 20 20 20 20 20 73 74 65 70 6e 61 6d 65 20 20 20 stepname
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 sta
9bd0: 72 74 20 65 6e 64 20 73 74 61 74 75 73 20 20 20 rt end status
9be0: 20 0a 09 09 09 28 76 65 63 74 6f 72 20 28 64 62 ....(vector (db
9bf0: 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 :step-get-stepna
9c00: 6d 65 20 73 74 65 70 29 20 22 22 20 20 20 22 22 me step) "" ""
9c10: 20 22 22 20 20 20 20 20 22 22 20 22 22 29 29 29 "" "" "")))
9c20: 29 0a 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 ).. (debug:pri
9c30: 6e 74 20 36 20 22 72 65 63 6f 72 64 28 62 65 66 nt 6 "record(bef
9c40: 6f 72 65 29 20 3d 20 22 20 72 65 63 6f 72 64 20 ore) = " record
9c50: 0a 09 09 09 22 5c 6e 69 64 3a 20 20 20 20 20 20 ...."\nid:
9c60: 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d " (db:step-get-
9c70: 69 64 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 id step)...."\ns
9c80: 74 65 70 6e 61 6d 65 3a 20 22 20 28 64 62 3a 73 tepname: " (db:s
9c90: 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 tep-get-stepname
9ca0: 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 step)...."\nsta
9cb0: 74 65 3a 20 20 20 20 22 20 28 64 62 3a 73 74 65 te: " (db:ste
9cc0: 70 2d 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 p-get-state step
9cd0: 29 0a 09 09 09 22 5c 6e 73 74 61 74 75 73 3a 20 )...."\nstatus:
9ce0: 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 " (db:step-get
9cf0: 2d 73 74 61 74 75 73 20 73 74 65 70 29 0a 09 09 -status step)...
9d00: 09 22 5c 6e 74 69 6d 65 3a 20 20 20 20 20 22 20 ."\ntime: "
9d10: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 (db:step-get-eve
9d20: 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 0a 09 nt_time step))..
9d30: 20 20 20 28 63 61 73 65 20 28 73 74 72 69 6e 67 (case (string
9d40: 2d 3e 73 79 6d 62 6f 6c 20 28 64 62 3a 73 74 65 ->symbol (db:ste
9d50: 70 2d 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 p-get-state step
9d60: 29 29 0a 09 20 20 20 20 20 28 28 73 74 61 72 74 )).. ((start
9d70: 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 )(vector-set! re
9d80: 63 6f 72 64 20 31 20 28 64 62 3a 73 74 65 70 2d cord 1 (db:step-
9d90: 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 get-event_time s
9da0: 74 65 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 tep)).. (ve
9db0: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
9dc0: 20 33 20 28 69 66 20 28 65 71 75 61 6c 3f 20 28 3 (if (equal? (
9dd0: 76 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 vector-ref recor
9de0: 64 20 33 29 20 22 22 29 0a 09 09 09 09 09 28 64 d 3) "")......(d
9df0: 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 75 b:step-get-statu
9e00: 73 20 73 74 65 70 29 29 29 0a 09 20 20 20 20 20 s step)))..
9e10: 20 28 69 66 20 28 3e 20 28 73 74 72 69 6e 67 2d (if (> (string-
9e20: 6c 65 6e 67 74 68 20 28 64 62 3a 73 74 65 70 2d length (db:step-
9e30: 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 get-logfile step
9e40: 29 29 0a 09 09 20 20 20 20 20 30 29 0a 09 09 20 ))... 0)...
9e50: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
9e60: 63 6f 72 64 20 35 20 28 64 62 3a 73 74 65 70 2d cord 5 (db:step-
9e70: 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 get-logfile step
9e80: 29 29 29 29 0a 09 20 20 20 20 20 28 28 65 6e 64 )))).. ((end
9e90: 29 20 20 0a 09 20 20 20 20 20 20 28 76 65 63 74 ) .. (vect
9ea0: 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 32 or-set! record 2
9eb0: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 64 (any->number (d
9ec0: 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 b:step-get-event
9ed0: 5f 74 69 6d 65 20 73 74 65 70 29 29 29 0a 09 20 _time step)))..
9ee0: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
9ef0: 21 20 72 65 63 6f 72 64 20 33 20 28 64 62 3a 73 ! record 3 (db:s
9f00: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
9f10: 74 65 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 tep)).. (ve
9f20: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
9f30: 20 34 20 28 6c 65 74 20 28 28 73 74 61 72 74 74 4 (let ((startt
9f40: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 76 (any->number (v
9f50: 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 ector-ref record
9f60: 20 31 29 29 29 0a 09 09 09 09 09 20 20 28 65 6e 1)))...... (en
9f70: 64 74 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 dt (any->numbe
9f80: 72 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 r (vector-ref re
9f90: 63 6f 72 64 20 32 29 29 29 29 0a 09 09 09 09 20 cord 2)))).....
9fa0: 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e (debug:prin
9fb0: 74 20 34 20 22 72 65 63 6f 72 64 5b 31 5d 3d 22 t 4 "record[1]="
9fc0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 63 (vector-ref rec
9fd0: 6f 72 64 20 31 29 20 0a 09 09 09 09 09 09 20 20 ord 1) .......
9fe0: 20 22 2c 20 73 74 61 72 74 74 3d 22 20 73 74 61 ", startt=" sta
9ff0: 72 74 74 20 22 2c 20 65 6e 64 74 3d 22 20 65 6e rtt ", endt=" en
a000: 64 74 0a 09 09 09 09 09 09 20 20 20 22 2c 20 67 dt....... ", g
a010: 65 74 2d 73 74 61 74 75 73 3a 20 22 20 28 64 62 et-status: " (db
a020: 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 :step-get-status
a030: 20 73 74 65 70 29 29 0a 09 09 09 09 20 20 20 20 step)).....
a040: 20 20 28 69 66 20 28 61 6e 64 20 28 6e 75 6d 62 (if (and (numb
a050: 65 72 3f 20 73 74 61 72 74 74 29 28 6e 75 6d 62 er? startt)(numb
a060: 65 72 3f 20 65 6e 64 74 29 29 0a 09 09 09 09 09 er? endt))......
a070: 20 20 28 73 65 63 6f 6e 64 73 2d 3e 68 72 2d 6d (seconds->hr-m
a080: 69 6e 2d 73 65 63 20 28 2d 20 65 6e 64 74 20 73 in-sec (- endt s
a090: 74 61 72 74 74 29 29 20 22 2d 31 22 29 29 29 0a tartt)) "-1"))).
a0a0: 09 20 20 20 20 20 20 28 69 66 20 28 3e 20 28 73 . (if (> (s
a0b0: 74 72 69 6e 67 2d 6c 65 6e 67 74 68 20 28 64 62 tring-length (db
a0c0: 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c :step-get-logfil
a0d0: 65 20 73 74 65 70 29 29 0a 09 09 20 20 20 20 20 e step))...
a0e0: 30 29 0a 09 09 20 20 28 76 65 63 74 6f 72 2d 73 0)... (vector-s
a0f0: 65 74 21 20 72 65 63 6f 72 64 20 35 20 28 64 62 et! record 5 (db
a100: 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c :step-get-logfil
a110: 65 20 73 74 65 70 29 29 29 29 0a 09 20 20 20 20 e step))))..
a120: 20 28 65 6c 73 65 0a 09 20 20 20 20 20 20 28 76 (else.. (v
a130: 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 ector-set! recor
a140: 64 20 32 20 28 64 62 3a 73 74 65 70 2d 67 65 74 d 2 (db:step-get
a150: 2d 73 74 61 74 65 20 73 74 65 70 29 29 0a 09 20 -state step))..
a160: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
a170: 21 20 72 65 63 6f 72 64 20 33 20 28 64 62 3a 73 ! record 3 (db:s
a180: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
a190: 74 65 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 tep)).. (ve
a1a0: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
a1b0: 20 34 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 4 (db:step-get-
a1c0: 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 event_time step)
a1d0: 29 29 29 0a 09 20 20 20 28 68 61 73 68 2d 74 61 ))).. (hash-ta
a1e0: 62 6c 65 2d 73 65 74 21 20 72 65 73 20 28 64 62 ble-set! res (db
a1f0: 3a 73 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 :step-get-stepna
a200: 6d 65 20 73 74 65 70 29 20 72 65 63 6f 72 64 29 me step) record)
a210: 0a 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e .. (debug:prin
a220: 74 20 36 20 22 72 65 63 6f 72 64 28 61 66 74 65 t 6 "record(afte
a230: 72 29 20 20 3d 20 22 20 72 65 63 6f 72 64 20 0a r) = " record .
a240: 09 09 09 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 ..."\nid:
a250: 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 " (db:step-get-i
a260: 64 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 d step)...."\nst
a270: 65 70 6e 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 epname: " (db:st
a280: 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 ep-get-stepname
a290: 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 step)...."\nstat
a2a0: 65 3a 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 e: " (db:step
a2b0: 2d 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 -get-state step)
a2c0: 0a 09 09 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 ...."\nstatus:
a2d0: 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d " (db:step-get-
a2e0: 73 74 61 74 75 73 20 73 74 65 70 29 0a 09 09 09 status step)....
a2f0: 22 5c 6e 74 69 6d 65 3a 20 20 20 20 20 22 20 28 "\ntime: " (
a300: 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e db:step-get-even
a310: 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 29 0a t_time step)))).
a320: 20 20 20 20 20 20 20 3b 3b 20 28 65 6c 73 65 20 ;; (else
a330: 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
a340: 65 63 6f 72 64 20 31 20 28 64 62 3a 73 74 65 70 ecord 1 (db:step
a350: 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
a360: 73 74 65 70 29 29 29 0a 20 20 20 20 20 20 20 28 step))). (
a370: 73 6f 72 74 20 73 74 65 70 73 20 28 6c 61 6d 62 sort steps (lamb
a380: 64 61 20 28 61 20 62 29 28 3c 20 28 64 62 3a 73 da (a b)(< (db:s
a390: 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 tep-get-event_ti
a3a0: 6d 65 20 61 29 28 64 62 3a 73 74 65 70 2d 67 65 me a)(db:step-ge
a3b0: 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 62 29 29 t-event_time b))
a3c0: 29 29 29 0a 20 20 20 20 20 20 72 65 73 29 29 29 ))). res)))
a3d0: 0a 0a 3b 3b 20 74 68 65 20 6e 65 77 20 70 72 65 ..;; the new pre
a3e0: 72 65 71 73 20 63 61 6c 63 75 6c 61 74 69 6f 6e reqs calculation
a3f0: 2c 20 6c 6f 6f 6b 73 20 61 6c 73 6f 20 61 74 20 , looks also at
a400: 69 74 65 6d 70 61 74 68 20 69 66 20 73 70 65 63 itempath if spec
a410: 69 66 69 65 64 0a 3b 3b 20 61 6c 6c 20 70 72 65 ified.;; all pre
a420: 72 65 71 73 20 6d 75 73 74 20 62 65 20 6d 65 74 reqs must be met
a430: 3a 0a 3b 3b 20 20 20 20 69 66 20 70 72 65 72 65 :.;; if prere
a440: 71 20 74 65 73 74 20 77 69 74 68 20 69 74 65 6d q test with item
a450: 70 61 74 68 3d 27 27 20 69 73 20 43 4f 4d 50 4c path='' is COMPL
a460: 45 54 45 44 20 61 6e 64 20 50 41 53 53 2c 20 57 ETED and PASS, W
a470: 41 52 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 20 57 ARN, CHECK, or W
a480: 41 49 56 45 44 20 74 68 65 6e 20 70 72 65 72 65 AIVED then prere
a490: 71 20 69 73 20 6d 65 74 0a 3b 3b 20 20 20 20 69 q is met.;; i
a4a0: 66 20 70 72 65 72 65 71 20 74 65 73 74 20 77 69 f prereq test wi
a4b0: 74 68 20 69 74 65 6d 70 61 74 68 3d 72 65 66 2d th itempath=ref-
a4c0: 69 74 65 6d 2d 70 61 74 68 20 61 6e 64 20 43 4f item-path and CO
a4d0: 4d 50 4c 45 54 45 44 20 77 69 74 68 20 50 41 53 MPLETED with PAS
a4e0: 53 2c 20 57 41 52 4e 2c 20 43 48 45 43 4b 2c 20 S, WARN, CHECK,
a4f0: 6f 72 20 57 41 49 56 45 44 20 74 68 65 6e 20 70 or WAIVED then p
a500: 72 65 72 65 71 20 69 73 20 6d 65 74 0a 3b 3b 0a rereq is met.;;.
a510: 3b 3b 20 4e 6f 74 65 3a 20 64 6f 20 6e 6f 74 20 ;; Note: do not
a520: 63 6f 6e 76 65 72 74 20 74 6f 20 72 65 6d 6f 74 convert to remot
a530: 65 20 61 73 20 69 74 20 63 61 6c 6c 73 20 72 65 e as it calls re
a540: 6d 6f 74 65 20 75 6e 64 65 72 20 74 68 65 20 68 mote under the h
a550: 6f 6f 64 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 ood.;;.(define (
a560: 64 62 3a 67 65 74 2d 70 72 65 72 65 71 73 2d 6e db:get-prereqs-n
a570: 6f 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 64 ot-met db run-id
a580: 20 77 61 69 74 6f 6e 73 20 72 65 66 2d 69 74 65 waitons ref-ite
a590: 6d 2d 70 61 74 68 29 0a 20 20 28 69 66 20 28 6f m-path). (if (o
a5a0: 72 20 28 6e 6f 74 20 77 61 69 74 6f 6e 73 29 0a r (not waitons).
a5b0: 09 20 20 28 6e 75 6c 6c 3f 20 77 61 69 74 6f 6e . (null? waiton
a5c0: 73 29 29 0a 20 20 20 20 20 20 27 28 29 0a 20 20 s)). '().
a5d0: 20 20 20 20 28 6c 65 74 2a 20 28 28 75 6e 6d 65 (let* ((unme
a5e0: 74 2d 70 72 65 2d 72 65 71 73 20 27 28 29 29 0a t-pre-reqs '()).
a5f0: 09 20 20 20 20 20 28 72 65 73 75 6c 74 20 20 20 . (result
a600: 20 20 20 20 20 20 27 28 29 29 29 0a 09 28 66 6f '()))..(fo
a610: 72 2d 65 61 63 68 20 0a 09 20 28 6c 61 6d 62 64 r-each .. (lambd
a620: 61 20 28 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 a (waitontest-na
a630: 6d 65 29 0a 09 20 20 20 3b 3b 20 62 79 20 67 65 me).. ;; by ge
a640: 74 74 69 6e 67 20 74 68 65 20 74 65 73 74 73 20 tting the tests
a650: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 6e 61 with matching na
a660: 6d 65 20 77 65 20 61 72 65 20 6c 6f 6f 6b 69 6e me we are lookin
a670: 67 20 6f 6e 6c 79 20 61 74 20 74 68 65 20 6d 61 g only at the ma
a680: 74 63 68 69 6e 67 20 74 65 73 74 20 0a 09 20 20 tching test ..
a690: 20 3b 3b 20 61 6e 64 20 72 65 6c 61 74 65 64 20 ;; and related
a6a0: 73 75 62 20 69 74 65 6d 73 0a 09 20 20 20 28 6c sub items.. (l
a6b0: 65 74 20 28 28 74 65 73 74 73 20 20 20 20 20 20 et ((tests
a6c0: 20 20 20 20 20 20 20 28 72 64 62 3a 67 65 74 2d (rdb:get-
a6d0: 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 tests-for-run db
a6e0: 20 72 75 6e 2d 69 64 20 77 61 69 74 6f 6e 74 65 run-id waitonte
a6f0: 73 74 2d 6e 61 6d 65 20 23 66 20 27 28 29 20 27 st-name #f '() '
a700: 28 29 29 29 0a 09 09 20 28 65 76 65 72 2d 73 65 ()))... (ever-se
a710: 65 6e 20 20 20 20 20 20 20 20 20 23 66 29 0a 09 en #f)..
a720: 09 20 28 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e . (parent-waiton
a730: 2d 6d 65 74 20 23 66 29 0a 09 09 20 28 69 74 65 -met #f)... (ite
a740: 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 20 20 23 m-waiton-met #
a750: 66 29 29 0a 09 20 20 20 20 20 28 66 6f 72 2d 65 f)).. (for-e
a760: 61 63 68 20 0a 09 20 20 20 20 20 20 28 6c 61 6d ach .. (lam
a770: 62 64 61 20 28 74 65 73 74 29 0a 09 09 3b 3b 20 bda (test)...;;
a780: 28 69 66 20 28 65 71 75 61 6c 3f 20 77 61 69 74 (if (equal? wait
a790: 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 28 64 62 3a ontest-name (db:
a7a0: 74 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 6d test-get-testnam
a7b0: 65 20 74 65 73 74 29 29 20 3b 3b 20 62 79 20 64 e test)) ;; by d
a7c0: 65 66 69 6e 74 69 6f 6e 20 74 68 69 73 20 68 61 efintion this ha
a7d0: 64 20 62 65 74 74 65 72 20 62 65 20 74 72 75 65 d better be true
a7e0: 20 2e 2e 2e 0a 09 09 28 6c 65 74 2a 20 28 28 73 ......(let* ((s
a7f0: 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20 tate
a800: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 (db:test-get-st
a810: 61 74 65 20 74 65 73 74 29 29 0a 09 09 20 20 20 ate test))...
a820: 20 20 20 20 28 73 74 61 74 75 73 20 20 20 20 20 (status
a830: 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d (db:test-
a840: 67 65 74 2d 73 74 61 74 75 73 20 74 65 73 74 29 get-status test)
a850: 29 0a 09 09 20 20 20 20 20 20 20 28 69 74 65 6d )... (item
a860: 2d 70 61 74 68 20 20 20 20 20 20 20 20 20 28 64 -path (d
a870: 62 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d b:test-get-item-
a880: 70 61 74 68 20 74 65 73 74 29 29 0a 09 09 20 20 path test))...
a890: 20 20 20 20 20 28 69 73 2d 63 6f 6d 70 6c 65 74 (is-complet
a8a0: 65 64 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 ed (equal?
a8b0: 73 74 61 74 65 20 22 43 4f 4d 50 4c 45 54 45 44 state "COMPLETED
a8c0: 22 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 73 "))... (is
a8d0: 2d 6f 6b 20 20 20 20 20 20 20 20 20 20 20 20 20 -ok
a8e0: 28 6d 65 6d 62 65 72 20 73 74 61 74 75 73 20 27 (member status '
a8f0: 28 22 50 41 53 53 22 20 22 57 41 52 4e 22 20 22 ("PASS" "WARN" "
a900: 43 48 45 43 4b 22 20 22 57 41 49 56 45 44 22 29 CHECK" "WAIVED")
a910: 29 29 0a 09 09 20 20 20 20 20 20 20 28 73 61 6d ))... (sam
a920: 65 2d 69 74 65 6d 70 61 74 68 20 20 20 20 20 28 e-itempath (
a930: 65 71 75 61 6c 3f 20 72 65 66 2d 69 74 65 6d 2d equal? ref-item-
a940: 70 61 74 68 20 69 74 65 6d 2d 70 61 74 68 29 29 path item-path))
a950: 29 0a 09 09 20 20 28 73 65 74 21 20 65 76 65 72 )... (set! ever
a960: 2d 73 65 65 6e 20 23 74 29 0a 09 09 20 20 28 63 -seen #t)... (c
a970: 6f 6e 64 0a 09 09 20 20 20 3b 3b 20 63 61 73 65 ond... ;; case
a980: 20 31 2c 20 6e 6f 6e 2d 69 74 65 6d 20 28 70 61 1, non-item (pa
a990: 72 65 6e 74 20 74 65 73 74 29 20 69 73 20 0a 09 rent test) is ..
a9a0: 09 20 20 20 28 28 61 6e 64 20 28 65 71 75 61 6c . ((and (equal
a9b0: 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 22 29 20 ? item-path "")
a9c0: 3b 3b 20 74 68 69 73 20 69 73 20 74 68 65 20 70 ;; this is the p
a9d0: 61 72 65 6e 74 20 74 65 73 74 0a 09 09 09 20 69 arent test.... i
a9e0: 73 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 20 s-completed....
a9f0: 69 73 2d 6f 6b 29 0a 09 09 20 20 20 20 28 73 65 is-ok)... (se
aa00: 74 21 20 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e t! parent-waiton
aa10: 2d 6d 65 74 20 23 74 29 29 0a 09 09 20 20 20 28 -met #t))... (
aa20: 28 61 6e 64 20 73 61 6d 65 2d 69 74 65 6d 70 61 (and same-itempa
aa30: 74 68 0a 09 09 09 20 69 73 2d 63 6f 6d 70 6c 65 th.... is-comple
aa40: 74 65 64 0a 09 09 09 20 69 73 2d 6f 6b 29 0a 09 ted.... is-ok)..
aa50: 09 20 20 20 20 28 73 65 74 21 20 69 74 65 6d 2d . (set! item-
aa60: 77 61 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 29 waiton-met #t)))
aa70: 29 29 0a 09 20 20 20 20 20 20 74 65 73 74 73 29 )).. tests)
aa80: 0a 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 .. (if (not
aa90: 28 6f 72 20 70 61 72 65 6e 74 2d 77 61 69 74 6f (or parent-waito
aaa0: 6e 2d 6d 65 74 20 69 74 65 6d 2d 77 61 69 74 6f n-met item-waito
aab0: 6e 2d 6d 65 74 29 29 0a 09 09 20 28 73 65 74 21 n-met))... (set!
aac0: 20 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 result (cons wa
aad0: 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 itontest-name re
aae0: 73 75 6c 74 29 29 29 0a 09 20 20 20 20 20 3b 3b sult))).. ;;
aaf0: 20 69 66 20 74 68 65 20 74 65 73 74 20 69 73 20 if the test is
ab00: 6e 6f 74 20 66 6f 75 6e 64 20 74 68 65 6e 20 63 not found then c
ab10: 6c 65 61 72 6c 79 20 74 68 65 20 77 61 69 74 6f learly the waito
ab20: 6e 20 69 73 20 6e 6f 74 20 6d 65 74 2e 2e 2e 0a n is not met....
ab30: 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 65 . (if (not e
ab40: 76 65 72 2d 73 65 65 6e 29 28 73 65 74 21 20 72 ver-seen)(set! r
ab50: 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 74 esult (cons wait
ab60: 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 75 ontest-name resu
ab70: 6c 74 29 29 29 29 29 0a 09 77 61 69 74 6f 6e 73 lt)))))..waitons
ab80: 29 0a 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d ). (delete-
ab90: 64 75 70 6c 69 63 61 74 65 73 20 72 65 73 75 6c duplicates resul
aba0: 74 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 t))))..(define (
abb0: 64 62 3a 74 65 73 74 73 74 65 70 2d 73 65 74 2d db:teststep-set-
abc0: 73 74 61 74 75 73 21 20 64 62 20 74 65 73 74 2d status! db test-
abd0: 69 64 20 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 id teststep-name
abe0: 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 state-in status
abf0: 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 63 6f -in item-path co
ac00: 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 0a 20 mment logfile).
ac10: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
ac20: 22 74 65 73 74 2d 69 64 3a 20 22 20 74 65 73 74 "test-id: " test
ac30: 2d 69 64 20 22 20 74 65 73 74 73 74 65 70 2d 6e -id " teststep-n
ac40: 61 6d 65 3a 20 22 20 74 65 73 74 73 74 65 70 2d ame: " teststep-
ac50: 6e 61 6d 65 29 0a 20 20 28 6c 65 74 2a 20 28 28 name). (let* ((
ac60: 73 74 61 74 65 20 20 20 20 20 28 63 68 65 63 6b state (check
ac70: 2d 76 61 6c 69 64 2d 69 74 65 6d 73 20 22 73 74 -valid-items "st
ac80: 61 74 65 22 20 73 74 61 74 65 2d 69 6e 29 29 0a ate" state-in)).
ac90: 09 20 28 73 74 61 74 75 73 20 20 20 20 28 63 68 . (status (ch
aca0: 65 63 6b 2d 76 61 6c 69 64 2d 69 74 65 6d 73 20 eck-valid-items
acb0: 22 73 74 61 74 75 73 22 20 73 74 61 74 75 73 2d "status" status-
acc0: 69 6e 29 29 29 0a 20 20 20 20 28 69 66 20 28 6f in))). (if (o
acd0: 72 20 28 6e 6f 74 20 73 74 61 74 65 29 28 6e 6f r (not state)(no
ace0: 74 20 73 74 61 74 75 73 29 29 0a 09 28 64 65 62 t status))..(deb
acf0: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e ug:print 0 "WARN
ad00: 49 4e 47 3a 20 49 6e 76 61 6c 69 64 20 22 20 28 ING: Invalid " (
ad10: 69 66 20 73 74 61 74 75 73 20 22 73 74 61 74 75 if status "statu
ad20: 73 22 20 22 73 74 61 74 65 22 29 0a 09 09 20 20 s" "state")...
ad30: 20 20 20 22 20 76 61 6c 75 65 20 5c 22 22 20 28 " value \"" (
ad40: 69 66 20 73 74 61 74 75 73 20 73 74 61 74 65 2d if status state-
ad50: 69 6e 20 73 74 61 74 75 73 2d 69 6e 29 20 22 5c in status-in) "\
ad60: 22 2c 20 75 70 64 61 74 65 20 79 6f 75 72 20 76 ", update your v
ad70: 61 6c 69 64 76 61 6c 75 65 73 20 73 65 63 74 69 alidvalues secti
ad80: 6f 6e 20 69 6e 20 6d 65 67 61 74 65 73 74 2e 63 on in megatest.c
ad90: 6f 6e 66 69 67 22 29 29 0a 20 20 20 20 28 6d 75 onfig")). (mu
ada0: 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d tex-lock! *incom
adb0: 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 20 ing-mutex*).
adc0: 28 73 65 74 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d (set! *incoming-
add0: 64 61 74 61 2a 20 28 63 6f 6e 73 20 28 76 65 63 data* (cons (vec
ade0: 74 6f 72 20 27 73 74 65 70 2d 73 74 61 74 75 73 tor 'step-status
adf0: 0a 09 09 09 09 09 28 63 75 72 72 65 6e 74 2d 73 ......(current-s
ae00: 65 63 6f 6e 64 73 29 0a 09 09 09 09 09 3b 3b 20 econds)......;;
ae10: 46 49 58 4d 45 20 2d 20 74 68 69 73 20 73 68 6f FIXME - this sho
ae20: 75 6c 64 20 6e 6f 74 20 75 70 64 61 74 65 20 74 uld not update t
ae30: 68 65 20 6c 6f 67 66 69 6c 65 20 75 6e 6c 65 73 he logfile unles
ae40: 73 20 69 74 20 69 73 20 73 70 65 63 69 66 69 65 s it is specifie
ae50: 64 2e 0a 09 09 09 09 09 28 6c 69 73 74 20 74 65 d.......(list te
ae60: 73 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d 6e st-id teststep-n
ae70: 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 ame state-in sta
ae80: 74 75 73 2d 69 6e 20 28 63 75 72 72 65 6e 74 2d tus-in (current-
ae90: 73 65 63 6f 6e 64 73 29 20 28 69 66 20 63 6f 6d seconds) (if com
aea0: 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 22 22 29 ment comment "")
aeb0: 20 28 69 66 20 6c 6f 67 66 69 6c 65 20 6c 6f 67 (if logfile log
aec0: 66 69 6c 65 20 22 22 29 29 29 0a 09 09 09 09 2a file ""))).....*
aed0: 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 29 29 incoming-data*))
aee0: 0a 20 20 20 20 28 6d 75 74 65 78 2d 75 6e 6c 6f . (mutex-unlo
aef0: 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 ck! *incoming-mu
af00: 74 65 78 2a 29 0a 20 20 20 20 28 69 66 20 28 6e tex*). (if (n
af10: 6f 74 20 2a 63 61 63 68 65 2d 6f 6e 2a 29 28 64 ot *cache-on*)(d
af20: 62 3a 77 72 69 74 65 2d 63 61 63 68 65 64 2d 64 b:write-cached-d
af30: 61 74 61 20 64 62 29 29 0a 20 20 20 20 23 74 29 ata db)). #t)
af40: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
af50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
af60: 3d 3d 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 0a 3b 3b 20 45 ===========.;; E
af90: 78 74 72 61 63 74 20 6f 64 73 20 66 69 6c 65 20 xtract ods file
afa0: 66 72 6f 6d 20 74 68 65 20 64 62 0a 3b 3b 3d 3d from the db.;;==
afb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
afc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
afd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
afe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
aff0: 3d 3d 3d 3d 0a 0a 3b 3b 20 72 75 6e 73 70 61 74 ====..;; runspat
b000: 74 20 69 73 20 61 20 63 6f 6d 6d 61 20 64 65 6c t is a comma del
b010: 69 6d 69 74 65 64 20 6c 69 73 74 20 6f 66 20 72 imited list of r
b020: 75 6e 20 70 61 74 74 65 72 6e 73 0a 3b 3b 20 6b un patterns.;; k
b030: 65 79 70 61 74 74 2d 61 6c 69 73 74 20 6d 75 73 eypatt-alist mus
b040: 74 20 63 6f 6e 74 61 69 6e 20 2a 61 6c 6c 2a 20 t contain *all*
b050: 6b 65 79 73 20 77 69 74 68 20 61 6e 20 61 73 73 keys with an ass
b060: 6f 63 69 61 74 65 64 20 70 61 74 74 65 72 6e 3a ociated pattern:
b070: 20 27 28 20 28 22 4b 45 59 31 22 20 22 25 22 29 '( ("KEY1" "%")
b080: 20 2e 2e 20 29 0a 28 64 65 66 69 6e 65 20 28 64 .. ).(define (d
b090: 62 3a 65 78 74 72 61 63 74 2d 6f 64 73 2d 66 69 b:extract-ods-fi
b0a0: 6c 65 20 64 62 20 6f 75 74 70 75 74 66 69 6c 65 le db outputfile
b0b0: 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 20 72 keypatt-alist r
b0c0: 75 6e 73 70 61 74 74 20 70 61 74 68 6d 6f 64 29 unspatt pathmod)
b0d0: 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 73 . (let* ((keyss
b0e0: 74 72 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 tr (string-inte
b0f0: 72 73 70 65 72 73 65 20 28 6d 61 70 20 63 61 72 rsperse (map car
b100: 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 keypatt-alist)
b110: 22 2c 22 29 29 0a 09 20 28 6b 65 79 71 72 79 20 ",")).. (keyqry
b120: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
b130: 70 65 72 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 perse (map (lamb
b140: 64 61 20 28 70 29 28 63 6f 6e 63 20 28 63 61 72 da (p)(conc (car
b150: 20 70 29 20 22 20 4c 49 4b 45 20 3f 20 22 29 29 p) " LIKE ? "))
b160: 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 keypatt-alist)
b170: 22 20 41 4e 44 20 22 29 29 0a 09 20 28 6e 75 6d " AND ")).. (num
b180: 6b 65 79 73 20 20 28 6c 65 6e 67 74 68 20 6b 65 keys (length ke
b190: 79 70 61 74 74 2d 61 6c 69 73 74 29 29 0a 09 20 ypatt-alist))..
b1a0: 28 74 65 73 74 2d 69 64 73 20 27 28 29 29 0a 09 (test-ids '())..
b1b0: 20 28 77 69 6e 64 6f 77 73 20 20 28 61 6e 64 20 (windows (and
b1c0: 70 61 74 68 6d 6f 64 20 28 73 75 62 73 74 72 69 pathmod (substri
b1d0: 6e 67 2d 69 6e 64 65 78 20 22 5c 5c 22 20 70 61 ng-index "\\" pa
b1e0: 74 68 6d 6f 64 29 29 29 0a 09 20 28 74 65 6d 70 thmod))).. (temp
b1f0: 64 69 72 20 20 28 63 6f 6e 63 20 22 2f 74 6d 70 dir (conc "/tmp
b200: 2f 22 20 28 63 75 72 72 65 6e 74 2d 75 73 65 72 /" (current-user
b210: 2d 6e 61 6d 65 29 20 22 2f 22 20 72 75 6e 73 70 -name) "/" runsp
b220: 61 74 74 20 22 5f 22 20 28 72 61 6e 64 6f 6d 20 att "_" (random
b230: 31 30 30 30 30 29 20 22 5f 22 20 28 63 75 72 72 10000) "_" (curr
b240: 65 6e 74 2d 70 72 6f 63 65 73 73 2d 69 64 29 29 ent-process-id))
b250: 29 0a 09 20 28 72 75 6e 73 68 65 61 64 65 72 20 ).. (runsheader
b260: 28 61 70 70 65 6e 64 20 28 6c 69 73 74 20 22 52 (append (list "R
b270: 75 6e 20 49 64 22 20 22 52 75 6e 6e 61 6d 65 22 un Id" "Runname"
b280: 29 20 3b 20 30 20 31 0a 09 09 09 20 20 20 20 20 ) ; 0 1....
b290: 28 6d 61 70 20 63 61 72 20 6b 65 79 70 61 74 74 (map car keypatt
b2a0: 2d 61 6c 69 73 74 29 20 20 20 3b 20 2b 20 4e 20 -alist) ; + N
b2b0: 3d 20 6c 65 6e 67 74 68 20 6b 65 79 70 61 74 74 = length keypatt
b2c0: 2d 61 6c 69 73 74 0a 09 09 09 20 20 20 20 20 28 -alist.... (
b2d0: 6c 69 73 74 20 22 54 65 73 74 6e 61 6d 65 22 20 list "Testname"
b2e0: 20 20 20 20 20 20 20 20 20 3b 20 32 0a 09 09 09 ; 2....
b2f0: 09 20 20 20 22 49 74 65 6d 20 50 61 74 68 22 20 . "Item Path"
b300: 20 20 20 20 20 20 20 20 3b 20 33 20 0a 09 09 09 ; 3 ....
b310: 09 20 20 20 22 44 65 73 63 72 69 70 74 69 6f 6e . "Description
b320: 22 20 20 20 20 20 20 20 3b 20 34 20 0a 09 09 09 " ; 4 ....
b330: 09 20 20 20 22 53 74 61 74 65 22 20 20 20 20 20 . "State"
b340: 20 20 20 20 20 20 20 20 3b 20 35 20 0a 09 09 09 ; 5 ....
b350: 09 20 20 20 22 53 74 61 74 75 73 22 20 20 20 20 . "Status"
b360: 20 20 20 20 20 20 20 20 3b 20 36 20 20 0a 09 09 ; 6 ...
b370: 09 09 20 20 20 22 46 69 6e 61 6c 20 4c 6f 67 22 .. "Final Log"
b380: 20 20 20 20 20 20 20 20 20 3b 20 37 20 0a 09 09 ; 7 ...
b390: 09 09 20 20 20 22 52 75 6e 20 44 75 72 61 74 69 .. "Run Durati
b3a0: 6f 6e 22 20 20 20 20 20 20 3b 20 38 20 0a 09 09 on" ; 8 ...
b3b0: 09 09 20 20 20 22 57 68 65 6e 20 52 75 6e 22 20 .. "When Run"
b3c0: 20 20 20 20 20 20 20 20 20 3b 20 39 20 0a 09 09 ; 9 ...
b3d0: 09 09 20 20 20 22 54 61 67 73 22 20 20 20 20 20 .. "Tags"
b3e0: 20 20 20 20 20 20 20 20 20 3b 20 31 30 0a 09 09 ; 10...
b3f0: 09 09 20 20 20 22 52 75 6e 20 4f 77 6e 65 72 22 .. "Run Owner"
b400: 20 20 20 20 20 20 20 20 20 3b 20 31 31 0a 09 09 ; 11...
b410: 09 09 20 20 20 22 43 6f 6d 6d 65 6e 74 22 20 20 .. "Comment"
b420: 20 20 20 20 20 20 20 20 20 3b 20 31 32 0a 09 09 ; 12...
b430: 09 09 20 20 20 22 41 75 74 68 6f 72 22 20 20 20 .. "Author"
b440: 20 20 20 20 20 20 20 20 20 3b 20 31 33 0a 09 09 ; 13...
b450: 09 09 20 20 20 22 54 65 73 74 20 4f 77 6e 65 72 .. "Test Owner
b460: 22 20 20 20 20 20 20 20 20 3b 20 31 34 0a 09 09 " ; 14...
b470: 09 09 20 20 20 22 52 65 76 69 65 77 65 64 22 20 .. "Reviewed"
b480: 20 20 20 20 20 20 20 20 20 3b 20 31 35 0a 09 09 ; 15...
b490: 09 09 20 20 20 22 44 69 73 6b 66 72 65 65 22 20 .. "Diskfree"
b4a0: 20 20 20 20 20 20 20 20 20 3b 20 31 36 0a 09 09 ; 16...
b4b0: 09 09 20 20 20 22 55 6e 61 6d 65 22 20 20 20 20 .. "Uname"
b4c0: 20 20 20 20 20 20 20 20 20 3b 20 31 37 0a 09 09 ; 17...
b4d0: 09 09 20 20 20 22 52 75 6e 64 69 72 22 20 20 20 .. "Rundir"
b4e0: 20 20 20 20 20 20 20 20 20 3b 20 31 38 0a 09 09 ; 18...
b4f0: 09 09 20 20 20 22 48 6f 73 74 22 20 20 20 20 20 .. "Host"
b500: 20 20 20 20 20 20 20 20 20 3b 20 31 39 0a 09 09 ; 19...
b510: 09 09 20 20 20 22 43 70 75 20 4c 6f 61 64 22 20 .. "Cpu Load"
b520: 20 20 20 20 20 20 20 20 20 3b 20 32 30 0a 09 09 ; 20...
b530: 09 09 20 20 20 29 29 29 0a 09 20 28 72 65 73 75 .. ))).. (resu
b540: 6c 74 73 20 28 6c 69 73 74 20 72 75 6e 73 68 65 lts (list runshe
b550: 61 64 65 72 29 29 09 09 09 20 0a 09 20 28 74 65 ader))... .. (te
b560: 73 74 64 61 74 61 2d 68 65 61 64 65 72 20 28 6c stdata-header (l
b570: 69 73 74 20 22 52 75 6e 20 49 64 22 20 22 54 65 ist "Run Id" "Te
b580: 73 74 6e 61 6d 65 22 20 22 49 74 65 6d 20 50 61 stname" "Item Pa
b590: 74 68 22 20 22 43 61 74 65 67 6f 72 79 22 20 22 th" "Category" "
b5a0: 56 61 72 69 61 62 6c 65 22 20 22 56 61 6c 75 65 Variable" "Value
b5b0: 22 20 22 45 78 70 65 63 74 65 64 22 20 22 54 6f " "Expected" "To
b5c0: 6c 22 20 22 55 6e 69 74 73 22 20 22 53 74 61 74 l" "Units" "Stat
b5d0: 75 73 22 20 22 43 6f 6d 6d 65 6e 74 22 29 29 0a us" "Comment")).
b5e0: 09 20 28 6d 61 69 6e 71 72 79 20 28 63 6f 6e 63 . (mainqry (conc
b5f0: 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 "SELECT.
b600: 20 20 20 20 20 20 20 74 2e 74 65 73 74 6e 61 6d t.testnam
b610: 65 2c 72 2e 69 64 2c 72 75 6e 6e 61 6d 65 2c 22 e,r.id,runname,"
b620: 20 6b 65 79 73 73 74 72 20 22 2c 74 2e 74 65 73 keysstr ",t.tes
b630: 74 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 tname,.
b640: 20 20 20 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 t.item_path
b650: 2c 74 6d 2e 64 65 73 63 72 69 70 74 69 6f 6e 2c ,tm.description,
b660: 74 2e 73 74 61 74 65 2c 74 2e 73 74 61 74 75 73 t.state,t.status
b670: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
b680: 66 69 6e 61 6c 5f 6c 6f 67 66 2c 72 75 6e 5f 64 final_logf,run_d
b690: 75 72 61 74 69 6f 6e 2c 20 0a 20 20 20 20 20 20 uration, .
b6a0: 20 20 20 20 20 20 20 20 73 74 72 66 74 69 6d 65 strftime
b6b0: 28 27 25 6d 2f 25 64 2f 25 59 20 25 48 3a 25 4d ('%m/%d/%Y %H:%M
b6c0: 3a 25 53 27 2c 64 61 74 65 74 69 6d 65 28 74 2e :%S',datetime(t.
b6d0: 65 76 65 6e 74 5f 74 69 6d 65 2c 27 75 6e 69 78 event_time,'unix
b6e0: 65 70 6f 63 68 27 29 2c 27 6c 6f 63 61 6c 74 69 epoch'),'localti
b6f0: 6d 65 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20 me'),.
b700: 20 20 20 20 74 6d 2e 74 61 67 73 2c 72 2e 6f 77 tm.tags,r.ow
b710: 6e 65 72 2c 74 2e 63 6f 6d 6d 65 6e 74 2c 0a 20 ner,t.comment,.
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 aut
b730: 68 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 hor,.
b740: 20 20 20 74 6d 2e 6f 77 6e 65 72 2c 72 65 76 69 tm.owner,revi
b750: 65 77 65 64 2c 0a 20 20 20 20 20 20 20 20 20 20 ewed,.
b760: 20 20 20 20 64 69 73 6b 66 72 65 65 2c 75 6e 61 diskfree,una
b770: 6d 65 2c 72 75 6e 64 69 72 2c 0a 20 20 20 20 20 me,rundir,.
b780: 20 20 20 20 20 20 20 20 20 68 6f 73 74 2c 63 70 host,cp
b790: 75 6c 6f 61 64 0a 20 20 20 20 20 20 20 20 20 20 uload.
b7a0: 20 20 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 FROM tests AS
b7b0: 74 20 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 t JOIN runs AS r
b7c0: 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 ON t.run_id=r.i
b7d0: 64 20 4a 4f 49 4e 20 74 65 73 74 5f 6d 65 74 61 d JOIN test_meta
b7e0: 20 41 53 20 74 6d 20 4f 4e 20 74 6d 2e 74 65 73 AS tm ON tm.tes
b7f0: 74 6e 61 6d 65 3d 74 2e 74 65 73 74 6e 61 6d 65 tname=t.testname
b800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 . WHE
b810: 52 45 20 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 RE runname LIKE
b820: 3f 20 41 4e 44 20 22 20 6b 65 79 71 72 79 20 22 ? AND " keyqry "
b830: 3b 22 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 ;"))). (debug
b840: 3a 70 72 69 6e 74 20 32 20 22 55 73 69 6e 67 20 :print 2 "Using
b850: 22 20 74 65 6d 70 64 69 72 20 22 20 66 6f 72 20 " tempdir " for
b860: 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65 constructing the
b870: 20 6f 64 73 20 66 69 6c 65 2e 20 6b 65 79 71 72 ods file. keyqr
b880: 79 3a 20 22 20 6b 65 79 71 72 79 20 22 20 6b 65 y: " keyqry " ke
b890: 79 73 74 72 3a 20 22 20 6b 65 79 73 73 74 72 20 ystr: " keysstr
b8a0: 22 20 77 69 74 68 20 6b 65 79 73 3a 20 22 20 28 " with keys: " (
b8b0: 6d 61 70 20 63 61 64 72 20 6b 65 79 70 61 74 74 map cadr keypatt
b8c0: 2d 61 6c 69 73 74 29 0a 09 09 20 22 5c 6e 20 20 -alist)... "\n
b8d0: 20 20 20 20 6d 61 69 6e 71 72 79 3a 20 22 20 6d mainqry: " m
b8e0: 61 69 6e 71 72 79 29 0a 20 20 20 20 3b 3b 20 22 ainqry). ;; "
b8f0: 45 78 70 65 63 74 65 64 20 56 61 6c 75 65 22 0a Expected Value".
b900: 20 20 20 20 3b 3b 20 22 56 61 6c 75 65 20 46 6f ;; "Value Fo
b910: 75 6e 64 22 0a 20 20 20 20 3b 3b 20 22 54 6f 6c und". ;; "Tol
b920: 65 72 61 6e 63 65 22 0a 20 20 20 20 28 61 70 70 erance". (app
b930: 6c 79 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 ly sqlite3:for-e
b940: 61 63 68 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d ach-row.. (lam
b950: 62 64 61 20 28 74 65 73 74 2d 69 64 20 2e 20 62 bda (test-id . b
b960: 29 0a 09 20 20 20 20 20 28 73 65 74 21 20 74 65 ).. (set! te
b970: 73 74 2d 69 64 73 20 28 63 6f 6e 73 20 74 65 73 st-ids (cons tes
b980: 74 2d 69 64 20 74 65 73 74 2d 69 64 73 29 29 20 t-id test-ids))
b990: 20 20 3b 3b 20 74 65 73 74 2d 69 64 20 69 73 20 ;; test-id is
b9a0: 6e 6f 77 20 74 65 73 74 6e 61 6d 65 0a 09 20 20 now testname..
b9b0: 20 20 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 (set! results
b9c0: 20 28 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 (append results
b9d0: 20 3b 3b 20 6e 6f 74 65 2c 20 64 72 6f 70 20 74 ;; note, drop t
b9e0: 68 65 20 74 65 73 74 2d 69 64 0a 09 09 09 09 20 he test-id.....
b9f0: 20 20 28 6c 69 73 74 0a 09 09 09 09 20 20 20 20 (list.....
ba00: 28 69 66 20 70 61 74 68 6d 6f 64 0a 09 09 09 09 (if pathmod.....
ba10: 09 28 6c 65 74 2a 20 28 28 76 62 20 20 20 20 20 .(let* ((vb
ba20: 20 20 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 (apply vector
ba30: 20 62 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 b))......
ba40: 20 28 6b 65 79 76 61 6c 73 20 20 20 28 6c 65 74 (keyvals (let
ba50: 20 6c 6f 6f 70 20 28 28 69 20 20 20 20 30 29 0a loop ((i 0).
ba60: 09 09 09 09 09 09 09 09 20 20 20 20 20 28 72 65 ........ (re
ba70: 73 20 27 28 29 29 29 0a 09 09 09 09 09 09 09 20 s '()))........
ba80: 20 20 20 28 69 66 20 28 3e 3d 20 69 20 6e 75 6d (if (>= i num
ba90: 6b 65 79 73 29 0a 09 09 09 09 09 09 09 09 72 65 keys).........re
baa0: 73 0a 09 09 09 09 09 09 09 09 28 6c 6f 6f 70 20 s.........(loop
bab0: 28 2b 20 69 20 31 29 0a 09 09 09 09 09 09 09 09 (+ i 1).........
bac0: 20 20 20 20 20 20 28 61 70 70 65 6e 64 20 72 65 (append re
bad0: 73 20 28 6c 69 73 74 20 28 76 65 63 74 6f 72 2d s (list (vector-
bae0: 72 65 66 20 76 62 20 28 2b 20 69 20 32 29 29 29 ref vb (+ i 2)))
baf0: 29 29 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 )))))......
bb00: 20 20 28 72 75 6e 6e 61 6d 65 20 20 20 28 76 65 (runname (ve
bb10: 63 74 6f 72 2d 72 65 66 20 76 62 20 31 29 29 0a ctor-ref vb 1)).
bb20: 09 09 09 09 09 20 20 20 20 20 20 20 28 74 65 73 ..... (tes
bb30: 74 6e 61 6d 65 20 20 28 76 65 63 74 6f 72 2d 72 tname (vector-r
bb40: 65 66 20 76 62 20 28 2b 20 20 32 20 6e 75 6d 6b ef vb (+ 2 numk
bb50: 65 79 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 eys)))......
bb60: 20 20 20 28 69 74 65 6d 2d 70 61 74 68 20 28 76 (item-path (v
bb70: 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 ector-ref vb (+
bb80: 20 33 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 3 numkeys)))...
bb90: 09 09 09 20 20 20 20 20 20 20 28 66 69 6e 61 6c ... (final
bba0: 2d 6c 6f 67 20 28 76 65 63 74 6f 72 2d 72 65 66 -log (vector-ref
bbb0: 20 76 62 20 28 2b 20 20 37 20 6e 75 6d 6b 65 79 vb (+ 7 numkey
bbc0: 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 s)))......
bbd0: 20 28 72 75 6e 2d 64 69 72 20 20 20 28 76 65 63 (run-dir (vec
bbe0: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 31 38 tor-ref vb (+ 18
bbf0: 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 numkeys))).....
bc00: 09 20 20 20 20 20 20 20 28 6c 6f 67 2d 66 70 61 . (log-fpa
bc10: 74 68 20 28 63 6f 6e 63 20 72 75 6e 2d 64 69 72 th (conc run-dir
bc20: 20 22 2f 22 20 20 66 69 6e 61 6c 2d 6c 6f 67 29 "/" final-log)
bc30: 29 29 20 3b 3b 20 28 73 74 72 69 6e 67 2d 69 6e )) ;; (string-in
bc40: 74 65 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c tersperse keyval
bc50: 73 20 22 2f 22 29 20 22 2f 22 20 74 65 73 74 6e s "/") "/" testn
bc60: 61 6d 65 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 ame "/" item-pat
bc70: 68 20 22 2f 22 0a 09 09 09 09 09 20 20 28 64 65 h "/"...... (de
bc80: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 6c 6f 67 bug:print 4 "log
bc90: 3a 20 22 20 6c 6f 67 2d 66 70 61 74 68 20 22 20 : " log-fpath "
bca0: 65 78 69 73 74 73 3a 20 22 20 28 66 69 6c 65 2d exists: " (file-
bcb0: 65 78 69 73 74 73 3f 20 6c 6f 67 2d 66 70 61 74 exists? log-fpat
bcc0: 68 29 29 0a 09 09 09 09 09 20 20 28 76 65 63 74 h))...... (vect
bcd0: 6f 72 2d 73 65 74 21 20 76 62 20 28 2b 20 37 20 or-set! vb (+ 7
bce0: 6e 75 6d 6b 65 79 73 29 20 28 69 66 20 28 66 69 numkeys) (if (fi
bcf0: 6c 65 2d 65 78 69 73 74 73 3f 20 6c 6f 67 2d 66 le-exists? log-f
bd00: 70 61 74 68 29 0a 09 09 09 09 09 09 09 09 09 20 path)..........
bd10: 20 20 20 28 6c 65 74 20 28 28 6e 65 77 70 61 74 (let ((newpat
bd20: 68 20 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 h (conc pathmod
bd30: 22 2f 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 "/".............
bd40: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 (string-intersp
bd50: 65 72 73 65 20 6b 65 79 76 61 6c 73 20 22 2f 22 erse keyvals "/"
bd60: 29 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 22 )............. "
bd70: 2f 22 20 72 75 6e 6e 61 6d 65 20 22 2f 22 20 74 /" runname "/" t
bd80: 65 73 74 6e 61 6d 65 20 22 2f 22 0a 09 09 09 09 estname "/".....
bd90: 09 09 09 09 09 09 09 09 20 28 69 66 20 28 73 74 ........ (if (st
bda0: 72 69 6e 67 3d 3f 20 69 74 65 6d 2d 70 61 74 68 ring=? item-path
bdb0: 20 22 22 29 20 22 22 20 28 63 6f 6e 63 20 22 2f "") "" (conc "/
bdc0: 22 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 09 09 " item-path))...
bdd0: 09 09 09 09 09 09 09 09 09 09 20 66 69 6e 61 6c .......... final
bde0: 2d 6c 6f 67 29 29 29 0a 09 09 09 09 09 09 09 09 -log))).........
bdf0: 09 20 20 20 20 20 20 3b 3b 20 66 6f 72 20 6e 6f . ;; for no
be00: 77 20 74 68 72 6f 77 20 61 77 61 79 20 6e 65 77 w throw away new
be10: 70 61 74 68 20 61 6e 64 20 75 73 65 20 74 68 65 path and use the
be20: 20 6c 6f 67 2d 66 70 61 74 68 20 63 6f 6e 63 27 log-fpath conc'
be30: 64 20 77 69 74 68 20 70 61 74 68 6d 6f 64 0a 09 d with pathmod..
be40: 09 09 09 09 09 09 09 09 20 20 20 20 20 20 28 73 ........ (s
be50: 65 74 21 20 6e 65 77 70 61 74 68 20 28 63 6f 6e et! newpath (con
be60: 63 20 70 61 74 68 6d 6f 64 20 6c 6f 67 2d 66 70 c pathmod log-fp
be70: 61 74 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 ath))..........
be80: 20 20 20 20 20 28 69 66 20 77 69 6e 64 6f 77 73 (if windows
be90: 20 28 73 74 72 69 6e 67 2d 74 72 61 6e 73 6c 61 (string-transla
bea0: 74 65 20 6e 65 77 70 61 74 68 20 22 2f 22 20 22 te newpath "/" "
beb0: 5c 5c 22 29 20 6e 65 77 70 61 74 68 29 29 0a 09 \\") newpath))..
bec0: 09 09 09 09 09 09 09 09 20 20 20 20 28 69 66 20 ........ (if
bed0: 28 3e 20 2a 76 65 72 62 6f 73 69 74 79 2a 20 31 (> *verbosity* 1
bee0: 29 0a 09 09 09 09 09 09 09 09 09 09 28 63 6f 6e )...........(con
bef0: 63 20 66 69 6e 61 6c 2d 6c 6f 67 20 22 20 6e 6f c final-log " no
bf00: 74 2d 66 6f 75 6e 64 22 29 0a 09 09 09 09 09 09 t-found").......
bf10: 09 09 09 09 22 22 29 29 29 0a 09 09 09 09 09 20 ...."")))......
bf20: 20 28 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 76 (vector->list v
bf30: 62 29 29 0a 09 09 09 09 09 62 29 29 29 29 29 0a b))......b))))).
bf40: 09 20 20 20 64 62 0a 09 20 20 20 6d 61 69 6e 71 . db.. mainq
bf50: 72 79 0a 09 20 20 20 72 75 6e 73 70 61 74 74 20 ry.. runspatt
bf60: 28 6d 61 70 20 63 61 64 72 20 6b 65 79 70 61 74 (map cadr keypat
bf70: 74 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 28 64 t-alist)). (d
bf80: 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 46 6f ebug:print 2 "Fo
bf90: 75 6e 64 20 22 20 28 6c 65 6e 67 74 68 20 74 65 und " (length te
bfa0: 73 74 2d 69 64 73 29 20 22 20 72 65 63 6f 72 64 st-ids) " record
bfb0: 73 22 29 0a 20 20 20 20 28 73 65 74 21 20 72 65 s"). (set! re
bfc0: 73 75 6c 74 73 20 28 6c 69 73 74 20 28 63 6f 6e sults (list (con
bfd0: 73 20 22 52 75 6e 73 22 20 72 65 73 75 6c 74 73 s "Runs" results
bfe0: 29 29 29 0a 20 20 20 20 3b 3b 20 6e 6f 77 2c 20 ))). ;; now,
bff0: 66 6f 72 20 65 61 63 68 20 74 65 73 74 2c 20 63 for each test, c
c000: 6f 6c 6c 65 63 74 20 74 68 65 20 74 65 73 74 5f ollect the test_
c010: 64 61 74 61 20 69 6e 66 6f 20 61 6e 64 20 61 64 data info and ad
c020: 64 20 61 20 6e 65 77 20 73 68 65 65 74 0a 20 20 d a new sheet.
c030: 20 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 (for-each.
c040: 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 2d 69 (lambda (test-i
c050: 64 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 d). (let (
c060: 28 74 65 73 74 2d 64 61 74 61 20 28 6c 69 73 74 (test-data (list
c070: 20 74 65 73 74 64 61 74 61 2d 68 65 61 64 65 72 testdata-header
c080: 29 29 0a 09 20 20 20 20 20 28 63 75 72 72 2d 74 )).. (curr-t
c090: 65 73 74 2d 6e 61 6d 65 20 23 66 29 29 0a 09 20 est-name #f))..
c0a0: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
c0b0: 68 2d 72 6f 77 0a 09 20 20 28 6c 61 6d 62 64 61 h-row.. (lambda
c0c0: 20 28 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d (run-id testnam
c0d0: 65 20 69 74 65 6d 2d 70 61 74 68 20 63 61 74 65 e item-path cate
c0e0: 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 gory variable va
c0f0: 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c lue expected tol
c100: 20 75 6e 69 74 73 20 73 74 61 74 75 73 20 63 6f units status co
c110: 6d 6d 65 6e 74 29 0a 09 20 20 20 20 28 73 65 74 mment).. (set
c120: 21 20 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 ! curr-test-name
c130: 20 74 65 73 74 6e 61 6d 65 29 0a 09 20 20 20 20 testname)..
c140: 28 73 65 74 21 20 74 65 73 74 2d 64 61 74 61 20 (set! test-data
c150: 28 61 70 70 65 6e 64 20 74 65 73 74 2d 64 61 74 (append test-dat
c160: 61 20 28 6c 69 73 74 20 28 6c 69 73 74 20 72 75 a (list (list ru
c170: 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 74 n-id testname it
c180: 65 6d 2d 70 61 74 68 20 63 61 74 65 67 6f 72 79 em-path category
c190: 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 variable value
c1a0: 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 expected tol uni
c1b0: 74 73 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e ts status commen
c1c0: 74 29 29 29 29 29 0a 09 20 20 64 62 20 0a 09 20 t))))).. db ..
c1d0: 20 3b 3b 20 22 53 45 4c 45 43 54 20 72 75 6e 5f ;; "SELECT run_
c1e0: 69 64 2c 74 65 73 74 6e 61 6d 65 2c 69 74 65 6d id,testname,item
c1f0: 5f 70 61 74 68 2c 63 61 74 65 67 6f 72 79 2c 76 _path,category,v
c200: 61 72 69 61 62 6c 65 2c 74 64 2e 76 61 6c 75 65 ariable,td.value
c210: 20 41 53 20 76 61 6c 75 65 2c 65 78 70 65 63 74 AS value,expect
c220: 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 74 64 2e ed,tol,units,td.
c230: 73 74 61 74 75 73 20 41 53 20 73 74 61 74 75 73 status AS status
c240: 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 63 ,td.comment AS c
c250: 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 omment FROM test
c260: 5f 64 61 74 61 20 41 53 20 74 64 20 49 4e 4e 45 _data AS td INNE
c270: 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 R JOIN tests ON
c280: 74 65 73 74 73 2e 69 64 3d 74 64 2e 74 65 73 74 tests.id=td.test
c290: 5f 69 64 20 57 48 45 52 45 20 74 65 73 74 5f 69 _id WHERE test_i
c2a0: 64 3d 3f 3b 22 0a 09 20 20 22 53 45 4c 45 43 54 d=?;".. "SELECT
c2b0: 20 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 run_id,testname
c2c0: 2c 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 67 ,item_path,categ
c2d0: 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 2e ory,variable,td.
c2e0: 76 61 6c 75 65 20 41 53 20 76 61 6c 75 65 2c 74 value AS value,t
c2f0: 64 2e 65 78 70 65 63 74 65 64 2c 74 64 2e 74 6f d.expected,td.to
c300: 6c 2c 74 64 2e 75 6e 69 74 73 2c 74 64 2e 73 74 l,td.units,td.st
c310: 61 74 75 73 20 41 53 20 73 74 61 74 75 73 2c 74 atus AS status,t
c320: 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 63 6f 6d d.comment AS com
c330: 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 5f 64 ment FROM test_d
c340: 61 74 61 20 41 53 20 74 64 20 49 4e 4e 45 52 20 ata AS td INNER
c350: 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 74 65 JOIN tests ON te
c360: 73 74 73 2e 69 64 3d 74 64 2e 74 65 73 74 5f 69 sts.id=td.test_i
c370: 64 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 d WHERE testname
c380: 3d 3f 3b 22 0a 09 20 20 74 65 73 74 2d 69 64 29 =?;".. test-id)
c390: 0a 09 20 28 69 66 20 63 75 72 72 2d 74 65 73 74 .. (if curr-test
c3a0: 2d 6e 61 6d 65 0a 09 20 20 20 20 20 28 73 65 74 -name.. (set
c3b0: 21 20 72 65 73 75 6c 74 73 20 28 61 70 70 65 6e ! results (appen
c3c0: 64 20 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 d results (list
c3d0: 28 63 6f 6e 73 20 63 75 72 72 2d 74 65 73 74 2d (cons curr-test-
c3e0: 6e 61 6d 65 20 74 65 73 74 2d 64 61 74 61 29 29 name test-data))
c3f0: 29 29 29 0a 09 20 29 29 0a 20 20 20 20 20 28 73 ))).. )). (s
c400: 6f 72 74 20 28 64 65 6c 65 74 65 2d 64 75 70 6c ort (delete-dupl
c410: 69 63 61 74 65 73 20 74 65 73 74 2d 69 64 73 29 icates test-ids)
c420: 20 73 74 72 69 6e 67 3c 3d 29 29 0a 20 20 20 20 string<=)).
c430: 28 73 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 6d (system (conc "m
c440: 6b 64 69 72 20 2d 70 20 22 20 74 65 6d 70 64 69 kdir -p " tempdi
c450: 72 29 29 0a 20 20 20 20 3b 3b 20 28 70 70 20 72 r)). ;; (pp r
c460: 65 73 75 6c 74 73 29 0a 20 20 20 20 28 6f 64 73 esults). (ods
c470: 3a 6c 69 73 74 2d 3e 6f 64 73 20 0a 20 20 20 20 :list->ods .
c480: 20 74 65 6d 70 64 69 72 0a 20 20 20 20 20 28 69 tempdir. (i
c490: 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 f (string-match
c4a0: 28 72 65 67 65 78 70 20 22 5e 5b 2f 7e 5d 2b 2e (regexp "^[/~]+.
c4b0: 2a 22 29 20 6f 75 74 70 75 74 66 69 6c 65 29 20 *") outputfile)
c4c0: 3b 3b 20 66 75 6c 6c 20 70 61 74 68 3f 0a 09 20 ;; full path?..
c4d0: 6f 75 74 70 75 74 66 69 6c 65 0a 09 20 28 62 65 outputfile.. (be
c4e0: 67 69 6e 0a 09 20 20 20 28 64 65 62 75 67 3a 70 gin.. (debug:p
c4f0: 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 3a rint 0 "WARNING:
c500: 20 70 61 74 68 20 67 69 76 65 6e 2c 20 22 20 6f path given, " o
c510: 75 74 70 75 74 66 69 6c 65 20 22 20 69 73 20 72 utputfile " is r
c520: 65 6c 61 74 69 76 65 2c 20 70 72 65 66 69 78 69 elative, prefixi
c530: 6e 67 20 77 69 74 68 20 63 75 72 72 65 6e 74 20 ng with current
c540: 64 69 72 65 63 74 6f 72 79 22 29 0a 09 20 20 20 directory")..
c550: 28 63 6f 6e 63 20 28 63 75 72 72 65 6e 74 2d 64 (conc (current-d
c560: 69 72 65 63 74 6f 72 79 29 20 22 2f 22 20 6f 75 irectory) "/" ou
c570: 74 70 75 74 66 69 6c 65 29 29 29 0a 20 20 20 20 tputfile))).
c580: 20 72 65 73 75 6c 74 73 29 0a 20 20 20 20 3b 3b results). ;;
c590: 20 62 72 75 74 61 6c 20 63 6c 65 61 6e 20 75 70 brutal clean up
c5a0: 0a 20 20 20 20 28 73 79 73 74 65 6d 20 22 72 6d . (system "rm
c5b0: 20 2d 72 66 20 74 65 6d 70 64 69 72 22 29 29 29 -rf tempdir")))
c5c0: 0a 0a 3b 3b 20 28 64 62 3a 65 78 74 72 61 63 74 ..;; (db:extract
c5d0: 2d 6f 64 73 2d 66 69 6c 65 20 64 62 20 22 6f 75 -ods-file db "ou
c5e0: 74 70 75 74 66 69 6c 65 2e 6f 64 73 22 20 27 28 tputfile.ods" '(
c5f0: 28 22 73 79 73 6e 61 6d 65 22 20 22 25 22 29 28 ("sysname" "%")(
c600: 22 66 73 6e 61 6d 65 22 20 22 25 22 29 28 22 64 "fsname" "%")("d
c610: 61 74 61 70 61 74 68 22 20 22 25 22 29 29 20 22 atapath" "%")) "
c620: 25 22 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d %")...;;========
c630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c640: 3d 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 0a 3b ==============.;
c670: 3b 20 52 45 4d 4f 54 45 20 44 42 20 41 43 43 45 ; REMOTE DB ACCE
c680: 53 53 20 56 49 41 20 52 50 43 0a 3b 3b 3d 3d 3d SS VIA RPC.;;===
c690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c6a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c6b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c6c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c6d0: 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 ===..(define (rd
c6e0: 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 b:set-tests-stat
c6f0: 65 2d 73 74 61 74 75 73 20 64 62 20 72 75 6e 2d e-status db run-
c700: 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 id testnames cur
c710: 72 73 74 61 74 65 20 63 75 72 72 73 74 61 74 75 rstate currstatu
c720: 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 s newstate newst
c730: 61 74 75 73 29 0a 20 20 28 69 66 20 2a 72 75 6e atus). (if *run
c740: 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c remote*. (l
c750: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
c760: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
c770: 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 * 0)).. (port
c780: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
c790: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 nremote* 1)))..(
c7a0: 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 (rpc:procedure '
c7b0: 72 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 rdb:set-tests-st
c7c0: 61 74 65 2d 73 74 61 74 75 73 20 68 6f 73 74 20 ate-status host
c7d0: 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 74 port).. run-id t
c7e0: 65 73 74 6e 61 6d 65 73 20 63 75 72 72 73 74 61 estnames currsta
c7f0: 74 65 20 63 75 72 72 73 74 61 74 75 73 20 6e 65 te currstatus ne
c800: 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 wstate newstatus
c810: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 73 65 74 )). (db:set
c820: 2d 74 65 73 74 73 2d 73 74 61 74 65 2d 73 74 61 -tests-state-sta
c830: 74 75 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 tus db run-id te
c840: 73 74 6e 61 6d 65 73 20 63 75 72 72 73 74 61 74 stnames currstat
c850: 65 20 63 75 72 72 73 74 61 74 75 73 20 6e 65 77 e currstatus new
c860: 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 29 state newstatus)
c870: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 ))..(define (rdb
c880: 3a 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 :teststep-set-st
c890: 61 74 75 73 21 20 64 62 20 74 65 73 74 2d 69 64 atus! db test-id
c8a0: 20 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 teststep-name s
c8b0: 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 tate-in status-i
c8c0: 6e 20 69 74 65 6d 64 61 74 20 63 6f 6d 6d 65 6e n itemdat commen
c8d0: 74 20 6c 6f 67 66 69 6c 65 29 0a 20 20 28 6c 65 t logfile). (le
c8e0: 74 20 28 28 69 74 65 6d 2d 70 61 74 68 20 28 69 t ((item-path (i
c8f0: 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 tem-list->path i
c900: 74 65 6d 64 61 74 29 29 29 0a 20 20 20 20 28 69 temdat))). (i
c910: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 09 28 f *runremote*..(
c920: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 let ((host (vect
c930: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
c940: 65 2a 20 30 29 29 0a 09 20 20 20 20 20 20 28 70 e* 0)).. (p
c950: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
c960: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
c970: 0a 09 20 20 28 28 72 70 63 3a 70 72 6f 63 65 64 .. ((rpc:proced
c980: 75 72 65 20 27 72 64 62 3a 74 65 73 74 73 74 65 ure 'rdb:testste
c990: 70 2d 73 65 74 2d 73 74 61 74 75 73 21 20 68 6f p-set-status! ho
c9a0: 73 74 20 70 6f 72 74 29 0a 09 20 20 20 74 65 73 st port).. tes
c9b0: 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d 6e 61 t-id teststep-na
c9c0: 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 me state-in stat
c9d0: 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 us-in item-path
c9e0: 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 comment logfile)
c9f0: 29 0a 09 28 64 62 3a 74 65 73 74 73 74 65 70 2d )..(db:teststep-
ca00: 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 74 set-status! db t
ca10: 65 73 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d est-id teststep-
ca20: 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 name state-in st
ca30: 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 atus-in item-pat
ca40: 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c h comment logfil
ca50: 65 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 e))))..(define (
ca60: 72 64 62 3a 74 65 73 74 2d 75 70 64 61 74 65 2d rdb:test-update-
ca70: 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 72 75 6e meta-info db run
ca80: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
ca90: 65 6d 64 61 74 20 6d 69 6e 75 74 65 73 20 63 70 emdat minutes cp
caa0: 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 74 uload diskfree t
cab0: 6d 70 66 72 65 65 29 0a 20 20 28 6c 65 74 20 28 mpfree). (let (
cac0: 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65 6d (item-path (item
cad0: 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d -list->path item
cae0: 64 61 74 29 29 29 0a 20 20 20 20 28 69 66 20 2a dat))). (if *
caf0: 72 75 6e 72 65 6d 6f 74 65 2a 0a 09 28 6c 65 74 runremote*..(let
cb00: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
cb10: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
cb20: 30 29 29 0a 09 20 20 20 20 20 20 28 70 6f 72 74 0)).. (port
cb30: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
cb40: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 20 nremote* 1)))..
cb50: 20 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 ((rpc:procedure
cb60: 20 27 72 64 62 3a 74 65 73 74 2d 75 70 64 61 74 'rdb:test-updat
cb70: 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 68 6f 73 74 e-meta-info host
cb80: 20 70 6f 72 74 29 0a 09 20 20 20 72 75 6e 2d 69 port).. run-i
cb90: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
cba0: 2d 70 61 74 68 20 6d 69 6e 75 74 65 73 20 63 70 -path minutes cp
cbb0: 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 74 uload diskfree t
cbc0: 6d 70 66 72 65 65 29 29 0a 09 28 64 62 3a 74 65 mpfree))..(db:te
cbd0: 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d 69 st-update-meta-i
cbe0: 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 65 nfo db run-id te
cbf0: 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 st-name item-pat
cc00: 68 20 6d 69 6e 75 74 65 73 20 63 70 75 6c 6f 61 h minutes cpuloa
cc10: 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 66 72 d diskfree tmpfr
cc20: 65 65 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ee))))..(define
cc30: 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 (rdb:test-set-st
cc40: 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 ate-status-by-ru
cc50: 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 n-id-testname db
cc60: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
cc70: 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 e item-path stat
cc80: 75 73 20 73 74 61 74 65 29 0a 20 20 28 69 66 20 us state). (if
cc90: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
cca0: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
ccb0: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
ccc0: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
ccd0: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
cce0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
ccf0: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
cd00: 72 65 20 27 72 64 62 3a 74 65 73 74 2d 73 65 74 re 'rdb:test-set
cd10: 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 -state-status-by
cd20: 2d 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 -run-id-testname
cd30: 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 72 host port).. r
cd40: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
cd50: 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 item-path status
cd60: 20 73 74 61 74 65 29 29 0a 20 20 20 20 20 20 28 state)). (
cd70: 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 db:test-set-stat
cd80: 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d e-status-by-run-
cd90: 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 72 id-testname db r
cda0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
cdb0: 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 item-path status
cdc0: 20 73 74 61 74 65 29 29 29 0a 0a 28 64 65 66 69 state)))..(defi
cdd0: 6e 65 20 28 72 64 62 3a 63 73 76 2d 3e 74 65 73 ne (rdb:csv->tes
cde0: 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 t-data db test-i
cdf0: 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 69 66 d csvdata). (if
ce00: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
ce10: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
ce20: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
ce30: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
ce40: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
ce50: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
ce60: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
ce70: 75 72 65 20 27 72 64 62 3a 63 73 76 2d 3e 74 65 ure 'rdb:csv->te
ce80: 73 74 2d 64 61 74 61 20 68 6f 73 74 20 70 6f 72 st-data host por
ce90: 74 29 0a 09 20 74 65 73 74 2d 69 64 20 63 73 76 t).. test-id csv
cea0: 64 61 74 61 29 29 0a 20 20 20 20 20 20 28 64 62 data)). (db
ceb0: 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 :csv->test-data
cec0: 64 62 20 74 65 73 74 2d 69 64 20 63 73 76 64 61 db test-id csvda
ced0: 74 61 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ta)))..(define (
cee0: 72 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 rdb:roll-up-pass
cef0: 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 62 20 -fail-counts db
cf00: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
cf10: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
cf20: 73 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d s). (if *runrem
cf30: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
cf40: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
cf50: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
cf60: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
cf70: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
cf80: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
cf90: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
cfa0: 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 :roll-up-pass-fa
cfb0: 69 6c 2d 63 6f 75 6e 74 73 20 68 6f 73 74 20 70 il-counts host p
cfc0: 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 74 65 ort).. run-id te
cfd0: 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 st-name item-pat
cfe0: 68 20 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 h status)).
cff0: 20 28 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 (db:roll-up-pas
d000: 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 62 s-fail-counts db
d010: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d020: 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 e item-path stat
d030: 75 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 us)))..(define (
d040: 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d rdb:test-set-com
d050: 6d 65 6e 74 20 64 62 20 74 65 73 74 2d 69 64 20 ment db test-id
d060: 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 66 20 2a comment). (if *
d070: 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 runremote*.
d080: 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 (let ((host (ve
d090: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
d0a0: 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 ote* 0)).. (p
d0b0: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
d0c0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
d0d0: 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 ..((rpc:procedur
d0e0: 65 20 27 72 64 62 3a 74 65 73 74 2d 73 65 74 2d e 'rdb:test-set-
d0f0: 63 6f 6d 6d 65 6e 74 20 68 6f 73 74 20 70 6f 72 comment host por
d100: 74 29 0a 09 20 74 65 73 74 2d 69 64 20 63 6f 6d t).. test-id com
d110: 6d 65 6e 74 29 29 0a 20 20 20 20 20 20 28 64 62 ment)). (db
d120: 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e :test-set-commen
d130: 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 6f 6d t db test-id com
d140: 6d 65 6e 74 29 29 29 0a 0a 28 64 65 66 69 6e 65 ment)))..(define
d150: 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c (rdb:test-set-l
d160: 6f 67 21 20 64 62 20 74 65 73 74 2d 69 64 20 6c og! db test-id l
d170: 6f 67 66 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 ogf). (if *runr
d180: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
d190: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
d1a0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
d1b0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
d1c0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
d1d0: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
d1e0: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
d1f0: 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f 67 21 db:test-set-log!
d200: 20 68 6f 73 74 20 70 6f 72 74 29 20 74 65 73 74 host port) test
d210: 2d 69 64 20 6c 6f 67 66 29 29 0a 20 20 20 20 20 -id logf)).
d220: 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 6c 6f (db:test-set-lo
d230: 67 21 20 64 62 20 74 65 73 74 2d 69 64 20 6c 6f g! db test-id lo
d240: 67 66 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 gf)))..(define (
d250: 72 64 62 3a 67 65 74 2d 72 75 6e 73 20 64 62 20 rdb:get-runs db
d260: 72 75 6e 6e 61 6d 65 70 61 74 74 20 6e 75 6d 72 runnamepatt numr
d270: 75 6e 73 20 73 74 61 72 74 72 75 6e 6f 66 66 73 uns startrunoffs
d280: 65 74 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 et keypatts). (
d290: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
d2a0: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
d2b0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d2c0: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
d2d0: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
d2e0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d2f0: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
d300: 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 72 edure 'rdb:get-r
d310: 75 6e 73 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 uns host port)..
d320: 20 72 75 6e 6e 61 6d 65 70 61 74 74 20 6e 75 6d runnamepatt num
d330: 72 75 6e 73 20 73 74 61 72 74 72 75 6e 6f 66 66 runs startrunoff
d340: 73 65 74 20 6b 65 79 70 61 74 74 73 29 29 0a 20 set keypatts)).
d350: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 72 75 6e (db:get-run
d360: 73 20 64 62 20 72 75 6e 6e 61 6d 65 70 61 74 74 s db runnamepatt
d370: 20 6e 75 6d 72 75 6e 73 20 73 74 61 72 74 72 75 numruns startru
d380: 6e 6f 66 66 73 65 74 20 6b 65 79 70 61 74 74 73 noffset keypatts
d390: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
d3a0: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b:get-tests-for-
d3b0: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 run db run-id te
d3c0: 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 stpatt itempatt
d3d0: 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 29 states statuses)
d3e0: 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 . (if *runremot
d3f0: 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 e*. (let ((
d400: 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 host (vector-ref
d410: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 *runremote* 0))
d420: 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 .. (port (vec
d430: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
d440: 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a te* 1)))..((rpc:
d450: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 procedure 'rdb:g
d460: 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e et-tests-for-run
d470: 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 72 host port).. r
d480: 75 6e 2d 69 64 20 74 65 73 74 70 61 74 74 20 69 un-id testpatt i
d490: 74 65 6d 70 61 74 74 20 73 74 61 74 65 73 20 73 tempatt states s
d4a0: 74 61 74 75 73 65 73 29 29 0a 20 20 20 20 20 20 tatuses)).
d4b0: 28 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f (db:get-tests-fo
d4c0: 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 r-run db run-id
d4d0: 74 65 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 testpatt itempat
d4e0: 74 20 73 74 61 74 65 73 20 73 74 61 74 75 73 65 t states statuse
d4f0: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 s)))..(define (r
d500: 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 61 db:get-test-data
d510: 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 -by-id db test-i
d520: 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d d). (if *runrem
d530: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
d540: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
d550: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
d560: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
d570: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
d580: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
d590: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 70 63 c:procedure 'rpc
d5a0: 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 61 2d 62 :get-test-data-b
d5b0: 79 2d 69 64 20 68 6f 73 74 20 70 6f 72 74 29 0a y-id host port).
d5c0: 09 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 . test-id)).
d5d0: 20 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 (db:get-test-d
d5e0: 61 74 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 ata-by-id db tes
d5f0: 74 2d 69 64 29 29 29 0a 20 20 20 20 20 20 0a 28 t-id))). .(
d600: 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d define (rdb:get-
d610: 6b 65 79 73 20 64 62 29 0a 20 20 28 69 66 20 2a keys db). (if *
d620: 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 runremote*.
d630: 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 (let ((host (ve
d640: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
d650: 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 ote* 0)).. (p
d660: 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ort (vector-ref
d670: 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 *runremote* 1)))
d680: 0a 09 28 69 66 20 2a 64 62 2d 6b 65 79 73 2a 20 ..(if *db-keys*
d690: 2a 64 62 2d 6b 65 79 73 2a 20 0a 09 20 20 20 20 *db-keys* ..
d6a0: 28 6c 65 74 20 28 28 6b 65 79 73 20 28 28 72 70 (let ((keys ((rp
d6b0: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
d6c0: 3a 67 65 74 2d 6b 65 79 73 20 68 6f 73 74 20 70 :get-keys host p
d6d0: 6f 72 74 29 29 29 29 0a 09 20 20 20 20 20 20 28 ort)))).. (
d6e0: 73 65 74 21 20 2a 64 62 2d 6b 65 79 73 2a 20 6b set! *db-keys* k
d6f0: 65 79 73 29 0a 09 20 20 20 20 20 20 6b 65 79 73 eys).. keys
d700: 29 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 ))). (db:ge
d710: 74 2d 6b 65 79 73 20 64 62 29 29 29 0a 09 20 0a t-keys db))).. .
d720: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 (define (rdb:get
d730: 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 75 6e -num-runs db run
d740: 70 61 74 74 29 0a 20 20 28 69 66 20 2a 72 75 6e patt). (if *run
d750: 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c remote*. (l
d760: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
d770: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
d780: 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 * 0)).. (port
d790: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d7a0: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 nremote* 1)))..(
d7b0: 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 (rpc:procedure '
d7c0: 72 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 rdb:get-num-runs
d7d0: 20 68 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 70 host port) runp
d7e0: 61 74 74 29 29 0a 20 20 20 20 20 20 28 64 62 3a att)). (db:
d7f0: 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 get-num-runs db
d800: 72 75 6e 70 61 74 74 29 29 29 0a 0a 28 64 65 66 runpatt)))..(def
d810: 69 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 ine (rdb:test-se
d820: 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 t-state-status-b
d830: 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 y-id db test-id
d840: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
d850: 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 us newcomment).
d860: 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 (if *runremot
d870: 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 e*. (let ((
d880: 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 host (vector-ref
d890: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 *runremote* 0))
d8a0: 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 .. (port (vec
d8b0: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
d8c0: 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a te* 1)))..((rpc:
d8d0: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 74 procedure 'rdb:t
d8e0: 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 est-set-state-st
d8f0: 61 74 75 73 2d 62 79 2d 69 64 20 68 6f 73 74 20 atus-by-id host
d900: 70 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 port).. test-id
d910: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
d920: 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 0a us newcomment)).
d930: 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 73 (db:test-s
d940: 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d et-state-status-
d950: 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 by-id db test-id
d960: 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 newstate newsta
d970: 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 tus newcomment))
d980: 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a )..(define (rdb:
d990: 67 65 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 get-key-val-pair
d9a0: 73 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 s db run-id). (
d9b0: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
d9c0: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
d9d0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d9e0: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
d9f0: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
da00: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
da10: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
da20: 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 6b edure 'rdb:get-k
da30: 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 68 6f 73 ey-val-pairs hos
da40: 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 t port) run-id))
da50: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 6b . (db:get-k
da60: 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 64 62 20 ey-val-pairs db
da70: 72 75 6e 2d 69 64 29 29 29 0a 09 20 0a 28 64 65 run-id))).. .(de
da80: 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 6b 65 fine (rdb:get-ke
da90: 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 y-vals db run-id
daa0: 29 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 ). (if *runre
dab0: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
dac0: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
dad0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
dae0: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
daf0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
db00: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
db10: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
db20: 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20 68 b:get-key-vals h
db30: 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 ost port) run-id
db40: 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 )). (db:get
db50: 2d 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e -key-vals db run
db60: 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 -id)))..(define
db70: 28 72 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 (rdb:testmeta-ge
db80: 74 2d 72 65 63 6f 72 64 20 64 62 20 74 65 73 74 t-record db test
db90: 6e 61 6d 65 29 0a 20 20 20 28 69 66 20 2a 72 75 name). (if *ru
dba0: 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 nremote*. (
dbb0: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 let ((host (vect
dbc0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
dbd0: 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 e* 0)).. (por
dbe0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
dbf0: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 unremote* 1)))..
dc00: 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 ((rpc:procedure
dc10: 27 72 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 'rdb:testmeta-ge
dc20: 74 2d 72 65 63 6f 72 64 20 68 6f 73 74 20 70 6f t-record host po
dc30: 72 74 29 20 74 65 73 74 6e 61 6d 65 29 29 0a 20 rt) testname)).
dc40: 20 20 20 20 20 28 64 62 3a 74 65 73 74 6d 65 74 (db:testmet
dc50: 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 a-get-record db
dc60: 74 65 73 74 6e 61 6d 65 29 29 29 0a 0a 28 64 65 testname)))..(de
dc70: 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 74 65 fine (rdb:get-te
dc80: 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 st-data-by-id db
dc90: 20 74 65 73 74 2d 69 64 29 0a 20 20 28 69 66 20 test-id). (if
dca0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
dcb0: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
dcc0: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
dcd0: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
dce0: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
dcf0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
dd00: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
dd10: 72 65 20 27 72 64 62 3a 67 65 74 2d 74 65 73 74 re 'rdb:get-test
dd20: 2d 64 61 74 61 2d 62 79 2d 69 64 20 68 6f 73 74 -data-by-id host
dd30: 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 port) test-id))
dd40: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 . (db:get-t
dd50: 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 est-data-by-id d
dd60: 62 20 74 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 b test-id)))..(d
dd70: 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 72 efine (rdb:get-r
dd80: 75 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 un-info db run-i
dd90: 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d d). (if *runrem
dda0: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
ddb0: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
ddc0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
ddd0: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
dde0: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
ddf0: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
de00: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
de10: 3a 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 68 6f :get-run-info ho
de20: 73 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 st port) run-id)
de30: 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d ). (db:get-
de40: 72 75 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d run-info db run-
de50: 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 id)))..(define (
de60: 72 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f rdb:get-steps-fo
de70: 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 r-test db test-i
de80: 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d d). (if *runrem
de90: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
dea0: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
deb0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
dec0: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
ded0: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
dee0: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
def0: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
df00: 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 :get-steps-for-t
df10: 65 73 74 20 68 6f 73 74 20 70 6f 72 74 29 20 74 est host port) t
df20: 65 73 74 2d 69 64 29 29 0a 20 20 20 20 20 20 28 est-id)). (
df30: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 db:get-steps-for
df40: 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 -test db test-id
df50: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
df60: 62 3a 67 65 74 2d 73 74 65 70 73 2d 74 61 62 6c b:get-steps-tabl
df70: 65 20 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 e db test-id).
df80: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
df90: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
dfa0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
dfb0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
dfc0: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
dfd0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
dfe0: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
dff0: 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d cedure 'rdb:get-
e000: 73 74 65 70 73 2d 74 61 62 6c 65 20 68 6f 73 74 steps-table host
e010: 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 port) test-id))
e020: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 73 . (db:get-s
e030: 74 65 70 73 2d 74 61 62 6c 65 20 64 62 20 74 65 teps-table db te
e040: 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e st-id)))..(defin
e050: 65 20 28 72 64 62 3a 72 65 61 64 2d 74 65 73 74 e (rdb:read-test
e060: 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 -data db test-id
e070: 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 categorypatt).
e080: 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a (if *runremote*
e090: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f . (let ((ho
e0a0: 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a st (vector-ref *
e0b0: 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 runremote* 0))..
e0c0: 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f (port (vecto
e0d0: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
e0e0: 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 * 1)))..((rpc:pr
e0f0: 6f 63 65 64 75 72 65 20 27 72 64 62 3a 72 65 61 ocedure 'rdb:rea
e100: 64 2d 74 65 73 74 2d 64 61 74 61 20 68 6f 73 74 d-test-data host
e110: 20 70 6f 72 74 29 20 74 65 73 74 2d 69 64 20 63 port) test-id c
e120: 61 74 65 67 6f 72 79 70 61 74 74 29 29 0a 20 20 ategorypatt)).
e130: 20 20 20 20 28 64 62 3a 72 65 61 64 2d 74 65 73 (db:read-tes
e140: 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 t-data db test-i
e150: 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 29 d categorypatt))
e160: 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a )..(define (rdb:
e170: 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 get-test-info db
e180: 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 run-id testname
e190: 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69 item-path). (i
e1a0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
e1b0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
e1c0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e1d0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
e1e0: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
e1f0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
e200: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
e210: 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 74 65 dure 'rdb:get-te
e220: 73 74 2d 69 6e 66 6f 20 68 6f 73 74 20 70 6f 72 st-info host por
e230: 74 29 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 t) run-id testna
e240: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 20 me item-path)).
e250: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 (db:get-tes
e260: 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 t-info db run-id
e270: 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 testname item-p
e280: 61 74 68 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ath)))..(define
e290: 28 72 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 (rdb:delete-test
e2a0: 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 -records db test
e2b0: 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 -id). (if *runr
e2c0: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
e2d0: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
e2e0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
e2f0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
e300: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e310: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
e320: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
e330: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 db:delete-test-r
e340: 65 63 6f 72 64 73 20 68 6f 73 74 20 70 6f 72 74 ecords host port
e350: 29 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 ) test-id)).
e360: 20 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 (db:delete-tes
e370: 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 t-records db tes
e380: 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 t-id)))..(define
e390: 20 28 72 64 62 3a 74 65 73 74 2d 64 61 74 61 2d (rdb:test-data-
e3a0: 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 rollup db test-i
e3b0: 64 20 73 74 61 74 75 73 29 0a 20 20 20 20 28 69 d status). (i
e3c0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
e3d0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
e3e0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e3f0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
e400: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
e410: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
e420: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
e430: 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 64 dure 'rdb:test-d
e440: 61 74 61 2d 72 6f 6c 6c 75 70 20 68 6f 73 74 20 ata-rollup host
e450: 70 6f 72 74 29 20 74 65 73 74 2d 69 64 20 73 74 port) test-id st
e460: 61 74 75 73 29 29 0a 20 20 20 20 20 20 28 64 62 atus)). (db
e470: 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 :test-data-rollu
e480: 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 61 p db test-id sta
e490: 74 75 73 29 29 29 0a tus))).