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 64 65 6c 65 (define (db:dele
4a00: 74 65 2d 74 65 73 74 73 2d 69 6e 2d 73 74 61 74 te-tests-in-stat
4a10: 65 20 64 62 20 72 75 6e 2d 69 64 20 73 74 61 74 e db run-id stat
4a20: 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 e). (sqlite3:ex
4a30: 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 45 ecute db "DELETE
4a40: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
4a50: 45 20 73 74 61 74 65 3d 3f 20 41 4e 44 20 72 75 E state=? AND ru
4a60: 6e 5f 69 64 3d 3f 3b 22 20 73 74 61 74 65 20 72 n_id=?;" state r
4a70: 75 6e 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 un-id))..(define
4a80: 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 (db:test-set-st
4a90: 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 69 64 ate-status-by-id
4aa0: 20 64 62 20 74 65 73 74 2d 69 64 20 6e 65 77 73 db test-id news
4ab0: 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 20 6e tate newstatus n
4ac0: 65 77 63 6f 6d 6d 65 6e 74 29 0a 20 20 28 69 66 ewcomment). (if
4ad0: 20 6e 65 77 73 74 61 74 65 20 20 20 28 73 71 6c newstate (sql
4ae0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
4af0: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
4b00: 54 20 73 74 61 74 65 3d 3f 20 20 20 57 48 45 52 T state=? WHER
4b10: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 E id=?;" newstat
4b20: 65 20 20 20 74 65 73 74 2d 69 64 29 29 0a 20 20 e test-id)).
4b30: 28 69 66 20 6e 65 77 73 74 61 74 75 73 20 20 28 (if newstatus (
4b40: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
4b50: 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 db "UPDATE tests
4b60: 20 53 45 54 20 73 74 61 74 75 73 3d 3f 20 20 57 SET status=? W
4b70: 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 HERE id=?;" news
4b80: 74 61 74 75 73 20 20 74 65 73 74 2d 69 64 29 29 tatus test-id))
4b90: 0a 20 20 28 69 66 20 6e 65 77 63 6f 6d 6d 65 6e . (if newcommen
4ba0: 74 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 t (sqlite3:execu
4bb0: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 te db "UPDATE te
4bc0: 73 74 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d sts SET comment=
4bd0: 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 6e ? WHERE id=?;" n
4be0: 65 77 63 6f 6d 6d 65 6e 74 20 74 65 73 74 2d 69 ewcomment test-i
4bf0: 64 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 d)))..(define (d
4c00: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 b:test-set-state
4c10: 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69 -status-by-run-i
4c20: 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 72 75 d-testname db ru
4c30: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
4c40: 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 20 tem-path status
4c50: 73 74 61 74 65 29 0a 20 20 28 73 71 6c 69 74 65 state). (sqlite
4c60: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
4c70: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
4c80: 74 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 2c tate=?,status=?,
4c90: 65 76 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 74 event_time=strft
4ca0: 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 ime('%s','now')
4cb0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
4cc0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
4cd0: 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 D item_path=?;"
4ce0: 0a 09 09 20 20 20 73 74 61 74 65 20 73 74 61 74 ... state stat
4cf0: 75 73 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e us run-id test-n
4d00: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a ame item-path)).
4d10: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 .(define (db:get
4d20: 2d 63 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e -count-tests-run
4d30: 6e 69 6e 67 20 64 62 29 0a 20 20 28 6c 65 74 20 ning db). (let
4d40: 28 28 72 65 73 20 30 29 29 0a 20 20 20 20 28 73 ((res 0)). (s
4d50: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
4d60: 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 row. (lambda
4d70: 20 28 63 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 (count).
4d80: 28 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 (set! res count)
4d90: 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 ). db. "
4da0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 SELECT count(id)
4db0: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
4dc0: 45 20 73 74 61 74 65 20 3d 20 27 52 55 4e 4e 49 E state = 'RUNNI
4dd0: 4e 47 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 NG' OR state = '
4de0: 4c 41 55 4e 43 48 45 44 27 20 4f 52 20 73 74 61 LAUNCHED' OR sta
4df0: 74 65 20 3d 20 27 52 45 4d 4f 54 45 48 4f 53 54 te = 'REMOTEHOST
4e00: 53 54 41 52 54 27 3b 22 29 0a 20 20 20 20 72 65 START';"). re
4e10: 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 s))..(define (db
4e20: 3a 67 65 74 2d 63 6f 75 6e 74 2d 74 65 73 74 73 :get-count-tests
4e30: 2d 72 75 6e 6e 69 6e 67 2d 69 6e 2d 6a 6f 62 67 -running-in-jobg
4e40: 72 6f 75 70 20 64 62 20 6a 6f 62 67 72 6f 75 70 roup db jobgroup
4e50: 29 0a 20 20 28 69 66 20 28 6e 6f 74 20 6a 6f 62 ). (if (not job
4e60: 67 72 6f 75 70 29 0a 20 20 20 20 20 20 30 20 3b group). 0 ;
4e70: 3b 20 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 ; . (let ((
4e80: 72 65 73 20 30 29 29 0a 09 28 73 71 6c 69 74 65 res 0))..(sqlite
4e90: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 3:for-each-row..
4ea0: 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 (lambda (count)
4eb0: 0a 09 20 20 20 28 73 65 74 21 20 72 65 73 20 63 .. (set! res c
4ec0: 6f 75 6e 74 29 29 0a 09 20 64 62 0a 09 20 22 53 ount)).. db.. "S
4ed0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 ELECT count(id)
4ee0: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
4ef0: 20 73 74 61 74 65 20 3d 20 27 52 55 4e 4e 49 4e state = 'RUNNIN
4f00: 47 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 4c G' OR state = 'L
4f10: 41 55 4e 43 48 45 44 27 20 4f 52 20 73 74 61 74 AUNCHED' OR stat
4f20: 65 20 3d 20 27 52 45 4d 4f 54 45 48 4f 53 54 53 e = 'REMOTEHOSTS
4f30: 54 41 52 54 27 0a 20 20 20 20 20 20 20 20 20 20 TART'.
4f40: 20 20 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 AND testname
4f50: 69 6e 20 28 53 45 4c 45 43 54 20 74 65 73 74 6e in (SELECT testn
4f60: 61 6d 65 20 46 52 4f 4d 20 74 65 73 74 5f 6d 65 ame FROM test_me
4f70: 74 61 20 57 48 45 52 45 20 6a 6f 62 67 72 6f 75 ta WHERE jobgrou
4f80: 70 3d 3f 3b 22 0a 09 20 6a 6f 62 67 72 6f 75 70 p=?;".. jobgroup
4f90: 29 0a 09 72 65 73 29 29 29 0a 0a 3b 3b 20 64 6f )..res)))..;; do
4fa0: 6e 65 20 77 69 74 68 20 72 75 6e 20 77 68 65 6e ne with run when
4fb0: 3a 0a 3b 3b 20 20 20 30 20 74 65 73 74 73 20 69 :.;; 0 tests i
4fc0: 6e 20 4c 41 55 4e 43 48 45 44 2c 20 4e 4f 54 5f n LAUNCHED, NOT_
4fd0: 53 54 41 52 54 45 44 2c 20 52 45 4d 4f 54 45 48 STARTED, REMOTEH
4fe0: 4f 53 54 53 54 41 52 54 2c 20 52 55 4e 4e 49 4e OSTSTART, RUNNIN
4ff0: 47 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 65 73 G.(define (db:es
5000: 74 69 6d 61 74 65 64 2d 74 65 73 74 73 2d 72 65 timated-tests-re
5010: 6d 61 69 6e 69 6e 67 20 64 62 20 72 75 6e 2d 69 maining db run-i
5020: 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 d). (let ((res
5030: 30 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 0)). (sqlite3
5040: 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 :for-each-row.
5050: 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e (lambda (coun
5060: 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 t). (set!
5070: 72 65 73 20 63 6f 75 6e 74 29 29 0a 20 20 20 20 res count)).
5080: 20 64 62 20 3b 3b 20 4e 42 2f 2f 20 4b 49 4c 4c db ;; NB// KILL
5090: 52 45 51 20 6d 65 61 6e 73 20 74 68 65 20 6a 6f REQ means the jo
50a0: 62 73 20 69 73 20 73 74 69 6c 6c 20 70 72 6f 62 bs is still prob
50b0: 61 62 6c 79 20 72 75 6e 6e 69 6e 67 0a 20 20 20 ably running.
50c0: 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 "SELECT count(
50d0: 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 20 57 id) FROM tests W
50e0: 48 45 52 45 20 73 74 61 74 65 20 69 6e 20 28 27 HERE state in ('
50f0: 4c 41 55 4e 43 48 45 44 27 2c 27 4e 4f 54 5f 53 LAUNCHED','NOT_S
5100: 54 41 52 54 45 44 27 2c 27 52 45 4d 4f 54 45 48 TARTED','REMOTEH
5110: 4f 53 54 53 54 41 52 54 27 2c 27 52 55 4e 4e 49 OSTSTART','RUNNI
5120: 4e 47 27 2c 27 4b 49 4c 4c 52 45 51 27 29 20 41 NG','KILLREQ') A
5130: 4e 44 20 72 75 6e 5f 69 64 3d 3f 3b 22 20 72 75 ND run_id=?;" ru
5140: 6e 2d 69 64 29 0a 20 20 20 20 72 65 73 29 29 0a n-id). res)).
5150: 0a 3b 3b 20 4e 42 2f 2f 20 53 79 6e 63 20 74 68 .;; NB// Sync th
5160: 69 73 20 77 69 74 68 20 72 75 6e 73 3a 67 65 74 is with runs:get
5170: 2d 74 65 73 74 2d 69 6e 66 6f 0a 28 64 65 66 69 -test-info.(defi
5180: 6e 65 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d ne (db:get-test-
5190: 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 info db run-id t
51a0: 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 estname item-pat
51b0: 68 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 h). (let ((res
51c0: 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 #f)). (sqlite
51d0: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 3:for-each-row.
51e0: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 (lambda (id
51f0: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
5200: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
5210: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
5220: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
5230: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
5240: 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f path run_duratio
5250: 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d n final_logf com
5260: 6d 65 6e 74 20 29 0a 20 20 20 20 20 20 20 28 73 ment ). (s
5270: 65 74 21 20 72 65 73 20 28 76 65 63 74 6f 72 20 et! res (vector
5280: 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 id run-id testna
5290: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
52a0: 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 event-time host
52b0: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
52c0: 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 uname rundir it
52d0: 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 em-path run_dura
52e0: 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 tion final_logf
52f0: 63 6f 6d 6d 65 6e 74 20 29 29 29 0a 20 20 20 20 comment ))).
5300: 20 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45 43 db . "SELEC
5310: 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 T id,run_id,test
5320: 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 name,state,statu
5330: 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 s,event_time,hos
5340: 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 t,cpuload,diskfr
5350: 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c ee,uname,rundir,
5360: 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 item_path,run_du
5370: 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 ration,final_log
5380: 66 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 f,comment FROM t
5390: 65 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 ests WHERE run_i
53a0: 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 d=? AND testname
53b0: 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 =? AND item_path
53c0: 3d 3f 3b 22 0a 20 20 20 20 20 72 75 6e 2d 69 64 =?;". run-id
53d0: 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 testname item-p
53e0: 61 74 68 29 0a 20 20 20 20 72 65 73 29 29 0a 0a ath). res))..
53f0: 3b 3b 20 47 65 74 20 74 65 73 74 20 64 61 74 61 ;; Get test data
5400: 20 75 73 69 6e 67 20 74 65 73 74 5f 69 64 0a 28 using test_id.(
5410: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 define (db:get-t
5420: 65 73 74 2d 64 61 74 61 2d 62 79 2d 69 64 20 64 est-data-by-id d
5430: 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 b test-id). (le
5440: 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 20 20 t ((res #f)).
5450: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
5460: 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c 61 6d ch-row. (lam
5470: 62 64 61 20 28 69 64 20 72 75 6e 2d 69 64 20 74 bda (id run-id t
5480: 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 estname state st
5490: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
54a0: 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 host cpuload dis
54b0: 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 kfree uname rund
54c0: 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e ir item-path run
54d0: 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f _duration final_
54e0: 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 logf comment).
54f0: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 (set! res (
5500: 76 65 63 74 6f 72 20 69 64 20 72 75 6e 2d 69 64 vector id run-id
5510: 20 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 testname state
5520: 73 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d status event-tim
5530: 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 e host cpuload d
5540: 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 iskfree uname ru
5550: 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 ndir item-path r
5560: 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 un_duration fina
5570: 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 29 l_logf comment))
5580: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
5590: 22 53 45 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 "SELECT id,run_i
55a0: 64 2c 74 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 d,testname,state
55b0: 2c 73 74 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 ,status,event_ti
55c0: 6d 65 2c 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c me,host,cpuload,
55d0: 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 diskfree,uname,r
55e0: 75 6e 64 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c undir,item_path,
55f0: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e run_duration,fin
5600: 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 al_logf,comment
5610: 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 FROM tests WHERE
5620: 20 69 64 3d 3f 3b 22 0a 20 20 20 20 20 74 65 73 id=?;". tes
5630: 74 2d 69 64 29 0a 20 20 20 20 72 65 73 29 29 0a t-id). res)).
5640: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 ..(define (db:te
5650: 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 64 st-set-comment d
5660: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
5670: 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d me item-path com
5680: 6d 65 6e 74 29 0a 20 20 28 73 71 6c 69 74 65 33 ment). (sqlite3
5690: 3a 65 78 65 63 75 74 65 20 0a 20 20 20 64 62 20 :execute . db
56a0: 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 . "UPDATE test
56b0: 73 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 s SET comment=?
56c0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
56d0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
56e0: 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a D item_path=?;".
56f0: 20 20 20 63 6f 6d 6d 65 6e 74 20 72 75 6e 2d 69 comment run-i
5700: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d d test-name item
5710: 2d 70 61 74 68 29 29 0a 0a 3b 3b 0a 28 64 65 66 -path))..;;.(def
5720: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 74 ine (db:test-set
5730: 2d 72 75 6e 64 69 72 21 20 64 62 20 72 75 6e 2d -rundir! db run-
5740: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
5750: 6d 2d 70 61 74 68 20 72 75 6e 64 69 72 29 0a 20 m-path rundir).
5760: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
5770: 65 20 0a 20 20 20 64 62 20 0a 20 20 20 22 55 50 e . db . "UP
5780: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 72 DATE tests SET r
5790: 75 6e 64 69 72 3d 3f 20 57 48 45 52 45 20 72 75 undir=? WHERE ru
57a0: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
57b0: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
57c0: 61 74 68 3d 3f 3b 22 0a 20 20 20 72 75 6e 64 69 ath=?;". rundi
57d0: 72 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 r run-id test-na
57e0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a me item-path))..
57f0: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
5800: 2d 73 65 74 2d 6c 6f 67 21 20 64 62 20 72 75 6e -set-log! db run
5810: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
5820: 65 6d 2d 70 61 74 68 20 6c 6f 67 66 29 0a 20 20 em-path logf).
5830: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
5840: 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 db "UPDATE test
5850: 73 20 53 45 54 20 66 69 6e 61 6c 5f 6c 6f 67 66 s SET final_logf
5860: 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d =? WHERE run_id=
5870: 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f ? AND testname=?
5880: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f AND item_path=?
5890: 3b 22 20 0a 09 09 20 20 20 6c 6f 67 66 20 72 75 ;" ... logf ru
58a0: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
58b0: 74 65 6d 2d 70 61 74 68 29 29 0a 0a 3b 3b 3d 3d tem-path))..;;==
58c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5900: 3d 3d 3d 3d 0a 3b 3b 20 4d 69 73 63 2e 20 74 65 ====.;; Misc. te
5910: 73 74 20 72 65 6c 61 74 65 64 20 71 75 65 72 69 st related queri
5920: 65 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d es.;;===========
5930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 ===========..(de
5970: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 67 65 fine (db:test-ge
5980: 74 2d 70 61 74 68 73 2d 6d 61 74 63 68 69 6e 67 t-paths-matching
5990: 20 64 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 db keynames tar
59a0: 67 65 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 get). (let* ((r
59b0: 65 73 20 27 28 29 29 0a 09 20 28 69 74 65 6d 70 es '()).. (itemp
59c0: 61 74 74 20 20 20 28 69 66 20 28 61 72 67 73 3a att (if (args:
59d0: 67 65 74 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 get-arg "-itempa
59e0: 74 74 22 29 28 61 72 67 73 3a 67 65 74 2d 61 72 tt")(args:get-ar
59f0: 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 20 22 g "-itempatt") "
5a00: 25 22 29 29 0a 09 20 28 74 65 73 74 70 61 74 74 %")).. (testpatt
5a10: 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 (if (args:get
5a20: 2d 61 72 67 20 22 2d 74 65 73 74 70 61 74 74 22 -arg "-testpatt"
5a30: 29 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 )(args:get-arg "
5a40: 2d 74 65 73 74 70 61 74 74 22 29 20 22 25 22 29 -testpatt") "%")
5a50: 29 0a 09 20 28 73 74 61 74 65 70 61 74 74 20 20 ).. (statepatt
5a60: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
5a70: 67 20 22 3a 73 74 61 74 65 22 29 20 20 20 28 61 g ":state") (a
5a80: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
5a90: 61 74 65 22 29 20 20 20 20 22 25 22 29 29 0a 09 ate") "%"))..
5aa0: 20 28 73 74 61 74 75 73 70 61 74 74 20 28 69 66 (statuspatt (if
5ab0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
5ac0: 3a 73 74 61 74 75 73 22 29 20 20 28 61 72 67 73 :status") (args
5ad0: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 75 :get-arg ":statu
5ae0: 73 22 29 20 20 20 22 25 22 29 29 0a 09 20 28 72 s") "%")).. (r
5af0: 75 6e 6e 61 6d 65 20 20 20 20 28 69 66 20 28 61 unname (if (a
5b00: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 rgs:get-arg ":ru
5b10: 6e 6e 61 6d 65 22 29 20 28 61 72 67 73 3a 67 65 nname") (args:ge
5b20: 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 t-arg ":runname"
5b30: 29 20 20 22 25 22 29 29 0a 09 20 28 6b 65 79 73 ) "%")).. (keys
5b40: 74 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 tr (string-inter
5b50: 73 70 65 72 73 65 20 0a 09 09 20 20 28 6d 61 70 sperse ... (map
5b60: 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 76 61 (lambda (key va
5b70: 6c 29 0a 09 09 09 20 28 63 6f 6e 63 20 22 72 2e l).... (conc "r.
5b80: 22 20 6b 65 79 20 22 20 6c 69 6b 65 20 27 22 20 " key " like '"
5b90: 76 61 6c 20 22 27 22 29 29 0a 09 09 20 20 20 20 val "'"))...
5ba0: 20 20 20 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 keynames ...
5bb0: 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 73 70 (string-sp
5bc0: 6c 69 74 20 74 61 72 67 65 74 20 22 2f 22 29 29 lit target "/"))
5bd0: 0a 09 09 20 20 22 20 41 4e 44 20 22 29 29 0a 09 ... " AND "))..
5be0: 20 28 71 72 79 73 74 72 20 28 63 6f 6e 63 20 22 (qrystr (conc "
5bf0: 53 45 4c 45 43 54 20 74 2e 72 75 6e 64 69 72 20 SELECT t.rundir
5c00: 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 74 20 FROM tests AS t
5c10: 49 4e 4e 45 52 20 4a 4f 49 4e 20 72 75 6e 73 20 INNER JOIN runs
5c20: 41 53 20 72 20 4f 4e 20 74 2e 72 75 6e 5f 69 64 AS r ON t.run_id
5c30: 3d 72 2e 69 64 20 57 48 45 52 45 20 22 0a 09 09 =r.id WHERE "...
5c40: 20 20 20 20 20 20 20 6b 65 79 73 74 72 20 22 20 keystr "
5c50: 41 4e 44 20 72 2e 72 75 6e 6e 61 6d 65 20 4c 49 AND r.runname LI
5c60: 4b 45 20 27 22 20 72 75 6e 6e 61 6d 65 20 22 27 KE '" runname "'
5c70: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 4c AND item_path L
5c80: 49 4b 45 20 27 22 20 69 74 65 6d 70 61 74 74 20 IKE '" itempatt
5c90: 22 27 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 20 "' AND testname
5ca0: 4c 49 4b 45 20 27 22 0a 09 09 20 20 20 20 20 20 LIKE '"...
5cb0: 20 74 65 73 74 70 61 74 74 20 22 27 20 41 4e 44 testpatt "' AND
5cc0: 20 74 2e 73 74 61 74 65 20 4c 49 4b 45 20 27 22 t.state LIKE '"
5cd0: 20 73 74 61 74 65 70 61 74 74 20 22 27 20 41 4e statepatt "' AN
5ce0: 44 20 74 2e 73 74 61 74 75 73 20 4c 49 4b 45 20 D t.status LIKE
5cf0: 27 22 20 73 74 61 74 75 73 70 61 74 74 20 0a 09 '" statuspatt ..
5d00: 09 20 20 20 20 20 20 20 22 27 4f 52 44 45 52 20 . "'ORDER
5d10: 42 59 20 74 2e 65 76 65 6e 74 5f 74 69 6d 65 20 BY t.event_time
5d20: 41 53 43 3b 22 29 29 29 0a 20 20 20 20 28 64 65 ASC;"))). (de
5d30: 62 75 67 3a 70 72 69 6e 74 20 33 20 22 71 72 79 bug:print 3 "qry
5d40: 73 74 72 3a 20 22 20 71 72 79 73 74 72 29 0a 20 str: " qrystr).
5d50: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
5d60: 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 each-row . (
5d70: 6c 61 6d 62 64 61 20 28 70 29 0a 20 20 20 20 20 lambda (p).
5d80: 20 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e (set! res (con
5d90: 73 20 70 20 72 65 73 29 29 29 0a 20 20 20 20 20 s p res))).
5da0: 64 62 20 0a 20 20 20 20 20 71 72 79 73 74 72 29 db . qrystr)
5db0: 0a 20 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 . res))..(def
5dc0: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 67 65 74 ine (db:test-get
5dd0: 2d 74 65 73 74 2d 72 65 63 6f 72 64 73 2d 6d 61 -test-records-ma
5de0: 74 63 68 69 6e 67 20 64 62 20 6b 65 79 6e 61 6d tching db keynam
5df0: 65 73 20 74 61 72 67 65 74 29 0a 20 20 28 6c 65 es target). (le
5e00: 74 2a 20 28 28 72 65 73 20 27 28 29 29 0a 09 20 t* ((res '())..
5e10: 28 69 74 65 6d 70 61 74 74 20 20 20 28 69 66 20 (itempatt (if
5e20: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "-
5e30: 69 74 65 6d 70 61 74 74 22 29 28 61 72 67 73 3a itempatt")(args:
5e40: 67 65 74 2d 61 72 67 20 22 2d 69 74 65 6d 70 61 get-arg "-itempa
5e50: 74 74 22 29 20 22 25 22 29 29 0a 09 20 28 74 65 tt") "%")).. (te
5e60: 73 74 70 61 74 74 20 20 20 28 69 66 20 28 61 72 stpatt (if (ar
5e70: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 73 gs:get-arg "-tes
5e80: 74 70 61 74 74 22 29 28 61 72 67 73 3a 67 65 74 tpatt")(args:get
5e90: 2d 61 72 67 20 22 2d 74 65 73 74 70 61 74 74 22 -arg "-testpatt"
5ea0: 29 20 22 25 22 29 29 0a 09 20 28 73 74 61 74 65 ) "%")).. (state
5eb0: 70 61 74 74 20 20 28 69 66 20 28 61 72 67 73 3a patt (if (args:
5ec0: 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 22 get-arg ":state"
5ed0: 29 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61 72 ) (args:get-ar
5ee0: 67 20 22 3a 73 74 61 74 65 22 29 20 20 20 20 22 g ":state") "
5ef0: 25 22 29 29 0a 09 20 28 73 74 61 74 75 73 70 61 %")).. (statuspa
5f00: 74 74 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 tt (if (args:get
5f10: 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 20 -arg ":status")
5f20: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
5f30: 3a 73 74 61 74 75 73 22 29 20 20 20 22 25 22 29 :status") "%")
5f40: 29 0a 09 20 28 72 75 6e 6e 61 6d 65 20 20 20 20 ).. (runname
5f50: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
5f60: 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 28 61 g ":runname") (a
5f70: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 rgs:get-arg ":ru
5f80: 6e 6e 61 6d 65 22 29 20 20 22 25 22 29 29 0a 09 nname") "%"))..
5f90: 20 28 6b 65 79 73 74 72 20 28 73 74 72 69 6e 67 (keystr (string
5fa0: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 0a 09 09 -intersperse ...
5fb0: 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 (map (lambda (
5fc0: 6b 65 79 20 76 61 6c 29 0a 09 09 09 20 28 63 6f key val).... (co
5fd0: 6e 63 20 22 72 2e 22 20 6b 65 79 20 22 20 6c 69 nc "r." key " li
5fe0: 6b 65 20 27 22 20 76 61 6c 20 22 27 22 29 29 0a ke '" val "'")).
5ff0: 09 09 20 20 20 20 20 20 20 6b 65 79 6e 61 6d 65 .. keyname
6000: 73 20 0a 09 09 20 20 20 20 20 20 20 28 73 74 72 s ... (str
6010: 69 6e 67 2d 73 70 6c 69 74 20 74 61 72 67 65 74 ing-split target
6020: 20 22 2f 22 29 29 0a 09 09 20 20 22 20 41 4e 44 "/"))... " AND
6030: 20 22 29 29 0a 09 20 28 71 72 79 73 74 72 20 28 ")).. (qrystr (
6040: 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 0a 20 20 conc "SELECT .
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6060: 20 20 20 20 20 20 20 20 20 20 74 2e 69 64 0a 20 t.id.
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6080: 20 20 20 20 20 20 20 20 20 20 20 74 2e 72 75 6e t.run
6090: 5f 69 64 20 20 20 20 20 0a 20 20 20 20 20 20 20 _id .
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60b0: 20 20 20 20 20 74 2e 74 65 73 74 6e 61 6d 65 20 t.testname
60c0: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
60e0: 2e 68 6f 73 74 20 20 20 20 20 20 20 0a 20 20 20 .host .
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6100: 20 20 20 20 20 20 20 20 20 74 2e 63 70 75 6c 6f t.cpulo
6110: 61 64 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 ad .
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6130: 20 20 20 74 2e 64 69 73 6b 66 72 65 65 20 20 20 t.diskfree
6140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6150: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 75 t.u
6160: 6e 61 6d 65 20 20 20 20 20 20 0a 20 20 20 20 20 name .
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6180: 20 20 20 20 20 20 20 74 2e 72 75 6e 64 69 72 20 t.rundir
6190: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 .
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61b0: 20 74 2e 73 68 6f 72 74 64 69 72 20 20 20 0a 20 t.shortdir .
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61d0: 20 20 20 20 20 20 20 20 20 20 20 74 2e 69 74 65 t.ite
61e0: 6d 5f 70 61 74 68 20 20 0a 20 20 20 20 20 20 20 m_path .
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6200: 20 20 20 20 20 74 2e 73 74 61 74 65 20 20 20 20 t.state
6210: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
6230: 2e 73 74 61 74 75 73 20 20 20 20 20 0a 20 20 20 .status .
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6250: 20 20 20 20 20 20 20 20 20 74 2e 61 74 74 65 6d t.attem
6260: 70 74 6e 75 6d 20 0a 20 20 20 20 20 20 20 20 20 ptnum .
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6280: 20 20 20 74 2e 66 69 6e 61 6c 5f 6c 6f 67 66 20 t.final_logf
6290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 6c t.l
62b0: 6f 67 64 61 74 20 20 20 20 20 0a 20 20 20 20 20 ogdat .
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62d0: 20 20 20 20 20 20 20 74 2e 72 75 6e 5f 64 75 72 t.run_dur
62e0: 61 74 69 6f 0a 20 20 20 20 20 20 20 20 20 20 20 atio.
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6300: 20 74 2e 63 6f 6d 6d 65 6e 74 20 20 20 20 0a 20 t.comment .
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6320: 20 20 20 20 20 20 20 20 20 20 20 74 2e 65 76 65 t.eve
6330: 6e 74 5f 74 69 6d 65 20 0a 20 20 20 20 20 20 20 nt_time .
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6350: 20 20 20 20 20 74 2e 66 61 69 6c 5f 63 6f 75 6e t.fail_coun
6360: 74 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t .
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
6380: 2e 70 61 73 73 5f 63 6f 75 6e 74 20 0a 20 20 20 .pass_count .
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63a0: 20 20 20 20 20 20 20 20 20 74 2e 61 72 63 68 69 t.archi
63b0: 76 65 64 20 20 20 0a 0a 0a 0a 20 46 52 4f 4d 20 ved .... FROM
63c0: 74 65 73 74 73 20 41 53 20 74 20 49 4e 4e 45 52 tests AS t INNER
63d0: 20 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 JOIN runs AS r
63e0: 4f 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 ON t.run_id=r.id
63f0: 20 57 48 45 52 45 20 22 0a 09 09 20 20 20 20 20 WHERE "...
6400: 20 20 6b 65 79 73 74 72 20 22 20 41 4e 44 20 72 keystr " AND r
6410: 2e 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 22 .runname LIKE '"
6420: 20 72 75 6e 6e 61 6d 65 20 22 27 20 41 4e 44 20 runname "' AND
6430: 69 74 65 6d 5f 70 61 74 68 20 4c 49 4b 45 20 27 item_path LIKE '
6440: 22 20 69 74 65 6d 70 61 74 74 20 22 27 20 41 4e " itempatt "' AN
6450: 44 20 74 65 73 74 6e 61 6d 65 20 4c 49 4b 45 20 D testname LIKE
6460: 27 22 0a 09 09 20 20 20 20 20 20 20 74 65 73 74 '"... test
6470: 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 74 patt "' AND t.st
6480: 61 74 65 20 4c 49 4b 45 20 27 22 20 73 74 61 74 ate LIKE '" stat
6490: 65 70 61 74 74 20 22 27 20 41 4e 44 20 74 2e 73 epatt "' AND t.s
64a0: 74 61 74 75 73 20 4c 49 4b 45 20 27 22 20 73 74 tatus LIKE '" st
64b0: 61 74 75 73 70 61 74 74 20 0a 09 09 20 20 20 20 atuspatt ...
64c0: 20 20 20 22 27 4f 52 44 45 52 20 42 59 20 74 2e "'ORDER BY t.
64d0: 65 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 event_time ASC;"
64e0: 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 ))). (debug:p
64f0: 72 69 6e 74 20 33 20 22 71 72 79 73 74 72 3a 20 rint 3 "qrystr:
6500: 22 20 71 72 79 73 74 72 29 0a 20 20 20 20 28 73 " qrystr). (s
6510: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
6520: 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 row . (lambd
6530: 61 20 28 70 29 0a 20 20 20 20 20 20 20 28 73 65 a (p). (se
6540: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 70 20 72 t! res (cons p r
6550: 65 73 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 es))). db .
6560: 20 20 20 20 71 72 79 73 74 72 29 0a 20 20 20 20 qrystr).
6570: 72 65 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 res))..(define (
6580: 64 62 3a 74 65 73 74 2d 75 70 64 61 74 65 2d 6d db:test-update-m
6590: 65 74 61 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d eta-info db run-
65a0: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
65b0: 6d 2d 70 61 74 68 20 6d 69 6e 75 74 65 73 20 63 m-path minutes c
65c0: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
65d0: 74 6d 70 66 72 65 65 29 0a 20 20 28 69 66 20 28 tmpfree). (if (
65e0: 6e 6f 74 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 not item-path).
65f0: 20 20 20 20 20 28 62 65 67 69 6e 20 28 64 65 62 (begin (deb
6600: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e ug:print 0 "WARN
6610: 49 4e 47 3a 20 49 54 45 4d 50 41 54 48 20 6e 6f ING: ITEMPATH no
6620: 74 20 73 65 74 2e 22 29 20 20 20 0a 09 20 20 20 t set.") ..
6630: 20 20 28 73 65 74 21 20 69 74 65 6d 2d 70 61 74 (set! item-pat
6640: 68 20 22 22 29 29 29 0a 20 20 28 73 71 6c 69 74 h ""))). (sqlit
6650: 65 33 3a 65 78 65 63 75 74 65 0a 20 20 20 64 62 e3:execute. db
6660: 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 . "UPDATE test
6670: 73 20 53 45 54 20 63 70 75 6c 6f 61 64 3d 3f 2c s SET cpuload=?,
6680: 64 69 73 6b 66 72 65 65 3d 3f 2c 72 75 6e 5f 64 diskfree=?,run_d
6690: 75 72 61 74 69 6f 6e 3d 3f 2c 73 74 61 74 65 3d uration=?,state=
66a0: 27 52 55 4e 4e 49 4e 47 27 20 57 48 45 52 45 20 'RUNNING' WHERE
66b0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
66c0: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d tname=? AND item
66d0: 5f 70 61 74 68 3d 3f 20 41 4e 44 20 73 74 61 74 _path=? AND stat
66e0: 65 20 4e 4f 54 20 49 4e 20 28 27 43 4f 4d 50 4c e NOT IN ('COMPL
66f0: 45 54 45 44 27 2c 27 4b 49 4c 4c 52 45 51 27 2c ETED','KILLREQ',
6700: 27 4b 49 4c 4c 45 44 27 29 3b 22 0a 20 20 20 63 'KILLED');". c
6710: 70 75 6c 6f 61 64 0a 20 20 20 64 69 73 6b 66 72 puload. diskfr
6720: 65 65 0a 20 20 20 6d 69 6e 75 74 65 73 0a 20 20 ee. minutes.
6730: 20 72 75 6e 2d 69 64 0a 20 20 20 74 65 73 74 2d run-id. test-
6740: 6e 61 6d 65 0a 20 20 20 69 74 65 6d 2d 70 61 74 name. item-pat
6750: 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 h))..(define (db
6760: 3a 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 :roll-up-pass-fa
6770: 69 6c 2d 63 6f 75 6e 74 73 20 64 62 20 72 75 6e il-counts db run
6780: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
6790: 65 6d 2d 70 61 74 68 20 73 74 61 74 75 73 29 0a em-path status).
67a0: 20 20 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 (if (and (not
67b0: 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 (equal? item-pat
67c0: 68 20 22 22 29 29 0a 09 20 20 20 28 6f 72 20 28 h "")).. (or (
67d0: 65 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 50 equal? status "P
67e0: 41 53 53 22 29 0a 09 20 20 20 20 20 20 20 28 65 ASS").. (e
67f0: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 57 41 qual? status "WA
6800: 52 4e 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 RN").. (eq
6810: 75 61 6c 3f 20 73 74 61 74 75 73 20 22 46 41 49 ual? status "FAI
6820: 4c 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 75 L").. (equ
6830: 61 6c 3f 20 73 74 61 74 75 73 20 22 57 41 49 56 al? status "WAIV
6840: 45 44 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 ED").. (eq
6850: 75 61 6c 3f 20 73 74 61 74 75 73 20 22 52 55 4e ual? status "RUN
6860: 4e 49 4e 47 22 29 29 29 0a 20 20 20 20 20 20 28 NING"))). (
6870: 62 65 67 69 6e 0a 09 28 73 71 6c 69 74 65 33 3a begin..(sqlite3:
6880: 65 78 65 63 75 74 65 20 0a 09 20 64 62 0a 09 20 execute .. db..
6890: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 0a 20 "UPDATE tests .
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 45 54 20 SET
68b0: 66 61 69 6c 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 fail_count=(SELE
68c0: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
68d0: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
68e0: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
68f0: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
6900: 61 74 68 20 21 3d 20 27 27 20 41 4e 44 20 73 74 ath != '' AND st
6910: 61 74 75 73 3d 27 46 41 49 4c 27 29 2c 0a 20 20 atus='FAIL'),.
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
6930: 61 73 73 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 ass_count=(SELEC
6940: 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d T count(id) FROM
6950: 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 6e tests WHERE run
6960: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 _id=? AND testna
6970: 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 me=? AND item_pa
6980: 74 68 20 21 3d 20 27 27 20 41 4e 44 20 28 73 74 th != '' AND (st
6990: 61 74 75 73 3d 27 50 41 53 53 27 20 4f 52 20 73 atus='PASS' OR s
69a0: 74 61 74 75 73 3d 27 57 41 52 4e 27 20 4f 52 20 tatus='WARN' OR
69b0: 73 74 61 74 75 73 3d 27 57 41 49 56 45 44 27 29 status='WAIVED')
69c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 57 ). W
69d0: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
69e0: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
69f0: 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 0a item_path='';".
6a00: 09 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 . run-id test-na
6a10: 6d 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e me run-id test-n
6a20: 61 6d 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d ame run-id test-
6a30: 6e 61 6d 65 29 0a 09 28 69 66 20 28 65 71 75 61 name)..(if (equa
6a40: 6c 3f 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49 l? status "RUNNI
6a50: 4e 47 22 29 20 3b 3b 20 72 75 6e 6e 69 6e 67 20 NG") ;; running
6a60: 74 61 6b 65 73 20 70 72 69 6f 72 69 74 79 20 6f takes priority o
6a70: 76 65 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 74 ver all other st
6a80: 61 74 65 73 2c 20 66 6f 72 63 65 20 74 68 65 20 ates, force the
6a90: 74 65 73 74 20 73 74 61 74 65 20 74 6f 20 52 55 test state to RU
6aa0: 4e 4e 49 4e 47 0a 09 20 20 20 20 28 73 71 6c 69 NNING.. (sqli
6ab0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
6ac0: 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 UPDATE tests SET
6ad0: 20 73 74 61 74 65 3d 3f 20 57 48 45 52 45 20 72 state=? WHERE r
6ae0: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 un_id=? AND test
6af0: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f name=? AND item_
6b00: 70 61 74 68 3d 27 27 3b 22 20 22 52 55 4e 4e 49 path='';" "RUNNI
6b10: 4e 47 22 20 72 75 6e 2d 69 64 20 74 65 73 74 2d NG" run-id test-
6b20: 6e 61 6d 65 29 0a 09 20 20 20 20 28 73 71 6c 69 name).. (sqli
6b30: 74 65 33 3a 65 78 65 63 75 74 65 0a 09 20 20 20 te3:execute..
6b40: 20 20 64 62 0a 09 20 20 20 20 20 22 55 50 44 41 db.. "UPDA
6b50: 54 45 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 TE tests.
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b70: 53 45 54 20 73 74 61 74 65 3d 43 41 53 45 20 57 SET state=CASE W
6b80: 48 45 4e 20 28 53 45 4c 45 43 54 20 63 6f 75 6e HEN (SELECT coun
6b90: 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 73 t(id) FROM tests
6ba0: 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 WHERE run_id=?
6bb0: 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 AND testname=? A
6bc0: 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20 ND item_path !=
6bd0: 27 27 20 41 4e 44 20 73 74 61 74 65 20 69 6e 20 '' AND state in
6be0: 28 27 52 55 4e 4e 49 4e 47 27 2c 27 4e 4f 54 5f ('RUNNING','NOT_
6bf0: 53 54 41 52 54 45 44 27 29 29 20 3e 20 30 20 54 STARTED')) > 0 T
6c00: 48 45 4e 20 0a 20 20 20 20 20 20 20 20 20 20 20 HEN .
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 '
6c20: 52 55 4e 4e 49 4e 47 27 0a 20 20 20 20 20 20 20 RUNNING'.
6c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c40: 45 4c 53 45 20 27 43 4f 4d 50 4c 45 54 45 44 27 ELSE 'COMPLETED'
6c50: 20 45 4e 44 2c 0a 20 20 20 20 20 20 20 20 20 20 END,.
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c70: 73 74 61 74 75 73 3d 43 41 53 45 20 57 48 45 4e status=CASE WHEN
6c80: 20 66 61 69 6c 5f 63 6f 75 6e 74 20 3e 20 30 20 fail_count > 0
6c90: 54 48 45 4e 20 27 46 41 49 4c 27 20 57 48 45 4e THEN 'FAIL' WHEN
6ca0: 20 70 61 73 73 5f 63 6f 75 6e 74 20 3e 20 30 20 pass_count > 0
6cb0: 41 4e 44 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 30 AND fail_count=0
6cc0: 20 54 48 45 4e 20 27 50 41 53 53 27 20 45 4c 53 THEN 'PASS' ELS
6cd0: 45 20 27 55 4e 4b 4e 4f 57 4e 27 20 45 4e 44 0a E 'UNKNOWN' END.
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6cf0: 20 20 20 20 20 20 20 57 48 45 52 45 20 72 75 6e WHERE run
6d00: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 _id=? AND testna
6d10: 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 me=? AND item_pa
6d20: 74 68 3d 27 27 3b 22 0a 09 20 20 20 20 20 72 75 th='';".. ru
6d30: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 72 n-id test-name r
6d40: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 un-id test-name)
6d50: 29 29 29 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d ))))...;;=======
6d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
6da0: 3b 3b 20 54 65 73 74 73 20 6d 65 74 61 20 64 61 ;; Tests meta da
6db0: 74 61 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ta.;;===========
6dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 ===========..;;
6e00: 72 65 61 64 20 74 68 65 20 72 65 63 6f 72 64 20 read the record
6e10: 67 69 76 65 6e 20 61 20 74 65 73 74 6e 61 6d 65 given a testname
6e20: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 .(define (db:tes
6e30: 74 6d 65 74 61 2d 67 65 74 2d 72 65 63 6f 72 64 tmeta-get-record
6e40: 20 64 62 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 db testname).
6e50: 28 6c 65 74 20 28 28 72 65 73 20 23 66 29 29 0a (let ((res #f)).
6e60: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 (sqlite3:for
6e70: 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 -each-row. (
6e80: 6c 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 6e lambda (id testn
6e90: 61 6d 65 20 61 75 74 68 6f 72 20 6f 77 6e 65 72 ame author owner
6ea0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 72 65 76 description rev
6eb0: 69 65 77 65 64 20 69 74 65 72 61 74 65 64 20 61 iewed iterated a
6ec0: 76 67 5f 72 75 6e 74 69 6d 65 20 61 76 67 5f 64 vg_runtime avg_d
6ed0: 69 73 6b 20 74 61 67 73 29 0a 20 20 20 20 20 20 isk tags).
6ee0: 20 28 73 65 74 21 20 72 65 73 20 28 76 65 63 74 (set! res (vect
6ef0: 6f 72 20 69 64 20 74 65 73 74 6e 61 6d 65 20 61 or id testname a
6f00: 75 74 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 uthor owner desc
6f10: 72 69 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 ription reviewed
6f20: 20 69 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 iterated avg_ru
6f30: 6e 74 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 ntime avg_disk t
6f40: 61 67 73 29 29 29 0a 20 20 20 20 20 64 62 20 22 ags))). db "
6f50: 53 45 4c 45 43 54 20 69 64 2c 74 65 73 74 6e 61 SELECT id,testna
6f60: 6d 65 2c 61 75 74 68 6f 72 2c 6f 77 6e 65 72 2c me,author,owner,
6f70: 64 65 73 63 72 69 70 74 69 6f 6e 2c 72 65 76 69 description,revi
6f80: 65 77 65 64 2c 69 74 65 72 61 74 65 64 2c 61 76 ewed,iterated,av
6f90: 67 5f 72 75 6e 74 69 6d 65 2c 61 76 67 5f 64 69 g_runtime,avg_di
6fa0: 73 6b 2c 74 61 67 73 20 46 52 4f 4d 20 74 65 73 sk,tags FROM tes
6fb0: 74 5f 6d 65 74 61 20 57 48 45 52 45 20 74 65 73 t_meta WHERE tes
6fc0: 74 6e 61 6d 65 3d 3f 3b 22 0a 20 20 20 20 20 74 tname=?;". t
6fd0: 65 73 74 6e 61 6d 65 29 0a 20 20 20 20 72 65 73 estname). res
6fe0: 29 29 0a 0a 3b 3b 20 63 72 65 61 74 65 20 61 20 ))..;; create a
6ff0: 6e 65 77 20 72 65 63 6f 72 64 20 66 6f 72 20 61 new record for a
7000: 20 67 69 76 65 6e 20 74 65 73 74 6e 61 6d 65 0a given testname.
7010: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
7020: 6d 65 74 61 2d 61 64 64 2d 72 65 63 6f 72 64 20 meta-add-record
7030: 64 62 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 28 db testname). (
7040: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
7050: 64 62 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 db "INSERT OR IG
7060: 4e 4f 52 45 20 49 4e 54 4f 20 74 65 73 74 5f 6d NORE INTO test_m
7070: 65 74 61 20 28 74 65 73 74 6e 61 6d 65 2c 61 75 eta (testname,au
7080: 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 thor,owner,descr
7090: 69 70 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c iption,reviewed,
70a0: 69 74 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e iterated,avg_run
70b0: 74 69 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 time,avg_disk,ta
70c0: 67 73 29 20 56 41 4c 55 45 53 20 28 3f 2c 27 27 gs) VALUES (?,''
70d0: 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c ,'','','','','',
70e0: 27 27 2c 27 27 29 3b 22 20 74 65 73 74 6e 61 6d '','');" testnam
70f0: 65 29 29 0a 0a 3b 3b 20 75 70 64 61 74 65 20 6f e))..;; update o
7100: 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74 6d 65 ne of the testme
7110: 74 61 20 66 69 65 6c 64 73 0a 28 64 65 66 69 6e ta fields.(defin
7120: 65 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 75 e (db:testmeta-u
7130: 70 64 61 74 65 2d 66 69 65 6c 64 20 64 62 20 74 pdate-field db t
7140: 65 73 74 6e 61 6d 65 20 66 69 65 6c 64 20 76 61 estname field va
7150: 6c 75 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a lue). (sqlite3:
7160: 65 78 65 63 75 74 65 20 64 62 20 28 63 6f 6e 63 execute db (conc
7170: 20 22 55 50 44 41 54 45 20 74 65 73 74 5f 6d 65 "UPDATE test_me
7180: 74 61 20 53 45 54 20 22 20 66 69 65 6c 64 20 22 ta SET " field "
7190: 3d 3f 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d =? WHERE testnam
71a0: 65 3d 3f 3b 22 29 20 76 61 6c 75 65 20 74 65 73 e=?;") value tes
71b0: 74 6e 61 6d 65 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d tname))..;;=====
71c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7200: 3d 0a 3b 3b 20 54 20 45 20 53 20 54 20 20 20 44 =.;; T E S T D
7210: 20 41 20 54 20 41 20 0a 3b 3b 3d 3d 3d 3d 3d 3d A T A .;;======
7220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7260: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 63 73 ..(define (db:cs
7270: 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 62 20 v->test-data db
7280: 74 65 73 74 2d 69 64 20 63 73 76 64 61 74 61 29 test-id csvdata)
7290: 0a 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 . (debug:print
72a0: 34 20 22 74 65 73 74 2d 69 64 20 22 20 74 65 73 4 "test-id " tes
72b0: 74 2d 69 64 20 22 2c 20 63 73 76 64 61 74 61 3a t-id ", csvdata:
72c0: 20 22 20 63 73 76 64 61 74 61 29 0a 20 20 28 6c " csvdata). (l
72d0: 65 74 20 28 28 63 73 76 6c 69 73 74 20 28 63 73 et ((csvlist (cs
72e0: 76 2d 3e 6c 69 73 74 20 28 6d 61 6b 65 2d 63 73 v->list (make-cs
72f0: 76 2d 72 65 61 64 65 72 0a 09 09 09 20 20 20 20 v-reader....
7300: 20 28 6f 70 65 6e 2d 69 6e 70 75 74 2d 73 74 72 (open-input-str
7310: 69 6e 67 20 63 73 76 64 61 74 61 29 0a 09 09 09 ing csvdata)....
7320: 20 20 20 20 20 27 28 28 73 74 72 69 70 2d 6c 65 '((strip-le
7330: 61 64 69 6e 67 2d 77 68 69 74 65 73 70 61 63 65 ading-whitespace
7340: 3f 20 23 74 29 0a 09 09 09 20 20 20 20 20 20 20 ? #t)....
7350: 28 73 74 72 69 70 2d 74 72 61 69 6c 69 6e 67 2d (strip-trailing-
7360: 77 68 69 74 65 73 70 61 63 65 3f 20 23 74 29 29 whitespace? #t))
7370: 20 29 29 29 29 20 3b 3b 20 28 63 73 76 2d 3e 6c )))) ;; (csv->l
7380: 69 73 74 20 63 73 76 64 61 74 61 29 29 29 0a 20 ist csvdata))).
7390: 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 (for-each .
73a0: 20 20 20 28 6c 61 6d 62 64 61 20 28 63 73 76 72 (lambda (csvr
73b0: 6f 77 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a ow). (let*
73c0: 20 28 28 70 61 64 64 65 64 2d 72 6f 77 20 20 28 ((padded-row (
73d0: 74 61 6b 65 20 28 61 70 70 65 6e 64 20 63 73 76 take (append csv
73e0: 72 6f 77 20 28 6c 69 73 74 20 23 66 20 23 66 20 row (list #f #f
73f0: 23 66 20 23 66 20 23 66 20 23 66 20 23 66 20 23 #f #f #f #f #f #
7400: 66 20 23 66 29 29 20 39 29 29 0a 09 20 20 20 20 f #f)) 9))..
7410: 20 20 28 63 61 74 65 67 6f 72 79 20 20 20 20 28 (category (
7420: 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d list-ref padded-
7430: 72 6f 77 20 30 29 29 0a 09 20 20 20 20 20 20 28 row 0)).. (
7440: 76 61 72 69 61 62 6c 65 20 20 20 20 28 6c 69 73 variable (lis
7450: 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 t-ref padded-row
7460: 20 31 29 29 0a 09 20 20 20 20 20 20 28 76 61 6c 1)).. (val
7470: 75 65 20 20 20 20 20 20 20 28 61 6e 79 2d 3e 6e ue (any->n
7480: 75 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 6c umber-if-possibl
7490: 65 20 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 e (list-ref padd
74a0: 65 64 2d 72 6f 77 20 32 29 29 29 0a 09 20 20 20 ed-row 2)))..
74b0: 20 20 20 28 65 78 70 65 63 74 65 64 20 20 20 20 (expected
74c0: 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 2d (any->number-if-
74d0: 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d 72 possible (list-r
74e0: 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 33 29 ef padded-row 3)
74f0: 29 29 0a 09 20 20 20 20 20 20 28 74 6f 6c 20 20 )).. (tol
7500: 20 20 20 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d (any->num
7510: 62 65 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 ber-if-possible
7520: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
7530: 2d 72 6f 77 20 34 29 29 29 20 3b 3b 20 3e 2c 20 -row 4))) ;; >,
7540: 3c 2c 20 3e 3d 2c 20 3c 3d 2c 20 6f 72 20 61 20 <, >=, <=, or a
7550: 6e 75 6d 62 65 72 0a 09 20 20 20 20 20 20 28 75 number.. (u
7560: 6e 69 74 73 20 20 20 20 20 20 20 28 6c 69 73 74 nits (list
7570: 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 -ref padded-row
7580: 35 29 29 0a 09 20 20 20 20 20 20 28 63 6f 6d 6d 5)).. (comm
7590: 65 6e 74 20 20 20 20 20 28 6c 69 73 74 2d 72 65 ent (list-re
75a0: 66 20 70 61 64 64 65 64 2d 72 6f 77 20 36 29 29 f padded-row 6))
75b0: 0a 09 20 20 20 20 20 20 28 73 74 61 74 75 73 20 .. (status
75c0: 20 20 20 20 20 28 6c 65 74 20 28 28 73 20 28 6c (let ((s (l
75d0: 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 ist-ref padded-r
75e0: 6f 77 20 37 29 29 29 0a 09 09 09 20 20 20 20 20 ow 7)))....
75f0: 28 69 66 20 28 61 6e 64 20 28 73 74 72 69 6e 67 (if (and (string
7600: 3f 20 73 29 28 6f 72 20 28 73 74 72 69 6e 67 2d ? s)(or (string-
7610: 6d 61 74 63 68 20 28 72 65 67 65 78 70 20 22 5e match (regexp "^
7620: 5c 5c 73 2a 24 22 29 20 73 29 0a 09 09 09 09 09 \\s*$") s)......
7630: 09 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 . (string-ma
7640: 74 63 68 20 28 72 65 67 65 78 70 20 22 5e 6e 2f tch (regexp "^n/
7650: 61 24 22 29 20 73 29 29 29 0a 09 09 09 09 20 23 a$") s)))..... #
7660: 66 0a 09 09 09 09 20 73 29 29 29 20 3b 3b 20 69 f..... s))) ;; i
7670: 66 20 73 70 65 63 69 66 69 65 64 20 6f 6e 20 74 f specified on t
7680: 68 65 20 69 6e 70 75 74 20 74 68 65 6e 20 75 73 he input then us
7690: 65 2c 20 65 6c 73 65 20 63 61 6c 63 75 6c 61 74 e, else calculat
76a0: 65 0a 09 20 20 20 20 20 20 28 74 79 70 65 20 20 e.. (type
76b0: 20 20 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 (list-ref
76c0: 70 61 64 64 65 64 2d 72 6f 77 20 38 29 29 29 0a padded-row 8))).
76d0: 09 20 3b 3b 20 6c 6f 6f 6b 20 75 70 20 65 78 70 . ;; look up exp
76e0: 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 20 ected,tol,units
76f0: 66 72 6f 6d 20 70 72 65 76 69 6f 75 73 20 62 65 from previous be
7700: 73 74 20 66 69 74 20 74 65 73 74 20 69 66 20 74 st fit test if t
7710: 68 65 79 20 61 72 65 20 61 6c 6c 20 65 69 74 68 hey are all eith
7720: 65 72 20 23 66 20 6f 72 20 27 27 0a 09 20 28 64 er #f or ''.. (d
7730: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 42 45 ebug:print 4 "BE
7740: 46 4f 52 45 3a 20 63 61 74 65 67 6f 72 79 3a 20 FORE: category:
7750: 22 20 63 61 74 65 67 6f 72 79 20 22 20 76 61 72 " category " var
7760: 69 61 62 6c 65 3a 20 22 20 76 61 72 69 61 62 6c iable: " variabl
7770: 65 20 22 20 76 61 6c 75 65 3a 20 22 20 76 61 6c e " value: " val
7780: 75 65 20 0a 09 09 20 20 20 20 20 20 22 2c 20 65 ue ... ", e
7790: 78 70 65 63 74 65 64 3a 20 22 20 65 78 70 65 63 xpected: " expec
77a0: 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 74 6f 6c ted " tol: " tol
77b0: 20 22 20 75 6e 69 74 73 3a 20 22 20 75 6e 69 74 " units: " unit
77c0: 73 20 22 20 73 74 61 74 75 73 3a 20 22 20 73 74 s " status: " st
77d0: 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e 74 3a 20 atus " comment:
77e0: 22 20 63 6f 6d 6d 65 6e 74 20 22 20 74 79 70 65 " comment " type
77f0: 3a 20 22 20 74 79 70 65 29 0a 0a 09 20 28 69 66 : " type)... (if
7800: 20 28 61 6e 64 20 28 6f 72 20 28 6e 6f 74 20 65 (and (or (not e
7810: 78 70 65 63 74 65 64 29 28 65 71 75 61 6c 3f 20 xpected)(equal?
7820: 65 78 70 65 63 74 65 64 20 22 22 29 29 0a 09 09 expected ""))...
7830: 20 20 28 6f 72 20 28 6e 6f 74 20 74 6f 6c 29 20 (or (not tol)
7840: 20 20 20 20 28 65 71 75 61 6c 3f 20 65 78 70 65 (equal? expe
7850: 63 74 65 64 20 22 22 29 29 0a 09 09 20 20 28 6f cted ""))... (o
7860: 72 20 28 6e 6f 74 20 75 6e 69 74 73 29 20 20 20 r (not units)
7870: 28 65 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 (equal? expected
7880: 20 22 22 29 29 29 0a 09 20 20 20 20 20 28 6c 65 ""))).. (le
7890: 74 2d 76 61 6c 75 65 73 20 28 28 28 6e 65 77 2d t-values (((new-
78a0: 65 78 70 65 63 74 65 64 20 6e 65 77 2d 74 6f 6c expected new-tol
78b0: 20 6e 65 77 2d 75 6e 69 74 73 29 28 64 62 3a 67 new-units)(db:g
78c0: 65 74 2d 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d et-prev-tol-for-
78d0: 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 20 test db test-id
78e0: 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c category variabl
78f0: 65 29 29 29 0a 09 09 09 20 28 73 65 74 21 20 65 e))).... (set! e
7900: 78 70 65 63 74 65 64 20 6e 65 77 2d 65 78 70 65 xpected new-expe
7910: 63 74 65 64 29 0a 09 09 09 20 28 73 65 74 21 20 cted).... (set!
7920: 74 6f 6c 20 20 20 20 20 20 6e 65 77 2d 74 6f 6c tol new-tol
7930: 29 0a 09 09 09 20 28 73 65 74 21 20 75 6e 69 74 ).... (set! unit
7940: 73 20 20 20 20 6e 65 77 2d 75 6e 69 74 73 29 29 s new-units))
7950: 29 0a 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e )... (debug:prin
7960: 74 20 34 20 22 41 46 54 45 52 3a 20 20 63 61 74 t 4 "AFTER: cat
7970: 65 67 6f 72 79 3a 20 22 20 63 61 74 65 67 6f 72 egory: " categor
7980: 79 20 22 20 76 61 72 69 61 62 6c 65 3a 20 22 20 y " variable: "
7990: 76 61 72 69 61 62 6c 65 20 22 20 76 61 6c 75 65 variable " value
79a0: 3a 20 22 20 76 61 6c 75 65 20 0a 09 09 20 20 20 : " value ...
79b0: 20 20 20 22 2c 20 65 78 70 65 63 74 65 64 3a 20 ", expected:
79c0: 22 20 65 78 70 65 63 74 65 64 20 22 20 74 6f 6c " expected " tol
79d0: 3a 20 22 20 74 6f 6c 20 22 20 75 6e 69 74 73 3a : " tol " units:
79e0: 20 22 20 75 6e 69 74 73 20 22 20 73 74 61 74 75 " units " statu
79f0: 73 3a 20 22 20 73 74 61 74 75 73 20 22 20 63 6f s: " status " co
7a00: 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 mment: " comment
7a10: 29 0a 09 20 3b 3b 20 63 61 6c 63 75 6c 61 74 65 ).. ;; calculate
7a20: 20 73 74 61 74 75 73 20 69 66 20 4e 4f 54 20 73 status if NOT s
7a30: 70 65 63 69 66 69 65 64 0a 09 20 28 69 66 20 28 pecified.. (if (
7a40: 61 6e 64 20 28 6e 6f 74 20 73 74 61 74 75 73 29 and (not status)
7a50: 28 6e 75 6d 62 65 72 3f 20 65 78 70 65 63 74 65 (number? expecte
7a60: 64 29 28 6e 75 6d 62 65 72 3f 20 76 61 6c 75 65 d)(number? value
7a70: 29 29 20 3b 3b 20 6e 65 65 64 20 65 78 70 65 63 )) ;; need expec
7a80: 74 65 64 20 61 6e 64 20 76 61 6c 75 65 20 74 6f ted and value to
7a90: 20 62 65 20 6e 75 6d 62 65 72 73 0a 09 20 20 20 be numbers..
7aa0: 20 20 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 74 (if (number? t
7ab0: 6f 6c 29 20 3b 3b 20 69 66 20 74 6f 6c 20 69 73 ol) ;; if tol is
7ac0: 20 61 20 6e 75 6d 62 65 72 20 74 68 65 6e 20 77 a number then w
7ad0: 65 20 64 6f 20 74 68 65 20 73 74 61 6e 64 61 72 e do the standar
7ae0: 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 09 09 20 d comparison...
7af0: 28 6c 65 74 2a 20 28 28 6d 61 78 2d 76 61 6c 20 (let* ((max-val
7b00: 28 2b 20 65 78 70 65 63 74 65 64 20 74 6f 6c 29 (+ expected tol)
7b10: 29 0a 09 09 09 28 6d 69 6e 2d 76 61 6c 20 28 2d )....(min-val (-
7b20: 20 65 78 70 65 63 74 65 64 20 74 6f 6c 29 29 0a expected tol)).
7b30: 09 09 09 28 72 65 73 75 6c 74 20 20 28 61 6e 64 ...(result (and
7b40: 20 28 3e 3d 20 20 76 61 6c 75 65 20 6d 69 6e 2d (>= value min-
7b50: 76 61 6c 29 28 3c 3d 20 76 61 6c 75 65 20 6d 61 val)(<= value ma
7b60: 78 2d 76 61 6c 29 29 29 29 0a 09 09 20 20 20 28 x-val))))... (
7b70: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 6d debug:print 4 "m
7b80: 61 78 2d 76 61 6c 3a 20 22 20 6d 61 78 2d 76 61 ax-val: " max-va
7b90: 6c 20 22 20 6d 69 6e 2d 76 61 6c 3a 20 22 20 6d l " min-val: " m
7ba0: 69 6e 2d 76 61 6c 20 22 20 72 65 73 75 6c 74 3a in-val " result:
7bb0: 20 22 20 72 65 73 75 6c 74 29 0a 09 09 20 20 20 " result)...
7bc0: 28 73 65 74 21 20 73 74 61 74 75 73 20 28 69 66 (set! status (if
7bd0: 20 72 65 73 75 6c 74 20 22 70 61 73 73 22 20 22 result "pass" "
7be0: 66 61 69 6c 22 29 29 29 0a 09 09 20 28 73 65 74 fail")))... (set
7bf0: 21 20 73 74 61 74 75 73 20 3b 3b 20 4e 42 2f 2f ! status ;; NB//
7c00: 20 6e 65 65 64 20 74 6f 20 61 73 73 65 73 73 20 need to assess
7c10: 65 61 63 68 20 6f 6e 65 20 28 69 2e 65 2e 20 6e each one (i.e. n
7c20: 6f 74 20 72 65 74 75 72 6e 20 6f 70 65 72 61 74 ot return operat
7c30: 6f 72 20 73 69 6e 63 65 20 6e 65 65 64 20 74 6f or since need to
7c40: 20 61 63 74 20 69 66 20 6e 6f 74 20 76 61 6c 69 act if not vali
7c50: 64 20 6f 70 2e 0a 09 09 20 20 20 20 20 20 20 28 d op.... (
7c60: 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e 73 79 case (string->sy
7c70: 6d 62 6f 6c 20 74 6f 6c 29 20 3b 3b 20 74 6f 6c mbol tol) ;; tol
7c80: 20 73 68 6f 75 6c 64 20 62 65 20 3e 2c 20 3c 2c should be >, <,
7c90: 20 3e 3d 2c 20 3c 3d 0a 09 09 09 20 28 28 3e 29 >=, <=.... ((>)
7ca0: 20 20 28 69 66 20 28 3e 20 20 76 61 6c 75 65 20 (if (> value
7cb0: 65 78 70 65 63 74 65 64 29 20 22 70 61 73 73 22 expected) "pass"
7cc0: 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 28 28 "fail")).... ((
7cd0: 3c 29 20 20 28 69 66 20 28 3c 20 20 76 61 6c 75 <) (if (< valu
7ce0: 65 20 65 78 70 65 63 74 65 64 29 20 22 70 61 73 e expected) "pas
7cf0: 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 20 s" "fail"))....
7d00: 28 28 3e 3d 29 20 28 69 66 20 28 3e 3d 20 76 61 ((>=) (if (>= va
7d10: 6c 75 65 20 65 78 70 65 63 74 65 64 29 20 22 70 lue expected) "p
7d20: 61 73 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 ass" "fail"))...
7d30: 09 20 28 28 3c 3d 29 20 28 69 66 20 28 3c 3d 20 . ((<=) (if (<=
7d40: 76 61 6c 75 65 20 65 78 70 65 63 74 65 64 29 20 value expected)
7d50: 22 70 61 73 73 22 20 22 66 61 69 6c 22 29 29 0a "pass" "fail")).
7d60: 09 09 09 20 28 65 6c 73 65 20 28 63 6f 6e 63 20 ... (else (conc
7d70: 22 45 52 52 4f 52 3a 20 62 61 64 20 74 6f 6c 20 "ERROR: bad tol
7d80: 63 6f 6d 70 61 72 61 74 6f 72 20 22 20 74 6f 6c comparator " tol
7d90: 29 29 29 29 29 29 0a 09 20 28 64 65 62 75 67 3a )))))).. (debug:
7da0: 70 72 69 6e 74 20 34 20 22 41 46 54 45 52 32 3a print 4 "AFTER2:
7db0: 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 74 category: " cat
7dc0: 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c 65 egory " variable
7dd0: 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 76 : " variable " v
7de0: 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a 09 alue: " value ..
7df0: 09 20 20 20 20 20 20 22 2c 20 65 78 70 65 63 74 . ", expect
7e00: 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 ed: " expected "
7e10: 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e tol: " tol " un
7e20: 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 its: " units " s
7e30: 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 tatus: " status
7e40: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
7e50: 6d 65 6e 74 29 0a 09 20 28 73 71 6c 69 74 65 33 ment).. (sqlite3
7e60: 3a 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 :execute db "INS
7e70: 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 ERT OR REPLACE I
7e80: 4e 54 4f 20 74 65 73 74 5f 64 61 74 61 20 28 74 NTO test_data (t
7e90: 65 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c est_id,category,
7ea0: 76 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 variable,value,e
7eb0: 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 xpected,tol,unit
7ec0: 73 2c 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 75 73 s,comment,status
7ed0: 2c 74 79 70 65 29 20 56 41 4c 55 45 53 20 28 3f ,type) VALUES (?
7ee0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f ,?,?,?,?,?,?,?,?
7ef0: 2c 3f 29 3b 22 0a 09 09 09 20 20 74 65 73 74 2d ,?);".... test-
7f00: 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 id category vari
7f10: 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 able value expec
7f20: 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 28 69 ted tol units (i
7f30: 66 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e f comment commen
7f40: 74 20 22 22 29 20 73 74 61 74 75 73 20 74 79 70 t "") status typ
7f50: 65 29 29 29 0a 20 20 20 20 20 63 73 76 6c 69 73 e))). csvlis
7f60: 74 29 29 29 0a 0a 3b 3b 20 67 65 74 20 61 20 6c t)))..;; get a l
7f70: 69 73 74 20 6f 66 20 74 65 73 74 5f 64 61 74 61 ist of test_data
7f80: 20 72 65 63 6f 72 64 73 20 6d 61 74 63 68 69 6e records matchin
7f90: 67 20 63 61 74 65 67 6f 72 79 70 61 74 74 0a 28 g categorypatt.(
7fa0: 64 65 66 69 6e 65 20 28 64 62 3a 72 65 61 64 2d define (db:read-
7fb0: 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 test-data db tes
7fc0: 74 2d 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 t-id categorypat
7fd0: 74 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 t). (let ((res
7fe0: 27 28 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 '())). (sqlit
7ff0: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
8000: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 . (lambda (i
8010: 64 20 74 65 73 74 5f 69 64 20 63 61 74 65 67 6f d test_id catego
8020: 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 ry variable valu
8030: 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 e expected tol u
8040: 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 nits comment sta
8050: 74 75 73 20 74 79 70 65 29 0a 20 20 20 20 20 20 tus type).
8060: 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 (set! res (cons
8070: 20 28 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 (vector id test
8080: 5f 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 _id category var
8090: 69 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 iable value expe
80a0: 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 cted tol units c
80b0: 6f 6d 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 omment status ty
80c0: 70 65 29 20 72 65 73 29 29 29 0a 20 20 20 20 20 pe) res))).
80d0: 64 62 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 db. "SELECT
80e0: 69 64 2c 74 65 73 74 5f 69 64 2c 63 61 74 65 67 id,test_id,categ
80f0: 6f 72 79 2c 76 61 72 69 61 62 6c 65 2c 76 61 6c ory,variable,val
8100: 75 65 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c ue,expected,tol,
8110: 75 6e 69 74 73 2c 63 6f 6d 6d 65 6e 74 2c 73 74 units,comment,st
8120: 61 74 75 73 2c 74 79 70 65 20 46 52 4f 4d 20 74 atus,type FROM t
8130: 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 est_data WHERE t
8140: 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 63 61 74 est_id=? AND cat
8150: 65 67 6f 72 79 20 4c 49 4b 45 20 3f 20 4f 52 44 egory LIKE ? ORD
8160: 45 52 20 42 59 20 63 61 74 65 67 6f 72 79 2c 76 ER BY category,v
8170: 61 72 69 61 62 6c 65 3b 22 20 74 65 73 74 2d 69 ariable;" test-i
8180: 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a d categorypatt).
8190: 20 20 20 20 28 72 65 76 65 72 73 65 20 72 65 73 (reverse res
81a0: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 )))..(define (db
81b0: 3a 6c 6f 61 64 2d 74 65 73 74 2d 64 61 74 61 20 :load-test-data
81c0: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
81d0: 61 6d 65 20 69 74 65 6d 64 61 74 29 0a 20 20 28 ame itemdat). (
81e0: 6c 65 74 2a 20 28 28 69 74 65 6d 2d 70 61 74 68 let* ((item-path
81f0: 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 (item-list->pat
8200: 68 20 69 74 65 6d 64 61 74 29 29 0a 09 20 28 74 h itemdat)).. (t
8210: 65 73 74 64 61 74 20 28 64 62 3a 67 65 74 2d 74 estdat (db:get-t
8220: 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d est-info db run-
8230: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
8240: 6d 2d 70 61 74 68 29 29 0a 09 20 28 74 65 73 74 m-path)).. (test
8250: 2d 69 64 20 28 69 66 20 74 65 73 74 64 61 74 20 -id (if testdat
8260: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20 (db:test-get-id
8270: 74 65 73 74 64 61 74 29 20 23 66 29 29 29 0a 20 testdat) #f))).
8280: 20 20 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 ;; (debug:pri
8290: 6e 74 20 31 20 22 45 6e 74 65 72 20 72 65 63 6f nt 1 "Enter reco
82a0: 72 64 73 20 74 6f 20 69 6e 73 65 72 74 20 69 6e rds to insert in
82b0: 20 74 68 65 20 74 65 73 74 5f 64 61 74 61 20 74 the test_data t
82c0: 61 62 6c 65 2c 20 73 65 76 65 6e 20 66 69 65 6c able, seven fiel
82d0: 64 73 2c 20 63 6f 6d 6d 61 20 73 65 70 61 72 61 ds, comma separa
82e0: 74 65 64 20 70 65 72 20 6c 69 6e 65 22 29 0a 20 ted per line").
82f0: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
8300: 34 20 22 69 74 65 6d 64 61 74 3a 20 22 20 69 74 4 "itemdat: " it
8310: 65 6d 64 61 74 20 22 2c 20 74 65 73 74 2d 6e 61 emdat ", test-na
8320: 6d 65 3a 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 me: " test-name
8330: 22 2c 20 74 65 73 74 2d 69 64 3a 20 22 20 74 65 ", test-id: " te
8340: 73 74 2d 69 64 29 0a 20 20 20 20 28 69 66 20 74 st-id). (if t
8350: 65 73 74 2d 69 64 0a 09 28 6c 65 74 20 6c 6f 6f est-id..(let loo
8360: 70 20 28 28 6c 69 6e 20 28 72 65 61 64 2d 6c 69 p ((lin (read-li
8370: 6e 65 29 29 29 0a 09 20 20 28 69 66 20 28 6e 6f ne))).. (if (no
8380: 74 20 28 65 6f 66 2d 6f 62 6a 65 63 74 3f 20 6c t (eof-object? l
8390: 69 6e 29 29 0a 09 20 20 20 20 20 20 28 62 65 67 in)).. (beg
83a0: 69 6e 0a 09 09 28 64 65 62 75 67 3a 70 72 69 6e in...(debug:prin
83b0: 74 20 34 20 6c 69 6e 29 0a 09 09 28 64 62 3a 63 t 4 lin)...(db:c
83c0: 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 62 sv->test-data db
83d0: 20 74 65 73 74 2d 69 64 20 6c 69 6e 29 0a 09 09 test-id lin)...
83e0: 28 6c 6f 6f 70 20 28 72 65 61 64 2d 6c 69 6e 65 (loop (read-line
83f0: 29 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 72 6f )))))). ;; ro
8400: 6c 6c 20 75 70 20 74 68 65 20 63 75 72 72 65 6e ll up the curren
8410: 74 20 72 65 73 75 6c 74 73 2e 0a 20 20 20 20 3b t results.. ;
8420: 3b 20 46 49 58 4d 45 3a 20 41 64 64 20 74 68 65 ; FIXME: Add the
8430: 20 73 74 61 74 75 73 20 74 6f 20 0a 20 20 20 20 status to .
8440: 28 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f (db:test-data-ro
8450: 6c 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 llup db test-id
8460: 23 66 29 29 29 0a 0a 3b 3b 20 57 41 52 4e 49 4e #f)))..;; WARNIN
8470: 47 3a 20 44 6f 20 4e 4f 54 20 63 61 6c 6c 20 74 G: Do NOT call t
8480: 68 69 73 20 66 6f 72 20 74 68 65 20 70 61 72 65 his for the pare
8490: 6e 74 20 74 65 73 74 20 6f 6e 20 61 6e 20 69 74 nt test on an it
84a0: 65 72 61 74 65 64 20 74 65 73 74 0a 3b 3b 20 52 erated test.;; R
84b0: 6f 6c 6c 20 75 70 20 74 65 73 74 5f 64 61 74 61 oll up test_data
84c0: 20 70 61 73 73 2f 66 61 69 6c 20 72 65 73 75 6c pass/fail resul
84d0: 74 73 0a 3b 3b 20 6c 6f 6f 6b 20 61 74 20 74 68 ts.;; look at th
84e0: 65 20 74 65 73 74 5f 64 61 74 61 20 73 74 61 74 e test_data stat
84f0: 75 73 20 66 69 65 6c 64 2c 20 0a 3b 3b 20 20 20 us field, .;;
8500: 20 69 66 20 61 6c 6c 20 61 72 65 20 70 61 73 73 if all are pass
8510: 20 28 61 6e 79 20 63 61 73 65 29 20 61 6e 64 20 (any case) and
8520: 74 68 65 20 74 65 73 74 20 73 74 61 74 75 73 20 the test status
8530: 69 73 20 50 41 53 53 20 6f 72 20 4e 55 4c 4c 20 is PASS or NULL
8540: 6f 72 20 27 27 20 74 68 65 6e 20 73 65 74 20 74 or '' then set t
8550: 65 73 74 20 73 74 61 74 75 73 20 74 6f 20 50 41 est status to PA
8560: 53 53 2e 0a 3b 3b 20 20 20 20 69 66 20 6f 6e 65 SS..;; if one
8570: 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 66 61 69 or more are fai
8580: 6c 20 28 61 6e 79 20 63 61 73 65 29 20 74 68 65 l (any case) the
8590: 6e 20 73 65 74 20 74 65 73 74 20 73 74 61 74 75 n set test statu
85a0: 73 20 74 6f 20 50 41 53 53 2c 20 6e 6f 6e 20 22 s to PASS, non "
85b0: 70 61 73 73 22 20 6f 72 20 22 66 61 69 6c 22 20 pass" or "fail"
85c0: 61 72 65 20 69 67 6e 6f 72 65 64 0a 28 64 65 66 are ignored.(def
85d0: 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 64 61 74 ine (db:test-dat
85e0: 61 2d 72 6f 6c 6c 75 70 20 64 62 20 74 65 73 74 a-rollup db test
85f0: 2d 69 64 20 73 74 61 74 75 73 29 0a 20 20 28 73 -id status). (s
8600: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 0a qlite3:execute .
8610: 20 20 20 64 62 20 0a 20 20 20 22 55 50 44 41 54 db . "UPDAT
8620: 45 20 74 65 73 74 73 20 0a 20 20 20 20 20 20 53 E tests . S
8630: 45 54 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 28 53 ET fail_count=(S
8640: 45 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 ELECT count(id)
8650: 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 FROM test_data W
8660: 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 41 HERE test_id=? A
8670: 4e 44 20 73 74 61 74 75 73 20 6c 69 6b 65 20 27 ND status like '
8680: 66 61 69 6c 27 29 2c 0a 20 20 20 20 20 20 20 20 fail'),.
8690: 20 20 70 61 73 73 5f 63 6f 75 6e 74 3d 28 53 45 pass_count=(SE
86a0: 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 LECT count(id) F
86b0: 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 ROM test_data WH
86c0: 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 41 4e ERE test_id=? AN
86d0: 44 20 73 74 61 74 75 73 20 6c 69 6b 65 20 27 70 D status like 'p
86e0: 61 73 73 27 29 0a 20 20 20 20 20 20 57 48 45 52 ass'). WHER
86f0: 45 20 69 64 3d 3f 3b 22 0a 20 20 20 74 65 73 74 E id=?;". test
8700: 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 73 74 -id test-id test
8710: 2d 69 64 29 0a 20 20 3b 3b 20 69 66 20 74 68 65 -id). ;; if the
8720: 20 74 65 73 74 20 69 73 20 6e 6f 74 20 46 41 49 test is not FAI
8730: 4c 20 74 68 65 6e 20 73 65 74 20 73 74 61 74 75 L then set statu
8740: 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 66 s based on the f
8750: 61 69 6c 20 61 6e 64 20 70 61 73 73 20 63 6f 75 ail and pass cou
8760: 6e 74 73 2e 0a 20 20 28 74 68 72 65 61 64 2d 73 nts.. (thread-s
8770: 6c 65 65 70 21 20 31 29 0a 20 20 28 73 71 6c 69 leep! 1). (sqli
8780: 74 65 33 3a 65 78 65 63 75 74 65 0a 20 20 20 64 te3:execute. d
8790: 62 20 20 20 3b 3b 3b 20 4e 4f 54 45 3a 20 53 68 b ;;; NOTE: Sh
87a0: 6f 75 6c 64 20 74 68 69 73 20 62 65 20 57 41 52 ould this be WAR
87b0: 4e 2c 46 41 49 4c 3f 20 41 20 57 41 52 4e 20 69 N,FAIL? A WARN i
87c0: 73 20 6e 6f 74 20 61 20 46 41 49 4c 3f 3f 3f 3f s not a FAIL????
87d0: 3f 20 42 55 47 20 46 49 58 4d 45 0a 20 20 20 22 ? BUG FIXME. "
87e0: 55 50 44 41 54 45 20 74 65 73 74 73 0a 20 20 20 UPDATE tests.
87f0: 20 20 20 53 45 54 20 73 74 61 74 75 73 3d 43 41 SET status=CA
8800: 53 45 20 57 48 45 4e 20 28 53 45 4c 45 43 54 20 SE WHEN (SELECT
8810: 66 61 69 6c 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 fail_count FROM
8820: 74 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f tests WHERE id=?
8830: 29 20 3e 20 30 20 0a 20 20 20 20 20 20 20 20 20 ) > 0 .
8840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8850: 54 48 45 4e 20 27 46 41 49 4c 27 0a 20 20 20 20 THEN 'FAIL'.
8860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8870: 20 20 57 48 45 4e 20 28 53 45 4c 45 43 54 20 70 WHEN (SELECT p
8880: 61 73 73 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 74 ass_count FROM t
8890: 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 3f 29 ests WHERE id=?)
88a0: 20 3e 20 30 20 41 4e 44 20 0a 20 20 20 20 20 20 > 0 AND .
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
88c0: 20 20 20 20 20 28 53 45 4c 45 43 54 20 73 74 61 (SELECT sta
88d0: 74 75 73 20 46 52 4f 4d 20 74 65 73 74 73 20 57 tus FROM tests W
88e0: 48 45 52 45 20 69 64 3d 3f 29 20 4e 4f 54 20 49 HERE id=?) NOT I
88f0: 4e 20 28 27 57 41 52 4e 27 2c 27 46 41 49 4c 27 N ('WARN','FAIL'
8900: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
8910: 20 20 20 20 20 20 20 20 20 20 20 54 48 45 4e 20 THEN
8920: 27 50 41 53 53 27 0a 20 20 20 20 20 20 20 20 20 'PASS'.
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 ELS
8940: 45 20 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 E status.
8950: 20 20 20 20 20 20 20 20 20 20 20 45 4e 44 20 57 END W
8960: 48 45 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 74 HERE id=?;". t
8970: 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 est-id test-id t
8980: 65 73 74 2d 69 64 20 74 65 73 74 2d 69 64 29 29 est-id test-id))
8990: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 ..(define (db:ge
89a0: 74 2d 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 t-prev-tol-for-t
89b0: 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 est db test-id c
89c0: 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 ategory variable
89d0: 29 0a 20 20 3b 3b 20 46 69 6e 69 73 68 20 6d 65 ). ;; Finish me
89e0: 3f 0a 20 20 28 76 61 6c 75 65 73 20 23 66 20 23 ?. (values #f #
89f0: 66 20 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d f #f))..;;======
8a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a40: 0a 3b 3b 20 53 20 54 20 45 20 50 20 53 20 0a 3b .;; S T E P S .;
8a50: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
8a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8a90: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
8aa0: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 74 69 (db:step-get-ti
8ab0: 6d 65 2d 61 73 2d 73 74 72 69 6e 67 20 76 65 63 me-as-string vec
8ac0: 29 0a 20 20 28 73 65 63 6f 6e 64 73 2d 3e 74 69 ). (seconds->ti
8ad0: 6d 65 2d 73 74 72 69 6e 67 20 28 64 62 3a 73 74 me-string (db:st
8ae0: 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d ep-get-event_tim
8af0: 65 20 76 65 63 29 29 29 0a 0a 3b 3b 20 64 62 2d e vec)))..;; db-
8b00: 67 65 74 2d 74 65 73 74 2d 73 74 65 70 73 2d 66 get-test-steps-f
8b10: 6f 72 2d 72 75 6e 0a 28 64 65 66 69 6e 65 20 28 or-run.(define (
8b20: 64 62 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 db:get-steps-for
8b30: 2d 74 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 -test db test-id
8b40: 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 20 27 ). (let ((res '
8b50: 28 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 ())). (sqlite
8b60: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 3:for-each-row .
8b70: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 (lambda (id
8b80: 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e 61 6d test-id stepnam
8b90: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 e state status e
8ba0: 76 65 6e 74 2d 74 69 6d 65 20 6c 6f 67 66 69 6c vent-time logfil
8bb0: 65 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 e). (set!
8bc0: 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f res (cons (vecto
8bd0: 72 20 69 64 20 74 65 73 74 2d 69 64 20 73 74 65 r id test-id ste
8be0: 70 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 pname state stat
8bf0: 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 28 69 us event-time (i
8c00: 66 20 28 73 74 72 69 6e 67 3f 20 6c 6f 67 66 69 f (string? logfi
8c10: 6c 65 29 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 le) logfile ""))
8c20: 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 62 0a res))). db.
8c30: 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c "SELECT id,
8c40: 74 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 test_id,stepname
8c50: 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 ,state,status,ev
8c60: 65 6e 74 5f 74 69 6d 65 2c 6c 6f 67 66 69 6c 65 ent_time,logfile
8c70: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
8c80: 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f WHERE test_id=?
8c90: 20 4f 52 44 45 52 20 42 59 20 69 64 20 41 53 43 ORDER BY id ASC
8ca0: 3b 22 20 3b 3b 20 65 76 65 6e 74 5f 74 69 6d 65 ;" ;; event_time
8cb0: 20 44 45 53 43 2c 69 64 20 41 53 43 3b 0a 20 20 DESC,id ASC;.
8cc0: 20 20 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 test-id).
8cd0: 28 72 65 76 65 72 73 65 20 72 65 73 29 29 29 0a (reverse res))).
8ce0: 0a 3b 3b 20 67 65 74 20 61 20 70 72 65 74 74 79 .;; get a pretty
8cf0: 20 74 61 62 6c 65 20 74 6f 20 73 75 6d 6d 61 72 table to summar
8d00: 69 7a 65 20 73 74 65 70 73 0a 3b 3b 0a 28 64 65 ize steps.;;.(de
8d10: 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 73 74 65 fine (db:get-ste
8d20: 70 73 2d 74 61 62 6c 65 20 64 62 20 74 65 73 74 ps-table db test
8d30: 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 73 74 -id). (let ((st
8d40: 65 70 73 20 20 20 28 64 62 3a 67 65 74 2d 73 74 eps (db:get-st
8d50: 65 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 eps-for-test db
8d60: 74 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 3b test-id))). ;
8d70: 3b 20 6f 72 67 61 6e 69 73 65 20 74 68 65 20 73 ; organise the s
8d80: 74 65 70 73 20 66 6f 72 20 62 65 74 74 65 72 20 teps for better
8d90: 72 65 61 64 61 62 69 6c 69 74 79 0a 20 20 20 20 readability.
8da0: 28 6c 65 74 20 28 28 72 65 73 20 28 6d 61 6b 65 (let ((res (make
8db0: 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a 20 -hash-table))).
8dc0: 20 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a (for-each .
8dd0: 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 (lambda (
8de0: 73 74 65 70 29 0a 09 20 28 64 65 62 75 67 3a 70 step).. (debug:p
8df0: 72 69 6e 74 20 36 20 22 73 74 65 70 3d 22 20 73 rint 6 "step=" s
8e00: 74 65 70 29 0a 09 20 28 6c 65 74 20 28 28 72 65 tep).. (let ((re
8e10: 63 6f 72 64 20 28 68 61 73 68 2d 74 61 62 6c 65 cord (hash-table
8e20: 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 0a 09 09 -ref/default ...
8e30: 09 72 65 73 20 0a 09 09 09 28 64 62 3a 73 74 65 .res ....(db:ste
8e40: 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 p-get-stepname s
8e50: 74 65 70 29 20 0a 09 09 09 3b 3b 20 20 20 20 20 tep) ....;;
8e60: 20 20 20 73 74 65 70 6e 61 6d 65 20 20 20 20 20 stepname
8e70: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 start
8e80: 20 65 6e 64 20 73 74 61 74 75 73 20 20 20 20 0a end status .
8e90: 09 09 09 28 76 65 63 74 6f 72 20 28 64 62 3a 73 ...(vector (db:s
8ea0: 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 tep-get-stepname
8eb0: 20 73 74 65 70 29 20 22 22 20 20 20 22 22 20 22 step) "" "" "
8ec0: 22 20 20 20 20 20 22 22 20 22 22 29 29 29 29 0a " "" "")))).
8ed0: 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 . (debug:print
8ee0: 20 36 20 22 72 65 63 6f 72 64 28 62 65 66 6f 72 6 "record(befor
8ef0: 65 29 20 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 e) = " record ..
8f00: 09 09 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 .."\nid: "
8f10: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 (db:step-get-id
8f20: 20 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 step)...."\nste
8f30: 70 6e 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 pname: " (db:ste
8f40: 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 p-get-stepname s
8f50: 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 tep)...."\nstate
8f60: 3a 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d : " (db:step-
8f70: 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a get-state step).
8f80: 09 09 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 ..."\nstatus:
8f90: 22 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 " (db:step-get-s
8fa0: 74 61 74 75 73 20 73 74 65 70 29 0a 09 09 09 22 tatus step)...."
8fb0: 5c 6e 74 69 6d 65 3a 20 20 20 20 20 22 20 28 64 \ntime: " (d
8fc0: 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 b:step-get-event
8fd0: 5f 74 69 6d 65 20 73 74 65 70 29 29 0a 09 20 20 _time step))..
8fe0: 20 28 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e (case (string->
8ff0: 73 79 6d 62 6f 6c 20 28 64 62 3a 73 74 65 70 2d symbol (db:step-
9000: 67 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 29 get-state step))
9010: 0a 09 20 20 20 20 20 28 28 73 74 61 72 74 29 28 .. ((start)(
9020: 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f vector-set! reco
9030: 72 64 20 31 20 28 64 62 3a 73 74 65 70 2d 67 65 rd 1 (db:step-ge
9040: 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 t-event_time ste
9050: 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 p)).. (vect
9060: 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 or-set! record 3
9070: 20 28 69 66 20 28 65 71 75 61 6c 3f 20 28 76 65 (if (equal? (ve
9080: 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 ctor-ref record
9090: 33 29 20 22 22 29 0a 09 09 09 09 09 28 64 62 3a 3) "")......(db:
90a0: 73 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 step-get-status
90b0: 73 74 65 70 29 29 29 0a 09 20 20 20 20 20 20 28 step))).. (
90c0: 69 66 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 if (> (string-le
90d0: 6e 67 74 68 20 28 64 62 3a 73 74 65 70 2d 67 65 ngth (db:step-ge
90e0: 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 t-logfile step))
90f0: 0a 09 09 20 20 20 20 20 30 29 0a 09 09 20 20 28 ... 0)... (
9100: 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f vector-set! reco
9110: 72 64 20 35 20 28 64 62 3a 73 74 65 70 2d 67 65 rd 5 (db:step-ge
9120: 74 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 t-logfile step))
9130: 29 29 0a 09 20 20 20 20 20 28 28 65 6e 64 29 20 )).. ((end)
9140: 20 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 .. (vector
9150: 2d 73 65 74 21 20 72 65 63 6f 72 64 20 32 20 28 -set! record 2 (
9160: 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 64 62 3a any->number (db:
9170: 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
9180: 69 6d 65 20 73 74 65 70 29 29 29 0a 09 20 20 20 ime step)))..
9190: 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 (vector-set!
91a0: 72 65 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 record 3 (db:ste
91b0: 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 p-get-status ste
91c0: 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 p)).. (vect
91d0: 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 or-set! record 4
91e0: 20 28 6c 65 74 20 28 28 73 74 61 72 74 74 20 28 (let ((startt (
91f0: 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 76 65 63 any->number (vec
9200: 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 31 tor-ref record 1
9210: 29 29 29 0a 09 09 09 09 09 20 20 28 65 6e 64 74 )))...... (endt
9220: 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 (any->number
9230: 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f (vector-ref reco
9240: 72 64 20 32 29 29 29 29 0a 09 09 09 09 20 20 20 rd 2)))).....
9250: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
9260: 34 20 22 72 65 63 6f 72 64 5b 31 5d 3d 22 20 28 4 "record[1]=" (
9270: 76 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 vector-ref recor
9280: 64 20 31 29 20 0a 09 09 09 09 09 09 20 20 20 22 d 1) ....... "
9290: 2c 20 73 74 61 72 74 74 3d 22 20 73 74 61 72 74 , startt=" start
92a0: 74 20 22 2c 20 65 6e 64 74 3d 22 20 65 6e 64 74 t ", endt=" endt
92b0: 0a 09 09 09 09 09 09 20 20 20 22 2c 20 67 65 74 ....... ", get
92c0: 2d 73 74 61 74 75 73 3a 20 22 20 28 64 62 3a 73 -status: " (db:s
92d0: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
92e0: 74 65 70 29 29 0a 09 09 09 09 20 20 20 20 20 20 tep)).....
92f0: 28 69 66 20 28 61 6e 64 20 28 6e 75 6d 62 65 72 (if (and (number
9300: 3f 20 73 74 61 72 74 74 29 28 6e 75 6d 62 65 72 ? startt)(number
9310: 3f 20 65 6e 64 74 29 29 0a 09 09 09 09 09 20 20 ? endt))......
9320: 28 73 65 63 6f 6e 64 73 2d 3e 68 72 2d 6d 69 6e (seconds->hr-min
9330: 2d 73 65 63 20 28 2d 20 65 6e 64 74 20 73 74 61 -sec (- endt sta
9340: 72 74 74 29 29 20 22 2d 31 22 29 29 29 0a 09 20 rtt)) "-1")))..
9350: 20 20 20 20 20 28 69 66 20 28 3e 20 28 73 74 72 (if (> (str
9360: 69 6e 67 2d 6c 65 6e 67 74 68 20 28 64 62 3a 73 ing-length (db:s
9370: 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 tep-get-logfile
9380: 73 74 65 70 29 29 0a 09 09 20 20 20 20 20 30 29 step))... 0)
9390: 0a 09 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 ... (vector-set
93a0: 21 20 72 65 63 6f 72 64 20 35 20 28 64 62 3a 73 ! record 5 (db:s
93b0: 74 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 tep-get-logfile
93c0: 73 74 65 70 29 29 29 29 0a 09 20 20 20 20 20 28 step)))).. (
93d0: 65 6c 73 65 0a 09 20 20 20 20 20 20 28 76 65 63 else.. (vec
93e0: 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 tor-set! record
93f0: 32 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 2 (db:step-get-s
9400: 74 61 74 65 20 73 74 65 70 29 29 0a 09 20 20 20 tate step))..
9410: 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 (vector-set!
9420: 72 65 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 record 3 (db:ste
9430: 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 p-get-status ste
9440: 70 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 p)).. (vect
9450: 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 or-set! record 4
9460: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 (db:step-get-ev
9470: 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 ent_time step)))
9480: 29 0a 09 20 20 20 28 68 61 73 68 2d 74 61 62 6c ).. (hash-tabl
9490: 65 2d 73 65 74 21 20 72 65 73 20 28 64 62 3a 73 e-set! res (db:s
94a0: 74 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 tep-get-stepname
94b0: 20 73 74 65 70 29 20 72 65 63 6f 72 64 29 0a 09 step) record)..
94c0: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
94d0: 36 20 22 72 65 63 6f 72 64 28 61 66 74 65 72 29 6 "record(after)
94e0: 20 20 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 09 = " record ...
94f0: 09 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 20 ."\nid: "
9500: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 20 (db:step-get-id
9510: 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 70 step)...."\nstep
9520: 6e 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 70 name: " (db:step
9530: 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 -get-stepname st
9540: 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 3a ep)...."\nstate:
9550: 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 " (db:step-g
9560: 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a 09 et-state step)..
9570: 09 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 22 .."\nstatus: "
9580: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
9590: 61 74 75 73 20 73 74 65 70 29 0a 09 09 09 22 5c atus step)...."\
95a0: 6e 74 69 6d 65 3a 20 20 20 20 20 22 20 28 64 62 ntime: " (db
95b0: 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f :step-get-event_
95c0: 74 69 6d 65 20 73 74 65 70 29 29 29 29 0a 20 20 time step)))).
95d0: 20 20 20 20 20 3b 3b 20 28 65 6c 73 65 20 20 20 ;; (else
95e0: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 (vector-set! rec
95f0: 6f 72 64 20 31 20 28 64 62 3a 73 74 65 70 2d 67 ord 1 (db:step-g
9600: 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 et-event_time st
9610: 65 70 29 29 29 0a 20 20 20 20 20 20 20 28 73 6f ep))). (so
9620: 72 74 20 73 74 65 70 73 20 28 6c 61 6d 62 64 61 rt steps (lambda
9630: 20 28 61 20 62 29 28 3c 20 28 64 62 3a 73 74 65 (a b)(< (db:ste
9640: 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 p-get-event_time
9650: 20 61 29 28 64 62 3a 73 74 65 70 2d 67 65 74 2d a)(db:step-get-
9660: 65 76 65 6e 74 5f 74 69 6d 65 20 62 29 29 29 29 event_time b))))
9670: 29 0a 20 20 20 20 20 20 72 65 73 29 29 29 0a 0a ). res)))..
9680: 3b 3b 20 55 53 45 3a 20 28 6c 73 65 74 2d 64 69 ;; USE: (lset-di
9690: 66 66 65 72 65 6e 63 65 20 73 74 72 69 6e 67 3d fference string=
96a0: 3f 20 27 28 22 61 22 20 22 62 22 20 22 63 22 29 ? '("a" "b" "c")
96b0: 20 27 28 22 64 22 20 22 63 22 20 22 65 22 20 22 '("d" "c" "e" "
96c0: 61 22 29 29 0a 3b 3b 0a 3b 3b 20 52 65 74 75 72 a")).;;.;; Retur
96d0: 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 72 65 72 n a list of prer
96e0: 65 71 73 20 74 68 61 74 20 77 65 72 65 20 4e 4f eqs that were NO
96f0: 54 20 6d 65 74 0a 3b 3b 20 20 54 65 73 74 73 20 T met.;; Tests
9700: 28 61 6e 64 20 61 6c 6c 20 69 74 65 6d 73 29 20 (and all items)
9710: 69 6e 20 77 61 69 74 6f 6e 20 6c 69 73 74 20 6d in waiton list m
9720: 75 73 74 20 62 65 20 22 43 4f 4d 50 4c 45 54 45 ust be "COMPLETE
9730: 44 22 20 61 6e 64 20 22 50 41 53 53 22 0a 28 64 D" and "PASS".(d
9740: 65 66 69 6e 65 20 28 64 62 2d 67 65 74 2d 70 72 efine (db-get-pr
9750: 65 72 65 71 73 2d 6e 6f 74 2d 6d 65 74 20 64 62 ereqs-not-met db
9760: 20 72 75 6e 2d 69 64 20 77 61 69 74 6f 6e 29 0a run-id waiton).
9770: 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 77 61 69 (if (null? wai
9780: 74 6f 6e 29 0a 20 20 20 20 20 20 27 28 29 0a 20 ton). '().
9790: 20 20 20 20 20 28 6c 65 74 2a 20 28 28 75 6e 6d (let* ((unm
97a0: 65 74 2d 70 72 65 2d 72 65 71 73 20 27 28 29 29 et-pre-reqs '())
97b0: 0a 09 20 20 20 20 20 28 74 65 73 74 73 20 20 20 .. (tests
97c0: 20 20 20 20 20 20 20 20 28 64 62 2d 67 65 74 2d (db-get-
97d0: 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 tests-for-run db
97e0: 20 72 75 6e 2d 69 64 20 23 66 20 23 66 20 27 28 run-id #f #f '(
97f0: 29 20 27 28 29 29 29 0a 09 20 20 20 20 20 28 72 ) '())).. (r
9800: 65 73 75 6c 74 20 20 20 20 20 20 20 20 20 27 28 esult '(
9810: 29 29 29 0a 09 28 66 6f 72 2d 65 61 63 68 20 28 )))..(for-each (
9820: 6c 61 6d 62 64 61 20 28 77 61 69 74 6f 6e 74 65 lambda (waitonte
9830: 73 74 2d 6e 61 6d 65 29 0a 09 09 20 20 20 20 28 st-name)... (
9840: 6c 65 74 20 28 28 65 76 65 72 2d 73 65 65 6e 20 let ((ever-seen
9850: 23 66 29 29 0a 09 09 20 20 20 20 20 20 28 66 6f #f))... (fo
9860: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
9870: 74 65 73 74 29 0a 09 09 09 09 20 20 28 69 66 20 test)..... (if
9880: 28 65 71 75 61 6c 3f 20 77 61 69 74 6f 6e 74 65 (equal? waitonte
9890: 73 74 2d 6e 61 6d 65 20 28 64 62 3a 74 65 73 74 st-name (db:test
98a0: 2d 67 65 74 2d 74 65 73 74 6e 61 6d 65 20 74 65 -get-testname te
98b0: 73 74 29 29 0a 09 09 09 09 20 20 20 20 20 20 28 st))..... (
98c0: 62 65 67 69 6e 0a 09 09 09 09 09 28 73 65 74 21 begin......(set!
98d0: 20 65 76 65 72 2d 73 65 65 6e 20 23 74 29 0a 09 ever-seen #t)..
98e0: 09 09 09 09 28 69 66 20 28 6e 6f 74 20 28 61 6e ....(if (not (an
98f0: 64 20 28 65 71 75 61 6c 3f 20 28 64 62 3a 74 65 d (equal? (db:te
9900: 73 74 2d 67 65 74 2d 73 74 61 74 65 20 74 65 73 st-get-state tes
9910: 74 29 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 0a t) "COMPLETED").
9920: 09 09 09 09 09 09 20 20 20 20 20 20 28 6d 65 6d ...... (mem
9930: 62 65 72 20 28 64 62 3a 74 65 73 74 2d 67 65 74 ber (db:test-get
9940: 2d 73 74 61 74 75 73 20 74 65 73 74 29 20 27 28 -status test) '(
9950: 22 50 41 53 53 22 20 22 57 41 52 4e 22 20 22 43 "PASS" "WARN" "C
9960: 48 45 43 4b 22 29 29 29 29 0a 09 09 09 09 09 20 HECK"))))......
9970: 20 20 20 28 73 65 74 21 20 72 65 73 75 6c 74 20 (set! result
9980: 28 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 (cons waitontest
9990: 2d 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 29 29 -name result))))
99a0: 29 29 0a 09 09 09 09 74 65 73 74 73 29 0a 09 09 )).....tests)...
99b0: 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 65 (if (not e
99c0: 76 65 72 2d 73 65 65 6e 29 28 73 65 74 21 20 72 ver-seen)(set! r
99d0: 65 73 75 6c 74 20 28 63 6f 6e 73 20 77 61 69 74 esult (cons wait
99e0: 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 72 65 73 75 ontest-name resu
99f0: 6c 74 29 29 29 29 29 0a 09 09 20 20 77 61 69 74 lt)))))... wait
9a00: 6f 6e 29 0a 09 28 64 65 6c 65 74 65 2d 64 75 70 on)..(delete-dup
9a10: 6c 69 63 61 74 65 73 20 72 65 73 75 6c 74 29 29 licates result))
9a20: 29 29 0a 0a 3b 3b 20 74 68 65 20 6e 65 77 20 70 ))..;; the new p
9a30: 72 65 72 65 71 73 20 63 61 6c 63 75 6c 61 74 69 rereqs calculati
9a40: 6f 6e 2c 20 6c 6f 6f 6b 73 20 61 6c 73 6f 20 61 on, looks also a
9a50: 74 20 69 74 65 6d 70 61 74 68 20 69 66 20 73 70 t itempath if sp
9a60: 65 63 69 66 69 65 64 0a 3b 3b 20 61 6c 6c 20 70 ecified.;; all p
9a70: 72 65 72 65 71 73 20 6d 75 73 74 20 62 65 20 6d rereqs must be m
9a80: 65 74 3a 0a 3b 3b 20 20 20 20 69 66 20 70 72 65 et:.;; if pre
9a90: 72 65 71 20 74 65 73 74 20 77 69 74 68 20 69 74 req test with it
9aa0: 65 6d 70 61 74 68 3d 27 27 20 69 73 20 43 4f 4d empath='' is COM
9ab0: 50 4c 45 54 45 44 20 61 6e 64 20 50 41 53 53 2c PLETED and PASS,
9ac0: 20 57 41 52 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 WARN, CHECK, or
9ad0: 20 57 41 49 56 45 44 20 74 68 65 6e 20 70 72 65 WAIVED then pre
9ae0: 72 65 71 20 69 73 20 6d 65 74 0a 3b 3b 20 20 20 req is met.;;
9af0: 20 69 66 20 70 72 65 72 65 71 20 74 65 73 74 20 if prereq test
9b00: 77 69 74 68 20 69 74 65 6d 70 61 74 68 3d 72 65 with itempath=re
9b10: 66 2d 69 74 65 6d 2d 70 61 74 68 20 61 6e 64 20 f-item-path and
9b20: 43 4f 4d 50 4c 45 54 45 44 20 77 69 74 68 20 50 COMPLETED with P
9b30: 41 53 53 2c 20 57 41 52 4e 2c 20 43 48 45 43 4b ASS, WARN, CHECK
9b40: 2c 20 6f 72 20 57 41 49 56 45 44 20 74 68 65 6e , or WAIVED then
9b50: 20 70 72 65 72 65 71 20 69 73 20 6d 65 74 0a 28 prereq is met.(
9b60: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 70 define (db:get-p
9b70: 72 65 72 65 71 73 2d 6e 6f 74 2d 6d 65 74 20 64 rereqs-not-met d
9b80: 62 20 72 75 6e 2d 69 64 20 77 61 69 74 6f 6e 73 b run-id waitons
9b90: 20 72 65 66 2d 69 74 65 6d 2d 70 61 74 68 29 0a ref-item-path).
9ba0: 20 20 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 77 (if (or (not w
9bb0: 61 69 74 6f 6e 73 29 0a 09 20 20 28 6e 75 6c 6c aitons).. (null
9bc0: 3f 20 77 61 69 74 6f 6e 73 29 29 0a 20 20 20 20 ? waitons)).
9bd0: 20 20 27 28 29 0a 20 20 20 20 20 20 28 6c 65 74 '(). (let
9be0: 2a 20 28 28 75 6e 6d 65 74 2d 70 72 65 2d 72 65 * ((unmet-pre-re
9bf0: 71 73 20 27 28 29 29 0a 09 20 20 20 20 20 28 72 qs '()).. (r
9c00: 65 73 75 6c 74 20 20 20 20 20 20 20 20 20 27 28 esult '(
9c10: 29 29 29 0a 09 28 66 6f 72 2d 65 61 63 68 20 0a )))..(for-each .
9c20: 09 20 28 6c 61 6d 62 64 61 20 28 77 61 69 74 6f . (lambda (waito
9c30: 6e 74 65 73 74 2d 6e 61 6d 65 29 0a 09 20 20 20 ntest-name)..
9c40: 3b 3b 20 62 79 20 67 65 74 74 69 6e 67 20 74 68 ;; by getting th
9c50: 65 20 74 65 73 74 73 20 77 69 74 68 20 6d 61 74 e tests with mat
9c60: 63 68 69 6e 67 20 6e 61 6d 65 20 77 65 20 61 72 ching name we ar
9c70: 65 20 6c 6f 6f 6b 69 6e 67 20 6f 6e 6c 79 20 61 e looking only a
9c80: 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 74 t the matching t
9c90: 65 73 74 20 0a 09 20 20 20 3b 3b 20 61 6e 64 20 est .. ;; and
9ca0: 72 65 6c 61 74 65 64 20 73 75 62 20 69 74 65 6d related sub item
9cb0: 73 0a 09 20 20 20 28 6c 65 74 20 28 28 74 65 73 s.. (let ((tes
9cc0: 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ts (
9cd0: 64 62 2d 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 db-get-tests-for
9ce0: 2d 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 77 -run db run-id w
9cf0: 61 69 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 23 aitontest-name #
9d00: 66 20 27 28 29 20 27 28 29 29 29 0a 09 09 20 28 f '() '()))... (
9d10: 65 76 65 72 2d 73 65 65 6e 20 20 20 20 20 20 20 ever-seen
9d20: 20 20 23 66 29 0a 09 09 20 28 70 61 72 65 6e 74 #f)... (parent
9d30: 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 66 29 0a -waiton-met #f).
9d40: 09 09 20 28 69 74 65 6d 2d 77 61 69 74 6f 6e 2d .. (item-waiton-
9d50: 6d 65 74 20 20 20 23 66 29 29 0a 09 20 20 20 20 met #f))..
9d60: 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 20 20 (for-each ..
9d70: 20 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 (lambda (test
9d80: 29 0a 09 09 3b 3b 20 28 69 66 20 28 65 71 75 61 )...;; (if (equa
9d90: 6c 3f 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 l? waitontest-na
9da0: 6d 65 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d me (db:test-get-
9db0: 74 65 73 74 6e 61 6d 65 20 74 65 73 74 29 29 20 testname test))
9dc0: 3b 3b 20 62 79 20 64 65 66 69 6e 74 69 6f 6e 20 ;; by defintion
9dd0: 74 68 69 73 20 68 61 64 20 62 65 74 74 65 72 20 this had better
9de0: 62 65 20 74 72 75 65 20 2e 2e 2e 0a 09 09 28 6c be true ......(l
9df0: 65 74 2a 20 28 28 73 74 61 74 65 20 20 20 20 20 et* ((state
9e00: 20 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 (db:test
9e10: 2d 67 65 74 2d 73 74 61 74 65 20 74 65 73 74 29 -get-state test)
9e20: 29 0a 09 09 20 20 20 20 20 20 20 28 73 74 61 74 )... (stat
9e30: 75 73 20 20 20 20 20 20 20 20 20 20 20 20 28 64 us (d
9e40: 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 75 b:test-get-statu
9e50: 73 20 74 65 73 74 29 29 0a 09 09 20 20 20 20 20 s test))...
9e60: 20 20 28 69 74 65 6d 2d 70 61 74 68 20 20 20 20 (item-path
9e70: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65 (db:test-ge
9e80: 74 2d 69 74 65 6d 2d 70 61 74 68 20 74 65 73 74 t-item-path test
9e90: 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 73 2d ))... (is-
9ea0: 63 6f 6d 70 6c 65 74 65 64 20 20 20 20 20 20 28 completed (
9eb0: 65 71 75 61 6c 3f 20 73 74 61 74 65 20 22 43 4f equal? state "CO
9ec0: 4d 50 4c 45 54 45 44 22 29 29 0a 09 09 20 20 20 MPLETED"))...
9ed0: 20 20 20 20 28 69 73 2d 6f 6b 20 20 20 20 20 20 (is-ok
9ee0: 20 20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 73 (member s
9ef0: 74 61 74 75 73 20 27 28 22 50 41 53 53 22 20 22 tatus '("PASS" "
9f00: 57 41 52 4e 22 20 22 43 48 45 43 4b 22 20 22 57 WARN" "CHECK" "W
9f10: 41 49 56 45 44 22 29 29 29 0a 09 09 20 20 20 20 AIVED")))...
9f20: 20 20 20 28 73 61 6d 65 2d 69 74 65 6d 70 61 74 (same-itempat
9f30: 68 20 20 20 20 20 28 65 71 75 61 6c 3f 20 72 65 h (equal? re
9f40: 66 2d 69 74 65 6d 2d 70 61 74 68 20 69 74 65 6d f-item-path item
9f50: 2d 70 61 74 68 29 29 29 0a 09 09 20 20 28 73 65 -path)))... (se
9f60: 74 21 20 65 76 65 72 2d 73 65 65 6e 20 23 74 29 t! ever-seen #t)
9f70: 0a 09 09 20 20 28 63 6f 6e 64 0a 09 09 20 20 20 ... (cond...
9f80: 3b 3b 20 63 61 73 65 20 31 2c 20 6e 6f 6e 2d 69 ;; case 1, non-i
9f90: 74 65 6d 20 28 70 61 72 65 6e 74 20 74 65 73 74 tem (parent test
9fa0: 29 20 69 73 20 0a 09 09 20 20 20 28 28 61 6e 64 ) is ... ((and
9fb0: 20 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 (equal? item-pa
9fc0: 74 68 20 22 22 29 20 3b 3b 20 74 68 69 73 20 69 th "") ;; this i
9fd0: 73 20 74 68 65 20 70 61 72 65 6e 74 20 74 65 73 s the parent tes
9fe0: 74 0a 09 09 09 20 69 73 2d 63 6f 6d 70 6c 65 74 t.... is-complet
9ff0: 65 64 0a 09 09 09 20 69 73 2d 6f 6b 29 0a 09 09 ed.... is-ok)...
a000: 20 20 20 20 28 73 65 74 21 20 70 61 72 65 6e 74 (set! parent
a010: 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 23 74 29 29 -waiton-met #t))
a020: 0a 09 09 20 20 20 28 28 61 6e 64 20 73 61 6d 65 ... ((and same
a030: 2d 69 74 65 6d 70 61 74 68 0a 09 09 09 20 69 73 -itempath.... is
a040: 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 20 69 -completed.... i
a050: 73 2d 6f 6b 29 0a 09 09 20 20 20 20 28 73 65 74 s-ok)... (set
a060: 21 20 69 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 ! item-waiton-me
a070: 74 20 23 74 29 29 29 29 29 0a 09 20 20 20 20 20 t #t)))))..
a080: 20 74 65 73 74 73 29 0a 09 20 20 20 20 20 28 69 tests).. (i
a090: 66 20 28 6e 6f 74 20 28 6f 72 20 70 61 72 65 6e f (not (or paren
a0a0: 74 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 69 74 65 t-waiton-met ite
a0b0: 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 29 29 0a 09 m-waiton-met))..
a0c0: 09 20 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 . (set! result (
a0d0: 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 2d cons waitontest-
a0e0: 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 29 0a 09 name result)))..
a0f0: 20 20 20 20 20 3b 3b 20 69 66 20 74 68 65 20 74 ;; if the t
a100: 65 73 74 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 est is not found
a110: 20 74 68 65 6e 20 63 6c 65 61 72 6c 79 20 74 68 then clearly th
a120: 65 20 77 61 69 74 6f 6e 20 69 73 20 6e 6f 74 20 e waiton is not
a130: 6d 65 74 2e 2e 2e 0a 09 20 20 20 20 20 28 69 66 met..... (if
a140: 20 28 6e 6f 74 20 65 76 65 72 2d 73 65 65 6e 29 (not ever-seen)
a150: 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 63 6f (set! result (co
a160: 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 2d 6e 61 ns waitontest-na
a170: 6d 65 20 72 65 73 75 6c 74 29 29 29 29 29 0a 09 me result)))))..
a180: 77 61 69 74 6f 6e 73 29 0a 20 20 20 20 20 20 28 waitons). (
a190: 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65 delete-duplicate
a1a0: 73 20 72 65 73 75 6c 74 29 29 29 29 0a 0a 28 64 s result))))..(d
a1b0: 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 73 74 efine (db:testst
a1c0: 65 70 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 ep-set-status! d
a1d0: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
a1e0: 6d 65 20 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 me teststep-name
a1f0: 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 state-in status
a200: 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 63 6f -in item-path co
a210: 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 0a 20 mment logfile).
a220: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 (debug:print 4
a230: 22 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 "run-id: " run-i
a240: 64 20 22 20 74 65 73 74 2d 6e 61 6d 65 3a 20 22 d " test-name: "
a250: 20 74 65 73 74 2d 6e 61 6d 65 29 0a 20 20 28 6c test-name). (l
a260: 65 74 2a 20 28 28 73 74 61 74 65 20 20 20 20 20 et* ((state
a270: 28 63 68 65 63 6b 2d 76 61 6c 69 64 2d 69 74 65 (check-valid-ite
a280: 6d 73 20 22 73 74 61 74 65 22 20 73 74 61 74 65 ms "state" state
a290: 2d 69 6e 29 29 0a 09 20 28 73 74 61 74 75 73 20 -in)).. (status
a2a0: 20 20 20 28 63 68 65 63 6b 2d 76 61 6c 69 64 2d (check-valid-
a2b0: 69 74 65 6d 73 20 22 73 74 61 74 75 73 22 20 73 items "status" s
a2c0: 74 61 74 75 73 2d 69 6e 29 29 0a 09 20 28 74 65 tatus-in)).. (te
a2d0: 73 74 64 61 74 20 20 20 28 64 62 3a 67 65 74 2d stdat (db:get-
a2e0: 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e test-info db run
a2f0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 -id test-name it
a300: 65 6d 2d 70 61 74 68 29 29 29 0a 20 20 20 20 28 em-path))). (
a310: 64 65 62 75 67 3a 70 72 69 6e 74 20 35 20 22 74 debug:print 5 "t
a320: 65 73 74 64 61 74 3a 20 22 20 74 65 73 74 64 61 estdat: " testda
a330: 74 29 0a 20 20 20 20 28 69 66 20 28 61 6e 64 20 t). (if (and
a340: 74 65 73 74 64 61 74 20 3b 3b 20 69 66 20 74 68 testdat ;; if th
a350: 65 20 73 65 63 74 69 6f 6e 20 65 78 69 73 74 73 e section exists
a360: 20 74 68 65 6e 20 66 6f 72 63 65 20 73 70 65 63 then force spec
a370: 69 66 69 63 61 74 69 6f 6e 20 42 55 47 2c 20 49 ification BUG, I
a380: 20 64 6f 6e 27 74 20 6c 69 6b 65 20 68 6f 77 20 don't like how
a390: 74 68 69 73 20 77 6f 72 6b 73 2e 0a 09 20 20 20 this works...
a3a0: 20 20 28 6f 72 20 28 6e 6f 74 20 73 74 61 74 65 (or (not state
a3b0: 29 28 6e 6f 74 20 73 74 61 74 75 73 29 29 29 0a )(not status))).
a3c0: 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 .(debug:print 0
a3d0: 22 57 41 52 4e 49 4e 47 3a 20 49 6e 76 61 6c 69 "WARNING: Invali
a3e0: 64 20 22 20 28 69 66 20 73 74 61 74 75 73 20 22 d " (if status "
a3f0: 73 74 61 74 75 73 22 20 22 73 74 61 74 65 22 29 status" "state")
a400: 0a 09 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 .. " value
a410: 20 5c 22 22 20 28 69 66 20 73 74 61 74 75 73 20 \"" (if status
a420: 73 74 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d state-in status-
a430: 69 6e 29 20 22 5c 22 2c 20 75 70 64 61 74 65 20 in) "\", update
a440: 79 6f 75 72 20 76 61 6c 69 64 76 61 6c 75 65 73 your validvalues
a450: 20 73 65 63 74 69 6f 6e 20 69 6e 20 6d 65 67 61 section in mega
a460: 74 65 73 74 2e 63 6f 6e 66 69 67 22 29 29 0a 20 test.config")).
a470: 20 20 20 28 69 66 20 74 65 73 74 64 61 74 0a 09 (if testdat..
a480: 28 6c 65 74 20 28 28 74 65 73 74 2d 69 64 20 28 (let ((test-id (
a490: 74 65 73 74 3a 67 65 74 2d 69 64 20 74 65 73 74 test:get-id test
a4a0: 64 61 74 29 29 29 0a 09 20 20 3b 3b 20 46 49 58 dat))).. ;; FIX
a4b0: 4d 45 20 2d 20 74 68 69 73 20 73 68 6f 75 6c 64 ME - this should
a4c0: 20 6e 6f 74 20 75 70 64 61 74 65 20 74 68 65 20 not update the
a4d0: 6c 6f 67 66 69 6c 65 20 75 6e 6c 65 73 73 20 69 logfile unless i
a4e0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a t is specified..
a4f0: 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 . (sqlite3:exec
a500: 75 74 65 20 64 62 20 0a 09 09 09 22 49 4e 53 45 ute db ...."INSE
a510: 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 69 6e RT OR REPLACE in
a520: 74 6f 20 74 65 73 74 5f 73 74 65 70 73 20 28 74 to test_steps (t
a530: 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c est_id,stepname,
a540: 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 state,status,eve
a550: 6e 74 5f 74 69 6d 65 2c 63 6f 6d 6d 65 6e 74 2c nt_time,comment,
a560: 6c 6f 67 66 69 6c 65 29 20 56 41 4c 55 45 53 28 logfile) VALUES(
a570: 3f 2c 3f 2c 3f 2c 3f 2c 73 74 72 66 74 69 6d 65 ?,?,?,?,strftime
a580: 28 27 25 73 27 2c 27 6e 6f 77 27 29 2c 3f 2c 3f ('%s','now'),?,?
a590: 29 3b 22 0a 09 09 09 74 65 73 74 2d 69 64 20 74 );"....test-id t
a5a0: 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 eststep-name sta
a5b0: 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 te-in status-in
a5c0: 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d (if comment comm
a5d0: 65 6e 74 20 22 22 29 20 28 69 66 20 6c 6f 67 66 ent "") (if logf
a5e0: 69 6c 65 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 ile logfile ""))
a5f0: 0a 09 20 20 23 74 29 20 3b 3b 20 66 61 6b 65 20 .. #t) ;; fake
a600: 6f 75 74 20 61 20 23 74 20 2d 20 63 6f 75 6c 64 out a #t - could
a610: 20 62 65 20 65 78 65 63 75 74 65 20 69 73 20 72 be execute is r
a620: 65 74 75 72 6e 69 6e 67 20 73 6f 6d 65 74 68 69 eturning somethi
a630: 6e 67 20 63 6f 6d 70 6c 69 63 61 74 65 64 0a 09 ng complicated..
a640: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
a650: 45 52 52 4f 52 3a 20 43 61 6e 27 74 20 75 70 64 ERROR: Can't upd
a660: 61 74 65 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 ate " test-name
a670: 22 20 66 6f 72 20 72 75 6e 20 22 20 72 75 6e 2d " for run " run-
a680: 69 64 20 22 20 2d 3e 20 6e 6f 20 73 75 63 68 20 id " -> no such
a690: 74 65 73 74 20 69 6e 20 64 62 22 29 29 29 29 0a test in db")))).
a6a0: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
a6b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a6c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a6d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a6e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 45 78 74 =========.;; Ext
a6f0: 72 61 63 74 20 6f 64 73 20 66 69 6c 65 20 66 72 ract ods file fr
a700: 6f 6d 20 74 68 65 20 64 62 0a 3b 3b 3d 3d 3d 3d om the db.;;====
a710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a750: 3d 3d 0a 0a 3b 3b 20 72 75 6e 73 70 61 74 74 20 ==..;; runspatt
a760: 69 73 20 61 20 63 6f 6d 6d 61 20 64 65 6c 69 6d is a comma delim
a770: 69 74 65 64 20 6c 69 73 74 20 6f 66 20 72 75 6e ited list of run
a780: 20 70 61 74 74 65 72 6e 73 0a 3b 3b 20 6b 65 79 patterns.;; key
a790: 70 61 74 74 2d 61 6c 69 73 74 20 6d 75 73 74 20 patt-alist must
a7a0: 63 6f 6e 74 61 69 6e 20 2a 61 6c 6c 2a 20 6b 65 contain *all* ke
a7b0: 79 73 20 77 69 74 68 20 61 6e 20 61 73 73 6f 63 ys with an assoc
a7c0: 69 61 74 65 64 20 70 61 74 74 65 72 6e 3a 20 27 iated pattern: '
a7d0: 28 20 28 22 4b 45 59 31 22 20 22 25 22 29 20 2e ( ("KEY1" "%") .
a7e0: 2e 20 29 0a 28 64 65 66 69 6e 65 20 28 64 62 3a . ).(define (db:
a7f0: 65 78 74 72 61 63 74 2d 6f 64 73 2d 66 69 6c 65 extract-ods-file
a800: 20 64 62 20 6f 75 74 70 75 74 66 69 6c 65 20 6b db outputfile k
a810: 65 79 70 61 74 74 2d 61 6c 69 73 74 20 72 75 6e eypatt-alist run
a820: 73 70 61 74 74 20 70 61 74 68 6d 6f 64 29 0a 20 spatt pathmod).
a830: 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 73 74 72 (let* ((keysstr
a840: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 (string-inters
a850: 70 65 72 73 65 20 28 6d 61 70 20 63 61 72 20 6b perse (map car k
a860: 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 22 2c eypatt-alist) ",
a870: 22 29 29 0a 09 20 28 6b 65 79 71 72 79 20 20 20 ")).. (keyqry
a880: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
a890: 72 73 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 rse (map (lambda
a8a0: 20 28 70 29 28 63 6f 6e 63 20 28 63 61 72 20 70 (p)(conc (car p
a8b0: 29 20 22 20 4c 49 4b 45 20 3f 20 22 29 29 20 6b ) " LIKE ? ")) k
a8c0: 65 79 70 61 74 74 2d 61 6c 69 73 74 29 20 22 20 eypatt-alist) "
a8d0: 41 4e 44 20 22 29 29 0a 09 20 28 6e 75 6d 6b 65 AND ")).. (numke
a8e0: 79 73 20 20 28 6c 65 6e 67 74 68 20 6b 65 79 70 ys (length keyp
a8f0: 61 74 74 2d 61 6c 69 73 74 29 29 0a 09 20 28 74 att-alist)).. (t
a900: 65 73 74 2d 69 64 73 20 27 28 29 29 0a 09 20 28 est-ids '()).. (
a910: 77 69 6e 64 6f 77 73 20 20 28 61 6e 64 20 70 61 windows (and pa
a920: 74 68 6d 6f 64 20 28 73 75 62 73 74 72 69 6e 67 thmod (substring
a930: 2d 69 6e 64 65 78 20 22 5c 5c 22 20 70 61 74 68 -index "\\" path
a940: 6d 6f 64 29 29 29 0a 09 20 28 74 65 6d 70 64 69 mod))).. (tempdi
a950: 72 20 20 28 63 6f 6e 63 20 22 2f 74 6d 70 2f 22 r (conc "/tmp/"
a960: 20 28 63 75 72 72 65 6e 74 2d 75 73 65 72 2d 6e (current-user-n
a970: 61 6d 65 29 20 22 2f 22 20 72 75 6e 73 70 61 74 ame) "/" runspat
a980: 74 20 22 5f 22 20 28 72 61 6e 64 6f 6d 20 31 30 t "_" (random 10
a990: 30 30 30 29 20 22 5f 22 20 28 63 75 72 72 65 6e 000) "_" (curren
a9a0: 74 2d 70 72 6f 63 65 73 73 2d 69 64 29 29 29 0a t-process-id))).
a9b0: 09 20 28 72 75 6e 73 68 65 61 64 65 72 20 28 61 . (runsheader (a
a9c0: 70 70 65 6e 64 20 28 6c 69 73 74 20 22 52 75 6e ppend (list "Run
a9d0: 20 49 64 22 20 22 52 75 6e 6e 61 6d 65 22 29 20 Id" "Runname")
a9e0: 3b 20 30 20 31 0a 09 09 09 20 20 20 20 20 28 6d ; 0 1.... (m
a9f0: 61 70 20 63 61 72 20 6b 65 79 70 61 74 74 2d 61 ap car keypatt-a
aa00: 6c 69 73 74 29 20 20 20 3b 20 2b 20 4e 20 3d 20 list) ; + N =
aa10: 6c 65 6e 67 74 68 20 6b 65 79 70 61 74 74 2d 61 length keypatt-a
aa20: 6c 69 73 74 0a 09 09 09 20 20 20 20 20 28 6c 69 list.... (li
aa30: 73 74 20 22 54 65 73 74 6e 61 6d 65 22 20 20 20 st "Testname"
aa40: 20 20 20 20 20 20 20 3b 20 32 0a 09 09 09 09 20 ; 2.....
aa50: 20 20 22 49 74 65 6d 20 50 61 74 68 22 20 20 20 "Item Path"
aa60: 20 20 20 20 20 20 3b 20 33 20 0a 09 09 09 09 20 ; 3 .....
aa70: 20 20 22 44 65 73 63 72 69 70 74 69 6f 6e 22 20 "Description"
aa80: 20 20 20 20 20 20 3b 20 34 20 0a 09 09 09 09 20 ; 4 .....
aa90: 20 20 22 53 74 61 74 65 22 20 20 20 20 20 20 20 "State"
aaa0: 20 20 20 20 20 20 3b 20 35 20 0a 09 09 09 09 20 ; 5 .....
aab0: 20 20 22 53 74 61 74 75 73 22 20 20 20 20 20 20 "Status"
aac0: 20 20 20 20 20 20 3b 20 36 20 20 0a 09 09 09 09 ; 6 .....
aad0: 20 20 20 22 46 69 6e 61 6c 20 4c 6f 67 22 20 20 "Final Log"
aae0: 20 20 20 20 20 20 20 3b 20 37 20 0a 09 09 09 09 ; 7 .....
aaf0: 20 20 20 22 52 75 6e 20 44 75 72 61 74 69 6f 6e "Run Duration
ab00: 22 20 20 20 20 20 20 3b 20 38 20 0a 09 09 09 09 " ; 8 .....
ab10: 20 20 20 22 57 68 65 6e 20 52 75 6e 22 20 20 20 "When Run"
ab20: 20 20 20 20 20 20 20 3b 20 39 20 0a 09 09 09 09 ; 9 .....
ab30: 20 20 20 22 54 61 67 73 22 20 20 20 20 20 20 20 "Tags"
ab40: 20 20 20 20 20 20 20 3b 20 31 30 0a 09 09 09 09 ; 10.....
ab50: 20 20 20 22 52 75 6e 20 4f 77 6e 65 72 22 20 20 "Run Owner"
ab60: 20 20 20 20 20 20 20 3b 20 31 31 0a 09 09 09 09 ; 11.....
ab70: 20 20 20 22 43 6f 6d 6d 65 6e 74 22 20 20 20 20 "Comment"
ab80: 20 20 20 20 20 20 20 3b 20 31 32 0a 09 09 09 09 ; 12.....
ab90: 20 20 20 22 41 75 74 68 6f 72 22 20 20 20 20 20 "Author"
aba0: 20 20 20 20 20 20 20 3b 20 31 33 0a 09 09 09 09 ; 13.....
abb0: 20 20 20 22 54 65 73 74 20 4f 77 6e 65 72 22 20 "Test Owner"
abc0: 20 20 20 20 20 20 20 3b 20 31 34 0a 09 09 09 09 ; 14.....
abd0: 20 20 20 22 52 65 76 69 65 77 65 64 22 20 20 20 "Reviewed"
abe0: 20 20 20 20 20 20 20 3b 20 31 35 0a 09 09 09 09 ; 15.....
abf0: 20 20 20 22 44 69 73 6b 66 72 65 65 22 20 20 20 "Diskfree"
ac00: 20 20 20 20 20 20 20 3b 20 31 36 0a 09 09 09 09 ; 16.....
ac10: 20 20 20 22 55 6e 61 6d 65 22 20 20 20 20 20 20 "Uname"
ac20: 20 20 20 20 20 20 20 3b 20 31 37 0a 09 09 09 09 ; 17.....
ac30: 20 20 20 22 52 75 6e 64 69 72 22 20 20 20 20 20 "Rundir"
ac40: 20 20 20 20 20 20 20 3b 20 31 38 0a 09 09 09 09 ; 18.....
ac50: 20 20 20 22 48 6f 73 74 22 20 20 20 20 20 20 20 "Host"
ac60: 20 20 20 20 20 20 20 3b 20 31 39 0a 09 09 09 09 ; 19.....
ac70: 20 20 20 22 43 70 75 20 4c 6f 61 64 22 20 20 20 "Cpu Load"
ac80: 20 20 20 20 20 20 20 3b 20 32 30 0a 09 09 09 09 ; 20.....
ac90: 20 20 20 29 29 29 0a 09 20 28 72 65 73 75 6c 74 ))).. (result
aca0: 73 20 28 6c 69 73 74 20 72 75 6e 73 68 65 61 64 s (list runshead
acb0: 65 72 29 29 09 09 09 20 0a 09 20 28 74 65 73 74 er))... .. (test
acc0: 64 61 74 61 2d 68 65 61 64 65 72 20 28 6c 69 73 data-header (lis
acd0: 74 20 22 52 75 6e 20 49 64 22 20 22 54 65 73 74 t "Run Id" "Test
ace0: 6e 61 6d 65 22 20 22 49 74 65 6d 20 50 61 74 68 name" "Item Path
acf0: 22 20 22 43 61 74 65 67 6f 72 79 22 20 22 56 61 " "Category" "Va
ad00: 72 69 61 62 6c 65 22 20 22 56 61 6c 75 65 22 20 riable" "Value"
ad10: 22 45 78 70 65 63 74 65 64 22 20 22 54 6f 6c 22 "Expected" "Tol"
ad20: 20 22 55 6e 69 74 73 22 20 22 53 74 61 74 75 73 "Units" "Status
ad30: 22 20 22 43 6f 6d 6d 65 6e 74 22 29 29 0a 09 20 " "Comment"))..
ad40: 28 6d 61 69 6e 71 72 79 20 28 63 6f 6e 63 20 22 (mainqry (conc "
ad50: 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 20 20 SELECT.
ad60: 20 20 20 20 20 74 2e 74 65 73 74 6e 61 6d 65 2c t.testname,
ad70: 72 2e 69 64 2c 72 75 6e 6e 61 6d 65 2c 22 20 6b r.id,runname," k
ad80: 65 79 73 73 74 72 20 22 2c 74 2e 74 65 73 74 6e eysstr ",t.testn
ad90: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ame,.
ada0: 20 20 20 74 2e 69 74 65 6d 5f 70 61 74 68 2c 74 t.item_path,t
adb0: 6d 2e 64 65 73 63 72 69 70 74 69 6f 6e 2c 74 2e m.description,t.
adc0: 73 74 61 74 65 2c 74 2e 73 74 61 74 75 73 2c 0a state,t.status,.
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 fi
ade0: 6e 61 6c 5f 6c 6f 67 66 2c 72 75 6e 5f 64 75 72 nal_logf,run_dur
adf0: 61 74 69 6f 6e 2c 20 0a 20 20 20 20 20 20 20 20 ation, .
ae00: 20 20 20 20 20 20 73 74 72 66 74 69 6d 65 28 27 strftime('
ae10: 25 6d 2f 25 64 2f 25 59 20 25 48 3a 25 4d 3a 25 %m/%d/%Y %H:%M:%
ae20: 53 27 2c 64 61 74 65 74 69 6d 65 28 74 2e 65 76 S',datetime(t.ev
ae30: 65 6e 74 5f 74 69 6d 65 2c 27 75 6e 69 78 65 70 ent_time,'unixep
ae40: 6f 63 68 27 29 2c 27 6c 6f 63 61 6c 74 69 6d 65 och'),'localtime
ae50: 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '),.
ae60: 20 20 74 6d 2e 74 61 67 73 2c 72 2e 6f 77 6e 65 tm.tags,r.owne
ae70: 72 2c 74 2e 63 6f 6d 6d 65 6e 74 2c 0a 20 20 20 r,t.comment,.
ae80: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f autho
ae90: 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r,.
aea0: 20 74 6d 2e 6f 77 6e 65 72 2c 72 65 76 69 65 77 tm.owner,review
aeb0: 65 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed,.
aec0: 20 20 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d 65 diskfree,uname
aed0: 2c 72 75 6e 64 69 72 2c 0a 20 20 20 20 20 20 20 ,rundir,.
aee0: 20 20 20 20 20 20 20 68 6f 73 74 2c 63 70 75 6c host,cpul
aef0: 6f 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 oad.
af00: 46 52 4f 4d 20 74 65 73 74 73 20 41 53 20 74 20 FROM tests AS t
af10: 4a 4f 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f JOIN runs AS r O
af20: 4e 20 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 N t.run_id=r.id
af30: 4a 4f 49 4e 20 74 65 73 74 5f 6d 65 74 61 20 41 JOIN test_meta A
af40: 53 20 74 6d 20 4f 4e 20 74 6d 2e 74 65 73 74 6e S tm ON tm.testn
af50: 61 6d 65 3d 74 2e 74 65 73 74 6e 61 6d 65 0a 20 ame=t.testname.
af60: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 WHERE
af70: 20 72 75 6e 6e 61 6d 65 20 4c 49 4b 45 20 3f 20 runname LIKE ?
af80: 41 4e 44 20 22 20 6b 65 79 71 72 79 20 22 3b 22 AND " keyqry ";"
af90: 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 ))). (debug:p
afa0: 72 69 6e 74 20 32 20 22 55 73 69 6e 67 20 22 20 rint 2 "Using "
afb0: 74 65 6d 70 64 69 72 20 22 20 66 6f 72 20 63 6f tempdir " for co
afc0: 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65 20 6f nstructing the o
afd0: 64 73 20 66 69 6c 65 2e 20 6b 65 79 71 72 79 3a ds file. keyqry:
afe0: 20 22 20 6b 65 79 71 72 79 20 22 20 6b 65 79 73 " keyqry " keys
aff0: 74 72 3a 20 22 20 6b 65 79 73 73 74 72 20 22 20 tr: " keysstr "
b000: 77 69 74 68 20 6b 65 79 73 3a 20 22 20 28 6d 61 with keys: " (ma
b010: 70 20 63 61 64 72 20 6b 65 79 70 61 74 74 2d 61 p cadr keypatt-a
b020: 6c 69 73 74 29 0a 09 09 20 22 5c 6e 20 20 20 20 list)... "\n
b030: 20 20 6d 61 69 6e 71 72 79 3a 20 22 20 6d 61 69 mainqry: " mai
b040: 6e 71 72 79 29 0a 20 20 20 20 3b 3b 20 22 45 78 nqry). ;; "Ex
b050: 70 65 63 74 65 64 20 56 61 6c 75 65 22 0a 20 20 pected Value".
b060: 20 20 3b 3b 20 22 56 61 6c 75 65 20 46 6f 75 6e ;; "Value Foun
b070: 64 22 0a 20 20 20 20 3b 3b 20 22 54 6f 6c 65 72 d". ;; "Toler
b080: 61 6e 63 65 22 0a 20 20 20 20 28 61 70 70 6c 79 ance". (apply
b090: 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 sqlite3:for-eac
b0a0: 68 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d 62 64 h-row.. (lambd
b0b0: 61 20 28 74 65 73 74 2d 69 64 20 2e 20 62 29 0a a (test-id . b).
b0c0: 09 20 20 20 20 20 28 73 65 74 21 20 74 65 73 74 . (set! test
b0d0: 2d 69 64 73 20 28 63 6f 6e 73 20 74 65 73 74 2d -ids (cons test-
b0e0: 69 64 20 74 65 73 74 2d 69 64 73 29 29 20 20 20 id test-ids))
b0f0: 3b 3b 20 74 65 73 74 2d 69 64 20 69 73 20 6e 6f ;; test-id is no
b100: 77 20 74 65 73 74 6e 61 6d 65 0a 09 20 20 20 20 w testname..
b110: 20 28 73 65 74 21 20 72 65 73 75 6c 74 73 20 28 (set! results (
b120: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 3b append results ;
b130: 3b 20 6e 6f 74 65 2c 20 64 72 6f 70 20 74 68 65 ; note, drop the
b140: 20 74 65 73 74 2d 69 64 0a 09 09 09 09 20 20 20 test-id.....
b150: 28 6c 69 73 74 0a 09 09 09 09 20 20 20 20 28 69 (list..... (i
b160: 66 20 70 61 74 68 6d 6f 64 0a 09 09 09 09 09 28 f pathmod......(
b170: 6c 65 74 2a 20 28 28 76 62 20 20 20 20 20 20 20 let* ((vb
b180: 20 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 62 (apply vector b
b190: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
b1a0: 6b 65 79 76 61 6c 73 20 20 20 28 6c 65 74 20 6c keyvals (let l
b1b0: 6f 6f 70 20 28 28 69 20 20 20 20 30 29 0a 09 09 oop ((i 0)...
b1c0: 09 09 09 09 09 09 20 20 20 20 20 28 72 65 73 20 ...... (res
b1d0: 27 28 29 29 29 0a 09 09 09 09 09 09 09 20 20 20 '()))........
b1e0: 20 28 69 66 20 28 3e 3d 20 69 20 6e 75 6d 6b 65 (if (>= i numke
b1f0: 79 73 29 0a 09 09 09 09 09 09 09 09 72 65 73 0a ys).........res.
b200: 09 09 09 09 09 09 09 09 28 6c 6f 6f 70 20 28 2b ........(loop (+
b210: 20 69 20 31 29 0a 09 09 09 09 09 09 09 09 20 20 i 1).........
b220: 20 20 20 20 28 61 70 70 65 6e 64 20 72 65 73 20 (append res
b230: 28 6c 69 73 74 20 28 76 65 63 74 6f 72 2d 72 65 (list (vector-re
b240: 66 20 76 62 20 28 2b 20 69 20 32 29 29 29 29 29 f vb (+ i 2)))))
b250: 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 )))......
b260: 28 72 75 6e 6e 61 6d 65 20 20 20 28 76 65 63 74 (runname (vect
b270: 6f 72 2d 72 65 66 20 76 62 20 31 29 29 0a 09 09 or-ref vb 1))...
b280: 09 09 09 20 20 20 20 20 20 20 28 74 65 73 74 6e ... (testn
b290: 61 6d 65 20 20 28 76 65 63 74 6f 72 2d 72 65 66 ame (vector-ref
b2a0: 20 76 62 20 28 2b 20 20 32 20 6e 75 6d 6b 65 79 vb (+ 2 numkey
b2b0: 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 s)))......
b2c0: 20 28 69 74 65 6d 2d 70 61 74 68 20 28 76 65 63 (item-path (vec
b2d0: 74 6f 72 2d 72 65 66 20 76 62 20 28 2b 20 20 33 tor-ref vb (+ 3
b2e0: 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 numkeys))).....
b2f0: 09 20 20 20 20 20 20 20 28 66 69 6e 61 6c 2d 6c . (final-l
b300: 6f 67 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 og (vector-ref v
b310: 62 20 28 2b 20 20 37 20 6e 75 6d 6b 65 79 73 29 b (+ 7 numkeys)
b320: 29 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 ))...... (
b330: 72 75 6e 2d 64 69 72 20 20 20 28 76 65 63 74 6f run-dir (vecto
b340: 72 2d 72 65 66 20 76 62 20 28 2b 20 31 38 20 6e r-ref vb (+ 18 n
b350: 75 6d 6b 65 79 73 29 29 29 0a 09 09 09 09 09 20 umkeys)))......
b360: 20 20 20 20 20 20 28 6c 6f 67 2d 66 70 61 74 68 (log-fpath
b370: 20 28 63 6f 6e 63 20 72 75 6e 2d 64 69 72 20 22 (conc run-dir "
b380: 2f 22 20 20 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 /" final-log)))
b390: 20 3b 3b 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 ;; (string-inte
b3a0: 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c 73 20 rsperse keyvals
b3b0: 22 2f 22 29 20 22 2f 22 20 74 65 73 74 6e 61 6d "/") "/" testnam
b3c0: 65 20 22 2f 22 20 69 74 65 6d 2d 70 61 74 68 20 e "/" item-path
b3d0: 22 2f 22 0a 09 09 09 09 09 20 20 28 64 65 62 75 "/"...... (debu
b3e0: 67 3a 70 72 69 6e 74 20 34 20 22 6c 6f 67 3a 20 g:print 4 "log:
b3f0: 22 20 6c 6f 67 2d 66 70 61 74 68 20 22 20 65 78 " log-fpath " ex
b400: 69 73 74 73 3a 20 22 20 28 66 69 6c 65 2d 65 78 ists: " (file-ex
b410: 69 73 74 73 3f 20 6c 6f 67 2d 66 70 61 74 68 29 ists? log-fpath)
b420: 29 0a 09 09 09 09 09 20 20 28 76 65 63 74 6f 72 )...... (vector
b430: 2d 73 65 74 21 20 76 62 20 28 2b 20 37 20 6e 75 -set! vb (+ 7 nu
b440: 6d 6b 65 79 73 29 20 28 69 66 20 28 66 69 6c 65 mkeys) (if (file
b450: 2d 65 78 69 73 74 73 3f 20 6c 6f 67 2d 66 70 61 -exists? log-fpa
b460: 74 68 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 th)..........
b470: 20 28 6c 65 74 20 28 28 6e 65 77 70 61 74 68 20 (let ((newpath
b480: 28 63 6f 6e 63 20 70 61 74 68 6d 6f 64 20 22 2f (conc pathmod "/
b490: 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 20 28 "............. (
b4a0: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
b4b0: 73 65 20 6b 65 79 76 61 6c 73 20 22 2f 22 29 0a se keyvals "/").
b4c0: 09 09 09 09 09 09 09 09 09 09 09 09 20 22 2f 22 ............ "/"
b4d0: 20 72 75 6e 6e 61 6d 65 20 22 2f 22 20 74 65 73 runname "/" tes
b4e0: 74 6e 61 6d 65 20 22 2f 22 0a 09 09 09 09 09 09 tname "/".......
b4f0: 09 09 09 09 09 09 20 28 69 66 20 28 73 74 72 69 ...... (if (stri
b500: 6e 67 3d 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 ng=? item-path "
b510: 22 29 20 22 22 20 28 63 6f 6e 63 20 22 2f 22 20 ") "" (conc "/"
b520: 69 74 65 6d 2d 70 61 74 68 29 29 0a 09 09 09 09 item-path)).....
b530: 09 09 09 09 09 09 09 09 20 66 69 6e 61 6c 2d 6c ........ final-l
b540: 6f 67 29 29 29 0a 09 09 09 09 09 09 09 09 09 20 og)))..........
b550: 20 20 20 20 20 3b 3b 20 66 6f 72 20 6e 6f 77 20 ;; for now
b560: 74 68 72 6f 77 20 61 77 61 79 20 6e 65 77 70 61 throw away newpa
b570: 74 68 20 61 6e 64 20 75 73 65 20 74 68 65 20 6c th and use the l
b580: 6f 67 2d 66 70 61 74 68 20 63 6f 6e 63 27 64 20 og-fpath conc'd
b590: 77 69 74 68 20 70 61 74 68 6d 6f 64 0a 09 09 09 with pathmod....
b5a0: 09 09 09 09 09 09 20 20 20 20 20 20 28 73 65 74 ...... (set
b5b0: 21 20 6e 65 77 70 61 74 68 20 28 63 6f 6e 63 20 ! newpath (conc
b5c0: 70 61 74 68 6d 6f 64 20 6c 6f 67 2d 66 70 61 74 pathmod log-fpat
b5d0: 68 29 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 h))..........
b5e0: 20 20 20 28 69 66 20 77 69 6e 64 6f 77 73 20 28 (if windows (
b5f0: 73 74 72 69 6e 67 2d 74 72 61 6e 73 6c 61 74 65 string-translate
b600: 20 6e 65 77 70 61 74 68 20 22 2f 22 20 22 5c 5c newpath "/" "\\
b610: 22 29 20 6e 65 77 70 61 74 68 29 29 0a 09 09 09 ") newpath))....
b620: 09 09 09 09 09 09 20 20 20 20 28 69 66 20 28 3e ...... (if (>
b630: 20 2a 76 65 72 62 6f 73 69 74 79 2a 20 31 29 0a *verbosity* 1).
b640: 09 09 09 09 09 09 09 09 09 09 28 63 6f 6e 63 20 ..........(conc
b650: 66 69 6e 61 6c 2d 6c 6f 67 20 22 20 6e 6f 74 2d final-log " not-
b660: 66 6f 75 6e 64 22 29 0a 09 09 09 09 09 09 09 09 found").........
b670: 09 09 22 22 29 29 29 0a 09 09 09 09 09 20 20 28 .."")))...... (
b680: 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 76 62 29 vector->list vb)
b690: 29 0a 09 09 09 09 09 62 29 29 29 29 29 0a 09 20 )......b)))))..
b6a0: 20 20 64 62 0a 09 20 20 20 6d 61 69 6e 71 72 79 db.. mainqry
b6b0: 0a 09 20 20 20 72 75 6e 73 70 61 74 74 20 28 6d .. runspatt (m
b6c0: 61 70 20 63 61 64 72 20 6b 65 79 70 61 74 74 2d ap cadr keypatt-
b6d0: 61 6c 69 73 74 29 29 0a 20 20 20 20 28 64 65 62 alist)). (deb
b6e0: 75 67 3a 70 72 69 6e 74 20 32 20 22 46 6f 75 6e ug:print 2 "Foun
b6f0: 64 20 22 20 28 6c 65 6e 67 74 68 20 74 65 73 74 d " (length test
b700: 2d 69 64 73 29 20 22 20 72 65 63 6f 72 64 73 22 -ids) " records"
b710: 29 0a 20 20 20 20 28 73 65 74 21 20 72 65 73 75 ). (set! resu
b720: 6c 74 73 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 lts (list (cons
b730: 22 52 75 6e 73 22 20 72 65 73 75 6c 74 73 29 29 "Runs" results))
b740: 29 0a 20 20 20 20 3b 3b 20 6e 6f 77 2c 20 66 6f ). ;; now, fo
b750: 72 20 65 61 63 68 20 74 65 73 74 2c 20 63 6f 6c r each test, col
b760: 6c 65 63 74 20 74 68 65 20 74 65 73 74 5f 64 61 lect the test_da
b770: 74 61 20 69 6e 66 6f 20 61 6e 64 20 61 64 64 20 ta info and add
b780: 61 20 6e 65 77 20 73 68 65 65 74 0a 20 20 20 20 a new sheet.
b790: 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 (for-each. (
b7a0: 6c 61 6d 62 64 61 20 28 74 65 73 74 2d 69 64 29 lambda (test-id)
b7b0: 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 74 . (let ((t
b7c0: 65 73 74 2d 64 61 74 61 20 28 6c 69 73 74 20 74 est-data (list t
b7d0: 65 73 74 64 61 74 61 2d 68 65 61 64 65 72 29 29 estdata-header))
b7e0: 0a 09 20 20 20 20 20 28 63 75 72 72 2d 74 65 73 .. (curr-tes
b7f0: 74 2d 6e 61 6d 65 20 23 66 29 29 0a 09 20 28 73 t-name #f)).. (s
b800: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
b810: 72 6f 77 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 row.. (lambda (
b820: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
b830: 69 74 65 6d 2d 70 61 74 68 20 63 61 74 65 67 6f item-path catego
b840: 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 ry variable valu
b850: 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 e expected tol u
b860: 6e 69 74 73 20 73 74 61 74 75 73 20 63 6f 6d 6d nits status comm
b870: 65 6e 74 29 0a 09 20 20 20 20 28 73 65 74 21 20 ent).. (set!
b880: 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 74 curr-test-name t
b890: 65 73 74 6e 61 6d 65 29 0a 09 20 20 20 20 28 73 estname).. (s
b8a0: 65 74 21 20 74 65 73 74 2d 64 61 74 61 20 28 61 et! test-data (a
b8b0: 70 70 65 6e 64 20 74 65 73 74 2d 64 61 74 61 20 ppend test-data
b8c0: 28 6c 69 73 74 20 28 6c 69 73 74 20 72 75 6e 2d (list (list run-
b8d0: 69 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d id testname item
b8e0: 2d 70 61 74 68 20 63 61 74 65 67 6f 72 79 20 76 -path category v
b8f0: 61 72 69 61 62 6c 65 20 76 61 6c 75 65 20 65 78 ariable value ex
b900: 70 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 pected tol units
b910: 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e 74 29 status comment)
b920: 29 29 29 29 0a 09 20 20 64 62 20 0a 09 20 20 3b )))).. db .. ;
b930: 3b 20 22 53 45 4c 45 43 54 20 72 75 6e 5f 69 64 ; "SELECT run_id
b940: 2c 74 65 73 74 6e 61 6d 65 2c 69 74 65 6d 5f 70 ,testname,item_p
b950: 61 74 68 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 ath,category,var
b960: 69 61 62 6c 65 2c 74 64 2e 76 61 6c 75 65 20 41 iable,td.value A
b970: 53 20 76 61 6c 75 65 2c 65 78 70 65 63 74 65 64 S value,expected
b980: 2c 74 6f 6c 2c 75 6e 69 74 73 2c 74 64 2e 73 74 ,tol,units,td.st
b990: 61 74 75 73 20 41 53 20 73 74 61 74 75 73 2c 74 atus AS status,t
b9a0: 64 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 63 6f 6d d.comment AS com
b9b0: 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 5f 64 ment FROM test_d
b9c0: 61 74 61 20 41 53 20 74 64 20 49 4e 4e 45 52 20 ata AS td INNER
b9d0: 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 74 65 JOIN tests ON te
b9e0: 73 74 73 2e 69 64 3d 74 64 2e 74 65 73 74 5f 69 sts.id=td.test_i
b9f0: 64 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d d WHERE test_id=
ba00: 3f 3b 22 0a 09 20 20 22 53 45 4c 45 43 54 20 72 ?;".. "SELECT r
ba10: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 69 un_id,testname,i
ba20: 74 65 6d 5f 70 61 74 68 2c 63 61 74 65 67 6f 72 tem_path,categor
ba30: 79 2c 76 61 72 69 61 62 6c 65 2c 74 64 2e 76 61 y,variable,td.va
ba40: 6c 75 65 20 41 53 20 76 61 6c 75 65 2c 74 64 2e lue AS value,td.
ba50: 65 78 70 65 63 74 65 64 2c 74 64 2e 74 6f 6c 2c expected,td.tol,
ba60: 74 64 2e 75 6e 69 74 73 2c 74 64 2e 73 74 61 74 td.units,td.stat
ba70: 75 73 20 41 53 20 73 74 61 74 75 73 2c 74 64 2e us AS status,td.
ba80: 63 6f 6d 6d 65 6e 74 20 41 53 20 63 6f 6d 6d 65 comment AS comme
ba90: 6e 74 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 nt FROM test_dat
baa0: 61 20 41 53 20 74 64 20 49 4e 4e 45 52 20 4a 4f a AS td INNER JO
bab0: 49 4e 20 74 65 73 74 73 20 4f 4e 20 74 65 73 74 IN tests ON test
bac0: 73 2e 69 64 3d 74 64 2e 74 65 73 74 5f 69 64 20 s.id=td.test_id
bad0: 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f WHERE testname=?
bae0: 3b 22 0a 09 20 20 74 65 73 74 2d 69 64 29 0a 09 ;".. test-id)..
baf0: 20 28 69 66 20 63 75 72 72 2d 74 65 73 74 2d 6e (if curr-test-n
bb00: 61 6d 65 0a 09 20 20 20 20 20 28 73 65 74 21 20 ame.. (set!
bb10: 72 65 73 75 6c 74 73 20 28 61 70 70 65 6e 64 20 results (append
bb20: 72 65 73 75 6c 74 73 20 28 6c 69 73 74 20 28 63 results (list (c
bb30: 6f 6e 73 20 63 75 72 72 2d 74 65 73 74 2d 6e 61 ons curr-test-na
bb40: 6d 65 20 74 65 73 74 2d 64 61 74 61 29 29 29 29 me test-data))))
bb50: 29 0a 09 20 29 29 0a 20 20 20 20 20 28 73 6f 72 ).. )). (sor
bb60: 74 20 28 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 t (delete-duplic
bb70: 61 74 65 73 20 74 65 73 74 2d 69 64 73 29 20 73 ates test-ids) s
bb80: 74 72 69 6e 67 3c 3d 29 29 0a 20 20 20 20 28 73 tring<=)). (s
bb90: 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 6d 6b 64 ystem (conc "mkd
bba0: 69 72 20 2d 70 20 22 20 74 65 6d 70 64 69 72 29 ir -p " tempdir)
bbb0: 29 0a 20 20 20 20 3b 3b 20 28 70 70 20 72 65 73 ). ;; (pp res
bbc0: 75 6c 74 73 29 0a 20 20 20 20 28 6f 64 73 3a 6c ults). (ods:l
bbd0: 69 73 74 2d 3e 6f 64 73 20 0a 20 20 20 20 20 74 ist->ods . t
bbe0: 65 6d 70 64 69 72 0a 20 20 20 20 20 28 69 66 20 empdir. (if
bbf0: 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 (string-match (r
bc00: 65 67 65 78 70 20 22 5e 5b 2f 7e 5d 2b 2e 2a 22 egexp "^[/~]+.*"
bc10: 29 20 6f 75 74 70 75 74 66 69 6c 65 29 20 3b 3b ) outputfile) ;;
bc20: 20 66 75 6c 6c 20 70 61 74 68 3f 0a 09 20 6f 75 full path?.. ou
bc30: 74 70 75 74 66 69 6c 65 0a 09 20 28 62 65 67 69 tputfile.. (begi
bc40: 6e 0a 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 n.. (debug:pri
bc50: 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 3a 20 70 nt 0 "WARNING: p
bc60: 61 74 68 20 67 69 76 65 6e 2c 20 22 20 6f 75 74 ath given, " out
bc70: 70 75 74 66 69 6c 65 20 22 20 69 73 20 72 65 6c putfile " is rel
bc80: 61 74 69 76 65 2c 20 70 72 65 66 69 78 69 6e 67 ative, prefixing
bc90: 20 77 69 74 68 20 63 75 72 72 65 6e 74 20 64 69 with current di
bca0: 72 65 63 74 6f 72 79 22 29 0a 09 20 20 20 28 63 rectory").. (c
bcb0: 6f 6e 63 20 28 63 75 72 72 65 6e 74 2d 64 69 72 onc (current-dir
bcc0: 65 63 74 6f 72 79 29 20 22 2f 22 20 6f 75 74 70 ectory) "/" outp
bcd0: 75 74 66 69 6c 65 29 29 29 0a 20 20 20 20 20 72 utfile))). r
bce0: 65 73 75 6c 74 73 29 0a 20 20 20 20 3b 3b 20 62 esults). ;; b
bcf0: 72 75 74 61 6c 20 63 6c 65 61 6e 20 75 70 0a 20 rutal clean up.
bd00: 20 20 20 28 73 79 73 74 65 6d 20 22 72 6d 20 2d (system "rm -
bd10: 72 66 20 74 65 6d 70 64 69 72 22 29 29 29 0a 0a rf tempdir")))..
bd20: 3b 3b 20 28 64 62 3a 65 78 74 72 61 63 74 2d 6f ;; (db:extract-o
bd30: 64 73 2d 66 69 6c 65 20 64 62 20 22 6f 75 74 70 ds-file db "outp
bd40: 75 74 66 69 6c 65 2e 6f 64 73 22 20 27 28 28 22 utfile.ods" '(("
bd50: 73 79 73 6e 61 6d 65 22 20 22 25 22 29 28 22 66 sysname" "%")("f
bd60: 73 6e 61 6d 65 22 20 22 25 22 29 28 22 64 61 74 sname" "%")("dat
bd70: 61 70 61 74 68 22 20 22 25 22 29 29 20 22 25 22 apath" "%")) "%"
bd80: 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )...;;==========
bd90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
bda0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
bdb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
bdc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
bdd0: 52 45 4d 4f 54 45 20 44 42 20 41 43 43 45 53 53 REMOTE DB ACCESS
bde0: 20 56 49 41 20 52 50 43 0a 3b 3b 3d 3d 3d 3d 3d VIA RPC.;;=====
bdf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
be00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
be10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
be20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
be30: 3d 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a =..(define (rdb:
be40: 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 65 2d set-tests-state-
be50: 73 74 61 74 75 73 20 64 62 20 72 75 6e 2d 69 64 status db run-id
be60: 20 74 65 73 74 6e 61 6d 65 73 20 63 75 72 72 73 testnames currs
be70: 74 61 74 65 20 63 75 72 72 73 74 61 74 75 73 20 tate currstatus
be80: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
be90: 75 73 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 us). (if *runre
bea0: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
beb0: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
bec0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
bed0: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
bee0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
bef0: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
bf00: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
bf10: 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61 74 b:set-tests-stat
bf20: 65 2d 73 74 61 74 75 73 20 68 6f 73 74 20 70 6f e-status host po
bf30: 72 74 29 0a 09 20 72 75 6e 2d 69 64 20 74 65 73 rt).. run-id tes
bf40: 74 6e 61 6d 65 73 20 63 75 72 72 73 74 61 74 65 tnames currstate
bf50: 20 63 75 72 72 73 74 61 74 75 73 20 6e 65 77 73 currstatus news
bf60: 74 61 74 65 20 6e 65 77 73 74 61 74 75 73 29 29 tate newstatus))
bf70: 0a 20 20 20 20 20 20 28 64 62 3a 73 65 74 2d 74 . (db:set-t
bf80: 65 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 ests-state-statu
bf90: 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 s db run-id test
bfa0: 6e 61 6d 65 73 20 63 75 72 72 73 74 61 74 65 20 names currstate
bfb0: 63 75 72 72 73 74 61 74 75 73 20 6e 65 77 73 74 currstatus newst
bfc0: 61 74 65 20 6e 65 77 73 74 61 74 75 73 29 29 29 ate newstatus)))
bfd0: 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 ..(define (rdb:t
bfe0: 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 74 eststep-set-stat
bff0: 75 73 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65 us! db run-id te
c000: 73 74 2d 6e 61 6d 65 20 74 65 73 74 73 74 65 70 st-name teststep
c010: 2d 6e 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 -name state-in s
c020: 74 61 74 75 73 2d 69 6e 20 69 74 65 6d 64 61 74 tatus-in itemdat
c030: 20 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 comment logfile
c040: 29 0a 20 20 28 6c 65 74 20 28 28 69 74 65 6d 2d ). (let ((item-
c050: 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d path (item-list-
c060: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 29 >path itemdat)))
c070: 0a 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d . (if *runrem
c080: 6f 74 65 2a 0a 09 28 6c 65 74 20 28 28 68 6f 73 ote*..(let ((hos
c090: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 t (vector-ref *r
c0a0: 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 unremote* 0))..
c0b0: 20 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 (port (vect
c0c0: 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 or-ref *runremot
c0d0: 65 2a 20 31 29 29 29 0a 09 20 20 28 28 72 70 63 e* 1))).. ((rpc
c0e0: 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a :procedure 'rdb:
c0f0: 74 65 73 74 73 74 65 70 2d 73 65 74 2d 73 74 61 teststep-set-sta
c100: 74 75 73 21 20 68 6f 73 74 20 70 6f 72 74 29 0a tus! host port).
c110: 09 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d . run-id test-
c120: 6e 61 6d 65 20 74 65 73 74 73 74 65 70 2d 6e 61 name teststep-na
c130: 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 74 me state-in stat
c140: 75 73 2d 69 6e 20 69 74 65 6d 2d 70 61 74 68 20 us-in item-path
c150: 63 6f 6d 6d 65 6e 74 20 6c 6f 67 66 69 6c 65 29 comment logfile)
c160: 29 0a 09 28 64 62 3a 74 65 73 74 73 74 65 70 2d )..(db:teststep-
c170: 73 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 72 set-status! db r
c180: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 un-id test-name
c190: 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 teststep-name st
c1a0: 61 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e ate-in status-in
c1b0: 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d 65 item-path comme
c1c0: 6e 74 20 6c 6f 67 66 69 6c 65 29 29 29 29 0a 0a nt logfile))))..
c1d0: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 (define (rdb:tes
c1e0: 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d 69 6e t-update-meta-in
c1f0: 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 fo db run-id tes
c200: 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 20 6d t-name itemdat m
c210: 69 6e 75 74 65 73 20 63 70 75 6c 6f 61 64 20 64 inutes cpuload d
c220: 69 73 6b 66 72 65 65 20 74 6d 70 66 72 65 65 29 iskfree tmpfree)
c230: 0a 20 20 28 6c 65 74 20 28 28 69 74 65 6d 2d 70 . (let ((item-p
c240: 61 74 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e ath (item-list->
c250: 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 29 0a path itemdat))).
c260: 20 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f (if *runremo
c270: 74 65 2a 0a 09 28 6c 65 74 20 28 28 68 6f 73 74 te*..(let ((host
c280: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
c290: 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 nremote* 0))..
c2a0: 20 20 20 20 28 70 6f 72 74 20 28 76 65 63 74 6f (port (vecto
c2b0: 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 r-ref *runremote
c2c0: 2a 20 31 29 29 29 0a 09 20 20 28 28 72 70 63 3a * 1))).. ((rpc:
c2d0: 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 3a 74 procedure 'rdb:t
c2e0: 65 73 74 2d 75 70 64 61 74 65 2d 6d 65 74 61 2d est-update-meta-
c2f0: 69 6e 66 6f 20 68 6f 73 74 20 70 6f 72 74 29 0a info host port).
c300: 09 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d . run-id test-
c310: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 6d name item-path m
c320: 69 6e 75 74 65 73 20 63 70 75 6c 6f 61 64 20 64 inutes cpuload d
c330: 69 73 6b 66 72 65 65 20 74 6d 70 66 72 65 65 29 iskfree tmpfree)
c340: 29 0a 09 28 64 62 3a 74 65 73 74 2d 75 70 64 61 )..(db:test-upda
c350: 74 65 2d 6d 65 74 61 2d 69 6e 66 6f 20 64 62 20 te-meta-info db
c360: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
c370: 20 69 74 65 6d 2d 70 61 74 68 20 6d 69 6e 75 74 item-path minut
c380: 65 73 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 es cpuload diskf
c390: 72 65 65 20 74 6d 70 66 72 65 65 29 29 29 29 0a ree tmpfree)))).
c3a0: 0a 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 65 .(define (rdb:te
c3b0: 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 st-set-state-sta
c3c0: 74 75 73 2d 62 79 2d 72 75 6e 2d 69 64 2d 74 65 tus-by-run-id-te
c3d0: 73 74 6e 61 6d 65 20 64 62 20 72 75 6e 2d 69 64 stname db run-id
c3e0: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d test-name item-
c3f0: 70 61 74 68 20 73 74 61 74 75 73 20 73 74 61 74 path status stat
c400: 65 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 6d e). (if *runrem
c410: 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 20 ote*. (let
c420: 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
c430: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
c440: 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 76 )).. (port (v
c450: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
c460: 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 70 mote* 1)))..((rp
c470: 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 62 c:procedure 'rdb
c480: 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d :test-set-state-
c490: 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69 64 status-by-run-id
c4a0: 2d 74 65 73 74 6e 61 6d 65 20 68 6f 73 74 20 70 -testname host p
c4b0: 6f 72 74 29 0a 09 20 20 72 75 6e 2d 69 64 20 74 ort).. run-id t
c4c0: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
c4d0: 74 68 20 73 74 61 74 75 73 20 73 74 61 74 65 29 th status state)
c4e0: 29 0a 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 ). (db:test
c4f0: 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 74 75 -set-state-statu
c500: 73 2d 62 79 2d 72 75 6e 2d 69 64 2d 74 65 73 74 s-by-run-id-test
c510: 6e 61 6d 65 20 64 62 20 72 75 6e 2d 69 64 20 74 name db run-id t
c520: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
c530: 74 68 20 73 74 61 74 75 73 20 73 74 61 74 65 29 th status state)
c540: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 64 62 ))..(define (rdb
c550: 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 :csv->test-data
c560: 64 62 20 74 65 73 74 2d 69 64 20 63 73 76 64 61 db test-id csvda
c570: 74 61 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 65 ta). (if *runre
c580: 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 74 mote*. (let
c590: 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d ((host (vector-
c5a0: 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 ref *runremote*
c5b0: 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 28 0)).. (port (
c5c0: 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 vector-ref *runr
c5d0: 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 72 emote* 1)))..((r
c5e0: 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 64 pc:procedure 'rd
c5f0: 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 b:csv->test-data
c600: 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 74 65 host port).. te
c610: 73 74 2d 69 64 20 63 73 76 64 61 74 61 29 29 0a st-id csvdata)).
c620: 20 20 20 20 20 20 28 64 62 3a 63 73 76 2d 3e 74 (db:csv->t
c630: 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 est-data db test
c640: 2d 69 64 20 63 73 76 64 61 74 61 29 29 29 0a 0a -id csvdata)))..
c650: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 72 6f 6c (define (rdb:rol
c660: 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 6c 2d 63 l-up-pass-fail-c
c670: 6f 75 6e 74 73 20 64 62 20 72 75 6e 2d 69 64 20 ounts db run-id
c680: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
c690: 61 74 68 20 73 74 61 74 75 73 29 0a 20 20 28 69 ath status). (i
c6a0: 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 f *runremote*.
c6b0: 20 20 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 (let ((host
c6c0: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
c6d0: 72 65 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 remote* 0))..
c6e0: 20 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 (port (vector-r
c6f0: 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 ef *runremote* 1
c700: 29 29 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 )))..((rpc:proce
c710: 64 75 72 65 20 27 72 64 62 3a 72 6f 6c 6c 2d 75 dure 'rdb:roll-u
c720: 70 2d 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75 6e p-pass-fail-coun
c730: 74 73 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 20 ts host port)..
c740: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
c750: 20 69 74 65 6d 2d 70 61 74 68 20 73 74 61 74 75 item-path statu
c760: 73 29 29 0a 20 20 20 20 20 20 28 64 62 3a 72 6f s)). (db:ro
c770: 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 6c 2d ll-up-pass-fail-
c780: 63 6f 75 6e 74 73 20 64 62 20 72 75 6e 2d 69 64 counts db run-id
c790: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d test-name item-
c7a0: 70 61 74 68 20 73 74 61 74 75 73 29 29 29 0a 0a path status)))..
c7b0: 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 65 73 (define (rdb:tes
c7c0: 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 64 62 t-set-comment db
c7d0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
c7e0: 65 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d e item-path comm
c7f0: 65 6e 74 29 0a 20 20 28 69 66 20 2a 72 75 6e 72 ent). (if *runr
c800: 65 6d 6f 74 65 2a 0a 20 20 20 20 20 20 28 6c 65 emote*. (le
c810: 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
c820: 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
c830: 20 30 29 29 0a 09 20 20 20 20 28 70 6f 72 74 20 0)).. (port
c840: 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e (vector-ref *run
c850: 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 09 28 28 remote* 1)))..((
c860: 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 72 rpc:procedure 'r
c870: 64 62 3a 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d db:test-set-comm
c880: 65 6e 74 20 68 6f 73 74 20 70 6f 72 74 29 0a 09 ent host port)..
c890: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
c8a0: 65 20 69 74 65 6d 2d 70 61 74 68 20 63 6f 6d 6d e item-path comm
c8b0: 65 6e 74 29 29 0a 20 20 20 20 20 20 28 64 62 3a ent)). (db:
c8c0: 74 65 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 test-set-comment
c8d0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d db run-id test-
c8e0: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 63 name item-path c
c8f0: 6f 6d 6d 65 6e 74 29 29 29 0a 0a 28 64 65 66 69 omment)))..(defi
c900: 6e 65 20 28 72 64 62 3a 74 65 73 74 2d 73 65 74 ne (rdb:test-set
c910: 2d 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69 64 20 -log! db run-id
c920: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
c930: 61 74 68 20 6c 6f 67 66 29 0a 20 20 28 69 66 20 ath logf). (if
c940: 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 20 20 20 20 *runremote*.
c950: 20 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 (let ((host (v
c960: 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 ector-ref *runre
c970: 6d 6f 74 65 2a 20 30 29 29 0a 09 20 20 20 20 28 mote* 0)).. (
c980: 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 port (vector-ref
c990: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 *runremote* 1))
c9a0: 29 0a 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 )..((rpc:procedu
c9b0: 72 65 20 27 72 70 63 3a 74 65 73 74 2d 73 65 74 re 'rpc:test-set
c9c0: 2d 6c 6f 67 21 20 68 6f 73 74 20 70 6f 72 74 29 -log! host port)
c9d0: 0a 09 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e .. run-id test-n
c9e0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 6c 6f ame item-path lo
c9f0: 67 66 29 29 0a 20 20 20 20 20 20 28 64 62 3a 74 gf)). (db:t
ca00: 65 73 74 2d 73 65 74 2d 6c 6f 67 21 20 64 62 20 est-set-log! db
ca10: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
ca20: 20 69 74 65 6d 2d 70 61 74 68 20 6c 6f 67 66 29 item-path logf)
ca30: 29 29 ))