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 33 36 30 30 30 29 29 29 0a 20 20 20 out 36000))).
05f0: 20 28 73 71 6c 69 74 65 33 3a 73 65 74 2d 62 75 (sqlite3:set-bu
0600: 73 79 2d 68 61 6e 64 6c 65 72 21 20 64 62 20 68 sy-handler! db h
0610: 61 6e 64 6c 65 72 29 0a 20 20 20 20 28 69 66 20 andler). (if
0620: 28 6e 6f 74 20 64 62 65 78 69 73 74 73 29 0a 09 (not dbexists)..
0630: 28 64 62 3a 69 6e 69 74 69 61 6c 69 7a 65 20 64 (db:initialize d
0640: 62 29 29 0a 20 20 20 20 64 62 29 29 0a 0a 28 64 b)). db))..(d
0650: 65 66 69 6e 65 20 28 64 62 3a 69 6e 69 74 69 61 efine (db:initia
0660: 6c 69 7a 65 20 64 62 29 0a 20 20 28 6c 65 74 2a lize db). (let*
0670: 20 28 28 63 6f 6e 66 69 67 64 61 74 20 28 63 61 ((configdat (ca
0680: 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 r *configinfo*))
0690: 20 20 3b 3b 20 74 75 74 20 74 75 74 2c 20 67 6c ;; tut tut, gl
06a0: 6f 62 61 6c 20 77 61 72 6e 69 6e 67 2e 2e 2e 0a obal warning....
06b0: 09 20 28 6b 65 79 73 20 20 20 20 20 28 63 6f 6e . (keys (con
06c0: 66 69 67 2d 67 65 74 2d 66 69 65 6c 64 73 20 63 fig-get-fields c
06d0: 6f 6e 66 69 67 64 61 74 29 29 0a 09 20 28 68 61 onfigdat)).. (ha
06e0: 76 65 6b 65 79 73 20 28 3e 20 28 6c 65 6e 67 74 vekeys (> (lengt
06f0: 68 20 6b 65 79 73 29 20 30 29 29 0a 09 20 28 6b h keys) 0)).. (k
0700: 65 79 73 74 72 20 20 20 28 6b 65 79 73 2d 3e 6b eystr (keys->k
0710: 65 79 73 74 72 20 6b 65 79 73 29 29 0a 09 20 28 eystr keys)).. (
0720: 66 69 65 6c 64 73 74 72 20 28 6b 65 79 73 2d 3e fieldstr (keys->
0730: 6b 65 79 2f 66 69 65 6c 64 20 6b 65 79 73 29 29 key/field keys))
0740: 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 ). (for-each
0750: 28 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a 09 09 (lambda (key)...
0760: 28 6c 65 74 20 28 28 6b 65 79 6e 20 28 76 65 63 (let ((keyn (vec
0770: 74 6f 72 2d 72 65 66 20 6b 65 79 20 30 29 29 29 tor-ref key 0)))
0780: 0a 09 09 20 20 28 69 66 20 28 6d 65 6d 62 65 72 ... (if (member
0790: 20 28 73 74 72 69 6e 67 2d 64 6f 77 6e 63 61 73 (string-downcas
07a0: 65 20 6b 65 79 6e 29 0a 09 09 09 20 20 20 20 20 e keyn)....
07b0: 20 28 6c 69 73 74 20 22 72 75 6e 6e 61 6d 65 22 (list "runname"
07c0: 20 22 73 74 61 74 65 22 20 22 73 74 61 74 75 73 "state" "status
07d0: 22 20 22 6f 77 6e 65 72 22 20 22 65 76 65 6e 74 " "owner" "event
07e0: 5f 74 69 6d 65 22 20 22 63 6f 6d 6d 65 6e 74 22 _time" "comment"
07f0: 20 22 66 61 69 6c 5f 63 6f 75 6e 74 22 0a 09 09 "fail_count"...
0800: 09 09 20 20 20 20 22 70 61 73 73 5f 63 6f 75 6e .. "pass_coun
0810: 74 22 29 29 0a 09 09 20 20 20 20 20 20 28 62 65 t"))... (be
0820: 67 69 6e 0a 09 09 09 28 70 72 69 6e 74 20 22 45 gin....(print "E
0830: 52 52 4f 52 3a 20 79 6f 75 72 20 6b 65 79 20 63 RROR: your key c
0840: 61 6e 6e 6f 74 20 62 65 20 6e 61 6d 65 64 20 22 annot be named "
0850: 20 6b 65 79 6e 20 22 20 61 73 20 74 68 69 73 20 keyn " as this
0860: 63 6f 6e 66 6c 69 63 74 73 20 77 69 74 68 20 74 conflicts with t
0870: 68 65 20 73 61 6d 65 20 6e 61 6d 65 64 20 66 69 he same named fi
0880: 65 6c 64 20 69 6e 20 74 68 65 20 72 75 6e 73 20 eld in the runs
0890: 74 61 62 6c 65 22 29 0a 09 09 09 28 73 79 73 74 table")....(syst
08a0: 65 6d 20 28 63 6f 6e 63 20 22 72 6d 20 2d 66 20 em (conc "rm -f
08b0: 22 20 64 62 70 61 74 68 29 29 0a 09 09 09 28 65 " dbpath))....(e
08c0: 78 69 74 20 31 29 29 29 29 29 0a 09 20 20 20 20 xit 1)))))..
08d0: 20 20 6b 65 79 73 29 0a 20 20 20 20 3b 3b 20 28 keys). ;; (
08e0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
08f0: 64 62 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 db "PRAGMA synch
0900: 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 22 29 0a ronous = OFF;").
0910: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
0920: 63 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 cute db "CREATE
0930: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 TABLE IF NOT EXI
0940: 53 54 53 20 6b 65 79 73 20 28 69 64 20 49 4e 54 STS keys (id INT
0950: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 EGER PRIMARY KEY
0960: 2c 20 66 69 65 6c 64 6e 61 6d 65 20 54 45 58 54 , fieldname TEXT
0970: 2c 20 66 69 65 6c 64 74 79 70 65 20 54 45 58 54 , fieldtype TEXT
0980: 2c 20 43 4f 4e 53 54 52 41 49 4e 54 20 6b 65 79 , CONSTRAINT key
0990: 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 constraint UNIQU
09a0: 45 20 28 66 69 65 6c 64 6e 61 6d 65 29 29 3b 22 E (fieldname));"
09b0: 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 ). (for-each
09c0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a 09 09 (lambda (key)...
09d0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
09e0: 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f db "INSERT INTO
09f0: 20 6b 65 79 73 20 28 66 69 65 6c 64 6e 61 6d 65 keys (fieldname
0a00: 2c 66 69 65 6c 64 74 79 70 65 29 20 56 41 4c 55 ,fieldtype) VALU
0a10: 45 53 20 28 3f 2c 3f 29 3b 22 20 28 6b 65 79 3a ES (?,?);" (key:
0a20: 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 get-fieldname ke
0a30: 79 29 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 y)(key:get-field
0a40: 74 79 70 65 20 6b 65 79 29 29 29 0a 09 20 20 20 type key)))..
0a50: 20 20 20 6b 65 79 73 29 0a 20 20 20 20 28 73 71 keys). (sq
0a60: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
0a70: 20 28 63 6f 6e 63 20 0a 09 09 09 20 22 43 52 45 (conc .... "CRE
0a80: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 ATE TABLE IF NOT
0a90: 20 45 58 49 53 54 53 20 72 75 6e 73 20 28 69 64 EXISTS runs (id
0aa0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
0ab0: 20 4b 45 59 2c 20 22 20 0a 09 09 09 20 66 69 65 KEY, " .... fie
0ac0: 6c 64 73 74 72 20 28 69 66 20 68 61 76 65 6b 65 ldstr (if haveke
0ad0: 79 73 20 22 2c 22 20 22 22 29 0a 09 09 09 20 22 ys "," "").... "
0ae0: 72 75 6e 6e 61 6d 65 20 54 45 58 54 2c 22 0a 09 runname TEXT,"..
0af0: 09 09 20 22 73 74 61 74 65 20 54 45 58 54 20 44 .. "state TEXT D
0b00: 45 46 41 55 4c 54 20 27 27 2c 22 0a 09 09 09 20 EFAULT '',"....
0b10: 22 73 74 61 74 75 73 20 54 45 58 54 20 44 45 46 "status TEXT DEF
0b20: 41 55 4c 54 20 27 27 2c 22 0a 09 09 09 20 22 6f AULT '',".... "o
0b30: 77 6e 65 72 20 54 45 58 54 20 44 45 46 41 55 4c wner TEXT DEFAUL
0b40: 54 20 27 27 2c 22 0a 09 09 09 20 22 65 76 65 6e T '',".... "even
0b50: 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 t_time TIMESTAMP
0b60: 2c 22 0a 09 09 09 20 22 63 6f 6d 6d 65 6e 74 20 ,".... "comment
0b70: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
0b80: 22 0a 09 09 09 20 22 66 61 69 6c 5f 63 6f 75 6e ".... "fail_coun
0b90: 74 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c t INTEGER DEFAUL
0ba0: 54 20 30 2c 22 0a 09 09 09 20 22 70 61 73 73 5f T 0,".... "pass_
0bb0: 63 6f 75 6e 74 20 49 4e 54 45 47 45 52 20 44 45 count INTEGER DE
0bc0: 46 41 55 4c 54 20 30 2c 22 0a 09 09 09 20 22 43 FAULT 0,".... "C
0bd0: 4f 4e 53 54 52 41 49 4e 54 20 72 75 6e 73 63 6f ONSTRAINT runsco
0be0: 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 nstraint UNIQUE
0bf0: 28 72 75 6e 6e 61 6d 65 22 20 28 69 66 20 68 61 (runname" (if ha
0c00: 76 65 6b 65 79 73 20 22 2c 22 20 22 22 29 20 6b vekeys "," "") k
0c10: 65 79 73 74 72 20 22 29 29 3b 22 29 29 0a 20 20 eystr "));")).
0c20: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
0c30: 74 65 20 64 62 20 28 63 6f 6e 63 20 22 43 52 45 te db (conc "CRE
0c40: 41 54 45 20 49 4e 44 45 58 20 72 75 6e 73 5f 69 ATE INDEX runs_i
0c50: 6e 64 65 78 20 4f 4e 20 72 75 6e 73 20 28 72 75 ndex ON runs (ru
0c60: 6e 6e 61 6d 65 22 20 28 69 66 20 68 61 76 65 6b nname" (if havek
0c70: 65 79 73 20 22 2c 22 20 22 22 29 20 6b 65 79 73 eys "," "") keys
0c80: 74 72 20 22 29 3b 22 29 29 0a 20 20 20 20 28 73 tr ");")). (s
0c90: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
0ca0: 62 20 0a 09 09 20 20 20 20 20 22 43 52 45 41 54 b ... "CREAT
0cb0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
0cc0: 58 49 53 54 53 20 74 65 73 74 73 20 0a 20 20 20 XISTS tests .
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ce0: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
0cf0: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 MARY KEY,.
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
0d10: 75 6e 5f 69 64 20 20 20 20 20 49 4e 54 45 47 45 un_id INTEGE
0d20: 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 R,.
0d30: 20 20 20 20 20 20 20 20 74 65 73 74 6e 61 6d 65 testname
0d40: 20 20 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 TEXT,.
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f ho
0d60: 73 74 20 20 20 20 20 20 20 54 45 58 54 20 44 45 st TEXT DE
0d70: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d90: 20 20 63 70 75 6c 6f 61 64 20 20 20 20 52 45 41 cpuload REA
0da0: 4c 20 44 45 46 41 55 4c 54 20 2d 31 2c 0a 20 20 L DEFAULT -1,.
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0dc0: 20 20 20 64 69 73 6b 66 72 65 65 20 20 20 49 4e diskfree IN
0dd0: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 2d 31 TEGER DEFAULT -1
0de0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0df0: 20 20 20 20 20 20 20 75 6e 61 6d 65 20 20 20 20 uname
0e00: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
0e10: 6e 2f 61 27 2c 20 0a 20 20 20 20 20 20 20 20 20 n/a', .
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 64 rund
0e30: 69 72 20 20 20 20 20 54 45 58 54 20 44 45 46 41 ir TEXT DEFA
0e40: 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 ULT 'n/a',.
0e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e60: 73 68 6f 72 74 64 69 72 20 20 20 54 45 58 54 20 shortdir TEXT
0e70: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e90: 20 69 74 65 6d 5f 70 61 74 68 20 20 54 45 58 54 item_path TEXT
0ea0: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ec0: 20 20 73 74 61 74 65 20 20 20 20 20 20 54 45 58 state TEX
0ed0: 54 20 44 45 46 41 55 4c 54 20 27 4e 4f 54 5f 53 T DEFAULT 'NOT_S
0ee0: 54 41 52 54 45 44 27 2c 0a 20 20 20 20 20 20 20 TARTED',.
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
0f00: 61 74 75 73 20 20 20 20 20 54 45 58 54 20 44 45 atus TEXT DE
0f10: 46 41 55 4c 54 20 27 46 41 49 4c 27 2c 0a 20 20 FAULT 'FAIL',.
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0f30: 20 20 20 61 74 74 65 6d 70 74 6e 75 6d 20 49 4e attemptnum IN
0f40: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c TEGER DEFAULT 0,
0f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0f60: 20 20 20 20 20 20 66 69 6e 61 6c 5f 6c 6f 67 66 final_logf
0f70: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6c TEXT DEFAULT 'l
0f80: 6f 67 73 2f 66 69 6e 61 6c 2e 6c 6f 67 27 2c 0a ogs/final.log',.
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0fa0: 20 20 20 20 20 6c 6f 67 64 61 74 20 20 20 20 20 logdat
0fb0: 42 4c 4f 42 2c 20 0a 20 20 20 20 20 20 20 20 20 BLOB, .
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f run_
0fd0: 64 75 72 61 74 69 6f 6e 20 49 4e 54 45 47 45 52 duration INTEGER
0fe0: 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20 DEFAULT 0,.
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1000: 20 63 6f 6d 6d 65 6e 74 20 20 20 20 54 45 58 54 comment TEXT
1010: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1030: 20 20 65 76 65 6e 74 5f 74 69 6d 65 20 54 49 4d event_time TIM
1040: 45 53 54 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 ESTAMP,.
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 fai
1060: 6c 5f 63 6f 75 6e 74 20 49 4e 54 45 47 45 52 20 l_count INTEGER
1070: 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20 20 DEFAULT 0,.
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1090: 70 61 73 73 5f 63 6f 75 6e 74 20 49 4e 54 45 47 pass_count INTEG
10a0: 45 52 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 ER DEFAULT 0,.
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c0: 20 20 20 61 72 63 68 69 76 65 64 20 20 20 49 4e archived IN
10d0: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c TEGER DEFAULT 0,
10e0: 20 2d 2d 20 30 3d 6e 6f 2c 20 31 3d 69 6e 20 70 -- 0=no, 1=in p
10f0: 72 6f 67 72 65 73 73 2c 20 32 3d 79 65 73 0a 20 rogress, 2=yes.
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1110: 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 CONSTRAINT t
1120: 65 73 74 73 63 6f 6e 73 74 72 61 69 6e 74 20 55 estsconstraint U
1130: 4e 49 51 55 45 20 28 72 75 6e 5f 69 64 2c 20 74 NIQUE (run_id, t
1140: 65 73 74 6e 61 6d 65 2c 20 69 74 65 6d 5f 70 61 estname, item_pa
1150: 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b th). );
1160: 22 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a "). (sqlite3:
1170: 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 execute db "CREA
1180: 54 45 20 49 4e 44 45 58 20 74 65 73 74 73 5f 69 TE INDEX tests_i
1190: 6e 64 65 78 20 4f 4e 20 74 65 73 74 73 20 28 72 ndex ON tests (r
11a0: 75 6e 5f 69 64 2c 20 74 65 73 74 6e 61 6d 65 29 un_id, testname)
11b0: 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 ;"). (sqlite3
11c0: 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 :execute db "CRE
11d0: 41 54 45 20 56 49 45 57 20 72 75 6e 73 5f 74 65 ATE VIEW runs_te
11e0: 73 74 73 20 41 53 20 53 45 4c 45 43 54 20 2a 20 sts AS SELECT *
11f0: 46 52 4f 4d 20 72 75 6e 73 20 49 4e 4e 45 52 20 FROM runs INNER
1200: 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 72 75 JOIN tests ON ru
1210: 6e 73 2e 69 64 3d 74 65 73 74 73 2e 72 75 6e 5f ns.id=tests.run_
1220: 69 64 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 74 id;"). (sqlit
1230: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1240: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e REATE TABLE IF N
1250: 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 5f 73 OT EXISTS test_s
1260: 74 65 70 73 20 0a 20 20 20 20 20 20 20 20 20 20 teps .
1270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1280: 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 52 20 (id INTEGER
1290: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 PRIMARY KEY,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test
12c0: 5f 69 64 20 49 4e 54 45 47 45 52 2c 20 0a 20 20 _id INTEGER, .
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 65 ste
12f0: 70 6e 61 6d 65 20 54 45 58 54 2c 20 0a 20 20 20 pname TEXT, .
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1310: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 stat
1320: 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 e TEXT DEFAULT '
1330: 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 20 0a 20 NOT_STARTED', .
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
1360: 61 74 75 73 20 54 45 58 54 20 44 45 46 41 55 4c atus TEXT DEFAUL
1370: 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 20 20 T 'n/a',.
1380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1390: 20 20 20 20 20 20 20 20 65 76 65 6e 74 5f 74 69 event_ti
13a0: 6d 65 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 me TIMESTAMP,.
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d com
13d0: 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 55 4c ment TEXT DEFAUL
13e0: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1400: 20 20 20 20 20 6c 6f 67 66 69 6c 65 20 54 45 58 logfile TEX
1410: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e CON
1440: 53 54 52 41 49 4e 54 20 74 65 73 74 5f 73 74 65 STRAINT test_ste
1450: 70 73 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e ps_constraint UN
1460: 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 73 74 IQUE (test_id,st
1470: 65 70 6e 61 6d 65 2c 73 74 61 74 65 29 29 3b 22 epname,state));"
1480: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ). (sqlite3:e
1490: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
14a0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
14b0: 58 49 53 54 53 20 65 78 74 72 61 64 61 74 20 28 XISTS extradat (
14c0: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
14d0: 52 59 20 4b 45 59 2c 20 72 75 6e 5f 69 64 20 49 RY KEY, run_id I
14e0: 4e 54 45 47 45 52 2c 20 6b 65 79 20 54 45 58 54 NTEGER, key TEXT
14f0: 2c 20 76 61 6c 20 54 45 58 54 29 3b 22 29 0a 20 , val TEXT);").
1500: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
1510: 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 ute db "CREATE T
1520: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
1530: 54 53 20 6d 65 74 61 64 61 74 20 28 69 64 20 49 TS metadat (id I
1540: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K
1550: 45 59 2c 20 76 61 72 20 54 45 58 54 2c 20 76 61 EY, var TEXT, va
1560: 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 l TEXT,.
1570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1580: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 CONSTR
1590: 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e AINT metadat_con
15a0: 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 straint UNIQUE (
15b0: 76 61 72 29 29 3b 22 29 0a 20 20 20 20 28 73 71 var));"). (sq
15c0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
15d0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
15e0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61 63 63 F NOT EXISTS acc
15f0: 65 73 73 5f 6c 6f 67 20 28 69 64 20 49 4e 54 45 ess_log (id INTE
1600: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
1610: 20 75 73 65 72 20 54 45 58 54 2c 20 61 63 63 65 user TEXT, acce
1620: 73 73 65 64 20 54 49 4d 45 53 54 41 4d 50 2c 20 ssed TIMESTAMP,
1630: 61 72 67 73 20 54 45 58 54 29 3b 22 29 0a 20 20 args TEXT);").
1640: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
1650: 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 te db "CREATE TA
1660: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 BLE IF NOT EXIST
1670: 53 20 74 65 73 74 5f 6d 65 74 61 20 28 69 64 20 S test_meta (id
1680: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
1690: 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 KEY,.
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b0: 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6e 61 testna
16c0: 6d 65 20 20 20 20 54 45 58 54 20 44 45 46 41 55 me TEXT DEFAU
16d0: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 auth
1700: 6f 72 20 20 20 20 20 20 54 45 58 54 20 44 45 46 or TEXT DEF
1710: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 77 ow
1740: 6e 65 72 20 20 20 20 20 20 20 54 45 58 54 20 44 ner TEXT D
1750: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 EFAULT '',.
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1780: 64 65 73 63 72 69 70 74 69 6f 6e 20 54 45 58 54 description TEXT
1790: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c0: 20 20 72 65 76 69 65 77 65 64 20 20 20 20 54 49 reviewed TI
17d0: 4d 45 53 54 41 4d 50 2c 0a 20 20 20 20 20 20 20 MESTAMP,.
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 it
1800: 65 72 61 74 65 64 20 20 20 20 54 45 58 54 20 44 erated TEXT D
1810: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 EFAULT '',.
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 20 20 20 20 20
1840: 61 76 67 5f 72 75 6e 74 69 6d 65 20 52 45 41 4c avg_runtime REAL
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 61 76 67 5f 64 69 73 6b 20 avg_disk
1880: 20 20 20 52 45 41 4c 2c 0a 20 20 20 20 20 20 20 REAL,.
1890: 20 20 20 20 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 74 61 ta
18b0: 67 73 20 20 20 20 20 20 20 20 54 45 58 54 20 44 gs TEXT D
18c0: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 EFAULT '',.
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: 6a 6f 62 67 72 6f 75 70 20 20 20 20 54 45 58 54 jobgroup TEXT
1900: 20 44 45 46 41 55 4c 54 20 27 64 65 66 61 75 6c DEFAULT 'defaul
1910: 74 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 t',.
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1930: 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 CONSTRAINT t
1940: 65 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 74 72 61 est_meta_constra
1950: 69 6e 74 20 55 4e 49 51 55 45 20 28 74 65 73 74 int UNIQUE (test
1960: 6e 61 6d 65 29 29 3b 22 29 0a 20 20 20 20 28 73 name));"). (s
1970: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
1980: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 b "CREATE TABLE
1990: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 IF NOT EXISTS te
19a0: 73 74 5f 64 61 74 61 20 28 69 64 20 49 4e 54 45 st_data (id INTE
19b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
19c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e0: 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 45 52 test_id INTEGER
19f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a10: 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 54 20 category TEXT
1a20: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 69 vari
1a50: 61 62 6c 65 20 54 45 58 54 2c 0a 09 20 20 20 20 able TEXT,..
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a70: 20 20 20 20 76 61 6c 75 65 20 52 45 41 4c 2c 0a value REAL,.
1a80: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1a90: 20 20 20 20 20 20 20 20 20 65 78 70 65 63 74 65 expecte
1aa0: 64 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 20 20 d REAL,..
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ac0: 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 20 20 20 20 tol REAL,.
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae0: 20 20 20 20 20 20 20 20 20 20 20 75 6e 69 74 73 units
1af0: 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 TEXT,.
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b10: 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 20 54 comment T
1b20: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b50: 73 74 61 74 75 73 20 54 45 58 54 20 44 45 46 41 status TEXT DEFA
1b60: 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 ULT 'n/a',.
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 74 79 70 65 20 type
1b90: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
1ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
1bc0: 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 64 ONSTRAINT test_d
1bd0: 61 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 ata_constraint U
1be0: 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 63 NIQUE (test_id,c
1bf0: 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 ategory,variable
1c00: 29 29 3b 22 29 0a 20 20 20 20 3b 3b 20 4d 75 73 ));"). ;; Mus
1c10: 74 20 64 6f 20 74 68 69 73 20 2a 61 66 74 65 72 t do this *after
1c20: 2a 20 72 75 6e 6e 69 6e 67 20 70 61 74 63 68 20 * running patch
1c30: 64 62 20 21 21 20 4e 6f 20 6d 6f 72 65 2e 20 0a db !! No more. .
1c40: 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 (db:set-var
1c50: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
1c60: 53 49 4f 4e 22 20 6d 65 67 61 74 65 73 74 2d 76 SION" megatest-v
1c70: 65 72 73 69 6f 6e 29 0a 20 20 20 20 29 29 0a 0a ersion). ))..
1c80: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
1c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1cb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1cc0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 4f 44 4f ========.;; TODO
1cd0: 3a 0a 3b 3b 20 20 20 70 75 74 20 64 65 6c 74 61 :.;; put delta
1ce0: 73 20 69 6e 74 6f 20 61 6e 20 61 73 73 6f 63 20 s into an assoc
1cf0: 6c 69 73 74 20 77 69 74 68 20 76 65 72 73 69 6f list with versio
1d00: 6e 20 6e 75 6d 62 65 72 73 0a 3b 3b 20 20 20 61 n numbers.;; a
1d10: 70 70 6c 79 20 61 6c 6c 20 66 72 6f 6d 20 6c 61 pply all from la
1d20: 73 74 20 74 6f 20 63 75 72 72 65 6e 74 0a 3b 3b st to current.;;
1d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d70: 3d 3d 3d 3d 3d 3d 0a 28 64 65 66 69 6e 65 20 28 ======.(define (
1d80: 70 61 74 63 68 2d 64 62 20 64 62 29 0a 20 20 28 patch-db db). (
1d90: 68 61 6e 64 6c 65 2d 65 78 63 65 70 74 69 6f 6e handle-exception
1da0: 73 0a 20 20 20 65 78 6e 0a 20 20 20 28 62 65 67 s. exn. (beg
1db0: 69 6e 0a 20 20 20 20 20 28 70 72 69 6e 74 20 22 in. (print "
1dc0: 45 78 63 65 70 74 69 6f 6e 3a 20 22 20 65 78 6e Exception: " exn
1dd0: 29 0a 20 20 20 20 20 28 70 72 69 6e 74 20 22 45 ). (print "E
1de0: 52 52 4f 52 3a 20 50 6f 73 73 69 62 6c 65 20 6f RROR: Possible o
1df0: 75 74 20 6f 66 20 64 61 74 65 20 73 63 68 65 6d ut of date schem
1e00: 61 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f a, attempting to
1e10: 20 61 64 64 20 74 61 62 6c 65 20 6d 65 74 61 64 add table metad
1e20: 61 74 61 2e 2e 2e 22 29 0a 20 20 20 20 20 28 73 ata..."). (s
1e30: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
1e40: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 b "CREATE TABLE
1e50: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 IF NOT EXISTS me
1e60: 74 61 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 tadat (id INTEGE
1e70: 52 2c 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c R, var TEXT, val
1e80: 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 TEXT,.
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea0: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
1eb0: 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 NT metadat_const
1ec0: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 61 raint UNIQUE (va
1ed0: 72 29 29 3b 22 29 0a 20 20 20 20 20 28 69 66 20 r));"). (if
1ee0: 28 6e 6f 74 20 28 64 62 3a 67 65 74 2d 76 61 72 (not (db:get-var
1ef0: 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 db "MEGATEST_VE
1f00: 52 53 49 4f 4e 22 29 29 0a 09 20 28 64 62 3a 73 RSION")).. (db:s
1f10: 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 et-var db "MEGAT
1f20: 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 31 EST_VERSION" 1.1
1f30: 37 29 29 29 0a 20 20 20 28 6c 65 74 20 28 28 6d 7))). (let ((m
1f40: 76 65 72 20 28 64 62 3a 67 65 74 2d 76 61 72 20 ver (db:get-var
1f50: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
1f60: 53 49 4f 4e 22 29 29 0a 09 20 28 74 65 73 74 2d SION")).. (test-
1f70: 6d 65 74 61 2d 64 65 66 20 22 43 52 45 41 54 45 meta-def "CREATE
1f80: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 TABLE IF NOT EX
1f90: 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 20 28 ISTS test_meta (
1fa0: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
1fb0: 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 RY KEY,.
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes
1fe0: 74 6e 61 6d 65 20 20 20 20 54 45 58 54 20 44 45 tname TEXT DE
1ff0: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 FAULT '',.
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
2020: 75 74 68 6f 72 20 20 20 20 20 20 54 45 58 54 20 uthor TEXT
2030: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2060: 20 6f 77 6e 65 72 20 20 20 20 20 20 20 54 45 58 owner TEX
2070: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20a0: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 54 description T
20b0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20e0: 20 20 20 20 20 72 65 76 69 65 77 65 64 20 20 20 reviewed
20f0: 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 20 20 TIMESTAMP,.
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 20 20 20 20
2120: 20 69 74 65 72 61 74 65 64 20 20 20 20 54 45 58 iterated TEX
2130: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
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 20 20
2160: 20 20 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 52 avg_runtime R
2170: 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 EAL,.
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 61 76 67 5f 64 69 avg_di
21a0: 73 6b 20 20 20 20 52 45 41 4c 2c 0a 20 20 20 20 sk REAL,.
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21d0: 20 74 61 67 73 20 20 20 20 20 20 20 20 54 45 58 tags TEX
21e0: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
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 43 4f CO
2210: 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 6d 65 NSTRAINT test_me
2220: 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e ta_constraint UN
2230: 49 51 55 45 20 28 74 65 73 74 6e 61 6d 65 29 29 IQUE (testname))
2240: 3b 22 29 29 0a 20 20 20 20 20 28 70 72 69 6e 74 ;")). (print
2250: 20 22 43 75 72 72 65 6e 74 20 73 63 68 65 6d 61 "Current schema
2260: 20 76 65 72 73 69 6f 6e 3a 20 22 20 6d 76 65 72 version: " mver
2270: 20 22 20 63 75 72 72 65 6e 74 20 6d 65 67 61 74 " current megat
2280: 65 73 74 20 76 65 72 73 69 6f 6e 3a 20 22 20 6d est version: " m
2290: 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f 6e 29 egatest-version)
22a0: 0a 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 . (cond.
22b0: 20 20 28 28 6e 6f 74 20 6d 76 65 72 29 0a 20 20 ((not mver).
22c0: 20 20 20 20 20 28 70 72 69 6e 74 20 22 41 64 64 (print "Add
22d0: 69 6e 67 20 6d 65 67 61 74 65 73 74 2d 76 65 72 ing megatest-ver
22e0: 73 69 6f 6e 20 74 6f 20 6d 65 74 61 64 61 74 61 sion to metadata
22f0: 22 29 20 3b 3b 20 4e 65 65 64 20 74 6f 20 72 65 ") ;; Need to re
2300: 63 72 65 61 74 65 20 74 68 65 20 74 61 62 6c 65 create the table
2310: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2320: 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 52 4f :execute db "DRO
2330: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 P TABLE IF EXIST
2340: 53 20 6d 65 74 61 64 61 74 3b 22 29 0a 20 20 20 S metadat;").
2350: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
2360: 63 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 cute db "CREATE
2370: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 TABLE IF NOT EXI
2380: 53 54 53 20 6d 65 74 61 64 61 74 20 28 69 64 20 STS metadat (id
2390: 49 4e 54 45 47 45 52 2c 20 76 61 72 20 54 45 58 INTEGER, var TEX
23a0: 54 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 T, val TEXT,.
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
23d0: 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 64 61 ONSTRAINT metada
23e0: 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 t_constraint UNI
23f0: 51 55 45 20 28 76 61 72 29 29 3b 22 29 0a 20 20 QUE (var));").
2400: 20 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 (db:set-var
2410: 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 db "MEGATEST_VE
2420: 52 53 49 4f 4e 22 20 31 2e 31 37 29 0a 20 20 20 RSION" 1.17).
2430: 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 0a (patch-db)).
2440: 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 31 ((< mver 1
2450: 2e 32 31 29 0a 20 20 20 20 20 20 20 28 73 71 6c .21). (sql
2460: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
2470: 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 "DROP TABLE IF E
2480: 58 49 53 54 53 20 6d 65 74 61 64 61 74 3b 22 29 XISTS metadat;")
2490: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
24a0: 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 :execute db "CRE
24b0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 ATE TABLE IF NOT
24c0: 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 EXISTS metadat
24d0: 28 69 64 20 49 4e 54 45 47 45 52 2c 20 76 61 72 (id INTEGER, var
24e0: 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c TEXT, val TEXT,
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2510: 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 CONSTRAINT me
2520: 74 61 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 tadat_constraint
2530: 20 55 4e 49 51 55 45 20 28 76 61 72 29 29 3b 22 UNIQUE (var));"
2540: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 ). (db:set
2550: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
2560: 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 31 29 T_VERSION" 1.21)
2570: 20 3b 3b 20 73 65 74 20 62 65 66 6f 72 65 2c 20 ;; set before,
2580: 6a 75 73 74 20 69 6e 20 63 61 73 65 20 74 68 65 just in case the
2590: 20 63 68 61 6e 67 65 73 20 61 72 65 20 61 6c 72 changes are alr
25a0: 65 61 64 79 20 61 70 70 6c 69 65 64 0a 20 20 20 eady applied.
25b0: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
25c0: 63 75 74 65 20 64 62 20 74 65 73 74 2d 6d 65 74 cute db test-met
25d0: 61 2d 64 65 66 29 0a 09 09 09 09 09 3b 28 66 6f a-def)......;(fo
25e0: 72 2d 65 61 63 68 20 0a 09 09 09 09 09 3b 20 28 r-each ......; (
25f0: 6c 61 6d 62 64 61 20 28 73 74 6d 74 29 0a 09 09 lambda (stmt)...
2600: 09 09 09 3b 20 20 20 28 73 71 6c 69 74 65 33 3a ...; (sqlite3:
2610: 65 78 65 63 75 74 65 20 64 62 20 73 74 6d 74 29 execute db stmt)
2620: 29 0a 09 09 09 09 09 3b 20 28 6c 69 73 74 20 0a )......; (list .
2630: 09 09 09 09 09 3b 20 20 22 41 4c 54 45 52 20 54 .....; "ALTER T
2640: 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 ABLE tests ADD C
2650: 4f 4c 55 4d 4e 20 66 69 72 73 74 5f 65 72 72 20 OLUMN first_err
2660: 54 45 58 54 3b 22 0a 09 09 09 09 09 3b 20 20 22 TEXT;"......; "
2670: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 ALTER TABLE test
2680: 73 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66 69 72 s ADD COLUMN fir
2690: 73 74 5f 77 61 72 6e 20 54 45 58 54 3b 22 0a 09 st_warn TEXT;"..
26a0: 09 09 09 09 3b 20 20 29 29 0a 20 20 20 20 20 20 ....; )).
26b0: 20 28 70 61 74 63 68 2d 64 62 29 29 0a 20 20 20 (patch-db)).
26c0: 20 20 20 28 28 3c 20 6d 76 65 72 20 31 2e 32 34 ((< mver 1.24
26d0: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 ). (db:set
26e0: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
26f0: 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 34 29 T_VERSION" 1.24)
2700: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2710: 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 52 4f :execute db "DRO
2720: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 P TABLE IF EXIST
2730: 53 20 74 65 73 74 5f 64 61 74 61 3b 22 29 0a 20 S test_data;").
2740: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
2750: 78 65 63 75 74 65 20 64 62 20 22 44 52 4f 50 20 xecute db "DROP
2760: 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 TABLE IF EXISTS
2770: 74 65 73 74 5f 6d 65 74 61 3b 22 29 0a 20 20 20 test_meta;").
2780: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
2790: 63 75 74 65 20 64 62 20 74 65 73 74 2d 6d 65 74 cute db test-met
27a0: 61 2d 64 65 66 29 0a 20 20 20 20 20 20 20 28 73 a-def). (s
27b0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
27c0: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 b "CREATE TABLE
27d0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 IF NOT EXISTS te
27e0: 73 74 5f 64 61 74 61 20 28 69 64 20 49 4e 54 45 st_data (id INTE
27f0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2820: 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 45 52 test_id INTEGER
2830: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2850: 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 54 20 category TEXT
2860: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2880: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 69 vari
2890: 61 62 6c 65 20 54 45 58 54 2c 0a 09 20 20 20 20 able TEXT,..
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b0: 20 20 20 20 76 61 6c 75 65 20 52 45 41 4c 2c 0a value REAL,.
28c0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28d0: 20 20 20 20 20 20 20 20 20 65 78 70 65 63 74 65 expecte
28e0: 64 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 20 20 d REAL,..
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2900: 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 20 20 20 20 tol REAL,.
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2920: 20 20 20 20 20 20 20 20 20 20 20 75 6e 69 74 73 units
2930: 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 TEXT,.
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2950: 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 20 54 comment T
2960: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2990: 73 74 61 74 75 73 20 54 45 58 54 20 44 45 46 41 status TEXT DEFA
29a0: 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 ULT 'n/a',.
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 43 4f 4e 53 54 52 41 CONSTRA
29d0: 49 4e 54 20 74 65 73 74 5f 64 61 74 61 20 55 4e INT test_data UN
29e0: 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 63 61 IQUE (test_id,ca
29f0: 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 29 tegory,variable)
2a00: 29 3b 22 29 0a 20 20 20 20 20 20 20 28 70 72 69 );"). (pri
2a10: 6e 74 20 22 57 41 52 4e 49 4e 47 3a 20 54 61 62 nt "WARNING: Tab
2a20: 6c 65 20 74 65 73 74 5f 64 61 74 61 20 61 6e 64 le test_data and
2a30: 20 74 65 73 74 5f 6d 65 74 61 20 77 68 65 72 65 test_meta where
2a40: 20 72 65 63 72 65 61 74 65 64 2e 20 50 6c 65 61 recreated. Plea
2a50: 73 65 20 64 6f 20 6d 65 67 61 74 65 73 74 20 2d se do megatest -
2a60: 75 70 64 61 74 65 2d 6d 65 74 61 22 29 0a 20 20 update-meta").
2a70: 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 29 (patch-db))
2a80: 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 . ((< mver
2a90: 31 2e 32 37 29 0a 20 20 20 20 20 20 20 28 64 62 1.27). (db
2aa0: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
2ab0: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 ATEST_VERSION" 1
2ac0: 2e 32 37 29 0a 20 20 20 20 20 20 20 28 73 71 6c .27). (sql
2ad0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
2ae0: 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 "ALTER TABLE tes
2af0: 74 5f 64 61 74 61 20 41 44 44 20 43 4f 4c 55 4d t_data ADD COLUM
2b00: 4e 20 74 79 70 65 20 54 45 58 54 20 44 45 46 41 N type TEXT DEFA
2b10: 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 20 20 20 ULT '';").
2b20: 20 28 70 61 74 63 68 2d 64 62 29 29 0a 20 20 20 (patch-db)).
2b30: 20 20 20 28 28 3c 20 6d 76 65 72 20 31 2e 32 39 ((< mver 1.29
2b40: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 ). (db:set
2b50: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
2b60: 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 32 39 29 T_VERSION" 1.29)
2b70: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
2b80: 3a 65 78 65 63 75 74 65 20 64 62 20 22 41 4c 54 :execute db "ALT
2b90: 45 52 20 54 41 42 4c 45 20 74 65 73 74 5f 73 74 ER TABLE test_st
2ba0: 65 70 73 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6c eps ADD COLUMN l
2bb0: 6f 67 66 69 6c 65 20 54 45 58 54 20 44 45 46 41 ogfile TEXT DEFA
2bc0: 55 4c 54 20 27 27 3b 22 29 0a 20 20 20 20 20 20 ULT '';").
2bd0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
2be0: 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c e db "ALTER TABL
2bf0: 45 20 74 65 73 74 73 20 41 44 44 20 43 4f 4c 55 E tests ADD COLU
2c00: 4d 4e 20 73 68 6f 72 74 64 69 72 20 54 45 58 54 MN shortdir TEXT
2c10: 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 29 0a DEFAULT '';")).
2c20: 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 20 31 ((< mver 1
2c30: 2e 33 36 29 0a 20 20 20 20 20 20 20 28 64 62 3a .36). (db:
2c40: 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 set-var db "MEGA
2c50: 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e TEST_VERSION" 1.
2c60: 33 36 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 36). (sqli
2c70: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
2c80: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 ALTER TABLE test
2c90: 5f 6d 65 74 61 20 41 44 44 20 43 4f 4c 55 4d 4e _meta ADD COLUMN
2ca0: 20 6a 6f 62 67 72 6f 75 70 20 54 45 58 54 20 44 jobgroup TEXT D
2cb0: 45 46 41 55 4c 54 20 27 64 65 66 61 75 6c 74 27 EFAULT 'default'
2cc0: 3b 22 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d ;")). ((< m
2cd0: 76 65 72 20 31 2e 33 37 29 0a 20 20 20 20 20 20 ver 1.37).
2ce0: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
2cf0: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
2d00: 4e 22 20 31 2e 33 37 29 0a 20 20 20 20 20 20 20 N" 1.37).
2d10: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2d20: 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 db "ALTER TABLE
2d30: 20 74 65 73 74 73 20 41 44 44 20 43 4f 4c 55 4d tests ADD COLUM
2d40: 4e 20 61 72 63 68 69 76 65 64 20 49 4e 54 45 47 N archived INTEG
2d50: 45 52 20 44 45 46 41 55 4c 54 20 30 3b 22 29 29 ER DEFAULT 0;"))
2d60: 20 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 . ((< mver
2d70: 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f megatest-versio
2d80: 6e 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 n). (db:se
2d90: 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 t-var db "MEGATE
2da0: 53 54 5f 56 45 52 53 49 4f 4e 22 20 6d 65 67 61 ST_VERSION" mega
2db0: 74 65 73 74 2d 76 65 72 73 69 6f 6e 29 29 29 29 test-version))))
2dc0: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
2dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
2e10: 6d 65 74 61 20 67 65 74 20 61 6e 64 20 73 65 74 meta get and set
2e20: 20 76 61 72 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d vars.;;========
2e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 0a ==============..
2e70: 3b 3b 20 72 65 74 75 72 6e 73 20 6e 75 6d 62 65 ;; returns numbe
2e80: 72 20 69 66 20 73 74 72 69 6e 67 2d 3e 6e 75 6d r if string->num
2e90: 62 65 72 20 69 73 20 73 75 63 63 65 73 73 66 75 ber is successfu
2ea0: 6c 2c 20 73 74 72 69 6e 67 20 6f 74 68 65 72 77 l, string otherw
2eb0: 69 73 65 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ise.(define (db:
2ec0: 67 65 74 2d 76 61 72 20 64 62 20 76 61 72 29 0a get-var db var).
2ed0: 20 20 28 6c 65 74 20 28 28 72 65 73 20 23 66 29 (let ((res #f)
2ee0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
2ef0: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 or-each-row.
2f00: 20 28 6c 61 6d 62 64 61 20 28 76 61 6c 29 0a 20 (lambda (val).
2f10: 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 (set! res
2f20: 76 61 6c 29 29 0a 20 20 20 20 20 64 62 20 22 53 val)). db "S
2f30: 45 4c 45 43 54 20 76 61 6c 20 46 52 4f 4d 20 6d ELECT val FROM m
2f40: 65 74 61 64 61 74 20 57 48 45 52 45 20 76 61 72 etadat WHERE var
2f50: 3d 3f 3b 22 20 76 61 72 29 0a 20 20 20 20 28 69 =?;" var). (i
2f60: 66 20 28 73 74 72 69 6e 67 3f 20 72 65 73 29 0a f (string? res).
2f70: 09 28 6c 65 74 20 28 28 76 61 6c 6e 75 6d 20 28 .(let ((valnum (
2f80: 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 72 string->number r
2f90: 65 73 29 29 29 0a 09 20 20 28 69 66 20 76 61 6c es))).. (if val
2fa0: 6e 75 6d 20 76 61 6c 6e 75 6d 20 72 65 73 29 29 num valnum res))
2fb0: 0a 09 72 65 73 29 29 29 0a 0a 28 64 65 66 69 6e ..res)))..(defin
2fc0: 65 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 e (db:set-var db
2fd0: 20 76 61 72 20 76 61 6c 29 0a 20 20 28 73 71 6c var val). (sql
2fe0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
2ff0: 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 "INSERT OR REPLA
3000: 43 45 20 49 4e 54 4f 20 6d 65 74 61 64 61 74 20 CE INTO metadat
3010: 28 76 61 72 2c 76 61 6c 29 20 56 41 4c 55 45 53 (var,val) VALUES
3020: 20 28 3f 2c 3f 29 3b 22 20 76 61 72 20 76 61 6c (?,?);" var val
3030: 29 29 0a 0a 3b 3b 20 75 73 65 20 61 20 67 6c 6f ))..;; use a glo
3040: 62 61 6c 20 66 6f 72 20 73 6f 6d 65 20 70 72 69 bal for some pri
3050: 6d 69 74 69 76 65 20 63 61 63 68 69 6e 67 2c 20 mitive caching,
3060: 69 74 20 69 73 20 6a 75 73 74 20 73 69 6c 6c 79 it is just silly
3070: 20 74 6f 20 72 65 2d 72 65 61 64 20 74 68 65 20 to re-read the
3080: 64 62 20 0a 3b 3b 20 6f 76 65 72 20 61 6e 64 20 db .;; over and
3090: 6f 76 65 72 20 61 67 61 69 6e 20 66 6f 72 20 74 over again for t
30a0: 68 65 20 6b 65 79 73 20 73 69 6e 63 65 20 74 68 he keys since th
30b0: 65 79 20 6e 65 76 65 72 20 63 68 61 6e 67 65 0a ey never change.
30c0: 0a 28 64 65 66 69 6e 65 20 2a 64 62 2d 6b 65 79 .(define *db-key
30d0: 73 2a 20 23 66 29 0a 0a 28 64 65 66 69 6e 65 20 s* #f)..(define
30e0: 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 29 (db:get-keys db)
30f0: 0a 20 20 28 69 66 20 2a 64 62 2d 6b 65 79 73 2a . (if *db-keys*
3100: 20 2a 64 62 2d 6b 65 79 73 2a 20 0a 20 20 20 20 *db-keys* .
3110: 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 28 29 (let ((res '()
3120: 29 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 ))..(sqlite3:for
3130: 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 28 6c 61 -each-row .. (la
3140: 6d 62 64 61 20 28 6b 65 79 20 6b 65 79 74 79 70 mbda (key keytyp
3150: 65 29 0a 09 20 20 20 28 73 65 74 21 20 72 65 73 e).. (set! res
3160: 20 28 63 6f 6e 73 20 28 76 65 63 74 6f 72 20 6b (cons (vector k
3170: 65 79 20 6b 65 79 74 79 70 65 29 20 72 65 73 29 ey keytype) res)
3180: 29 29 0a 09 20 64 62 0a 09 20 22 53 45 4c 45 43 )).. db.. "SELEC
3190: 54 20 66 69 65 6c 64 6e 61 6d 65 2c 66 69 65 6c T fieldname,fiel
31a0: 64 74 79 70 65 20 46 52 4f 4d 20 6b 65 79 73 20 dtype FROM keys
31b0: 4f 52 44 45 52 20 42 59 20 69 64 20 44 45 53 43 ORDER BY id DESC
31c0: 3b 22 29 0a 09 28 73 65 74 21 20 2a 64 62 2d 6b ;")..(set! *db-k
31d0: 65 79 73 2a 20 72 65 73 29 0a 09 72 65 73 29 29 eys* res)..res))
31e0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 )..(define (db:g
31f0: 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 et-value-by-head
3200: 65 72 20 72 6f 77 20 68 65 61 64 65 72 20 66 69 er row header fi
3210: 65 6c 64 29 0a 20 20 3b 3b 20 28 64 65 62 75 67 eld). ;; (debug
3220: 3a 70 72 69 6e 74 20 32 20 22 64 62 3a 67 65 74 :print 2 "db:get
3230: 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 -value-by-header
3240: 20 72 6f 77 3a 20 22 20 72 6f 77 20 22 20 68 65 row: " row " he
3250: 61 64 65 72 3a 20 22 20 68 65 61 64 65 72 20 22 ader: " header "
3260: 20 66 69 65 6c 64 3a 20 22 20 66 69 65 6c 64 29 field: " field)
3270: 0a 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 68 65 . (if (null? he
3280: 61 64 65 72 29 20 23 66 0a 20 20 20 20 20 20 28 ader) #f. (
3290: 6c 65 74 20 6c 6f 6f 70 20 28 28 68 65 64 20 28 let loop ((hed (
32a0: 63 61 72 20 68 65 61 64 65 72 29 29 0a 09 09 20 car header))...
32b0: 28 74 61 6c 20 28 63 64 72 20 68 65 61 64 65 72 (tal (cdr header
32c0: 29 29 0a 09 09 20 28 6e 20 20 20 30 29 29 0a 09 ))... (n 0))..
32d0: 28 69 66 20 28 65 71 75 61 6c 3f 20 68 65 64 20 (if (equal? hed
32e0: 66 69 65 6c 64 29 0a 09 20 20 20 20 28 76 65 63 field).. (vec
32f0: 74 6f 72 2d 72 65 66 20 72 6f 77 20 6e 29 0a 09 tor-ref row n)..
3300: 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 74 (if (null? t
3310: 61 6c 29 20 23 66 20 28 6c 6f 6f 70 20 28 63 61 al) #f (loop (ca
3320: 72 20 74 61 6c 29 28 63 64 72 20 74 61 6c 29 28 r tal)(cdr tal)(
3330: 2b 20 6e 20 31 29 29 29 29 29 29 29 0a 0a 3b 3b + n 1)))))))..;;
3340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3380: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 52 20 55 20 4e ======.;; R U N
3390: 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d S.;;===========
33a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
33b0: 3d 3d 3d 3d 3d 3d 3d 3d 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 0a 0a 28 64 65 ===========..(de
33e0: 66 69 6e 65 20 28 72 75 6e 73 3a 67 65 74 2d 73 fine (runs:get-s
33f0: 74 64 2d 72 75 6e 2d 66 69 65 6c 64 73 20 6b 65 td-run-fields ke
3400: 79 73 20 72 65 6d 66 69 65 6c 64 73 29 0a 20 20 ys remfields).
3410: 28 6c 65 74 2a 20 28 28 68 65 61 64 65 72 20 20 (let* ((header
3420: 20 20 28 61 70 70 65 6e 64 20 28 6d 61 70 20 6b (append (map k
3430: 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 ey:get-fieldname
3440: 20 6b 65 79 73 29 0a 09 09 09 20 20 20 20 72 65 keys).... re
3450: 6d 66 69 65 6c 64 73 29 29 0a 09 20 28 6b 65 79 mfields)).. (key
3460: 73 74 72 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 str (conc (ke
3470: 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 ys->keystr keys)
3480: 20 22 2c 22 0a 09 09 09 20 20 28 73 74 72 69 6e ",".... (strin
3490: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 72 65 g-intersperse re
34a0: 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 29 29 0a mfields ",")))).
34b0: 20 20 20 20 28 6c 69 73 74 20 6b 65 79 73 74 72 (list keystr
34c0: 20 68 65 61 64 65 72 29 29 29 0a 0a 3b 3b 20 57 header)))..;; W
34d0: 41 53 20 64 62 2d 67 65 74 2d 72 75 6e 73 20 46 AS db-get-runs F
34e0: 49 58 4d 45 20 49 4e 20 52 45 4d 41 49 4e 49 4e IXME IN REMAININ
34f0: 47 20 43 4f 44 45 0a 3b 3b 0a 3b 3b 20 4d 45 52 G CODE.;;.;; MER
3500: 47 45 20 54 48 49 53 20 57 49 54 48 20 64 62 3a GE THIS WITH db:
3510: 67 65 74 2d 72 75 6e 73 2c 20 61 63 63 69 64 65 get-runs, accide
3520: 6e 74 6c 79 20 77 72 6f 74 65 20 69 74 20 74 77 ntly wrote it tw
3530: 69 63 65 0a 3b 3b 0a 3b 3b 20 72 65 70 6c 61 63 ice.;;.;; replac
3540: 65 20 68 65 61 64 65 72 20 61 6e 64 20 6b 65 79 e header and key
3550: 73 74 72 20 77 69 74 68 20 61 20 63 61 6c 6c 20 str with a call
3560: 74 6f 20 72 75 6e 73 3a 67 65 74 2d 73 74 64 2d to runs:get-std-
3570: 72 75 6e 2d 66 69 65 6c 64 73 0a 3b 3b 0a 3b 3b run-fields.;;.;;
3580: 20 6b 65 79 70 61 74 74 73 3a 20 28 20 28 4b 45 keypatts: ( (KE
3590: 59 31 20 22 61 62 63 25 64 65 66 22 29 28 4b 45 Y1 "abc%def")(KE
35a0: 59 32 20 22 25 22 29 20 29 0a 3b 3b 0a 28 64 65 Y2 "%") ).;;.(de
35b0: 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 72 75 6e fine (db:get-run
35c0: 73 20 64 62 20 72 75 6e 70 61 74 74 20 63 6f 75 s db runpatt cou
35d0: 6e 74 20 6f 66 66 73 65 74 20 6b 65 79 70 61 74 nt offset keypat
35e0: 74 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 ts). (let* ((re
35f0: 73 20 20 20 20 20 20 27 28 29 29 0a 09 20 28 6b s '()).. (k
3600: 65 79 73 20 20 20 20 20 20 28 64 62 3a 67 65 74 eys (db:get
3610: 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 28 72 65 -keys db)).. (re
3620: 6d 66 69 65 6c 64 73 20 28 6c 69 73 74 20 22 69 mfields (list "i
3630: 64 22 20 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 d" "runname" "st
3640: 61 74 65 22 20 22 73 74 61 74 75 73 22 20 22 6f ate" "status" "o
3650: 77 6e 65 72 22 20 22 65 76 65 6e 74 5f 74 69 6d wner" "event_tim
3660: 65 22 29 29 0a 09 20 28 68 65 61 64 65 72 20 20 e")).. (header
3670: 20 20 28 61 70 70 65 6e 64 20 28 6d 61 70 20 6b (append (map k
3680: 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 ey:get-fieldname
3690: 20 6b 65 79 73 29 0a 09 09 09 20 20 20 20 72 65 keys).... re
36a0: 6d 66 69 65 6c 64 73 29 29 0a 09 20 28 6b 65 79 mfields)).. (key
36b0: 73 74 72 20 20 20 20 28 63 6f 6e 63 20 28 6b 65 str (conc (ke
36c0: 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 ys->keystr keys)
36d0: 20 22 2c 22 0a 09 09 09 20 20 28 73 74 72 69 6e ",".... (strin
36e0: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 72 65 g-intersperse re
36f0: 6d 66 69 65 6c 64 73 20 22 2c 22 29 29 29 0a 09 mfields ",")))..
3700: 20 28 71 72 79 73 74 72 20 20 20 20 28 63 6f 6e (qrystr (con
3710: 63 20 22 53 45 4c 45 43 54 20 22 20 6b 65 79 73 c "SELECT " keys
3720: 74 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 57 tr " FROM runs W
3730: 48 45 52 45 20 72 75 6e 6e 61 6d 65 20 4c 49 4b HERE runname LIK
3740: 45 20 3f 20 22 0a 09 09 09 20 20 3b 3b 20 47 65 E ? ".... ;; Ge
3750: 6e 65 72 61 74 65 3a 20 22 20 41 4e 44 20 78 20 nerate: " AND x
3760: 4c 49 4b 45 20 27 6b 65 79 70 61 74 74 27 20 2e LIKE 'keypatt' .
3770: 2e 2e 22 0a 09 09 09 20 20 28 69 66 20 28 6e 75 ..".... (if (nu
3780: 6c 6c 3f 20 6b 65 79 70 61 74 74 73 29 20 22 22 ll? keypatts) ""
3790: 0a 09 09 09 20 20 20 20 20 20 28 63 6f 6e 63 20 .... (conc
37a0: 22 20 41 4e 44 20 22 0a 09 09 09 09 20 20 20 20 " AND ".....
37b0: 28 73 74 72 69 6e 67 2d 6a 6f 69 6e 20 0a 09 09 (string-join ...
37c0: 09 09 20 20 20 20 20 28 6d 61 70 20 28 6c 61 6d .. (map (lam
37d0: 62 64 61 20 28 6b 65 79 70 61 74 74 29 0a 09 09 bda (keypatt)...
37e0: 09 09 09 20 20 20 20 28 6c 65 74 20 28 28 6b 65 ... (let ((ke
37f0: 79 20 20 28 63 61 72 20 6b 65 79 70 61 74 74 29 y (car keypatt)
3800: 29 0a 09 09 09 09 09 09 20 20 28 70 61 74 74 20 )....... (patt
3810: 28 63 61 64 72 20 6b 65 79 70 61 74 74 29 29 29 (cadr keypatt)))
3820: 0a 09 09 09 09 09 20 20 20 20 20 20 28 63 6f 6e ...... (con
3830: 63 20 6b 65 79 20 22 20 4c 49 4b 45 20 27 22 20 c key " LIKE '"
3840: 70 61 74 74 20 22 27 22 29 29 29 0a 09 09 09 09 patt "'"))).....
3850: 09 20 20 6b 65 79 70 61 74 74 73 29 0a 09 09 09 . keypatts)....
3860: 09 20 20 20 20 20 22 20 41 4e 44 20 22 29 29 29 . " AND ")))
3870: 0a 09 09 09 20 20 22 20 4f 52 44 45 52 20 42 59 .... " ORDER BY
3880: 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 45 53 43 event_time DESC
3890: 20 22 0a 09 09 09 20 20 28 69 66 20 28 6e 75 6d ".... (if (num
38a0: 62 65 72 3f 20 63 6f 75 6e 74 29 0a 09 09 09 20 ber? count)....
38b0: 20 20 20 20 20 28 63 6f 6e 63 20 22 20 4c 49 4d (conc " LIM
38c0: 49 54 20 22 20 63 6f 75 6e 74 29 0a 09 09 09 20 IT " count)....
38d0: 20 20 20 20 20 22 22 29 0a 09 09 09 20 20 28 69 "").... (i
38e0: 66 20 28 6e 75 6d 62 65 72 3f 20 6f 66 66 73 65 f (number? offse
38f0: 74 29 0a 09 09 09 20 20 20 20 20 20 28 63 6f 6e t).... (con
3900: 63 20 22 20 4f 46 46 53 45 54 20 22 20 6f 66 66 c " OFFSET " off
3910: 73 65 74 29 0a 09 09 09 20 20 20 20 20 20 22 22 set).... ""
3920: 29 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a )))). (debug:
3930: 70 72 69 6e 74 20 38 20 22 49 4e 46 4f 3a 20 64 print 8 "INFO: d
3940: 62 3a 67 65 74 2d 72 75 6e 73 20 71 72 79 73 74 b:get-runs qryst
3950: 72 3a 20 22 20 71 72 79 73 74 72 20 22 5c 6e 6b r: " qrystr "\nk
3960: 65 79 70 61 74 74 73 3a 20 22 20 6b 65 79 70 61 eypatts: " keypa
3970: 74 74 73 20 22 5c 6e 20 20 6f 66 66 73 65 74 3a tts "\n offset:
3980: 20 22 20 6f 66 66 73 65 74 20 22 20 6c 69 6d 69 " offset " limi
3990: 74 3a 20 22 20 63 6f 75 6e 74 29 0a 20 20 20 20 t: " count).
39a0: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
39b0: 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 h-row. (lamb
39c0: 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 20 20 da (a . x).
39d0: 20 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e (set! res (con
39e0: 73 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 s (apply vector
39f0: 61 20 78 29 20 72 65 73 29 29 29 0a 20 20 20 20 a x) res))).
3a00: 20 64 62 0a 20 20 20 20 20 71 72 79 73 74 72 0a db. qrystr.
3a10: 20 20 20 20 20 72 75 6e 70 61 74 74 29 0a 20 20 runpatt).
3a20: 20 20 28 76 65 63 74 6f 72 20 68 65 61 64 65 72 (vector header
3a30: 20 72 65 73 29 29 29 0a 0a 3b 3b 20 6a 75 73 74 res)))..;; just
3a40: 20 67 65 74 20 63 6f 75 6e 74 20 6f 66 20 72 75 get count of ru
3a50: 6e 73 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 ns.(define (db:g
3a60: 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 et-num-runs db r
3a70: 75 6e 70 61 74 74 29 0a 20 20 28 6c 65 74 20 28 unpatt). (let (
3a80: 28 6e 75 6d 72 75 6e 73 20 30 29 29 0a 20 20 20 (numruns 0)).
3a90: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
3aa0: 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 ch-row . (la
3ab0: 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 20 mbda (count).
3ac0: 20 20 20 20 28 73 65 74 21 20 6e 75 6d 72 75 6e (set! numrun
3ad0: 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 20 64 s count)). d
3ae0: 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 b. "SELECT C
3af0: 4f 55 4e 54 28 69 64 29 20 46 52 4f 4d 20 72 75 OUNT(id) FROM ru
3b00: 6e 73 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 ns WHERE runname
3b10: 20 4c 49 4b 45 20 3f 3b 22 20 72 75 6e 70 61 74 LIKE ?;" runpat
3b20: 74 29 0a 20 20 20 20 6e 75 6d 72 75 6e 73 29 29 t). numruns))
3b30: 0a 0a 3b 3b 20 75 73 65 20 28 67 65 74 2d 76 61 ..;; use (get-va
3b40: 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 20 28 64 lue-by-header (d
3b50: 62 3a 67 65 74 2d 68 65 61 64 65 72 20 72 75 6e b:get-header run
3b60: 69 6e 66 6f 29 28 64 62 3a 67 65 74 2d 72 6f 77 info)(db:get-row
3b70: 20 72 75 6e 69 6e 66 6f 29 29 0a 28 64 65 66 69 runinfo)).(defi
3b80: 6e 65 20 28 64 62 3a 67 65 74 2d 72 75 6e 2d 69 ne (db:get-run-i
3b90: 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 nfo db run-id).
3ba0: 20 28 6c 65 74 2a 20 28 28 72 65 73 20 20 20 20 (let* ((res
3bb0: 20 20 23 66 29 0a 09 20 28 6b 65 79 73 20 20 20 #f).. (keys
3bc0: 20 20 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 (db:get-keys
3bd0: 64 62 29 29 0a 09 20 28 72 65 6d 66 69 65 6c 64 db)).. (remfield
3be0: 73 20 28 6c 69 73 74 20 22 69 64 22 20 22 72 75 s (list "id" "ru
3bf0: 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 nname" "state" "
3c00: 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 status" "owner"
3c10: 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 29 0a 09 "event_time"))..
3c20: 20 28 68 65 61 64 65 72 20 20 20 20 28 61 70 70 (header (app
3c30: 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 end (map key:get
3c40: 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 -fieldname keys)
3c50: 0a 09 09 09 20 20 20 20 72 65 6d 66 69 65 6c 64 .... remfield
3c60: 73 29 29 0a 09 20 28 6b 65 79 73 74 72 20 20 20 s)).. (keystr
3c70: 20 28 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 (conc (keys->ke
3c80: 79 73 74 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 ystr keys) ","..
3c90: 09 09 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 .. (string-inte
3ca0: 72 73 70 65 72 73 65 20 72 65 6d 66 69 65 6c 64 rsperse remfield
3cb0: 73 20 22 2c 22 29 29 29 29 0a 20 20 20 20 3b 3b s ",")))). ;;
3cc0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 (debug:print 0
3cd0: 22 64 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 66 6f "db:get-run-info
3ce0: 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 run-id: " run-i
3cf0: 64 20 22 20 68 65 61 64 65 72 3a 20 22 20 68 65 d " header: " he
3d00: 61 64 65 72 20 22 20 6b 65 79 73 74 72 3a 20 22 ader " keystr: "
3d10: 20 6b 65 79 73 74 72 29 0a 20 20 20 20 28 73 71 keystr). (sq
3d20: 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 lite3:for-each-r
3d30: 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 ow. (lambda
3d40: 28 61 20 2e 20 78 29 0a 20 20 20 20 20 20 20 28 (a . x). (
3d50: 73 65 74 21 20 72 65 73 20 28 61 70 70 6c 79 20 set! res (apply
3d60: 76 65 63 74 6f 72 20 61 20 78 29 29 29 0a 20 20 vector a x))).
3d70: 20 20 20 64 62 0a 20 20 20 20 20 28 63 6f 6e 63 db. (conc
3d80: 20 22 53 45 4c 45 43 54 20 22 20 6b 65 79 73 74 "SELECT " keyst
3d90: 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 r " FROM runs WH
3da0: 45 52 45 20 69 64 3d 3f 3b 22 29 0a 20 20 20 20 ERE id=?;").
3db0: 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 76 65 run-id). (ve
3dc0: 63 74 6f 72 20 68 65 61 64 65 72 20 72 65 73 29 ctor header res)
3dd0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
3de0: 73 65 74 2d 63 6f 6d 6d 65 6e 74 2d 66 6f 72 2d set-comment-for-
3df0: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 63 6f run db run-id co
3e00: 6d 6d 65 6e 74 29 0a 20 20 28 73 71 6c 69 74 65 mment). (sqlite
3e10: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
3e20: 44 41 54 45 20 72 75 6e 73 20 53 45 54 20 63 6f DATE runs SET co
3e30: 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 mment=? WHERE id
3e40: 3d 3f 3b 22 20 63 6f 6d 6d 65 6e 74 20 72 75 6e =?;" comment run
3e50: 2d 69 64 29 29 0a 0a 3b 3b 20 64 6f 65 73 20 6e -id))..;; does n
3e60: 6f 74 20 28 6f 62 76 69 6f 75 73 6c 79 21 29 20 ot (obviously!)
3e70: 72 65 6d 6f 76 65 64 20 64 65 70 65 6e 64 65 6e removed dependen
3e80: 74 20 64 61 74 61 2e 20 0a 28 64 65 66 69 6e 65 t data. .(define
3e90: 20 28 64 62 3a 64 65 6c 65 74 65 2d 72 75 6e 20 (db:delete-run
3ea0: 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 71 db run-id). (sq
3eb0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
3ec0: 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 72 75 "DELETE FROM ru
3ed0: 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 ns WHERE id=?;"
3ee0: 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e run-id))..(defin
3ef0: 65 20 28 64 62 3a 75 70 64 61 74 65 2d 72 75 6e e (db:update-run
3f00: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 64 62 20 72 -event_time db r
3f10: 75 6e 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 65 un-id). (sqlite
3f20: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
3f30: 44 41 54 45 20 72 75 6e 73 20 53 45 54 20 65 76 DATE runs SET ev
3f40: 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 74 69 6d ent_time=strftim
3f50: 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 57 48 e('%s','now') WH
3f60: 45 52 45 20 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 ERE id=?;" run-i
3f70: 64 29 29 20 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d d)) ..;;========
3f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
3fc0: 3b 20 4b 20 45 20 59 20 53 0a 3b 3b 3d 3d 3d 3d ; K E Y S.;;====
3fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a 0a 3b 3b 20 67 65 74 20 6b 65 79 20 76 ==..;; get key v
4020: 61 6c 20 70 61 69 72 73 20 66 6f 72 20 61 20 67 al pairs for a g
4030: 69 76 65 6e 20 72 75 6e 2d 69 64 0a 3b 3b 20 28 iven run-id.;; (
4040: 20 28 46 49 45 4c 44 4e 41 4d 45 31 20 6b 65 79 (FIELDNAME1 key
4050: 76 61 6c 31 29 20 28 46 49 45 4c 44 4e 41 4d 45 val1) (FIELDNAME
4060: 32 20 6b 65 79 76 61 6c 32 29 20 2e 2e 2e 20 29 2 keyval2) ... )
4070: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
4080: 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 64 -key-val-pairs d
4090: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 b run-id). (let
40a0: 2a 20 28 28 6b 65 79 73 20 28 67 65 74 2d 6b 65 * ((keys (get-ke
40b0: 79 73 20 64 62 29 29 0a 09 20 28 72 65 73 20 20 ys db)).. (res
40c0: 27 28 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 '())). (debug
40d0: 3a 70 72 69 6e 74 20 36 20 22 6b 65 79 73 3a 20 :print 6 "keys:
40e0: 22 20 6b 65 79 73 20 22 20 72 75 6e 2d 69 64 3a " keys " run-id:
40f0: 20 22 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 " run-id). (
4100: 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 for-each . (
4110: 6c 61 6d 62 64 61 20 28 6b 65 79 29 0a 20 20 20 lambda (key).
4120: 20 20 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 (let ((qry (
4130: 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 28 conc "SELECT " (
4140: 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d key:get-fieldnam
4150: 65 20 6b 65 79 29 20 22 20 46 52 4f 4d 20 72 75 e key) " FROM ru
4160: 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 ns WHERE id=?;")
4170: 29 29 0a 09 20 3b 3b 20 28 64 65 62 75 67 3a 70 )).. ;; (debug:p
4180: 72 69 6e 74 20 30 20 22 71 72 79 3a 20 22 20 71 rint 0 "qry: " q
4190: 72 79 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 ry).. (sqlite3:f
41a0: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 20 or-each-row ..
41b0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 2d 76 61 6c (lambda (key-val
41c0: 29 0a 09 20 20 20 20 28 73 65 74 21 20 72 65 73 ).. (set! res
41d0: 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 28 6b 65 (cons (list (ke
41e0: 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 y:get-fieldname
41f0: 6b 65 79 29 20 6b 65 79 2d 76 61 6c 29 20 72 65 key) key-val) re
4200: 73 29 29 29 0a 09 20 20 64 62 20 71 72 79 20 72 s))).. db qry r
4210: 75 6e 2d 69 64 29 29 29 0a 20 20 20 20 20 6b 65 un-id))). ke
4220: 79 73 29 0a 20 20 20 20 28 72 65 76 65 72 73 65 ys). (reverse
4230: 20 72 65 73 29 29 29 0a 0a 3b 3b 20 67 65 74 20 res)))..;; get
4240: 6b 65 79 20 76 61 6c 73 20 66 6f 72 20 61 20 67 key vals for a g
4250: 69 76 65 6e 20 72 75 6e 2d 69 64 0a 28 64 65 66 iven run-id.(def
4260: 69 6e 65 20 28 64 62 3a 67 65 74 2d 6b 65 79 2d ine (db:get-key-
4270: 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 0a vals db run-id).
4280: 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 28 (let* ((keys (
4290: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 get-keys db))..
42a0: 28 72 65 73 20 20 27 28 29 29 29 0a 20 20 20 20 (res '())).
42b0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 20 22 (debug:print 6 "
42c0: 6b 65 79 73 3a 20 22 20 6b 65 79 73 20 22 20 72 keys: " keys " r
42d0: 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 un-id: " run-id)
42e0: 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a . (for-each .
42f0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6b 65 (lambda (ke
4300: 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 y). (let (
4310: 28 71 72 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 (qry (conc "SELE
4320: 43 54 20 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 CT " (key:get-fi
4330: 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 22 20 46 eldname key) " F
4340: 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 69 ROM runs WHERE i
4350: 64 3d 3f 3b 22 29 29 29 0a 09 20 3b 3b 20 28 64 d=?;"))).. ;; (d
4360: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 71 72 ebug:print 0 "qr
4370: 79 3a 20 22 20 71 72 79 29 0a 09 20 28 73 71 6c y: " qry).. (sql
4380: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
4390: 77 20 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 6b w .. (lambda (k
43a0: 65 79 2d 76 61 6c 29 0a 09 20 20 20 20 28 73 65 ey-val).. (se
43b0: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 6b 65 79 t! res (cons key
43c0: 2d 76 61 6c 20 72 65 73 29 29 29 0a 09 20 20 64 -val res))).. d
43d0: 62 20 71 72 79 20 72 75 6e 2d 69 64 29 29 29 0a b qry run-id))).
43e0: 20 20 20 20 20 6b 65 79 73 29 0a 20 20 20 20 28 keys). (
43f0: 72 65 76 65 72 73 65 20 72 65 73 29 29 29 0a 0a reverse res)))..
4400: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
4410: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4420: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4440: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 20 54 20 45 ========.;; T E
4450: 20 53 20 54 20 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d S T S.;;=======
4460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a ===============.
44a0: 0a 3b 3b 20 73 74 61 74 65 73 20 61 6e 64 20 73 .;; states and s
44b0: 74 61 74 75 73 65 73 20 61 72 65 20 6c 69 73 74 tatuses are list
44c0: 73 2c 20 74 75 72 6e 20 74 68 65 6d 20 69 6e 74 s, turn them int
44d0: 6f 20 28 22 50 41 53 53 22 2c 22 46 41 49 4c 22 o ("PASS","FAIL"
44e0: 2e 2e 2e 29 20 61 6e 64 20 75 73 65 20 4e 4f 54 ...) and use NOT
44f0: 20 49 4e 0a 3b 3b 20 69 2e 65 2e 20 74 68 65 73 IN.;; i.e. thes
4500: 65 20 6c 69 73 74 73 20 64 65 66 69 6e 65 20 77 e lists define w
4510: 68 61 74 20 74 6f 20 4e 4f 54 20 73 68 6f 77 2e hat to NOT show.
4520: 0a 3b 3b 20 73 74 61 74 65 73 20 61 6e 64 20 73 .;; states and s
4530: 74 61 74 75 73 65 73 20 61 72 65 20 72 65 71 75 tatuses are requ
4540: 69 72 65 64 20 74 6f 20 62 65 20 6c 69 73 74 73 ired to be lists
4550: 2c 20 65 6d 70 74 79 20 69 73 20 6f 6b 0a 28 64 , empty is ok.(d
4560: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 65 efine (db:get-te
4570: 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 sts-for-run db r
4580: 75 6e 2d 69 64 20 74 65 73 74 70 61 74 74 20 69 un-id testpatt i
4590: 74 65 6d 70 61 74 74 20 73 74 61 74 65 73 20 73 tempatt states s
45a0: 74 61 74 75 73 65 73 29 0a 20 20 28 6c 65 74 2a tatuses). (let*
45b0: 20 28 28 72 65 73 20 27 28 29 29 0a 09 20 28 73 ((res '()).. (s
45c0: 74 61 74 65 73 2d 73 74 72 20 20 20 20 28 63 6f tates-str (co
45d0: 6e 63 20 22 28 27 22 20 28 73 74 72 69 6e 67 2d nc "('" (string-
45e0: 69 6e 74 65 72 73 70 65 72 73 65 20 73 74 61 74 intersperse stat
45f0: 65 73 20 20 20 22 27 2c 27 22 29 20 22 27 29 22 es "','") "')"
4600: 29 29 0a 09 20 28 73 74 61 74 75 73 65 73 2d 73 )).. (statuses-s
4610: 74 72 20 20 28 63 6f 6e 63 20 22 28 27 22 20 28 tr (conc "('" (
4620: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
4630: 73 65 20 73 74 61 74 75 73 65 73 20 22 27 2c 27 se statuses "','
4640: 22 29 20 22 27 29 22 29 29 0a 09 20 28 71 72 79 ") "')")).. (qry
4650: 20 20 20 20 20 20 28 63 6f 6e 63 20 22 53 45 4c (conc "SEL
4660: 45 43 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 ECT id,run_id,te
4670: 73 74 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 stname,state,sta
4680: 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 tus,event_time,h
4690: 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b ost,cpuload,disk
46a0: 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 free,uname,rundi
46b0: 72 2c 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f r,item_path,run_
46c0: 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c duration,final_l
46d0: 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 22 0a 09 09 ogf,comment "...
46e0: 09 20 22 20 46 52 4f 4d 20 74 65 73 74 73 20 57 . " FROM tests W
46f0: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
4700: 44 20 74 65 73 74 6e 61 6d 65 20 6c 69 6b 65 20 D testname like
4710: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 ? AND item_path
4720: 4c 49 4b 45 20 3f 20 22 20 0a 09 09 09 20 22 20 LIKE ? " .... "
4730: 41 4e 44 20 4e 4f 54 20 28 73 74 61 74 65 20 69 AND NOT (state i
4740: 6e 20 22 20 73 74 61 74 65 73 2d 73 74 72 20 22 n " states-str "
4750: 20 41 4e 44 20 73 74 61 74 75 73 20 49 4e 20 22 AND status IN "
4760: 20 73 74 61 74 75 73 65 73 2d 73 74 72 20 22 29 statuses-str ")
4770: 20 22 0a 09 09 09 20 3b 3b 20 22 20 4f 52 44 45 ".... ;; " ORDE
4780: 52 20 42 59 20 69 64 20 44 45 53 43 3b 22 0a 09 R BY id DESC;"..
4790: 09 09 20 22 20 4f 52 44 45 52 20 42 59 20 65 76 .. " ORDER BY ev
47a0: 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 20 3b ent_time ASC;" ;
47b0: 3b 20 50 4f 54 45 4e 54 49 41 4c 20 49 53 53 55 ; POTENTIAL ISSU
47c0: 45 21 20 43 48 45 43 4b 20 4d 45 21 20 44 6f 65 E! CHECK ME! Doe
47d0: 73 20 61 6e 79 74 69 6e 67 20 64 65 70 65 6e 64 s anyting depend
47e0: 20 6f 6e 20 74 68 69 73 20 62 65 69 6e 67 20 73 on this being s
47f0: 6f 72 74 65 64 20 62 79 20 69 64 3f 0a 09 09 09 orted by id?....
4800: 20 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a ))). (debug:
4810: 70 72 69 6e 74 20 38 20 22 49 4e 46 4f 3a 20 64 print 8 "INFO: d
4820: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b:get-tests-for-
4830: 72 75 6e 20 71 72 79 3d 22 20 71 72 79 29 0a 20 run qry=" qry).
4840: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
4850: 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 each-row . (
4860: 6c 61 6d 62 64 61 20 28 61 20 2e 20 62 29 20 3b lambda (a . b) ;
4870: 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 ; id run-id test
4880: 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 name state statu
4890: 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 s event-time hos
48a0: 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 t cpuload diskfr
48b0: 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 ee uname rundir
48c0: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 2d 64 75 item-path run-du
48d0: 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f 67 ration final-log
48e0: 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 f comment).
48f0: 20 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e (set! res (con
4900: 73 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 s (apply vector
4910: 61 20 62 29 20 72 65 73 29 29 29 20 3b 3b 20 69 a b) res))) ;; i
4920: 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d d run-id testnam
4930: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 e state status e
4940: 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 vent-time host c
4950: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
4960: 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 uname rundir ite
4970: 6d 2d 70 61 74 68 20 72 75 6e 2d 64 75 72 61 74 m-path run-durat
4980: 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f 67 66 20 63 ion final-logf c
4990: 6f 6d 6d 65 6e 74 29 20 72 65 73 29 29 29 0a 20 omment) res))).
49a0: 20 20 20 20 64 62 20 0a 20 20 20 20 20 71 72 79 db . qry
49b0: 0a 20 20 20 20 20 72 75 6e 2d 69 64 0a 20 20 20 . run-id.
49c0: 20 20 28 69 66 20 74 65 73 74 70 61 74 74 20 74 (if testpatt t
49d0: 65 73 74 70 61 74 74 20 22 25 22 29 0a 20 20 20 estpatt "%").
49e0: 20 20 28 69 66 20 69 74 65 6d 70 61 74 74 20 69 (if itempatt i
49f0: 74 65 6d 70 61 74 74 20 22 25 22 29 29 0a 20 20 tempatt "%")).
4a00: 20 20 72 65 73 29 29 0a 0a 3b 3b 20 74 68 69 73 res))..;; this
4a10: 20 6f 6e 65 20 69 73 20 61 20 62 69 74 20 62 72 one is a bit br
4a20: 6f 6b 65 6e 20 42 55 47 20 46 49 58 4d 45 0a 28 oken BUG FIXME.(
4a30: 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 define (db:delet
4a40: 65 2d 74 65 73 74 2d 73 74 65 70 2d 72 65 63 6f e-test-step-reco
4a50: 72 64 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 rds db run-id te
4a60: 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 29 st-name itemdat)
4a70: 0a 20 20 3b 3b 20 42 72 65 61 6b 69 6e 67 20 69 . ;; Breaking i
4a80: 74 20 69 6e 74 6f 20 74 77 6f 20 71 75 65 72 69 t into two queri
4a90: 65 73 20 66 6f 72 20 62 65 74 74 65 72 20 66 69 es for better fi
4aa0: 6c 65 20 61 63 63 65 73 73 20 69 6e 74 65 72 6c le access interl
4ab0: 65 61 76 69 6e 67 0a 20 20 28 6c 65 74 20 28 28 eaving. (let ((
4ac0: 69 64 73 20 27 28 29 29 29 0a 20 20 20 20 28 73 ids '())). (s
4ad0: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
4ae0: 72 6f 77 20 28 6c 61 6d 62 64 61 20 28 69 64 29 row (lambda (id)
4af0: 0a 09 09 09 20 20 20 20 28 73 65 74 21 20 69 64 .... (set! id
4b00: 73 20 28 63 6f 6e 73 20 69 64 20 69 64 73 29 29 s (cons id ids))
4b10: 29 0a 09 09 09 20 20 64 62 0a 09 09 09 20 20 22 ).... db.... "
4b20: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 74 SELECT id FROM t
4b30: 65 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 ests WHERE run_i
4b40: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
4b50: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
4b60: 3d 3f 3b 22 0a 09 09 09 20 20 72 75 6e 2d 69 64 =?;".... run-id
4b70: 20 74 65 73 74 2d 6e 61 6d 65 20 28 69 74 65 6d test-name (item
4b80: 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d -list->path item
4b90: 64 61 74 29 29 0a 20 20 20 20 28 66 6f 72 2d 65 dat)). (for-e
4ba0: 61 63 68 20 28 6c 61 6d 62 64 61 20 28 69 64 29 ach (lambda (id)
4bb0: 0a 09 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 ...(sqlite3:exec
4bc0: 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 ute db "DELETE F
4bd0: 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 ROM test_steps W
4be0: 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 HERE test_id=?;"
4bf0: 20 69 64 29 0a 09 09 28 74 68 72 65 61 64 2d 73 id)...(thread-s
4c00: 6c 65 65 70 21 20 30 2e 31 29 29 20 3b 3b 20 67 leep! 0.1)) ;; g
4c10: 69 76 65 20 6f 74 68 65 72 73 20 61 63 63 65 73 ive others acces
4c20: 73 20 74 6f 20 74 68 65 20 64 62 0a 09 20 20 20 s to the db..
4c30: 20 20 20 69 64 73 29 29 29 0a 3b 3b 22 44 45 4c ids))).;;"DEL
4c40: 45 54 45 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 ETE FROM test_st
4c50: 65 70 73 20 57 48 45 52 45 20 74 65 73 74 5f 69 eps WHERE test_i
4c60: 64 20 69 6e 20 28 53 45 4c 45 43 54 20 69 64 20 d in (SELECT id
4c70: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
4c80: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 run_id=? AND te
4c90: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 stname=? AND ite
4ca0: 6d 5f 70 61 74 68 3d 3f 29 3b 22 20 0a 09 09 20 m_path=?);" ...
4cb0: 20 20 0a 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 .;; .(define (
4cc0: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 db:delete-test-r
4cd0: 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 2d 69 ecords db test-i
4ce0: 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 d). (sqlite3:ex
4cf0: 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 ecute db "DELETE
4d00: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
4d10: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f WHERE test_id=?
4d20: 3b 22 20 74 65 73 74 2d 69 64 29 0a 20 20 28 73 ;" test-id). (s
4d30: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
4d40: 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 b "DELETE FROM t
4d50: 65 73 74 5f 64 61 74 61 20 20 57 48 45 52 45 20 est_data WHERE
4d60: 74 65 73 74 5f 69 64 3d 3f 3b 22 20 74 65 73 74 test_id=?;" test
4d70: 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a -id). (sqlite3:
4d80: 65 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 execute db "DELE
4d90: 54 45 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 TE FROM tests WH
4da0: 45 52 45 20 69 64 3d 3f 3b 22 20 74 65 73 74 2d ERE id=?;" test-
4db0: 69 64 29 29 0a 0a 3b 3b 20 73 65 74 20 74 65 73 id))..;; set tes
4dc0: 74 73 20 77 69 74 68 20 73 74 61 74 65 20 63 75 ts with state cu
4dd0: 72 72 73 74 61 74 65 20 61 6e 64 20 73 74 61 74 rrstate and stat
4de0: 75 73 20 63 75 72 72 73 74 61 74 75 73 20 74 6f us currstatus to
4df0: 20 6e 65 77 73 74 61 74 65 20 61 6e 64 20 6e 65 newstate and ne
4e00: 77 73 74 61 74 75 73 0a 3b 3b 20 75 73 65 20 63 wstatus.;; use c
4e10: 75 72 72 73 74 61 74 65 20 3d 20 23 66 20 61 6e urrstate = #f an
4e20: 64 20 6f 72 20 63 75 72 72 73 74 61 74 75 73 20 d or currstatus
4e30: 3d 20 23 66 20 74 6f 20 61 70 70 6c 79 20 74 6f = #f to apply to
4e40: 20 61 6e 79 20 73 74 61 74 65 20 6f 72 20 73 74 any state or st
4e50: 61 74 75 73 20 72 65 73 70 65 63 74 69 76 65 6c atus respectivel
4e60: 79 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a 20 53 51 y.;; WARNING: SQ
4e70: 4c 20 69 6e 6a 65 63 74 69 6f 6e 20 72 69 73 6b L injection risk
4e80: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 73 65 74 .(define (db:set
4e90: 2d 74 65 73 74 73 2d 73 74 61 74 65 2d 73 74 61 -tests-state-sta
4ea0: 74 75 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 tus db run-id te
4eb0: 73 74 6e 61 6d 65 73 20 63 75 72 72 73 74 61 74 stnames currstat
4ec0: 65 20 63 75 72 72 73 74 61 74 75 73 20 6e 65 77 e currstatus new
4ed0: 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 29 state newstatus)
4ee0: 0a 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 . (for-each (la
4ef0: 6d 62 64 61 20 28 74 65 73 74 6e 61 6d 65 29 0a mbda (testname).
4f00: 09 20 20 20 20 20 20 28 6c 65 74 20 28 28 71 72 . (let ((qr
4f10: 79 20 28 63 6f 6e 63 20 22 55 50 44 41 54 45 20 y (conc "UPDATE
4f20: 74 65 73 74 73 20 53 45 54 20 73 74 61 74 65 3d tests SET state=
4f30: 3f 2c 73 74 61 74 75 73 3d 3f 20 57 48 45 52 45 ?,status=? WHERE
4f40: 20 22 0a 09 09 09 20 20 20 20 20 20 20 28 69 66 ".... (if
4f50: 20 63 75 72 72 73 74 61 74 65 20 20 28 63 6f 6e currstate (con
4f60: 63 20 22 73 74 61 74 65 3d 27 22 20 63 75 72 72 c "state='" curr
4f70: 73 74 61 74 65 20 22 27 20 41 4e 44 20 22 29 20 state "' AND ")
4f80: 22 22 29 0a 09 09 09 20 20 20 20 20 20 20 28 69 "").... (i
4f90: 66 20 63 75 72 72 73 74 61 74 75 73 20 28 63 6f f currstatus (co
4fa0: 6e 63 20 22 73 74 61 74 75 73 3d 27 22 20 63 75 nc "status='" cu
4fb0: 72 72 73 74 61 74 75 73 20 22 27 20 41 4e 44 20 rrstatus "' AND
4fc0: 22 29 20 22 22 29 0a 09 09 09 20 20 20 20 20 20 ") "")....
4fd0: 20 22 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 " run_id=? AND
4fe0: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 4e testname=? AND N
4ff0: 4f 54 20 28 69 74 65 6d 5f 70 61 74 68 3d 27 27 OT (item_path=''
5000: 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 69 6e AND testname in
5010: 20 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 (SELECT DISTINC
5020: 54 20 74 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 T testname FROM
5030: 74 65 73 74 73 20 57 48 45 52 45 20 74 65 73 74 tests WHERE test
5040: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f name=? AND item_
5050: 70 61 74 68 20 21 3d 20 27 27 29 29 3b 22 29 29 path != ''));"))
5060: 29 0a 09 09 3b 3b 28 64 65 62 75 67 3a 70 72 69 )...;;(debug:pri
5070: 6e 74 20 30 20 22 51 52 59 3a 20 22 20 71 72 79 nt 0 "QRY: " qry
5080: 29 0a 09 09 28 73 71 6c 69 74 65 33 3a 65 78 65 )...(sqlite3:exe
5090: 63 75 74 65 20 64 62 20 71 72 79 20 72 75 6e 2d cute db qry run-
50a0: 69 64 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 id newstate news
50b0: 74 61 74 75 73 20 74 65 73 74 6e 61 6d 65 20 74 tatus testname t
50c0: 65 73 74 6e 61 6d 65 29 29 29 0a 09 20 20 20 20 estname)))..
50d0: 74 65 73 74 6e 61 6d 65 73 29 29 0a 0a 28 64 65 testnames))..(de
50e0: 66 69 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d fine (db:delete-
50f0: 74 65 73 74 73 2d 69 6e 2d 73 74 61 74 65 20 64 tests-in-state d
5100: 62 20 72 75 6e 2d 69 64 20 73 74 61 74 65 29 0a b run-id state).
5110: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
5120: 74 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 te db "DELETE FR
5130: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 OM tests WHERE s
5140: 74 61 74 65 3d 3f 20 41 4e 44 20 72 75 6e 5f 69 tate=? AND run_i
5150: 64 3d 3f 3b 22 20 73 74 61 74 65 20 72 75 6e 2d d=?;" state run-
5160: 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 id))..(define (d
5170: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 b:test-set-state
5180: 2d 73 74 61 74 75 73 2d 62 79 2d 69 64 20 64 62 -status-by-id db
5190: 20 74 65 73 74 2d 69 64 20 6e 65 77 73 74 61 74 test-id newstat
51a0: 65 20 6e 65 77 73 74 61 74 75 73 20 6e 65 77 63 e newstatus newc
51b0: 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 66 20 6e 65 omment). (if ne
51c0: 77 73 74 61 74 65 20 20 20 28 73 71 6c 69 74 65 wstate (sqlite
51d0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
51e0: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
51f0: 74 61 74 65 3d 3f 20 20 20 57 48 45 52 45 20 69 tate=? WHERE i
5200: 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 65 20 20 d=?;" newstate
5210: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 28 69 66 test-id)). (if
5220: 20 6e 65 77 73 74 61 74 75 73 20 20 28 73 71 6c newstatus (sql
5230: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
5240: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
5250: 54 20 73 74 61 74 75 73 3d 3f 20 20 57 48 45 52 T status=? WHER
5260: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 E id=?;" newstat
5270: 75 73 20 20 74 65 73 74 2d 69 64 29 29 0a 20 20 us test-id)).
5280: 28 69 66 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 28 (if newcomment (
5290: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
52a0: 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 db "UPDATE tests
52b0: 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 SET comment=? W
52c0: 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 63 HERE id=?;" newc
52d0: 6f 6d 6d 65 6e 74 20 74 65 73 74 2d 69 64 29 29 omment test-id))
52e0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
52f0: 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 est-set-state-st
5300: 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69 64 2d 74 atus-by-run-id-t
5310: 65 73 74 6e 61 6d 65 20 64 62 20 72 75 6e 2d 69 estname db run-i
5320: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
5330: 2d 70 61 74 68 20 73 74 61 74 75 73 20 73 74 61 -path status sta
5340: 74 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 te). (sqlite3:e
5350: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
5360: 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 74 E tests SET stat
5370: 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 2c 65 76 65 e=?,status=?,eve
5380: 6e 74 5f 74 69 6d 65 3d 73 74 72 66 74 69 6d 65 nt_time=strftime
5390: 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 57 48 45 ('%s','now') WHE
53a0: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
53b0: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
53c0: 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 0a 09 09 tem_path=?;" ...
53d0: 20 20 20 73 74 61 74 65 20 73 74 61 74 75 73 20 state status
53e0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
53f0: 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a 28 64 item-path))..(d
5400: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 63 6f efine (db:get-co
5410: 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e 69 6e unt-tests-runnin
5420: 67 20 64 62 29 0a 20 20 28 6c 65 74 20 28 28 72 g db). (let ((r
5430: 65 73 20 30 29 29 0a 20 20 20 20 28 73 71 6c 69 es 0)). (sqli
5440: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
5450: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 . (lambda (c
5460: 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 28 73 65 ount). (se
5470: 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 0a 20 t! res count)).
5480: 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c db. "SEL
5490: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 ECT count(id) FR
54a0: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 OM tests WHERE s
54b0: 74 61 74 65 20 3d 20 27 52 55 4e 4e 49 4e 47 27 tate = 'RUNNING'
54c0: 20 4f 52 20 73 74 61 74 65 20 3d 20 27 4c 41 55 OR state = 'LAU
54d0: 4e 43 48 45 44 27 20 4f 52 20 73 74 61 74 65 20 NCHED' OR state
54e0: 3d 20 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 = 'REMOTEHOSTSTA
54f0: 52 54 27 3b 22 29 0a 20 20 20 20 72 65 73 29 29 RT';"). res))
5500: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 ..(define (db:ge
5510: 74 2d 63 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 t-count-tests-ru
5520: 6e 6e 69 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 nning-in-jobgrou
5530: 70 20 64 62 20 6a 6f 62 67 72 6f 75 70 29 0a 20 p db jobgroup).
5540: 20 28 69 66 20 28 6e 6f 74 20 6a 6f 62 67 72 6f (if (not jobgro
5550: 75 70 29 0a 20 20 20 20 20 20 30 20 3b 3b 20 0a up). 0 ;; .
5560: 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 (let ((res
5570: 20 30 29 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 0))..(sqlite3:f
5580: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 28 6c or-each-row.. (l
5590: 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 09 20 ambda (count)..
55a0: 20 20 28 73 65 74 21 20 72 65 73 20 63 6f 75 6e (set! res coun
55b0: 74 29 29 0a 09 20 64 62 0a 09 20 22 53 45 4c 45 t)).. db.. "SELE
55c0: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
55d0: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 74 M tests WHERE st
55e0: 61 74 65 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 ate = 'RUNNING'
55f0: 4f 52 20 73 74 61 74 65 20 3d 20 27 4c 41 55 4e OR state = 'LAUN
5600: 43 48 45 44 27 20 4f 52 20 73 74 61 74 65 20 3d CHED' OR state =
5610: 20 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 'REMOTEHOSTSTAR
5620: 54 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 T'.
5630: 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 AND testname in
5640: 28 53 45 4c 45 43 54 20 74 65 73 74 6e 61 6d 65 (SELECT testname
5650: 20 46 52 4f 4d 20 74 65 73 74 5f 6d 65 74 61 20 FROM test_meta
5660: 57 48 45 52 45 20 6a 6f 62 67 72 6f 75 70 3d 3f WHERE jobgroup=?
5670: 3b 22 0a 09 20 6a 6f 62 67 72 6f 75 70 29 0a 09 ;".. jobgroup)..
5680: 72 65 73 29 29 29 0a 0a 3b 3b 20 64 6f 6e 65 20 res)))..;; done
5690: 77 69 74 68 20 72 75 6e 20 77 68 65 6e 3a 0a 3b with run when:.;
56a0: 3b 20 20 20 30 20 74 65 73 74 73 20 69 6e 20 4c ; 0 tests in L
56b0: 41 55 4e 43 48 45 44 2c 20 4e 4f 54 5f 53 54 41 AUNCHED, NOT_STA
56c0: 52 54 45 44 2c 20 52 45 4d 4f 54 45 48 4f 53 54 RTED, REMOTEHOST
56d0: 53 54 41 52 54 2c 20 52 55 4e 4e 49 4e 47 0a 28 START, RUNNING.(
56e0: 64 65 66 69 6e 65 20 28 64 62 3a 65 73 74 69 6d define (db:estim
56f0: 61 74 65 64 2d 74 65 73 74 73 2d 72 65 6d 61 69 ated-tests-remai
5700: 6e 69 6e 67 20 64 62 20 72 75 6e 2d 69 64 29 0a ning db run-id).
5710: 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 29 29 (let ((res 0))
5720: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f . (sqlite3:fo
5730: 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 r-each-row.
5740: 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a (lambda (count).
5750: 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 (set! res
5760: 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 20 64 62 count)). db
5770: 20 3b 3b 20 4e 42 2f 2f 20 4b 49 4c 4c 52 45 51 ;; NB// KILLREQ
5780: 20 6d 65 61 6e 73 20 74 68 65 20 6a 6f 62 73 20 means the jobs
5790: 69 73 20 73 74 69 6c 6c 20 70 72 6f 62 61 62 6c is still probabl
57a0: 79 20 72 75 6e 6e 69 6e 67 0a 20 20 20 20 20 22 y running. "
57b0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 SELECT count(id)
57c0: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
57d0: 45 20 73 74 61 74 65 20 69 6e 20 28 27 4c 41 55 E state in ('LAU
57e0: 4e 43 48 45 44 27 2c 27 4e 4f 54 5f 53 54 41 52 NCHED','NOT_STAR
57f0: 54 45 44 27 2c 27 52 45 4d 4f 54 45 48 4f 53 54 TED','REMOTEHOST
5800: 53 54 41 52 54 27 2c 27 52 55 4e 4e 49 4e 47 27 START','RUNNING'
5810: 2c 27 4b 49 4c 4c 52 45 51 27 29 20 41 4e 44 20 ,'KILLREQ') AND
5820: 72 75 6e 5f 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 run_id=?;" run-i
5830: 64 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b d). res))..;;
5840: 20 4e 42 2f 2f 20 53 79 6e 63 20 74 68 69 73 20 NB// Sync this
5850: 77 69 74 68 20 72 75 6e 73 3a 67 65 74 2d 74 65 with runs:get-te
5860: 73 74 2d 69 6e 66 6f 0a 28 64 65 66 69 6e 65 20 st-info.(define
5870: 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 (db:get-test-inf
5880: 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 o db run-id test
5890: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a name item-path).
58a0: 20 20 28 6c 65 74 20 28 28 72 65 73 20 23 66 29 (let ((res #f)
58b0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
58c0: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 or-each-row.
58d0: 20 28 6c 61 6d 62 64 61 20 28 69 64 20 72 75 6e (lambda (id run
58e0: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
58f0: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
5900: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
5910: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
5920: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
5930: 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 h run_duration f
5940: 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal_logf commen
5950: 74 20 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 t ). (set!
5960: 20 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 20 res (vector id
5970: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5980: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
5990: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
59a0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
59b0: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
59c0: 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f path run_duratio
59d0: 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d n final_logf com
59e0: 6d 65 6e 74 20 29 29 29 0a 20 20 20 20 20 64 62 ment ))). db
59f0: 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 . "SELECT i
5a00: 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d d,run_id,testnam
5a10: 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 e,state,status,e
5a20: 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 vent_time,host,c
5a30: 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c puload,diskfree,
5a40: 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 uname,rundir,ite
5a50: 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 m_path,run_durat
5a60: 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 ion,final_logf,c
5a70: 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 omment FROM test
5a80: 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f s WHERE run_id=?
5a90: 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 AND testname=?
5aa0: 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b AND item_path=?;
5ab0: 22 0a 20 20 20 20 20 72 75 6e 2d 69 64 20 74 65 ". run-id te
5ac0: 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 stname item-path
5ad0: 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 ). res))..;;
5ae0: 47 65 74 20 74 65 73 74 20 64 61 74 61 20 75 73 Get test data us
5af0: 69 6e 67 20 74 65 73 74 5f 69 64 0a 28 64 65 66 ing test_id.(def
5b00: 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 65 73 74 ine (db:get-test
5b10: 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 74 -data-by-id db t
5b20: 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 est-id). (let (
5b30: 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 (res #f)). (s
5b40: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
5b50: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
5b60: 20 28 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 (id run-id test
5b70: 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 name state statu
5b80: 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 s event-time hos
5b90: 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 t cpuload diskfr
5ba0: 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 ee uname rundir
5bb0: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 item-path run_du
5bc0: 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 ration final_log
5bd0: 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 f comment).
5be0: 20 20 28 73 65 74 21 20 72 65 73 20 28 76 65 63 (set! res (vec
5bf0: 74 6f 72 20 69 64 20 72 75 6e 2d 69 64 20 74 65 tor id run-id te
5c00: 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 stname state sta
5c10: 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 tus event-time h
5c20: 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b ost cpuload disk
5c30: 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 free uname rundi
5c40: 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f r item-path run_
5c50: 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c duration final_l
5c60: 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 29 29 0a 20 ogf comment))).
5c70: 20 20 20 20 64 62 20 0a 20 20 20 20 20 22 53 45 db . "SE
5c80: 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 LECT id,run_id,t
5c90: 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 estname,state,st
5ca0: 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c atus,event_time,
5cb0: 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 host,cpuload,dis
5cc0: 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 kfree,uname,rund
5cd0: 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e ir,item_path,run
5ce0: 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f _duration,final_
5cf0: 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f logf,comment FRO
5d00: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 M tests WHERE id
5d10: 3d 3f 3b 22 0a 20 20 20 20 20 74 65 73 74 2d 69 =?;". test-i
5d20: 64 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 0a 28 d). res))...(
5d30: 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d define (db:test-
5d40: 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 64 62 20 72 set-comment db r
5d50: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
5d60: 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 6e item-path commen
5d70: 74 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 t). (sqlite3:ex
5d80: 65 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 ecute . db .
5d90: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 "UPDATE tests S
5da0: 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 ET comment=? WHE
5db0: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
5dc0: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
5dd0: 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 20 tem_path=?;".
5de0: 63 6f 6d 6d 65 6e 74 20 72 75 6e 2d 69 64 20 74 comment run-id t
5df0: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
5e00: 74 68 29 29 0a 0a 3b 3b 0a 28 64 65 66 69 6e 65 th))..;;.(define
5e10: 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 72 75 (db:test-set-ru
5e20: 6e 64 69 72 21 20 64 62 20 72 75 6e 2d 69 64 20 ndir! db run-id
5e30: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
5e40: 61 74 68 20 72 75 6e 64 69 72 29 0a 20 20 28 73 ath rundir). (s
5e50: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a qlite3:execute .
5e60: 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 54 db . "UPDAT
5e70: 45 20 74 65 73 74 73 20 53 45 54 20 72 75 6e 64 E tests SET rund
5e80: 69 72 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 ir=? WHERE run_i
5e90: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
5ea0: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
5eb0: 3d 3f 3b 22 0a 20 20 20 72 75 6e 64 69 72 20 72 =?;". rundir r
5ec0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
5ed0: 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a 28 64 65 item-path))..(de
5ee0: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 fine (db:test-se
5ef0: 74 2d 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69 64 t-log! db run-id
5f00: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d test-name item-
5f10: 70 61 74 68 20 6c 6f 67 66 29 0a 20 20 28 73 71 path logf). (sq
5f20: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
5f30: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 "UPDATE tests S
5f40: 45 54 20 66 69 6e 61 6c 5f 6c 6f 67 66 3d 3f 20 ET final_logf=?
5f50: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
5f60: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
5f70: 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 D item_path=?;"
5f80: 0a 09 09 20 20 20 6c 6f 67 66 20 72 75 6e 2d 69 ... logf run-i
5f90: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
5fa0: 2d 70 61 74 68 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d -path))..;;=====
5fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5ff0: 3d 0a 3b 3b 20 4d 69 73 63 2e 20 74 65 73 74 20 =.;; Misc. test
6000: 72 65 6c 61 74 65 64 20 71 75 65 72 69 65 73 0a related queries.
6010: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
6020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6050: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e ========..(defin
6060: 65 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 e (db:test-get-p
6070: 61 74 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 aths-matching db
6080: 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 keynames target
6090: 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 ). (let* ((res
60a0: 27 28 29 29 0a 09 20 28 69 74 65 6d 70 61 74 74 '()).. (itempatt
60b0: 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 (if (args:get
60c0: 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 -arg "-itempatt"
60d0: 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 )(args:get-arg "
60e0: 2d 69 74 65 6d 70 61 74 74 22 29 20 22 25 22 29 -itempatt") "%")
60f0: 29 0a 09 20 28 74 65 73 74 70 61 74 74 20 20 20 ).. (testpatt
6100: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
6110: 67 20 22 2d 74 65 73 74 70 61 74 74 22 29 28 61 g "-testpatt")(a
6120: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 rgs:get-arg "-te
6130: 73 74 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 stpatt") "%"))..
6140: 20 28 73 74 61 74 65 70 61 74 74 20 20 28 69 66 (statepatt (if
6150: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
6160: 3a 73 74 61 74 65 22 29 20 20 20 28 61 72 67 73 :state") (args
6170: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 :get-arg ":state
6180: 22 29 20 20 20 20 22 25 22 29 29 0a 09 20 28 73 ") "%")).. (s
6190: 74 61 74 75 73 70 61 74 74 20 28 69 66 20 28 61 tatuspatt (if (a
61a0: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
61b0: 61 74 75 73 22 29 20 20 28 61 72 67 73 3a 67 65 atus") (args:ge
61c0: 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 t-arg ":status")
61d0: 20 20 20 22 25 22 29 29 0a 09 20 28 72 75 6e 6e "%")).. (runn
61e0: 61 6d 65 20 20 20 20 28 69 66 20 28 61 72 67 73 ame (if (args
61f0: 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 :get-arg ":runna
6200: 6d 65 22 29 20 28 61 72 67 73 3a 67 65 74 2d 61 me") (args:get-a
6210: 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 rg ":runname")
6220: 22 25 22 29 29 0a 09 20 28 6b 65 79 73 74 72 20 "%")).. (keystr
6230: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
6240: 72 73 65 20 0a 09 09 20 20 28 6d 61 70 20 28 6c rse ... (map (l
6250: 61 6d 62 64 61 20 28 6b 65 79 20 76 61 6c 29 0a ambda (key val).
6260: 09 09 09 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b ... (conc "r." k
6270: 65 79 20 22 20 6c 69 6b 65 20 27 22 20 76 61 6c ey " like '" val
6280: 20 22 27 22 29 29 0a 09 09 20 20 20 20 20 20 20 "'"))...
6290: 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 keynames ...
62a0: 20 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 (string-split
62b0: 20 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 09 target "/"))...
62c0: 20 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28 71 " AND ")).. (q
62d0: 72 79 73 74 72 20 28 63 6f 6e 63 20 22 53 45 4c rystr (conc "SEL
62e0: 45 43 54 20 74 2e 72 75 6e 64 69 72 20 46 52 4f ECT t.rundir FRO
62f0: 4d 20 74 65 73 74 73 20 41 53 20 74 20 49 4e 4e M tests AS t INN
6300: 45 52 20 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 ER JOIN runs AS
6310: 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e r ON t.run_id=r.
6320: 69 64 20 57 48 45 52 45 20 22 0a 09 09 20 20 20 id WHERE "...
6330: 20 20 20 20 6b 65 79 73 74 72 20 22 20 41 4e 44 keystr " AND
6340: 20 72 2e 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 r.runname LIKE
6350: 27 22 20 72 75 6e 6e 61 6d 65 20 22 27 20 41 4e '" runname "' AN
6360: 44 20 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 D item_path LIKE
6370: 20 27 22 20 69 74 65 6d 70 61 74 74 20 22 27 20 '" itempatt "'
6380: 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 4c 49 4b AND testname LIK
6390: 45 20 27 22 0a 09 09 20 20 20 20 20 20 20 74 65 E '"... te
63a0: 73 74 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e stpatt "' AND t.
63b0: 73 74 61 74 65 20 4c 49 4b 45 20 27 22 20 73 74 state LIKE '" st
63c0: 61 74 65 70 61 74 74 20 22 27 20 41 4e 44 20 74 atepatt "' AND t
63d0: 2e 73 74 61 74 75 73 20 4c 49 4b 45 20 27 22 20 .status LIKE '"
63e0: 73 74 61 74 75 73 70 61 74 74 20 0a 09 09 20 20 statuspatt ...
63f0: 20 20 20 20 20 22 27 4f 52 44 45 52 20 42 59 20 "'ORDER BY
6400: 74 2e 65 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 t.event_time ASC
6410: 3b 22 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 ;"))). (debug
6420: 3a 70 72 69 6e 74 20 33 20 22 71 72 79 73 74 72 :print 3 "qrystr
6430: 3a 20 22 20 71 72 79 73 74 72 29 0a 20 20 20 20 : " qrystr).
6440: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 (sqlite3:for-eac
6450: 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d h-row . (lam
6460: 62 64 61 20 28 70 29 0a 20 20 20 20 20 20 20 28 bda (p). (
6470: 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 70 set! res (cons p
6480: 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 62 20 res))). db
6490: 0a 20 20 20 20 20 71 72 79 73 74 72 29 0a 20 20 . qrystr).
64a0: 20 20 72 65 73 29 29 0a 0a 28 64 65 66 69 6e 65 res))..(define
64b0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 (db:test-get-te
64c0: 73 74 2d 72 65 63 6f 72 64 73 2d 6d 61 74 63 68 st-records-match
64d0: 69 6e 67 20 64 62 20 6b 65 79 6e 61 6d 65 73 20 ing db keynames
64e0: 74 61 72 67 65 74 29 0a 20 20 28 6c 65 74 2a 20 target). (let*
64f0: 28 28 72 65 73 20 27 28 29 29 0a 09 20 28 69 74 ((res '()).. (it
6500: 65 6d 70 61 74 74 20 20 20 28 69 66 20 28 61 72 empatt (if (ar
6510: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 69 74 65 gs:get-arg "-ite
6520: 6d 70 61 74 74 22 29 28 61 72 67 73 3a 67 65 74 mpatt")(args:get
6530: 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 -arg "-itempatt"
6540: 29 20 22 25 22 29 29 0a 09 20 28 74 65 73 74 70 ) "%")).. (testp
6550: 61 74 74 20 20 20 28 69 66 20 28 61 72 67 73 3a att (if (args:
6560: 67 65 74 2d 61 72 67 20 22 2d 74 65 73 74 70 61 get-arg "-testpa
6570: 74 74 22 29 28 61 72 67 73 3a 67 65 74 2d 61 72 tt")(args:get-ar
6580: 67 20 22 2d 74 65 73 74 70 61 74 74 22 29 20 22 g "-testpatt") "
6590: 25 22 29 29 0a 09 20 28 73 74 61 74 65 70 61 74 %")).. (statepat
65a0: 74 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 t (if (args:get
65b0: 2d 61 72 67 20 22 3a 73 74 61 74 65 22 29 20 20 -arg ":state")
65c0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
65d0: 3a 73 74 61 74 65 22 29 20 20 20 20 22 25 22 29 :state") "%")
65e0: 29 0a 09 20 28 73 74 61 74 75 73 70 61 74 74 20 ).. (statuspatt
65f0: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
6600: 67 20 22 3a 73 74 61 74 75 73 22 29 20 20 28 61 g ":status") (a
6610: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
6620: 61 74 75 73 22 29 20 20 20 22 25 22 29 29 0a 09 atus") "%"))..
6630: 20 28 72 75 6e 6e 61 6d 65 20 20 20 20 28 69 66 (runname (if
6640: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
6650: 3a 72 75 6e 6e 61 6d 65 22 29 20 28 61 72 67 73 :runname") (args
6660: 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 :get-arg ":runna
6670: 6d 65 22 29 20 20 22 25 22 29 29 0a 09 20 28 6b me") "%")).. (k
6680: 65 79 73 74 72 20 28 73 74 72 69 6e 67 2d 69 6e eystr (string-in
6690: 74 65 72 73 70 65 72 73 65 20 0a 09 09 20 20 28 tersperse ... (
66a0: 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 map (lambda (key
66b0: 20 76 61 6c 29 0a 09 09 09 20 28 63 6f 6e 63 20 val).... (conc
66c0: 22 72 2e 22 20 6b 65 79 20 22 20 6c 69 6b 65 20 "r." key " like
66d0: 27 22 20 76 61 6c 20 22 27 22 29 29 0a 09 09 20 '" val "'"))...
66e0: 20 20 20 20 20 20 6b 65 79 6e 61 6d 65 73 20 0a keynames .
66f0: 09 09 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 .. (string
6700: 2d 73 70 6c 69 74 20 74 61 72 67 65 74 20 22 2f -split target "/
6710: 22 29 29 0a 09 09 20 20 22 20 41 4e 44 20 22 29 "))... " AND ")
6720: 29 0a 09 20 28 71 72 79 73 74 72 20 28 63 6f 6e ).. (qrystr (con
6730: 63 20 22 53 45 4c 45 43 54 20 0a 20 20 20 20 20 c "SELECT .
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6750: 20 20 20 20 20 20 20 74 2e 69 64 0a 20 20 20 20 t.id.
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6770: 20 20 20 20 20 20 20 20 74 2e 72 75 6e 5f 69 64 t.run_id
6780: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 .
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67a0: 20 20 74 2e 74 65 73 74 6e 61 6d 65 20 20 20 0a t.testname .
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 68 6f t.ho
67d0: 73 74 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 st .
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67f0: 20 20 20 20 20 20 74 2e 63 70 75 6c 6f 61 64 20 t.cpuload
6800: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
6810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6820: 74 2e 64 69 73 6b 66 72 65 65 20 20 20 0a 20 20 t.diskfree .
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6840: 20 20 20 20 20 20 20 20 20 20 74 2e 75 6e 61 6d t.unam
6850: 65 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 e .
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6870: 20 20 20 20 74 2e 72 75 6e 64 69 72 20 20 20 20 t.rundir
6880: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
68a0: 73 68 6f 72 74 64 69 72 20 20 20 0a 20 20 20 20 shortdir .
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68c0: 20 20 20 20 20 20 20 20 74 2e 69 74 65 6d 5f 70 t.item_p
68d0: 61 74 68 20 20 0a 20 20 20 20 20 20 20 20 20 20 ath .
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68f0: 20 20 74 2e 73 74 61 74 65 20 20 20 20 20 20 0a t.state .
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6910: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 73 74 t.st
6920: 61 74 75 73 20 20 20 20 20 0a 20 20 20 20 20 20 atus .
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6940: 20 20 20 20 20 20 74 2e 61 74 74 65 6d 70 74 6e t.attemptn
6950: 75 6d 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 um .
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6970: 74 2e 66 69 6e 61 6c 5f 6c 6f 67 66 20 0a 20 20 t.final_logf .
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6990: 20 20 20 20 20 20 20 20 20 20 74 2e 6c 6f 67 64 t.logd
69a0: 61 74 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 at .
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69c0: 20 20 20 20 74 2e 72 75 6e 5f 64 75 72 61 74 69 t.run_durati
69d0: 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 o.
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
69f0: 63 6f 6d 6d 65 6e 74 20 20 20 20 0a 20 20 20 20 comment .
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a10: 20 20 20 20 20 20 20 20 74 2e 65 76 65 6e 74 5f t.event_
6a20: 74 69 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 time .
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a40: 20 20 74 2e 66 61 69 6c 5f 63 6f 75 6e 74 20 0a t.fail_count .
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 70 61 t.pa
6a70: 73 73 5f 63 6f 75 6e 74 20 0a 20 20 20 20 20 20 ss_count .
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a90: 20 20 20 20 20 20 74 2e 61 72 63 68 69 76 65 64 t.archived
6aa0: 20 20 20 0a 0a 0a 0a 20 46 52 4f 4d 20 74 65 73 .... FROM tes
6ab0: 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f ts AS t INNER JO
6ac0: 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 IN runs AS r ON
6ad0: 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 t.run_id=r.id WH
6ae0: 45 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 6b ERE "... k
6af0: 65 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 75 eystr " AND r.ru
6b00: 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 nname LIKE '" ru
6b10: 6e 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 74 65 nname "' AND ite
6b20: 6d 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 20 69 m_path LIKE '" i
6b30: 74 65 6d 70 61 74 74 20 22 27 20 41 4e 44 20 74 tempatt "' AND t
6b40: 65 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 22 0a estname LIKE '".
6b50: 09 09 20 20 20 20 20 20 20 74 65 73 74 70 61 74 .. testpat
6b60: 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 65 t "' AND t.state
6b70: 20 4c 49 4b 45 20 27 22 20 73 74 61 74 65 70 61 LIKE '" statepa
6b80: 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 tt "' AND t.stat
6b90: 75 73 20 4c 49 4b 45 20 27 22 20 73 74 61 74 75 us LIKE '" statu
6ba0: 73 70 61 74 74 20 0a 09 09 20 20 20 20 20 20 20 spatt ...
6bb0: 22 27 4f 52 44 45 52 20 42 59 20 74 2e 65 76 65 "'ORDER BY t.eve
6bc0: 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 29 nt_time ASC;")))
6bd0: 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e . (debug:prin
6be0: 74 20 33 20 22 71 72 79 73 74 72 3a 20 22 20 71 t 3 "qrystr: " q
6bf0: 72 79 73 74 72 29 0a 20 20 20 20 28 73 71 6c 69 rystr). (sqli
6c00: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
6c10: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 . (lambda (
6c20: 70 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 p). (set!
6c30: 72 65 73 20 28 63 6f 6e 73 20 70 20 72 65 73 29 res (cons p res)
6c40: 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 )). db .
6c50: 20 71 72 79 73 74 72 29 0a 20 20 20 20 72 65 73 qrystr). res
6c60: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
6c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
6cb0: 51 55 45 55 45 20 55 50 20 4d 45 54 41 2c 20 54 QUEUE UP META, T
6cc0: 45 53 54 20 53 54 41 54 55 53 20 41 4e 44 20 53 EST STATUS AND S
6cd0: 54 45 50 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d TEPS.;;=========
6ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6cf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 =============..(
6d20: 64 65 66 69 6e 65 20 28 64 62 3a 75 70 64 61 74 define (db:updat
6d30: 65 72 20 64 62 29 0a 20 20 28 6c 65 74 20 6c 6f er db). (let lo
6d40: 6f 70 20 28 28 73 74 61 72 74 2d 74 69 6d 65 20 op ((start-time
6d50: 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 29 29 29 (current-time)))
6d60: 0a 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 . (thread-sle
6d70: 65 70 21 20 30 2e 35 29 20 3b 3b 20 6d 6f 76 65 ep! 0.5) ;; move
6d80: 20 73 61 76 65 20 74 69 6d 65 20 61 72 6f 75 6e save time aroun
6d90: 64 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 72 65 d to minimize re
6da0: 67 75 6c 61 72 20 63 6f 6c 6c 69 73 69 6f 6e 73 gular collisions
6db0: 3f 0a 20 20 20 20 28 64 62 3a 77 72 69 74 65 2d ?. (db:write-
6dc0: 63 61 63 68 65 64 2d 64 61 74 61 20 64 62 29 0a cached-data db).
6dd0: 20 20 20 20 28 6c 6f 6f 70 20 73 74 61 72 74 2d (loop start-
6de0: 74 69 6d 65 29 29 29 0a 20 20 20 20 0a 28 64 65 time))). .(de
6df0: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 75 70 fine (db:test-up
6e00: 64 61 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 date-meta-info d
6e10: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
6e20: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 6d 69 6e me item-path min
6e30: 75 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 utes cpuload dis
6e40: 6b 66 72 65 65 20 74 6d 70 66 72 65 65 29 0a 20 kfree tmpfree).
6e50: 20 28 69 66 20 28 6e 6f 74 20 69 74 65 6d 2d 70 (if (not item-p
6e60: 61 74 68 29 0a 20 20 20 20 20 20 28 62 65 67 69 ath). (begi
6e70: 6e 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 n (debug:print 0
6e80: 20 22 57 41 52 4e 49 4e 47 3a 20 49 54 45 4d 50 "WARNING: ITEMP
6e90: 41 54 48 20 6e 6f 74 20 73 65 74 2e 22 29 20 20 ATH not set.")
6ea0: 20 0a 09 20 20 20 20 20 28 73 65 74 21 20 69 74 .. (set! it
6eb0: 65 6d 2d 70 61 74 68 20 22 22 29 29 29 0a 20 20 em-path ""))).
6ec0: 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 6e (mutex-lock! *in
6ed0: 63 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 coming-mutex*).
6ee0: 20 28 73 65 74 21 20 2a 69 6e 63 6f 6d 69 6e 67 (set! *incoming
6ef0: 2d 64 61 74 61 2a 20 28 63 6f 6e 73 20 28 76 65 -data* (cons (ve
6f00: 63 74 6f 72 20 27 6d 65 74 61 2d 69 6e 66 6f 0a ctor 'meta-info.
6f10: 09 09 09 09 20 20 20 20 20 20 28 63 75 72 72 65 .... (curre
6f20: 6e 74 2d 73 65 63 6f 6e 64 73 29 0a 09 09 09 09 nt-seconds).....
6f30: 20 20 20 20 20 20 28 6c 69 73 74 20 63 70 75 6c (list cpul
6f40: 6f 61 64 0a 09 09 09 09 09 20 20 20 20 64 69 73 oad...... dis
6f50: 6b 66 72 65 65 0a 09 09 09 09 09 20 20 20 20 6d kfree...... m
6f60: 69 6e 75 74 65 73 0a 09 09 09 09 09 20 20 20 20 inutes......
6f70: 72 75 6e 2d 69 64 0a 09 09 09 09 09 20 20 20 20 run-id......
6f80: 74 65 73 74 2d 6e 61 6d 65 0a 09 09 09 09 09 20 test-name......
6f90: 20 20 20 69 74 65 6d 2d 70 61 74 68 29 29 20 3b item-path)) ;
6fa0: 3b 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 ; run-id test-na
6fb0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 6d 69 6e me item-path min
6fc0: 75 74 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 utes cpuload dis
6fd0: 6b 66 72 65 65 20 74 6d 70 66 72 65 65 29 20 0a kfree tmpfree) .
6fe0: 09 09 09 20 20 20 20 20 20 2a 69 6e 63 6f 6d 69 ... *incomi
6ff0: 6e 67 2d 64 61 74 61 2a 29 29 0a 20 20 28 6d 75 ng-data*)). (mu
7000: 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 tex-unlock! *inc
7010: 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 oming-mutex*).
7020: 28 69 66 20 28 6e 6f 74 20 2a 63 61 63 68 65 2d (if (not *cache-
7030: 6f 6e 2a 29 28 64 62 3a 77 72 69 74 65 2d 63 61 on*)(db:write-ca
7040: 63 68 65 64 2d 64 61 74 61 20 64 62 29 29 29 0a ched-data db))).
7050: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 77 72 69 .(define (db:wri
7060: 74 65 2d 63 61 63 68 65 64 2d 64 61 74 61 20 64 te-cached-data d
7070: 62 29 0a 20 20 28 6c 65 74 20 28 28 6d 65 74 61 b). (let ((meta
7080: 2d 73 74 6d 74 20 28 73 71 6c 69 74 65 33 3a 70 -stmt (sqlite3:p
7090: 72 65 70 61 72 65 20 64 62 20 22 55 50 44 41 54 repare db "UPDAT
70a0: 45 20 74 65 73 74 73 20 53 45 54 20 63 70 75 6c E tests SET cpul
70b0: 6f 61 64 3d 3f 2c 64 69 73 6b 66 72 65 65 3d 3f oad=?,diskfree=?
70c0: 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 3d 3f 2c ,run_duration=?,
70d0: 73 74 61 74 65 3d 27 52 55 4e 4e 49 4e 47 27 20 state='RUNNING'
70e0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
70f0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
7100: 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 20 41 4e D item_path=? AN
7110: 44 20 73 74 61 74 65 20 4e 4f 54 20 49 4e 20 28 D state NOT IN (
7120: 27 43 4f 4d 50 4c 45 54 45 44 27 2c 27 4b 49 4c 'COMPLETED','KIL
7130: 4c 52 45 51 27 2c 27 4b 49 4c 4c 45 44 27 29 3b LREQ','KILLED');
7140: 22 29 29 0a 09 28 73 74 65 70 2d 73 74 6d 74 20 "))..(step-stmt
7150: 28 73 71 6c 69 74 65 33 3a 70 72 65 70 61 72 65 (sqlite3:prepare
7160: 20 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 52 db "INSERT OR R
7170: 45 50 4c 41 43 45 20 69 6e 74 6f 20 74 65 73 74 EPLACE into test
7180: 5f 73 74 65 70 73 20 28 74 65 73 74 5f 69 64 2c _steps (test_id,
7190: 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c 73 stepname,state,s
71a0: 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 tatus,event_time
71b0: 2c 63 6f 6d 6d 65 6e 74 2c 6c 6f 67 66 69 6c 65 ,comment,logfile
71c0: 29 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f ) VALUES(?,?,?,?
71d0: 2c 3f 2c 3f 2c 3f 29 3b 22 29 29 20 3b 3b 20 73 ,?,?,?);")) ;; s
71e0: 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f trftime('%s','no
71f0: 77 27 29 23 66 29 0a 09 28 64 61 74 61 20 28 73 w')#f)..(data (s
7200: 6f 72 74 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 ort *incoming-da
7210: 74 61 2a 20 28 6c 61 6d 62 64 61 20 28 61 20 62 ta* (lambda (a b
7220: 29 28 3c 20 28 76 65 63 74 6f 72 2d 72 65 66 20 )(< (vector-ref
7230: 61 20 31 29 28 76 65 63 74 6f 72 2d 72 65 66 20 a 1)(vector-ref
7240: 62 20 31 29 29 29 29 29 29 0a 20 20 20 20 28 69 b 1)))))). (i
7250: 66 20 28 3e 20 28 6c 65 6e 67 74 68 20 64 61 74 f (> (length dat
7260: 61 29 20 30 29 0a 09 28 64 65 62 75 67 3a 70 72 a) 0)..(debug:pr
7270: 69 6e 74 20 34 20 22 57 72 69 74 69 6e 67 20 63 int 4 "Writing c
7280: 61 63 68 65 64 20 64 61 74 61 20 22 20 64 61 74 ached data " dat
7290: 61 29 29 0a 20 20 20 20 28 6d 75 74 65 78 2d 6c a)). (mutex-l
72a0: 6f 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d ock! *incoming-m
72b0: 75 74 65 78 2a 29 0a 20 20 20 20 28 73 71 6c 69 utex*). (sqli
72c0: 74 65 33 3a 77 69 74 68 2d 74 72 61 6e 73 61 63 te3:with-transac
72d0: 74 69 6f 6e 20 0a 20 20 20 20 20 64 62 0a 20 20 tion . db.
72e0: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 (lambda ().
72f0: 20 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 28 (for-each (
7300: 6c 61 6d 62 64 61 20 28 65 6e 74 72 79 29 0a 09 lambda (entry)..
7310: 09 20 20 20 28 63 61 73 65 20 28 76 65 63 74 6f . (case (vecto
7320: 72 2d 72 65 66 20 65 6e 74 72 79 20 30 29 0a 09 r-ref entry 0)..
7330: 09 20 20 20 20 20 28 28 6d 65 74 61 2d 69 6e 66 . ((meta-inf
7340: 6f 29 0a 09 09 20 20 20 20 20 20 28 61 70 70 6c o)... (appl
7350: 79 20 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 y sqlite3:execut
7360: 65 20 6d 65 74 61 2d 73 74 6d 74 20 28 76 65 63 e meta-stmt (vec
7370: 74 6f 72 2d 72 65 66 20 65 6e 74 72 79 20 32 29 tor-ref entry 2)
7380: 29 29 0a 09 09 20 20 20 20 20 28 28 73 74 65 70 ))... ((step
7390: 2d 73 74 61 74 75 73 29 0a 09 09 20 20 20 20 20 -status)...
73a0: 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 3a (apply sqlite3:
73b0: 65 78 65 63 75 74 65 20 73 74 65 70 2d 73 74 6d execute step-stm
73c0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 6e t (vector-ref en
73d0: 74 72 79 20 32 29 29 29 0a 09 09 20 20 20 20 20 try 2)))...
73e0: 28 65 6c 73 65 0a 09 09 20 20 20 20 20 20 28 64 (else... (d
73f0: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 ebug:print 0 "ER
7400: 52 4f 52 3a 20 51 75 65 75 65 64 20 65 6e 74 72 ROR: Queued entr
7410: 79 20 6e 6f 74 20 72 65 63 6f 67 6e 69 73 65 64 y not recognised
7420: 20 22 20 65 6e 74 72 79 29 29 29 29 0a 09 09 20 " entry))))...
7430: 64 61 74 61 29 29 29 0a 20 20 20 20 28 73 65 74 data))). (set
7440: 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 ! *incoming-data
7450: 2a 20 27 28 29 29 0a 20 20 20 20 28 6d 75 74 65 * '()). (mute
7460: 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d x-unlock! *incom
7470: 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 20 ing-mutex*).
7480: 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a (sqlite3:finaliz
7490: 65 21 20 6d 65 74 61 2d 73 74 6d 74 29 0a 20 20 e! meta-stmt).
74a0: 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c (sqlite3:final
74b0: 69 7a 65 21 20 73 74 65 70 2d 73 74 6d 74 29 29 ize! step-stmt))
74c0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 72 )..(define (db:r
74d0: 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 6c oll-up-pass-fail
74e0: 2d 63 6f 75 6e 74 73 20 64 62 20 72 75 6e 2d 69 -counts db run-i
74f0: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
7500: 2d 70 61 74 68 20 73 74 61 74 75 73 29 0a 20 20 -path status).
7510: 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 28 65 (if (and (not (e
7520: 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 qual? item-path
7530: 22 22 29 29 0a 09 20 20 20 28 6f 72 20 28 65 71 "")).. (or (eq
7540: 75 61 6c 3f 20 73 74 61 74 75 73 20 22 50 41 53 ual? status "PAS
7550: 53 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 S").. (equ
7560: 61 6c 3f 20 73 74 61 74 75 73 20 22 57 41 52 4e al? status "WARN
7570: 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 ").. (equa
7580: 6c 3f 20 73 74 61 74 75 73 20 22 46 41 49 4c 22 l? status "FAIL"
7590: 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 6c ).. (equal
75a0: 3f 20 73 74 61 74 75 73 20 22 57 41 49 56 45 44 ? status "WAIVED
75b0: 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 61 ").. (equa
75c0: 6c 3f 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49 l? status "RUNNI
75d0: 4e 47 22 29 29 29 0a 20 20 20 20 20 20 28 62 65 NG"))). (be
75e0: 67 69 6e 0a 09 28 73 71 6c 69 74 65 33 3a 65 78 gin..(sqlite3:ex
75f0: 65 63 75 74 65 20 0a 09 20 64 62 0a 09 20 22 55 ecute .. db.. "U
7600: 50 44 41 54 45 20 74 65 73 74 73 20 0a 20 20 20 PDATE tests .
7610: 20 20 20 20 20 20 20 20 20 20 53 45 54 20 66 61 SET fa
7620: 69 6c 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 il_count=(SELECT
7630: 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 count(id) FROM
7640: 74 65 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f tests WHERE run_
7650: 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d id=? AND testnam
7660: 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 e=? AND item_pat
7670: 68 20 21 3d 20 27 27 20 41 4e 44 20 73 74 61 74 h != '' AND stat
7680: 75 73 3d 27 46 41 49 4c 27 29 2c 0a 20 20 20 20 us='FAIL'),.
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 73 pas
76a0: 73 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 s_count=(SELECT
76b0: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
76c0: 65 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 ests WHERE run_i
76d0: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
76e0: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
76f0: 20 21 3d 20 27 27 20 41 4e 44 20 28 73 74 61 74 != '' AND (stat
7700: 75 73 3d 27 50 41 53 53 27 20 4f 52 20 73 74 61 us='PASS' OR sta
7710: 74 75 73 3d 27 57 41 52 4e 27 20 4f 52 20 73 74 tus='WARN' OR st
7720: 61 74 75 73 3d 27 57 41 49 56 45 44 27 29 29 0a atus='WAIVED')).
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 WHE
7740: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 RE run_id=? AND
7750: 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 testname=? AND i
7760: 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 0a 09 20 tem_path='';"..
7770: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
7780: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
7790: 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 e run-id test-na
77a0: 6d 65 29 0a 09 28 69 66 20 28 65 71 75 61 6c 3f me)..(if (equal?
77b0: 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 status "RUNNING
77c0: 22 29 20 3b 3b 20 72 75 6e 6e 69 6e 67 20 74 61 ") ;; running ta
77d0: 6b 65 73 20 70 72 69 6f 72 69 74 79 20 6f 76 65 kes priority ove
77e0: 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 74 61 74 r all other stat
77f0: 65 73 2c 20 66 6f 72 63 65 20 74 68 65 20 74 65 es, force the te
7800: 73 74 20 73 74 61 74 65 20 74 6f 20 52 55 4e 4e st state to RUNN
7810: 49 4e 47 0a 09 20 20 20 20 28 73 71 6c 69 74 65 ING.. (sqlite
7820: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
7830: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
7840: 74 61 74 65 3d 3f 20 57 48 45 52 45 20 72 75 6e tate=? WHERE run
7850: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 _id=? AND testna
7860: 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 me=? AND item_pa
7870: 74 68 3d 27 27 3b 22 20 22 52 55 4e 4e 49 4e 47 th='';" "RUNNING
7880: 22 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 " run-id test-na
7890: 6d 65 29 0a 09 20 20 20 20 28 73 71 6c 69 74 65 me).. (sqlite
78a0: 33 3a 65 78 65 63 75 74 65 0a 09 20 20 20 20 20 3:execute..
78b0: 64 62 0a 09 20 20 20 20 20 22 55 50 44 41 54 45 db.. "UPDATE
78c0: 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 20 20 tests.
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 SE
78e0: 54 20 73 74 61 74 65 3d 43 41 53 45 20 57 48 45 T state=CASE WHE
78f0: 4e 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 N (SELECT count(
7900: 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 20 57 id) FROM tests W
7910: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
7920: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
7930: 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 item_path != ''
7940: 20 41 4e 44 20 73 74 61 74 65 20 69 6e 20 28 27 AND state in ('
7950: 52 55 4e 4e 49 4e 47 27 2c 27 4e 4f 54 5f 53 54 RUNNING','NOT_ST
7960: 41 52 54 45 44 27 29 29 20 3e 20 30 20 54 48 45 ARTED')) > 0 THE
7970: 4e 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 N .
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 52 55 'RU
7990: 4e 4e 49 4e 47 27 0a 20 20 20 20 20 20 20 20 20 NNING'.
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c EL
79b0: 53 45 20 27 43 4f 4d 50 4c 45 54 45 44 27 20 45 SE 'COMPLETED' E
79c0: 4e 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ND,.
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
79e0: 61 74 75 73 3d 43 41 53 45 20 57 48 45 4e 20 66 atus=CASE WHEN f
79f0: 61 69 6c 5f 63 6f 75 6e 74 20 3e 20 30 20 54 48 ail_count > 0 TH
7a00: 45 4e 20 27 46 41 49 4c 27 20 57 48 45 4e 20 70 EN 'FAIL' WHEN p
7a10: 61 73 73 5f 63 6f 75 6e 74 20 3e 20 30 20 41 4e ass_count > 0 AN
7a20: 44 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 30 20 54 D fail_count=0 T
7a30: 48 45 4e 20 27 50 41 53 53 27 20 45 4c 53 45 20 HEN 'PASS' ELSE
7a40: 27 55 4e 4b 4e 4f 57 4e 27 20 45 4e 44 0a 20 20 'UNKNOWN' END.
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a60: 20 20 20 20 20 57 48 45 52 45 20 72 75 6e 5f 69 WHERE run_i
7a70: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
7a80: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
7a90: 3d 27 27 3b 22 0a 09 20 20 20 20 20 72 75 6e 2d ='';".. run-
7aa0: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 75 6e id test-name run
7ab0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 29 29 -id test-name)))
7ac0: 29 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d ))...;;=========
7ad0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7ae0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7af0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
7b10: 20 54 65 73 74 73 20 6d 65 74 61 20 64 61 74 61 Tests meta data
7b20: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
7b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7b40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7b50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7b60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 =========..;; re
7b70: 61 64 20 74 68 65 20 72 65 63 6f 72 64 20 67 69 ad the record gi
7b80: 76 65 6e 20 61 20 74 65 73 74 6e 61 6d 65 0a 28 ven a testname.(
7b90: 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 6d define (db:testm
7ba0: 65 74 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 eta-get-record d
7bb0: 62 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 28 6c b testname). (l
7bc0: 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 20 et ((res #f)).
7bd0: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
7be0: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
7bf0: 6d 62 64 61 20 28 69 64 20 74 65 73 74 6e 61 6d mbda (id testnam
7c00: 65 20 61 75 74 68 6f 72 20 6f 77 6e 65 72 20 64 e author owner d
7c10: 65 73 63 72 69 70 74 69 6f 6e 20 72 65 76 69 65 escription revie
7c20: 77 65 64 20 69 74 65 72 61 74 65 64 20 61 76 67 wed iterated avg
7c30: 5f 72 75 6e 74 69 6d 65 20 61 76 67 5f 64 69 73 _runtime avg_dis
7c40: 6b 20 74 61 67 73 29 0a 20 20 20 20 20 20 20 28 k tags). (
7c50: 73 65 74 21 20 72 65 73 20 28 76 65 63 74 6f 72 set! res (vector
7c60: 20 69 64 20 74 65 73 74 6e 61 6d 65 20 61 75 74 id testname aut
7c70: 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 72 69 hor owner descri
7c80: 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 20 69 ption reviewed i
7c90: 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 6e 74 terated avg_runt
7ca0: 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 61 67 ime avg_disk tag
7cb0: 73 29 29 29 0a 20 20 20 20 20 64 62 20 22 53 45 s))). db "SE
7cc0: 4c 45 43 54 20 69 64 2c 74 65 73 74 6e 61 6d 65 LECT id,testname
7cd0: 2c 61 75 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 ,author,owner,de
7ce0: 73 63 72 69 70 74 69 6f 6e 2c 72 65 76 69 65 77 scription,review
7cf0: 65 64 2c 69 74 65 72 61 74 65 64 2c 61 76 67 5f ed,iterated,avg_
7d00: 72 75 6e 74 69 6d 65 2c 61 76 67 5f 64 69 73 6b runtime,avg_disk
7d10: 2c 74 61 67 73 20 46 52 4f 4d 20 74 65 73 74 5f ,tags FROM test_
7d20: 6d 65 74 61 20 57 48 45 52 45 20 74 65 73 74 6e meta WHERE testn
7d30: 61 6d 65 3d 3f 3b 22 0a 20 20 20 20 20 74 65 73 ame=?;". tes
7d40: 74 6e 61 6d 65 29 0a 20 20 20 20 72 65 73 29 29 tname). res))
7d50: 0a 0a 3b 3b 20 63 72 65 61 74 65 20 61 20 6e 65 ..;; create a ne
7d60: 77 20 72 65 63 6f 72 64 20 66 6f 72 20 61 20 67 w record for a g
7d70: 69 76 65 6e 20 74 65 73 74 6e 61 6d 65 0a 28 64 iven testname.(d
7d80: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 efine (db:testme
7d90: 74 61 2d 61 64 64 2d 72 65 63 6f 72 64 20 64 62 ta-add-record db
7da0: 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 28 73 71 testname). (sq
7db0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
7dc0: 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f "INSERT OR IGNO
7dd0: 52 45 20 49 4e 54 4f 20 74 65 73 74 5f 6d 65 74 RE INTO test_met
7de0: 61 20 28 74 65 73 74 6e 61 6d 65 2c 61 75 74 68 a (testname,auth
7df0: 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 69 70 or,owner,descrip
7e00: 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c 69 74 tion,reviewed,it
7e10: 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e 74 69 erated,avg_runti
7e20: 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 67 73 me,avg_disk,tags
7e30: 29 20 56 41 4c 55 45 53 20 28 3f 2c 27 27 2c 27 ) VALUES (?,'','
7e40: 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 ','','','','',''
7e50: 2c 27 27 29 3b 22 20 74 65 73 74 6e 61 6d 65 29 ,'');" testname)
7e60: 29 0a 0a 3b 3b 20 75 70 64 61 74 65 20 6f 6e 65 )..;; update one
7e70: 20 6f 66 20 74 68 65 20 74 65 73 74 6d 65 74 61 of the testmeta
7e80: 20 66 69 65 6c 64 73 0a 28 64 65 66 69 6e 65 20 fields.(define
7e90: 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 75 70 64 (db:testmeta-upd
7ea0: 61 74 65 2d 66 69 65 6c 64 20 64 62 20 74 65 73 ate-field db tes
7eb0: 74 6e 61 6d 65 20 66 69 65 6c 64 20 76 61 6c 75 tname field valu
7ec0: 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 e). (sqlite3:ex
7ed0: 65 63 75 74 65 20 64 62 20 28 63 6f 6e 63 20 22 ecute db (conc "
7ee0: 55 50 44 41 54 45 20 74 65 73 74 5f 6d 65 74 61 UPDATE test_meta
7ef0: 20 53 45 54 20 22 20 66 69 65 6c 64 20 22 3d 3f SET " field "=?
7f00: 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 3d WHERE testname=
7f10: 3f 3b 22 29 20 76 61 6c 75 65 20 74 65 73 74 6e ?;") value testn
7f20: 61 6d 65 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d ame))..;;=======
7f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
7f70: 3b 3b 20 54 20 45 20 53 20 54 20 20 20 44 20 41 ;; T E S T D A
7f80: 20 54 20 41 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d T A .;;========
7f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
7fd0: 28 64 65 66 69 6e 65 20 28 64 62 3a 63 73 76 2d (define (db:csv-
7fe0: 3e 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 >test-data db te
7ff0: 73 74 2d 69 64 20 63 73 76 64 61 74 61 29 0a 20 st-id csvdata).
8000: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
8010: 22 74 65 73 74 2d 69 64 20 22 20 74 65 73 74 2d "test-id " test-
8020: 69 64 20 22 2c 20 63 73 76 64 61 74 61 3a 20 22 id ", csvdata: "
8030: 20 63 73 76 64 61 74 61 29 0a 20 20 28 6c 65 74 csvdata). (let
8040: 20 28 28 63 73 76 6c 69 73 74 20 28 63 73 76 2d ((csvlist (csv-
8050: 3e 6c 69 73 74 20 28 6d 61 6b 65 2d 63 73 76 2d >list (make-csv-
8060: 72 65 61 64 65 72 0a 09 09 09 20 20 20 20 20 28 reader.... (
8070: 6f 70 65 6e 2d 69 6e 70 75 74 2d 73 74 72 69 6e open-input-strin
8080: 67 20 63 73 76 64 61 74 61 29 0a 09 09 09 20 20 g csvdata)....
8090: 20 20 20 27 28 28 73 74 72 69 70 2d 6c 65 61 64 '((strip-lead
80a0: 69 6e 67 2d 77 68 69 74 65 73 70 61 63 65 3f 20 ing-whitespace?
80b0: 23 74 29 0a 09 09 09 20 20 20 20 20 20 20 28 73 #t).... (s
80c0: 74 72 69 70 2d 74 72 61 69 6c 69 6e 67 2d 77 68 trip-trailing-wh
80d0: 69 74 65 73 70 61 63 65 3f 20 23 74 29 29 20 29 itespace? #t)) )
80e0: 29 29 29 20 3b 3b 20 28 63 73 76 2d 3e 6c 69 73 ))) ;; (csv->lis
80f0: 74 20 63 73 76 64 61 74 61 29 29 29 0a 20 20 20 t csvdata))).
8100: 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 (for-each .
8110: 20 28 6c 61 6d 62 64 61 20 28 63 73 76 72 6f 77 (lambda (csvrow
8120: 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 ). (let* (
8130: 28 70 61 64 64 65 64 2d 72 6f 77 20 20 28 74 61 (padded-row (ta
8140: 6b 65 20 28 61 70 70 65 6e 64 20 63 73 76 72 6f ke (append csvro
8150: 77 20 28 6c 69 73 74 20 23 66 20 23 66 20 23 66 w (list #f #f #f
8160: 20 23 66 20 23 66 20 23 66 20 23 66 20 23 66 20 #f #f #f #f #f
8170: 23 66 29 29 20 39 29 29 0a 09 20 20 20 20 20 20 #f)) 9))..
8180: 28 63 61 74 65 67 6f 72 79 20 20 20 20 28 6c 69 (category (li
8190: 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f st-ref padded-ro
81a0: 77 20 30 29 29 0a 09 20 20 20 20 20 20 28 76 61 w 0)).. (va
81b0: 72 69 61 62 6c 65 20 20 20 20 28 6c 69 73 74 2d riable (list-
81c0: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 31 ref padded-row 1
81d0: 29 29 0a 09 20 20 20 20 20 20 28 76 61 6c 75 65 )).. (value
81e0: 20 20 20 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d (any->num
81f0: 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 ber-if-possible
8200: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
8210: 2d 72 6f 77 20 32 29 29 29 0a 09 20 20 20 20 20 -row 2)))..
8220: 20 28 65 78 70 65 63 74 65 64 20 20 20 20 28 61 (expected (a
8230: 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 6f ny->number-if-po
8240: 73 73 69 62 6c 65 20 28 6c 69 73 74 2d 72 65 66 ssible (list-ref
8250: 20 70 61 64 64 65 64 2d 72 6f 77 20 33 29 29 29 padded-row 3)))
8260: 0a 09 20 20 20 20 20 20 28 74 6f 6c 20 20 20 20 .. (tol
8270: 20 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 (any->numbe
8280: 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c r-if-possible (l
8290: 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 ist-ref padded-r
82a0: 6f 77 20 34 29 29 29 20 3b 3b 20 3e 2c 20 3c 2c ow 4))) ;; >, <,
82b0: 20 3e 3d 2c 20 3c 3d 2c 20 6f 72 20 61 20 6e 75 >=, <=, or a nu
82c0: 6d 62 65 72 0a 09 20 20 20 20 20 20 28 75 6e 69 mber.. (uni
82d0: 74 73 20 20 20 20 20 20 20 28 6c 69 73 74 2d 72 ts (list-r
82e0: 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 35 29 ef padded-row 5)
82f0: 29 0a 09 20 20 20 20 20 20 28 63 6f 6d 6d 65 6e ).. (commen
8300: 74 20 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 t (list-ref
8310: 70 61 64 64 65 64 2d 72 6f 77 20 36 29 29 0a 09 padded-row 6))..
8320: 20 20 20 20 20 20 28 73 74 61 74 75 73 20 20 20 (status
8330: 20 20 20 28 6c 65 74 20 28 28 73 20 28 6c 69 73 (let ((s (lis
8340: 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 t-ref padded-row
8350: 20 37 29 29 29 0a 09 09 09 20 20 20 20 20 28 69 7))).... (i
8360: 66 20 28 61 6e 64 20 28 73 74 72 69 6e 67 3f 20 f (and (string?
8370: 73 29 28 6f 72 20 28 73 74 72 69 6e 67 2d 6d 61 s)(or (string-ma
8380: 74 63 68 20 28 72 65 67 65 78 70 20 22 5e 5c 5c tch (regexp "^\\
8390: 73 2a 24 22 29 20 73 29 0a 09 09 09 09 09 09 20 s*$") s).......
83a0: 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 (string-matc
83b0: 68 20 28 72 65 67 65 78 70 20 22 5e 6e 2f 61 24 h (regexp "^n/a$
83c0: 22 29 20 73 29 29 29 0a 09 09 09 09 20 23 66 0a ") s)))..... #f.
83d0: 09 09 09 09 20 73 29 29 29 20 3b 3b 20 69 66 20 .... s))) ;; if
83e0: 73 70 65 63 69 66 69 65 64 20 6f 6e 20 74 68 65 specified on the
83f0: 20 69 6e 70 75 74 20 74 68 65 6e 20 75 73 65 2c input then use,
8400: 20 65 6c 73 65 20 63 61 6c 63 75 6c 61 74 65 0a else calculate.
8410: 09 20 20 20 20 20 20 28 74 79 70 65 20 20 20 20 . (type
8420: 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 (list-ref pa
8430: 64 64 65 64 2d 72 6f 77 20 38 29 29 29 0a 09 20 dded-row 8)))..
8440: 3b 3b 20 6c 6f 6f 6b 20 75 70 20 65 78 70 65 63 ;; look up expec
8450: 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 20 66 72 ted,tol,units fr
8460: 6f 6d 20 70 72 65 76 69 6f 75 73 20 62 65 73 74 om previous best
8470: 20 66 69 74 20 74 65 73 74 20 69 66 20 74 68 65 fit test if the
8480: 79 20 61 72 65 20 61 6c 6c 20 65 69 74 68 65 72 y are all either
8490: 20 23 66 20 6f 72 20 27 27 0a 09 20 28 64 65 62 #f or ''.. (deb
84a0: 75 67 3a 70 72 69 6e 74 20 34 20 22 42 45 46 4f ug:print 4 "BEFO
84b0: 52 45 3a 20 63 61 74 65 67 6f 72 79 3a 20 22 20 RE: category: "
84c0: 63 61 74 65 67 6f 72 79 20 22 20 76 61 72 69 61 category " varia
84d0: 62 6c 65 3a 20 22 20 76 61 72 69 61 62 6c 65 20 ble: " variable
84e0: 22 20 76 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 " value: " value
84f0: 20 0a 09 09 20 20 20 20 20 20 22 2c 20 65 78 70 ... ", exp
8500: 65 63 74 65 64 3a 20 22 20 65 78 70 65 63 74 65 ected: " expecte
8510: 64 20 22 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 d " tol: " tol "
8520: 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 74 73 20 units: " units
8530: 22 20 73 74 61 74 75 73 3a 20 22 20 73 74 61 74 " status: " stat
8540: 75 73 20 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 us " comment: "
8550: 63 6f 6d 6d 65 6e 74 20 22 20 74 79 70 65 3a 20 comment " type:
8560: 22 20 74 79 70 65 29 0a 0a 09 20 28 69 66 20 28 " type)... (if (
8570: 61 6e 64 20 28 6f 72 20 28 6e 6f 74 20 65 78 70 and (or (not exp
8580: 65 63 74 65 64 29 28 65 71 75 61 6c 3f 20 65 78 ected)(equal? ex
8590: 70 65 63 74 65 64 20 22 22 29 29 0a 09 09 20 20 pected ""))...
85a0: 28 6f 72 20 28 6e 6f 74 20 74 6f 6c 29 20 20 20 (or (not tol)
85b0: 20 20 28 65 71 75 61 6c 3f 20 65 78 70 65 63 74 (equal? expect
85c0: 65 64 20 22 22 29 29 0a 09 09 20 20 28 6f 72 20 ed ""))... (or
85d0: 28 6e 6f 74 20 75 6e 69 74 73 29 20 20 20 28 65 (not units) (e
85e0: 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 20 22 qual? expected "
85f0: 22 29 29 29 0a 09 20 20 20 20 20 28 6c 65 74 2d "))).. (let-
8600: 76 61 6c 75 65 73 20 28 28 28 6e 65 77 2d 65 78 values (((new-ex
8610: 70 65 63 74 65 64 20 6e 65 77 2d 74 6f 6c 20 6e pected new-tol n
8620: 65 77 2d 75 6e 69 74 73 29 28 64 62 3a 67 65 74 ew-units)(db:get
8630: 2d 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 -prev-tol-for-te
8640: 73 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 st db test-id ca
8650: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 29 tegory variable)
8660: 29 29 0a 09 09 09 20 28 73 65 74 21 20 65 78 70 )).... (set! exp
8670: 65 63 74 65 64 20 6e 65 77 2d 65 78 70 65 63 74 ected new-expect
8680: 65 64 29 0a 09 09 09 20 28 73 65 74 21 20 74 6f ed).... (set! to
8690: 6c 20 20 20 20 20 20 6e 65 77 2d 74 6f 6c 29 0a l new-tol).
86a0: 09 09 09 20 28 73 65 74 21 20 75 6e 69 74 73 20 ... (set! units
86b0: 20 20 20 6e 65 77 2d 75 6e 69 74 73 29 29 29 0a new-units))).
86c0: 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 .. (debug:print
86d0: 34 20 22 41 46 54 45 52 3a 20 20 63 61 74 65 67 4 "AFTER: categ
86e0: 6f 72 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 ory: " category
86f0: 22 20 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 " variable: " va
8700: 72 69 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 riable " value:
8710: 22 20 76 61 6c 75 65 20 0a 09 09 20 20 20 20 20 " value ...
8720: 20 22 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 ", expected: "
8730: 65 78 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 expected " tol:
8740: 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 " tol " units: "
8750: 20 75 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a units " status:
8760: 20 22 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d " status " comm
8770: 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a ent: " comment).
8780: 09 20 3b 3b 20 63 61 6c 63 75 6c 61 74 65 20 73 . ;; calculate s
8790: 74 61 74 75 73 20 69 66 20 4e 4f 54 20 73 70 65 tatus if NOT spe
87a0: 63 69 66 69 65 64 0a 09 20 28 69 66 20 28 61 6e cified.. (if (an
87b0: 64 20 28 6e 6f 74 20 73 74 61 74 75 73 29 28 6e d (not status)(n
87c0: 75 6d 62 65 72 3f 20 65 78 70 65 63 74 65 64 29 umber? expected)
87d0: 28 6e 75 6d 62 65 72 3f 20 76 61 6c 75 65 29 29 (number? value))
87e0: 20 3b 3b 20 6e 65 65 64 20 65 78 70 65 63 74 65 ;; need expecte
87f0: 64 20 61 6e 64 20 76 61 6c 75 65 20 74 6f 20 62 d and value to b
8800: 65 20 6e 75 6d 62 65 72 73 0a 09 20 20 20 20 20 e numbers..
8810: 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 74 6f 6c (if (number? tol
8820: 29 20 3b 3b 20 69 66 20 74 6f 6c 20 69 73 20 61 ) ;; if tol is a
8830: 20 6e 75 6d 62 65 72 20 74 68 65 6e 20 77 65 20 number then we
8840: 64 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 do the standard
8850: 63 6f 6d 70 61 72 69 73 6f 6e 0a 09 09 20 28 6c comparison... (l
8860: 65 74 2a 20 28 28 6d 61 78 2d 76 61 6c 20 28 2b et* ((max-val (+
8870: 20 65 78 70 65 63 74 65 64 20 74 6f 6c 29 29 0a expected tol)).
8880: 09 09 09 28 6d 69 6e 2d 76 61 6c 20 28 2d 20 65 ...(min-val (- e
8890: 78 70 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 xpected tol))...
88a0: 09 28 72 65 73 75 6c 74 20 20 28 61 6e 64 20 28 .(result (and (
88b0: 3e 3d 20 20 76 61 6c 75 65 20 6d 69 6e 2d 76 61 >= value min-va
88c0: 6c 29 28 3c 3d 20 76 61 6c 75 65 20 6d 61 78 2d l)(<= value max-
88d0: 76 61 6c 29 29 29 29 0a 09 09 20 20 20 28 64 65 val))))... (de
88e0: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 6d 61 78 bug:print 4 "max
88f0: 2d 76 61 6c 3a 20 22 20 6d 61 78 2d 76 61 6c 20 -val: " max-val
8900: 22 20 6d 69 6e 2d 76 61 6c 3a 20 22 20 6d 69 6e " min-val: " min
8910: 2d 76 61 6c 20 22 20 72 65 73 75 6c 74 3a 20 22 -val " result: "
8920: 20 72 65 73 75 6c 74 29 0a 09 09 20 20 20 28 73 result)... (s
8930: 65 74 21 20 73 74 61 74 75 73 20 28 69 66 20 72 et! status (if r
8940: 65 73 75 6c 74 20 22 70 61 73 73 22 20 22 66 61 esult "pass" "fa
8950: 69 6c 22 29 29 29 0a 09 09 20 28 73 65 74 21 20 il")))... (set!
8960: 73 74 61 74 75 73 20 3b 3b 20 4e 42 2f 2f 20 6e status ;; NB// n
8970: 65 65 64 20 74 6f 20 61 73 73 65 73 73 20 65 61 eed to assess ea
8980: 63 68 20 6f 6e 65 20 28 69 2e 65 2e 20 6e 6f 74 ch one (i.e. not
8990: 20 72 65 74 75 72 6e 20 6f 70 65 72 61 74 6f 72 return operator
89a0: 20 73 69 6e 63 65 20 6e 65 65 64 20 74 6f 20 61 since need to a
89b0: 63 74 20 69 66 20 6e 6f 74 20 76 61 6c 69 64 20 ct if not valid
89c0: 6f 70 2e 0a 09 09 20 20 20 20 20 20 20 28 63 61 op.... (ca
89d0: 73 65 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 se (string->symb
89e0: 6f 6c 20 74 6f 6c 29 20 3b 3b 20 74 6f 6c 20 73 ol tol) ;; tol s
89f0: 68 6f 75 6c 64 20 62 65 20 3e 2c 20 3c 2c 20 3e hould be >, <, >
8a00: 3d 2c 20 3c 3d 0a 09 09 09 20 28 28 3e 29 20 20 =, <=.... ((>)
8a10: 28 69 66 20 28 3e 20 20 76 61 6c 75 65 20 65 78 (if (> value ex
8a20: 70 65 63 74 65 64 29 20 22 70 61 73 73 22 20 22 pected) "pass" "
8a30: 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 3c 29 fail")).... ((<)
8a40: 20 20 28 69 66 20 28 3c 20 20 76 61 6c 75 65 20 (if (< value
8a50: 65 78 70 65 63 74 65 64 29 20 22 70 61 73 73 22 expected) "pass"
8a60: 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 "fail")).... ((
8a70: 3e 3d 29 20 28 69 66 20 28 3e 3d 20 76 61 6c 75 >=) (if (>= valu
8a80: 65 20 65 78 70 65 63 74 65 64 29 20 22 70 61 73 e expected) "pas
8a90: 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 s" "fail"))....
8aa0: 28 28 3c 3d 29 20 28 69 66 20 28 3c 3d 20 76 61 ((<=) (if (<= va
8ab0: 6c 75 65 20 65 78 70 65 63 74 65 64 29 20 22 70 lue expected) "p
8ac0: 61 73 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 ass" "fail"))...
8ad0: 09 20 28 65 6c 73 65 20 28 63 6f 6e 63 20 22 45 . (else (conc "E
8ae0: 52 52 4f 52 3a 20 62 61 64 20 74 6f 6c 20 63 6f RROR: bad tol co
8af0: 6d 70 61 72 61 74 6f 72 20 22 20 74 6f 6c 29 29 mparator " tol))
8b00: 29 29 29 29 0a 09 20 28 64 65 62 75 67 3a 70 72 )))).. (debug:pr
8b10: 69 6e 74 20 34 20 22 41 46 54 45 52 32 3a 20 63 int 4 "AFTER2: c
8b20: 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 65 67 ategory: " categ
8b30: 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 3a 20 ory " variable:
8b40: 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 61 6c " variable " val
8b50: 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 09 20 ue: " value ...
8b60: 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 65 64 ", expected
8b70: 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 20 74 : " expected " t
8b80: 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e 69 74 ol: " tol " unit
8b90: 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 74 61 s: " units " sta
8ba0: 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 22 20 tus: " status "
8bb0: 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 comment: " comme
8bc0: 6e 74 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 65 nt).. (sqlite3:e
8bd0: 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 45 52 xecute db "INSER
8be0: 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54 T OR REPLACE INT
8bf0: 4f 20 74 65 73 74 5f 64 61 74 61 20 28 74 65 73 O test_data (tes
8c00: 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 t_id,category,va
8c10: 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 70 riable,value,exp
8c20: 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c ected,tol,units,
8c30: 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 75 73 2c 74 comment,status,t
8c40: 79 70 65 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f ype) VALUES (?,?
8c50: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f ,?,?,?,?,?,?,?,?
8c60: 29 3b 22 0a 09 09 09 20 20 74 65 73 74 2d 69 64 );".... test-id
8c70: 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 category variab
8c80: 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 le value expecte
8c90: 64 20 74 6f 6c 20 75 6e 69 74 73 20 28 69 66 20 d tol units (if
8ca0: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 comment comment
8cb0: 22 22 29 20 73 74 61 74 75 73 20 74 79 70 65 29 "") status type)
8cc0: 29 29 0a 20 20 20 20 20 63 73 76 6c 69 73 74 29 )). csvlist)
8cd0: 29 29 0a 0a 3b 3b 20 67 65 74 20 61 20 6c 69 73 ))..;; get a lis
8ce0: 74 20 6f 66 20 74 65 73 74 5f 64 61 74 61 20 72 t of test_data r
8cf0: 65 63 6f 72 64 73 20 6d 61 74 63 68 69 6e 67 20 ecords matching
8d00: 63 61 74 65 67 6f 72 79 70 61 74 74 0a 28 64 65 categorypatt.(de
8d10: 66 69 6e 65 20 28 64 62 3a 72 65 61 64 2d 74 65 fine (db:read-te
8d20: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
8d30: 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 id categorypatt)
8d40: 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 28 . (let ((res '(
8d50: 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 ))). (sqlite3
8d60: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 :for-each-row .
8d70: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 (lambda (id
8d80: 74 65 73 74 5f 69 64 20 63 61 74 65 67 6f 72 79 test_id category
8d90: 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 variable value
8da0: 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 expected tol uni
8db0: 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 74 75 ts comment statu
8dc0: 73 20 74 79 70 65 29 0a 20 20 20 20 20 20 20 28 s type). (
8dd0: 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 set! res (cons (
8de0: 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 5f 69 vector id test_i
8df0: 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 d category varia
8e00: 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 ble value expect
8e10: 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 6f 6d ed tol units com
8e20: 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 70 65 ment status type
8e30: 29 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 62 ) res))). db
8e40: 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 . "SELECT id
8e50: 2c 74 65 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 ,test_id,categor
8e60: 79 2c 76 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 y,variable,value
8e70: 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e ,expected,tol,un
8e80: 69 74 73 2c 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 its,comment,stat
8e90: 75 73 2c 74 79 70 65 20 46 52 4f 4d 20 74 65 73 us,type FROM tes
8ea0: 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 73 t_data WHERE tes
8eb0: 74 5f 69 64 3d 3f 20 41 4e 44 20 63 61 74 65 67 t_id=? AND categ
8ec0: 6f 72 79 20 4c 49 4b 45 20 3f 20 4f 52 44 45 52 ory LIKE ? ORDER
8ed0: 20 42 59 20 63 61 74 65 67 6f 72 79 2c 76 61 72 BY category,var
8ee0: 69 61 62 6c 65 3b 22 20 74 65 73 74 2d 69 64 20 iable;" test-id
8ef0: 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 20 categorypatt).
8f00: 20 20 28 72 65 76 65 72 73 65 20 72 65 73 29 29 (reverse res))
8f10: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 6c )..(define (db:l
8f20: 6f 61 64 2d 74 65 73 74 2d 64 61 74 61 20 64 62 oad-test-data db
8f30: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
8f40: 65 20 69 74 65 6d 64 61 74 29 0a 20 20 28 6c 65 e itemdat). (le
8f50: 74 2a 20 28 28 69 74 65 6d 2d 70 61 74 68 20 28 t* ((item-path (
8f60: 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 item-list->path
8f70: 69 74 65 6d 64 61 74 29 29 0a 09 20 28 74 65 73 itemdat)).. (tes
8f80: 74 64 61 74 20 28 64 62 3a 67 65 74 2d 74 65 73 tdat (db:get-tes
8f90: 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 t-info db run-id
8fa0: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d test-name item-
8fb0: 70 61 74 68 29 29 0a 09 20 28 74 65 73 74 2d 69 path)).. (test-i
8fc0: 64 20 28 69 66 20 74 65 73 74 64 61 74 20 28 64 d (if testdat (d
8fd0: 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20 74 65 b:test-get-id te
8fe0: 73 74 64 61 74 29 20 23 66 29 29 29 0a 20 20 20 stdat) #f))).
8ff0: 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ;; (debug:print
9000: 20 31 20 22 45 6e 74 65 72 20 72 65 63 6f 72 64 1 "Enter record
9010: 73 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 20 74 s to insert in t
9020: 68 65 20 74 65 73 74 5f 64 61 74 61 20 74 61 62 he test_data tab
9030: 6c 65 2c 20 73 65 76 65 6e 20 66 69 65 6c 64 73 le, seven fields
9040: 2c 20 63 6f 6d 6d 61 20 73 65 70 61 72 61 74 65 , comma separate
9050: 64 20 70 65 72 20 6c 69 6e 65 22 29 0a 20 20 20 d per line").
9060: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
9070: 22 69 74 65 6d 64 61 74 3a 20 22 20 69 74 65 6d "itemdat: " item
9080: 64 61 74 20 22 2c 20 74 65 73 74 2d 6e 61 6d 65 dat ", test-name
9090: 3a 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 2c : " test-name ",
90a0: 20 74 65 73 74 2d 69 64 3a 20 22 20 74 65 73 74 test-id: " test
90b0: 2d 69 64 29 0a 20 20 20 20 28 69 66 20 74 65 73 -id). (if tes
90c0: 74 2d 69 64 0a 09 28 6c 65 74 20 6c 6f 6f 70 20 t-id..(let loop
90d0: 28 28 6c 69 6e 20 28 72 65 61 64 2d 6c 69 6e 65 ((lin (read-line
90e0: 29 29 29 0a 09 20 20 28 69 66 20 28 6e 6f 74 20 ))).. (if (not
90f0: 28 65 6f 66 2d 6f 62 6a 65 63 74 3f 20 6c 69 6e (eof-object? lin
9100: 29 29 0a 09 20 20 20 20 20 20 28 62 65 67 69 6e )).. (begin
9110: 0a 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 ...(debug:print
9120: 34 20 6c 69 6e 29 0a 09 09 28 64 62 3a 63 73 76 4 lin)...(db:csv
9130: 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 ->test-data db t
9140: 65 73 74 2d 69 64 20 6c 69 6e 29 0a 09 09 28 6c est-id lin)...(l
9150: 6f 6f 70 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 oop (read-line))
9160: 29 29 29 29 0a 20 20 20 20 3b 3b 20 72 6f 6c 6c )))). ;; roll
9170: 20 75 70 20 74 68 65 20 63 75 72 72 65 6e 74 20 up the current
9180: 72 65 73 75 6c 74 73 2e 0a 20 20 20 20 3b 3b 20 results.. ;;
9190: 46 49 58 4d 45 3a 20 41 64 64 20 74 68 65 20 73 FIXME: Add the s
91a0: 74 61 74 75 73 20 74 6f 20 0a 20 20 20 20 28 64 tatus to . (d
91b0: 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c b:test-data-roll
91c0: 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 23 66 up db test-id #f
91d0: 29 29 29 0a 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a )))..;; WARNING:
91e0: 20 44 6f 20 4e 4f 54 20 63 61 6c 6c 20 74 68 69 Do NOT call thi
91f0: 73 20 66 6f 72 20 74 68 65 20 70 61 72 65 6e 74 s for the parent
9200: 20 74 65 73 74 20 6f 6e 20 61 6e 20 69 74 65 72 test on an iter
9210: 61 74 65 64 20 74 65 73 74 0a 3b 3b 20 52 6f 6c ated test.;; Rol
9220: 6c 20 75 70 20 74 65 73 74 5f 64 61 74 61 20 70 l up test_data p
9230: 61 73 73 2f 66 61 69 6c 20 72 65 73 75 6c 74 73 ass/fail results
9240: 0a 3b 3b 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 .;; look at the
9250: 74 65 73 74 5f 64 61 74 61 20 73 74 61 74 75 73 test_data status
9260: 20 66 69 65 6c 64 2c 20 0a 3b 3b 20 20 20 20 69 field, .;; i
9270: 66 20 61 6c 6c 20 61 72 65 20 70 61 73 73 20 28 f all are pass (
9280: 61 6e 79 20 63 61 73 65 29 20 61 6e 64 20 74 68 any case) and th
9290: 65 20 74 65 73 74 20 73 74 61 74 75 73 20 69 73 e test status is
92a0: 20 50 41 53 53 20 6f 72 20 4e 55 4c 4c 20 6f 72 PASS or NULL or
92b0: 20 27 27 20 74 68 65 6e 20 73 65 74 20 74 65 73 '' then set tes
92c0: 74 20 73 74 61 74 75 73 20 74 6f 20 50 41 53 53 t status to PASS
92d0: 2e 0a 3b 3b 20 20 20 20 69 66 20 6f 6e 65 20 6f ..;; if one o
92e0: 72 20 6d 6f 72 65 20 61 72 65 20 66 61 69 6c 20 r more are fail
92f0: 28 61 6e 79 20 63 61 73 65 29 20 74 68 65 6e 20 (any case) then
9300: 73 65 74 20 74 65 73 74 20 73 74 61 74 75 73 20 set test status
9310: 74 6f 20 50 41 53 53 2c 20 6e 6f 6e 20 22 70 61 to PASS, non "pa
9320: 73 73 22 20 6f 72 20 22 66 61 69 6c 22 20 61 72 ss" or "fail" ar
9330: 65 20 69 67 6e 6f 72 65 64 0a 28 64 65 66 69 6e e ignored.(defin
9340: 65 20 28 64 62 3a 74 65 73 74 2d 64 61 74 61 2d e (db:test-data-
9350: 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 rollup db test-i
9360: 64 20 73 74 61 74 75 73 29 0a 20 20 28 73 71 6c d status). (sql
9370: 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a 20 20 ite3:execute .
9380: 20 64 62 20 0a 20 20 20 22 55 50 44 41 54 45 20 db . "UPDATE
9390: 74 65 73 74 73 20 0a 20 20 20 20 20 20 53 45 54 tests . SET
93a0: 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 28 53 45 4c fail_count=(SEL
93b0: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 ECT count(id) FR
93c0: 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 45 OM test_data WHE
93d0: 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 41 4e 44 RE test_id=? AND
93e0: 20 73 74 61 74 75 73 20 6c 69 6b 65 20 27 66 61 status like 'fa
93f0: 69 6c 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20 il'),.
9400: 70 61 73 73 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 pass_count=(SELE
9410: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
9420: 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 45 52 M test_data WHER
9430: 45 20 74 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 E test_id=? AND
9440: 73 74 61 74 75 73 20 6c 69 6b 65 20 27 70 61 73 status like 'pas
9450: 73 27 29 0a 20 20 20 20 20 20 57 48 45 52 45 20 s'). WHERE
9460: 69 64 3d 3f 3b 22 0a 20 20 20 74 65 73 74 2d 69 id=?;". test-i
9470: 64 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 d test-id test-i
9480: 64 29 0a 20 20 3b 3b 20 69 66 20 74 68 65 20 74 d). ;; if the t
9490: 65 73 74 20 69 73 20 6e 6f 74 20 46 41 49 4c 20 est is not FAIL
94a0: 74 68 65 6e 20 73 65 74 20 73 74 61 74 75 73 20 then set status
94b0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 66 61 69 based on the fai
94c0: 6c 20 61 6e 64 20 70 61 73 73 20 63 6f 75 6e 74 l and pass count
94d0: 73 2e 0a 20 20 28 74 68 72 65 61 64 2d 73 6c 65 s.. (thread-sle
94e0: 65 70 21 20 31 29 0a 20 20 28 73 71 6c 69 74 65 ep! 1). (sqlite
94f0: 33 3a 65 78 65 63 75 74 65 0a 20 20 20 64 62 20 3:execute. db
9500: 20 20 3b 3b 3b 20 4e 4f 54 45 3a 20 53 68 6f 75 ;;; NOTE: Shou
9510: 6c 64 20 74 68 69 73 20 62 65 20 57 41 52 4e 2c ld this be WARN,
9520: 46 41 49 4c 3f 20 41 20 57 41 52 4e 20 69 73 20 FAIL? A WARN is
9530: 6e 6f 74 20 61 20 46 41 49 4c 3f 3f 3f 3f 3f 20 not a FAIL?????
9540: 42 55 47 20 46 49 58 4d 45 0a 20 20 20 22 55 50 BUG FIXME. "UP
9550: 44 41 54 45 20 74 65 73 74 73 0a 20 20 20 20 20 DATE tests.
9560: 20 53 45 54 20 73 74 61 74 75 73 3d 43 41 53 45 SET status=CASE
9570: 20 57 48 45 4e 20 28 53 45 4c 45 43 54 20 66 61 WHEN (SELECT fa
9580: 69 6c 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 74 65 il_count FROM te
9590: 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 29 20 sts WHERE id=?)
95a0: 3e 20 30 20 0a 20 20 20 20 20 20 20 20 20 20 20 > 0 .
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 48 TH
95c0: 45 4e 20 27 46 41 49 4c 27 0a 20 20 20 20 20 20 EN 'FAIL'.
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95e0: 57 48 45 4e 20 28 53 45 4c 45 43 54 20 70 61 73 WHEN (SELECT pas
95f0: 73 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 74 65 73 s_count FROM tes
9600: 74 73 20 57 48 45 52 45 20 69 64 3d 3f 29 20 3e ts WHERE id=?) >
9610: 20 30 20 41 4e 44 20 0a 20 20 20 20 20 20 20 20 0 AND .
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9630: 20 20 20 28 53 45 4c 45 43 54 20 73 74 61 74 75 (SELECT statu
9640: 73 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 s FROM tests WHE
9650: 52 45 20 69 64 3d 3f 29 20 4e 4f 54 20 49 4e 20 RE id=?) NOT IN
9660: 28 27 57 41 52 4e 27 2c 27 46 41 49 4c 27 29 0a ('WARN','FAIL').
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9680: 20 20 20 20 20 20 20 20 20 54 48 45 4e 20 27 50 THEN 'P
9690: 41 53 53 27 0a 20 20 20 20 20 20 20 20 20 20 20 ASS'.
96a0: 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 45 20 ELSE
96b0: 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 status.
96c0: 20 20 20 20 20 20 20 20 20 45 4e 44 20 57 48 45 END WHE
96d0: 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 74 65 73 RE id=?;". tes
96e0: 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 73 t-id test-id tes
96f0: 74 2d 69 64 20 74 65 73 74 2d 69 64 29 29 0a 0a t-id test-id))..
9700: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
9710: 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 prev-tol-for-tes
9720: 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 74 t db test-id cat
9730: 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 29 0a egory variable).
9740: 20 20 3b 3b 20 46 69 6e 69 73 68 20 6d 65 3f 0a ;; Finish me?.
9750: 20 20 28 76 61 6c 75 65 73 20 23 66 20 23 66 20 (values #f #f
9760: 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d #f))..;;========
9770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
97a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
97b0: 3b 20 53 20 54 20 45 20 50 20 53 20 0a 3b 3b 3d ; S T E P S .;;=
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 3d 3d 3d 3d 3d 3d 3d ================
97f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9800: 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 =====..(define (
9810: 64 62 3a 73 74 65 70 2d 67 65 74 2d 74 69 6d 65 db:step-get-time
9820: 2d 61 73 2d 73 74 72 69 6e 67 20 76 65 63 29 0a -as-string vec).
9830: 20 20 28 73 65 63 6f 6e 64 73 2d 3e 74 69 6d 65 (seconds->time
9840: 2d 73 74 72 69 6e 67 20 28 64 62 3a 73 74 65 70 -string (db:step
9850: 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
9860: 76 65 63 29 29 29 0a 0a 3b 3b 20 64 62 2d 67 65 vec)))..;; db-ge
9870: 74 2d 74 65 73 74 2d 73 74 65 70 73 2d 66 6f 72 t-test-steps-for
9880: 2d 72 75 6e 0a 28 64 65 66 69 6e 65 20 28 64 62 -run.(define (db
9890: 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 :get-steps-for-t
98a0: 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 0a est db test-id).
98b0: 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 28 29 (let ((res '()
98c0: 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a )). (sqlite3:
98d0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 for-each-row .
98e0: 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 74 (lambda (id t
98f0: 65 73 74 2d 69 64 20 73 74 65 70 6e 61 6d 65 20 est-id stepname
9900: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
9910: 6e 74 2d 74 69 6d 65 20 6c 6f 67 66 69 6c 65 29 nt-time logfile)
9920: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 . (set! re
9930: 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f 72 20 s (cons (vector
9940: 69 64 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e id test-id stepn
9950: 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 ame state status
9960: 20 65 76 65 6e 74 2d 74 69 6d 65 20 28 69 66 20 event-time (if
9970: 28 73 74 72 69 6e 67 3f 20 6c 6f 67 66 69 6c 65 (string? logfile
9980: 29 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 20 72 ) logfile "")) r
9990: 65 73 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 es))). db.
99a0: 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 74 65 "SELECT id,te
99b0: 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c 73 st_id,stepname,s
99c0: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
99d0: 74 5f 74 69 6d 65 2c 6c 6f 67 66 69 6c 65 20 46 t_time,logfile F
99e0: 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 ROM test_steps W
99f0: 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 4f HERE test_id=? O
9a00: 52 44 45 52 20 42 59 20 69 64 20 41 53 43 3b 22 RDER BY id ASC;"
9a10: 20 3b 3b 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 ;; event_time D
9a20: 45 53 43 2c 69 64 20 41 53 43 3b 0a 20 20 20 20 ESC,id ASC;.
9a30: 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 28 72 test-id). (r
9a40: 65 76 65 72 73 65 20 72 65 73 29 29 29 0a 0a 3b everse res)))..;
9a50: 3b 20 67 65 74 20 61 20 70 72 65 74 74 79 20 74 ; get a pretty t
9a60: 61 62 6c 65 20 74 6f 20 73 75 6d 6d 61 72 69 7a able to summariz
9a70: 65 20 73 74 65 70 73 0a 3b 3b 0a 28 64 65 66 69 e steps.;;.(defi
9a80: 6e 65 20 28 64 62 3a 67 65 74 2d 73 74 65 70 73 ne (db:get-steps
9a90: 2d 74 61 62 6c 65 20 64 62 20 74 65 73 74 2d 69 -table db test-i
9aa0: 64 29 0a 20 20 28 6c 65 74 20 28 28 73 74 65 70 d). (let ((step
9ab0: 73 20 20 20 28 64 62 3a 67 65 74 2d 73 74 65 70 s (db:get-step
9ac0: 73 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 s-for-test db te
9ad0: 73 74 2d 69 64 29 29 29 0a 20 20 20 20 3b 3b 20 st-id))). ;;
9ae0: 6f 72 67 61 6e 69 73 65 20 74 68 65 20 73 74 65 organise the ste
9af0: 70 73 20 66 6f 72 20 62 65 74 74 65 72 20 72 65 ps for better re
9b00: 61 64 61 62 69 6c 69 74 79 0a 20 20 20 20 28 6c adability. (l
9b10: 65 74 20 28 28 72 65 73 20 28 6d 61 6b 65 2d 68 et ((res (make-h
9b20: 61 73 68 2d 74 61 62 6c 65 29 29 29 0a 20 20 20 ash-table))).
9b30: 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 (for-each .
9b40: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 73 74 (lambda (st
9b50: 65 70 29 0a 09 20 28 64 65 62 75 67 3a 70 72 69 ep).. (debug:pri
9b60: 6e 74 20 36 20 22 73 74 65 70 3d 22 20 73 74 65 nt 6 "step=" ste
9b70: 70 29 0a 09 20 28 6c 65 74 20 28 28 72 65 63 6f p).. (let ((reco
9b80: 72 64 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 rd (hash-table-r
9b90: 65 66 2f 64 65 66 61 75 6c 74 20 0a 09 09 09 72 ef/default ....r
9ba0: 65 73 20 0a 09 09 09 28 64 62 3a 73 74 65 70 2d es ....(db:step-
9bb0: 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 get-stepname ste
9bc0: 70 29 20 0a 09 09 09 3b 3b 20 20 20 20 20 20 20 p) ....;;
9bd0: 20 73 74 65 70 6e 61 6d 65 20 20 20 20 20 20 20 stepname
9be0: 20 20 20 20 20 20 20 20 20 73 74 61 72 74 20 65 start e
9bf0: 6e 64 20 73 74 61 74 75 73 20 20 20 20 0a 09 09 nd status ...
9c00: 09 28 76 65 63 74 6f 72 20 28 64 62 3a 73 74 65 .(vector (db:ste
9c10: 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 p-get-stepname s
9c20: 74 65 70 29 20 22 22 20 20 20 22 22 20 22 22 20 tep) "" "" ""
9c30: 20 20 20 20 22 22 20 22 22 29 29 29 29 0a 09 20 "" ""))))..
9c40: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 (debug:print 6
9c50: 20 22 72 65 63 6f 72 64 28 62 65 66 6f 72 65 29 "record(before)
9c60: 20 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 09 09 = " record ....
9c70: 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 20 28 "\nid: " (
9c80: 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 20 73 db:step-get-id s
9c90: 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 70 6e tep)...."\nstepn
9ca0: 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 70 2d ame: " (db:step-
9cb0: 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 get-stepname ste
9cc0: 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 3a 20 p)...."\nstate:
9cd0: 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 " (db:step-ge
9ce0: 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a 09 09 t-state step)...
9cf0: 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 22 20 ."\nstatus: "
9d00: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
9d10: 74 75 73 20 73 74 65 70 29 0a 09 09 09 22 5c 6e tus step)...."\n
9d20: 74 69 6d 65 3a 20 20 20 20 20 22 20 28 64 62 3a time: " (db:
9d30: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
9d40: 69 6d 65 20 73 74 65 70 29 29 0a 09 20 20 20 28 ime step)).. (
9d50: 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e 73 79 case (string->sy
9d60: 6d 62 6f 6c 20 28 64 62 3a 73 74 65 70 2d 67 65 mbol (db:step-ge
9d70: 74 2d 73 74 61 74 65 20 73 74 65 70 29 29 0a 09 t-state step))..
9d80: 20 20 20 20 20 28 28 73 74 61 72 74 29 28 76 65 ((start)(ve
9d90: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
9da0: 20 31 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 1 (db:step-get-
9db0: 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 event_time step)
9dc0: 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 ).. (vector
9dd0: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 28 -set! record 3 (
9de0: 69 66 20 28 65 71 75 61 6c 3f 20 28 76 65 63 74 if (equal? (vect
9df0: 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 33 29 or-ref record 3)
9e00: 20 22 22 29 0a 09 09 09 09 09 28 64 62 3a 73 74 "")......(db:st
9e10: 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 ep-get-status st
9e20: 65 70 29 29 29 0a 09 20 20 20 20 20 20 28 69 66 ep))).. (if
9e30: 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67 (> (string-leng
9e40: 74 68 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d th (db:step-get-
9e50: 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 0a 09 logfile step))..
9e60: 09 20 20 20 20 20 30 29 0a 09 09 20 20 28 76 65 . 0)... (ve
9e70: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
9e80: 20 35 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 5 (db:step-get-
9e90: 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 29 29 logfile step))))
9ea0: 0a 09 20 20 20 20 20 28 28 65 6e 64 29 20 20 0a .. ((end) .
9eb0: 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 . (vector-s
9ec0: 65 74 21 20 72 65 63 6f 72 64 20 32 20 28 61 6e et! record 2 (an
9ed0: 79 2d 3e 6e 75 6d 62 65 72 20 28 64 62 3a 73 74 y->number (db:st
9ee0: 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d ep-get-event_tim
9ef0: 65 20 73 74 65 70 29 29 29 0a 09 20 20 20 20 20 e step)))..
9f00: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
9f10: 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 70 2d cord 3 (db:step-
9f20: 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 get-status step)
9f30: 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 ).. (vector
9f40: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 20 28 -set! record 4 (
9f50: 6c 65 74 20 28 28 73 74 61 72 74 74 20 28 61 6e let ((startt (an
9f60: 79 2d 3e 6e 75 6d 62 65 72 20 28 76 65 63 74 6f y->number (vecto
9f70: 72 2d 72 65 66 20 72 65 63 6f 72 64 20 31 29 29 r-ref record 1))
9f80: 29 0a 09 09 09 09 09 20 20 28 65 6e 64 74 20 20 )...... (endt
9f90: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 76 (any->number (v
9fa0: 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 ector-ref record
9fb0: 20 32 29 29 29 29 0a 09 09 09 09 20 20 20 20 20 2)))).....
9fc0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
9fd0: 22 72 65 63 6f 72 64 5b 31 5d 3d 22 20 28 76 65 "record[1]=" (ve
9fe0: 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 ctor-ref record
9ff0: 31 29 20 0a 09 09 09 09 09 09 20 20 20 22 2c 20 1) ....... ",
a000: 73 74 61 72 74 74 3d 22 20 73 74 61 72 74 74 20 startt=" startt
a010: 22 2c 20 65 6e 64 74 3d 22 20 65 6e 64 74 0a 09 ", endt=" endt..
a020: 09 09 09 09 09 20 20 20 22 2c 20 67 65 74 2d 73 ..... ", get-s
a030: 74 61 74 75 73 3a 20 22 20 28 64 62 3a 73 74 65 tatus: " (db:ste
a040: 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 p-get-status ste
a050: 70 29 29 0a 09 09 09 09 20 20 20 20 20 20 28 69 p))..... (i
a060: 66 20 28 61 6e 64 20 28 6e 75 6d 62 65 72 3f 20 f (and (number?
a070: 73 74 61 72 74 74 29 28 6e 75 6d 62 65 72 3f 20 startt)(number?
a080: 65 6e 64 74 29 29 0a 09 09 09 09 09 20 20 28 73 endt))...... (s
a090: 65 63 6f 6e 64 73 2d 3e 68 72 2d 6d 69 6e 2d 73 econds->hr-min-s
a0a0: 65 63 20 28 2d 20 65 6e 64 74 20 73 74 61 72 74 ec (- endt start
a0b0: 74 29 29 20 22 2d 31 22 29 29 29 0a 09 20 20 20 t)) "-1")))..
a0c0: 20 20 20 28 69 66 20 28 3e 20 28 73 74 72 69 6e (if (> (strin
a0d0: 67 2d 6c 65 6e 67 74 68 20 28 64 62 3a 73 74 65 g-length (db:ste
a0e0: 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 74 p-get-logfile st
a0f0: 65 70 29 29 0a 09 09 20 20 20 20 20 30 29 0a 09 ep))... 0)..
a100: 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 . (vector-set!
a110: 72 65 63 6f 72 64 20 35 20 28 64 62 3a 73 74 65 record 5 (db:ste
a120: 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 74 p-get-logfile st
a130: 65 70 29 29 29 29 0a 09 20 20 20 20 20 28 65 6c ep)))).. (el
a140: 73 65 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f se.. (vecto
a150: 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 32 20 r-set! record 2
a160: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
a170: 74 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 20 te step))..
a180: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 (vector-set! re
a190: 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 70 2d cord 3 (db:step-
a1a0: 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 get-status step)
a1b0: 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 ).. (vector
a1c0: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 20 28 -set! record 4 (
a1d0: 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e db:step-get-even
a1e0: 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 29 0a t_time step)))).
a1f0: 09 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d . (hash-table-
a200: 73 65 74 21 20 72 65 73 20 28 64 62 3a 73 74 65 set! res (db:ste
a210: 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 p-get-stepname s
a220: 74 65 70 29 20 72 65 63 6f 72 64 29 0a 09 20 20 tep) record)..
a230: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 20 (debug:print 6
a240: 22 72 65 63 6f 72 64 28 61 66 74 65 72 29 20 20 "record(after)
a250: 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 09 09 22 = " record ...."
a260: 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 20 28 64 \nid: " (d
a270: 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 20 73 74 b:step-get-id st
a280: 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 70 6e 61 ep)...."\nstepna
a290: 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 70 2d 67 me: " (db:step-g
a2a0: 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 70 et-stepname step
a2b0: 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 3a 20 20 )...."\nstate:
a2c0: 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 " (db:step-get
a2d0: 2d 73 74 61 74 65 20 73 74 65 70 29 0a 09 09 09 -state step)....
a2e0: 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 22 20 28 "\nstatus: " (
a2f0: 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 74 db:step-get-stat
a300: 75 73 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 74 us step)...."\nt
a310: 69 6d 65 3a 20 20 20 20 20 22 20 28 64 62 3a 73 ime: " (db:s
a320: 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 tep-get-event_ti
a330: 6d 65 20 73 74 65 70 29 29 29 29 0a 20 20 20 20 me step)))).
a340: 20 20 20 3b 3b 20 28 65 6c 73 65 20 20 20 28 76 ;; (else (v
a350: 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 ector-set! recor
a360: 64 20 31 20 28 64 62 3a 73 74 65 70 2d 67 65 74 d 1 (db:step-get
a370: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 -event_time step
a380: 29 29 29 0a 20 20 20 20 20 20 20 28 73 6f 72 74 ))). (sort
a390: 20 73 74 65 70 73 20 28 6c 61 6d 62 64 61 20 28 steps (lambda (
a3a0: 61 20 62 29 28 3c 20 28 64 62 3a 73 74 65 70 2d a b)(< (db:step-
a3b0: 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 61 get-event_time a
a3c0: 29 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 )(db:step-get-ev
a3d0: 65 6e 74 5f 74 69 6d 65 20 62 29 29 29 29 29 0a ent_time b))))).
a3e0: 20 20 20 20 20 20 72 65 73 29 29 29 0a 0a 3b 3b res)))..;;
a3f0: 20 74 68 65 20 6e 65 77 20 70 72 65 72 65 71 73 the new prereqs
a400: 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 6c 6f calculation, lo
a410: 6f 6b 73 20 61 6c 73 6f 20 61 74 20 69 74 65 6d oks also at item
a420: 70 61 74 68 20 69 66 20 73 70 65 63 69 66 69 65 path if specifie
a430: 64 0a 3b 3b 20 61 6c 6c 20 70 72 65 72 65 71 73 d.;; all prereqs
a440: 20 6d 75 73 74 20 62 65 20 6d 65 74 3a 0a 3b 3b must be met:.;;
a450: 20 20 20 20 69 66 20 70 72 65 72 65 71 20 74 65 if prereq te
a460: 73 74 20 77 69 74 68 20 69 74 65 6d 70 61 74 68 st with itempath
a470: 3d 27 27 20 69 73 20 43 4f 4d 50 4c 45 54 45 44 ='' is COMPLETED
a480: 20 61 6e 64 20 50 41 53 53 2c 20 57 41 52 4e 2c and PASS, WARN,
a490: 20 43 48 45 43 4b 2c 20 6f 72 20 57 41 49 56 45 CHECK, or WAIVE
a4a0: 44 20 74 68 65 6e 20 70 72 65 72 65 71 20 69 73 D then prereq is
a4b0: 20 6d 65 74 0a 3b 3b 20 20 20 20 69 66 20 70 72 met.;; if pr
a4c0: 65 72 65 71 20 74 65 73 74 20 77 69 74 68 20 69 ereq test with i
a4d0: 74 65 6d 70 61 74 68 3d 72 65 66 2d 69 74 65 6d tempath=ref-item
a4e0: 2d 70 61 74 68 20 61 6e 64 20 43 4f 4d 50 4c 45 -path and COMPLE
a4f0: 54 45 44 20 77 69 74 68 20 50 41 53 53 2c 20 57 TED with PASS, W
a500: 41 52 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 20 57 ARN, CHECK, or W
a510: 41 49 56 45 44 20 74 68 65 6e 20 70 72 65 72 65 AIVED then prere
a520: 71 20 69 73 20 6d 65 74 0a 3b 3b 0a 3b 3b 20 4e q is met.;;.;; N
a530: 6f 74 65 3a 20 64 6f 20 6e 6f 74 20 63 6f 6e 76 ote: do not conv
a540: 65 72 74 20 74 6f 20 72 65 6d 6f 74 65 20 61 73 ert to remote as
a550: 20 69 74 20 63 61 6c 6c 73 20 72 65 6d 6f 74 65 it calls remote
a560: 20 75 6e 64 65 72 20 74 68 65 20 68 6f 6f 64 0a under the hood.
a570: 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 ;;.(define (db:g
a580: 65 74 2d 70 72 65 72 65 71 73 2d 6e 6f 74 2d 6d et-prereqs-not-m
a590: 65 74 20 64 62 20 72 75 6e 2d 69 64 20 77 61 69 et db run-id wai
a5a0: 74 6f 6e 73 20 72 65 66 2d 69 74 65 6d 2d 70 61 tons ref-item-pa
a5b0: 74 68 29 0a 20 20 28 69 66 20 28 6f 72 20 28 6e th). (if (or (n
a5c0: 6f 74 20 77 61 69 74 6f 6e 73 29 0a 09 20 20 28 ot waitons).. (
a5d0: 6e 75 6c 6c 3f 20 77 61 69 74 6f 6e 73 29 29 0a null? waitons)).
a5e0: 20 20 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 '().
a5f0: 28 6c 65 74 2a 20 28 28 75 6e 6d 65 74 2d 70 72 (let* ((unmet-pr
a600: 65 2d 72 65 71 73 20 27 28 29 29 0a 09 20 20 20 e-reqs '())..
a610: 20 20 28 72 65 73 75 6c 74 20 20 20 20 20 20 20 (result
a620: 20 20 27 28 29 29 29 0a 09 28 66 6f 72 2d 65 61 '()))..(for-ea
a630: 63 68 20 0a 09 20 28 6c 61 6d 62 64 61 20 28 77 ch .. (lambda (w
a640: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 29 0a aitontest-name).
a650: 09 20 20 20 3b 3b 20 62 79 20 67 65 74 74 69 6e . ;; by gettin
a660: 67 20 74 68 65 20 74 65 73 74 73 20 77 69 74 68 g the tests with
a670: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 77 matching name w
a680: 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 20 6f 6e e are looking on
a690: 6c 79 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 ly at the matchi
a6a0: 6e 67 20 74 65 73 74 20 0a 09 20 20 20 3b 3b 20 ng test .. ;;
a6b0: 61 6e 64 20 72 65 6c 61 74 65 64 20 73 75 62 20 and related sub
a6c0: 69 74 65 6d 73 0a 09 20 20 20 28 6c 65 74 20 28 items.. (let (
a6d0: 28 74 65 73 74 73 20 20 20 20 20 20 20 20 20 20 (tests
a6e0: 20 20 20 28 72 64 62 3a 67 65 74 2d 74 65 73 74 (rdb:get-test
a6f0: 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e s-for-run db run
a700: 2d 69 64 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e -id waitontest-n
a710: 61 6d 65 20 23 66 20 27 28 29 20 27 28 29 29 29 ame #f '() '()))
a720: 0a 09 09 20 28 65 76 65 72 2d 73 65 65 6e 20 20 ... (ever-seen
a730: 20 20 20 20 20 20 20 23 66 29 0a 09 09 20 28 70 #f)... (p
a740: 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d 65 74 arent-waiton-met
a750: 20 23 66 29 0a 09 09 20 28 69 74 65 6d 2d 77 61 #f)... (item-wa
a760: 69 74 6f 6e 2d 6d 65 74 20 20 20 23 66 29 29 0a iton-met #f)).
a770: 09 20 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 . (for-each
a780: 0a 09 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 .. (lambda
a790: 28 74 65 73 74 29 0a 09 09 3b 3b 20 28 69 66 20 (test)...;; (if
a7a0: 28 65 71 75 61 6c 3f 20 77 61 69 74 6f 6e 74 65 (equal? waitonte
a7b0: 73 74 2d 6e 61 6d 65 20 28 64 62 3a 74 65 73 74 st-name (db:test
a7c0: 2d 67 65 74 2d 74 65 73 74 6e 61 6d 65 20 74 65 -get-testname te
a7d0: 73 74 29 29 20 3b 3b 20 62 79 20 64 65 66 69 6e st)) ;; by defin
a7e0: 74 69 6f 6e 20 74 68 69 73 20 68 61 64 20 62 65 tion this had be
a7f0: 74 74 65 72 20 62 65 20 74 72 75 65 20 2e 2e 2e tter be true ...
a800: 0a 09 09 28 6c 65 74 2a 20 28 28 73 74 61 74 65 ...(let* ((state
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 62 (db
a820: 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20 :test-get-state
a830: 74 65 73 74 29 29 0a 09 09 20 20 20 20 20 20 20 test))...
a840: 28 73 74 61 74 75 73 20 20 20 20 20 20 20 20 20 (status
a850: 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d (db:test-get-
a860: 73 74 61 74 75 73 20 74 65 73 74 29 29 0a 09 09 status test))...
a870: 20 20 20 20 20 20 20 28 69 74 65 6d 2d 70 61 74 (item-pat
a880: 68 20 20 20 20 20 20 20 20 20 28 64 62 3a 74 65 h (db:te
a890: 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70 61 74 68 st-get-item-path
a8a0: 20 74 65 73 74 29 29 0a 09 09 20 20 20 20 20 20 test))...
a8b0: 20 28 69 73 2d 63 6f 6d 70 6c 65 74 65 64 20 20 (is-completed
a8c0: 20 20 20 20 28 65 71 75 61 6c 3f 20 73 74 61 74 (equal? stat
a8d0: 65 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 29 0a e "COMPLETED")).
a8e0: 09 09 20 20 20 20 20 20 20 28 69 73 2d 6f 6b 20 .. (is-ok
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 6d (mem
a900: 62 65 72 20 73 74 61 74 75 73 20 27 28 22 50 41 ber status '("PA
a910: 53 53 22 20 22 57 41 52 4e 22 20 22 43 48 45 43 SS" "WARN" "CHEC
a920: 4b 22 20 22 57 41 49 56 45 44 22 29 29 29 0a 09 K" "WAIVED")))..
a930: 09 20 20 20 20 20 20 20 28 73 61 6d 65 2d 69 74 . (same-it
a940: 65 6d 70 61 74 68 20 20 20 20 20 28 65 71 75 61 empath (equa
a950: 6c 3f 20 72 65 66 2d 69 74 65 6d 2d 70 61 74 68 l? ref-item-path
a960: 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a 09 09 item-path)))...
a970: 20 20 28 73 65 74 21 20 65 76 65 72 2d 73 65 65 (set! ever-see
a980: 6e 20 23 74 29 0a 09 09 20 20 28 63 6f 6e 64 0a n #t)... (cond.
a990: 09 09 20 20 20 3b 3b 20 63 61 73 65 20 31 2c 20 .. ;; case 1,
a9a0: 6e 6f 6e 2d 69 74 65 6d 20 28 70 61 72 65 6e 74 non-item (parent
a9b0: 20 74 65 73 74 29 20 69 73 20 0a 09 09 20 20 20 test) is ...
a9c0: 28 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 69 74 ((and (equal? it
a9d0: 65 6d 2d 70 61 74 68 20 22 22 29 20 3b 3b 20 74 em-path "") ;; t
a9e0: 68 69 73 20 69 73 20 74 68 65 20 70 61 72 65 6e his is the paren
a9f0: 74 20 74 65 73 74 0a 09 09 09 20 69 73 2d 63 6f t test.... is-co
aa00: 6d 70 6c 65 74 65 64 0a 09 09 09 20 69 73 2d 6f mpleted.... is-o
aa10: 6b 29 0a 09 09 20 20 20 20 28 73 65 74 21 20 70 k)... (set! p
aa20: 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d 65 74 arent-waiton-met
aa30: 20 23 74 29 29 0a 09 09 20 20 20 28 28 61 6e 64 #t))... ((and
aa40: 20 73 61 6d 65 2d 69 74 65 6d 70 61 74 68 0a 09 same-itempath..
aa50: 09 09 20 69 73 2d 63 6f 6d 70 6c 65 74 65 64 0a .. is-completed.
aa60: 09 09 09 20 69 73 2d 6f 6b 29 0a 09 09 20 20 20 ... is-ok)...
aa70: 20 28 73 65 74 21 20 69 74 65 6d 2d 77 61 69 74 (set! item-wait
aa80: 6f 6e 2d 6d 65 74 20 23 74 29 29 29 29 29 0a 09 on-met #t)))))..
aa90: 20 20 20 20 20 20 74 65 73 74 73 29 0a 09 20 20 tests)..
aaa0: 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6f 72 20 (if (not (or
aab0: 70 61 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d 65 parent-waiton-me
aac0: 74 20 69 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 t item-waiton-me
aad0: 74 29 29 0a 09 09 20 28 73 65 74 21 20 72 65 73 t))... (set! res
aae0: 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 74 6f 6e ult (cons waiton
aaf0: 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 75 6c 74 test-name result
ab00: 29 29 29 0a 09 20 20 20 20 20 3b 3b 20 69 66 20 ))).. ;; if
ab10: 74 68 65 20 74 65 73 74 20 69 73 20 6e 6f 74 20 the test is not
ab20: 66 6f 75 6e 64 20 74 68 65 6e 20 63 6c 65 61 72 found then clear
ab30: 6c 79 20 74 68 65 20 77 61 69 74 6f 6e 20 69 73 ly the waiton is
ab40: 20 6e 6f 74 20 6d 65 74 2e 2e 2e 0a 09 20 20 20 not met.....
ab50: 20 20 28 69 66 20 28 6e 6f 74 20 65 76 65 72 2d (if (not ever-
ab60: 73 65 65 6e 29 28 73 65 74 21 20 72 65 73 75 6c seen)(set! resul
ab70: 74 20 28 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 t (cons waitonte
ab80: 73 74 2d 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 st-name result))
ab90: 29 29 29 0a 09 77 61 69 74 6f 6e 73 29 0a 20 20 )))..waitons).
aba0: 20 20 20 20 28 64 65 6c 65 74 65 2d 64 75 70 6c (delete-dupl
abb0: 69 63 61 74 65 73 20 72 65 73 75 6c 74 29 29 29 icates result)))
abc0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
abd0: 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 eststep-set-stat
abe0: 75 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 us! db run-id te
abf0: 73 74 2d 6e 61 6d 65 20 74 65 73 74 73 74 65 70 st-name teststep
ac00: 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 -name state-in s
ac10: 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 tatus-in item-pa
ac20: 74 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 th comment logfi
ac30: 6c 65 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 le). (debug:pri
ac40: 6e 74 20 34 20 22 72 75 6e 2d 69 64 3a 20 22 20 nt 4 "run-id: "
ac50: 72 75 6e 2d 69 64 20 22 20 74 65 73 74 2d 6e 61 run-id " test-na
ac60: 6d 65 3a 20 22 20 74 65 73 74 2d 6e 61 6d 65 29 me: " test-name)
ac70: 0a 20 20 28 6c 65 74 2a 20 28 28 73 74 61 74 65 . (let* ((state
ac80: 20 20 20 20 20 28 63 68 65 63 6b 2d 76 61 6c 69 (check-vali
ac90: 64 2d 69 74 65 6d 73 20 22 73 74 61 74 65 22 20 d-items "state"
aca0: 73 74 61 74 65 2d 69 6e 29 29 0a 09 20 28 73 74 state-in)).. (st
acb0: 61 74 75 73 20 20 20 20 28 63 68 65 63 6b 2d 76 atus (check-v
acc0: 61 6c 69 64 2d 69 74 65 6d 73 20 22 73 74 61 74 alid-items "stat
acd0: 75 73 22 20 73 74 61 74 75 73 2d 69 6e 29 29 0a us" status-in)).
ace0: 09 20 28 74 65 73 74 64 61 74 20 20 20 28 64 62 . (testdat (db
acf0: 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 :get-test-info d
ad00: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
ad10: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a me item-path))).
ad20: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
ad30: 20 35 20 22 74 65 73 74 64 61 74 3a 20 22 20 74 5 "testdat: " t
ad40: 65 73 74 64 61 74 29 0a 20 20 20 20 28 69 66 20 estdat). (if
ad50: 28 61 6e 64 20 74 65 73 74 64 61 74 20 3b 3b 20 (and testdat ;;
ad60: 69 66 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 if the section e
ad70: 78 69 73 74 73 20 74 68 65 6e 20 66 6f 72 63 65 xists then force
ad80: 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 42 specification B
ad90: 55 47 2c 20 49 20 64 6f 6e 27 74 20 6c 69 6b 65 UG, I don't like
ada0: 20 68 6f 77 20 74 68 69 73 20 77 6f 72 6b 73 2e how this works.
adb0: 0a 09 20 20 20 20 20 28 6f 72 20 28 6e 6f 74 20 .. (or (not
adc0: 73 74 61 74 65 29 28 6e 6f 74 20 73 74 61 74 75 state)(not statu
add0: 73 29 29 29 0a 09 28 64 65 62 75 67 3a 70 72 69 s)))..(debug:pri
ade0: 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 3a 20 49 nt 0 "WARNING: I
adf0: 6e 76 61 6c 69 64 20 22 20 28 69 66 20 73 74 61 nvalid " (if sta
ae00: 74 75 73 20 22 73 74 61 74 75 73 22 20 22 73 74 tus "status" "st
ae10: 61 74 65 22 29 0a 09 20 20 20 20 20 20 20 22 20 ate").. "
ae20: 76 61 6c 75 65 20 5c 22 22 20 28 69 66 20 73 74 value \"" (if st
ae30: 61 74 75 73 20 73 74 61 74 65 2d 69 6e 20 73 74 atus state-in st
ae40: 61 74 75 73 2d 69 6e 29 20 22 5c 22 2c 20 75 70 atus-in) "\", up
ae50: 64 61 74 65 20 79 6f 75 72 20 76 61 6c 69 64 76 date your validv
ae60: 61 6c 75 65 73 20 73 65 63 74 69 6f 6e 20 69 6e alues section in
ae70: 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 megatest.config
ae80: 22 29 29 0a 20 20 20 20 28 69 66 20 74 65 73 74 ")). (if test
ae90: 64 61 74 0a 09 28 6c 65 74 20 28 28 74 65 73 74 dat..(let ((test
aea0: 2d 69 64 20 28 74 65 73 74 3a 67 65 74 2d 69 64 -id (test:get-id
aeb0: 20 74 65 73 74 64 61 74 29 29 29 0a 09 20 20 28 testdat))).. (
aec0: 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 2a 69 6e 63 mutex-lock! *inc
aed0: 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 09 20 oming-mutex*)..
aee0: 20 28 73 65 74 21 20 2a 69 6e 63 6f 6d 69 6e 67 (set! *incoming
aef0: 2d 64 61 74 61 2a 20 28 63 6f 6e 73 20 28 76 65 -data* (cons (ve
af00: 63 74 6f 72 20 27 73 74 65 70 2d 73 74 61 74 75 ctor 'step-statu
af10: 73 0a 09 09 09 09 09 20 20 20 20 20 20 28 63 75 s...... (cu
af20: 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 0a 09 rrent-seconds)..
af30: 09 09 09 09 20 20 20 20 20 20 3b 3b 20 46 49 58 .... ;; FIX
af40: 4d 45 20 2d 20 74 68 69 73 20 73 68 6f 75 6c 64 ME - this should
af50: 20 6e 6f 74 20 75 70 64 61 74 65 20 74 68 65 20 not update the
af60: 6c 6f 67 66 69 6c 65 20 75 6e 6c 65 73 73 20 69 logfile unless i
af70: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a t is specified..
af80: 09 09 09 09 09 20 20 20 20 20 20 28 6c 69 73 74 ..... (list
af90: 20 74 65 73 74 2d 69 64 20 74 65 73 74 73 74 65 test-id testste
afa0: 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 p-name state-in
afb0: 73 74 61 74 75 73 2d 69 6e 20 28 63 75 72 72 65 status-in (curre
afc0: 6e 74 2d 73 65 63 6f 6e 64 73 29 20 28 69 66 20 nt-seconds) (if
afd0: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 comment comment
afe0: 22 22 29 20 28 69 66 20 6c 6f 67 66 69 6c 65 20 "") (if logfile
aff0: 6c 6f 67 66 69 6c 65 20 22 22 29 29 29 0a 09 09 logfile "")))...
b000: 09 09 20 20 20 20 20 20 2a 69 6e 63 6f 6d 69 6e .. *incomin
b010: 67 2d 64 61 74 61 2a 29 29 0a 09 20 20 28 6d 75 g-data*)).. (mu
b020: 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 tex-unlock! *inc
b030: 6f 6d 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 09 20 oming-mutex*)..
b040: 20 28 69 66 20 28 6e 6f 74 20 2a 63 61 63 68 65 (if (not *cache
b050: 2d 6f 6e 2a 29 28 64 62 3a 77 72 69 74 65 2d 63 -on*)(db:write-c
b060: 61 63 68 65 64 2d 64 61 74 61 20 64 62 29 29 0a ached-data db)).
b070: 09 20 20 23 74 29 0a 09 28 64 65 62 75 67 3a 70 . #t)..(debug:p
b080: 72 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20 43 rint 0 "ERROR: C
b090: 61 6e 27 74 20 75 70 64 61 74 65 20 22 20 74 65 an't update " te
b0a0: 73 74 2d 6e 61 6d 65 20 22 20 66 6f 72 20 72 75 st-name " for ru
b0b0: 6e 20 22 20 72 75 6e 2d 69 64 20 22 20 2d 3e 20 n " run-id " ->
b0c0: 6e 6f 20 73 75 63 68 20 74 65 73 74 20 69 6e 20 no such test in
b0d0: 64 62 22 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d db"))))..;;=====
b0e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b0f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b120: 3d 0a 3b 3b 20 45 78 74 72 61 63 74 20 6f 64 73 =.;; Extract ods
b130: 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 file from the d
b140: 62 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d b.;;============
b150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 ==========..;; r
b190: 75 6e 73 70 61 74 74 20 69 73 20 61 20 63 6f 6d unspatt is a com
b1a0: 6d 61 20 64 65 6c 69 6d 69 74 65 64 20 6c 69 73 ma delimited lis
b1b0: 74 20 6f 66 20 72 75 6e 20 70 61 74 74 65 72 6e t of run pattern
b1c0: 73 0a 3b 3b 20 6b 65 79 70 61 74 74 2d 61 6c 69 s.;; keypatt-ali
b1d0: 73 74 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 st must contain
b1e0: 2a 61 6c 6c 2a 20 6b 65 79 73 20 77 69 74 68 20 *all* keys with
b1f0: 61 6e 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 an associated pa
b200: 74 74 65 72 6e 3a 20 27 28 20 28 22 4b 45 59 31 ttern: '( ("KEY1
b210: 22 20 22 25 22 29 20 2e 2e 20 29 0a 28 64 65 66 " "%") .. ).(def
b220: 69 6e 65 20 28 64 62 3a 65 78 74 72 61 63 74 2d ine (db:extract-
b230: 6f 64 73 2d 66 69 6c 65 20 64 62 20 6f 75 74 70 ods-file db outp
b240: 75 74 66 69 6c 65 20 6b 65 79 70 61 74 74 2d 61 utfile keypatt-a
b250: 6c 69 73 74 20 72 75 6e 73 70 61 74 74 20 70 61 list runspatt pa
b260: 74 68 6d 6f 64 29 0a 20 20 28 6c 65 74 2a 20 28 thmod). (let* (
b270: 28 6b 65 79 73 73 74 72 20 20 28 73 74 72 69 6e (keysstr (strin
b280: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d g-intersperse (m
b290: 61 70 20 63 61 72 20 6b 65 79 70 61 74 74 2d 61 ap car keypatt-a
b2a0: 6c 69 73 74 29 20 22 2c 22 29 29 0a 09 20 28 6b list) ",")).. (k
b2b0: 65 79 71 72 79 20 20 20 28 73 74 72 69 6e 67 2d eyqry (string-
b2c0: 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 intersperse (map
b2d0: 20 28 6c 61 6d 62 64 61 20 28 70 29 28 63 6f 6e (lambda (p)(con
b2e0: 63 20 28 63 61 72 20 70 29 20 22 20 4c 49 4b 45 c (car p) " LIKE
b2f0: 20 3f 20 22 29 29 20 6b 65 79 70 61 74 74 2d 61 ? ")) keypatt-a
b300: 6c 69 73 74 29 20 22 20 41 4e 44 20 22 29 29 0a list) " AND ")).
b310: 09 20 28 6e 75 6d 6b 65 79 73 20 20 28 6c 65 6e . (numkeys (len
b320: 67 74 68 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 gth keypatt-alis
b330: 74 29 29 0a 09 20 28 74 65 73 74 2d 69 64 73 20 t)).. (test-ids
b340: 27 28 29 29 0a 09 20 28 77 69 6e 64 6f 77 73 20 '()).. (windows
b350: 20 28 61 6e 64 20 70 61 74 68 6d 6f 64 20 28 73 (and pathmod (s
b360: 75 62 73 74 72 69 6e 67 2d 69 6e 64 65 78 20 22 ubstring-index "
b370: 5c 5c 22 20 70 61 74 68 6d 6f 64 29 29 29 0a 09 \\" pathmod)))..
b380: 20 28 74 65 6d 70 64 69 72 20 20 28 63 6f 6e 63 (tempdir (conc
b390: 20 22 2f 74 6d 70 2f 22 20 28 63 75 72 72 65 6e "/tmp/" (curren
b3a0: 74 2d 75 73 65 72 2d 6e 61 6d 65 29 20 22 2f 22 t-user-name) "/"
b3b0: 20 72 75 6e 73 70 61 74 74 20 22 5f 22 20 28 72 runspatt "_" (r
b3c0: 61 6e 64 6f 6d 20 31 30 30 30 30 29 20 22 5f 22 andom 10000) "_"
b3d0: 20 28 63 75 72 72 65 6e 74 2d 70 72 6f 63 65 73 (current-proces
b3e0: 73 2d 69 64 29 29 29 0a 09 20 28 72 75 6e 73 68 s-id))).. (runsh
b3f0: 65 61 64 65 72 20 28 61 70 70 65 6e 64 20 28 6c eader (append (l
b400: 69 73 74 20 22 52 75 6e 20 49 64 22 20 22 52 75 ist "Run Id" "Ru
b410: 6e 6e 61 6d 65 22 29 20 3b 20 30 20 31 0a 09 09 nname") ; 0 1...
b420: 09 20 20 20 20 20 28 6d 61 70 20 63 61 72 20 6b . (map car k
b430: 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 20 20 eypatt-alist)
b440: 3b 20 2b 20 4e 20 3d 20 6c 65 6e 67 74 68 20 6b ; + N = length k
b450: 65 79 70 61 74 74 2d 61 6c 69 73 74 0a 09 09 09 eypatt-alist....
b460: 20 20 20 20 20 28 6c 69 73 74 20 22 54 65 73 74 (list "Test
b470: 6e 61 6d 65 22 20 20 20 20 20 20 20 20 20 20 3b name" ;
b480: 20 32 0a 09 09 09 09 20 20 20 22 49 74 65 6d 20 2..... "Item
b490: 50 61 74 68 22 20 20 20 20 20 20 20 20 20 3b 20 Path" ;
b4a0: 33 20 0a 09 09 09 09 20 20 20 22 44 65 73 63 72 3 ..... "Descr
b4b0: 69 70 74 69 6f 6e 22 20 20 20 20 20 20 20 3b 20 iption" ;
b4c0: 34 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 65 4 ..... "State
b4d0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 " ;
b4e0: 35 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 75 5 ..... "Statu
b4f0: 73 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 s" ;
b500: 36 20 20 0a 09 09 09 09 20 20 20 22 46 69 6e 61 6 ..... "Fina
b510: 6c 20 4c 6f 67 22 20 20 20 20 20 20 20 20 20 3b l Log" ;
b520: 20 37 20 0a 09 09 09 09 20 20 20 22 52 75 6e 20 7 ..... "Run
b530: 44 75 72 61 74 69 6f 6e 22 20 20 20 20 20 20 3b Duration" ;
b540: 20 38 20 0a 09 09 09 09 20 20 20 22 57 68 65 6e 8 ..... "When
b550: 20 52 75 6e 22 20 20 20 20 20 20 20 20 20 20 3b Run" ;
b560: 20 39 20 0a 09 09 09 09 20 20 20 22 54 61 67 73 9 ..... "Tags
b570: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b " ;
b580: 20 31 30 0a 09 09 09 09 20 20 20 22 52 75 6e 20 10..... "Run
b590: 4f 77 6e 65 72 22 20 20 20 20 20 20 20 20 20 3b Owner" ;
b5a0: 20 31 31 0a 09 09 09 09 20 20 20 22 43 6f 6d 6d 11..... "Comm
b5b0: 65 6e 74 22 20 20 20 20 20 20 20 20 20 20 20 3b ent" ;
b5c0: 20 31 32 0a 09 09 09 09 20 20 20 22 41 75 74 68 12..... "Auth
b5d0: 6f 72 22 20 20 20 20 20 20 20 20 20 20 20 20 3b or" ;
b5e0: 20 31 33 0a 09 09 09 09 20 20 20 22 54 65 73 74 13..... "Test
b5f0: 20 4f 77 6e 65 72 22 20 20 20 20 20 20 20 20 3b Owner" ;
b600: 20 31 34 0a 09 09 09 09 20 20 20 22 52 65 76 69 14..... "Revi
b610: 65 77 65 64 22 20 20 20 20 20 20 20 20 20 20 3b ewed" ;
b620: 20 31 35 0a 09 09 09 09 20 20 20 22 44 69 73 6b 15..... "Disk
b630: 66 72 65 65 22 20 20 20 20 20 20 20 20 20 20 3b free" ;
b640: 20 31 36 0a 09 09 09 09 20 20 20 22 55 6e 61 6d 16..... "Unam
b650: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 3b e" ;
b660: 20 31 37 0a 09 09 09 09 20 20 20 22 52 75 6e 64 17..... "Rund
b670: 69 72 22 20 20 20 20 20 20 20 20 20 20 20 20 3b ir" ;
b680: 20 31 38 0a 09 09 09 09 20 20 20 22 48 6f 73 74 18..... "Host
b690: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b " ;
b6a0: 20 31 39 0a 09 09 09 09 20 20 20 22 43 70 75 20 19..... "Cpu
b6b0: 4c 6f 61 64 22 20 20 20 20 20 20 20 20 20 20 3b Load" ;
b6c0: 20 32 30 0a 09 09 09 09 20 20 20 29 29 29 0a 09 20..... )))..
b6d0: 20 28 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 (results (list
b6e0: 72 75 6e 73 68 65 61 64 65 72 29 29 09 09 09 20 runsheader))...
b6f0: 0a 09 20 28 74 65 73 74 64 61 74 61 2d 68 65 61 .. (testdata-hea
b700: 64 65 72 20 28 6c 69 73 74 20 22 52 75 6e 20 49 der (list "Run I
b710: 64 22 20 22 54 65 73 74 6e 61 6d 65 22 20 22 49 d" "Testname" "I
b720: 74 65 6d 20 50 61 74 68 22 20 22 43 61 74 65 67 tem Path" "Categ
b730: 6f 72 79 22 20 22 56 61 72 69 61 62 6c 65 22 20 ory" "Variable"
b740: 22 56 61 6c 75 65 22 20 22 45 78 70 65 63 74 65 "Value" "Expecte
b750: 64 22 20 22 54 6f 6c 22 20 22 55 6e 69 74 73 22 d" "Tol" "Units"
b760: 20 22 53 74 61 74 75 73 22 20 22 43 6f 6d 6d 65 "Status" "Comme
b770: 6e 74 22 29 29 0a 09 20 28 6d 61 69 6e 71 72 79 nt")).. (mainqry
b780: 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 0a 20 (conc "SELECT.
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 74 t.t
b7a0: 65 73 74 6e 61 6d 65 2c 72 2e 69 64 2c 72 75 6e estname,r.id,run
b7b0: 6e 61 6d 65 2c 22 20 6b 65 79 73 73 74 72 20 22 name," keysstr "
b7c0: 2c 74 2e 74 65 73 74 6e 61 6d 65 2c 0a 20 20 20 ,t.testname,.
b7d0: 20 20 20 20 20 20 20 20 20 20 20 74 2e 69 74 65 t.ite
b7e0: 6d 5f 70 61 74 68 2c 74 6d 2e 64 65 73 63 72 69 m_path,tm.descri
b7f0: 70 74 69 6f 6e 2c 74 2e 73 74 61 74 65 2c 74 2e ption,t.state,t.
b800: 73 74 61 74 75 73 2c 0a 20 20 20 20 20 20 20 20 status,.
b810: 20 20 20 20 20 20 66 69 6e 61 6c 5f 6c 6f 67 66 final_logf
b820: 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 20 0a ,run_duration, .
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
b840: 72 66 74 69 6d 65 28 27 25 6d 2f 25 64 2f 25 59 rftime('%m/%d/%Y
b850: 20 25 48 3a 25 4d 3a 25 53 27 2c 64 61 74 65 74 %H:%M:%S',datet
b860: 69 6d 65 28 74 2e 65 76 65 6e 74 5f 74 69 6d 65 ime(t.event_time
b870: 2c 27 75 6e 69 78 65 70 6f 63 68 27 29 2c 27 6c ,'unixepoch'),'l
b880: 6f 63 61 6c 74 69 6d 65 27 29 2c 0a 20 20 20 20 ocaltime'),.
b890: 20 20 20 20 20 20 20 20 20 20 74 6d 2e 74 61 67 tm.tag
b8a0: 73 2c 72 2e 6f 77 6e 65 72 2c 74 2e 63 6f 6d 6d s,r.owner,t.comm
b8b0: 65 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ent,.
b8c0: 20 20 20 61 75 74 68 6f 72 2c 0a 20 20 20 20 20 author,.
b8d0: 20 20 20 20 20 20 20 20 20 74 6d 2e 6f 77 6e 65 tm.owne
b8e0: 72 2c 72 65 76 69 65 77 65 64 2c 0a 20 20 20 20 r,reviewed,.
b8f0: 20 20 20 20 20 20 20 20 20 20 64 69 73 6b 66 72 diskfr
b900: 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c ee,uname,rundir,
b910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 . h
b920: 6f 73 74 2c 63 70 75 6c 6f 61 64 0a 20 20 20 20 ost,cpuload.
b930: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 FROM tes
b940: 74 73 20 41 53 20 74 20 4a 4f 49 4e 20 72 75 6e ts AS t JOIN run
b950: 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f s AS r ON t.run_
b960: 69 64 3d 72 2e 69 64 20 4a 4f 49 4e 20 74 65 73 id=r.id JOIN tes
b970: 74 5f 6d 65 74 61 20 41 53 20 74 6d 20 4f 4e 20 t_meta AS tm ON
b980: 74 6d 2e 74 65 73 74 6e 61 6d 65 3d 74 2e 74 65 tm.testname=t.te
b990: 73 74 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 stname.
b9a0: 20 20 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 WHERE runname
b9b0: 20 4c 49 4b 45 20 3f 20 41 4e 44 20 22 20 6b 65 LIKE ? AND " ke
b9c0: 79 71 72 79 20 22 3b 22 29 29 29 0a 20 20 20 20 yqry ";"))).
b9d0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 (debug:print 2 "
b9e0: 55 73 69 6e 67 20 22 20 74 65 6d 70 64 69 72 20 Using " tempdir
b9f0: 22 20 66 6f 72 20 63 6f 6e 73 74 72 75 63 74 69 " for constructi
ba00: 6e 67 20 74 68 65 20 6f 64 73 20 66 69 6c 65 2e ng the ods file.
ba10: 20 6b 65 79 71 72 79 3a 20 22 20 6b 65 79 71 72 keyqry: " keyqr
ba20: 79 20 22 20 6b 65 79 73 74 72 3a 20 22 20 6b 65 y " keystr: " ke
ba30: 79 73 73 74 72 20 22 20 77 69 74 68 20 6b 65 79 ysstr " with key
ba40: 73 3a 20 22 20 28 6d 61 70 20 63 61 64 72 20 6b s: " (map cadr k
ba50: 65 79 70 61 74 74 2d 61 6c 69 73 74 29 0a 09 09 eypatt-alist)...
ba60: 20 22 5c 6e 20 20 20 20 20 20 6d 61 69 6e 71 72 "\n mainqr
ba70: 79 3a 20 22 20 6d 61 69 6e 71 72 79 29 0a 20 20 y: " mainqry).
ba80: 20 20 3b 3b 20 22 45 78 70 65 63 74 65 64 20 56 ;; "Expected V
ba90: 61 6c 75 65 22 0a 20 20 20 20 3b 3b 20 22 56 61 alue". ;; "Va
baa0: 6c 75 65 20 46 6f 75 6e 64 22 0a 20 20 20 20 3b lue Found". ;
bab0: 3b 20 22 54 6f 6c 65 72 61 6e 63 65 22 0a 20 20 ; "Tolerance".
bac0: 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 (apply sqlite3
bad0: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 :for-each-row..
bae0: 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 2d (lambda (test-
baf0: 69 64 20 2e 20 62 29 0a 09 20 20 20 20 20 28 73 id . b).. (s
bb00: 65 74 21 20 74 65 73 74 2d 69 64 73 20 28 63 6f et! test-ids (co
bb10: 6e 73 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d ns test-id test-
bb20: 69 64 73 29 29 20 20 20 3b 3b 20 74 65 73 74 2d ids)) ;; test-
bb30: 69 64 20 69 73 20 6e 6f 77 20 74 65 73 74 6e 61 id is now testna
bb40: 6d 65 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 me.. (set! r
bb50: 65 73 75 6c 74 73 20 28 61 70 70 65 6e 64 20 72 esults (append r
bb60: 65 73 75 6c 74 73 20 3b 3b 20 6e 6f 74 65 2c 20 esults ;; note,
bb70: 64 72 6f 70 20 74 68 65 20 74 65 73 74 2d 69 64 drop the test-id
bb80: 0a 09 09 09 09 20 20 20 28 6c 69 73 74 0a 09 09 ..... (list...
bb90: 09 09 20 20 20 20 28 69 66 20 70 61 74 68 6d 6f .. (if pathmo
bba0: 64 0a 09 09 09 09 09 28 6c 65 74 2a 20 28 28 76 d......(let* ((v
bbb0: 62 20 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 b (apply
bbc0: 76 65 63 74 6f 72 20 62 29 29 0a 09 09 09 09 09 vector b))......
bbd0: 20 20 20 20 20 20 20 28 6b 65 79 76 61 6c 73 20 (keyvals
bbe0: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 69 20 (let loop ((i
bbf0: 20 20 20 30 29 0a 09 09 09 09 09 09 09 09 20 20 0).........
bc00: 20 20 20 28 72 65 73 20 27 28 29 29 29 0a 09 09 (res '()))...
bc10: 09 09 09 09 09 20 20 20 20 28 69 66 20 28 3e 3d ..... (if (>=
bc20: 20 69 20 6e 75 6d 6b 65 79 73 29 0a 09 09 09 09 i numkeys).....
bc30: 09 09 09 09 72 65 73 0a 09 09 09 09 09 09 09 09 ....res.........
bc40: 28 6c 6f 6f 70 20 28 2b 20 69 20 31 29 0a 09 09 (loop (+ i 1)...
bc50: 09 09 09 09 09 09 20 20 20 20 20 20 28 61 70 70 ...... (app
bc60: 65 6e 64 20 72 65 73 20 28 6c 69 73 74 20 28 76 end res (list (v
bc70: 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 ector-ref vb (+
bc80: 69 20 32 29 29 29 29 29 29 29 29 0a 09 09 09 09 i 2)))))))).....
bc90: 09 20 20 20 20 20 20 20 28 72 75 6e 6e 61 6d 65 . (runname
bca0: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 (vector-ref v
bcb0: 62 20 31 29 29 0a 09 09 09 09 09 20 20 20 20 20 b 1))......
bcc0: 20 20 28 74 65 73 74 6e 61 6d 65 20 20 28 76 65 (testname (ve
bcd0: 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 ctor-ref vb (+
bce0: 32 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 2 numkeys)))....
bcf0: 09 09 20 20 20 20 20 20 20 28 69 74 65 6d 2d 70 .. (item-p
bd00: 61 74 68 20 28 76 65 63 74 6f 72 2d 72 65 66 20 ath (vector-ref
bd10: 76 62 20 28 2b 20 20 33 20 6e 75 6d 6b 65 79 73 vb (+ 3 numkeys
bd20: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 )))......
bd30: 28 66 69 6e 61 6c 2d 6c 6f 67 20 28 76 65 63 74 (final-log (vect
bd40: 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 37 20 or-ref vb (+ 7
bd50: 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 numkeys)))......
bd60: 20 20 20 20 20 20 20 28 72 75 6e 2d 64 69 72 20 (run-dir
bd70: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 (vector-ref vb
bd80: 20 28 2b 20 31 38 20 6e 75 6d 6b 65 79 73 29 29 (+ 18 numkeys))
bd90: 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 6c )...... (l
bda0: 6f 67 2d 66 70 61 74 68 20 28 63 6f 6e 63 20 72 og-fpath (conc r
bdb0: 75 6e 2d 64 69 72 20 22 2f 22 20 20 66 69 6e 61 un-dir "/" fina
bdc0: 6c 2d 6c 6f 67 29 29 29 20 3b 3b 20 28 73 74 72 l-log))) ;; (str
bdd0: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 ing-intersperse
bde0: 6b 65 79 76 61 6c 73 20 22 2f 22 29 20 22 2f 22 keyvals "/") "/"
bdf0: 20 74 65 73 74 6e 61 6d 65 20 22 2f 22 20 69 74 testname "/" it
be00: 65 6d 2d 70 61 74 68 20 22 2f 22 0a 09 09 09 09 em-path "/".....
be10: 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 . (debug:print
be20: 34 20 22 6c 6f 67 3a 20 22 20 6c 6f 67 2d 66 70 4 "log: " log-fp
be30: 61 74 68 20 22 20 65 78 69 73 74 73 3a 20 22 20 ath " exists: "
be40: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c 6f (file-exists? lo
be50: 67 2d 66 70 61 74 68 29 29 0a 09 09 09 09 09 20 g-fpath))......
be60: 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 62 (vector-set! vb
be70: 20 28 2b 20 37 20 6e 75 6d 6b 65 79 73 29 20 28 (+ 7 numkeys) (
be80: 69 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f if (file-exists?
be90: 20 6c 6f 67 2d 66 70 61 74 68 29 0a 09 09 09 09 log-fpath).....
bea0: 09 09 09 09 09 20 20 20 20 28 6c 65 74 20 28 28 ..... (let ((
beb0: 6e 65 77 70 61 74 68 20 28 63 6f 6e 63 20 70 61 newpath (conc pa
bec0: 74 68 6d 6f 64 20 22 2f 22 0a 09 09 09 09 09 09 thmod "/".......
bed0: 09 09 09 09 09 09 20 28 73 74 72 69 6e 67 2d 69 ...... (string-i
bee0: 6e 74 65 72 73 70 65 72 73 65 20 6b 65 79 76 61 ntersperse keyva
bef0: 6c 73 20 22 2f 22 29 0a 09 09 09 09 09 09 09 09 ls "/").........
bf00: 09 09 09 09 20 22 2f 22 20 72 75 6e 6e 61 6d 65 .... "/" runname
bf10: 20 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 2f "/" testname "/
bf20: 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 28 "............. (
bf30: 69 66 20 28 73 74 72 69 6e 67 3d 3f 20 69 74 65 if (string=? ite
bf40: 6d 2d 70 61 74 68 20 22 22 29 20 22 22 20 28 63 m-path "") "" (c
bf50: 6f 6e 63 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 onc "/" item-pat
bf60: 68 29 29 0a 09 09 09 09 09 09 09 09 09 09 09 09 h)).............
bf70: 20 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 0a 09 09 final-log)))...
bf80: 09 09 09 09 09 09 09 20 20 20 20 20 20 3b 3b 20 ....... ;;
bf90: 66 6f 72 20 6e 6f 77 20 74 68 72 6f 77 20 61 77 for now throw aw
bfa0: 61 79 20 6e 65 77 70 61 74 68 20 61 6e 64 20 75 ay newpath and u
bfb0: 73 65 20 74 68 65 20 6c 6f 67 2d 66 70 61 74 68 se the log-fpath
bfc0: 20 63 6f 6e 63 27 64 20 77 69 74 68 20 70 61 74 conc'd with pat
bfd0: 68 6d 6f 64 0a 09 09 09 09 09 09 09 09 09 20 20 hmod..........
bfe0: 20 20 20 20 28 73 65 74 21 20 6e 65 77 70 61 74 (set! newpat
bff0: 68 20 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 h (conc pathmod
c000: 6c 6f 67 2d 66 70 61 74 68 29 29 0a 09 09 09 09 log-fpath)).....
c010: 09 09 09 09 09 20 20 20 20 20 20 28 69 66 20 77 ..... (if w
c020: 69 6e 64 6f 77 73 20 28 73 74 72 69 6e 67 2d 74 indows (string-t
c030: 72 61 6e 73 6c 61 74 65 20 6e 65 77 70 61 74 68 ranslate newpath
c040: 20 22 2f 22 20 22 5c 5c 22 29 20 6e 65 77 70 61 "/" "\\") newpa
c050: 74 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 20 th))..........
c060: 20 20 28 69 66 20 28 3e 20 2a 76 65 72 62 6f 73 (if (> *verbos
c070: 69 74 79 2a 20 31 29 0a 09 09 09 09 09 09 09 09 ity* 1).........
c080: 09 09 28 63 6f 6e 63 20 66 69 6e 61 6c 2d 6c 6f ..(conc final-lo
c090: 67 20 22 20 6e 6f 74 2d 66 6f 75 6e 64 22 29 0a g " not-found").
c0a0: 09 09 09 09 09 09 09 09 09 09 22 22 29 29 29 0a ..........""))).
c0b0: 09 09 09 09 09 20 20 28 76 65 63 74 6f 72 2d 3e ..... (vector->
c0c0: 6c 69 73 74 20 76 62 29 29 0a 09 09 09 09 09 62 list vb))......b
c0d0: 29 29 29 29 29 0a 09 20 20 20 64 62 0a 09 20 20 ))))).. db..
c0e0: 20 6d 61 69 6e 71 72 79 0a 09 20 20 20 72 75 6e mainqry.. run
c0f0: 73 70 61 74 74 20 28 6d 61 70 20 63 61 64 72 20 spatt (map cadr
c100: 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 29 29 0a keypatt-alist)).
c110: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
c120: 20 32 20 22 46 6f 75 6e 64 20 22 20 28 6c 65 6e 2 "Found " (len
c130: 67 74 68 20 74 65 73 74 2d 69 64 73 29 20 22 20 gth test-ids) "
c140: 72 65 63 6f 72 64 73 22 29 0a 20 20 20 20 28 73 records"). (s
c150: 65 74 21 20 72 65 73 75 6c 74 73 20 28 6c 69 73 et! results (lis
c160: 74 20 28 63 6f 6e 73 20 22 52 75 6e 73 22 20 72 t (cons "Runs" r
c170: 65 73 75 6c 74 73 29 29 29 0a 20 20 20 20 3b 3b esults))). ;;
c180: 20 6e 6f 77 2c 20 66 6f 72 20 65 61 63 68 20 74 now, for each t
c190: 65 73 74 2c 20 63 6f 6c 6c 65 63 74 20 74 68 65 est, collect the
c1a0: 20 74 65 73 74 5f 64 61 74 61 20 69 6e 66 6f 20 test_data info
c1b0: 61 6e 64 20 61 64 64 20 61 20 6e 65 77 20 73 68 and add a new sh
c1c0: 65 65 74 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 eet. (for-eac
c1d0: 68 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 h. (lambda (
c1e0: 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 20 test-id).
c1f0: 28 6c 65 74 20 28 28 74 65 73 74 2d 64 61 74 61 (let ((test-data
c200: 20 28 6c 69 73 74 20 74 65 73 74 64 61 74 61 2d (list testdata-
c210: 68 65 61 64 65 72 29 29 0a 09 20 20 20 20 20 28 header)).. (
c220: 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 23 curr-test-name #
c230: 66 29 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 f)).. (sqlite3:f
c240: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 28 or-each-row.. (
c250: 6c 61 6d 62 64 61 20 28 72 75 6e 2d 69 64 20 74 lambda (run-id t
c260: 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 estname item-pat
c270: 68 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 h category varia
c280: 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 ble value expect
c290: 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 73 74 61 ed tol units sta
c2a0: 74 75 73 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 20 tus comment)..
c2b0: 20 20 28 73 65 74 21 20 63 75 72 72 2d 74 65 73 (set! curr-tes
c2c0: 74 2d 6e 61 6d 65 20 74 65 73 74 6e 61 6d 65 29 t-name testname)
c2d0: 0a 09 20 20 20 20 28 73 65 74 21 20 74 65 73 74 .. (set! test
c2e0: 2d 64 61 74 61 20 28 61 70 70 65 6e 64 20 74 65 -data (append te
c2f0: 73 74 2d 64 61 74 61 20 28 6c 69 73 74 20 28 6c st-data (list (l
c300: 69 73 74 20 72 75 6e 2d 69 64 20 74 65 73 74 6e ist run-id testn
c310: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 61 ame item-path ca
c320: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 tegory variable
c330: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 value expected t
c340: 6f 6c 20 75 6e 69 74 73 20 73 74 61 74 75 73 20 ol units status
c350: 63 6f 6d 6d 65 6e 74 29 29 29 29 29 0a 09 20 20 comment)))))..
c360: 64 62 20 0a 09 20 20 3b 3b 20 22 53 45 4c 45 43 db .. ;; "SELEC
c370: 54 20 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d T run_id,testnam
c380: 65 2c 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 e,item_path,cate
c390: 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 gory,variable,td
c3a0: 2e 76 61 6c 75 65 20 41 53 20 76 61 6c 75 65 2c .value AS value,
c3b0: 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 expected,tol,uni
c3c0: 74 73 2c 74 64 2e 73 74 61 74 75 73 20 41 53 20 ts,td.status AS
c3d0: 73 74 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e status,td.commen
c3e0: 74 20 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f t AS comment FRO
c3f0: 4d 20 74 65 73 74 5f 64 61 74 61 20 41 53 20 74 M test_data AS t
c400: 64 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 d INNER JOIN tes
c410: 74 73 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 ts ON tests.id=t
c420: 64 2e 74 65 73 74 5f 69 64 20 57 48 45 52 45 20 d.test_id WHERE
c430: 74 65 73 74 5f 69 64 3d 3f 3b 22 0a 09 20 20 22 test_id=?;".. "
c440: 53 45 4c 45 43 54 20 72 75 6e 5f 69 64 2c 74 65 SELECT run_id,te
c450: 73 74 6e 61 6d 65 2c 69 74 65 6d 5f 70 61 74 68 stname,item_path
c460: 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 ,category,variab
c470: 6c 65 2c 74 64 2e 76 61 6c 75 65 20 41 53 20 76 le,td.value AS v
c480: 61 6c 75 65 2c 74 64 2e 65 78 70 65 63 74 65 64 alue,td.expected
c490: 2c 74 64 2e 74 6f 6c 2c 74 64 2e 75 6e 69 74 73 ,td.tol,td.units
c4a0: 2c 74 64 2e 73 74 61 74 75 73 20 41 53 20 73 74 ,td.status AS st
c4b0: 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 atus,td.comment
c4c0: 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 AS comment FROM
c4d0: 74 65 73 74 5f 64 61 74 61 20 41 53 20 74 64 20 test_data AS td
c4e0: 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 INNER JOIN tests
c4f0: 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 2e ON tests.id=td.
c500: 74 65 73 74 5f 69 64 20 57 48 45 52 45 20 74 65 test_id WHERE te
c510: 73 74 6e 61 6d 65 3d 3f 3b 22 0a 09 20 20 74 65 stname=?;".. te
c520: 73 74 2d 69 64 29 0a 09 20 28 69 66 20 63 75 72 st-id).. (if cur
c530: 72 2d 74 65 73 74 2d 6e 61 6d 65 0a 09 20 20 20 r-test-name..
c540: 20 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 20 (set! results
c550: 28 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 (append results
c560: 28 6c 69 73 74 20 28 63 6f 6e 73 20 63 75 72 72 (list (cons curr
c570: 2d 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 2d -test-name test-
c580: 64 61 74 61 29 29 29 29 29 0a 09 20 29 29 0a 20 data))))).. )).
c590: 20 20 20 20 28 73 6f 72 74 20 28 64 65 6c 65 74 (sort (delet
c5a0: 65 2d 64 75 70 6c 69 63 61 74 65 73 20 74 65 73 e-duplicates tes
c5b0: 74 2d 69 64 73 29 20 73 74 72 69 6e 67 3c 3d 29 t-ids) string<=)
c5c0: 29 0a 20 20 20 20 28 73 79 73 74 65 6d 20 28 63 ). (system (c
c5d0: 6f 6e 63 20 22 6d 6b 64 69 72 20 2d 70 20 22 20 onc "mkdir -p "
c5e0: 74 65 6d 70 64 69 72 29 29 0a 20 20 20 20 3b 3b tempdir)). ;;
c5f0: 20 28 70 70 20 72 65 73 75 6c 74 73 29 0a 20 20 (pp results).
c600: 20 20 28 6f 64 73 3a 6c 69 73 74 2d 3e 6f 64 73 (ods:list->ods
c610: 20 0a 20 20 20 20 20 74 65 6d 70 64 69 72 0a 20 . tempdir.
c620: 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 2d (if (string-
c630: 6d 61 74 63 68 20 28 72 65 67 65 78 70 20 22 5e match (regexp "^
c640: 5b 2f 7e 5d 2b 2e 2a 22 29 20 6f 75 74 70 75 74 [/~]+.*") output
c650: 66 69 6c 65 29 20 3b 3b 20 66 75 6c 6c 20 70 61 file) ;; full pa
c660: 74 68 3f 0a 09 20 6f 75 74 70 75 74 66 69 6c 65 th?.. outputfile
c670: 0a 09 20 28 62 65 67 69 6e 0a 09 20 20 20 28 64 .. (begin.. (d
c680: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 ebug:print 0 "WA
c690: 52 4e 49 4e 47 3a 20 70 61 74 68 20 67 69 76 65 RNING: path give
c6a0: 6e 2c 20 22 20 6f 75 74 70 75 74 66 69 6c 65 20 n, " outputfile
c6b0: 22 20 69 73 20 72 65 6c 61 74 69 76 65 2c 20 70 " is relative, p
c6c0: 72 65 66 69 78 69 6e 67 20 77 69 74 68 20 63 75 refixing with cu
c6d0: 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 22 rrent directory"
c6e0: 29 0a 09 20 20 20 28 63 6f 6e 63 20 28 63 75 72 ).. (conc (cur
c6f0: 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 20 rent-directory)
c700: 22 2f 22 20 6f 75 74 70 75 74 66 69 6c 65 29 29 "/" outputfile))
c710: 29 0a 20 20 20 20 20 72 65 73 75 6c 74 73 29 0a ). results).
c720: 20 20 20 20 3b 3b 20 62 72 75 74 61 6c 20 63 6c ;; brutal cl
c730: 65 61 6e 20 75 70 0a 20 20 20 20 28 73 79 73 74 ean up. (syst
c740: 65 6d 20 22 72 6d 20 2d 72 66 20 74 65 6d 70 64 em "rm -rf tempd
c750: 69 72 22 29 29 29 0a 0a 3b 3b 20 28 64 62 3a 65 ir")))..;; (db:e
c760: 78 74 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 20 xtract-ods-file
c770: 64 62 20 22 6f 75 74 70 75 74 66 69 6c 65 2e 6f db "outputfile.o
c780: 64 73 22 20 27 28 28 22 73 79 73 6e 61 6d 65 22 ds" '(("sysname"
c790: 20 22 25 22 29 28 22 66 73 6e 61 6d 65 22 20 22 "%")("fsname" "
c7a0: 25 22 29 28 22 64 61 74 61 70 61 74 68 22 20 22 %")("datapath" "
c7b0: 25 22 29 29 20 22 25 22 29 0a 0a 0a 3b 3b 3d 3d %")) "%")...;;==
c7c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c7d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c7e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c7f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c800: 3d 3d 3d 3d 0a 3b 3b 20 52 45 4d 4f 54 45 20 44 ====.;; REMOTE D
c810: 42 20 41 43 43 45 53 53 20 56 49 41 20 52 50 43 B ACCESS VIA RPC
c820: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
c830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 =========..(defi
c870: 6e 65 20 28 72 64 62 3a 73 65 74 2d 74 65 73 74 ne (rdb:set-test
c880: 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 20 64 s-state-status d
c890: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d b run-id testnam
c8a0: 65 73 20 63 75 72 72 73 74 61 74 65 20 63 75 72 es currstate cur
c8b0: 72 73 74 61 74 75 73 20 6e 65 77 73 74 61 74 65 rstatus newstate
c8c0: 20 6e 65 77 73 74 61 74 75 73 29 0a 20 20 28 69 newstatus). (i
c8d0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
c8e0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
c8f0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
c900: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
c910: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
c920: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
c930: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
c940: 64 75 72 65 20 27 72 64 62 3a 73 65 74 2d 74 65 dure 'rdb:set-te
c950: 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 sts-state-status
c960: 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 72 75 host port).. ru
c970: 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 n-id testnames c
c980: 75 72 72 73 74 61 74 65 20 63 75 72 72 73 74 61 urrstate currsta
c990: 74 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 tus newstate new
c9a0: 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 28 status)). (
c9b0: 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 db:set-tests-sta
c9c0: 74 65 2d 73 74 61 74 75 73 20 64 62 20 72 75 6e te-status db run
c9d0: 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 -id testnames cu
c9e0: 72 72 73 74 61 74 65 20 63 75 72 72 73 74 61 74 rrstate currstat
c9f0: 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 us newstate news
ca00: 74 61 74 75 73 29 29 29 0a 0a 28 64 65 66 69 6e tatus)))..(defin
ca10: 65 20 28 72 64 62 3a 74 65 73 74 73 74 65 70 2d e (rdb:teststep-
ca20: 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 72 set-status! db r
ca30: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
ca40: 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 teststep-name st
ca50: 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e ate-in status-in
ca60: 20 69 74 65 6d 64 61 74 20 63 6f 6d 6d 65 6e 74 itemdat comment
ca70: 20 6c 6f 67 66 69 6c 65 29 0a 20 20 28 6c 65 74 logfile). (let
ca80: 20 28 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 ((item-path (it
ca90: 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 em-list->path it
caa0: 65 6d 64 61 74 29 29 29 0a 20 20 20 20 28 69 66 emdat))). (if
cab0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 09 28 6c *runremote*..(l
cac0: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
cad0: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
cae0: 2a 20 30 29 29 0a 09 20 20 20 20 20 20 28 70 6f * 0)).. (po
caf0: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
cb00: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
cb10: 09 20 20 28 28 72 70 63 3a 70 72 6f 63 65 64 75 . ((rpc:procedu
cb20: 72 65 20 27 72 64 62 3a 74 65 73 74 73 74 65 70 re 'rdb:teststep
cb30: 2d 73 65 74 2d 73 74 61 74 75 73 21 20 68 6f 73 -set-status! hos
cb40: 74 20 70 6f 72 74 29 0a 09 20 20 20 72 75 6e 2d t port).. run-
cb50: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 id test-name tes
cb60: 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 tstep-name state
cb70: 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 69 74 -in status-in it
cb80: 65 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 6e 74 20 em-path comment
cb90: 6c 6f 67 66 69 6c 65 29 29 0a 09 28 64 62 3a 74 logfile))..(db:t
cba0: 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 eststep-set-stat
cbb0: 75 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 us! db run-id te
cbc0: 73 74 2d 6e 61 6d 65 20 74 65 73 74 73 74 65 70 st-name teststep
cbd0: 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 -name state-in s
cbe0: 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 tatus-in item-pa
cbf0: 74 68 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 th comment logfi
cc00: 6c 65 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 le))))..(define
cc10: 28 72 64 62 3a 74 65 73 74 2d 75 70 64 61 74 65 (rdb:test-update
cc20: 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 72 75 -meta-info db ru
cc30: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
cc40: 74 65 6d 64 61 74 20 6d 69 6e 75 74 65 73 20 63 temdat minutes c
cc50: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
cc60: 74 6d 70 66 72 65 65 29 0a 20 20 28 6c 65 74 20 tmpfree). (let
cc70: 28 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65 ((item-path (ite
cc80: 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 m-list->path ite
cc90: 6d 64 61 74 29 29 29 0a 20 20 20 20 28 69 66 20 mdat))). (if
cca0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 09 28 6c 65 *runremote*..(le
ccb0: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
ccc0: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
ccd0: 20 30 29 29 0a 09 20 20 20 20 20 20 28 70 6f 72 0)).. (por
cce0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
ccf0: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 unremote* 1)))..
cd00: 20 20 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 ((rpc:procedur
cd10: 65 20 27 72 64 62 3a 74 65 73 74 2d 75 70 64 61 e 'rdb:test-upda
cd20: 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 68 6f 73 te-meta-info hos
cd30: 74 20 70 6f 72 74 29 0a 09 20 20 20 72 75 6e 2d t port).. run-
cd40: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
cd50: 6d 2d 70 61 74 68 20 6d 69 6e 75 74 65 73 20 63 m-path minutes c
cd60: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
cd70: 74 6d 70 66 72 65 65 29 29 0a 09 28 64 62 3a 74 tmpfree))..(db:t
cd80: 65 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d est-update-meta-
cd90: 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 info db run-id t
cda0: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
cdb0: 74 68 20 6d 69 6e 75 74 65 73 20 63 70 75 6c 6f th minutes cpulo
cdc0: 61 64 20 64 69 73 6b 66 72 65 65 20 74 6d 70 66 ad diskfree tmpf
cdd0: 72 65 65 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 ree))))..(define
cde0: 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 (rdb:test-set-s
cdf0: 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 tate-status-by-r
ce00: 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 un-id-testname d
ce10: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
ce20: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 me item-path sta
ce30: 74 75 73 20 73 74 61 74 65 29 0a 20 20 28 69 66 tus state). (if
ce40: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
ce50: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
ce60: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
ce70: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
ce80: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
ce90: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
cea0: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
ceb0: 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d 73 65 ure 'rdb:test-se
cec0: 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 t-state-status-b
ced0: 79 2d 72 75 6e 2d 69 64 2d 74 65 73 74 6e 61 6d y-run-id-testnam
cee0: 65 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 20 e host port)..
cef0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
cf00: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
cf10: 73 20 73 74 61 74 65 29 29 0a 20 20 20 20 20 20 s state)).
cf20: 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 (db:test-set-sta
cf30: 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e te-status-by-run
cf40: 2d 69 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 -id-testname db
cf50: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
cf60: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
cf70: 73 20 73 74 61 74 65 29 29 29 0a 0a 28 64 65 66 s state)))..(def
cf80: 69 6e 65 20 28 72 64 62 3a 63 73 76 2d 3e 74 65 ine (rdb:csv->te
cf90: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
cfa0: 69 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 69 id csvdata). (i
cfb0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
cfc0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
cfd0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
cfe0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
cff0: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
d000: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
d010: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
d020: 64 75 72 65 20 27 72 64 62 3a 63 73 76 2d 3e 74 dure 'rdb:csv->t
d030: 65 73 74 2d 64 61 74 61 20 68 6f 73 74 20 70 6f est-data host po
d040: 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 63 73 rt).. test-id cs
d050: 76 64 61 74 61 29 29 0a 20 20 20 20 20 20 28 64 vdata)). (d
d060: 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 b:csv->test-data
d070: 20 64 62 20 74 65 73 74 2d 69 64 20 63 73 76 64 db test-id csvd
d080: 61 74 61 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ata)))..(define
d090: 28 72 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 (rdb:roll-up-pas
d0a0: 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 62 s-fail-counts db
d0b0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d0c0: 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 e item-path stat
d0d0: 75 73 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 us). (if *runre
d0e0: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
d0f0: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
d100: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d110: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
d120: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
d130: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
d140: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
d150: 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 b:roll-up-pass-f
d160: 61 69 6c 2d 63 6f 75 6e 74 73 20 68 6f 73 74 20 ail-counts host
d170: 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 74 port).. run-id t
d180: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
d190: 74 68 20 73 74 61 74 75 73 29 29 0a 20 20 20 20 th status)).
d1a0: 20 20 28 64 62 3a 72 6f 6c 6c 2d 75 70 2d 70 61 (db:roll-up-pa
d1b0: 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 64 ss-fail-counts d
d1c0: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
d1d0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 me item-path sta
d1e0: 74 75 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 tus)))..(define
d1f0: 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f (rdb:test-set-co
d200: 6d 6d 65 6e 74 20 64 62 20 72 75 6e 2d 69 64 20 mment db run-id
d210: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
d220: 61 74 68 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 ath comment). (
d230: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
d240: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
d250: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d260: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
d270: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
d280: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d290: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
d2a0: 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 74 2d edure 'rdb:test-
d2b0: 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 68 6f 73 74 set-comment host
d2c0: 20 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 port).. run-id
d2d0: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
d2e0: 61 74 68 20 63 6f 6d 6d 65 6e 74 29 29 0a 20 20 ath comment)).
d2f0: 20 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 (db:test-set
d300: 2d 63 6f 6d 6d 65 6e 74 20 64 62 20 72 75 6e 2d -comment db run-
d310: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
d320: 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 6e 74 29 29 m-path comment))
d330: 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a )..(define (rdb:
d340: 74 65 73 74 2d 73 65 74 2d 6c 6f 67 21 20 64 62 test-set-log! db
d350: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d360: 65 20 69 74 65 6d 2d 70 61 74 68 20 6c 6f 67 66 e item-path logf
d370: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
d380: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
d390: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
d3a0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
d3b0: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
d3c0: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
d3d0: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
d3e0: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
d3f0: 74 65 73 74 2d 73 65 74 2d 6c 6f 67 21 20 68 6f test-set-log! ho
d400: 73 74 20 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 st port).. run-i
d410: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
d420: 2d 70 61 74 68 20 6c 6f 67 66 29 29 0a 20 20 20 -path logf)).
d430: 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d (db:test-set-
d440: 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69 64 20 74 log! db run-id t
d450: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
d460: 74 68 20 6c 6f 67 66 29 29 29 0a 0a 28 64 65 66 th logf)))..(def
d470: 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 72 75 6e ine (rdb:get-run
d480: 73 20 64 62 20 72 75 6e 6e 61 6d 65 70 61 74 74 s db runnamepatt
d490: 20 6e 75 6d 72 75 6e 73 20 73 74 61 72 74 72 75 numruns startru
d4a0: 6e 6f 66 66 73 65 74 20 6b 65 79 70 61 74 74 73 noffset keypatts
d4b0: 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ). (if *runremo
d4c0: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
d4d0: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
d4e0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
d4f0: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
d500: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
d510: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
d520: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
d530: 67 65 74 2d 72 75 6e 73 20 68 6f 73 74 20 70 6f get-runs host po
d540: 72 74 29 0a 09 20 72 75 6e 6e 61 6d 65 70 61 74 rt).. runnamepat
d550: 74 20 6e 75 6d 72 75 6e 73 20 73 74 61 72 74 72 t numruns startr
d560: 75 6e 6f 66 66 73 65 74 20 6b 65 79 70 61 74 74 unoffset keypatt
d570: 73 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 s)). (db:ge
d580: 74 2d 72 75 6e 73 20 64 62 20 72 75 6e 6e 61 6d t-runs db runnam
d590: 65 70 61 74 74 20 6e 75 6d 72 75 6e 73 20 73 74 epatt numruns st
d5a0: 61 72 74 72 75 6e 6f 66 66 73 65 74 20 6b 65 79 artrunoffset key
d5b0: 70 61 74 74 73 29 29 29 0a 0a 28 64 65 66 69 6e patts)))..(defin
d5c0: 65 20 28 72 64 62 3a 67 65 74 2d 74 65 73 74 73 e (rdb:get-tests
d5d0: 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d -for-run db run-
d5e0: 69 64 20 74 65 73 74 70 61 74 74 20 69 74 65 6d id testpatt item
d5f0: 70 61 74 74 20 73 74 61 74 65 73 20 73 74 61 74 patt states stat
d600: 75 73 65 73 29 0a 20 20 28 69 66 20 2a 72 75 6e uses). (if *run
d610: 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c remote*. (l
d620: 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f et ((host (vecto
d630: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
d640: 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 * 0)).. (port
d650: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
d660: 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 nremote* 1)))..(
d670: 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 (rpc:procedure '
d680: 72 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f rdb:get-tests-fo
d690: 72 2d 72 75 6e 20 68 6f 73 74 20 70 6f 72 74 29 r-run host port)
d6a0: 0a 09 20 20 72 75 6e 2d 69 64 20 74 65 73 74 70 .. run-id testp
d6b0: 61 74 74 20 69 74 65 6d 70 61 74 74 20 73 74 61 att itempatt sta
d6c0: 74 65 73 20 73 74 61 74 75 73 65 73 29 29 0a 20 tes statuses)).
d6d0: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 (db:get-tes
d6e0: 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72 75 ts-for-run db ru
d6f0: 6e 2d 69 64 20 74 65 73 74 70 61 74 74 20 69 74 n-id testpatt it
d700: 65 6d 70 61 74 74 20 73 74 61 74 65 73 20 73 74 empatt states st
d710: 61 74 75 73 65 73 29 29 29 0a 0a 28 64 65 66 69 atuses)))..(defi
d720: 6e 65 20 28 72 64 62 3a 67 65 74 2d 74 65 73 74 ne (rdb:get-test
d730: 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 74 -data-by-id db t
d740: 65 73 74 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 est-id). (if *r
d750: 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 unremote*.
d760: 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
d770: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
d780: 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f te* 0)).. (po
d790: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
d7a0: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
d7b0: 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 .((rpc:procedure
d7c0: 20 27 72 70 63 3a 67 65 74 2d 74 65 73 74 2d 64 'rpc:get-test-d
d7d0: 61 74 61 2d 62 79 2d 69 64 20 68 6f 73 74 20 70 ata-by-id host p
d7e0: 6f 72 74 29 0a 09 20 74 65 73 74 2d 69 64 29 29 ort).. test-id))
d7f0: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 . (db:get-t
d800: 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 est-data-by-id d
d810: 62 20 74 65 73 74 2d 69 64 29 29 29 0a 20 20 20 b test-id))).
d820: 20 20 20 0a 28 64 65 66 69 6e 65 20 28 72 64 62 .(define (rdb
d830: 3a 67 65 74 2d 6b 65 79 73 20 64 62 29 0a 20 20 :get-keys db).
d840: 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a (if *runremote*.
d850: 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 (let ((hos
d860: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
d870: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
d880: 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 (port (vector
d890: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
d8a0: 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 1)))..((rpc:pro
d8b0: 63 65 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d cedure 'rdb:get-
d8c0: 6b 65 79 73 20 68 6f 73 74 20 70 6f 72 74 29 29 keys host port))
d8d0: 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d ). (db:get-
d8e0: 6b 65 79 73 20 64 62 29 29 29 0a 09 20 0a 28 64 keys db))).. .(d
d8f0: 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 6e efine (rdb:get-n
d900: 75 6d 2d 72 75 6e 73 20 64 62 20 72 75 6e 70 61 um-runs db runpa
d910: 74 74 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 tt). (if *runre
d920: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
d930: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
d940: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
d950: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
d960: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
d970: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
d980: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
d990: 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 68 b:get-num-runs h
d9a0: 6f 73 74 20 70 6f 72 74 29 20 72 75 6e 70 61 74 ost port) runpat
d9b0: 74 29 29 0a 20 20 20 20 20 20 28 64 62 3a 67 65 t)). (db:ge
d9c0: 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 72 75 t-num-runs db ru
d9d0: 6e 70 61 74 74 29 29 29 0a 0a 28 64 65 66 69 6e npatt)))..(defin
d9e0: 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d e (rdb:test-set-
d9f0: 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d state-status-by-
da00: 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 6e 65 id db test-id ne
da10: 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 wstate newstatus
da20: 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 newcomment).
da30: 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a (if *runremote*
da40: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f . (let ((ho
da50: 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a st (vector-ref *
da60: 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 runremote* 0))..
da70: 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f (port (vecto
da80: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
da90: 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 * 1)))..((rpc:pr
daa0: 6f 63 65 64 75 72 65 20 27 72 64 62 3a 74 65 73 ocedure 'rdb:tes
dab0: 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 t-set-state-stat
dac0: 75 73 2d 62 79 2d 69 64 20 68 6f 73 74 20 70 6f us-by-id host po
dad0: 72 74 29 0a 09 20 74 65 73 74 2d 69 64 20 6e 65 rt).. test-id ne
dae0: 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 wstate newstatus
daf0: 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 0a 20 20 newcomment)).
db00: 20 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 (db:test-set
db10: 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 79 -state-status-by
db20: 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 6e -id db test-id n
db30: 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 ewstate newstatu
db40: 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 29 29 0a s newcomment))).
db50: 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 .(define (rdb:ge
db60: 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 69 72 73 20 t-key-val-pairs
db70: 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 69 66 db run-id). (if
db80: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 *runremote*.
db90: 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 (let ((host (
dba0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
dbb0: 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 emote* 0))..
dbc0: 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
dbd0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
dbe0: 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ))..((rpc:proced
dbf0: 75 72 65 20 27 72 64 62 3a 67 65 74 2d 6b 65 79 ure 'rdb:get-key
dc00: 2d 76 61 6c 2d 70 61 69 72 73 20 68 6f 73 74 20 -val-pairs host
dc10: 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 0a 20 port) run-id)).
dc20: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 6b 65 79 (db:get-key
dc30: 2d 76 61 6c 2d 70 61 69 72 73 20 64 62 20 72 75 -val-pairs db ru
dc40: 6e 2d 69 64 29 29 29 0a 09 20 0a 28 64 65 66 69 n-id))).. .(defi
dc50: 6e 65 20 28 72 64 62 3a 67 65 74 2d 6b 65 79 2d ne (rdb:get-key-
dc60: 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 0a vals db run-id).
dc70: 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f (if *runremo
dc80: 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 te*. (let (
dc90: 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (host (vector-re
dca0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 f *runremote* 0)
dcb0: 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ).. (port (ve
dcc0: 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
dcd0: 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 ote* 1)))..((rpc
dce0: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
dcf0: 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20 68 6f 73 get-key-vals hos
dd00: 74 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 t port) run-id))
dd10: 0a 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 6b . (db:get-k
dd20: 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 ey-vals db run-i
dd30: 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 d)))..(define (r
dd40: 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 74 2d db:testmeta-get-
dd50: 72 65 63 6f 72 64 20 64 62 20 74 65 73 74 6e 61 record db testna
dd60: 6d 65 29 0a 20 20 20 28 69 66 20 2a 72 75 6e 72 me). (if *runr
dd70: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
dd80: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
dd90: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
dda0: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
ddb0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
ddc0: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
ddd0: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
dde0: 64 62 3a 74 65 73 74 6d 65 74 61 2d 67 65 74 2d db:testmeta-get-
ddf0: 72 65 63 6f 72 64 20 68 6f 73 74 20 70 6f 72 74 record host port
de00: 29 20 74 65 73 74 6e 61 6d 65 29 29 0a 20 20 20 ) testname)).
de10: 20 20 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d (db:testmeta-
de20: 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 65 get-record db te
de30: 73 74 6e 61 6d 65 29 29 29 0a 0a 28 64 65 66 69 stname)))..(defi
de40: 6e 65 20 28 72 64 62 3a 67 65 74 2d 74 65 73 74 ne (rdb:get-test
de50: 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 74 -data-by-id db t
de60: 65 73 74 2d 69 64 29 0a 20 20 28 69 66 20 2a 72 est-id). (if *r
de70: 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 unremote*.
de80: 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
de90: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
dea0: 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f te* 0)).. (po
deb0: 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
dec0: 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
ded0: 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 .((rpc:procedure
dee0: 20 27 72 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 'rdb:get-test-d
def0: 61 74 61 2d 62 79 2d 69 64 20 68 6f 73 74 20 70 ata-by-id host p
df00: 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 0a 20 ort) test-id)).
df10: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 (db:get-tes
df20: 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 62 20 t-data-by-id db
df30: 74 65 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 test-id)))..(def
df40: 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 72 75 6e ine (rdb:get-run
df50: 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 29 -info db run-id)
df60: 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 . (if *runremot
df70: 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 e*. (let ((
df80: 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 host (vector-ref
df90: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 *runremote* 0))
dfa0: 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 .. (port (vec
dfb0: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
dfc0: 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a te* 1)))..((rpc:
dfd0: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 procedure 'rdb:g
dfe0: 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 68 6f 73 74 et-run-info host
dff0: 20 70 6f 72 74 29 20 72 75 6e 2d 69 64 29 29 0a port) run-id)).
e000: 20 20 20 20 20 20 28 64 62 3a 67 65 74 2d 72 75 (db:get-ru
e010: 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 n-info db run-id
e020: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
e030: 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d b:get-steps-for-
e040: 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 test db test-id)
e050: 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 . (if *runremot
e060: 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 e*. (let ((
e070: 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 host (vector-ref
e080: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 *runremote* 0))
e090: 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 .. (port (vec
e0a0: 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
e0b0: 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 63 3a te* 1)))..((rpc:
e0c0: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 67 procedure 'rdb:g
e0d0: 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 65 73 et-steps-for-tes
e0e0: 74 20 68 6f 73 74 20 70 6f 72 74 29 20 74 65 73 t host port) tes
e0f0: 74 2d 69 64 29 29 0a 20 20 20 20 20 20 28 64 62 t-id)). (db
e100: 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 :get-steps-for-t
e110: 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 29 est db test-id))
e120: 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a )..(define (rdb:
e130: 67 65 74 2d 73 74 65 70 73 2d 74 61 62 6c 65 20 get-steps-table
e140: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 69 db test-id). (i
e150: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
e160: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
e170: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
e180: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
e190: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
e1a0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
e1b0: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
e1c0: 64 75 72 65 20 27 72 64 62 3a 67 65 74 2d 73 74 dure 'rdb:get-st
e1d0: 65 70 73 2d 74 61 62 6c 65 20 68 6f 73 74 20 70 eps-table host p
e1e0: 6f 72 74 29 20 74 65 73 74 2d 69 64 29 29 0a 20 ort) test-id)).
e1f0: 20 20 20 20 20 28 64 62 3a 67 65 74 2d 73 74 65 (db:get-ste
e200: 70 73 2d 74 61 62 6c 65 20 64 62 20 74 65 73 74 ps-table db test
e210: 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 -id)))..(define
e220: 28 72 64 62 3a 72 65 61 64 2d 74 65 73 74 2d 64 (rdb:read-test-d
e230: 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 63 ata db test-id c
e240: 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 20 28 ategorypatt). (
e250: 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 if *runremote*.
e260: 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 (let ((host
e270: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
e280: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
e290: 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d (port (vector-
e2a0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
e2b0: 31 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 1)))..((rpc:proc
e2c0: 65 64 75 72 65 20 27 72 64 62 3a 72 65 61 64 2d edure 'rdb:read-
e2d0: 74 65 73 74 2d 64 61 74 61 20 68 6f 73 74 20 70 test-data host p
e2e0: 6f 72 74 29 20 74 65 73 74 2d 69 64 20 63 61 74 ort) test-id cat
e2f0: 65 67 6f 72 79 70 61 74 74 29 29 0a 20 20 20 20 egorypatt)).
e300: 20 20 28 64 62 3a 72 65 61 64 2d 74 65 73 74 2d (db:read-test-
e310: 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 data db test-id
e320: 63 61 74 65 67 6f 72 79 70 61 74 74 29 29 29 0a categorypatt))).
e330: 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 .(define (rdb:ge
e340: 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 t-test-info db r
e350: 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 un-id testname i
e360: 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69 66 20 tem-path). (if
e370: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
e380: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
e390: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
e3a0: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
e3b0: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
e3c0: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
e3d0: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
e3e0: 72 65 20 27 72 64 62 3a 67 65 74 2d 74 65 73 74 re 'rdb:get-test
e3f0: 2d 69 6e 66 6f 20 68 6f 73 74 20 70 6f 72 74 29 -info host port)
e400: 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 run-id testname
e410: 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 20 20 20 item-path)).
e420: 20 20 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d (db:get-test-
e430: 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 info db run-id t
e440: 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 estname item-pat
e450: 68 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 h)))..(define (r
e460: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 db:delete-test-r
e470: 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 2d 69 ecords db test-i
e480: 64 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d d). (if *runrem
e490: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
e4a0: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
e4b0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
e4c0: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
e4d0: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
e4e0: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
e4f0: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
e500: 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 65 63 :delete-test-rec
e510: 6f 72 64 73 20 68 6f 73 74 20 70 6f 72 74 29 20 ords host port)
e520: 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 20 20 test-id)).
e530: 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 2d (db:delete-test-
e540: 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 2d records db test-
e550: 69 64 29 29 29 0a id))).