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 28 64 65 66 69 6e 65 20 28 6f cm")..(define (o
0400: 70 65 6e 2d 64 62 29 20 3b 3b 20 20 28 63 6f 6e pen-db) ;; (con
0410: 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 6d 65 c *toppath* "/me
0420: 67 61 74 65 73 74 2e 64 62 22 29 20 28 63 61 72 gatest.db") (car
0430: 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 29 *configinfo*)))
0440: 0a 20 20 28 6c 65 74 2a 20 28 28 64 62 70 61 74 . (let* ((dbpat
0450: 68 20 20 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 h (conc *topp
0460: 61 74 68 2a 20 22 2f 6d 65 67 61 74 65 73 74 2e ath* "/megatest.
0470: 64 62 22 29 29 20 3b 3b 20 66 6e 61 6d 65 29 0a db")) ;; fname).
0480: 09 20 28 63 6f 6e 66 69 67 64 61 74 20 28 63 61 . (configdat (ca
0490: 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 r *configinfo*))
04a0: 0a 09 20 28 64 62 65 78 69 73 74 73 20 20 28 66 .. (dbexists (f
04b0: 69 6c 65 2d 65 78 69 73 74 73 3f 20 64 62 70 61 ile-exists? dbpa
04c0: 74 68 29 29 0a 09 20 28 64 62 20 20 20 20 20 20 th)).. (db
04d0: 20 20 28 73 71 6c 69 74 65 33 3a 6f 70 65 6e 2d (sqlite3:open-
04e0: 64 61 74 61 62 61 73 65 20 64 62 70 61 74 68 29 database dbpath)
04f0: 29 20 3b 3b 20 28 6e 65 76 65 72 2d 67 69 76 65 ) ;; (never-give
0500: 2d 75 70 2d 6f 70 65 6e 2d 64 62 20 64 62 70 61 -up-open-db dbpa
0510: 74 68 29 29 0a 09 20 28 68 61 6e 64 6c 65 72 20 th)).. (handler
0520: 20 20 28 6d 61 6b 65 2d 62 75 73 79 2d 74 69 6d (make-busy-tim
0530: 65 6f 75 74 20 33 36 30 30 30 29 29 29 0a 20 20 eout 36000))).
0540: 20 20 28 73 71 6c 69 74 65 33 3a 73 65 74 2d 62 (sqlite3:set-b
0550: 75 73 79 2d 68 61 6e 64 6c 65 72 21 20 64 62 20 usy-handler! db
0560: 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 28 69 66 handler). (if
0570: 20 28 6e 6f 74 20 64 62 65 78 69 73 74 73 29 0a (not dbexists).
0580: 09 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 20 20 .(let* ((keys
0590: 20 20 28 63 6f 6e 66 69 67 2d 67 65 74 2d 66 69 (config-get-fi
05a0: 65 6c 64 73 20 63 6f 6e 66 69 67 64 61 74 29 29 elds configdat))
05b0: 0a 09 20 20 20 20 20 20 20 28 68 61 76 65 6b 65 .. (haveke
05c0: 79 73 20 28 3e 20 28 6c 65 6e 67 74 68 20 6b 65 ys (> (length ke
05d0: 79 73 29 20 30 29 29 0a 09 20 20 20 20 20 20 20 ys) 0))..
05e0: 28 6b 65 79 73 74 72 20 20 20 28 6b 65 79 73 2d (keystr (keys-
05f0: 3e 6b 65 79 73 74 72 20 6b 65 79 73 29 29 0a 09 >keystr keys))..
0600: 20 20 20 20 20 20 20 28 66 69 65 6c 64 73 74 72 (fieldstr
0610: 20 28 6b 65 79 73 2d 3e 6b 65 79 2f 66 69 65 6c (keys->key/fiel
0620: 64 20 6b 65 79 73 29 29 29 0a 09 20 20 28 66 6f d keys))).. (fo
0630: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
0640: 6b 65 79 29 0a 09 09 20 20 20 20 20 20 28 6c 65 key)... (le
0650: 74 20 28 28 6b 65 79 6e 20 28 76 65 63 74 6f 72 t ((keyn (vector
0660: 2d 72 65 66 20 6b 65 79 20 30 29 29 29 0a 09 09 -ref key 0)))...
0670: 09 28 69 66 20 28 6d 65 6d 62 65 72 20 28 73 74 .(if (member (st
0680: 72 69 6e 67 2d 64 6f 77 6e 63 61 73 65 20 6b 65 ring-downcase ke
0690: 79 6e 29 0a 09 09 09 09 20 20 20 20 28 6c 69 73 yn)..... (lis
06a0: 74 20 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 t "runname" "sta
06b0: 74 65 22 20 22 73 74 61 74 75 73 22 20 22 6f 77 te" "status" "ow
06c0: 6e 65 72 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 ner" "event_time
06d0: 22 20 22 63 6f 6d 6d 65 6e 74 22 20 22 66 61 69 " "comment" "fai
06e0: 6c 5f 63 6f 75 6e 74 22 0a 09 09 09 09 09 20 20 l_count"......
06f0: 22 70 61 73 73 5f 63 6f 75 6e 74 22 29 29 0a 09 "pass_count"))..
0700: 09 09 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 .. (begin....
0710: 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 45 52 (print "ER
0720: 52 4f 52 3a 20 79 6f 75 72 20 6b 65 79 20 63 61 ROR: your key ca
0730: 6e 6e 6f 74 20 62 65 20 6e 61 6d 65 64 20 22 20 nnot be named "
0740: 6b 65 79 6e 20 22 20 61 73 20 74 68 69 73 20 63 keyn " as this c
0750: 6f 6e 66 6c 69 63 74 73 20 77 69 74 68 20 74 68 onflicts with th
0760: 65 20 73 61 6d 65 20 6e 61 6d 65 64 20 66 69 65 e same named fie
0770: 6c 64 20 69 6e 20 74 68 65 20 72 75 6e 73 20 74 ld in the runs t
0780: 61 62 6c 65 22 29 0a 09 09 09 20 20 20 20 20 20 able")....
0790: 28 73 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 72 (system (conc "r
07a0: 6d 20 2d 66 20 22 20 64 62 70 61 74 68 29 29 0a m -f " dbpath)).
07b0: 09 09 09 20 20 20 20 20 20 28 65 78 69 74 20 31 ... (exit 1
07c0: 29 29 29 29 29 0a 09 09 20 20 20 20 6b 65 79 73 )))))... keys
07d0: 29 0a 09 20 20 3b 3b 20 28 73 71 6c 69 74 65 33 ).. ;; (sqlite3
07e0: 3a 65 78 65 63 75 74 65 20 64 62 20 22 50 52 41 :execute db "PRA
07f0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 GMA synchronous
0800: 3d 20 4f 46 46 3b 22 29 0a 09 20 20 28 73 71 6c = OFF;").. (sql
0810: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
0820: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
0830: 20 4e 4f 54 20 45 58 49 53 54 53 20 6b 65 79 73 NOT EXISTS keys
0840: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
0850: 4d 41 52 59 20 4b 45 59 2c 20 66 69 65 6c 64 6e MARY KEY, fieldn
0860: 61 6d 65 20 54 45 58 54 2c 20 66 69 65 6c 64 74 ame TEXT, fieldt
0870: 79 70 65 20 54 45 58 54 2c 20 43 4f 4e 53 54 52 ype TEXT, CONSTR
0880: 41 49 4e 54 20 6b 65 79 63 6f 6e 73 74 72 61 69 AINT keyconstrai
0890: 6e 74 20 55 4e 49 51 55 45 20 28 66 69 65 6c 64 nt UNIQUE (field
08a0: 6e 61 6d 65 29 29 3b 22 29 0a 09 20 20 28 66 6f name));").. (fo
08b0: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
08c0: 6b 65 79 29 0a 09 09 20 20 20 20 20 20 28 73 71 key)... (sq
08d0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
08e0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6b 65 "INSERT INTO ke
08f0: 79 73 20 28 66 69 65 6c 64 6e 61 6d 65 2c 66 69 ys (fieldname,fi
0900: 65 6c 64 74 79 70 65 29 20 56 41 4c 55 45 53 20 eldtype) VALUES
0910: 28 3f 2c 3f 29 3b 22 20 28 6b 65 79 3a 67 65 74 (?,?);" (key:get
0920: 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 29 28 -fieldname key)(
0930: 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 74 79 70 key:get-fieldtyp
0940: 65 20 6b 65 79 29 29 29 0a 09 09 20 20 20 20 6b e key)))... k
0950: 65 79 73 29 0a 09 20 20 28 73 71 6c 69 74 65 33 eys).. (sqlite3
0960: 3a 65 78 65 63 75 74 65 20 64 62 20 28 63 6f 6e :execute db (con
0970: 63 20 0a 09 09 09 20 20 20 20 20 20 20 22 43 52 c .... "CR
0980: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f EATE TABLE IF NO
0990: 54 20 45 58 49 53 54 53 20 72 75 6e 73 20 28 69 T EXISTS runs (i
09a0: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 d INTEGER PRIMAR
09b0: 59 20 4b 45 59 2c 20 22 20 0a 09 09 09 20 20 20 Y KEY, " ....
09c0: 20 20 20 20 66 69 65 6c 64 73 74 72 20 28 69 66 fieldstr (if
09d0: 20 68 61 76 65 6b 65 79 73 20 22 2c 22 20 22 22 havekeys "," ""
09e0: 29 0a 09 09 09 20 20 20 20 20 20 20 22 72 75 6e ).... "run
09f0: 6e 61 6d 65 20 54 45 58 54 2c 22 0a 09 09 09 20 name TEXT,"....
0a00: 20 20 20 20 20 20 22 73 74 61 74 65 20 54 45 58 "state TEX
0a10: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 22 0a 09 T DEFAULT '',"..
0a20: 09 09 20 20 20 20 20 20 20 22 73 74 61 74 75 73 .. "status
0a30: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
0a40: 2c 22 0a 09 09 09 20 20 20 20 20 20 20 22 6f 77 ,".... "ow
0a50: 6e 65 72 20 54 45 58 54 20 44 45 46 41 55 4c 54 ner TEXT DEFAULT
0a60: 20 27 27 2c 22 0a 09 09 09 20 20 20 20 20 20 20 '',"....
0a70: 22 65 76 65 6e 74 5f 74 69 6d 65 20 54 49 4d 45 "event_time TIME
0a80: 53 54 41 4d 50 2c 22 0a 09 09 09 20 20 20 20 20 STAMP,"....
0a90: 20 20 22 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 "comment TEXT
0aa0: 44 45 46 41 55 4c 54 20 27 27 2c 22 0a 09 09 09 DEFAULT '',"....
0ab0: 20 20 20 20 20 20 20 22 66 61 69 6c 5f 63 6f 75 "fail_cou
0ac0: 6e 74 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 nt INTEGER DEFAU
0ad0: 4c 54 20 30 2c 22 0a 09 09 09 20 20 20 20 20 20 LT 0,"....
0ae0: 20 22 70 61 73 73 5f 63 6f 75 6e 74 20 49 4e 54 "pass_count INT
0af0: 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c 22 EGER DEFAULT 0,"
0b00: 0a 09 09 09 20 20 20 20 20 20 20 22 43 4f 4e 53 .... "CONS
0b10: 54 52 41 49 4e 54 20 72 75 6e 73 63 6f 6e 73 74 TRAINT runsconst
0b20: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 72 75 raint UNIQUE (ru
0b30: 6e 6e 61 6d 65 22 20 28 69 66 20 68 61 76 65 6b nname" (if havek
0b40: 65 79 73 20 22 2c 22 20 22 22 29 20 6b 65 79 73 eys "," "") keys
0b50: 74 72 20 22 29 29 3b 22 29 29 0a 09 20 20 28 73 tr "));")).. (s
0b60: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
0b70: 62 20 28 63 6f 6e 63 20 22 43 52 45 41 54 45 20 b (conc "CREATE
0b80: 49 4e 44 45 58 20 72 75 6e 73 5f 69 6e 64 65 78 INDEX runs_index
0b90: 20 4f 4e 20 72 75 6e 73 20 28 72 75 6e 6e 61 6d ON runs (runnam
0ba0: 65 22 20 28 69 66 20 68 61 76 65 6b 65 79 73 20 e" (if havekeys
0bb0: 22 2c 22 20 22 22 29 20 6b 65 79 73 74 72 20 22 "," "") keystr "
0bc0: 29 3b 22 29 29 0a 09 20 20 28 73 71 6c 69 74 65 );")).. (sqlite
0bd0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 0a 09 09 3:execute db ...
0be0: 09 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c . "CREATE TABL
0bf0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
0c00: 74 65 73 74 73 20 0a 20 20 20 20 20 20 20 20 20 tests .
0c10: 20 20 20 20 20 20 20 20 20 20 20 28 69 64 20 49 (id I
0c20: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K
0c30: 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 EY,.
0c40: 20 20 20 20 20 20 20 20 20 72 75 6e 5f 69 64 20 run_id
0c50: 20 20 20 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 INTEGER,.
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c70: 20 20 74 65 73 74 6e 61 6d 65 20 20 20 54 45 58 testname TEX
0c80: 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 T,.
0c90: 20 20 20 20 20 20 20 20 68 6f 73 74 20 20 20 20 host
0ca0: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
0cb0: 27 6e 2f 61 27 2c 0a 20 20 20 20 20 20 20 20 20 'n/a',.
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 63 70 75 6c cpul
0cd0: 6f 61 64 20 20 20 20 52 45 41 4c 20 44 45 46 41 oad REAL DEFA
0ce0: 55 4c 54 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 ULT -1,.
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 dis
0d00: 6b 66 72 65 65 20 20 20 49 4e 54 45 47 45 52 20 kfree INTEGER
0d10: 44 45 46 41 55 4c 54 20 2d 31 2c 0a 20 20 20 20 DEFAULT -1,.
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d30: 20 75 6e 61 6d 65 20 20 20 20 20 20 54 45 58 54 uname TEXT
0d40: 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 20 DEFAULT 'n/a',
0d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0d60: 20 20 20 20 20 20 72 75 6e 64 69 72 20 20 20 20 rundir
0d70: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e TEXT DEFAULT 'n
0d80: 2f 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 /a',.
0d90: 20 20 20 20 20 20 20 20 20 20 73 68 6f 72 74 64 shortd
0da0: 69 72 20 20 20 54 45 58 54 20 44 45 46 41 55 4c ir TEXT DEFAUL
0db0: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
0dc0: 20 20 20 20 20 20 20 20 20 20 20 69 74 65 6d 5f item_
0dd0: 70 61 74 68 20 20 54 45 58 54 20 44 45 46 41 55 path TEXT DEFAU
0de0: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 stat
0e00: 65 20 20 20 20 20 20 54 45 58 54 20 44 45 46 41 e TEXT DEFA
0e10: 55 4c 54 20 27 4e 4f 54 5f 53 54 41 52 54 45 44 ULT 'NOT_STARTED
0e20: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
0e30: 20 20 20 20 20 20 20 20 73 74 61 74 75 73 20 20 status
0e40: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
0e50: 27 46 41 49 4c 27 2c 0a 20 20 20 20 20 20 20 20 'FAIL',.
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 74 74 att
0e70: 65 6d 70 74 6e 75 6d 20 49 4e 54 45 47 45 52 20 emptnum INTEGER
0e80: 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20 20 DEFAULT 0,.
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ea0: 66 69 6e 61 6c 5f 6c 6f 67 66 20 54 45 58 54 20 final_logf TEXT
0eb0: 44 45 46 41 55 4c 54 20 27 6c 6f 67 73 2f 66 69 DEFAULT 'logs/fi
0ec0: 6e 61 6c 2e 6c 6f 67 27 2c 0a 20 20 20 20 20 20 nal.log',.
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
0ee0: 6f 67 64 61 74 20 20 20 20 20 42 4c 4f 42 2c 20 ogdat BLOB,
0ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0f00: 20 20 20 20 20 20 72 75 6e 5f 64 75 72 61 74 69 run_durati
0f10: 6f 6e 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 on INTEGER DEFAU
0f20: 4c 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 LT 0,.
0f30: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 comme
0f40: 6e 74 20 20 20 20 54 45 58 54 20 44 45 46 41 55 nt TEXT DEFAU
0f50: 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 LT '',.
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e even
0f70: 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 t_time TIMESTAMP
0f80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
0f90: 20 20 20 20 20 20 20 66 61 69 6c 5f 63 6f 75 6e fail_coun
0fa0: 74 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c t INTEGER DEFAUL
0fb0: 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 T 0,.
0fc0: 20 20 20 20 20 20 20 20 20 20 70 61 73 73 5f 63 pass_c
0fd0: 6f 75 6e 74 20 49 4e 54 45 47 45 52 20 44 45 46 ount INTEGER DEF
0fe0: 41 55 4c 54 20 30 2c 0a 20 20 20 20 20 20 20 20 AULT 0,.
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 63 arc
1000: 68 69 76 65 64 20 20 20 49 4e 54 45 47 45 52 20 hived INTEGER
1010: 44 45 46 41 55 4c 54 20 30 2c 20 2d 2d 20 30 3d DEFAULT 0, -- 0=
1020: 6e 6f 2c 20 31 3d 69 6e 20 70 72 6f 67 72 65 73 no, 1=in progres
1030: 73 2c 20 32 3d 79 65 73 0a 20 20 20 20 20 20 20 s, 2=yes.
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f CO
1050: 4e 53 54 52 41 49 4e 54 20 74 65 73 74 73 63 6f NSTRAINT testsco
1060: 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 nstraint UNIQUE
1070: 28 72 75 6e 5f 69 64 2c 20 74 65 73 74 6e 61 6d (run_id, testnam
1080: 65 2c 20 69 74 65 6d 5f 70 61 74 68 29 0a 20 20 e, item_path).
1090: 20 20 20 20 20 20 20 20 29 3b 22 29 0a 09 20 20 );")..
10a0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
10b0: 20 64 62 20 22 43 52 45 41 54 45 20 49 4e 44 45 db "CREATE INDE
10c0: 58 20 74 65 73 74 73 5f 69 6e 64 65 78 20 4f 4e X tests_index ON
10d0: 20 74 65 73 74 73 20 28 72 75 6e 5f 69 64 2c 20 tests (run_id,
10e0: 74 65 73 74 6e 61 6d 65 29 3b 22 29 0a 09 20 20 testname);")..
10f0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
1100: 20 64 62 20 22 43 52 45 41 54 45 20 56 49 45 57 db "CREATE VIEW
1110: 20 72 75 6e 73 5f 74 65 73 74 73 20 41 53 20 53 runs_tests AS S
1120: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72 75 6e ELECT * FROM run
1130: 73 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 s INNER JOIN tes
1140: 74 73 20 4f 4e 20 72 75 6e 73 2e 69 64 3d 74 65 ts ON runs.id=te
1150: 73 74 73 2e 72 75 6e 5f 69 64 3b 22 29 0a 09 20 sts.run_id;")..
1160: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
1170: 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 e db "CREATE TAB
1180: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 LE IF NOT EXISTS
1190: 20 74 65 73 74 5f 73 74 65 70 73 20 0a 20 20 20 test_steps .
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b0: 20 20 20 20 20 20 20 20 20 20 20 28 69 64 20 49 (id I
11c0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K
11d0: 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 EY,.
11e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f0: 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 test_id INTEG
1200: 45 52 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 ER, .
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1220: 20 20 20 20 73 74 65 70 6e 61 6d 65 20 54 45 58 stepname TEX
1230: 54 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 T, .
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1250: 20 20 20 73 74 61 74 65 20 54 45 58 54 20 44 45 state TEXT DE
1260: 46 41 55 4c 54 20 27 4e 4f 54 5f 53 54 41 52 54 FAULT 'NOT_START
1270: 45 44 27 2c 20 0a 20 20 20 20 20 20 20 20 20 20 ED', .
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1290: 20 20 20 20 20 73 74 61 74 75 73 20 54 45 58 54 status TEXT
12a0: 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a DEFAULT 'n/a',.
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
12d0: 76 65 6e 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 vent_time TIMEST
12e0: 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 AMP,.
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1300: 20 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 58 54 comment TEXT
1310: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1330: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 66 logf
1340: 69 6c 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 ile TEXT DEFAULT
1350: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1370: 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 CONSTRAINT t
1380: 65 73 74 5f 73 74 65 70 73 5f 63 6f 6e 73 74 72 est_steps_constr
1390: 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 65 73 aint UNIQUE (tes
13a0: 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c 73 74 t_id,stepname,st
13b0: 61 74 65 29 29 3b 22 29 0a 09 20 20 28 73 71 6c ate));").. (sql
13c0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
13d0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
13e0: 20 4e 4f 54 20 45 58 49 53 54 53 20 65 78 74 72 NOT EXISTS extr
13f0: 61 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 adat (id INTEGER
1400: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 72 75 PRIMARY KEY, ru
1410: 6e 5f 69 64 20 49 4e 54 45 47 45 52 2c 20 6b 65 n_id INTEGER, ke
1420: 79 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 y TEXT, val TEXT
1430: 29 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 65 33 );").. (sqlite3
1440: 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 :execute db "CRE
1450: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 ATE TABLE IF NOT
1460: 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 EXISTS metadat
1470: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
1480: 41 52 59 20 4b 45 59 2c 20 76 61 72 20 54 45 58 ARY KEY, var TEX
1490: 54 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 T, val TEXT,.
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
14c0: 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 64 61 ONSTRAINT metada
14d0: 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 t_constraint UNI
14e0: 51 55 45 20 28 76 61 72 29 29 3b 22 29 0a 09 20 QUE (var));")..
14f0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
1500: 65 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 e db "CREATE TAB
1510: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 LE IF NOT EXISTS
1520: 20 61 63 63 65 73 73 5f 6c 6f 67 20 28 69 64 20 access_log (id
1530: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
1540: 4b 45 59 2c 20 75 73 65 72 20 54 45 58 54 2c 20 KEY, user TEXT,
1550: 61 63 63 65 73 73 65 64 20 54 49 4d 45 53 54 41 accessed TIMESTA
1560: 4d 50 2c 20 61 72 67 73 20 54 45 58 54 29 3b 22 MP, args TEXT);"
1570: 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 ).. (sqlite3:ex
1580: 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 45 ecute db "CREATE
1590: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 TABLE IF NOT EX
15a0: 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 20 28 ISTS test_meta (
15b0: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
15c0: 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 RY KEY,.
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes
15f0: 74 6e 61 6d 65 20 20 20 20 54 45 58 54 20 44 45 tname TEXT DE
1600: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 FAULT '',.
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
1630: 75 74 68 6f 72 20 20 20 20 20 20 54 45 58 54 20 uthor TEXT
1640: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1670: 20 6f 77 6e 65 72 20 20 20 20 20 20 20 54 45 58 owner TEX
1680: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b0: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 54 description T
16c0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f0: 20 20 20 20 20 72 65 76 69 65 77 65 64 20 20 20 reviewed
1700: 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 20 20 TIMESTAMP,.
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1730: 20 69 74 65 72 61 74 65 64 20 20 20 20 54 45 58 iterated TEX
1740: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1770: 20 20 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 52 avg_runtime R
1780: 45 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 EAL,.
1790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a0: 20 20 20 20 20 20 20 20 20 20 61 76 67 5f 64 69 avg_di
17b0: 73 6b 20 20 20 20 52 45 41 4c 2c 0a 20 20 20 20 sk REAL,.
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e0: 20 74 61 67 73 20 20 20 20 20 20 20 20 54 45 58 tags TEX
17f0: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1820: 20 20 20 6a 6f 62 67 72 6f 75 70 20 20 20 20 54 jobgroup T
1830: 45 58 54 20 44 45 46 41 55 4c 54 20 27 64 65 66 EXT DEFAULT 'def
1840: 61 75 6c 74 27 2c 0a 20 20 20 20 20 20 20 20 20 ault',.
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1860: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e CONSTRAIN
1870: 54 20 74 65 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 T test_meta_cons
1880: 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 traint UNIQUE (t
1890: 65 73 74 6e 61 6d 65 29 29 3b 22 29 0a 09 20 20 estname));")..
18a0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
18b0: 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c db "CREATE TABL
18c0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
18d0: 74 65 73 74 5f 64 61 74 61 20 28 69 64 20 49 4e test_data (id IN
18e0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
18f0: 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 Y,.
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1910: 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 test_id INTEG
1920: 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ER,.
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1940: 20 20 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 category TEX
1950: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 va
1980: 72 69 61 62 6c 65 20 54 45 58 54 2c 0a 09 20 20 riable TEXT,..
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a0: 20 20 20 20 20 20 76 61 6c 75 65 20 52 45 41 4c value REAL
19b0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
19c0: 20 20 20 20 20 20 20 20 20 20 20 65 78 70 65 63 expec
19d0: 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 ted REAL,..
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f0: 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 20 20 tol REAL,.
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 69 uni
1a20: 74 73 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 ts TEXT,.
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 63 6f 6d 6d 65 6e 74 comment
1a50: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
1a60: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a80: 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 45 status TEXT DE
1a90: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 typ
1ac0: 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 e TEXT DEFAULT '
1ad0: 27 2c 0a 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 20 20 20 20 20
1af0: 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 CONSTRAINT test
1b00: 5f 64 61 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 _data_constraint
1b10: 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 UNIQUE (test_id
1b20: 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 ,category,variab
1b30: 6c 65 29 29 3b 22 29 0a 09 20 20 3b 3b 20 4d 75 le));").. ;; Mu
1b40: 73 74 20 64 6f 20 74 68 69 73 20 2a 61 66 74 65 st do this *afte
1b50: 72 2a 20 72 75 6e 6e 69 6e 67 20 70 61 74 63 68 r* running patch
1b60: 20 64 62 20 21 21 20 4e 6f 20 6d 6f 72 65 2e 20 db !! No more.
1b70: 0a 09 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 .. (db:set-var
1b80: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
1b90: 53 49 4f 4e 22 20 6d 65 67 61 74 65 73 74 2d 76 SION" megatest-v
1ba0: 65 72 73 69 6f 6e 29 0a 09 20 20 29 29 0a 20 20 ersion).. )).
1bb0: 20 20 28 73 65 72 76 65 72 3a 63 6c 69 65 6e 74 (server:client
1bc0: 2d 73 65 74 75 70 20 64 62 29 0a 20 20 20 20 64 -setup db). d
1bd0: 62 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d b))..;;=========
1be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
1c20: 20 54 4f 44 4f 3a 0a 3b 3b 20 20 20 70 75 74 20 TODO:.;; put
1c30: 64 65 6c 74 61 73 20 69 6e 74 6f 20 61 6e 20 61 deltas into an a
1c40: 73 73 6f 63 20 6c 69 73 74 20 77 69 74 68 20 76 ssoc list with v
1c50: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 0a 3b ersion numbers.;
1c60: 3b 20 20 20 61 70 70 6c 79 20 61 6c 6c 20 66 72 ; apply all fr
1c70: 6f 6d 20 6c 61 73 74 20 74 6f 20 63 75 72 72 65 om last to curre
1c80: 6e 74 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d nt.;;===========
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 3d 3d 3d 0a 28 64 65 66 ===========.(def
1cd0: 69 6e 65 20 28 70 61 74 63 68 2d 64 62 20 64 62 ine (patch-db db
1ce0: 29 0a 20 20 28 68 61 6e 64 6c 65 2d 65 78 63 65 ). (handle-exce
1cf0: 70 74 69 6f 6e 73 0a 20 20 20 65 78 6e 0a 20 20 ptions. exn.
1d00: 20 28 62 65 67 69 6e 0a 20 20 20 20 20 28 70 72 (begin. (pr
1d10: 69 6e 74 20 22 45 78 63 65 70 74 69 6f 6e 3a 20 int "Exception:
1d20: 22 20 65 78 6e 29 0a 20 20 20 20 20 28 70 72 69 " exn). (pri
1d30: 6e 74 20 22 45 52 52 4f 52 3a 20 50 6f 73 73 69 nt "ERROR: Possi
1d40: 62 6c 65 20 6f 75 74 20 6f 66 20 64 61 74 65 20 ble out of date
1d50: 73 63 68 65 6d 61 2c 20 61 74 74 65 6d 70 74 69 schema, attempti
1d60: 6e 67 20 74 6f 20 61 64 64 20 74 61 62 6c 65 20 ng to add table
1d70: 6d 65 74 61 64 61 74 61 2e 2e 2e 22 29 0a 20 20 metadata...").
1d80: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
1d90: 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 ute db "CREATE T
1da0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
1db0: 54 53 20 6d 65 74 61 64 61 74 20 28 69 64 20 49 TS metadat (id I
1dc0: 4e 54 45 47 45 52 2c 20 76 61 72 20 54 45 58 54 NTEGER, var TEXT
1dd0: 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 , val TEXT,.
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e CON
1e00: 53 54 52 41 49 4e 54 20 6d 65 74 61 64 61 74 5f STRAINT metadat_
1e10: 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 constraint UNIQU
1e20: 45 20 28 76 61 72 29 29 3b 22 29 0a 20 20 20 20 E (var));").
1e30: 20 28 69 66 20 28 6e 6f 74 20 28 64 62 3a 67 65 (if (not (db:ge
1e40: 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 t-var db "MEGATE
1e50: 53 54 5f 56 45 52 53 49 4f 4e 22 29 29 0a 09 20 ST_VERSION"))..
1e60: 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 (db:set-var db "
1e70: 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e MEGATEST_VERSION
1e80: 22 20 31 2e 31 37 29 29 29 0a 20 20 20 28 6c 65 " 1.17))). (le
1e90: 74 20 28 28 6d 76 65 72 20 28 64 62 3a 67 65 74 t ((mver (db:get
1ea0: 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 -var db "MEGATES
1eb0: 54 5f 56 45 52 53 49 4f 4e 22 29 29 0a 09 20 28 T_VERSION")).. (
1ec0: 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 20 22 43 test-meta-def "C
1ed0: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e REATE TABLE IF N
1ee0: 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 5f 6d OT EXISTS test_m
1ef0: 65 74 61 20 28 69 64 20 49 4e 54 45 47 45 52 20 eta (id INTEGER
1f00: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 PRIMARY KEY,.
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f30: 20 20 74 65 73 74 6e 61 6d 65 20 20 20 20 54 45 testname TE
1f40: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f70: 20 20 20 20 61 75 74 68 6f 72 20 20 20 20 20 20 author
1f80: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
1f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fb0: 20 20 20 20 20 20 6f 77 6e 65 72 20 20 20 20 20 owner
1fc0: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
1fd0: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ff0: 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74 descript
2000: 69 6f 6e 20 54 45 58 54 20 44 45 46 41 55 4c 54 ion TEXT DEFAULT
2010: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2030: 20 20 20 20 20 20 20 20 20 20 72 65 76 69 65 77 review
2040: 65 64 20 20 20 20 54 49 4d 45 53 54 41 4d 50 2c ed TIMESTAMP,
2050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2070: 20 20 20 20 20 20 69 74 65 72 61 74 65 64 20 20 iterated
2080: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
2090: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20b0: 20 20 20 20 20 20 20 20 61 76 67 5f 72 75 6e 74 avg_runt
20c0: 69 6d 65 20 52 45 41 4c 2c 0a 20 20 20 20 20 20 ime REAL,.
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
20f0: 76 67 5f 64 69 73 6b 20 20 20 20 52 45 41 4c 2c vg_disk REAL,
2100: 0a 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 20 20 20 20 20 74 61 67 73 20 20 20 20 20 20 tags
2130: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
2140: 27 2c 0a 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 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 CONSTRAINT te
2170: 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 74 72 61 69 st_meta_constrai
2180: 6e 74 20 55 4e 49 51 55 45 20 28 74 65 73 74 6e nt UNIQUE (testn
2190: 61 6d 65 29 29 3b 22 29 29 0a 20 20 20 20 20 28 ame));")). (
21a0: 70 72 69 6e 74 20 22 43 75 72 72 65 6e 74 20 73 print "Current s
21b0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 3a 20 22 chema version: "
21c0: 20 6d 76 65 72 20 22 20 63 75 72 72 65 6e 74 20 mver " current
21d0: 6d 65 67 61 74 65 73 74 20 76 65 72 73 69 6f 6e megatest version
21e0: 3a 20 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72 : " megatest-ver
21f0: 73 69 6f 6e 29 0a 20 20 20 20 20 28 63 6f 6e 64 sion). (cond
2200: 0a 20 20 20 20 20 20 28 28 6e 6f 74 20 6d 76 65 . ((not mve
2210: 72 29 0a 20 20 20 20 20 20 20 28 70 72 69 6e 74 r). (print
2220: 20 22 41 64 64 69 6e 67 20 6d 65 67 61 74 65 73 "Adding megates
2230: 74 2d 76 65 72 73 69 6f 6e 20 74 6f 20 6d 65 74 t-version to met
2240: 61 64 61 74 61 22 29 20 3b 3b 20 4e 65 65 64 20 adata") ;; Need
2250: 74 6f 20 72 65 63 72 65 61 74 65 20 74 68 65 20 to recreate the
2260: 74 61 62 6c 65 0a 20 20 20 20 20 20 20 28 73 71 table. (sq
2270: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2280: 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 "DROP TABLE IF
2290: 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 3b 22 EXISTS metadat;"
22a0: 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 ). (sqlite
22b0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 3:execute db "CR
22c0: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f EATE TABLE IF NO
22d0: 54 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 74 T EXISTS metadat
22e0: 20 28 69 64 20 49 4e 54 45 47 45 52 2c 20 76 61 (id INTEGER, va
22f0: 72 20 54 45 58 54 2c 20 76 61 6c 20 54 45 58 54 r TEXT, val TEXT
2300: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2320: 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 20 6d CONSTRAINT m
2330: 65 74 61 64 61 74 5f 63 6f 6e 73 74 72 61 69 6e etadat_constrain
2340: 74 20 55 4e 49 51 55 45 20 28 76 61 72 29 29 3b t UNIQUE (var));
2350: 22 29 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 "). (db:se
2360: 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 t-var db "MEGATE
2370: 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 2e 31 37 ST_VERSION" 1.17
2380: 29 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d ). (patch-
2390: 64 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d db)). ((< m
23a0: 76 65 72 20 31 2e 32 31 29 0a 20 20 20 20 20 20 ver 1.21).
23b0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
23c0: 65 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 e db "DROP TABLE
23d0: 20 49 46 20 45 58 49 53 54 53 20 6d 65 74 61 64 IF EXISTS metad
23e0: 61 74 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 at;"). (sq
23f0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2400: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
2410: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 74 F NOT EXISTS met
2420: 61 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 adat (id INTEGER
2430: 2c 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c 20 , var TEXT, val
2440: 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 20 TEXT,.
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2460: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 CONSTRAI
2470: 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 NT metadat_const
2480: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 61 raint UNIQUE (va
2490: 72 29 29 3b 22 29 0a 20 20 20 20 20 20 20 28 64 r));"). (d
24a0: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
24b0: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
24c0: 31 2e 32 31 29 20 3b 3b 20 73 65 74 20 62 65 66 1.21) ;; set bef
24d0: 6f 72 65 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 ore, just in cas
24e0: 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 61 72 e the changes ar
24f0: 65 20 61 6c 72 65 61 64 79 20 61 70 70 6c 69 65 e already applie
2500: 64 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 d. (sqlite
2510: 33 3a 65 78 65 63 75 74 65 20 64 62 20 74 65 73 3:execute db tes
2520: 74 2d 6d 65 74 61 2d 64 65 66 29 0a 09 09 09 09 t-meta-def).....
2530: 09 3b 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 09 .;(for-each ....
2540: 09 09 3b 20 28 6c 61 6d 62 64 61 20 28 73 74 6d ..; (lambda (stm
2550: 74 29 0a 09 09 09 09 09 3b 20 20 20 28 73 71 6c t)......; (sql
2560: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
2570: 73 74 6d 74 29 29 0a 09 09 09 09 09 3b 20 28 6c stmt))......; (l
2580: 69 73 74 20 0a 09 09 09 09 09 3b 20 20 22 41 4c ist ......; "AL
2590: 54 45 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 TER TABLE tests
25a0: 41 44 44 20 43 4f 4c 55 4d 4e 20 66 69 72 73 74 ADD COLUMN first
25b0: 5f 65 72 72 20 54 45 58 54 3b 22 0a 09 09 09 09 _err TEXT;".....
25c0: 09 3b 20 20 22 41 4c 54 45 52 20 54 41 42 4c 45 .; "ALTER TABLE
25d0: 20 74 65 73 74 73 20 41 44 44 20 43 4f 4c 55 4d tests ADD COLUM
25e0: 4e 20 66 69 72 73 74 5f 77 61 72 6e 20 54 45 58 N first_warn TEX
25f0: 54 3b 22 0a 09 09 09 09 09 3b 20 20 29 29 0a 20 T;"......; )).
2600: 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 (patch-db)
2610: 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 ). ((< mver
2620: 20 31 2e 32 34 29 0a 20 20 20 20 20 20 20 28 64 1.24). (d
2630: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
2640: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
2650: 31 2e 32 34 29 0a 20 20 20 20 20 20 20 28 73 71 1.24). (sq
2660: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2670: 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 "DROP TABLE IF
2680: 45 58 49 53 54 53 20 74 65 73 74 5f 64 61 74 61 EXISTS test_data
2690: 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 ;"). (sqli
26a0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
26b0: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 DROP TABLE IF EX
26c0: 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 3b 22 ISTS test_meta;"
26d0: 29 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 ). (sqlite
26e0: 33 3a 65 78 65 63 75 74 65 20 64 62 20 74 65 73 3:execute db tes
26f0: 74 2d 6d 65 74 61 2d 64 65 66 29 0a 20 20 20 20 t-meta-def).
2700: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
2710: 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 54 ute db "CREATE T
2720: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
2730: 54 53 20 74 65 73 74 5f 64 61 74 61 20 28 69 64 TS test_data (id
2740: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
2750: 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 KEY,.
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2770: 20 20 20 20 20 20 74 65 73 74 5f 69 64 20 49 4e test_id IN
2780: 54 45 47 45 52 2c 0a 20 20 20 20 20 20 20 20 20 TEGER,.
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27a0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 20 category
27b0: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
27c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27e0: 20 76 61 72 69 61 62 6c 65 20 54 45 58 54 2c 0a variable TEXT,.
27f0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2800: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 52 value R
2810: 45 41 4c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 EAL,..
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 ex
2830: 70 65 63 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 pected REAL,..
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2850: 20 20 20 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a tol REAL,.
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2880: 75 6e 69 74 73 20 54 45 58 54 2c 0a 20 20 20 20 units TEXT,.
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d comm
28b0: 65 6e 74 20 54 45 58 54 20 44 45 46 41 55 4c 54 ent TEXT DEFAULT
28c0: 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '',.
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e0: 20 20 20 20 20 73 74 61 74 75 73 20 54 45 58 54 status TEXT
28f0: 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a DEFAULT 'n/a',.
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f CO
2920: 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 64 61 NSTRAINT test_da
2930: 74 61 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f ta UNIQUE (test_
2940: 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 id,category,vari
2950: 61 62 6c 65 29 29 3b 22 29 0a 20 20 20 20 20 20 able));").
2960: 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e 47 (print "WARNING
2970: 3a 20 54 61 62 6c 65 20 74 65 73 74 5f 64 61 74 : Table test_dat
2980: 61 20 61 6e 64 20 74 65 73 74 5f 6d 65 74 61 20 a and test_meta
2990: 77 68 65 72 65 20 72 65 63 72 65 61 74 65 64 2e where recreated.
29a0: 20 50 6c 65 61 73 65 20 64 6f 20 6d 65 67 61 74 Please do megat
29b0: 65 73 74 20 2d 75 70 64 61 74 65 2d 6d 65 74 61 est -update-meta
29c0: 22 29 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 "). (patch
29d0: 2d 64 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 -db)). ((<
29e0: 6d 76 65 72 20 31 2e 32 37 29 0a 20 20 20 20 20 mver 1.27).
29f0: 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 (db:set-var db
2a00: 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 "MEGATEST_VERSI
2a10: 4f 4e 22 20 31 2e 32 37 29 0a 20 20 20 20 20 20 ON" 1.27).
2a20: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
2a30: 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c e db "ALTER TABL
2a40: 45 20 74 65 73 74 5f 64 61 74 61 20 41 44 44 20 E test_data ADD
2a50: 43 4f 4c 55 4d 4e 20 74 79 70 65 20 54 45 58 54 COLUMN type TEXT
2a60: 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 DEFAULT '';").
2a70: 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 62 29 (patch-db)
2a80: 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 65 72 ). ((< mver
2a90: 20 31 2e 32 39 29 0a 20 20 20 20 20 20 20 28 64 1.29). (d
2aa0: 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 b:set-var db "ME
2ab0: 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 GATEST_VERSION"
2ac0: 31 2e 32 39 29 0a 20 20 20 20 20 20 20 28 73 71 1.29). (sq
2ad0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2ae0: 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 "ALTER TABLE te
2af0: 73 74 5f 73 74 65 70 73 20 41 44 44 20 43 4f 4c st_steps ADD COL
2b00: 55 4d 4e 20 6c 6f 67 66 69 6c 65 20 54 45 58 54 UMN logfile TEXT
2b10: 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 0a 20 DEFAULT '';").
2b20: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
2b30: 78 65 63 75 74 65 20 64 62 20 22 41 4c 54 45 52 xecute db "ALTER
2b40: 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 TABLE tests ADD
2b50: 20 43 4f 4c 55 4d 4e 20 73 68 6f 72 74 64 69 72 COLUMN shortdir
2b60: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
2b70: 3b 22 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d ;")). ((< m
2b80: 76 65 72 20 31 2e 33 36 29 0a 20 20 20 20 20 20 ver 1.36).
2b90: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
2ba0: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
2bb0: 4e 22 20 31 2e 33 36 29 0a 20 20 20 20 20 20 20 N" 1.36).
2bc0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2bd0: 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 db "ALTER TABLE
2be0: 20 74 65 73 74 5f 6d 65 74 61 20 41 44 44 20 43 test_meta ADD C
2bf0: 4f 4c 55 4d 4e 20 6a 6f 62 67 72 6f 75 70 20 54 OLUMN jobgroup T
2c00: 45 58 54 20 44 45 46 41 55 4c 54 20 27 64 65 66 EXT DEFAULT 'def
2c10: 61 75 6c 74 27 3b 22 29 29 0a 20 20 20 20 20 20 ault';")).
2c20: 28 28 3c 20 6d 76 65 72 20 31 2e 33 37 29 0a 20 ((< mver 1.37).
2c30: 20 20 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 (db:set-va
2c40: 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 r db "MEGATEST_V
2c50: 45 52 53 49 4f 4e 22 20 31 2e 33 37 29 0a 20 20 ERSION" 1.37).
2c60: 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 (sqlite3:ex
2c70: 65 63 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 ecute db "ALTER
2c80: 54 41 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 TABLE tests ADD
2c90: 43 4f 4c 55 4d 4e 20 61 72 63 68 69 76 65 64 20 COLUMN archived
2ca0: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 INTEGER DEFAULT
2cb0: 30 3b 22 29 29 20 0a 20 20 20 20 20 20 28 28 3c 0;")) . ((<
2cc0: 20 6d 76 65 72 20 6d 65 67 61 74 65 73 74 2d 76 mver megatest-v
2cd0: 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 20 28 ersion). (
2ce0: 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d db:set-var db "M
2cf0: 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 EGATEST_VERSION"
2d00: 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 69 6f megatest-versio
2d10: 6e 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d n))))))..;;=====
2d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2d40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2d60: 3d 0a 3b 3b 20 6d 65 74 61 20 67 65 74 20 61 6e =.;; meta get an
2d70: 64 20 73 65 74 20 76 61 72 73 0a 3b 3b 3d 3d 3d d set vars.;;===
2d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2dc0: 3d 3d 3d 0a 0a 3b 3b 20 72 65 74 75 72 6e 73 20 ===..;; returns
2dd0: 6e 75 6d 62 65 72 20 69 66 20 73 74 72 69 6e 67 number if string
2de0: 2d 3e 6e 75 6d 62 65 72 20 69 73 20 73 75 63 63 ->number is succ
2df0: 65 73 73 66 75 6c 2c 20 73 74 72 69 6e 67 20 6f essful, string o
2e00: 74 68 65 72 77 69 73 65 0a 28 64 65 66 69 6e 65 therwise.(define
2e10: 20 28 64 62 3a 67 65 74 2d 76 61 72 20 64 62 20 (db:get-var db
2e20: 76 61 72 29 0a 20 20 28 6c 65 74 20 28 28 72 65 var). (let ((re
2e30: 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 s #f)). (sqli
2e40: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
2e50: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 76 . (lambda (v
2e60: 61 6c 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 al). (set!
2e70: 20 72 65 73 20 76 61 6c 29 29 0a 20 20 20 20 20 res val)).
2e80: 64 62 20 22 53 45 4c 45 43 54 20 76 61 6c 20 46 db "SELECT val F
2e90: 52 4f 4d 20 6d 65 74 61 64 61 74 20 57 48 45 52 ROM metadat WHER
2ea0: 45 20 76 61 72 3d 3f 3b 22 20 76 61 72 29 0a 20 E var=?;" var).
2eb0: 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 3f 20 (if (string?
2ec0: 72 65 73 29 0a 09 28 6c 65 74 20 28 28 76 61 6c res)..(let ((val
2ed0: 6e 75 6d 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d num (string->num
2ee0: 62 65 72 20 72 65 73 29 29 29 0a 09 20 20 28 69 ber res))).. (i
2ef0: 66 20 76 61 6c 6e 75 6d 20 76 61 6c 6e 75 6d 20 f valnum valnum
2f00: 72 65 73 29 29 0a 09 72 65 73 29 29 29 0a 0a 28 res))..res)))..(
2f10: 64 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 76 define (db:set-v
2f20: 61 72 20 64 62 20 76 61 72 20 76 61 6c 29 0a 20 ar db var val).
2f30: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
2f40: 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 e db "INSERT OR
2f50: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6d 65 74 REPLACE INTO met
2f60: 61 64 61 74 20 28 76 61 72 2c 76 61 6c 29 20 56 adat (var,val) V
2f70: 41 4c 55 45 53 20 28 3f 2c 3f 29 3b 22 20 76 61 ALUES (?,?);" va
2f80: 72 20 76 61 6c 29 29 0a 0a 3b 3b 20 75 73 65 20 r val))..;; use
2f90: 61 20 67 6c 6f 62 61 6c 20 66 6f 72 20 73 6f 6d a global for som
2fa0: 65 20 70 72 69 6d 69 74 69 76 65 20 63 61 63 68 e primitive cach
2fb0: 69 6e 67 2c 20 69 74 20 69 73 20 6a 75 73 74 20 ing, it is just
2fc0: 73 69 6c 6c 79 20 74 6f 20 72 65 2d 72 65 61 64 silly to re-read
2fd0: 20 74 68 65 20 64 62 20 0a 3b 3b 20 6f 76 65 72 the db .;; over
2fe0: 20 61 6e 64 20 6f 76 65 72 20 61 67 61 69 6e 20 and over again
2ff0: 66 6f 72 20 74 68 65 20 6b 65 79 73 20 73 69 6e for the keys sin
3000: 63 65 20 74 68 65 79 20 6e 65 76 65 72 20 63 68 ce they never ch
3010: 61 6e 67 65 0a 0a 28 64 65 66 69 6e 65 20 2a 64 ange..(define *d
3020: 62 2d 6b 65 79 73 2a 20 23 66 29 0a 0a 28 64 65 b-keys* #f)..(de
3030: 66 69 6e 65 20 28 64 62 2d 67 65 74 2d 6b 65 79 fine (db-get-key
3040: 73 20 64 62 29 0a 20 20 28 69 66 20 2a 64 62 2d s db). (if *db-
3050: 6b 65 79 73 2a 20 2a 64 62 2d 6b 65 79 73 2a 20 keys* *db-keys*
3060: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 . (let ((re
3070: 73 20 27 28 29 29 29 0a 09 28 73 71 6c 69 74 65 s '()))..(sqlite
3080: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 3:for-each-row .
3090: 09 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 6b . (lambda (key k
30a0: 65 79 74 79 70 65 29 0a 09 20 20 20 28 73 65 74 eytype).. (set
30b0: 21 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 ! res (cons (vec
30c0: 74 6f 72 20 6b 65 79 20 6b 65 79 74 79 70 65 29 tor key keytype)
30d0: 20 72 65 73 29 29 29 0a 09 20 64 62 0a 09 20 22 res))).. db.. "
30e0: 53 45 4c 45 43 54 20 66 69 65 6c 64 6e 61 6d 65 SELECT fieldname
30f0: 2c 66 69 65 6c 64 74 79 70 65 20 46 52 4f 4d 20 ,fieldtype FROM
3100: 6b 65 79 73 20 4f 52 44 45 52 20 42 59 20 69 64 keys ORDER BY id
3110: 20 44 45 53 43 3b 22 29 0a 09 28 73 65 74 21 20 DESC;")..(set!
3120: 2a 64 62 2d 6b 65 79 73 2a 20 72 65 73 29 0a 09 *db-keys* res)..
3130: 72 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 res)))..(define
3140: 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 2d 67 db:get-keys db-g
3150: 65 74 2d 6b 65 79 73 29 0a 0a 28 64 65 66 69 6e et-keys)..(defin
3160: 65 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 65 2d e (db:get-value-
3170: 62 79 2d 68 65 61 64 65 72 20 72 6f 77 20 68 65 by-header row he
3180: 61 64 65 72 20 66 69 65 6c 64 29 0a 20 20 3b 3b ader field). ;;
3190: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 (debug:print 2
31a0: 22 64 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 "db:get-value-by
31b0: 2d 68 65 61 64 65 72 20 72 6f 77 3a 20 22 20 72 -header row: " r
31c0: 6f 77 20 22 20 68 65 61 64 65 72 3a 20 22 20 68 ow " header: " h
31d0: 65 61 64 65 72 20 22 20 66 69 65 6c 64 3a 20 22 eader " field: "
31e0: 20 66 69 65 6c 64 29 0a 20 20 28 69 66 20 28 6e field). (if (n
31f0: 75 6c 6c 3f 20 68 65 61 64 65 72 29 20 23 66 0a ull? header) #f.
3200: 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 (let loop
3210: 28 28 68 65 64 20 28 63 61 72 20 68 65 61 64 65 ((hed (car heade
3220: 72 29 29 0a 09 09 20 28 74 61 6c 20 28 63 64 72 r))... (tal (cdr
3230: 20 68 65 61 64 65 72 29 29 0a 09 09 20 28 6e 20 header))... (n
3240: 20 20 30 29 29 0a 09 28 69 66 20 28 65 71 75 61 0))..(if (equa
3250: 6c 3f 20 68 65 64 20 66 69 65 6c 64 29 0a 09 20 l? hed field)..
3260: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 (vector-ref r
3270: 6f 77 20 6e 29 0a 09 20 20 20 20 28 69 66 20 28 ow n).. (if (
3280: 6e 75 6c 6c 3f 20 74 61 6c 29 20 23 66 20 28 6c null? tal) #f (l
3290: 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 64 oop (car tal)(cd
32a0: 72 20 74 61 6c 29 28 2b 20 6e 20 31 29 29 29 29 r tal)(+ n 1))))
32b0: 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d )))..;;=========
32c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
32d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
32e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
32f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
3300: 20 20 52 20 55 20 4e 20 53 0a 3b 3b 3d 3d 3d 3d R U N S.;;====
3310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3350: 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 72 75 6e ==..(define (run
3360: 73 3a 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 69 s:get-std-run-fi
3370: 65 6c 64 73 20 6b 65 79 73 20 72 65 6d 66 69 65 elds keys remfie
3380: 6c 64 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 68 lds). (let* ((h
3390: 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e 64 eader (append
33a0: 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 69 (map key:get-fi
33b0: 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 09 eldname keys)...
33c0: 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 29 . remfields))
33d0: 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 63 .. (keystr (c
33e0: 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 74 onc (keys->keyst
33f0: 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 20 r keys) ","....
3400: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 (string-intersp
3410: 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 22 erse remfields "
3420: 2c 22 29 29 29 29 0a 20 20 20 20 28 6c 69 73 74 ,")))). (list
3430: 20 6b 65 79 73 74 72 20 68 65 61 64 65 72 29 29 keystr header))
3440: 29 0a 0a 3b 3b 20 57 41 53 20 64 62 2d 67 65 74 )..;; WAS db-get
3450: 2d 72 75 6e 73 20 46 49 58 4d 45 20 49 4e 20 52 -runs FIXME IN R
3460: 45 4d 41 49 4e 49 4e 47 20 43 4f 44 45 0a 3b 3b EMAINING CODE.;;
3470: 0a 3b 3b 20 4d 45 52 47 45 20 54 48 49 53 20 57 .;; MERGE THIS W
3480: 49 54 48 20 64 62 3a 67 65 74 2d 72 75 6e 73 2c ITH db:get-runs,
3490: 20 61 63 63 69 64 65 6e 74 6c 79 20 77 72 6f 74 accidently wrot
34a0: 65 20 69 74 20 74 77 69 63 65 0a 3b 3b 0a 3b 3b e it twice.;;.;;
34b0: 20 72 65 70 6c 61 63 65 20 68 65 61 64 65 72 20 replace header
34c0: 61 6e 64 20 6b 65 79 73 74 72 20 77 69 74 68 20 and keystr with
34d0: 61 20 63 61 6c 6c 20 74 6f 20 72 75 6e 73 3a 67 a call to runs:g
34e0: 65 74 2d 73 74 64 2d 72 75 6e 2d 66 69 65 6c 64 et-std-run-field
34f0: 73 0a 3b 3b 0a 3b 3b 20 6b 65 79 70 61 74 74 73 s.;;.;; keypatts
3500: 3a 20 28 20 28 4b 45 59 31 20 22 61 62 63 25 64 : ( (KEY1 "abc%d
3510: 65 66 22 29 28 4b 45 59 32 20 22 25 22 29 20 29 ef")(KEY2 "%") )
3520: 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a .;;.(define (db:
3530: 67 65 74 2d 72 75 6e 73 20 64 62 20 72 75 6e 70 get-runs db runp
3540: 61 74 74 20 63 6f 75 6e 74 20 6f 66 66 73 65 74 att count offset
3550: 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 6c 65 keypatts). (le
3560: 74 2a 20 28 28 72 65 73 20 20 20 20 20 20 27 28 t* ((res '(
3570: 29 29 0a 09 20 28 6b 65 79 73 20 20 20 20 20 20 )).. (keys
3580: 28 64 62 2d 67 65 74 2d 6b 65 79 73 20 64 62 29 (db-get-keys db)
3590: 29 0a 09 20 28 72 65 6d 66 69 65 6c 64 73 20 28 ).. (remfields (
35a0: 6c 69 73 74 20 22 69 64 22 20 22 72 75 6e 6e 61 list "id" "runna
35b0: 6d 65 22 20 22 73 74 61 74 65 22 20 22 73 74 61 me" "state" "sta
35c0: 74 75 73 22 20 22 6f 77 6e 65 72 22 20 22 65 76 tus" "owner" "ev
35d0: 65 6e 74 5f 74 69 6d 65 22 29 29 0a 09 20 28 68 ent_time")).. (h
35e0: 65 61 64 65 72 20 20 20 20 28 61 70 70 65 6e 64 eader (append
35f0: 20 28 6d 61 70 20 6b 65 79 3a 67 65 74 2d 66 69 (map key:get-fi
3600: 65 6c 64 6e 61 6d 65 20 6b 65 79 73 29 0a 09 09 eldname keys)...
3610: 09 20 20 20 20 72 65 6d 66 69 65 6c 64 73 29 29 . remfields))
3620: 0a 09 20 28 6b 65 79 73 74 72 20 20 20 20 28 63 .. (keystr (c
3630: 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 74 onc (keys->keyst
3640: 72 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 09 20 r keys) ","....
3650: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 (string-intersp
3660: 65 72 73 65 20 72 65 6d 66 69 65 6c 64 73 20 22 erse remfields "
3670: 2c 22 29 29 29 0a 09 20 28 71 72 79 73 74 72 20 ,"))).. (qrystr
3680: 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 (conc "SELECT
3690: 20 22 20 6b 65 79 73 74 72 20 22 20 46 52 4f 4d " keystr " FROM
36a0: 20 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e 6e runs WHERE runn
36b0: 61 6d 65 20 4c 49 4b 45 20 3f 20 22 0a 09 09 09 ame LIKE ? "....
36c0: 20 20 3b 3b 20 47 65 6e 65 72 61 74 65 3a 20 22 ;; Generate: "
36d0: 20 41 4e 44 20 78 20 4c 49 4b 45 20 27 6b 65 79 AND x LIKE 'key
36e0: 70 61 74 74 27 20 2e 2e 2e 22 0a 09 09 09 20 20 patt' ..."....
36f0: 28 69 66 20 28 6e 75 6c 6c 3f 20 6b 65 79 70 61 (if (null? keypa
3700: 74 74 73 29 20 22 22 0a 09 09 09 20 20 20 20 20 tts) ""....
3710: 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 0a 09 (conc " AND "..
3720: 09 09 09 20 20 20 20 28 73 74 72 69 6e 67 2d 6a ... (string-j
3730: 6f 69 6e 20 0a 09 09 09 09 20 20 20 20 20 28 6d oin ..... (m
3740: 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 70 ap (lambda (keyp
3750: 61 74 74 29 0a 09 09 09 09 09 20 20 20 20 28 6c att)...... (l
3760: 65 74 20 28 28 6b 65 79 20 20 28 63 61 72 20 6b et ((key (car k
3770: 65 79 70 61 74 74 29 29 0a 09 09 09 09 09 09 20 eypatt)).......
3780: 20 28 70 61 74 74 20 28 63 61 64 72 20 6b 65 79 (patt (cadr key
3790: 70 61 74 74 29 29 29 0a 09 09 09 09 09 20 20 20 patt)))......
37a0: 20 20 20 28 63 6f 6e 63 20 6b 65 79 20 22 20 4c (conc key " L
37b0: 49 4b 45 20 27 22 20 70 61 74 74 20 22 27 22 29 IKE '" patt "'")
37c0: 29 29 0a 09 09 09 09 09 20 20 6b 65 79 70 61 74 ))...... keypat
37d0: 74 73 29 0a 09 09 09 09 20 20 20 20 20 22 20 41 ts)..... " A
37e0: 4e 44 20 22 29 29 29 0a 09 09 09 20 20 22 20 4f ND "))).... " O
37f0: 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69 RDER BY event_ti
3800: 6d 65 20 44 45 53 43 20 22 0a 09 09 09 20 20 28 me DESC ".... (
3810: 69 66 20 28 6e 75 6d 62 65 72 3f 20 63 6f 75 6e if (number? coun
3820: 74 29 0a 09 09 09 20 20 20 20 20 20 28 63 6f 6e t).... (con
3830: 63 20 22 20 4c 49 4d 49 54 20 22 20 63 6f 75 6e c " LIMIT " coun
3840: 74 29 0a 09 09 09 20 20 20 20 20 20 22 22 29 0a t).... "").
3850: 09 09 09 20 20 28 69 66 20 28 6e 75 6d 62 65 72 ... (if (number
3860: 3f 20 6f 66 66 73 65 74 29 0a 09 09 09 20 20 20 ? offset)....
3870: 20 20 20 28 63 6f 6e 63 20 22 20 4f 46 46 53 45 (conc " OFFSE
3880: 54 20 22 20 6f 66 66 73 65 74 29 0a 09 09 09 20 T " offset)....
3890: 20 20 20 20 20 22 22 29 29 29 29 0a 20 20 20 20 "")))).
38a0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 (debug:print 4 "
38b0: 64 62 3a 67 65 74 2d 72 75 6e 73 20 71 72 79 73 db:get-runs qrys
38c0: 74 72 3a 20 22 20 71 72 79 73 74 72 20 22 5c 6e tr: " qrystr "\n
38d0: 6b 65 79 70 61 74 74 73 3a 20 22 20 6b 65 79 70 keypatts: " keyp
38e0: 61 74 74 73 20 22 5c 6e 20 20 6f 66 66 73 65 74 atts "\n offset
38f0: 3a 20 22 20 6f 66 66 73 65 74 20 22 20 6c 69 6d : " offset " lim
3900: 69 74 3a 20 22 20 63 6f 75 6e 74 29 0a 20 20 20 it: " count).
3910: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
3920: 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d ch-row. (lam
3930: 62 64 61 20 28 61 20 2e 20 78 29 0a 20 20 20 20 bda (a . x).
3940: 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 6f (set! res (co
3950: 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 ns (apply vector
3960: 20 61 20 78 29 20 72 65 73 29 29 29 0a 20 20 20 a x) res))).
3970: 20 20 64 62 0a 20 20 20 20 20 71 72 79 73 74 72 db. qrystr
3980: 0a 20 20 20 20 20 72 75 6e 70 61 74 74 29 0a 20 . runpatt).
3990: 20 20 20 28 76 65 63 74 6f 72 20 68 65 61 64 65 (vector heade
39a0: 72 20 72 65 73 29 29 29 0a 0a 3b 3b 20 6a 75 73 r res)))..;; jus
39b0: 74 20 67 65 74 20 63 6f 75 6e 74 20 6f 66 20 72 t get count of r
39c0: 75 6e 73 0a 28 64 65 66 69 6e 65 20 28 64 62 3a uns.(define (db:
39d0: 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 20 get-num-runs db
39e0: 72 75 6e 70 61 74 74 29 0a 20 20 28 6c 65 74 20 runpatt). (let
39f0: 28 28 6e 75 6d 72 75 6e 73 20 30 29 29 0a 20 20 ((numruns 0)).
3a00: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
3a10: 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c ach-row . (l
3a20: 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 ambda (count).
3a30: 20 20 20 20 20 28 73 65 74 21 20 6e 75 6d 72 75 (set! numru
3a40: 6e 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 20 ns count)).
3a50: 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 db. "SELECT
3a60: 43 4f 55 4e 54 28 69 64 29 20 46 52 4f 4d 20 72 COUNT(id) FROM r
3a70: 75 6e 73 20 57 48 45 52 45 20 72 75 6e 6e 61 6d uns WHERE runnam
3a80: 65 20 4c 49 4b 45 20 3f 3b 22 20 72 75 6e 70 61 e LIKE ?;" runpa
3a90: 74 74 29 0a 20 20 20 20 6e 75 6d 72 75 6e 73 29 tt). numruns)
3aa0: 29 0a 0a 0a 3b 3b 20 75 73 65 20 28 67 65 74 2d )...;; use (get-
3ab0: 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 20 value-by-header
3ac0: 28 64 62 3a 67 65 74 2d 68 65 61 64 65 72 20 72 (db:get-header r
3ad0: 75 6e 69 6e 66 6f 29 28 64 62 3a 67 65 74 2d 72 uninfo)(db:get-r
3ae0: 6f 77 20 72 75 6e 69 6e 66 6f 29 29 0a 28 64 65 ow runinfo)).(de
3af0: 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 72 75 6e fine (db:get-run
3b00: 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 29 -info db run-id)
3b10: 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 20 . (let* ((res
3b20: 20 20 20 20 23 66 29 0a 09 20 28 6b 65 79 73 20 #f).. (keys
3b30: 20 20 20 20 20 28 64 62 2d 67 65 74 2d 6b 65 79 (db-get-key
3b40: 73 20 64 62 29 29 0a 09 20 28 72 65 6d 66 69 65 s db)).. (remfie
3b50: 6c 64 73 20 28 6c 69 73 74 20 22 69 64 22 20 22 lds (list "id" "
3b60: 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 runname" "state"
3b70: 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 "status" "owner
3b80: 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 29 " "event_time"))
3b90: 0a 09 20 28 68 65 61 64 65 72 20 20 20 20 28 61 .. (header (a
3ba0: 70 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a 67 ppend (map key:g
3bb0: 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 et-fieldname key
3bc0: 73 29 0a 09 09 09 20 20 20 20 72 65 6d 66 69 65 s).... remfie
3bd0: 6c 64 73 29 29 0a 09 20 28 6b 65 79 73 74 72 20 lds)).. (keystr
3be0: 20 20 20 28 63 6f 6e 63 20 28 6b 65 79 73 2d 3e (conc (keys->
3bf0: 6b 65 79 73 74 72 20 6b 65 79 73 29 20 22 2c 22 keystr keys) ","
3c00: 0a 09 09 09 20 20 28 73 74 72 69 6e 67 2d 69 6e .... (string-in
3c10: 74 65 72 73 70 65 72 73 65 20 72 65 6d 66 69 65 tersperse remfie
3c20: 6c 64 73 20 22 2c 22 29 29 29 29 0a 20 20 20 20 lds ",")))).
3c30: 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 ;; (debug:print
3c40: 30 20 22 64 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 0 "db:get-run-in
3c50: 66 6f 20 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e fo run-id: " run
3c60: 2d 69 64 20 22 20 68 65 61 64 65 72 3a 20 22 20 -id " header: "
3c70: 68 65 61 64 65 72 20 22 20 6b 65 79 73 74 72 3a header " keystr:
3c80: 20 22 20 6b 65 79 73 74 72 29 0a 20 20 20 20 28 " keystr). (
3c90: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
3ca0: 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 -row. (lambd
3cb0: 61 20 28 61 20 2e 20 78 29 0a 20 20 20 20 20 20 a (a . x).
3cc0: 20 28 73 65 74 21 20 72 65 73 20 28 61 70 70 6c (set! res (appl
3cd0: 79 20 76 65 63 74 6f 72 20 61 20 78 29 29 29 0a y vector a x))).
3ce0: 20 20 20 20 20 64 62 0a 20 20 20 20 20 28 63 6f db. (co
3cf0: 6e 63 20 22 53 45 4c 45 43 54 20 22 20 6b 65 79 nc "SELECT " key
3d00: 73 74 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 str " FROM runs
3d10: 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 0a 20 20 WHERE id=?;").
3d20: 20 20 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 run-id). (
3d30: 76 65 63 74 6f 72 20 68 65 61 64 65 72 20 72 65 vector header re
3d40: 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 s)))..(define (d
3d50: 62 3a 73 65 74 2d 63 6f 6d 6d 65 6e 74 2d 66 6f b:set-comment-fo
3d60: 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 r-run db run-id
3d70: 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 73 71 6c 69 comment). (sqli
3d80: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
3d90: 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 20 UPDATE runs SET
3da0: 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 comment=? WHERE
3db0: 69 64 3d 3f 3b 22 20 63 6f 6d 6d 65 6e 74 20 72 id=?;" comment r
3dc0: 75 6e 2d 69 64 29 29 0a 0a 3b 3b 20 64 6f 65 73 un-id))..;; does
3dd0: 20 6e 6f 74 20 28 6f 62 76 69 6f 75 73 6c 79 21 not (obviously!
3de0: 29 20 72 65 6d 6f 76 65 64 20 64 65 70 65 6e 64 ) removed depend
3df0: 65 6e 74 20 64 61 74 61 2e 20 0a 28 64 65 66 69 ent data. .(defi
3e00: 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 72 75 ne (db:delete-ru
3e10: 6e 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 n db run-id). (
3e20: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
3e30: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
3e40: 72 75 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 3b runs WHERE id=?;
3e50: 22 20 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 66 " run-id))..(def
3e60: 69 6e 65 20 28 64 62 3a 75 70 64 61 74 65 2d 72 ine (db:update-r
3e70: 75 6e 2d 65 76 65 6e 74 5f 74 69 6d 65 20 64 62 un-event_time db
3e80: 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 71 6c 69 run-id). (sqli
3e90: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
3ea0: 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 20 UPDATE runs SET
3eb0: 65 76 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 74 event_time=strft
3ec0: 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 ime('%s','now')
3ed0: 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 72 75 6e WHERE id=?;" run
3ee0: 2d 69 64 29 29 20 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d -id)) ..;;======
3ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f30: 0a 3b 3b 20 20 54 20 45 20 53 20 54 20 53 0a 3b .;; T E S T S.;
3f40: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
3f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3f80: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 73 74 61 74 =======..;; stat
3f90: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
3fa0: 61 72 65 20 6c 69 73 74 73 2c 20 74 75 72 6e 20 are lists, turn
3fb0: 74 68 65 6d 20 69 6e 74 6f 20 28 22 50 41 53 53 them into ("PASS
3fc0: 22 2c 22 46 41 49 4c 22 2e 2e 2e 29 20 61 6e 64 ","FAIL"...) and
3fd0: 20 75 73 65 20 4e 4f 54 20 49 4e 0a 3b 3b 20 69 use NOT IN.;; i
3fe0: 2e 65 2e 20 74 68 65 73 65 20 6c 69 73 74 73 20 .e. these lists
3ff0: 64 65 66 69 6e 65 20 77 68 61 74 20 74 6f 20 4e define what to N
4000: 4f 54 20 73 68 6f 77 2e 0a 3b 3b 20 73 74 61 74 OT show..;; stat
4010: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
4020: 61 72 65 20 72 65 71 75 69 72 65 64 20 74 6f 20 are required to
4030: 62 65 20 6c 69 73 74 73 2c 20 65 6d 70 74 79 20 be lists, empty
4040: 69 73 20 6f 6b 0a 28 64 65 66 69 6e 65 20 28 64 is ok.(define (d
4050: 62 2d 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b-get-tests-for-
4060: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 run db run-id te
4070: 73 74 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 stpatt itempatt
4080: 73 74 61 74 65 73 20 73 74 61 74 75 73 65 73 29 states statuses)
4090: 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 28 . (let ((res '(
40a0: 29 29 0a 09 28 73 74 61 74 65 73 2d 73 74 72 20 ))..(states-str
40b0: 20 20 20 28 63 6f 6e 63 20 22 28 27 22 20 28 73 (conc "('" (s
40c0: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 tring-interspers
40d0: 65 20 73 74 61 74 65 73 20 20 20 22 27 2c 27 22 e states "','"
40e0: 29 20 22 27 29 22 29 29 0a 09 28 73 74 61 74 75 ) "')"))..(statu
40f0: 73 65 73 2d 73 74 72 20 20 28 63 6f 6e 63 20 22 ses-str (conc "
4100: 28 27 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 ('" (string-inte
4110: 72 73 70 65 72 73 65 20 73 74 61 74 75 73 65 73 rsperse statuses
4120: 20 22 27 2c 27 22 29 20 22 27 29 22 29 29 0a 09 "','") "')"))..
4130: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 ). (sqlite3:f
4140: 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 or-each-row .
4150: 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 62 (lambda (a . b
4160: 29 20 3b 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 ) ;; id run-id t
4170: 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 estname state st
4180: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
4190: 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 host cpuload dis
41a0: 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 kfree uname rund
41b0: 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e ir item-path run
41c0: 2d 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d -duration final-
41d0: 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 logf comment).
41e0: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
41f0: 63 6f 6e 73 20 28 61 70 70 6c 79 20 76 65 63 74 cons (apply vect
4200: 6f 72 20 61 20 62 29 20 72 65 73 29 29 29 20 3b or a b) res))) ;
4210: 3b 20 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 ; id run-id test
4220: 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 name state statu
4230: 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 s event-time hos
4240: 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 t cpuload diskfr
4250: 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 ee uname rundir
4260: 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 2d 64 75 item-path run-du
4270: 72 61 74 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f 67 ration final-log
4280: 66 20 63 6f 6d 6d 65 6e 74 29 20 72 65 73 29 29 f comment) res))
4290: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
42a0: 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 69 64 (conc "SELECT id
42b0: 2c 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 ,run_id,testname
42c0: 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 ,state,status,ev
42d0: 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 ent_time,host,cp
42e0: 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 uload,diskfree,u
42f0: 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d name,rundir,item
4300: 5f 70 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 _path,run_durati
4310: 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f on,final_logf,co
4320: 6d 6d 65 6e 74 20 22 0a 09 20 20 20 22 20 46 52 mment ".. " FR
4330: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 OM tests WHERE r
4340: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 un_id=? AND test
4350: 6e 61 6d 65 20 6c 69 6b 65 20 3f 20 41 4e 44 20 name like ? AND
4360: 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 3f item_path LIKE ?
4370: 20 22 20 0a 09 20 20 20 22 20 41 4e 44 20 4e 4f " .. " AND NO
4380: 54 20 28 73 74 61 74 65 20 69 6e 20 22 20 73 74 T (state in " st
4390: 61 74 65 73 2d 73 74 72 20 22 20 41 4e 44 20 73 ates-str " AND s
43a0: 74 61 74 75 73 20 49 4e 20 22 20 73 74 61 74 75 tatus IN " statu
43b0: 73 65 73 2d 73 74 72 20 22 29 20 22 0a 09 20 20 ses-str ") "..
43c0: 20 3b 3b 20 22 20 4f 52 44 45 52 20 42 59 20 69 ;; " ORDER BY i
43d0: 64 20 44 45 53 43 3b 22 0a 09 20 20 20 22 20 4f d DESC;".. " O
43e0: 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69 RDER BY event_ti
43f0: 6d 65 20 41 53 43 3b 22 20 3b 3b 20 50 4f 54 45 me ASC;" ;; POTE
4400: 4e 54 49 41 4c 20 49 53 53 55 45 21 20 43 48 45 NTIAL ISSUE! CHE
4410: 43 4b 20 4d 45 21 20 44 6f 65 73 20 61 6e 79 74 CK ME! Does anyt
4420: 69 6e 67 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 ing depend on th
4430: 69 73 20 62 65 69 6e 67 20 73 6f 72 74 65 64 20 is being sorted
4440: 62 79 20 69 64 3f 0a 09 20 20 20 29 0a 20 20 20 by id?.. ).
4450: 20 20 72 75 6e 2d 69 64 0a 20 20 20 20 20 28 69 run-id. (i
4460: 66 20 74 65 73 74 70 61 74 74 20 74 65 73 74 70 f testpatt testp
4470: 61 74 74 20 22 25 22 29 0a 20 20 20 20 20 28 69 att "%"). (i
4480: 66 20 69 74 65 6d 70 61 74 74 20 69 74 65 6d 70 f itempatt itemp
4490: 61 74 74 20 22 25 22 29 29 0a 20 20 20 20 72 65 att "%")). re
44a0: 73 29 29 0a 0a 3b 3b 20 74 68 69 73 20 6f 6e 65 s))..;; this one
44b0: 20 69 73 20 61 20 62 69 74 20 62 72 6f 6b 65 6e is a bit broken
44c0: 20 42 55 47 20 46 49 58 4d 45 0a 28 64 65 66 69 BUG FIXME.(defi
44d0: 6e 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 ne (db:delete-te
44e0: 73 74 2d 73 74 65 70 2d 72 65 63 6f 72 64 73 20 st-step-records
44f0: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
4500: 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20 28 ame itemdat). (
4510: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
4520: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
4530: 74 65 73 74 5f 73 74 65 70 73 20 57 48 45 52 45 test_steps WHERE
4540: 20 74 65 73 74 5f 69 64 20 69 6e 20 28 53 45 4c test_id in (SEL
4550: 45 43 54 20 69 64 20 46 52 4f 4d 20 74 65 73 74 ECT id FROM test
4560: 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f s WHERE run_id=?
4570: 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 AND testname=?
4580: 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 29 AND item_path=?)
4590: 3b 22 20 0a 09 09 20 20 20 72 75 6e 2d 69 64 20 ;" ... run-id
45a0: 74 65 73 74 2d 6e 61 6d 65 20 28 69 74 65 6d 2d test-name (item-
45b0: 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 list->path itemd
45c0: 61 74 29 29 29 0a 3b 3b 20 0a 28 64 65 66 69 6e at))).;; .(defin
45d0: 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 e (db:delete-tes
45e0: 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 t-records db tes
45f0: 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 65 33 t-id). (sqlite3
4600: 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 45 4c :execute db "DEL
4610: 45 54 45 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 ETE FROM test_st
4620: 65 70 73 20 57 48 45 52 45 20 74 65 73 74 5f 69 eps WHERE test_i
4630: 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 29 0a 20 d=?;" test-id).
4640: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
4650: 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f e db "DELETE FRO
4660: 4d 20 74 65 73 74 5f 64 61 74 61 20 20 57 48 45 M test_data WHE
4670: 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 74 RE test_id=?;" t
4680: 65 73 74 2d 69 64 29 0a 20 20 28 73 71 6c 69 74 est-id). (sqlit
4690: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
46a0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 73 ELETE FROM tests
46b0: 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 74 65 WHERE id=?;" te
46c0: 73 74 2d 69 64 29 29 0a 0a 3b 3b 20 73 65 74 20 st-id))..;; set
46d0: 74 65 73 74 73 20 77 69 74 68 20 73 74 61 74 65 tests with state
46e0: 20 63 75 72 72 73 74 61 74 65 20 61 6e 64 20 73 currstate and s
46f0: 74 61 74 75 73 20 63 75 72 72 73 74 61 74 75 73 tatus currstatus
4700: 20 74 6f 20 6e 65 77 73 74 61 74 65 20 61 6e 64 to newstate and
4710: 20 6e 65 77 73 74 61 74 75 73 0a 3b 3b 20 75 73 newstatus.;; us
4720: 65 20 63 75 72 72 73 74 61 74 65 20 3d 20 23 66 e currstate = #f
4730: 20 61 6e 64 20 6f 72 20 63 75 72 72 73 74 61 74 and or currstat
4740: 75 73 20 3d 20 23 66 20 74 6f 20 61 70 70 6c 79 us = #f to apply
4750: 20 74 6f 20 61 6e 79 20 73 74 61 74 65 20 6f 72 to any state or
4760: 20 73 74 61 74 75 73 20 72 65 73 70 65 63 74 69 status respecti
4770: 76 65 6c 79 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a vely.;; WARNING:
4780: 20 53 51 4c 20 69 6e 6a 65 63 74 69 6f 6e 20 72 SQL injection r
4790: 69 73 6b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a isk.(define (db:
47a0: 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 65 2d set-tests-state-
47b0: 73 74 61 74 75 73 20 64 62 20 72 75 6e 2d 69 64 status db run-id
47c0: 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 72 73 testnames currs
47d0: 74 61 74 65 20 63 75 72 72 73 74 61 74 75 73 20 tate currstatus
47e0: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
47f0: 75 73 29 0a 20 20 28 66 6f 72 2d 65 61 63 68 20 us). (for-each
4800: 28 6c 61 6d 62 64 61 20 28 74 65 73 74 6e 61 6d (lambda (testnam
4810: 65 29 0a 09 20 20 20 20 20 20 28 6c 65 74 20 28 e).. (let (
4820: 28 71 72 79 20 28 63 6f 6e 63 20 22 55 50 44 41 (qry (conc "UPDA
4830: 54 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 TE tests SET sta
4840: 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 20 57 48 te=?,status=? WH
4850: 45 52 45 20 22 0a 09 09 09 20 20 20 20 20 20 20 ERE "....
4860: 28 69 66 20 63 75 72 72 73 74 61 74 65 20 20 28 (if currstate (
4870: 63 6f 6e 63 20 22 73 74 61 74 65 3d 27 22 20 63 conc "state='" c
4880: 75 72 72 73 74 61 74 65 20 22 27 20 41 4e 44 20 urrstate "' AND
4890: 22 29 20 22 22 29 0a 09 09 09 20 20 20 20 20 20 ") "")....
48a0: 20 28 69 66 20 63 75 72 72 73 74 61 74 75 73 20 (if currstatus
48b0: 28 63 6f 6e 63 20 22 73 74 61 74 75 73 3d 27 22 (conc "status='"
48c0: 20 63 75 72 72 73 74 61 74 75 73 20 22 27 20 41 currstatus "' A
48d0: 4e 44 20 22 29 20 22 22 29 0a 09 09 09 20 20 20 ND ") "")....
48e0: 20 20 20 20 22 20 72 75 6e 5f 69 64 3d 3f 20 41 " run_id=? A
48f0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
4900: 44 20 4e 4f 54 20 28 69 74 65 6d 5f 70 61 74 68 D NOT (item_path
4910: 3d 27 27 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 ='' AND testname
4920: 20 69 6e 20 28 53 45 4c 45 43 54 20 44 49 53 54 in (SELECT DIST
4930: 49 4e 43 54 20 74 65 73 74 6e 61 6d 65 20 46 52 INCT testname FR
4940: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 74 OM tests WHERE t
4950: 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 estname=? AND it
4960: 65 6d 5f 70 61 74 68 20 21 3d 20 27 27 29 29 3b em_path != ''));
4970: 22 29 29 29 0a 09 09 3b 3b 28 64 65 62 75 67 3a ")))...;;(debug:
4980: 70 72 69 6e 74 20 30 20 22 51 52 59 3a 20 22 20 print 0 "QRY: "
4990: 71 72 79 29 0a 09 09 28 73 71 6c 69 74 65 33 3a qry)...(sqlite3:
49a0: 65 78 65 63 75 74 65 20 64 62 20 71 72 79 20 72 execute db qry r
49b0: 75 6e 2d 69 64 20 6e 65 77 73 74 61 74 65 20 6e un-id newstate n
49c0: 65 77 73 74 61 74 75 73 20 74 65 73 74 6e 61 6d ewstatus testnam
49d0: 65 20 74 65 73 74 6e 61 6d 65 29 29 29 0a 09 20 e testname)))..
49e0: 20 20 20 74 65 73 74 6e 61 6d 65 73 29 29 0a 0a testnames))..
49f0: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
4a00: 73 74 65 70 2d 73 65 74 2d 73 74 61 74 75 73 21 step-set-status!
4a10: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d db run-id test-
4a20: 6e 61 6d 65 20 74 65 73 74 73 74 65 70 2d 6e 61 name teststep-na
4a30: 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 me state-in stat
4a40: 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 us-in item-path
4a50: 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 comment logfile)
4a60: 0a 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 . (debug:print
4a70: 34 20 22 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 4 "run-id: " run
4a80: 2d 69 64 20 22 20 74 65 73 74 2d 6e 61 6d 65 3a -id " test-name:
4a90: 20 22 20 74 65 73 74 2d 6e 61 6d 65 29 0a 20 20 " test-name).
4aa0: 28 6c 65 74 2a 20 28 28 73 74 61 74 65 20 20 20 (let* ((state
4ab0: 20 20 28 63 68 65 63 6b 2d 76 61 6c 69 64 2d 69 (check-valid-i
4ac0: 74 65 6d 73 20 22 73 74 61 74 65 22 20 73 74 61 tems "state" sta
4ad0: 74 65 2d 69 6e 29 29 0a 09 20 28 73 74 61 74 75 te-in)).. (statu
4ae0: 73 20 20 20 20 28 63 68 65 63 6b 2d 76 61 6c 69 s (check-vali
4af0: 64 2d 69 74 65 6d 73 20 22 73 74 61 74 75 73 22 d-items "status"
4b00: 20 73 74 61 74 75 73 2d 69 6e 29 29 0a 09 20 28 status-in)).. (
4b10: 74 65 73 74 64 61 74 20 20 20 28 64 62 3a 67 65 testdat (db:ge
4b20: 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 t-test-info db r
4b30: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
4b40: 69 74 65 6d 2d 70 61 74 68 29 29 29 0a 20 20 20 item-path))).
4b50: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 35 20 (debug:print 5
4b60: 22 74 65 73 74 64 61 74 3a 20 22 20 74 65 73 74 "testdat: " test
4b70: 64 61 74 29 0a 20 20 20 20 28 69 66 20 28 61 6e dat). (if (an
4b80: 64 20 74 65 73 74 64 61 74 20 3b 3b 20 69 66 20 d testdat ;; if
4b90: 74 68 65 20 73 65 63 74 69 6f 6e 20 65 78 69 73 the section exis
4ba0: 74 73 20 74 68 65 6e 20 66 6f 72 63 65 20 73 70 ts then force sp
4bb0: 65 63 69 66 69 63 61 74 69 6f 6e 20 42 55 47 2c ecification BUG,
4bc0: 20 49 20 64 6f 6e 27 74 20 6c 69 6b 65 20 68 6f I don't like ho
4bd0: 77 20 74 68 69 73 20 77 6f 72 6b 73 2e 0a 09 20 w this works...
4be0: 20 20 20 20 28 6f 72 20 28 6e 6f 74 20 73 74 61 (or (not sta
4bf0: 74 65 29 28 6e 6f 74 20 73 74 61 74 75 73 29 29 te)(not status))
4c00: 29 0a 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 )..(debug:print
4c10: 30 20 22 57 41 52 4e 49 4e 47 3a 20 49 6e 76 61 0 "WARNING: Inva
4c20: 6c 69 64 20 22 20 28 69 66 20 73 74 61 74 75 73 lid " (if status
4c30: 20 22 73 74 61 74 75 73 22 20 22 73 74 61 74 65 "status" "state
4c40: 22 29 0a 09 20 20 20 20 20 20 20 22 20 76 61 6c ").. " val
4c50: 75 65 20 5c 22 22 20 28 69 66 20 73 74 61 74 75 ue \"" (if statu
4c60: 73 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 75 s state-in statu
4c70: 73 2d 69 6e 29 20 22 5c 22 2c 20 75 70 64 61 74 s-in) "\", updat
4c80: 65 20 79 6f 75 72 20 76 61 6c 69 64 76 61 6c 75 e your validvalu
4c90: 65 73 20 73 65 63 74 69 6f 6e 20 69 6e 20 6d 65 es section in me
4ca0: 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 22 29 29 gatest.config"))
4cb0: 0a 20 20 20 20 28 69 66 20 74 65 73 74 64 61 74 . (if testdat
4cc0: 0a 09 28 6c 65 74 20 28 28 74 65 73 74 2d 69 64 ..(let ((test-id
4cd0: 20 28 74 65 73 74 3a 67 65 74 2d 69 64 20 74 65 (test:get-id te
4ce0: 73 74 64 61 74 29 29 29 0a 09 20 20 3b 3b 20 46 stdat))).. ;; F
4cf0: 49 58 4d 45 20 2d 20 74 68 69 73 20 73 68 6f 75 IXME - this shou
4d00: 6c 64 20 6e 6f 74 20 75 70 64 61 74 65 20 74 68 ld not update th
4d10: 65 20 6c 6f 67 66 69 6c 65 20 75 6e 6c 65 73 73 e logfile unless
4d20: 20 69 74 20 69 73 20 73 70 65 63 69 66 69 65 64 it is specified
4d30: 2e 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 ... (sqlite3:ex
4d40: 65 63 75 74 65 20 64 62 20 0a 09 09 09 22 49 4e ecute db ...."IN
4d50: 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 SERT OR REPLACE
4d60: 69 6e 74 6f 20 74 65 73 74 5f 73 74 65 70 73 20 into test_steps
4d70: 28 74 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d (test_id,stepnam
4d80: 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 e,state,status,e
4d90: 76 65 6e 74 5f 74 69 6d 65 2c 63 6f 6d 6d 65 6e vent_time,commen
4da0: 74 2c 6c 6f 67 66 69 6c 65 29 20 56 41 4c 55 45 t,logfile) VALUE
4db0: 53 28 3f 2c 3f 2c 3f 2c 3f 2c 73 74 72 66 74 69 S(?,?,?,?,strfti
4dc0: 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 2c 3f me('%s','now'),?
4dd0: 2c 3f 29 3b 22 0a 09 09 09 74 65 73 74 2d 69 64 ,?);"....test-id
4de0: 20 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 teststep-name s
4df0: 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 tate-in status-i
4e00: 6e 20 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 6f n (if comment co
4e10: 6d 6d 65 6e 74 20 22 22 29 20 28 69 66 20 6c 6f mment "") (if lo
4e20: 67 66 69 6c 65 20 6c 6f 67 66 69 6c 65 20 22 22 gfile logfile ""
4e30: 29 29 0a 09 20 20 23 74 29 20 3b 3b 20 66 61 6b )).. #t) ;; fak
4e40: 65 20 6f 75 74 20 61 20 23 74 20 2d 20 63 6f 75 e out a #t - cou
4e50: 6c 64 20 62 65 20 65 78 65 63 75 74 65 20 69 73 ld be execute is
4e60: 20 72 65 74 75 72 6e 69 6e 67 20 73 6f 6d 65 74 returning somet
4e70: 68 69 6e 67 20 63 6f 6d 70 6c 69 63 61 74 65 64 hing complicated
4e80: 0a 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 ..(debug:print 0
4e90: 20 22 45 52 52 4f 52 3a 20 43 61 6e 27 74 20 75 "ERROR: Can't u
4ea0: 70 64 61 74 65 20 22 20 74 65 73 74 2d 6e 61 6d pdate " test-nam
4eb0: 65 20 22 20 66 6f 72 20 72 75 6e 20 22 20 72 75 e " for run " ru
4ec0: 6e 2d 69 64 20 22 20 2d 3e 20 6e 6f 20 73 75 63 n-id " -> no suc
4ed0: 68 20 74 65 73 74 20 69 6e 20 64 62 22 29 29 29 h test in db")))
4ee0: 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a )...(define (db:
4ef0: 64 65 6c 65 74 65 2d 74 65 73 74 73 2d 69 6e 2d delete-tests-in-
4f00: 73 74 61 74 65 20 64 62 20 72 75 6e 2d 69 64 20 state db run-id
4f10: 73 74 61 74 65 29 0a 20 20 28 73 71 6c 69 74 65 state). (sqlite
4f20: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 45 3:execute db "DE
4f30: 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 73 20 LETE FROM tests
4f40: 57 48 45 52 45 20 73 74 61 74 65 3d 3f 20 41 4e WHERE state=? AN
4f50: 44 20 72 75 6e 5f 69 64 3d 3f 3b 22 20 73 74 61 D run_id=?;" sta
4f60: 74 65 20 72 75 6e 2d 69 64 29 29 0a 0a 28 64 65 te run-id))..(de
4f70: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 fine (db:test-se
4f80: 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d 62 t-state-status-b
4f90: 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 20 y-id db test-id
4fa0: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
4fb0: 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 us newcomment).
4fc0: 20 28 69 66 20 6e 65 77 73 74 61 74 65 20 20 20 (if newstate
4fd0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
4fe0: 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 db "UPDATE test
4ff0: 73 20 53 45 54 20 73 74 61 74 65 3d 3f 20 20 20 s SET state=?
5000: 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 WHERE id=?;" new
5010: 73 74 61 74 65 20 20 20 74 65 73 74 2d 69 64 29 state test-id)
5020: 29 0a 20 20 28 69 66 20 6e 65 77 73 74 61 74 75 ). (if newstatu
5030: 73 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 s (sqlite3:exec
5040: 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 ute db "UPDATE t
5050: 65 73 74 73 20 53 45 54 20 73 74 61 74 75 73 3d ests SET status=
5060: 3f 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 ? WHERE id=?;"
5070: 6e 65 77 73 74 61 74 75 73 20 20 74 65 73 74 2d newstatus test-
5080: 69 64 29 29 0a 20 20 28 69 66 20 6e 65 77 63 6f id)). (if newco
5090: 6d 6d 65 6e 74 20 28 73 71 6c 69 74 65 33 3a 65 mment (sqlite3:e
50a0: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54 xecute db "UPDAT
50b0: 45 20 74 65 73 74 73 20 53 45 54 20 63 6f 6d 6d E tests SET comm
50c0: 65 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f ent=? WHERE id=?
50d0: 3b 22 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 74 65 ;" newcomment te
50e0: 73 74 2d 69 64 29 29 29 0a 0a 28 64 65 66 69 6e st-id)))..(defin
50f0: 65 20 28 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d e (db:get-count-
5100: 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 20 64 62 tests-running db
5110: 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 ). (let ((res 0
5120: 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a )). (sqlite3:
5130: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 for-each-row.
5140: 20 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 (lambda (count
5150: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
5160: 65 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 20 es count)).
5170: 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 db. "SELECT
5180: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
5190: 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 ests WHERE state
51a0: 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 20 = 'RUNNING' OR
51b0: 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 45 state = 'LAUNCHE
51c0: 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 52 D' OR state = 'R
51d0: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 3b EMOTEHOSTSTART';
51e0: 22 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 28 64 "). res))..(d
51f0: 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 63 6f efine (db:get-co
5200: 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e 69 6e unt-tests-runnin
5210: 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 64 62 g-in-jobgroup db
5220: 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 28 69 66 jobgroup). (if
5230: 20 28 6e 6f 74 20 6a 6f 62 67 72 6f 75 70 29 0a (not jobgroup).
5240: 20 20 20 20 20 20 30 20 3b 3b 20 0a 20 20 20 20 0 ;; .
5250: 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 29 29 (let ((res 0))
5260: 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 ..(sqlite3:for-e
5270: 61 63 68 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 64 ach-row.. (lambd
5280: 61 20 28 63 6f 75 6e 74 29 0a 09 20 20 20 28 73 a (count).. (s
5290: 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 0a et! res count)).
52a0: 09 20 64 62 0a 09 20 22 53 45 4c 45 43 54 20 63 . db.. "SELECT c
52b0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
52c0: 73 74 73 20 57 48 45 52 45 20 73 74 61 74 65 20 sts WHERE state
52d0: 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 20 73 = 'RUNNING' OR s
52e0: 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 45 44 tate = 'LAUNCHED
52f0: 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 52 45 ' OR state = 'RE
5300: 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 0a 20 MOTEHOSTSTART'.
5310: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
5320: 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 45 4c testname in (SEL
5330: 45 43 54 20 74 65 73 74 6e 61 6d 65 20 46 52 4f ECT testname FRO
5340: 4d 20 74 65 73 74 5f 6d 65 74 61 20 57 48 45 52 M test_meta WHER
5350: 45 20 6a 6f 62 67 72 6f 75 70 3d 3f 3b 22 0a 09 E jobgroup=?;"..
5360: 20 6a 6f 62 67 72 6f 75 70 29 0a 09 72 65 73 29 jobgroup)..res)
5370: 29 29 0a 0a 3b 3b 20 64 6f 6e 65 20 77 69 74 68 ))..;; done with
5380: 20 72 75 6e 20 77 68 65 6e 3a 0a 3b 3b 20 20 20 run when:.;;
5390: 30 20 74 65 73 74 73 20 69 6e 20 4c 41 55 4e 43 0 tests in LAUNC
53a0: 48 45 44 2c 20 4e 4f 54 5f 53 54 41 52 54 45 44 HED, NOT_STARTED
53b0: 2c 20 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 , REMOTEHOSTSTAR
53c0: 54 2c 20 52 55 4e 4e 49 4e 47 0a 28 64 65 66 69 T, RUNNING.(defi
53d0: 6e 65 20 28 64 62 3a 65 73 74 69 6d 61 74 65 64 ne (db:estimated
53e0: 2d 74 65 73 74 73 2d 72 65 6d 61 69 6e 69 6e 67 -tests-remaining
53f0: 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 6c db run-id). (l
5400: 65 74 20 28 28 72 65 73 20 30 29 29 0a 20 20 20 et ((res 0)).
5410: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
5420: 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d ch-row. (lam
5430: 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 20 20 bda (count).
5440: 20 20 20 28 73 65 74 21 20 72 65 73 20 63 6f 75 (set! res cou
5450: 6e 74 29 29 0a 20 20 20 20 20 64 62 20 3b 3b 20 nt)). db ;;
5460: 4e 42 2f 2f 20 4b 49 4c 4c 52 45 51 20 6d 65 61 NB// KILLREQ mea
5470: 6e 73 20 74 68 65 20 6a 6f 62 73 20 69 73 20 73 ns the jobs is s
5480: 74 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 72 75 till probably ru
5490: 6e 6e 69 6e 67 0a 20 20 20 20 20 22 53 45 4c 45 nning. "SELE
54a0: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
54b0: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 73 74 M tests WHERE st
54c0: 61 74 65 20 69 6e 20 28 27 4c 41 55 4e 43 48 45 ate in ('LAUNCHE
54d0: 44 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 D','NOT_STARTED'
54e0: 2c 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 ,'REMOTEHOSTSTAR
54f0: 54 27 2c 27 52 55 4e 4e 49 4e 47 27 2c 27 4b 49 T','RUNNING','KI
5500: 4c 4c 52 45 51 27 29 20 41 4e 44 20 72 75 6e 5f LLREQ') AND run_
5510: 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 0a 20 id=?;" run-id).
5520: 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 4e 42 2f res))..;; NB/
5530: 2f 20 53 79 6e 63 20 74 68 69 73 20 77 69 74 68 / Sync this with
5540: 20 72 75 6e 73 3a 67 65 74 2d 74 65 73 74 2d 69 runs:get-test-i
5550: 6e 66 6f 0a 28 64 65 66 69 6e 65 20 28 64 62 3a nfo.(define (db:
5560: 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 get-test-info db
5570: 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 run-id testname
5580: 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 6c item-path). (l
5590: 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 20 et ((res #f)).
55a0: 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 (sqlite3:for-e
55b0: 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 ach-row. (la
55c0: 6d 62 64 61 20 28 69 64 20 72 75 6e 2d 69 64 20 mbda (id run-id
55d0: 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 testname state s
55e0: 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 tatus event-time
55f0: 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 host cpuload di
5600: 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e skfree uname run
5610: 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 dir item-path ru
5620: 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c n_duration final
5630: 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 0a _logf comment ).
5640: 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 (set! res
5650: 20 28 76 65 63 74 6f 72 20 69 64 20 72 75 6e 2d (vector id run-
5660: 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 74 id testname stat
5670: 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 e status event-t
5680: 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 ime host cpuload
5690: 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 diskfree uname
56a0: 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 68 rundir item-path
56b0: 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 run_duration fi
56c0: 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 nal_logf comment
56d0: 20 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 ))). db .
56e0: 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 72 75 "SELECT id,ru
56f0: 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 74 n_id,testname,st
5700: 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 ate,status,event
5710: 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c 6f _time,host,cpulo
5720: 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d ad,diskfree,unam
5730: 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 61 e,rundir,item_pa
5740: 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c th,run_duration,
5750: 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 final_logf,comme
5760: 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 nt FROM tests WH
5770: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 ERE run_id=? AND
5780: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 testname=? AND
5790: 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 item_path=?;".
57a0: 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 run-id testna
57b0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 me item-path).
57c0: 20 20 72 65 73 29 29 0a 0a 3b 3b 20 47 65 74 20 res))..;; Get
57d0: 74 65 73 74 20 64 61 74 61 20 75 73 69 6e 67 20 test data using
57e0: 74 65 73 74 5f 69 64 0a 28 64 65 66 69 6e 65 20 test_id.(define
57f0: 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 64 61 74 (db:get-test-dat
5800: 61 2d 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d a-by-id db test-
5810: 69 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 id). (let ((res
5820: 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 74 #f)). (sqlit
5830: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a e3:for-each-row.
5840: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 (lambda (id
5850: 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 run-id testname
5860: 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 state status ev
5870: 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 ent-time host cp
5880: 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 uload diskfree u
5890: 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d name rundir item
58a0: 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 -path run_durati
58b0: 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f on final_logf co
58c0: 6d 6d 65 6e 74 29 0a 20 20 20 20 20 20 20 28 73 mment). (s
58d0: 65 74 21 20 72 65 73 20 28 76 65 63 74 6f 72 20 et! res (vector
58e0: 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 id run-id testna
58f0: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
5900: 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 event-time host
5910: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
5920: 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 uname rundir it
5930: 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 em-path run_dura
5940: 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 tion final_logf
5950: 63 6f 6d 6d 65 6e 74 29 29 29 0a 20 20 20 20 20 comment))).
5960: 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 db . "SELECT
5970: 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 6e id,run_id,testn
5980: 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 ame,state,status
5990: 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 74 ,event_time,host
59a0: 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 ,cpuload,diskfre
59b0: 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 69 e,uname,rundir,i
59c0: 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 72 tem_path,run_dur
59d0: 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 ation,final_logf
59e0: 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 ,comment FROM te
59f0: 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 sts WHERE id=?;"
5a00: 0a 20 20 20 20 20 74 65 73 74 2d 69 64 29 0a 20 . test-id).
5a10: 20 20 20 72 65 73 29 29 0a 0a 0a 28 64 65 66 69 res))...(defi
5a20: 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d ne (db:test-set-
5a30: 63 6f 6d 6d 65 6e 74 20 64 62 20 72 75 6e 2d 69 comment db run-i
5a40: 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d d testname item-
5a50: 70 61 74 68 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 path comment).
5a60: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
5a70: 20 0a 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 . db . "UPD
5a80: 41 54 45 20 74 65 73 74 73 20 53 45 54 20 63 6f ATE tests SET co
5a90: 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20 72 75 mment=? WHERE ru
5aa0: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
5ab0: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
5ac0: 61 74 68 3d 3f 3b 22 0a 20 20 20 63 6f 6d 6d 65 ath=?;". comme
5ad0: 6e 74 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 nt run-id testna
5ae0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a me item-path))..
5af0: 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 ;;.(define (db:t
5b00: 65 73 74 2d 73 65 74 2d 72 75 6e 64 69 72 21 20 est-set-rundir!
5b10: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 db run-id testna
5b20: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e me item-path run
5b30: 64 69 72 29 0a 20 20 28 73 71 6c 69 74 65 33 3a dir). (sqlite3:
5b40: 65 78 65 63 75 74 65 20 0a 20 20 20 64 62 20 0a execute . db .
5b50: 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 73 "UPDATE tests
5b60: 20 53 45 54 20 72 75 6e 64 69 72 3d 3f 20 57 48 SET rundir=? WH
5b70: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 ERE run_id=? AND
5b80: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 testname=? AND
5b90: 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 20 item_path=?;".
5ba0: 20 72 75 6e 64 69 72 20 72 75 6e 2d 69 64 20 74 rundir run-id t
5bb0: 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 estname item-pat
5bc0: 68 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d h))..;;=========
5bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
5c10: 20 4d 69 73 63 2e 20 74 65 73 74 20 72 65 6c 61 Misc. test rela
5c20: 74 65 64 20 71 75 65 72 69 65 73 0a 3b 3b 3d 3d ted queries.;;==
5c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c70: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 64 ====..(define (d
5c80: 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 b:test-get-paths
5c90: 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 -matching db key
5ca0: 6e 61 6d 65 73 20 74 61 72 67 65 74 29 0a 20 20 names target).
5cb0: 28 6c 65 74 2a 20 28 28 72 65 73 20 27 28 29 29 (let* ((res '())
5cc0: 0a 09 20 28 69 74 65 6d 70 61 74 74 20 20 20 28 .. (itempatt (
5cd0: 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 if (args:get-arg
5ce0: 20 22 2d 69 74 65 6d 70 61 74 74 22 29 28 61 72 "-itempatt")(ar
5cf0: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 69 74 65 gs:get-arg "-ite
5d00: 6d 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 20 mpatt") "%"))..
5d10: 28 74 65 73 74 70 61 74 74 20 20 20 28 69 66 20 (testpatt (if
5d20: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "-
5d30: 74 65 73 74 70 61 74 74 22 29 28 61 72 67 73 3a testpatt")(args:
5d40: 67 65 74 2d 61 72 67 20 22 2d 74 65 73 74 70 61 get-arg "-testpa
5d50: 74 74 22 29 20 22 25 22 29 29 0a 09 20 28 73 74 tt") "%")).. (st
5d60: 61 74 65 70 61 74 74 20 20 28 69 66 20 28 61 72 atepatt (if (ar
5d70: 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 gs:get-arg ":sta
5d80: 74 65 22 29 20 20 20 28 61 72 67 73 3a 67 65 74 te") (args:get
5d90: 2d 61 72 67 20 22 3a 73 74 61 74 65 22 29 20 20 -arg ":state")
5da0: 20 20 22 25 22 29 29 0a 09 20 28 73 74 61 74 75 "%")).. (statu
5db0: 73 70 61 74 74 20 28 69 66 20 28 61 72 67 73 3a spatt (if (args:
5dc0: 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 get-arg ":status
5dd0: 22 29 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 ") (args:get-ar
5de0: 67 20 22 3a 73 74 61 74 75 73 22 29 20 20 20 22 g ":status") "
5df0: 25 22 29 29 0a 09 20 28 72 75 6e 6e 61 6d 65 20 %")).. (runname
5e00: 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 (if (args:get
5e10: 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 -arg ":runname")
5e20: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
5e30: 3a 72 75 6e 6e 61 6d 65 22 29 20 20 22 25 22 29 :runname") "%")
5e40: 29 0a 09 20 28 6b 65 79 73 74 72 20 28 73 74 72 ).. (keystr (str
5e50: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 ing-intersperse
5e60: 0a 09 09 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 ... (map (lambd
5e70: 61 20 28 6b 65 79 20 76 61 6c 29 0a 09 09 09 20 a (key val)....
5e80: 28 63 6f 6e 63 20 22 72 2e 22 20 6b 65 79 20 22 (conc "r." key "
5e90: 20 6c 69 6b 65 20 27 22 20 76 61 6c 20 22 27 22 like '" val "'"
5ea0: 29 29 0a 09 09 20 20 20 20 20 20 20 6b 65 79 6e ))... keyn
5eb0: 61 6d 65 73 20 0a 09 09 20 20 20 20 20 20 20 28 ames ... (
5ec0: 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 74 61 72 string-split tar
5ed0: 67 65 74 20 22 2f 22 29 29 0a 09 09 20 20 22 20 get "/"))... "
5ee0: 41 4e 44 20 22 29 29 0a 09 20 28 71 72 79 73 74 AND ")).. (qryst
5ef0: 72 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 r (conc "SELECT
5f00: 74 2e 72 75 6e 64 69 72 20 46 52 4f 4d 20 74 65 t.rundir FROM te
5f10: 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a sts AS t INNER J
5f20: 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e OIN runs AS r ON
5f30: 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 t.run_id=r.id W
5f40: 48 45 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 HERE "...
5f50: 6b 65 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 keystr " AND r.r
5f60: 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 unname LIKE '" r
5f70: 75 6e 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 74 unname "' AND it
5f80: 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 20 em_path LIKE '"
5f90: 69 74 65 6d 70 61 74 74 20 22 27 20 41 4e 44 20 itempatt "' AND
5fa0: 74 65 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 22 testname LIKE '"
5fb0: 0a 09 09 20 20 20 20 20 20 20 74 65 73 74 70 61 ... testpa
5fc0: 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 tt "' AND t.stat
5fd0: 65 20 4c 49 4b 45 20 27 22 20 73 74 61 74 65 70 e LIKE '" statep
5fe0: 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 att "' AND t.sta
5ff0: 74 75 73 20 4c 49 4b 45 20 27 22 20 73 74 61 74 tus LIKE '" stat
6000: 75 73 70 61 74 74 20 0a 09 09 20 20 20 20 20 20 uspatt ...
6010: 20 22 27 4f 52 44 45 52 20 42 59 20 74 2e 65 76 "'ORDER BY t.ev
6020: 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 ent_time ASC;"))
6030: 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 ). (debug:pri
6040: 6e 74 20 33 20 22 71 72 79 73 74 72 3a 20 22 20 nt 3 "qrystr: "
6050: 71 72 79 73 74 72 29 0a 20 20 20 20 28 73 71 6c qrystr). (sql
6060: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
6070: 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 w . (lambda
6080: 28 70 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 (p). (set!
6090: 20 72 65 73 20 28 63 6f 6e 73 20 70 20 72 65 73 res (cons p res
60a0: 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 ))). db .
60b0: 20 20 71 72 79 73 74 72 29 0a 20 20 20 20 72 65 qrystr). re
60c0: 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 s))..(define (db
60d0: 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 2d 72 :test-get-test-r
60e0: 65 63 6f 72 64 73 2d 6d 61 74 63 68 69 6e 67 20 ecords-matching
60f0: 64 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 db keynames targ
6100: 65 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 et). (let* ((re
6110: 73 20 27 28 29 29 0a 09 20 28 69 74 65 6d 70 61 s '()).. (itempa
6120: 74 74 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 tt (if (args:g
6130: 65 74 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 74 et-arg "-itempat
6140: 74 22 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 t")(args:get-arg
6150: 20 22 2d 69 74 65 6d 70 61 74 74 22 29 20 22 25 "-itempatt") "%
6160: 22 29 29 0a 09 20 28 74 65 73 74 70 61 74 74 20 ")).. (testpatt
6170: 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d (if (args:get-
6180: 61 72 67 20 22 2d 74 65 73 74 70 61 74 74 22 29 arg "-testpatt")
6190: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "-
61a0: 74 65 73 74 70 61 74 74 22 29 20 22 25 22 29 29 testpatt") "%"))
61b0: 0a 09 20 28 73 74 61 74 65 70 61 74 74 20 20 28 .. (statepatt (
61c0: 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 if (args:get-arg
61d0: 20 22 3a 73 74 61 74 65 22 29 20 20 20 28 61 72 ":state") (ar
61e0: 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 gs:get-arg ":sta
61f0: 74 65 22 29 20 20 20 20 22 25 22 29 29 0a 09 20 te") "%"))..
6200: 28 73 74 61 74 75 73 70 61 74 74 20 28 69 66 20 (statuspatt (if
6210: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a (args:get-arg ":
6220: 73 74 61 74 75 73 22 29 20 20 28 61 72 67 73 3a status") (args:
6230: 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 get-arg ":status
6240: 22 29 20 20 20 22 25 22 29 29 0a 09 20 28 72 75 ") "%")).. (ru
6250: 6e 6e 61 6d 65 20 20 20 20 28 69 66 20 28 61 72 nname (if (ar
6260: 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e gs:get-arg ":run
6270: 6e 61 6d 65 22 29 20 28 61 72 67 73 3a 67 65 74 name") (args:get
6280: 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 -arg ":runname")
6290: 20 20 22 25 22 29 29 0a 09 20 28 6b 65 79 73 74 "%")).. (keyst
62a0: 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 r (string-inters
62b0: 70 65 72 73 65 20 0a 09 09 20 20 28 6d 61 70 20 perse ... (map
62c0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 76 61 6c (lambda (key val
62d0: 29 0a 09 09 09 20 28 63 6f 6e 63 20 22 72 2e 22 ).... (conc "r."
62e0: 20 6b 65 79 20 22 20 6c 69 6b 65 20 27 22 20 76 key " like '" v
62f0: 61 6c 20 22 27 22 29 29 0a 09 09 20 20 20 20 20 al "'"))...
6300: 20 20 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 20 keynames ...
6310: 20 20 20 20 20 28 73 74 72 69 6e 67 2d 73 70 6c (string-spl
6320: 69 74 20 74 61 72 67 65 74 20 22 2f 22 29 29 0a it target "/")).
6330: 09 09 20 20 22 20 41 4e 44 20 22 29 29 0a 09 20 .. " AND "))..
6340: 28 71 72 79 73 74 72 20 28 63 6f 6e 63 20 22 53 (qrystr (conc "S
6350: 45 4c 45 43 54 20 0a 20 20 20 20 20 20 20 20 20 ELECT .
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6370: 20 20 20 74 2e 69 64 0a 20 20 20 20 20 20 20 20 t.id.
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6390: 20 20 20 20 74 2e 72 75 6e 5f 69 64 20 20 20 20 t.run_id
63a0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
63c0: 74 65 73 74 6e 61 6d 65 20 20 20 0a 20 20 20 20 testname .
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63e0: 20 20 20 20 20 20 20 20 74 2e 68 6f 73 74 20 20 t.host
63f0: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 .
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6410: 20 20 74 2e 63 70 75 6c 6f 61 64 20 20 20 20 0a t.cpuload .
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6430: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 64 69 t.di
6440: 73 6b 66 72 65 65 20 20 20 0a 20 20 20 20 20 20 skfree .
6450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6460: 20 20 20 20 20 20 74 2e 75 6e 61 6d 65 20 20 20 t.uname
6470: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6490: 74 2e 72 75 6e 64 69 72 20 20 20 20 20 0a 20 20 t.rundir .
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64b0: 20 20 20 20 20 20 20 20 20 20 74 2e 73 68 6f 72 t.shor
64c0: 74 64 69 72 20 20 20 0a 20 20 20 20 20 20 20 20 tdir .
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64e0: 20 20 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 20 t.item_path
64f0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
6510: 73 74 61 74 65 20 20 20 20 20 20 0a 20 20 20 20 state .
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6530: 20 20 20 20 20 20 20 20 74 2e 73 74 61 74 75 73 t.status
6540: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 .
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6560: 20 20 74 2e 61 74 74 65 6d 70 74 6e 75 6d 20 0a t.attemptnum .
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6580: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 66 69 t.fi
6590: 6e 61 6c 5f 6c 6f 67 66 20 0a 20 20 20 20 20 20 nal_logf .
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65b0: 20 20 20 20 20 20 74 2e 6c 6f 67 64 61 74 20 20 t.logdat
65c0: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65e0: 74 2e 72 75 6e 5f 64 75 72 61 74 69 6f 0a 20 20 t.run_duratio.
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6600: 20 20 20 20 20 20 20 20 20 20 74 2e 63 6f 6d 6d t.comm
6610: 65 6e 74 20 20 20 20 0a 20 20 20 20 20 20 20 20 ent .
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6630: 20 20 20 20 74 2e 65 76 65 6e 74 5f 74 69 6d 65 t.event_time
6640: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
6660: 66 61 69 6c 5f 63 6f 75 6e 74 20 0a 20 20 20 20 fail_count .
6670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6680: 20 20 20 20 20 20 20 20 74 2e 70 61 73 73 5f 63 t.pass_c
6690: 6f 75 6e 74 20 0a 20 20 20 20 20 20 20 20 20 20 ount .
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
66b0: 20 20 74 2e 61 72 63 68 69 76 65 64 20 20 20 0a t.archived .
66c0: 0a 0a 0a 20 46 52 4f 4d 20 74 65 73 74 73 20 41 ... FROM tests A
66d0: 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 S t INNER JOIN r
66e0: 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 uns AS r ON t.ru
66f0: 6e 5f 69 64 3d 72 2e 69 64 20 57 48 45 52 45 20 n_id=r.id WHERE
6700: 22 0a 09 09 20 20 20 20 20 20 20 6b 65 79 73 74 "... keyst
6710: 72 20 22 20 41 4e 44 20 72 2e 72 75 6e 6e 61 6d r " AND r.runnam
6720: 65 20 4c 49 4b 45 20 27 22 20 72 75 6e 6e 61 6d e LIKE '" runnam
6730: 65 20 22 27 20 41 4e 44 20 69 74 65 6d 5f 70 61 e "' AND item_pa
6740: 74 68 20 4c 49 4b 45 20 27 22 20 69 74 65 6d 70 th LIKE '" itemp
6750: 61 74 74 20 22 27 20 41 4e 44 20 74 65 73 74 6e att "' AND testn
6760: 61 6d 65 20 4c 49 4b 45 20 27 22 0a 09 09 20 20 ame LIKE '"...
6770: 20 20 20 20 20 74 65 73 74 70 61 74 74 20 22 27 testpatt "'
6780: 20 41 4e 44 20 74 2e 73 74 61 74 65 20 4c 49 4b AND t.state LIK
6790: 45 20 27 22 20 73 74 61 74 65 70 61 74 74 20 22 E '" statepatt "
67a0: 27 20 41 4e 44 20 74 2e 73 74 61 74 75 73 20 4c ' AND t.status L
67b0: 49 4b 45 20 27 22 20 73 74 61 74 75 73 70 61 74 IKE '" statuspat
67c0: 74 20 0a 09 09 20 20 20 20 20 20 20 22 27 4f 52 t ... "'OR
67d0: 44 45 52 20 42 59 20 74 2e 65 76 65 6e 74 5f 74 DER BY t.event_t
67e0: 69 6d 65 20 41 53 43 3b 22 29 29 29 0a 20 20 20 ime ASC;"))).
67f0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 33 20 (debug:print 3
6800: 22 71 72 79 73 74 72 3a 20 22 20 71 72 79 73 74 "qrystr: " qryst
6810: 72 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a r). (sqlite3:
6820: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 for-each-row .
6830: 20 20 20 28 6c 61 6d 62 64 61 20 28 70 29 0a 20 (lambda (p).
6840: 20 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 (set! res
6850: 28 63 6f 6e 73 20 70 20 72 65 73 29 29 29 0a 20 (cons p res))).
6860: 20 20 20 20 64 62 20 0a 20 20 20 20 20 71 72 79 db . qry
6870: 73 74 72 29 0a 20 20 20 20 72 65 73 29 29 0a 0a str). res))..
6880: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
6890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 65 73 =========.;; Tes
68d0: 74 73 20 6d 65 74 61 20 64 61 74 61 0a 3b 3b 3d ts meta data.;;=
68e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
68f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6920: 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 61 64 20 74 =====..;; read t
6930: 68 65 20 72 65 63 6f 72 64 20 67 69 76 65 6e 20 he record given
6940: 61 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 a testname.(defi
6950: 6e 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d ne (db:testmeta-
6960: 67 65 74 2d 72 65 63 6f 72 64 20 64 62 20 74 65 get-record db te
6970: 73 74 6e 61 6d 65 29 0a 20 20 28 6c 65 74 20 28 stname). (let (
6980: 28 72 65 73 20 23 66 29 29 0a 20 20 20 20 28 73 (res #f)). (s
6990: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
69a0: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
69b0: 20 28 69 64 20 74 65 73 74 6e 61 6d 65 20 61 75 (id testname au
69c0: 74 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 72 thor owner descr
69d0: 69 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 20 iption reviewed
69e0: 69 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 6e iterated avg_run
69f0: 74 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 61 time avg_disk ta
6a00: 67 73 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 gs). (set!
6a10: 20 72 65 73 20 28 76 65 63 74 6f 72 20 69 64 20 res (vector id
6a20: 74 65 73 74 6e 61 6d 65 20 61 75 74 68 6f 72 20 testname author
6a30: 6f 77 6e 65 72 20 64 65 73 63 72 69 70 74 69 6f owner descriptio
6a40: 6e 20 72 65 76 69 65 77 65 64 20 69 74 65 72 61 n reviewed itera
6a50: 74 65 64 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 ted avg_runtime
6a60: 61 76 67 5f 64 69 73 6b 20 74 61 67 73 29 29 29 avg_disk tags)))
6a70: 0a 20 20 20 20 20 64 62 20 22 53 45 4c 45 43 54 . db "SELECT
6a80: 20 69 64 2c 74 65 73 74 6e 61 6d 65 2c 61 75 74 id,testname,aut
6a90: 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 69 hor,owner,descri
6aa0: 70 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c 69 ption,reviewed,i
6ab0: 74 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e 74 terated,avg_runt
6ac0: 69 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 67 ime,avg_disk,tag
6ad0: 73 20 46 52 4f 4d 20 74 65 73 74 5f 6d 65 74 61 s FROM test_meta
6ae0: 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 3d WHERE testname=
6af0: 3f 3b 22 0a 20 20 20 20 20 74 65 73 74 6e 61 6d ?;". testnam
6b00: 65 29 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b e). res))..;;
6b10: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 72 65 create a new re
6b20: 63 6f 72 64 20 66 6f 72 20 61 20 67 69 76 65 6e cord for a given
6b30: 20 74 65 73 74 6e 61 6d 65 0a 28 64 65 66 69 6e testname.(defin
6b40: 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 61 e (db:testmeta-a
6b50: 64 64 2d 72 65 63 6f 72 64 20 64 62 20 74 65 73 dd-record db tes
6b60: 74 6e 61 6d 65 29 0a 20 20 28 73 71 6c 69 74 65 tname). (sqlite
6b70: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 3:execute db "IN
6b80: 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 SERT OR IGNORE I
6b90: 4e 54 4f 20 74 65 73 74 5f 6d 65 74 61 20 28 74 NTO test_meta (t
6ba0: 65 73 74 6e 61 6d 65 2c 61 75 74 68 6f 72 2c 6f estname,author,o
6bb0: 77 6e 65 72 2c 64 65 73 63 72 69 70 74 69 6f 6e wner,description
6bc0: 2c 72 65 76 69 65 77 65 64 2c 69 74 65 72 61 74 ,reviewed,iterat
6bd0: 65 64 2c 61 76 67 5f 72 75 6e 74 69 6d 65 2c 61 ed,avg_runtime,a
6be0: 76 67 5f 64 69 73 6b 2c 74 61 67 73 29 20 56 41 vg_disk,tags) VA
6bf0: 4c 55 45 53 20 28 3f 2c 27 27 2c 27 27 2c 27 27 LUES (?,'','',''
6c00: 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 29 ,'','','','','')
6c10: 3b 22 20 74 65 73 74 6e 61 6d 65 29 29 0a 0a 3b ;" testname))..;
6c20: 3b 20 75 70 64 61 74 65 20 6f 6e 65 20 6f 66 20 ; update one of
6c30: 74 68 65 20 74 65 73 74 6d 65 74 61 20 66 69 65 the testmeta fie
6c40: 6c 64 73 0a 28 64 65 66 69 6e 65 20 28 64 62 3a lds.(define (db:
6c50: 74 65 73 74 6d 65 74 61 2d 75 70 64 61 74 65 2d testmeta-update-
6c60: 66 69 65 6c 64 20 64 62 20 74 65 73 74 6e 61 6d field db testnam
6c70: 65 20 66 69 65 6c 64 20 76 61 6c 75 65 29 0a 20 e field value).
6c80: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
6c90: 65 20 64 62 20 28 63 6f 6e 63 20 22 55 50 44 41 e db (conc "UPDA
6ca0: 54 45 20 74 65 73 74 5f 6d 65 74 61 20 53 45 54 TE test_meta SET
6cb0: 20 22 20 66 69 65 6c 64 20 22 3d 3f 20 57 48 45 " field "=? WHE
6cc0: 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 3b 22 29 RE testname=?;")
6cd0: 20 76 61 6c 75 65 20 74 65 73 74 6e 61 6d 65 29 value testname)
6ce0: 29 0a 0a 3b 3b 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 3d 3d 3d ================
6d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 ===========.;; T
6d30: 20 45 20 53 20 54 20 20 20 44 20 41 20 54 20 41 E S T D A T A
6d40: 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;============
6d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 ==========..(def
6d90: 69 6e 65 20 28 64 62 3a 63 73 76 2d 3e 74 65 73 ine (db:csv->tes
6da0: 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d 69 t-data db test-i
6db0: 64 20 63 73 76 64 61 74 61 29 0a 20 20 28 64 65 d csvdata). (de
6dc0: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 74 65 73 bug:print 4 "tes
6dd0: 74 2d 69 64 20 22 20 74 65 73 74 2d 69 64 20 22 t-id " test-id "
6de0: 2c 20 63 73 76 64 61 74 61 3a 20 22 20 63 73 76 , csvdata: " csv
6df0: 64 61 74 61 29 0a 20 20 28 6c 65 74 20 28 28 63 data). (let ((c
6e00: 73 76 6c 69 73 74 20 28 63 73 76 2d 3e 6c 69 73 svlist (csv->lis
6e10: 74 20 28 6d 61 6b 65 2d 63 73 76 2d 72 65 61 64 t (make-csv-read
6e20: 65 72 0a 09 09 09 20 20 20 20 20 28 6f 70 65 6e er.... (open
6e30: 2d 69 6e 70 75 74 2d 73 74 72 69 6e 67 20 63 73 -input-string cs
6e40: 76 64 61 74 61 29 0a 09 09 09 20 20 20 20 20 27 vdata).... '
6e50: 28 28 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 2d ((strip-leading-
6e60: 77 68 69 74 65 73 70 61 63 65 3f 20 23 74 29 0a whitespace? #t).
6e70: 09 09 09 20 20 20 20 20 20 20 28 73 74 72 69 70 ... (strip
6e80: 2d 74 72 61 69 6c 69 6e 67 2d 77 68 69 74 65 73 -trailing-whites
6e90: 70 61 63 65 3f 20 23 74 29 29 20 29 29 29 29 20 pace? #t)) ))))
6ea0: 3b 3b 20 28 63 73 76 2d 3e 6c 69 73 74 20 63 73 ;; (csv->list cs
6eb0: 76 64 61 74 61 29 29 29 0a 20 20 20 20 28 66 6f vdata))). (fo
6ec0: 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 6c 61 r-each . (la
6ed0: 6d 62 64 61 20 28 63 73 76 72 6f 77 29 0a 20 20 mbda (csvrow).
6ee0: 20 20 20 20 20 28 6c 65 74 2a 20 28 28 70 61 64 (let* ((pad
6ef0: 64 65 64 2d 72 6f 77 20 20 28 74 61 6b 65 20 28 ded-row (take (
6f00: 61 70 70 65 6e 64 20 63 73 76 72 6f 77 20 28 6c append csvrow (l
6f10: 69 73 74 20 23 66 20 23 66 20 23 66 20 23 66 20 ist #f #f #f #f
6f20: 23 66 20 23 66 20 23 66 20 23 66 20 23 66 29 29 #f #f #f #f #f))
6f30: 20 39 29 29 0a 09 20 20 20 20 20 20 28 63 61 74 9)).. (cat
6f40: 65 67 6f 72 79 20 20 20 20 28 6c 69 73 74 2d 72 egory (list-r
6f50: 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 30 29 ef padded-row 0)
6f60: 29 0a 09 20 20 20 20 20 20 28 76 61 72 69 61 62 ).. (variab
6f70: 6c 65 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 le (list-ref
6f80: 70 61 64 64 65 64 2d 72 6f 77 20 31 29 29 0a 09 padded-row 1))..
6f90: 20 20 20 20 20 20 28 76 61 6c 75 65 20 20 20 20 (value
6fa0: 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d (any->number-
6fb0: 69 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 if-possible (lis
6fc0: 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 t-ref padded-row
6fd0: 20 32 29 29 29 0a 09 20 20 20 20 20 20 28 65 78 2))).. (ex
6fe0: 70 65 63 74 65 64 20 20 20 20 28 61 6e 79 2d 3e pected (any->
6ff0: 6e 75 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 number-if-possib
7000: 6c 65 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 le (list-ref pad
7010: 64 65 64 2d 72 6f 77 20 33 29 29 29 0a 09 20 20 ded-row 3)))..
7020: 20 20 20 20 28 74 6f 6c 20 20 20 20 20 20 20 20 (tol
7030: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 (any->number-if
7040: 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d -possible (list-
7050: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 34 ref padded-row 4
7060: 29 29 29 20 3b 3b 20 3e 2c 20 3c 2c 20 3e 3d 2c ))) ;; >, <, >=,
7070: 20 3c 3d 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 <=, or a number
7080: 0a 09 20 20 20 20 20 20 28 75 6e 69 74 73 20 20 .. (units
7090: 20 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 (list-ref p
70a0: 61 64 64 65 64 2d 72 6f 77 20 35 29 29 0a 09 20 added-row 5))..
70b0: 20 20 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 20 (comment
70c0: 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 (list-ref padd
70d0: 65 64 2d 72 6f 77 20 36 29 29 0a 09 20 20 20 20 ed-row 6))..
70e0: 20 20 28 73 74 61 74 75 73 20 20 20 20 20 20 28 (status (
70f0: 6c 65 74 20 28 28 73 20 28 6c 69 73 74 2d 72 65 let ((s (list-re
7100: 66 20 70 61 64 64 65 64 2d 72 6f 77 20 37 29 29 f padded-row 7))
7110: 29 0a 09 09 09 20 20 20 20 20 28 69 66 20 28 61 ).... (if (a
7120: 6e 64 20 28 73 74 72 69 6e 67 3f 20 73 29 28 6f nd (string? s)(o
7130: 72 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 r (string-match
7140: 28 72 65 67 65 78 70 20 22 5e 5c 5c 73 2a 24 22 (regexp "^\\s*$"
7150: 29 20 73 29 0a 09 09 09 09 09 09 20 20 20 20 20 ) s).......
7160: 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 (string-match (r
7170: 65 67 65 78 70 20 22 5e 6e 2f 61 24 22 29 20 73 egexp "^n/a$") s
7180: 29 29 29 0a 09 09 09 09 20 23 66 0a 09 09 09 09 )))..... #f.....
7190: 20 73 29 29 29 20 3b 3b 20 69 66 20 73 70 65 63 s))) ;; if spec
71a0: 69 66 69 65 64 20 6f 6e 20 74 68 65 20 69 6e 70 ified on the inp
71b0: 75 74 20 74 68 65 6e 20 75 73 65 2c 20 65 6c 73 ut then use, els
71c0: 65 20 63 61 6c 63 75 6c 61 74 65 0a 09 20 20 20 e calculate..
71d0: 20 20 20 28 74 79 70 65 20 20 20 20 20 20 20 20 (type
71e0: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
71f0: 2d 72 6f 77 20 38 29 29 29 0a 09 20 3b 3b 20 6c -row 8))).. ;; l
7200: 6f 6f 6b 20 75 70 20 65 78 70 65 63 74 65 64 2c ook up expected,
7210: 74 6f 6c 2c 75 6e 69 74 73 20 66 72 6f 6d 20 70 tol,units from p
7220: 72 65 76 69 6f 75 73 20 62 65 73 74 20 66 69 74 revious best fit
7230: 20 74 65 73 74 20 69 66 20 74 68 65 79 20 61 72 test if they ar
7240: 65 20 61 6c 6c 20 65 69 74 68 65 72 20 23 66 20 e all either #f
7250: 6f 72 20 27 27 0a 09 20 28 64 65 62 75 67 3a 70 or ''.. (debug:p
7260: 72 69 6e 74 20 34 20 22 42 45 46 4f 52 45 3a 20 rint 4 "BEFORE:
7270: 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 65 category: " cate
7280: 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 3a gory " variable:
7290: 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 61 " variable " va
72a0: 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 09 lue: " value ...
72b0: 20 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 65 ", expecte
72c0: 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 20 d: " expected "
72d0: 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e 69 tol: " tol " uni
72e0: 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 74 ts: " units " st
72f0: 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 22 atus: " status "
7300: 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d comment: " comm
7310: 65 6e 74 20 22 20 74 79 70 65 3a 20 22 20 74 79 ent " type: " ty
7320: 70 65 29 0a 0a 09 20 28 69 66 20 28 61 6e 64 20 pe)... (if (and
7330: 28 6f 72 20 28 6e 6f 74 20 65 78 70 65 63 74 65 (or (not expecte
7340: 64 29 28 65 71 75 61 6c 3f 20 65 78 70 65 63 74 d)(equal? expect
7350: 65 64 20 22 22 29 29 0a 09 09 20 20 28 6f 72 20 ed ""))... (or
7360: 28 6e 6f 74 20 74 6f 6c 29 20 20 20 20 20 28 65 (not tol) (e
7370: 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 20 22 qual? expected "
7380: 22 29 29 0a 09 09 20 20 28 6f 72 20 28 6e 6f 74 "))... (or (not
7390: 20 75 6e 69 74 73 29 20 20 20 28 65 71 75 61 6c units) (equal
73a0: 3f 20 65 78 70 65 63 74 65 64 20 22 22 29 29 29 ? expected "")))
73b0: 0a 09 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 .. (let-valu
73c0: 65 73 20 28 28 28 6e 65 77 2d 65 78 70 65 63 74 es (((new-expect
73d0: 65 64 20 6e 65 77 2d 74 6f 6c 20 6e 65 77 2d 75 ed new-tol new-u
73e0: 6e 69 74 73 29 28 64 62 3a 67 65 74 2d 70 72 65 nits)(db:get-pre
73f0: 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 64 v-tol-for-test d
7400: 62 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f b test-id catego
7410: 72 79 20 76 61 72 69 61 62 6c 65 29 29 29 0a 09 ry variable)))..
7420: 09 09 20 28 73 65 74 21 20 65 78 70 65 63 74 65 .. (set! expecte
7430: 64 20 6e 65 77 2d 65 78 70 65 63 74 65 64 29 0a d new-expected).
7440: 09 09 09 20 28 73 65 74 21 20 74 6f 6c 20 20 20 ... (set! tol
7450: 20 20 20 6e 65 77 2d 74 6f 6c 29 0a 09 09 09 20 new-tol)....
7460: 28 73 65 74 21 20 75 6e 69 74 73 20 20 20 20 6e (set! units n
7470: 65 77 2d 75 6e 69 74 73 29 29 29 0a 0a 09 20 28 ew-units)))... (
7480: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 41 debug:print 4 "A
7490: 46 54 45 52 3a 20 20 63 61 74 65 67 6f 72 79 3a FTER: category:
74a0: 20 22 20 63 61 74 65 67 6f 72 79 20 22 20 76 61 " category " va
74b0: 72 69 61 62 6c 65 3a 20 22 20 76 61 72 69 61 62 riable: " variab
74c0: 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 20 76 61 le " value: " va
74d0: 6c 75 65 20 0a 09 09 20 20 20 20 20 20 22 2c 20 lue ... ",
74e0: 65 78 70 65 63 74 65 64 3a 20 22 20 65 78 70 65 expected: " expe
74f0: 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 74 6f cted " tol: " to
7500: 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 l " units: " uni
7510: 74 73 20 22 20 73 74 61 74 75 73 3a 20 22 20 73 ts " status: " s
7520: 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e 74 3a tatus " comment:
7530: 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 3b 3b " comment).. ;;
7540: 20 63 61 6c 63 75 6c 61 74 65 20 73 74 61 74 75 calculate statu
7550: 73 20 69 66 20 4e 4f 54 20 73 70 65 63 69 66 69 s if NOT specifi
7560: 65 64 0a 09 20 28 69 66 20 28 61 6e 64 20 28 6e ed.. (if (and (n
7570: 6f 74 20 73 74 61 74 75 73 29 28 6e 75 6d 62 65 ot status)(numbe
7580: 72 3f 20 65 78 70 65 63 74 65 64 29 28 6e 75 6d r? expected)(num
7590: 62 65 72 3f 20 76 61 6c 75 65 29 29 20 3b 3b 20 ber? value)) ;;
75a0: 6e 65 65 64 20 65 78 70 65 63 74 65 64 20 61 6e need expected an
75b0: 64 20 76 61 6c 75 65 20 74 6f 20 62 65 20 6e 75 d value to be nu
75c0: 6d 62 65 72 73 0a 09 20 20 20 20 20 28 69 66 20 mbers.. (if
75d0: 28 6e 75 6d 62 65 72 3f 20 74 6f 6c 29 20 3b 3b (number? tol) ;;
75e0: 20 69 66 20 74 6f 6c 20 69 73 20 61 20 6e 75 6d if tol is a num
75f0: 62 65 72 20 74 68 65 6e 20 77 65 20 64 6f 20 74 ber then we do t
7600: 68 65 20 73 74 61 6e 64 61 72 64 20 63 6f 6d 70 he standard comp
7610: 61 72 69 73 6f 6e 0a 09 09 20 28 6c 65 74 2a 20 arison... (let*
7620: 28 28 6d 61 78 2d 76 61 6c 20 28 2b 20 65 78 70 ((max-val (+ exp
7630: 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 28 ected tol))....(
7640: 6d 69 6e 2d 76 61 6c 20 28 2d 20 65 78 70 65 63 min-val (- expec
7650: 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 28 72 65 ted tol))....(re
7660: 73 75 6c 74 20 20 28 61 6e 64 20 28 3e 3d 20 20 sult (and (>=
7670: 76 61 6c 75 65 20 6d 69 6e 2d 76 61 6c 29 28 3c value min-val)(<
7680: 3d 20 76 61 6c 75 65 20 6d 61 78 2d 76 61 6c 29 = value max-val)
7690: 29 29 29 0a 09 09 20 20 20 28 64 65 62 75 67 3a )))... (debug:
76a0: 70 72 69 6e 74 20 34 20 22 6d 61 78 2d 76 61 6c print 4 "max-val
76b0: 3a 20 22 20 6d 61 78 2d 76 61 6c 20 22 20 6d 69 : " max-val " mi
76c0: 6e 2d 76 61 6c 3a 20 22 20 6d 69 6e 2d 76 61 6c n-val: " min-val
76d0: 20 22 20 72 65 73 75 6c 74 3a 20 22 20 72 65 73 " result: " res
76e0: 75 6c 74 29 0a 09 09 20 20 20 28 73 65 74 21 20 ult)... (set!
76f0: 73 74 61 74 75 73 20 28 69 66 20 72 65 73 75 6c status (if resul
7700: 74 20 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 t "pass" "fail")
7710: 29 29 0a 09 09 20 28 73 65 74 21 20 73 74 61 74 ))... (set! stat
7720: 75 73 20 3b 3b 20 4e 42 2f 2f 20 6e 65 65 64 20 us ;; NB// need
7730: 74 6f 20 61 73 73 65 73 73 20 65 61 63 68 20 6f to assess each o
7740: 6e 65 20 28 69 2e 65 2e 20 6e 6f 74 20 72 65 74 ne (i.e. not ret
7750: 75 72 6e 20 6f 70 65 72 61 74 6f 72 20 73 69 6e urn operator sin
7760: 63 65 20 6e 65 65 64 20 74 6f 20 61 63 74 20 69 ce need to act i
7770: 66 20 6e 6f 74 20 76 61 6c 69 64 20 6f 70 2e 0a f not valid op..
7780: 09 09 20 20 20 20 20 20 20 28 63 61 73 65 20 28 .. (case (
7790: 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 74 string->symbol t
77a0: 6f 6c 29 20 3b 3b 20 74 6f 6c 20 73 68 6f 75 6c ol) ;; tol shoul
77b0: 64 20 62 65 20 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c d be >, <, >=, <
77c0: 3d 0a 09 09 09 20 28 28 3e 29 20 20 28 69 66 20 =.... ((>) (if
77d0: 28 3e 20 20 76 61 6c 75 65 20 65 78 70 65 63 74 (> value expect
77e0: 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 6c ed) "pass" "fail
77f0: 22 29 29 0a 09 09 09 20 28 28 3c 29 20 20 28 69 ")).... ((<) (i
7800: 66 20 28 3c 20 20 76 61 6c 75 65 20 65 78 70 65 f (< value expe
7810: 63 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 cted) "pass" "fa
7820: 69 6c 22 29 29 0a 09 09 09 20 28 28 3e 3d 29 20 il")).... ((>=)
7830: 28 69 66 20 28 3e 3d 20 76 61 6c 75 65 20 65 78 (if (>= value ex
7840: 70 65 63 74 65 64 29 20 22 70 61 73 73 22 20 22 pected) "pass" "
7850: 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 3c 3d fail")).... ((<=
7860: 29 20 28 69 66 20 28 3c 3d 20 76 61 6c 75 65 20 ) (if (<= value
7870: 65 78 70 65 63 74 65 64 29 20 22 70 61 73 73 22 expected) "pass"
7880: 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 65 "fail")).... (e
7890: 6c 73 65 20 28 63 6f 6e 63 20 22 45 52 52 4f 52 lse (conc "ERROR
78a0: 3a 20 62 61 64 20 74 6f 6c 20 63 6f 6d 70 61 72 : bad tol compar
78b0: 61 74 6f 72 20 22 20 74 6f 6c 29 29 29 29 29 29 ator " tol))))))
78c0: 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 .. (debug:print
78d0: 34 20 22 41 46 54 45 52 32 3a 20 63 61 74 65 67 4 "AFTER2: categ
78e0: 6f 72 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 ory: " category
78f0: 22 20 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 " variable: " va
7900: 72 69 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 riable " value:
7910: 22 20 76 61 6c 75 65 20 0a 09 09 20 20 20 20 20 " value ...
7920: 20 22 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 ", expected: "
7930: 65 78 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 expected " tol:
7940: 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 " tol " units: "
7950: 20 75 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a units " status:
7960: 20 22 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d " status " comm
7970: 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a ent: " comment).
7980: 09 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 . (sqlite3:execu
7990: 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 4f 52 te db "INSERT OR
79a0: 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 65 REPLACE INTO te
79b0: 73 74 5f 64 61 74 61 20 28 74 65 73 74 5f 69 64 st_data (test_id
79c0: 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 ,category,variab
79d0: 6c 65 2c 76 61 6c 75 65 2c 65 78 70 65 63 74 65 le,value,expecte
79e0: 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c 63 6f 6d 6d d,tol,units,comm
79f0: 65 6e 74 2c 73 74 61 74 75 73 2c 74 79 70 65 29 ent,status,type)
7a00: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f VALUES (?,?,?,?
7a10: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 3b 22 0a ,?,?,?,?,?,?);".
7a20: 09 09 09 20 20 74 65 73 74 2d 69 64 20 63 61 74 ... test-id cat
7a30: 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 egory variable v
7a40: 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f alue expected to
7a50: 6c 20 75 6e 69 74 73 20 28 69 66 20 63 6f 6d 6d l units (if comm
7a60: 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 22 22 29 20 ent comment "")
7a70: 73 74 61 74 75 73 20 74 79 70 65 29 29 29 0a 20 status type))).
7a80: 20 20 20 20 63 73 76 6c 69 73 74 29 29 29 0a 0a csvlist)))..
7a90: 3b 3b 20 67 65 74 20 61 20 6c 69 73 74 20 6f 66 ;; get a list of
7aa0: 20 74 65 73 74 5f 64 61 74 61 20 72 65 63 6f 72 test_data recor
7ab0: 64 73 20 6d 61 74 63 68 69 6e 67 20 63 61 74 65 ds matching cate
7ac0: 67 6f 72 79 70 61 74 74 0a 28 64 65 66 69 6e 65 gorypatt.(define
7ad0: 20 28 64 62 3a 72 65 61 64 2d 74 65 73 74 2d 64 (db:read-test-d
7ae0: 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 63 ata db test-id c
7af0: 61 74 65 67 6f 72 79 70 61 74 74 29 0a 20 20 28 ategorypatt). (
7b00: 6c 65 74 20 28 28 72 65 73 20 27 28 29 29 29 0a let ((res '())).
7b10: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 (sqlite3:for
7b20: 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 -each-row .
7b30: 28 6c 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 (lambda (id test
7b40: 5f 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 _id category var
7b50: 69 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 iable value expe
7b60: 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 cted tol units c
7b70: 6f 6d 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 omment status ty
7b80: 70 65 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 pe). (set!
7b90: 20 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 res (cons (vect
7ba0: 6f 72 20 69 64 20 74 65 73 74 5f 69 64 20 63 61 or id test_id ca
7bb0: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 tegory variable
7bc0: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 value expected t
7bd0: 6f 6c 20 75 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 ol units comment
7be0: 20 73 74 61 74 75 73 20 74 79 70 65 29 20 72 65 status type) re
7bf0: 73 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 s))). db.
7c00: 20 20 22 53 45 4c 45 43 54 20 69 64 2c 74 65 73 "SELECT id,tes
7c10: 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 61 t_id,category,va
7c20: 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 70 riable,value,exp
7c30: 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 2c ected,tol,units,
7c40: 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 75 73 2c 74 comment,status,t
7c50: 79 70 65 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 ype FROM test_da
7c60: 74 61 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 ta WHERE test_id
7c70: 3d 3f 20 41 4e 44 20 63 61 74 65 67 6f 72 79 20 =? AND category
7c80: 4c 49 4b 45 20 3f 20 4f 52 44 45 52 20 42 59 20 LIKE ? ORDER BY
7c90: 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c category,variabl
7ca0: 65 3b 22 20 74 65 73 74 2d 69 64 20 63 61 74 65 e;" test-id cate
7cb0: 67 6f 72 79 70 61 74 74 29 0a 20 20 20 20 28 72 gorypatt). (r
7cc0: 65 76 65 72 73 65 20 72 65 73 29 29 29 0a 0a 28 everse res)))..(
7cd0: 64 65 66 69 6e 65 20 28 64 62 3a 6c 6f 61 64 2d define (db:load-
7ce0: 74 65 73 74 2d 64 61 74 61 20 64 62 20 72 75 6e test-data db run
7cf0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
7d00: 65 6d 64 61 74 29 0a 20 20 28 6c 65 74 2a 20 28 emdat). (let* (
7d10: 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65 6d (item-path (item
7d20: 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d -list->path item
7d30: 64 61 74 29 29 0a 09 20 28 74 65 73 74 64 61 74 dat)).. (testdat
7d40: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e (db:get-test-in
7d50: 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 fo db run-id tes
7d60: 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 t-name item-path
7d70: 29 29 0a 09 20 28 74 65 73 74 2d 69 64 20 28 69 )).. (test-id (i
7d80: 66 20 74 65 73 74 64 61 74 20 28 64 62 3a 74 65 f testdat (db:te
7d90: 73 74 2d 67 65 74 2d 69 64 20 74 65 73 74 64 61 st-get-id testda
7da0: 74 29 20 23 66 29 29 29 0a 20 20 20 20 3b 3b 20 t) #f))). ;;
7db0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 31 20 22 (debug:print 1 "
7dc0: 45 6e 74 65 72 20 72 65 63 6f 72 64 73 20 74 6f Enter records to
7dd0: 20 69 6e 73 65 72 74 20 69 6e 20 74 68 65 20 74 insert in the t
7de0: 65 73 74 5f 64 61 74 61 20 74 61 62 6c 65 2c 20 est_data table,
7df0: 73 65 76 65 6e 20 66 69 65 6c 64 73 2c 20 63 6f seven fields, co
7e00: 6d 6d 61 20 73 65 70 61 72 61 74 65 64 20 70 65 mma separated pe
7e10: 72 20 6c 69 6e 65 22 29 0a 20 20 20 20 28 64 65 r line"). (de
7e20: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 69 74 65 bug:print 4 "ite
7e30: 6d 64 61 74 3a 20 22 20 69 74 65 6d 64 61 74 20 mdat: " itemdat
7e40: 22 2c 20 74 65 73 74 2d 6e 61 6d 65 3a 20 22 20 ", test-name: "
7e50: 74 65 73 74 2d 6e 61 6d 65 20 22 2c 20 74 65 73 test-name ", tes
7e60: 74 2d 69 64 3a 20 22 20 74 65 73 74 2d 69 64 29 t-id: " test-id)
7e70: 0a 20 20 20 20 28 69 66 20 74 65 73 74 2d 69 64 . (if test-id
7e80: 0a 09 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6c 69 ..(let loop ((li
7e90: 6e 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 0a n (read-line))).
7ea0: 09 20 20 28 69 66 20 28 6e 6f 74 20 28 65 6f 66 . (if (not (eof
7eb0: 2d 6f 62 6a 65 63 74 3f 20 6c 69 6e 29 29 0a 09 -object? lin))..
7ec0: 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 28 (begin...(
7ed0: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 6c 69 debug:print 4 li
7ee0: 6e 29 0a 09 09 28 64 62 3a 63 73 76 2d 3e 74 65 n)...(db:csv->te
7ef0: 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 2d st-data db test-
7f00: 69 64 20 6c 69 6e 29 0a 09 09 28 6c 6f 6f 70 20 id lin)...(loop
7f10: 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 29 29 29 (read-line))))))
7f20: 0a 20 20 20 20 3b 3b 20 72 6f 6c 6c 20 75 70 20 . ;; roll up
7f30: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 the current resu
7f40: 6c 74 73 2e 0a 20 20 20 20 3b 3b 20 46 49 58 4d lts.. ;; FIXM
7f50: 45 3a 20 41 64 64 20 74 68 65 20 73 74 61 74 75 E: Add the statu
7f60: 73 20 74 6f 20 0a 20 20 20 20 28 64 62 3a 74 65 s to . (db:te
7f70: 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 20 64 st-data-rollup d
7f80: 62 20 74 65 73 74 2d 69 64 20 23 66 29 29 29 0a b test-id #f))).
7f90: 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a 20 44 6f 20 .;; WARNING: Do
7fa0: 4e 4f 54 20 63 61 6c 6c 20 74 68 69 73 20 66 6f NOT call this fo
7fb0: 72 20 74 68 65 20 70 61 72 65 6e 74 20 74 65 73 r the parent tes
7fc0: 74 20 6f 6e 20 61 6e 20 69 74 65 72 61 74 65 64 t on an iterated
7fd0: 20 74 65 73 74 0a 3b 3b 20 52 6f 6c 6c 20 75 70 test.;; Roll up
7fe0: 20 74 65 73 74 5f 64 61 74 61 20 70 61 73 73 2f test_data pass/
7ff0: 66 61 69 6c 20 72 65 73 75 6c 74 73 0a 3b 3b 20 fail results.;;
8000: 6c 6f 6f 6b 20 61 74 20 74 68 65 20 74 65 73 74 look at the test
8010: 5f 64 61 74 61 20 73 74 61 74 75 73 20 66 69 65 _data status fie
8020: 6c 64 2c 20 0a 3b 3b 20 20 20 20 69 66 20 61 6c ld, .;; if al
8030: 6c 20 61 72 65 20 70 61 73 73 20 28 61 6e 79 20 l are pass (any
8040: 63 61 73 65 29 20 61 6e 64 20 74 68 65 20 74 65 case) and the te
8050: 73 74 20 73 74 61 74 75 73 20 69 73 20 50 41 53 st status is PAS
8060: 53 20 6f 72 20 4e 55 4c 4c 20 6f 72 20 27 27 20 S or NULL or ''
8070: 74 68 65 6e 20 73 65 74 20 74 65 73 74 20 73 74 then set test st
8080: 61 74 75 73 20 74 6f 20 50 41 53 53 2e 0a 3b 3b atus to PASS..;;
8090: 20 20 20 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f if one or mo
80a0: 72 65 20 61 72 65 20 66 61 69 6c 20 28 61 6e 79 re are fail (any
80b0: 20 63 61 73 65 29 20 74 68 65 6e 20 73 65 74 20 case) then set
80c0: 74 65 73 74 20 73 74 61 74 75 73 20 74 6f 20 50 test status to P
80d0: 41 53 53 2c 20 6e 6f 6e 20 22 70 61 73 73 22 20 ASS, non "pass"
80e0: 6f 72 20 22 66 61 69 6c 22 20 61 72 65 20 69 67 or "fail" are ig
80f0: 6e 6f 72 65 64 0a 28 64 65 66 69 6e 65 20 28 64 nored.(define (d
8100: 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c b:test-data-roll
8110: 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 up db test-id st
8120: 61 74 75 73 29 0a 20 20 28 73 71 6c 69 74 65 33 atus). (sqlite3
8130: 3a 65 78 65 63 75 74 65 20 0a 20 20 20 64 62 20 :execute . db
8140: 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 . "UPDATE test
8150: 73 20 0a 20 20 20 20 20 20 53 45 54 20 66 61 69 s . SET fai
8160: 6c 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 l_count=(SELECT
8170: 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 count(id) FROM t
8180: 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 est_data WHERE t
8190: 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 73 74 61 est_id=? AND sta
81a0: 74 75 73 20 6c 69 6b 65 20 27 66 61 69 6c 27 29 tus like 'fail')
81b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 70 61 73 73 ,. pass
81c0: 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 _count=(SELECT c
81d0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
81e0: 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 st_data WHERE te
81f0: 73 74 5f 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 st_id=? AND stat
8200: 75 73 20 6c 69 6b 65 20 27 70 61 73 73 27 29 0a us like 'pass').
8210: 20 20 20 20 20 20 57 48 45 52 45 20 69 64 3d 3f WHERE id=?
8220: 3b 22 0a 20 20 20 74 65 73 74 2d 69 64 20 74 65 ;". test-id te
8230: 73 74 2d 69 64 20 74 65 73 74 2d 69 64 29 0a 20 st-id test-id).
8240: 20 3b 3b 20 69 66 20 74 68 65 20 74 65 73 74 20 ;; if the test
8250: 69 73 20 6e 6f 74 20 46 41 49 4c 20 74 68 65 6e is not FAIL then
8260: 20 73 65 74 20 73 74 61 74 75 73 20 62 61 73 65 set status base
8270: 64 20 6f 6e 20 74 68 65 20 66 61 69 6c 20 61 6e d on the fail an
8280: 64 20 70 61 73 73 20 63 6f 75 6e 74 73 2e 0a 20 d pass counts..
8290: 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 (thread-sleep!
82a0: 31 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 1). (sqlite3:ex
82b0: 65 63 75 74 65 0a 20 20 20 64 62 20 20 20 3b 3b ecute. db ;;
82c0: 3b 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64 20 74 ; NOTE: Should t
82d0: 68 69 73 20 62 65 20 57 41 52 4e 2c 46 41 49 4c his be WARN,FAIL
82e0: 3f 20 41 20 57 41 52 4e 20 69 73 20 6e 6f 74 20 ? A WARN is not
82f0: 61 20 46 41 49 4c 3f 3f 3f 3f 3f 20 42 55 47 20 a FAIL????? BUG
8300: 46 49 58 4d 45 0a 20 20 20 22 55 50 44 41 54 45 FIXME. "UPDATE
8310: 20 74 65 73 74 73 0a 20 20 20 20 20 20 53 45 54 tests. SET
8320: 20 73 74 61 74 75 73 3d 43 41 53 45 20 57 48 45 status=CASE WHE
8330: 4e 20 28 53 45 4c 45 43 54 20 66 61 69 6c 5f 63 N (SELECT fail_c
8340: 6f 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 ount FROM tests
8350: 57 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 WHERE id=?) > 0
8360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8370: 20 20 20 20 20 20 20 20 20 20 54 48 45 4e 20 27 THEN '
8380: 46 41 49 4c 27 0a 20 20 20 20 20 20 20 20 20 20 FAIL'.
8390: 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 4e WHEN
83a0: 20 28 53 45 4c 45 43 54 20 70 61 73 73 5f 63 6f (SELECT pass_co
83b0: 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 unt FROM tests W
83c0: 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 41 HERE id=?) > 0 A
83d0: 4e 44 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 ND .
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
83f0: 53 45 4c 45 43 54 20 73 74 61 74 75 73 20 46 52 SELECT status FR
8400: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 OM tests WHERE i
8410: 64 3d 3f 29 20 4e 4f 54 20 49 4e 20 28 27 57 41 d=?) NOT IN ('WA
8420: 52 4e 27 2c 27 46 41 49 4c 27 29 0a 20 20 20 20 RN','FAIL').
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8440: 20 20 20 20 20 54 48 45 4e 20 27 50 41 53 53 27 THEN 'PASS'
8450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8460: 20 20 20 20 20 20 20 45 4c 53 45 20 73 74 61 74 ELSE stat
8470: 75 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 us.
8480: 20 20 20 20 20 45 4e 44 20 57 48 45 52 45 20 69 END WHERE i
8490: 64 3d 3f 3b 22 0a 20 20 20 74 65 73 74 2d 69 64 d=?;". test-id
84a0: 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 test-id test-id
84b0: 20 74 65 73 74 2d 69 64 29 29 0a 0a 28 64 65 66 test-id))..(def
84c0: 69 6e 65 20 28 64 62 3a 67 65 74 2d 70 72 65 76 ine (db:get-prev
84d0: 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 64 62 -tol-for-test db
84e0: 20 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 test-id categor
84f0: 79 20 76 61 72 69 61 62 6c 65 29 0a 20 20 3b 3b y variable). ;;
8500: 20 46 69 6e 69 73 68 20 6d 65 3f 0a 20 20 28 76 Finish me?. (v
8510: 61 6c 75 65 73 20 23 66 20 23 66 20 23 66 29 29 alues #f #f #f))
8520: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
8530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8560: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 53 20 ==========.;; S
8570: 54 20 45 20 50 20 53 20 0a 3b 3b 3d 3d 3d 3d 3d T E P S .;;=====
8580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
85a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
85b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
85c0: 3d 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 73 =..(define (db:s
85d0: 74 65 70 2d 67 65 74 2d 74 69 6d 65 2d 61 73 2d tep-get-time-as-
85e0: 73 74 72 69 6e 67 20 76 65 63 29 0a 20 20 28 73 string vec). (s
85f0: 65 63 6f 6e 64 73 2d 3e 74 69 6d 65 2d 73 74 72 econds->time-str
8600: 69 6e 67 20 28 64 62 3a 73 74 65 70 2d 67 65 74 ing (db:step-get
8610: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 76 65 63 29 -event_time vec)
8620: 29 29 0a 0a 3b 3b 20 64 62 2d 67 65 74 2d 74 65 ))..;; db-get-te
8630: 73 74 2d 73 74 65 70 73 2d 66 6f 72 2d 72 75 6e st-steps-for-run
8640: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
8650: 2d 73 74 65 70 73 2d 66 6f 72 2d 74 65 73 74 20 -steps-for-test
8660: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c db test-id). (l
8670: 65 74 20 28 28 72 65 73 20 27 28 29 29 29 0a 20 et ((res '())).
8680: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
8690: 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 each-row . (
86a0: 6c 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 2d lambda (id test-
86b0: 69 64 20 73 74 65 70 6e 61 6d 65 20 73 74 61 74 id stepname stat
86c0: 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 e status event-t
86d0: 69 6d 65 20 6c 6f 67 66 69 6c 65 29 0a 20 20 20 ime logfile).
86e0: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 63 (set! res (c
86f0: 6f 6e 73 20 28 76 65 63 74 6f 72 20 69 64 20 74 ons (vector id t
8700: 65 73 74 2d 69 64 20 73 74 65 70 6e 61 6d 65 20 est-id stepname
8710: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
8720: 6e 74 2d 74 69 6d 65 20 28 69 66 20 28 73 74 72 nt-time (if (str
8730: 69 6e 67 3f 20 6c 6f 67 66 69 6c 65 29 20 6c 6f ing? logfile) lo
8740: 67 66 69 6c 65 20 22 22 29 29 20 72 65 73 29 29 gfile "")) res))
8750: 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 ). db. "
8760: 53 45 4c 45 43 54 20 69 64 2c 74 65 73 74 5f 69 SELECT id,test_i
8770: 64 2c 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 d,stepname,state
8780: 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 ,status,event_ti
8790: 6d 65 2c 6c 6f 67 66 69 6c 65 20 46 52 4f 4d 20 me,logfile FROM
87a0: 74 65 73 74 5f 73 74 65 70 73 20 57 48 45 52 45 test_steps WHERE
87b0: 20 74 65 73 74 5f 69 64 3d 3f 20 4f 52 44 45 52 test_id=? ORDER
87c0: 20 42 59 20 69 64 20 41 53 43 3b 22 20 3b 3b 20 BY id ASC;" ;;
87d0: 65 76 65 6e 74 5f 74 69 6d 65 20 44 45 53 43 2c event_time DESC,
87e0: 69 64 20 41 53 43 3b 0a 20 20 20 20 20 74 65 73 id ASC;. tes
87f0: 74 2d 69 64 29 0a 20 20 20 20 28 72 65 76 65 72 t-id). (rever
8800: 73 65 20 72 65 73 29 29 29 0a 0a 3b 3b 20 67 65 se res)))..;; ge
8810: 74 20 61 20 70 72 65 74 74 79 20 74 61 62 6c 65 t a pretty table
8820: 20 74 6f 20 73 75 6d 6d 61 72 69 7a 65 20 73 74 to summarize st
8830: 65 70 73 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 eps.;;.(define (
8840: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 74 61 62 db:get-steps-tab
8850: 6c 65 20 64 62 20 74 65 73 74 2d 69 64 29 0a 20 le db test-id).
8860: 20 28 6c 65 74 20 28 28 73 74 65 70 73 20 20 20 (let ((steps
8870: 28 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f (db:get-steps-fo
8880: 72 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 r-test db test-i
8890: 64 29 29 29 0a 20 20 20 20 3b 3b 20 6f 72 67 61 d))). ;; orga
88a0: 6e 69 73 65 20 74 68 65 20 73 74 65 70 73 20 66 nise the steps f
88b0: 6f 72 20 62 65 74 74 65 72 20 72 65 61 64 61 62 or better readab
88c0: 69 6c 69 74 79 0a 20 20 20 20 28 6c 65 74 20 28 ility. (let (
88d0: 28 72 65 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d (res (make-hash-
88e0: 74 61 62 6c 65 29 29 29 0a 20 20 20 20 20 20 28 table))). (
88f0: 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 20 for-each .
8900: 20 28 6c 61 6d 62 64 61 20 28 73 74 65 70 29 0a (lambda (step).
8910: 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 . (debug:print 6
8920: 20 22 73 74 65 70 3d 22 20 73 74 65 70 29 0a 09 "step=" step)..
8930: 20 28 6c 65 74 20 28 28 72 65 63 6f 72 64 20 28 (let ((record (
8940: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 hash-table-ref/d
8950: 65 66 61 75 6c 74 20 0a 09 09 09 72 65 73 20 0a efault ....res .
8960: 09 09 09 28 64 62 3a 73 74 65 70 2d 67 65 74 2d ...(db:step-get-
8970: 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 20 0a stepname step) .
8980: 09 09 09 3b 3b 20 20 20 20 20 20 20 20 73 74 65 ...;; ste
8990: 70 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 pname
89a0: 20 20 20 20 20 73 74 61 72 74 20 65 6e 64 20 73 start end s
89b0: 74 61 74 75 73 20 20 20 20 0a 09 09 09 28 76 65 tatus ....(ve
89c0: 63 74 6f 72 20 28 64 62 3a 73 74 65 70 2d 67 65 ctor (db:step-ge
89d0: 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 t-stepname step)
89e0: 20 22 22 20 20 20 22 22 20 22 22 20 20 20 20 20 "" "" ""
89f0: 22 22 20 22 22 29 29 29 29 0a 09 20 20 20 28 64 "" "")))).. (d
8a00: 65 62 75 67 3a 70 72 69 6e 74 20 36 20 22 72 65 ebug:print 6 "re
8a10: 63 6f 72 64 28 62 65 66 6f 72 65 29 20 3d 20 22 cord(before) = "
8a20: 20 72 65 63 6f 72 64 20 0a 09 09 09 22 5c 6e 69 record ...."\ni
8a30: 64 3a 20 20 20 20 20 20 20 22 20 28 64 62 3a 73 d: " (db:s
8a40: 74 65 70 2d 67 65 74 2d 69 64 20 73 74 65 70 29 tep-get-id step)
8a50: 0a 09 09 09 22 5c 6e 73 74 65 70 6e 61 6d 65 3a ...."\nstepname:
8a60: 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d " (db:step-get-
8a70: 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 0a 09 stepname step)..
8a80: 09 09 22 5c 6e 73 74 61 74 65 3a 20 20 20 20 22 .."\nstate: "
8a90: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
8aa0: 61 74 65 20 73 74 65 70 29 0a 09 09 09 22 5c 6e ate step)...."\n
8ab0: 73 74 61 74 75 73 3a 20 20 20 22 20 28 64 62 3a status: " (db:
8ac0: 73 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 step-get-status
8ad0: 73 74 65 70 29 0a 09 09 09 22 5c 6e 74 69 6d 65 step)...."\ntime
8ae0: 3a 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 : " (db:step
8af0: 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
8b00: 73 74 65 70 29 29 0a 09 20 20 20 28 63 61 73 65 step)).. (case
8b10: 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c (string->symbol
8b20: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
8b30: 61 74 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 ate step))..
8b40: 20 28 28 73 74 61 72 74 29 28 76 65 63 74 6f 72 ((start)(vector
8b50: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 31 20 28 -set! record 1 (
8b60: 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e db:step-get-even
8b70: 74 5f 74 69 6d 65 20 73 74 65 70 29 29 0a 09 20 t_time step))..
8b80: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
8b90: 21 20 72 65 63 6f 72 64 20 33 20 28 69 66 20 28 ! record 3 (if (
8ba0: 65 71 75 61 6c 3f 20 28 76 65 63 74 6f 72 2d 72 equal? (vector-r
8bb0: 65 66 20 72 65 63 6f 72 64 20 33 29 20 22 22 29 ef record 3) "")
8bc0: 0a 09 09 09 09 09 28 64 62 3a 73 74 65 70 2d 67 ......(db:step-g
8bd0: 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 29 et-status step))
8be0: 29 0a 09 20 20 20 20 20 20 28 69 66 20 28 3e 20 ).. (if (>
8bf0: 28 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 20 28 (string-length (
8c00: 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 db:step-get-logf
8c10: 69 6c 65 20 73 74 65 70 29 29 0a 09 09 20 20 20 ile step))...
8c20: 20 20 30 29 0a 09 09 20 20 28 76 65 63 74 6f 72 0)... (vector
8c30: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 35 20 28 -set! record 5 (
8c40: 64 62 3a 73 74 65 70 2d 67 65 74 2d 6c 6f 67 66 db:step-get-logf
8c50: 69 6c 65 20 73 74 65 70 29 29 29 29 0a 09 20 20 ile step))))..
8c60: 20 20 20 28 28 65 6e 64 29 20 20 0a 09 20 20 20 ((end) ..
8c70: 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 (vector-set!
8c80: 72 65 63 6f 72 64 20 32 20 28 61 6e 79 2d 3e 6e record 2 (any->n
8c90: 75 6d 62 65 72 20 28 64 62 3a 73 74 65 70 2d 67 umber (db:step-g
8ca0: 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 et-event_time st
8cb0: 65 70 29 29 29 0a 09 20 20 20 20 20 20 28 76 65 ep))).. (ve
8cc0: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
8cd0: 20 33 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 3 (db:step-get-
8ce0: 73 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 20 status step))..
8cf0: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
8d00: 21 20 72 65 63 6f 72 64 20 34 20 28 6c 65 74 20 ! record 4 (let
8d10: 28 28 73 74 61 72 74 74 20 28 61 6e 79 2d 3e 6e ((startt (any->n
8d20: 75 6d 62 65 72 20 28 76 65 63 74 6f 72 2d 72 65 umber (vector-re
8d30: 66 20 72 65 63 6f 72 64 20 31 29 29 29 0a 09 09 f record 1)))...
8d40: 09 09 09 20 20 28 65 6e 64 74 20 20 20 28 61 6e ... (endt (an
8d50: 79 2d 3e 6e 75 6d 62 65 72 20 28 76 65 63 74 6f y->number (vecto
8d60: 72 2d 72 65 66 20 72 65 63 6f 72 64 20 32 29 29 r-ref record 2))
8d70: 29 29 0a 09 09 09 09 20 20 20 20 20 20 28 64 65 ))..... (de
8d80: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 72 65 63 bug:print 4 "rec
8d90: 6f 72 64 5b 31 5d 3d 22 20 28 76 65 63 74 6f 72 ord[1]=" (vector
8da0: 2d 72 65 66 20 72 65 63 6f 72 64 20 31 29 20 0a -ref record 1) .
8db0: 09 09 09 09 09 09 20 20 20 22 2c 20 73 74 61 72 ...... ", star
8dc0: 74 74 3d 22 20 73 74 61 72 74 74 20 22 2c 20 65 tt=" startt ", e
8dd0: 6e 64 74 3d 22 20 65 6e 64 74 0a 09 09 09 09 09 ndt=" endt......
8de0: 09 20 20 20 22 2c 20 67 65 74 2d 73 74 61 74 75 . ", get-statu
8df0: 73 3a 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 s: " (db:step-ge
8e00: 74 2d 73 74 61 74 75 73 20 73 74 65 70 29 29 0a t-status step)).
8e10: 09 09 09 09 20 20 20 20 20 20 28 69 66 20 28 61 .... (if (a
8e20: 6e 64 20 28 6e 75 6d 62 65 72 3f 20 73 74 61 72 nd (number? star
8e30: 74 74 29 28 6e 75 6d 62 65 72 3f 20 65 6e 64 74 tt)(number? endt
8e40: 29 29 0a 09 09 09 09 09 20 20 28 73 65 63 6f 6e ))...... (secon
8e50: 64 73 2d 3e 68 72 2d 6d 69 6e 2d 73 65 63 20 28 ds->hr-min-sec (
8e60: 2d 20 65 6e 64 74 20 73 74 61 72 74 74 29 29 20 - endt startt))
8e70: 22 2d 31 22 29 29 29 0a 09 20 20 20 20 20 20 28 "-1"))).. (
8e80: 69 66 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 if (> (string-le
8e90: 6e 67 74 68 20 28 64 62 3a 73 74 65 70 2d 67 65 ngth (db:step-ge
8ea0: 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 t-logfile step))
8eb0: 0a 09 09 20 20 20 20 20 30 29 0a 09 09 20 20 28 ... 0)... (
8ec0: 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f vector-set! reco
8ed0: 72 64 20 35 20 28 64 62 3a 73 74 65 70 2d 67 65 rd 5 (db:step-ge
8ee0: 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 t-logfile step))
8ef0: 29 29 0a 09 20 20 20 20 20 28 65 6c 73 65 0a 09 )).. (else..
8f00: 20 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 (vector-se
8f10: 74 21 20 72 65 63 6f 72 64 20 32 20 28 64 62 3a t! record 2 (db:
8f20: 73 74 65 70 2d 67 65 74 2d 73 74 61 74 65 20 73 step-get-state s
8f30: 74 65 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 tep)).. (ve
8f40: 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 ctor-set! record
8f50: 20 33 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 3 (db:step-get-
8f60: 73 74 61 74 75 73 20 73 74 65 70 29 29 0a 09 20 status step))..
8f70: 20 20 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 (vector-set
8f80: 21 20 72 65 63 6f 72 64 20 34 20 28 64 62 3a 73 ! record 4 (db:s
8f90: 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 tep-get-event_ti
8fa0: 6d 65 20 73 74 65 70 29 29 29 29 0a 09 20 20 20 me step))))..
8fb0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
8fc0: 20 72 65 73 20 28 64 62 3a 73 74 65 70 2d 67 65 res (db:step-ge
8fd0: 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 70 29 t-stepname step)
8fe0: 20 72 65 63 6f 72 64 29 0a 09 20 20 20 28 64 65 record).. (de
8ff0: 62 75 67 3a 70 72 69 6e 74 20 36 20 22 72 65 63 bug:print 6 "rec
9000: 6f 72 64 28 61 66 74 65 72 29 20 20 3d 20 22 20 ord(after) = "
9010: 72 65 63 6f 72 64 20 0a 09 09 09 22 5c 6e 69 64 record ...."\nid
9020: 3a 20 20 20 20 20 20 20 22 20 28 64 62 3a 73 74 : " (db:st
9030: 65 70 2d 67 65 74 2d 69 64 20 73 74 65 70 29 0a ep-get-id step).
9040: 09 09 09 22 5c 6e 73 74 65 70 6e 61 6d 65 3a 20 ..."\nstepname:
9050: 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 " (db:step-get-s
9060: 74 65 70 6e 61 6d 65 20 73 74 65 70 29 0a 09 09 tepname step)...
9070: 09 22 5c 6e 73 74 61 74 65 3a 20 20 20 20 22 20 ."\nstate: "
9080: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
9090: 74 65 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 te step)...."\ns
90a0: 74 61 74 75 73 3a 20 20 20 22 20 28 64 62 3a 73 tatus: " (db:s
90b0: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
90c0: 74 65 70 29 0a 09 09 09 22 5c 6e 74 69 6d 65 3a tep)...."\ntime:
90d0: 20 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d " (db:step-
90e0: 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 get-event_time s
90f0: 74 65 70 29 29 29 29 0a 20 20 20 20 20 20 20 3b tep)))). ;
9100: 3b 20 28 65 6c 73 65 20 20 20 28 76 65 63 74 6f ; (else (vecto
9110: 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 31 20 r-set! record 1
9120: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 (db:step-get-eve
9130: 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 0a nt_time step))).
9140: 20 20 20 20 20 20 20 28 73 6f 72 74 20 73 74 65 (sort ste
9150: 70 73 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 ps (lambda (a b)
9160: 28 3c 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d (< (db:step-get-
9170: 65 76 65 6e 74 5f 74 69 6d 65 20 61 29 28 64 62 event_time a)(db
9180: 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f :step-get-event_
9190: 74 69 6d 65 20 62 29 29 29 29 29 0a 20 20 20 20 time b))))).
91a0: 20 20 72 65 73 29 29 29 0a 0a 3b 3b 20 55 53 45 res)))..;; USE
91b0: 3a 20 28 6c 73 65 74 2d 64 69 66 66 65 72 65 6e : (lset-differen
91c0: 63 65 20 73 74 72 69 6e 67 3d 3f 20 27 28 22 61 ce string=? '("a
91d0: 22 20 22 62 22 20 22 63 22 29 20 27 28 22 64 22 " "b" "c") '("d"
91e0: 20 22 63 22 20 22 65 22 20 22 61 22 29 29 0a 3b "c" "e" "a")).;
91f0: 3b 0a 3b 3b 20 52 65 74 75 72 6e 20 61 20 6c 69 ;.;; Return a li
9200: 73 74 20 6f 66 20 70 72 65 72 65 71 73 20 74 68 st of prereqs th
9210: 61 74 20 77 65 72 65 20 4e 4f 54 20 6d 65 74 0a at were NOT met.
9220: 3b 3b 20 20 54 65 73 74 73 20 28 61 6e 64 20 61 ;; Tests (and a
9230: 6c 6c 20 69 74 65 6d 73 29 20 69 6e 20 77 61 69 ll items) in wai
9240: 74 6f 6e 20 6c 69 73 74 20 6d 75 73 74 20 62 65 ton list must be
9250: 20 22 43 4f 4d 50 4c 45 54 45 44 22 20 61 6e 64 "COMPLETED" and
9260: 20 22 50 41 53 53 22 0a 28 64 65 66 69 6e 65 20 "PASS".(define
9270: 28 64 62 2d 67 65 74 2d 70 72 65 72 65 71 73 2d (db-get-prereqs-
9280: 6e 6f 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 not-met db run-i
9290: 64 20 77 61 69 74 6f 6e 29 0a 20 20 28 69 66 20 d waiton). (if
92a0: 28 6e 75 6c 6c 3f 20 77 61 69 74 6f 6e 29 0a 20 (null? waiton).
92b0: 20 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 28 '(). (
92c0: 6c 65 74 2a 20 28 28 75 6e 6d 65 74 2d 70 72 65 let* ((unmet-pre
92d0: 2d 72 65 71 73 20 27 28 29 29 0a 09 20 20 20 20 -reqs '())..
92e0: 20 28 74 65 73 74 73 20 20 20 20 20 20 20 20 20 (tests
92f0: 20 20 28 64 62 2d 67 65 74 2d 74 65 73 74 73 2d (db-get-tests-
9300: 66 6f 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 for-run db run-i
9310: 64 20 23 66 20 23 66 20 27 28 29 20 27 28 29 29 d #f #f '() '())
9320: 29 0a 09 20 20 20 20 20 28 72 65 73 75 6c 74 20 ).. (result
9330: 20 20 20 20 20 20 20 20 27 28 29 29 29 0a 09 28 '()))..(
9340: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 for-each (lambda
9350: 20 28 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d (waitontest-nam
9360: 65 29 0a 09 09 20 20 20 20 28 6c 65 74 20 28 28 e)... (let ((
9370: 65 76 65 72 2d 73 65 65 6e 20 23 66 29 29 0a 09 ever-seen #f))..
9380: 09 20 20 20 20 20 20 28 66 6f 72 2d 65 61 63 68 . (for-each
9390: 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 29 0a (lambda (test).
93a0: 09 09 09 09 20 20 28 69 66 20 28 65 71 75 61 6c .... (if (equal
93b0: 3f 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d ? waitontest-nam
93c0: 65 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 e (db:test-get-t
93d0: 65 73 74 6e 61 6d 65 20 74 65 73 74 29 29 0a 09 estname test))..
93e0: 09 09 09 20 20 20 20 20 20 28 62 65 67 69 6e 0a ... (begin.
93f0: 09 09 09 09 09 28 73 65 74 21 20 65 76 65 72 2d .....(set! ever-
9400: 73 65 65 6e 20 23 74 29 0a 09 09 09 09 09 28 69 seen #t)......(i
9410: 66 20 28 6e 6f 74 20 28 61 6e 64 20 28 65 71 75 f (not (and (equ
9420: 61 6c 3f 20 28 64 62 3a 74 65 73 74 2d 67 65 74 al? (db:test-get
9430: 2d 73 74 61 74 65 20 74 65 73 74 29 20 22 43 4f -state test) "CO
9440: 4d 50 4c 45 54 45 44 22 29 0a 09 09 09 09 09 09 MPLETED").......
9450: 20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 28 64 (member (d
9460: 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 75 b:test-get-statu
9470: 73 20 74 65 73 74 29 20 27 28 22 50 41 53 53 22 s test) '("PASS"
9480: 20 22 57 41 52 4e 22 20 22 43 48 45 43 4b 22 29 "WARN" "CHECK")
9490: 29 29 29 0a 09 09 09 09 09 20 20 20 20 28 73 65 )))...... (se
94a0: 74 21 20 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 t! result (cons
94b0: 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 waitontest-name
94c0: 72 65 73 75 6c 74 29 29 29 29 29 29 0a 09 09 09 result))))))....
94d0: 09 74 65 73 74 73 29 0a 09 09 20 20 20 20 20 20 .tests)...
94e0: 28 69 66 20 28 6e 6f 74 20 65 76 65 72 2d 73 65 (if (not ever-se
94f0: 65 6e 29 28 73 65 74 21 20 72 65 73 75 6c 74 20 en)(set! result
9500: 28 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 (cons waitontest
9510: 2d 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 29 29 -name result))))
9520: 29 0a 09 09 20 20 77 61 69 74 6f 6e 29 0a 09 28 )... waiton)..(
9530: 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65 delete-duplicate
9540: 73 20 72 65 73 75 6c 74 29 29 29 29 0a 0a 3b 3b s result))))..;;
9550: 20 74 68 65 20 6e 65 77 20 70 72 65 72 65 71 73 the new prereqs
9560: 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 6c 6f calculation, lo
9570: 6f 6b 73 20 61 6c 73 6f 20 61 74 20 69 74 65 6d oks also at item
9580: 70 61 74 68 20 69 66 20 73 70 65 63 69 66 69 65 path if specifie
9590: 64 0a 3b 3b 20 61 6c 6c 20 70 72 65 72 65 71 73 d.;; all prereqs
95a0: 20 6d 75 73 74 20 62 65 20 6d 65 74 3a 0a 3b 3b must be met:.;;
95b0: 20 20 20 20 69 66 20 70 72 65 72 65 71 20 74 65 if prereq te
95c0: 73 74 20 77 69 74 68 20 69 74 65 6d 70 61 74 68 st with itempath
95d0: 3d 27 27 20 69 73 20 43 4f 4d 50 4c 45 54 45 44 ='' is COMPLETED
95e0: 20 61 6e 64 20 50 41 53 53 2c 20 57 41 52 4e 2c and PASS, WARN,
95f0: 20 43 48 45 43 4b 2c 20 6f 72 20 57 41 49 56 45 CHECK, or WAIVE
9600: 44 20 74 68 65 6e 20 70 72 65 72 65 71 20 69 73 D then prereq is
9610: 20 6d 65 74 0a 3b 3b 20 20 20 20 69 66 20 70 72 met.;; if pr
9620: 65 72 65 71 20 74 65 73 74 20 77 69 74 68 20 69 ereq test with i
9630: 74 65 6d 70 61 74 68 3d 72 65 66 2d 69 74 65 6d tempath=ref-item
9640: 2d 70 61 74 68 20 61 6e 64 20 43 4f 4d 50 4c 45 -path and COMPLE
9650: 54 45 44 20 77 69 74 68 20 50 41 53 53 2c 20 57 TED with PASS, W
9660: 41 52 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 20 57 ARN, CHECK, or W
9670: 41 49 56 45 44 20 74 68 65 6e 20 70 72 65 72 65 AIVED then prere
9680: 71 20 69 73 20 6d 65 74 0a 28 64 65 66 69 6e 65 q is met.(define
9690: 20 28 64 62 3a 67 65 74 2d 70 72 65 72 65 71 73 (db:get-prereqs
96a0: 2d 6e 6f 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d -not-met db run-
96b0: 69 64 20 77 61 69 74 6f 6e 73 20 72 65 66 2d 69 id waitons ref-i
96c0: 74 65 6d 2d 70 61 74 68 29 0a 20 20 28 69 66 20 tem-path). (if
96d0: 28 6f 72 20 28 6e 6f 74 20 77 61 69 74 6f 6e 73 (or (not waitons
96e0: 29 0a 09 20 20 28 6e 75 6c 6c 3f 20 77 61 69 74 ).. (null? wait
96f0: 6f 6e 73 29 29 0a 20 20 20 20 20 20 27 28 29 0a ons)). '().
9700: 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 75 6e (let* ((un
9710: 6d 65 74 2d 70 72 65 2d 72 65 71 73 20 27 28 29 met-pre-reqs '()
9720: 29 0a 09 20 20 20 20 20 28 72 65 73 75 6c 74 20 ).. (result
9730: 20 20 20 20 20 20 20 20 27 28 29 29 29 0a 09 28 '()))..(
9740: 66 6f 72 2d 65 61 63 68 20 0a 09 20 28 6c 61 6d for-each .. (lam
9750: 62 64 61 20 28 77 61 69 74 6f 6e 74 65 73 74 2d bda (waitontest-
9760: 6e 61 6d 65 29 0a 09 20 20 20 3b 3b 20 62 79 20 name).. ;; by
9770: 67 65 74 74 69 6e 67 20 74 68 65 20 74 65 73 74 getting the test
9780: 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 s with matching
9790: 6e 61 6d 65 20 77 65 20 61 72 65 20 6c 6f 6f 6b name we are look
97a0: 69 6e 67 20 6f 6e 6c 79 20 61 74 20 74 68 65 20 ing only at the
97b0: 6d 61 74 63 68 69 6e 67 20 74 65 73 74 20 0a 09 matching test ..
97c0: 20 20 20 3b 3b 20 61 6e 64 20 72 65 6c 61 74 65 ;; and relate
97d0: 64 20 73 75 62 20 69 74 65 6d 73 0a 09 20 20 20 d sub items..
97e0: 28 6c 65 74 20 28 28 74 65 73 74 73 20 20 20 20 (let ((tests
97f0: 20 20 20 20 20 20 20 20 20 28 64 62 2d 67 65 74 (db-get
9800: 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 -tests-for-run d
9810: 62 20 72 75 6e 2d 69 64 20 77 61 69 74 6f 6e 74 b run-id waitont
9820: 65 73 74 2d 6e 61 6d 65 20 23 66 20 27 28 29 20 est-name #f '()
9830: 27 28 29 29 29 0a 09 09 20 28 65 76 65 72 2d 73 '()))... (ever-s
9840: 65 65 6e 20 20 20 20 20 20 20 20 20 23 66 29 0a een #f).
9850: 09 09 20 28 70 61 72 65 6e 74 2d 77 61 69 74 6f .. (parent-waito
9860: 6e 2d 6d 65 74 20 23 66 29 0a 09 09 20 28 69 74 n-met #f)... (it
9870: 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 20 20 em-waiton-met
9880: 23 66 29 29 0a 09 20 20 20 20 20 28 66 6f 72 2d #f)).. (for-
9890: 65 61 63 68 20 0a 09 20 20 20 20 20 20 28 6c 61 each .. (la
98a0: 6d 62 64 61 20 28 74 65 73 74 29 0a 09 09 3b 3b mbda (test)...;;
98b0: 20 28 69 66 20 28 65 71 75 61 6c 3f 20 77 61 69 (if (equal? wai
98c0: 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 28 64 62 tontest-name (db
98d0: 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 :test-get-testna
98e0: 6d 65 20 74 65 73 74 29 29 20 3b 3b 20 62 79 20 me test)) ;; by
98f0: 64 65 66 69 6e 74 69 6f 6e 20 74 68 69 73 20 68 defintion this h
9900: 61 64 20 62 65 74 74 65 72 20 62 65 20 74 72 75 ad better be tru
9910: 65 20 2e 2e 2e 0a 09 09 28 6c 65 74 2a 20 28 28 e ......(let* ((
9920: 73 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 state
9930: 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 (db:test-get-s
9940: 74 61 74 65 20 74 65 73 74 29 29 0a 09 09 20 20 tate test))...
9950: 20 20 20 20 20 28 73 74 61 74 75 73 20 20 20 20 (status
9960: 20 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 (db:test
9970: 2d 67 65 74 2d 73 74 61 74 75 73 20 74 65 73 74 -get-status test
9980: 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 74 65 ))... (ite
9990: 6d 2d 70 61 74 68 20 20 20 20 20 20 20 20 20 28 m-path (
99a0: 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d db:test-get-item
99b0: 2d 70 61 74 68 20 74 65 73 74 29 29 0a 09 09 20 -path test))...
99c0: 20 20 20 20 20 20 28 69 73 2d 63 6f 6d 70 6c 65 (is-comple
99d0: 74 65 64 20 20 20 20 20 20 28 65 71 75 61 6c 3f ted (equal?
99e0: 20 73 74 61 74 65 20 22 43 4f 4d 50 4c 45 54 45 state "COMPLETE
99f0: 44 22 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 D"))... (i
9a00: 73 2d 6f 6b 20 20 20 20 20 20 20 20 20 20 20 20 s-ok
9a10: 20 28 6d 65 6d 62 65 72 20 73 74 61 74 75 73 20 (member status
9a20: 27 28 22 50 41 53 53 22 20 22 57 41 52 4e 22 20 '("PASS" "WARN"
9a30: 22 43 48 45 43 4b 22 20 22 57 41 49 56 45 44 22 "CHECK" "WAIVED"
9a40: 29 29 29 0a 09 09 20 20 20 20 20 20 20 28 73 61 )))... (sa
9a50: 6d 65 2d 69 74 65 6d 70 61 74 68 20 20 20 20 20 me-itempath
9a60: 28 65 71 75 61 6c 3f 20 72 65 66 2d 69 74 65 6d (equal? ref-item
9a70: 2d 70 61 74 68 20 69 74 65 6d 2d 70 61 74 68 29 -path item-path)
9a80: 29 29 0a 09 09 20 20 28 73 65 74 21 20 65 76 65 ))... (set! eve
9a90: 72 2d 73 65 65 6e 20 23 74 29 0a 09 09 20 20 28 r-seen #t)... (
9aa0: 63 6f 6e 64 0a 09 09 20 20 20 3b 3b 20 63 61 73 cond... ;; cas
9ab0: 65 20 31 2c 20 6e 6f 6e 2d 69 74 65 6d 20 28 70 e 1, non-item (p
9ac0: 61 72 65 6e 74 20 74 65 73 74 29 20 69 73 20 0a arent test) is .
9ad0: 09 09 20 20 20 28 28 61 6e 64 20 28 65 71 75 61 .. ((and (equa
9ae0: 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 22 29 l? item-path "")
9af0: 20 3b 3b 20 74 68 69 73 20 69 73 20 74 68 65 20 ;; this is the
9b00: 70 61 72 65 6e 74 20 74 65 73 74 0a 09 09 09 20 parent test....
9b10: 69 73 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 is-completed....
9b20: 20 69 73 2d 6f 6b 29 0a 09 09 20 20 20 20 28 73 is-ok)... (s
9b30: 65 74 21 20 70 61 72 65 6e 74 2d 77 61 69 74 6f et! parent-waito
9b40: 6e 2d 6d 65 74 20 23 74 29 29 0a 09 09 20 20 20 n-met #t))...
9b50: 28 28 61 6e 64 20 73 61 6d 65 2d 69 74 65 6d 70 ((and same-itemp
9b60: 61 74 68 0a 09 09 09 20 69 73 2d 63 6f 6d 70 6c ath.... is-compl
9b70: 65 74 65 64 0a 09 09 09 20 69 73 2d 6f 6b 29 0a eted.... is-ok).
9b80: 09 09 20 20 20 20 28 73 65 74 21 20 69 74 65 6d .. (set! item
9b90: 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 -waiton-met #t))
9ba0: 29 29 29 0a 09 20 20 20 20 20 20 74 65 73 74 73 ))).. tests
9bb0: 29 0a 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 ).. (if (not
9bc0: 20 28 6f 72 20 70 61 72 65 6e 74 2d 77 61 69 74 (or parent-wait
9bd0: 6f 6e 2d 6d 65 74 20 69 74 65 6d 2d 77 61 69 74 on-met item-wait
9be0: 6f 6e 2d 6d 65 74 29 29 0a 09 09 20 28 73 65 74 on-met))... (set
9bf0: 21 20 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 ! result (cons w
9c00: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 aitontest-name r
9c10: 65 73 75 6c 74 29 29 29 0a 09 20 20 20 20 20 3b esult))).. ;
9c20: 3b 20 69 66 20 74 68 65 20 74 65 73 74 20 69 73 ; if the test is
9c30: 20 6e 6f 74 20 66 6f 75 6e 64 20 74 68 65 6e 20 not found then
9c40: 63 6c 65 61 72 6c 79 20 74 68 65 20 77 61 69 74 clearly the wait
9c50: 6f 6e 20 69 73 20 6e 6f 74 20 6d 65 74 2e 2e 2e on is not met...
9c60: 0a 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 .. (if (not
9c70: 65 76 65 72 2d 73 65 65 6e 29 28 73 65 74 21 20 ever-seen)(set!
9c80: 72 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 result (cons wai
9c90: 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 tontest-name res
9ca0: 75 6c 74 29 29 29 29 29 0a 09 77 61 69 74 6f 6e ult)))))..waiton
9cb0: 73 29 0a 20 20 20 20 20 20 28 64 65 6c 65 74 65 s). (delete
9cc0: 2d 64 75 70 6c 69 63 61 74 65 73 20 72 65 73 75 -duplicates resu
9cd0: 6c 74 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d lt))))..;;======
9ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9cf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d20: 0a 3b 3b 20 45 78 74 72 61 63 74 20 6f 64 73 20 .;; Extract ods
9d30: 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 62 file from the db
9d40: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
9d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 75 =========..;; ru
9d90: 6e 73 70 61 74 74 20 69 73 20 61 20 63 6f 6d 6d nspatt is a comm
9da0: 61 20 64 65 6c 69 6d 69 74 65 64 20 6c 69 73 74 a delimited list
9db0: 20 6f 66 20 72 75 6e 20 70 61 74 74 65 72 6e 73 of run patterns
9dc0: 0a 3b 3b 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 .;; keypatt-alis
9dd0: 74 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 2a t must contain *
9de0: 61 6c 6c 2a 20 6b 65 79 73 20 77 69 74 68 20 61 all* keys with a
9df0: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 74 n associated pat
9e00: 74 65 72 6e 3a 20 27 28 20 28 22 4b 45 59 31 22 tern: '( ("KEY1"
9e10: 20 22 25 22 29 20 2e 2e 20 29 0a 28 64 65 66 69 "%") .. ).(defi
9e20: 6e 65 20 28 64 62 3a 65 78 74 72 61 63 74 2d 6f ne (db:extract-o
9e30: 64 73 2d 66 69 6c 65 20 64 62 20 6f 75 74 70 75 ds-file db outpu
9e40: 74 66 69 6c 65 20 6b 65 79 70 61 74 74 2d 61 6c tfile keypatt-al
9e50: 69 73 74 20 72 75 6e 73 70 61 74 74 20 70 61 74 ist runspatt pat
9e60: 68 6d 6f 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 hmod). (let* ((
9e70: 6b 65 79 73 73 74 72 20 20 28 73 74 72 69 6e 67 keysstr (string
9e80: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 -intersperse (ma
9e90: 70 20 63 61 72 20 6b 65 79 70 61 74 74 2d 61 6c p car keypatt-al
9ea0: 69 73 74 29 20 22 2c 22 29 29 0a 09 20 28 6b 65 ist) ",")).. (ke
9eb0: 79 71 72 79 20 20 20 28 73 74 72 69 6e 67 2d 69 yqry (string-i
9ec0: 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 ntersperse (map
9ed0: 28 6c 61 6d 62 64 61 20 28 70 29 28 63 6f 6e 63 (lambda (p)(conc
9ee0: 20 28 63 61 72 20 70 29 20 22 20 4c 49 4b 45 20 (car p) " LIKE
9ef0: 3f 20 22 29 29 20 6b 65 79 70 61 74 74 2d 61 6c ? ")) keypatt-al
9f00: 69 73 74 29 20 22 20 41 4e 44 20 22 29 29 0a 09 ist) " AND "))..
9f10: 20 28 6e 75 6d 6b 65 79 73 20 20 28 6c 65 6e 67 (numkeys (leng
9f20: 74 68 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 th keypatt-alist
9f30: 29 29 0a 09 20 28 74 65 73 74 2d 69 64 73 20 27 )).. (test-ids '
9f40: 28 29 29 0a 09 20 28 77 69 6e 64 6f 77 73 20 20 ()).. (windows
9f50: 28 61 6e 64 20 70 61 74 68 6d 6f 64 20 28 73 75 (and pathmod (su
9f60: 62 73 74 72 69 6e 67 2d 69 6e 64 65 78 20 22 5c bstring-index "\
9f70: 5c 22 20 70 61 74 68 6d 6f 64 29 29 29 0a 09 20 \" pathmod)))..
9f80: 28 74 65 6d 70 64 69 72 20 20 28 63 6f 6e 63 20 (tempdir (conc
9f90: 22 2f 74 6d 70 2f 22 20 28 63 75 72 72 65 6e 74 "/tmp/" (current
9fa0: 2d 75 73 65 72 2d 6e 61 6d 65 29 20 22 2f 22 20 -user-name) "/"
9fb0: 72 75 6e 73 70 61 74 74 20 22 5f 22 20 28 72 61 runspatt "_" (ra
9fc0: 6e 64 6f 6d 20 31 30 30 30 30 29 20 22 5f 22 20 ndom 10000) "_"
9fd0: 28 63 75 72 72 65 6e 74 2d 70 72 6f 63 65 73 73 (current-process
9fe0: 2d 69 64 29 29 29 0a 09 20 28 72 75 6e 73 68 65 -id))).. (runshe
9ff0: 61 64 65 72 20 28 61 70 70 65 6e 64 20 28 6c 69 ader (append (li
a000: 73 74 20 22 52 75 6e 20 49 64 22 20 22 52 75 6e st "Run Id" "Run
a010: 6e 61 6d 65 22 29 20 3b 20 30 20 31 0a 09 09 09 name") ; 0 1....
a020: 20 20 20 20 20 28 6d 61 70 20 63 61 72 20 6b 65 (map car ke
a030: 79 70 61 74 74 2d 61 6c 69 73 74 29 20 20 20 3b ypatt-alist) ;
a040: 20 2b 20 4e 20 3d 20 6c 65 6e 67 74 68 20 6b 65 + N = length ke
a050: 79 70 61 74 74 2d 61 6c 69 73 74 0a 09 09 09 20 ypatt-alist....
a060: 20 20 20 20 28 6c 69 73 74 20 22 54 65 73 74 6e (list "Testn
a070: 61 6d 65 22 20 20 20 20 20 20 20 20 20 20 3b 20 ame" ;
a080: 32 0a 09 09 09 09 20 20 20 22 49 74 65 6d 20 50 2..... "Item P
a090: 61 74 68 22 20 20 20 20 20 20 20 20 20 3b 20 33 ath" ; 3
a0a0: 20 0a 09 09 09 09 20 20 20 22 44 65 73 63 72 69 ..... "Descri
a0b0: 70 74 69 6f 6e 22 20 20 20 20 20 20 20 3b 20 34 ption" ; 4
a0c0: 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 65 22 ..... "State"
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 35 ; 5
a0e0: 20 0a 09 09 09 09 20 20 20 22 53 74 61 74 75 73 ..... "Status
a0f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 36 " ; 6
a100: 20 20 0a 09 09 09 09 20 20 20 22 46 69 6e 61 6c ..... "Final
a110: 20 4c 6f 67 22 20 20 20 20 20 20 20 20 20 3b 20 Log" ;
a120: 37 20 0a 09 09 09 09 20 20 20 22 52 75 6e 20 44 7 ..... "Run D
a130: 75 72 61 74 69 6f 6e 22 20 20 20 20 20 20 3b 20 uration" ;
a140: 38 20 0a 09 09 09 09 20 20 20 22 57 68 65 6e 20 8 ..... "When
a150: 52 75 6e 22 20 20 20 20 20 20 20 20 20 20 3b 20 Run" ;
a160: 39 20 0a 09 09 09 09 20 20 20 22 54 61 67 73 22 9 ..... "Tags"
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
a180: 31 30 0a 09 09 09 09 20 20 20 22 52 75 6e 20 4f 10..... "Run O
a190: 77 6e 65 72 22 20 20 20 20 20 20 20 20 20 3b 20 wner" ;
a1a0: 31 31 0a 09 09 09 09 20 20 20 22 43 6f 6d 6d 65 11..... "Comme
a1b0: 6e 74 22 20 20 20 20 20 20 20 20 20 20 20 3b 20 nt" ;
a1c0: 31 32 0a 09 09 09 09 20 20 20 22 41 75 74 68 6f 12..... "Autho
a1d0: 72 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 r" ;
a1e0: 31 33 0a 09 09 09 09 20 20 20 22 54 65 73 74 20 13..... "Test
a1f0: 4f 77 6e 65 72 22 20 20 20 20 20 20 20 20 3b 20 Owner" ;
a200: 31 34 0a 09 09 09 09 20 20 20 22 52 65 76 69 65 14..... "Revie
a210: 77 65 64 22 20 20 20 20 20 20 20 20 20 20 3b 20 wed" ;
a220: 31 35 0a 09 09 09 09 20 20 20 22 44 69 73 6b 66 15..... "Diskf
a230: 72 65 65 22 20 20 20 20 20 20 20 20 20 20 3b 20 ree" ;
a240: 31 36 0a 09 09 09 09 20 20 20 22 55 6e 61 6d 65 16..... "Uname
a250: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 " ;
a260: 31 37 0a 09 09 09 09 20 20 20 22 52 75 6e 64 69 17..... "Rundi
a270: 72 22 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 r" ;
a280: 31 38 0a 09 09 09 09 20 20 20 22 48 6f 73 74 22 18..... "Host"
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
a2a0: 31 39 0a 09 09 09 09 20 20 20 22 43 70 75 20 4c 19..... "Cpu L
a2b0: 6f 61 64 22 20 20 20 20 20 20 20 20 20 20 3b 20 oad" ;
a2c0: 32 30 0a 09 09 09 09 20 20 20 29 29 29 0a 09 20 20..... )))..
a2d0: 28 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 72 (results (list r
a2e0: 75 6e 73 68 65 61 64 65 72 29 29 09 09 09 20 0a unsheader))... .
a2f0: 09 20 28 74 65 73 74 64 61 74 61 2d 68 65 61 64 . (testdata-head
a300: 65 72 20 28 6c 69 73 74 20 22 52 75 6e 20 49 64 er (list "Run Id
a310: 22 20 22 54 65 73 74 6e 61 6d 65 22 20 22 49 74 " "Testname" "It
a320: 65 6d 20 50 61 74 68 22 20 22 43 61 74 65 67 6f em Path" "Catego
a330: 72 79 22 20 22 56 61 72 69 61 62 6c 65 22 20 22 ry" "Variable" "
a340: 56 61 6c 75 65 22 20 22 45 78 70 65 63 74 65 64 Value" "Expected
a350: 22 20 22 54 6f 6c 22 20 22 55 6e 69 74 73 22 20 " "Tol" "Units"
a360: 22 53 74 61 74 75 73 22 20 22 43 6f 6d 6d 65 6e "Status" "Commen
a370: 74 22 29 29 0a 09 20 28 6d 61 69 6e 71 72 79 20 t")).. (mainqry
a380: 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 0a 20 20 (conc "SELECT.
a390: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 74 65 t.te
a3a0: 73 74 6e 61 6d 65 2c 72 2e 69 64 2c 72 75 6e 6e stname,r.id,runn
a3b0: 61 6d 65 2c 22 20 6b 65 79 73 73 74 72 20 22 2c ame," keysstr ",
a3c0: 74 2e 74 65 73 74 6e 61 6d 65 2c 0a 20 20 20 20 t.testname,.
a3d0: 20 20 20 20 20 20 20 20 20 20 74 2e 69 74 65 6d t.item
a3e0: 5f 70 61 74 68 2c 74 6d 2e 64 65 73 63 72 69 70 _path,tm.descrip
a3f0: 74 69 6f 6e 2c 74 2e 73 74 61 74 65 2c 74 2e 73 tion,t.state,t.s
a400: 74 61 74 75 73 2c 0a 20 20 20 20 20 20 20 20 20 tatus,.
a410: 20 20 20 20 20 66 69 6e 61 6c 5f 6c 6f 67 66 2c final_logf,
a420: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 20 0a 20 run_duration, .
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
a440: 66 74 69 6d 65 28 27 25 6d 2f 25 64 2f 25 59 20 ftime('%m/%d/%Y
a450: 25 48 3a 25 4d 3a 25 53 27 2c 64 61 74 65 74 69 %H:%M:%S',dateti
a460: 6d 65 28 74 2e 65 76 65 6e 74 5f 74 69 6d 65 2c me(t.event_time,
a470: 27 75 6e 69 78 65 70 6f 63 68 27 29 2c 27 6c 6f 'unixepoch'),'lo
a480: 63 61 6c 74 69 6d 65 27 29 2c 0a 20 20 20 20 20 caltime'),.
a490: 20 20 20 20 20 20 20 20 20 74 6d 2e 74 61 67 73 tm.tags
a4a0: 2c 72 2e 6f 77 6e 65 72 2c 74 2e 63 6f 6d 6d 65 ,r.owner,t.comme
a4b0: 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 nt,.
a4c0: 20 20 61 75 74 68 6f 72 2c 0a 20 20 20 20 20 20 author,.
a4d0: 20 20 20 20 20 20 20 20 74 6d 2e 6f 77 6e 65 72 tm.owner
a4e0: 2c 72 65 76 69 65 77 65 64 2c 0a 20 20 20 20 20 ,reviewed,.
a4f0: 20 20 20 20 20 20 20 20 20 64 69 73 6b 66 72 65 diskfre
a500: 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c 0a e,uname,rundir,.
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f ho
a520: 73 74 2c 63 70 75 6c 6f 61 64 0a 20 20 20 20 20 st,cpuload.
a530: 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74 FROM test
a540: 73 20 41 53 20 74 20 4a 4f 49 4e 20 72 75 6e 73 s AS t JOIN runs
a550: 20 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 AS r ON t.run_i
a560: 64 3d 72 2e 69 64 20 4a 4f 49 4e 20 74 65 73 74 d=r.id JOIN test
a570: 5f 6d 65 74 61 20 41 53 20 74 6d 20 4f 4e 20 74 _meta AS tm ON t
a580: 6d 2e 74 65 73 74 6e 61 6d 65 3d 74 2e 74 65 73 m.testname=t.tes
a590: 74 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 tname.
a5a0: 20 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 20 WHERE runname
a5b0: 4c 49 4b 45 20 3f 20 41 4e 44 20 22 20 6b 65 79 LIKE ? AND " key
a5c0: 71 72 79 20 22 3b 22 29 29 29 0a 20 20 20 20 28 qry ";"))). (
a5d0: 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 55 debug:print 2 "U
a5e0: 73 69 6e 67 20 22 20 74 65 6d 70 64 69 72 20 22 sing " tempdir "
a5f0: 20 66 6f 72 20 63 6f 6e 73 74 72 75 63 74 69 6e for constructin
a600: 67 20 74 68 65 20 6f 64 73 20 66 69 6c 65 2e 20 g the ods file.
a610: 6b 65 79 71 72 79 3a 20 22 20 6b 65 79 71 72 79 keyqry: " keyqry
a620: 20 22 20 6b 65 79 73 74 72 3a 20 22 20 6b 65 79 " keystr: " key
a630: 73 73 74 72 20 22 20 77 69 74 68 20 6b 65 79 73 sstr " with keys
a640: 3a 20 22 20 28 6d 61 70 20 63 61 64 72 20 6b 65 : " (map cadr ke
a650: 79 70 61 74 74 2d 61 6c 69 73 74 29 0a 09 09 20 ypatt-alist)...
a660: 22 5c 6e 20 20 20 20 20 20 6d 61 69 6e 71 72 79 "\n mainqry
a670: 3a 20 22 20 6d 61 69 6e 71 72 79 29 0a 20 20 20 : " mainqry).
a680: 20 3b 3b 20 22 45 78 70 65 63 74 65 64 20 56 61 ;; "Expected Va
a690: 6c 75 65 22 0a 20 20 20 20 3b 3b 20 22 56 61 6c lue". ;; "Val
a6a0: 75 65 20 46 6f 75 6e 64 22 0a 20 20 20 20 3b 3b ue Found". ;;
a6b0: 20 22 54 6f 6c 65 72 61 6e 63 65 22 0a 20 20 20 "Tolerance".
a6c0: 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 3a (apply sqlite3:
a6d0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 for-each-row..
a6e0: 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 2d 69 (lambda (test-i
a6f0: 64 20 2e 20 62 29 0a 09 20 20 20 20 20 28 73 65 d . b).. (se
a700: 74 21 20 74 65 73 74 2d 69 64 73 20 28 63 6f 6e t! test-ids (con
a710: 73 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 s test-id test-i
a720: 64 73 29 29 20 20 20 3b 3b 20 74 65 73 74 2d 69 ds)) ;; test-i
a730: 64 20 69 73 20 6e 6f 77 20 74 65 73 74 6e 61 6d d is now testnam
a740: 65 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 65 e.. (set! re
a750: 73 75 6c 74 73 20 28 61 70 70 65 6e 64 20 72 65 sults (append re
a760: 73 75 6c 74 73 20 3b 3b 20 6e 6f 74 65 2c 20 64 sults ;; note, d
a770: 72 6f 70 20 74 68 65 20 74 65 73 74 2d 69 64 0a rop the test-id.
a780: 09 09 09 09 20 20 20 28 6c 69 73 74 0a 09 09 09 .... (list....
a790: 09 20 20 20 20 28 69 66 20 70 61 74 68 6d 6f 64 . (if pathmod
a7a0: 0a 09 09 09 09 09 28 6c 65 74 2a 20 28 28 76 62 ......(let* ((vb
a7b0: 20 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 76 (apply v
a7c0: 65 63 74 6f 72 20 62 29 29 0a 09 09 09 09 09 20 ector b))......
a7d0: 20 20 20 20 20 20 28 6b 65 79 76 61 6c 73 20 20 (keyvals
a7e0: 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 69 20 20 (let loop ((i
a7f0: 20 20 30 29 0a 09 09 09 09 09 09 09 09 20 20 20 0).........
a800: 20 20 28 72 65 73 20 27 28 29 29 29 0a 09 09 09 (res '()))....
a810: 09 09 09 09 20 20 20 20 28 69 66 20 28 3e 3d 20 .... (if (>=
a820: 69 20 6e 75 6d 6b 65 79 73 29 0a 09 09 09 09 09 i numkeys)......
a830: 09 09 09 72 65 73 0a 09 09 09 09 09 09 09 09 28 ...res.........(
a840: 6c 6f 6f 70 20 28 2b 20 69 20 31 29 0a 09 09 09 loop (+ i 1)....
a850: 09 09 09 09 09 20 20 20 20 20 20 28 61 70 70 65 ..... (appe
a860: 6e 64 20 72 65 73 20 28 6c 69 73 74 20 28 76 65 nd res (list (ve
a870: 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 69 ctor-ref vb (+ i
a880: 20 32 29 29 29 29 29 29 29 29 0a 09 09 09 09 09 2))))))))......
a890: 20 20 20 20 20 20 20 28 72 75 6e 6e 61 6d 65 20 (runname
a8a0: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 (vector-ref vb
a8b0: 20 31 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 1))......
a8c0: 20 28 74 65 73 74 6e 61 6d 65 20 20 28 76 65 63 (testname (vec
a8d0: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 32 tor-ref vb (+ 2
a8e0: 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 numkeys))).....
a8f0: 09 20 20 20 20 20 20 20 28 69 74 65 6d 2d 70 61 . (item-pa
a900: 74 68 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 th (vector-ref v
a910: 62 20 28 2b 20 20 33 20 6e 75 6d 6b 65 79 73 29 b (+ 3 numkeys)
a920: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
a930: 66 69 6e 61 6c 2d 6c 6f 67 20 28 76 65 63 74 6f final-log (vecto
a940: 72 2d 72 65 66 20 76 62 20 28 2b 20 20 37 20 6e r-ref vb (+ 7 n
a950: 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 20 umkeys)))......
a960: 20 20 20 20 20 20 28 72 75 6e 2d 64 69 72 20 20 (run-dir
a970: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 (vector-ref vb
a980: 28 2b 20 31 38 20 6e 75 6d 6b 65 79 73 29 29 29 (+ 18 numkeys)))
a990: 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 6c 6f ...... (lo
a9a0: 67 2d 66 70 61 74 68 20 28 63 6f 6e 63 20 72 75 g-fpath (conc ru
a9b0: 6e 2d 64 69 72 20 22 2f 22 20 20 66 69 6e 61 6c n-dir "/" final
a9c0: 2d 6c 6f 67 29 29 29 20 3b 3b 20 28 73 74 72 69 -log))) ;; (stri
a9d0: 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b ng-intersperse k
a9e0: 65 79 76 61 6c 73 20 22 2f 22 29 20 22 2f 22 20 eyvals "/") "/"
a9f0: 74 65 73 74 6e 61 6d 65 20 22 2f 22 20 69 74 65 testname "/" ite
aa00: 6d 2d 70 61 74 68 20 22 2f 22 0a 09 09 09 09 09 m-path "/"......
aa10: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 (debug:print 4
aa20: 20 22 6c 6f 67 3a 20 22 20 6c 6f 67 2d 66 70 61 "log: " log-fpa
aa30: 74 68 20 22 20 65 78 69 73 74 73 3a 20 22 20 28 th " exists: " (
aa40: 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c 6f 67 file-exists? log
aa50: 2d 66 70 61 74 68 29 29 0a 09 09 09 09 09 20 20 -fpath))......
aa60: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 62 20 (vector-set! vb
aa70: 28 2b 20 37 20 6e 75 6d 6b 65 79 73 29 20 28 69 (+ 7 numkeys) (i
aa80: 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 f (file-exists?
aa90: 6c 6f 67 2d 66 70 61 74 68 29 0a 09 09 09 09 09 log-fpath)......
aaa0: 09 09 09 09 20 20 20 20 28 6c 65 74 20 28 28 6e .... (let ((n
aab0: 65 77 70 61 74 68 20 28 63 6f 6e 63 20 70 61 74 ewpath (conc pat
aac0: 68 6d 6f 64 20 22 2f 22 0a 09 09 09 09 09 09 09 hmod "/"........
aad0: 09 09 09 09 09 20 28 73 74 72 69 6e 67 2d 69 6e ..... (string-in
aae0: 74 65 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c tersperse keyval
aaf0: 73 20 22 2f 22 29 0a 09 09 09 09 09 09 09 09 09 s "/")..........
ab00: 09 09 09 20 22 2f 22 20 72 75 6e 6e 61 6d 65 20 ... "/" runname
ab10: 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 2f 22 "/" testname "/"
ab20: 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 28 69 ............. (i
ab30: 66 20 28 73 74 72 69 6e 67 3d 3f 20 69 74 65 6d f (string=? item
ab40: 2d 70 61 74 68 20 22 22 29 20 22 22 20 28 63 6f -path "") "" (co
ab50: 6e 63 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 68 nc "/" item-path
ab60: 29 29 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 )).............
ab70: 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 0a 09 09 09 final-log)))....
ab80: 09 09 09 09 09 09 20 20 20 20 20 20 3b 3b 20 66 ...... ;; f
ab90: 6f 72 20 6e 6f 77 20 74 68 72 6f 77 20 61 77 61 or now throw awa
aba0: 79 20 6e 65 77 70 61 74 68 20 61 6e 64 20 75 73 y newpath and us
abb0: 65 20 74 68 65 20 6c 6f 67 2d 66 70 61 74 68 20 e the log-fpath
abc0: 63 6f 6e 63 27 64 20 77 69 74 68 20 70 61 74 68 conc'd with path
abd0: 6d 6f 64 0a 09 09 09 09 09 09 09 09 09 20 20 20 mod..........
abe0: 20 20 20 28 73 65 74 21 20 6e 65 77 70 61 74 68 (set! newpath
abf0: 20 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 6c (conc pathmod l
ac00: 6f 67 2d 66 70 61 74 68 29 29 0a 09 09 09 09 09 og-fpath))......
ac10: 09 09 09 09 20 20 20 20 20 20 28 69 66 20 77 69 .... (if wi
ac20: 6e 64 6f 77 73 20 28 73 74 72 69 6e 67 2d 74 72 ndows (string-tr
ac30: 61 6e 73 6c 61 74 65 20 6e 65 77 70 61 74 68 20 anslate newpath
ac40: 22 2f 22 20 22 5c 5c 22 29 20 6e 65 77 70 61 74 "/" "\\") newpat
ac50: 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 h))..........
ac60: 20 28 69 66 20 28 3e 20 2a 76 65 72 62 6f 73 69 (if (> *verbosi
ac70: 74 79 2a 20 31 29 0a 09 09 09 09 09 09 09 09 09 ty* 1)..........
ac80: 09 28 63 6f 6e 63 20 66 69 6e 61 6c 2d 6c 6f 67 .(conc final-log
ac90: 20 22 20 6e 6f 74 2d 66 6f 75 6e 64 22 29 0a 09 " not-found")..
aca0: 09 09 09 09 09 09 09 09 09 22 22 29 29 29 0a 09 ........."")))..
acb0: 09 09 09 09 20 20 28 76 65 63 74 6f 72 2d 3e 6c .... (vector->l
acc0: 69 73 74 20 76 62 29 29 0a 09 09 09 09 09 62 29 ist vb))......b)
acd0: 29 29 29 29 0a 09 20 20 20 64 62 0a 09 20 20 20 )))).. db..
ace0: 6d 61 69 6e 71 72 79 0a 09 20 20 20 72 75 6e 73 mainqry.. runs
acf0: 70 61 74 74 20 28 6d 61 70 20 63 61 64 72 20 6b patt (map cadr k
ad00: 65 79 70 61 74 74 2d 61 6c 69 73 74 29 29 0a 20 eypatt-alist)).
ad10: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
ad20: 32 20 22 46 6f 75 6e 64 20 22 20 28 6c 65 6e 67 2 "Found " (leng
ad30: 74 68 20 74 65 73 74 2d 69 64 73 29 20 22 20 72 th test-ids) " r
ad40: 65 63 6f 72 64 73 22 29 0a 20 20 20 20 28 73 65 ecords"). (se
ad50: 74 21 20 72 65 73 75 6c 74 73 20 28 6c 69 73 74 t! results (list
ad60: 20 28 63 6f 6e 73 20 22 52 75 6e 73 22 20 72 65 (cons "Runs" re
ad70: 73 75 6c 74 73 29 29 29 0a 20 20 20 20 3b 3b 20 sults))). ;;
ad80: 6e 6f 77 2c 20 66 6f 72 20 65 61 63 68 20 74 65 now, for each te
ad90: 73 74 2c 20 63 6f 6c 6c 65 63 74 20 74 68 65 20 st, collect the
ada0: 74 65 73 74 5f 64 61 74 61 20 69 6e 66 6f 20 61 test_data info a
adb0: 6e 64 20 61 64 64 20 61 20 6e 65 77 20 73 68 65 nd add a new she
adc0: 65 74 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 et. (for-each
add0: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 74 . (lambda (t
ade0: 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 20 28 est-id). (
adf0: 6c 65 74 20 28 28 74 65 73 74 2d 64 61 74 61 20 let ((test-data
ae00: 28 6c 69 73 74 20 74 65 73 74 64 61 74 61 2d 68 (list testdata-h
ae10: 65 61 64 65 72 29 29 0a 09 20 20 20 20 20 28 63 eader)).. (c
ae20: 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 23 66 urr-test-name #f
ae30: 29 29 0a 09 20 28 73 71 6c 69 74 65 33 3a 66 6f )).. (sqlite3:fo
ae40: 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 28 6c r-each-row.. (l
ae50: 61 6d 62 64 61 20 28 72 75 6e 2d 69 64 20 74 65 ambda (run-id te
ae60: 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 stname item-path
ae70: 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 category variab
ae80: 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 le value expecte
ae90: 64 20 74 6f 6c 20 75 6e 69 74 73 20 73 74 61 74 d tol units stat
aea0: 75 73 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 20 20 us comment)..
aeb0: 20 28 73 65 74 21 20 63 75 72 72 2d 74 65 73 74 (set! curr-test
aec0: 2d 6e 61 6d 65 20 74 65 73 74 6e 61 6d 65 29 0a -name testname).
aed0: 09 20 20 20 20 28 73 65 74 21 20 74 65 73 74 2d . (set! test-
aee0: 64 61 74 61 20 28 61 70 70 65 6e 64 20 74 65 73 data (append tes
aef0: 74 2d 64 61 74 61 20 28 6c 69 73 74 20 28 6c 69 t-data (list (li
af00: 73 74 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 st run-id testna
af10: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 61 74 me item-path cat
af20: 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 20 76 egory variable v
af30: 61 6c 75 65 20 65 78 70 65 63 74 65 64 20 74 6f alue expected to
af40: 6c 20 75 6e 69 74 73 20 73 74 61 74 75 73 20 63 l units status c
af50: 6f 6d 6d 65 6e 74 29 29 29 29 29 0a 09 20 20 64 omment))))).. d
af60: 62 20 0a 09 20 20 3b 3b 20 22 53 45 4c 45 43 54 b .. ;; "SELECT
af70: 20 72 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 run_id,testname
af80: 2c 69 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 67 ,item_path,categ
af90: 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 2e ory,variable,td.
afa0: 76 61 6c 75 65 20 41 53 20 76 61 6c 75 65 2c 65 value AS value,e
afb0: 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 xpected,tol,unit
afc0: 73 2c 74 64 2e 73 74 61 74 75 73 20 41 53 20 73 s,td.status AS s
afd0: 74 61 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 tatus,td.comment
afe0: 20 41 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d AS comment FROM
aff0: 20 74 65 73 74 5f 64 61 74 61 20 41 53 20 74 64 test_data AS td
b000: 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 INNER JOIN test
b010: 73 20 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 s ON tests.id=td
b020: 2e 74 65 73 74 5f 69 64 20 57 48 45 52 45 20 74 .test_id WHERE t
b030: 65 73 74 5f 69 64 3d 3f 3b 22 0a 09 20 20 22 53 est_id=?;".. "S
b040: 45 4c 45 43 54 20 72 75 6e 5f 69 64 2c 74 65 73 ELECT run_id,tes
b050: 74 6e 61 6d 65 2c 69 74 65 6d 5f 70 61 74 68 2c tname,item_path,
b060: 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c category,variabl
b070: 65 2c 74 64 2e 76 61 6c 75 65 20 41 53 20 76 61 e,td.value AS va
b080: 6c 75 65 2c 74 64 2e 65 78 70 65 63 74 65 64 2c lue,td.expected,
b090: 74 64 2e 74 6f 6c 2c 74 64 2e 75 6e 69 74 73 2c td.tol,td.units,
b0a0: 74 64 2e 73 74 61 74 75 73 20 41 53 20 73 74 61 td.status AS sta
b0b0: 74 75 73 2c 74 64 2e 63 6f 6d 6d 65 6e 74 20 41 tus,td.comment A
b0c0: 53 20 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 S comment FROM t
b0d0: 65 73 74 5f 64 61 74 61 20 41 53 20 74 64 20 49 est_data AS td I
b0e0: 4e 4e 45 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 NNER JOIN tests
b0f0: 4f 4e 20 74 65 73 74 73 2e 69 64 3d 74 64 2e 74 ON tests.id=td.t
b100: 65 73 74 5f 69 64 20 57 48 45 52 45 20 74 65 73 est_id WHERE tes
b110: 74 6e 61 6d 65 3d 3f 3b 22 0a 09 20 20 74 65 73 tname=?;".. tes
b120: 74 2d 69 64 29 0a 09 20 28 69 66 20 63 75 72 72 t-id).. (if curr
b130: 2d 74 65 73 74 2d 6e 61 6d 65 0a 09 20 20 20 20 -test-name..
b140: 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 20 28 (set! results (
b150: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 28 append results (
b160: 6c 69 73 74 20 28 63 6f 6e 73 20 63 75 72 72 2d list (cons curr-
b170: 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 2d 64 test-name test-d
b180: 61 74 61 29 29 29 29 29 0a 09 20 29 29 0a 20 20 ata))))).. )).
b190: 20 20 20 28 73 6f 72 74 20 28 64 65 6c 65 74 65 (sort (delete
b1a0: 2d 64 75 70 6c 69 63 61 74 65 73 20 74 65 73 74 -duplicates test
b1b0: 2d 69 64 73 29 20 73 74 72 69 6e 67 3c 3d 29 29 -ids) string<=))
b1c0: 0a 20 20 20 20 28 73 79 73 74 65 6d 20 28 63 6f . (system (co
b1d0: 6e 63 20 22 6d 6b 64 69 72 20 2d 70 20 22 20 74 nc "mkdir -p " t
b1e0: 65 6d 70 64 69 72 29 29 0a 20 20 20 20 3b 3b 20 empdir)). ;;
b1f0: 28 70 70 20 72 65 73 75 6c 74 73 29 0a 20 20 20 (pp results).
b200: 20 28 6f 64 73 3a 6c 69 73 74 2d 3e 6f 64 73 20 (ods:list->ods
b210: 0a 20 20 20 20 20 74 65 6d 70 64 69 72 0a 20 20 . tempdir.
b220: 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 2d 6d (if (string-m
b230: 61 74 63 68 20 28 72 65 67 65 78 70 20 22 5e 5b atch (regexp "^[
b240: 2f 7e 5d 2b 2e 2a 22 29 20 6f 75 74 70 75 74 66 /~]+.*") outputf
b250: 69 6c 65 29 20 3b 3b 20 66 75 6c 6c 20 70 61 74 ile) ;; full pat
b260: 68 3f 0a 09 20 6f 75 74 70 75 74 66 69 6c 65 0a h?.. outputfile.
b270: 09 20 28 62 65 67 69 6e 0a 09 20 20 20 28 64 65 . (begin.. (de
b280: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 bug:print 0 "WAR
b290: 4e 49 4e 47 3a 20 70 61 74 68 20 67 69 76 65 6e NING: path given
b2a0: 2c 20 22 20 6f 75 74 70 75 74 66 69 6c 65 20 22 , " outputfile "
b2b0: 20 69 73 20 72 65 6c 61 74 69 76 65 2c 20 70 72 is relative, pr
b2c0: 65 66 69 78 69 6e 67 20 77 69 74 68 20 63 75 72 efixing with cur
b2d0: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 22 29 rent directory")
b2e0: 0a 09 20 20 20 28 63 6f 6e 63 20 28 63 75 72 72 .. (conc (curr
b2f0: 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 20 22 ent-directory) "
b300: 2f 22 20 6f 75 74 70 75 74 66 69 6c 65 29 29 29 /" outputfile)))
b310: 0a 20 20 20 20 20 72 65 73 75 6c 74 73 29 0a 20 . results).
b320: 20 20 20 3b 3b 20 62 72 75 74 61 6c 20 63 6c 65 ;; brutal cle
b330: 61 6e 20 75 70 0a 20 20 20 20 28 73 79 73 74 65 an up. (syste
b340: 6d 20 22 72 6d 20 2d 72 66 20 74 65 6d 70 64 69 m "rm -rf tempdi
b350: 72 22 29 29 29 0a 0a 3b 3b 20 28 64 62 3a 65 78 r")))..;; (db:ex
b360: 74 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 20 64 tract-ods-file d
b370: 62 20 22 6f 75 74 70 75 74 66 69 6c 65 2e 6f 64 b "outputfile.od
b380: 73 22 20 27 28 28 22 73 79 73 6e 61 6d 65 22 20 s" '(("sysname"
b390: 22 25 22 29 28 22 66 73 6e 61 6d 65 22 20 22 25 "%")("fsname" "%
b3a0: 22 29 28 22 64 61 74 61 70 61 74 68 22 20 22 25 ")("datapath" "%
b3b0: 22 29 29 20 22 25 22 29 0a 0a 0a 3b 3b 3d 3d 3d ")) "%")...;;===
b3c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b3d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b3e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b3f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b400: 3d 3d 3d 0a 3b 3b 20 52 45 4d 4f 54 45 20 44 42 ===.;; REMOTE DB
b410: 20 41 43 43 45 53 53 20 56 49 41 20 52 50 43 0a ACCESS VIA RPC.
b420: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
b430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b460: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 28 64 65 ========..;; (de
b470: 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 76 61 fine (rdb:get-va
b480: 72 20 64 62 20 76 61 72 29 0a 3b 3b 20 28 64 65 r db var).;; (de
b490: 66 69 6e 65 20 28 72 64 62 3a 73 65 74 2d 76 61 fine (rdb:set-va
b4a0: 72 20 64 62 20 76 61 72 20 76 61 6c 29 0a 3b 3b r db var val).;;
b4b0: 20 28 64 65 66 69 6e 65 20 28 72 64 62 2d 67 65 (define (rdb-ge
b4c0: 74 2d 6b 65 79 73 20 64 62 29 0a 3b 3b 20 28 64 t-keys db).;; (d
b4d0: 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 76 efine (rdb:get-v
b4e0: 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 20 72 alue-by-header r
b4f0: 6f 77 20 68 65 61 64 65 72 20 66 69 65 6c 64 29 ow header field)
b500: 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 72 75 .;; (define (rru
b510: 6e 73 3a 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 ns:get-std-run-f
b520: 69 65 6c 64 73 20 6b 65 79 73 20 72 65 6d 66 69 ields keys remfi
b530: 65 6c 64 73 29 0a 3b 3b 20 28 64 65 66 69 6e 65 elds).;; (define
b540: 20 28 72 64 62 3a 67 65 74 2d 72 75 6e 73 20 64 (rdb:get-runs d
b550: 62 20 72 75 6e 70 61 74 74 20 63 6f 75 6e 74 20 b runpatt count
b560: 6f 66 66 73 65 74 20 6b 65 79 70 61 74 74 73 29 offset keypatts)
b570: 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 .;; (define (rdb
b580: 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 64 62 :get-num-runs db
b590: 20 72 75 6e 70 61 74 74 29 0a 3b 3b 20 28 64 65 runpatt).;; (de
b5a0: 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d 72 75 fine (rdb:get-ru
b5b0: 6e 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 n-info db run-id
b5c0: 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 ).;; (define (rd
b5d0: 62 3a 73 65 74 2d 63 6f 6d 6d 65 6e 74 2d 66 6f b:set-comment-fo
b5e0: 72 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 r-run db run-id
b5f0: 63 6f 6d 6d 65 6e 74 29 0a 3b 3b 20 28 64 65 66 comment).;; (def
b600: 69 6e 65 20 28 72 64 62 3a 64 65 6c 65 74 65 2d ine (rdb:delete-
b610: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 29 0a 3b run db run-id).;
b620: 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 75 ; (define (rdb:u
b630: 70 64 61 74 65 2d 72 75 6e 2d 65 76 65 6e 74 5f pdate-run-event_
b640: 74 69 6d 65 20 64 62 20 72 75 6e 2d 69 64 29 0a time db run-id).
b650: 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 2d ;; (define (rdb-
b660: 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 get-tests-for-ru
b670: 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 n db run-id test
b680: 70 61 74 74 20 69 74 65 6d 70 61 74 74 20 73 74 patt itempatt st
b690: 61 74 65 73 20 73 74 61 74 75 73 65 73 29 0a 3b ates statuses).;
b6a0: 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 64 ; (define (rdb:d
b6b0: 65 6c 65 74 65 2d 74 65 73 74 2d 73 74 65 70 2d elete-test-step-
b6c0: 72 65 63 6f 72 64 73 20 64 62 20 72 75 6e 2d 69 records db run-i
b6d0: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
b6e0: 64 61 74 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 dat).;; (define
b6f0: 28 72 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 (rdb:delete-test
b700: 2d 72 65 63 6f 72 64 73 20 64 62 20 74 65 73 74 -records db test
b710: 2d 69 64 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 -id)..(define (r
b720: 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 db:set-tests-sta
b730: 74 65 2d 73 74 61 74 75 73 20 64 62 20 72 75 6e te-status db run
b740: 2d 69 64 20 74 65 73 74 6e 61 6d 65 73 20 63 75 -id testnames cu
b750: 72 72 73 74 61 74 65 20 63 75 72 72 73 74 61 74 rrstate currstat
b760: 75 73 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 us newstate news
b770: 74 61 74 75 73 29 0a 20 20 28 69 66 20 2a 72 75 tatus). (if *ru
b780: 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 nremote*. (
b790: 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 let ((host (vect
b7a0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
b7b0: 65 2a 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 e* 0)).. (por
b7c0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
b7d0: 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 unremote* 1)))..
b7e0: 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 ((rpc:procedure
b7f0: 27 72 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 'rdb:set-tests-s
b800: 74 61 74 65 2d 73 74 61 74 75 73 20 68 6f 73 74 tate-status host
b810: 20 70 6f 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 port).. run-id
b820: 74 65 73 74 6e 61 6d 65 73 20 63 75 72 72 73 74 testnames currst
b830: 61 74 65 20 63 75 72 72 73 74 61 74 75 73 20 6e ate currstatus n
b840: 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 ewstate newstatu
b850: 73 29 29 0a 20 20 20 20 20 20 28 64 62 3a 73 65 s)). (db:se
b860: 74 2d 74 65 73 74 73 2d 73 74 61 74 65 2d 73 74 t-tests-state-st
b870: 61 74 75 73 20 64 62 20 72 75 6e 2d 69 64 20 74 atus db run-id t
b880: 65 73 74 6e 61 6d 65 73 20 63 75 72 72 73 74 61 estnames currsta
b890: 74 65 20 63 75 72 72 73 74 61 74 75 73 20 6e 65 te currstatus ne
b8a0: 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 wstate newstatus
b8b0: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 )))..(define (rd
b8c0: 62 3a 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 b:teststep-set-s
b8d0: 74 61 74 75 73 21 20 64 62 20 72 75 6e 2d 69 64 tatus! db run-id
b8e0: 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 73 test-name tests
b8f0: 74 65 70 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 tep-name state-i
b900: 6e 20 73 74 61 74 75 73 2d 69 6e 20 69 74 65 6d n status-in item
b910: 64 61 74 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 dat comment logf
b920: 69 6c 65 29 0a 20 20 28 70 72 69 6e 74 20 22 74 ile). (print "t
b930: 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 eststep-set-stat
b940: 75 73 21 3a 22 20 20 72 75 6e 2d 69 64 20 74 65 us!:" run-id te
b950: 73 74 2d 6e 61 6d 65 20 74 65 73 74 73 74 65 70 st-name teststep
b960: 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 -name state-in s
b970: 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 64 61 74 tatus-in itemdat
b980: 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 comment logfile
b990: 29 0a 20 20 28 6c 65 74 20 28 28 69 74 65 6d 2d ). (let ((item-
b9a0: 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d path (item-list-
b9b0: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 29 >path itemdat)))
b9c0: 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d . (if *runrem
b9d0: 6f 74 65 2a 0a 09 28 6c 65 74 20 28 28 68 6f 73 ote*..(let ((hos
b9e0: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
b9f0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
ba00: 20 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 (port (vect
ba10: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
ba20: 65 2a 20 31 29 29 29 0a 09 20 20 28 28 72 70 63 e* 1))).. ((rpc
ba30: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
ba40: 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 teststep-set-sta
ba50: 74 75 73 21 20 68 6f 73 74 20 70 6f 72 74 29 0a tus! host port).
ba60: 09 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d . run-id test-
ba70: 6e 61 6d 65 20 74 65 73 74 73 74 65 70 2d 6e 61 name teststep-na
ba80: 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 me state-in stat
ba90: 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 us-in item-path
baa0: 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 comment logfile)
bab0: 0a 09 20 20 28 64 62 3a 74 65 73 74 73 74 65 70 .. (db:teststep
bac0: 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 -set-status! db
bad0: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
bae0: 20 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 teststep-name s
baf0: 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 tate-in status-i
bb00: 6e 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d n item-path comm
bb10: 65 6e 74 20 6c 6f 67 66 69 6c 65 29 29 29 29 29 ent logfile)))))
bb20: 0a 0a 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 ...;; (define (r
bb30: 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 73 2d db:delete-tests-
bb40: 69 6e 2d 73 74 61 74 65 20 64 62 20 72 75 6e 2d in-state db run-
bb50: 69 64 20 73 74 61 74 65 29 0a 3b 3b 20 28 64 65 id state).;; (de
bb60: 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 73 fine (rdb:test-s
bb70: 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 73 2d et-state-status-
bb80: 62 79 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 by-id db test-id
bb90: 20 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 newstate newsta
bba0: 74 75 73 20 6e 65 77 63 6f 6d 6d 65 6e 74 29 0a tus newcomment).
bbb0: 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a ;; (define (rdb:
bbc0: 67 65 74 2d 63 6f 75 6e 74 2d 74 65 73 74 73 2d get-count-tests-
bbd0: 72 75 6e 6e 69 6e 67 20 64 62 29 0a 3b 3b 20 28 running db).;; (
bbe0: 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 74 2d define (rdb:get-
bbf0: 63 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e count-tests-runn
bc00: 69 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 ing-in-jobgroup
bc10: 64 62 20 6a 6f 62 67 72 6f 75 70 29 0a 3b 3b 20 db jobgroup).;;
bc20: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 65 73 74 (define (rdb:est
bc30: 69 6d 61 74 65 64 2d 74 65 73 74 73 2d 72 65 6d imated-tests-rem
bc40: 61 69 6e 69 6e 67 20 64 62 20 72 75 6e 2d 69 64 aining db run-id
bc50: 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 ).;; (define (rd
bc60: 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 20 b:get-test-info
bc70: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 db run-id testna
bc80: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 3b 3b me item-path).;;
bc90: 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 67 65 (define (rdb:ge
bca0: 74 2d 74 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 t-test-data-by-i
bcb0: 64 20 64 62 20 74 65 73 74 2d 69 64 29 0a 3b 3b d db test-id).;;
bcc0: 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 65 (define (rdb:te
bcd0: 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 64 st-set-comment d
bce0: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d b run-id testnam
bcf0: 65 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d e item-path comm
bd00: 65 6e 74 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 ent).;; (define
bd10: 28 72 64 62 3a 74 65 73 74 2d 73 65 74 2d 72 75 (rdb:test-set-ru
bd20: 6e 64 69 72 21 20 64 62 20 72 75 6e 2d 69 64 20 ndir! db run-id
bd30: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 testname item-pa
bd40: 74 68 20 72 75 6e 64 69 72 29 0a 3b 3b 20 28 64 th rundir).;; (d
bd50: 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 2d efine (rdb:test-
bd60: 67 65 74 2d 70 61 74 68 73 2d 6d 61 74 63 68 69 get-paths-matchi
bd70: 6e 67 20 64 62 20 6b 65 79 6e 61 6d 65 73 20 74 ng db keynames t
bd80: 61 72 67 65 74 29 0a 3b 3b 20 28 64 65 66 69 6e arget).;; (defin
bd90: 65 20 28 72 64 62 3a 74 65 73 74 2d 67 65 74 2d e (rdb:test-get-
bda0: 74 65 73 74 2d 72 65 63 6f 72 64 73 2d 6d 61 74 test-records-mat
bdb0: 63 68 69 6e 67 20 64 62 20 6b 65 79 6e 61 6d 65 ching db keyname
bdc0: 73 20 74 61 72 67 65 74 29 0a 3b 3b 20 28 64 65 s target).;; (de
bdd0: 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 6d 65 fine (rdb:testme
bde0: 74 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 64 62 ta-get-record db
bdf0: 20 74 65 73 74 6e 61 6d 65 29 0a 3b 3b 20 28 64 testname).;; (d
be00: 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 6d efine (rdb:testm
be10: 65 74 61 2d 61 64 64 2d 72 65 63 6f 72 64 20 64 eta-add-record d
be20: 62 20 74 65 73 74 6e 61 6d 65 29 0a 3b 3b 20 28 b testname).;; (
be30: 64 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 74 define (rdb:test
be40: 6d 65 74 61 2d 75 70 64 61 74 65 2d 66 69 65 6c meta-update-fiel
be50: 64 20 64 62 20 74 65 73 74 6e 61 6d 65 20 66 69 d db testname fi
be60: 65 6c 64 20 76 61 6c 75 65 29 0a 3b 3b 20 28 64 eld value).;; (d
be70: 65 66 69 6e 65 20 28 72 64 62 3a 63 73 76 2d 3e efine (rdb:csv->
be80: 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 test-data db tes
be90: 74 2d 69 64 20 63 73 76 64 61 74 61 29 0a 3b 3b t-id csvdata).;;
bea0: 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 72 65 (define (rdb:re
beb0: 61 64 2d 74 65 73 74 2d 64 61 74 61 20 64 62 20 ad-test-data db
bec0: 74 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 test-id category
bed0: 70 61 74 74 29 0a 3b 3b 20 28 64 65 66 69 6e 65 patt).;; (define
bee0: 20 28 72 64 62 3a 6c 6f 61 64 2d 74 65 73 74 2d (rdb:load-test-
bef0: 64 61 74 61 20 64 62 20 72 75 6e 2d 69 64 20 74 data db run-id t
bf00: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 est-name itemdat
bf10: 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 ).;; (define (rd
bf20: 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c b:test-data-roll
bf30: 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 74 up db test-id st
bf40: 61 74 75 73 29 0a 3b 3b 20 28 64 65 66 69 6e 65 atus).;; (define
bf50: 20 28 72 64 62 3a 67 65 74 2d 70 72 65 76 2d 74 (rdb:get-prev-t
bf60: 6f 6c 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 ol-for-test db t
bf70: 65 73 74 2d 69 64 20 63 61 74 65 67 6f 72 79 20 est-id category
bf80: 76 61 72 69 61 62 6c 65 29 0a 3b 3b 20 28 64 65 variable).;; (de
bf90: 66 69 6e 65 20 28 72 64 62 3a 73 74 65 70 2d 67 fine (rdb:step-g
bfa0: 65 74 2d 74 69 6d 65 2d 61 73 2d 73 74 72 69 6e et-time-as-strin
bfb0: 67 20 76 65 63 29 0a 3b 3b 20 28 64 65 66 69 6e g vec).;; (defin
bfc0: 65 20 28 72 64 62 3a 67 65 74 2d 73 74 65 70 73 e (rdb:get-steps
bfd0: 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 65 73 -for-test db tes
bfe0: 74 2d 69 64 29 0a 3b 3b 20 28 64 65 66 69 6e 65 t-id).;; (define
bff0: 20 28 72 64 62 3a 67 65 74 2d 73 74 65 70 73 2d (rdb:get-steps-
c000: 74 61 62 6c 65 20 64 62 20 74 65 73 74 2d 69 64 table db test-id
c010: 29 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 ).;; (define (rd
c020: 62 2d 67 65 74 2d 70 72 65 72 65 71 73 2d 6e 6f b-get-prereqs-no
c030: 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 64 20 t-met db run-id
c040: 77 61 69 74 6f 6e 29 0a 3b 3b 20 28 64 65 66 69 waiton).;; (defi
c050: 6e 65 20 28 72 64 62 3a 67 65 74 2d 70 72 65 72 ne (rdb:get-prer
c060: 65 71 73 2d 6e 6f 74 2d 6d 65 74 20 64 62 20 72 eqs-not-met db r
c070: 75 6e 2d 69 64 20 77 61 69 74 6f 6e 73 20 72 65 un-id waitons re
c080: 66 2d 69 74 65 6d 2d 70 61 74 68 29 0a 3b 3b 20 f-item-path).;;
c090: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 65 78 74 (define (rdb:ext
c0a0: 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 20 64 62 ract-ods-file db
c0b0: 20 6f 75 74 70 75 74 66 69 6c 65 20 6b 65 79 70 outputfile keyp
c0c0: 61 74 74 2d 61 6c 69 73 74 20 72 75 6e 73 70 61 att-alist runspa
c0d0: 74 74 20 70 61 74 68 6d 6f 64 29 0a tt pathmod).