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 32 2c right 2006-2012,
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 20 73 31 31 6e 20 7a 6d 71 29 0a v-xml s11n zmq).
0310: 28 69 6d 70 6f 72 74 20 28 70 72 65 66 69 78 20 (import (prefix
0320: 73 71 6c 69 74 65 33 20 73 71 6c 69 74 65 33 3a sqlite3 sqlite3:
0330: 29 29 0a 0a 28 64 65 63 6c 61 72 65 20 28 75 6e ))..(declare (un
0340: 69 74 20 64 62 29 29 0a 28 64 65 63 6c 61 72 65 it db)).(declare
0350: 20 28 75 73 65 73 20 63 6f 6d 6d 6f 6e 29 29 0a (uses common)).
0360: 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 6b (declare (uses k
0370: 65 79 73 29 29 0a 28 64 65 63 6c 61 72 65 20 28 eys)).(declare (
0380: 75 73 65 73 20 6f 64 73 29 29 0a 0a 28 69 6e 63 uses ods))..(inc
0390: 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65 63 lude "common_rec
03a0: 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c ords.scm").(incl
03b0: 75 64 65 20 22 64 62 5f 72 65 63 6f 72 64 73 2e ude "db_records.
03c0: 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 scm").(include "
03d0: 6b 65 79 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 key_records.scm"
03e0: 29 0a 28 69 6e 63 6c 75 64 65 20 22 72 75 6e 5f ).(include "run_
03f0: 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a 3b records.scm")..;
0400: 3b 20 74 69 6d 65 73 74 61 6d 70 20 74 79 70 65 ; timestamp type
0410: 20 28 76 61 6c 31 20 76 61 6c 32 20 2e 2e 2e 29 (val1 val2 ...)
0420: 0a 3b 3b 20 74 79 70 65 3a 20 6d 65 74 61 2d 69 .;; type: meta-i
0430: 6e 66 6f 2c 20 73 74 65 70 0a 28 64 65 66 69 6e nfo, step.(defin
0440: 65 20 2a 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 e *incoming-data
0450: 2a 20 20 20 20 20 20 27 28 29 29 0a 28 64 65 66 * '()).(def
0460: 69 6e 65 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6c 61 ine *incoming-la
0470: 73 74 2d 74 69 6d 65 2a 20 28 63 75 72 72 65 6e st-time* (curren
0480: 74 2d 73 65 63 6f 6e 64 73 29 29 0a 28 64 65 66 t-seconds)).(def
0490: 69 6e 65 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 ine *incoming-mu
04a0: 74 65 78 2a 20 20 20 20 20 28 6d 61 6b 65 2d 6d tex* (make-m
04b0: 75 74 65 78 29 29 0a 28 64 65 66 69 6e 65 20 2a utex)).(define *
04c0: 63 61 63 68 65 2d 6f 6e 2a 20 23 66 29 0a 0a 28 cache-on* #f)..(
04d0: 64 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 73 define (db:set-s
04e0: 79 6e 63 20 64 62 29 0a 20 20 28 6c 65 74 2a 20 ync db). (let*
04f0: 28 28 73 79 6e 63 76 61 6c 20 20 28 63 6f 6e 66 ((syncval (conf
0500: 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 ig-lookup *confi
0510: 67 64 61 74 2a 20 22 73 65 74 75 70 22 20 20 20 gdat* "setup"
0520: 20 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 29 "synchronous")
0530: 29 0a 09 20 28 76 61 6c 20 20 20 20 20 20 28 63 ).. (val (c
0540: 6f 6e 64 20 20 20 3b 3b 20 30 20 7c 20 4f 46 46 ond ;; 0 | OFF
0550: 20 7c 20 31 20 7c 20 4e 4f 52 4d 41 4c 20 7c 20 | 1 | NORMAL |
0560: 32 20 7c 20 46 55 4c 4c 3b 0a 09 09 20 20 20 20 2 | FULL;...
0570: 28 28 6e 6f 74 20 73 79 6e 63 76 61 6c 29 20 23 ((not syncval) #
0580: 66 29 0a 09 09 20 20 20 20 28 28 73 74 72 69 6e f)... ((strin
0590: 67 2d 3e 6e 75 6d 62 65 72 20 73 79 6e 63 76 61 g->number syncva
05a0: 6c 29 0a 09 09 20 20 20 20 20 28 6c 65 74 20 28 l)... (let (
05b0: 28 76 61 6c 20 28 73 74 72 69 6e 67 2d 3e 6e 75 (val (string->nu
05c0: 6d 62 65 72 20 73 79 6e 63 76 61 6c 29 29 29 0a mber syncval))).
05d0: 09 09 20 20 20 20 20 20 20 28 69 66 20 28 6d 65 .. (if (me
05e0: 6d 62 65 72 20 76 61 6c 20 27 28 30 20 31 20 32 mber val '(0 1 2
05f0: 29 29 20 76 61 6c 20 23 66 29 29 29 0a 09 09 20 )) val #f)))...
0600: 20 20 20 28 28 73 74 72 69 6e 67 2d 6d 61 74 63 ((string-matc
0610: 68 20 28 72 65 67 65 78 70 20 22 79 65 73 22 20 h (regexp "yes"
0620: 23 74 29 20 73 79 6e 63 76 61 6c 29 20 31 29 0a #t) syncval) 1).
0630: 09 09 20 20 20 20 28 28 73 74 72 69 6e 67 2d 6d .. ((string-m
0640: 61 74 63 68 20 28 72 65 67 65 78 70 20 22 6e 6f atch (regexp "no
0650: 22 20 20 23 74 29 20 73 79 6e 63 76 61 6c 29 20 " #t) syncval)
0660: 30 29 0a 09 09 20 20 20 20 28 28 73 74 72 69 6e 0)... ((strin
0670: 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 20 g-match (regexp
0680: 22 28 6f 66 66 7c 6e 6f 72 6d 61 6c 7c 66 75 6c "(off|normal|ful
0690: 6c 29 22 20 23 74 29 20 73 79 6e 63 76 61 6c 29 l)" #t) syncval)
06a0: 20 73 79 6e 63 76 61 6c 29 0a 09 09 20 20 20 20 syncval)...
06b0: 28 65 6c 73 65 20 0a 09 09 20 20 20 20 20 28 64 (else ... (d
06c0: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 ebug:print 0 "ER
06d0: 52 4f 52 3a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 ROR: synchronous
06e0: 20 6d 75 73 74 20 62 65 20 30 2c 31 2c 32 2c 4f must be 0,1,2,O
06f0: 46 46 2c 4e 4f 52 4d 41 4c 20 6f 72 20 46 55 4c FF,NORMAL or FUL
0700: 4c 2c 20 79 6f 75 20 70 72 6f 76 69 64 65 64 3a L, you provided:
0710: 20 22 20 73 79 6e 63 76 61 6c 29 0a 09 09 20 20 " syncval)...
0720: 20 20 20 23 66 29 29 29 29 0a 20 20 20 20 28 69 #f)))). (i
0730: 66 20 76 61 6c 0a 09 28 62 65 67 69 6e 0a 09 20 f val..(begin..
0740: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e (debug:print-in
0750: 66 6f 20 31 31 20 22 64 62 3a 73 65 74 2d 73 79 fo 11 "db:set-sy
0760: 6e 63 2c 20 73 65 74 74 69 6e 67 20 70 72 61 67 nc, setting prag
0770: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 74 ma synchronous t
0780: 6f 20 22 20 76 61 6c 29 0a 09 20 20 28 73 71 6c o " val).. (sql
0790: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
07a0: 28 63 6f 6e 63 20 22 50 52 41 47 4d 41 20 73 79 (conc "PRAGMA sy
07b0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 27 22 20 76 nchronous = '" v
07c0: 61 6c 20 22 27 3b 22 29 29 29 29 29 29 0a 0a 28 al "';"))))))..(
07d0: 64 65 66 69 6e 65 20 28 6f 70 65 6e 2d 64 62 29 define (open-db)
07e0: 20 3b 3b 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 ;; (conc *topp
07f0: 61 74 68 2a 20 22 2f 6d 65 67 61 74 65 73 74 2e ath* "/megatest.
0800: 64 62 22 29 20 28 63 61 72 20 2a 63 6f 6e 66 69 db") (car *confi
0810: 67 69 6e 66 6f 2a 29 29 29 0a 20 20 28 69 66 20 ginfo*))). (if
0820: 28 6e 6f 74 20 2a 74 6f 70 70 61 74 68 2a 29 28 (not *toppath*)(
0830: 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29 29 0a setup-for-run)).
0840: 20 20 28 6c 65 74 2a 20 28 28 64 62 70 61 74 68 (let* ((dbpath
0850: 20 20 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 61 (conc *toppa
0860: 74 68 2a 20 22 2f 6d 65 67 61 74 65 73 74 2e 64 th* "/megatest.d
0870: 62 22 29 29 20 3b 3b 20 66 6e 61 6d 65 29 0a 09 b")) ;; fname)..
0880: 20 28 64 62 65 78 69 73 74 73 20 20 28 66 69 6c (dbexists (fil
0890: 65 2d 65 78 69 73 74 73 3f 20 64 62 70 61 74 68 e-exists? dbpath
08a0: 29 29 0a 09 20 28 64 62 20 20 20 20 20 20 20 20 )).. (db
08b0: 28 73 71 6c 69 74 65 33 3a 6f 70 65 6e 2d 64 61 (sqlite3:open-da
08c0: 74 61 62 61 73 65 20 64 62 70 61 74 68 29 29 20 tabase dbpath))
08d0: 3b 3b 20 28 6e 65 76 65 72 2d 67 69 76 65 2d 75 ;; (never-give-u
08e0: 70 2d 6f 70 65 6e 2d 64 62 20 64 62 70 61 74 68 p-open-db dbpath
08f0: 29 29 0a 09 20 28 68 61 6e 64 6c 65 72 20 20 20 )).. (handler
0900: 28 6d 61 6b 65 2d 62 75 73 79 2d 74 69 6d 65 6f (make-busy-timeo
0910: 75 74 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 ut (if (args:get
0920: 2d 61 72 67 20 22 2d 6f 76 65 72 72 69 64 65 2d -arg "-override-
0930: 74 69 6d 65 6f 75 74 22 29 0a 09 09 09 09 09 20 timeout")......
0940: 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 (string->numbe
0950: 72 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 r (args:get-arg
0960: 22 2d 6f 76 65 72 72 69 64 65 2d 74 69 6d 65 6f "-override-timeo
0970: 75 74 22 29 29 0a 09 09 09 09 09 20 20 20 31 33 ut"))...... 13
0980: 36 30 30 30 29 29 29 29 20 3b 3b 20 31 33 36 30 6000)))) ;; 1360
0990: 30 30 29 29 29 20 3b 3b 20 31 33 36 30 30 30 20 00))) ;; 136000
09a0: 3d 20 32 2e 32 20 6d 69 6e 75 74 65 73 0a 20 20 = 2.2 minutes.
09b0: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 (debug:print-i
09c0: 6e 66 6f 20 31 31 20 22 6f 70 65 6e 2d 64 62 2c nfo 11 "open-db,
09d0: 20 64 62 70 61 74 68 3d 22 20 64 62 70 61 74 68 dbpath=" dbpath
09e0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 73 ). (sqlite3:s
09f0: 65 74 2d 62 75 73 79 2d 68 61 6e 64 6c 65 72 21 et-busy-handler!
0a00: 20 64 62 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 db handler).
0a10: 20 28 69 66 20 28 6e 6f 74 20 64 62 65 78 69 73 (if (not dbexis
0a20: 74 73 29 0a 09 28 64 62 3a 69 6e 69 74 69 61 6c ts)..(db:initial
0a30: 69 7a 65 20 64 62 29 29 0a 20 20 20 20 28 64 62 ize db)). (db
0a40: 3a 73 65 74 2d 73 79 6e 63 20 64 62 29 0a 20 20 :set-sync db).
0a50: 20 20 64 62 29 29 0a 0a 3b 3b 20 6b 65 65 70 69 db))..;; keepi
0a60: 6e 67 20 69 74 20 61 72 6f 75 6e 64 20 66 6f 72 ng it around for
0a70: 20 64 65 62 75 67 67 69 6e 67 20 70 75 72 70 6f debugging purpo
0a80: 73 65 73 20 6f 6e 6c 79 0a 28 64 65 66 69 6e 65 ses only.(define
0a90: 20 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 (open-run-close
0aa0: 2d 6e 6f 2d 65 78 63 65 70 74 69 6f 6e 2d 68 61 -no-exception-ha
0ab0: 6e 64 6c 69 6e 67 20 20 70 72 6f 63 20 69 64 62 ndling proc idb
0ac0: 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 28 64 65 . params). (de
0ad0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
0ae0: 31 20 22 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 1 "open-run-clos
0af0: 65 2d 6e 6f 2d 65 78 63 65 70 74 69 6f 6e 2d 68 e-no-exception-h
0b00: 61 6e 64 6c 69 6e 67 20 53 54 41 52 54 2c 20 69 andling START, i
0b10: 64 62 3d 22 20 69 64 62 20 22 2c 20 70 61 72 61 db=" idb ", para
0b20: 6d 73 3d 22 20 70 61 72 61 6d 73 29 0a 20 20 28 ms=" params). (
0b30: 6c 65 74 2a 20 28 28 64 62 20 20 20 28 69 66 20 let* ((db (if
0b40: 69 64 62 20 69 64 62 20 28 6f 70 65 6e 2d 64 62 idb idb (open-db
0b50: 29 29 29 0a 09 20 28 72 65 73 20 23 66 29 29 0a ))).. (res #f)).
0b60: 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 61 (set! res (a
0b70: 70 70 6c 79 20 70 72 6f 63 20 64 62 20 70 61 72 pply proc db par
0b80: 61 6d 73 29 29 0a 20 20 20 20 28 69 66 20 28 6e ams)). (if (n
0b90: 6f 74 20 69 64 62 29 28 73 71 6c 69 74 65 33 3a ot idb)(sqlite3:
0ba0: 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 29 0a 20 finalize! db)).
0bb0: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d (debug:print-
0bc0: 69 6e 66 6f 20 31 31 20 22 6f 70 65 6e 2d 72 75 info 11 "open-ru
0bd0: 6e 2d 63 6c 6f 73 65 2d 6e 6f 2d 65 78 63 65 70 n-close-no-excep
0be0: 74 69 6f 6e 2d 68 61 6e 64 6c 69 6e 67 20 45 4e tion-handling EN
0bf0: 44 22 20 29 0a 20 20 20 20 72 65 73 29 29 0a 0a D" ). res))..
0c00: 28 64 65 66 69 6e 65 20 28 6f 70 65 6e 2d 72 75 (define (open-ru
0c10: 6e 2d 63 6c 6f 73 65 2d 65 78 63 65 70 74 69 6f n-close-exceptio
0c20: 6e 2d 68 61 6e 64 6c 69 6e 67 20 70 72 6f 63 20 n-handling proc
0c30: 69 64 62 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 idb . params).
0c40: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 (debug:print-inf
0c50: 6f 20 31 31 20 22 6f 70 65 6e 2d 72 75 6e 2d 63 o 11 "open-run-c
0c60: 6c 6f 73 65 2d 65 78 63 65 70 74 69 6f 6e 2d 68 lose-exception-h
0c70: 61 6e 64 6c 69 6e 67 20 53 54 41 52 54 2c 20 69 andling START, i
0c80: 64 62 3d 22 20 69 64 62 20 22 2c 20 70 61 72 61 db=" idb ", para
0c90: 6d 73 3d 22 20 70 61 72 61 6d 73 29 0a 20 20 28 ms=" params). (
0ca0: 6c 65 74 20 28 28 72 75 6e 6e 65 72 20 28 6c 61 let ((runner (la
0cb0: 6d 62 64 61 20 28 29 0a 09 09 20 20 28 6c 65 74 mbda ()... (let
0cc0: 2a 20 28 28 64 62 20 20 20 28 69 66 20 69 64 62 * ((db (if idb
0cd0: 20 69 64 62 20 28 6f 70 65 6e 2d 64 62 29 29 29 idb (open-db)))
0ce0: 0a 09 09 09 20 28 72 65 73 20 23 66 29 29 0a 09 .... (res #f))..
0cf0: 09 20 20 20 20 28 73 65 74 21 20 72 65 73 20 28 . (set! res (
0d00: 61 70 70 6c 79 20 70 72 6f 63 20 64 62 20 70 61 apply proc db pa
0d10: 72 61 6d 73 29 29 0a 09 09 20 20 20 20 28 69 66 rams))... (if
0d20: 20 28 6e 6f 74 20 69 64 62 29 28 73 71 6c 69 74 (not idb)(sqlit
0d30: 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 e3:finalize! db)
0d40: 29 0a 09 09 20 20 20 20 28 64 65 62 75 67 3a 70 )... (debug:p
0d50: 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 6f 70 rint-info 11 "op
0d60: 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 2d 6e 6f 2d en-run-close-no-
0d70: 65 78 63 65 70 74 69 6f 6e 2d 68 61 6e 64 6c 69 exception-handli
0d80: 6e 67 20 45 4e 44 22 20 29 0a 09 09 20 20 20 20 ng END" )...
0d90: 72 65 73 29 29 29 29 0a 20 20 20 20 28 68 61 6e res)))). (han
0da0: 64 6c 65 2d 65 78 63 65 70 74 69 6f 6e 73 0a 20 dle-exceptions.
0db0: 20 20 20 20 65 78 6e 0a 20 20 20 20 20 28 62 65 exn. (be
0dc0: 67 69 6e 0a 20 20 20 20 20 20 20 28 64 65 62 75 gin. (debu
0dd0: 67 3a 70 72 69 6e 74 20 30 20 22 45 58 43 45 50 g:print 0 "EXCEP
0de0: 54 49 4f 4e 3a 20 64 61 74 61 62 61 73 65 20 70 TION: database p
0df0: 72 6f 62 61 62 6c 79 20 6f 76 65 72 6c 6f 61 64 robably overload
0e00: 65 64 3f 22 29 0a 20 20 20 20 20 20 20 28 64 65 ed?"). (de
0e10: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 20 20 22 bug:print 0 " "
0e20: 20 28 28 63 6f 6e 64 69 74 69 6f 6e 2d 70 72 6f ((condition-pro
0e30: 70 65 72 74 79 2d 61 63 63 65 73 73 6f 72 20 27 perty-accessor '
0e40: 65 78 6e 20 27 6d 65 73 73 61 67 65 29 20 65 78 exn 'message) ex
0e50: 6e 29 29 0a 20 20 20 20 20 20 20 28 70 72 69 6e n)). (prin
0e60: 74 2d 63 61 6c 6c 2d 63 68 61 69 6e 29 0a 20 20 t-call-chain).
0e70: 20 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 (thread-sle
0e80: 65 70 21 20 28 72 61 6e 64 6f 6d 20 31 32 30 29 ep! (random 120)
0e90: 29 0a 20 20 20 20 20 20 20 28 64 65 62 75 67 3a ). (debug:
0ea0: 70 72 69 6e 74 2d 69 6e 66 6f 20 30 20 22 74 72 print-info 0 "tr
0eb0: 79 69 6e 67 20 64 62 20 63 61 6c 6c 20 6f 6e 65 ying db call one
0ec0: 20 6d 6f 72 65 20 74 69 6d 65 2e 2e 2e 2e 22 29 more time....")
0ed0: 0a 20 20 20 20 20 20 20 28 72 75 6e 6e 65 72 29 . (runner)
0ee0: 29 0a 20 20 20 20 20 28 72 75 6e 6e 65 72 29 29 ). (runner))
0ef0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 6f 70 65 6e ))..(define open
0f00: 2d 72 75 6e 2d 63 6c 6f 73 65 20 6f 70 65 6e 2d -run-close open-
0f10: 72 75 6e 2d 63 6c 6f 73 65 2d 65 78 63 65 70 74 run-close-except
0f20: 69 6f 6e 2d 68 61 6e 64 6c 69 6e 67 29 0a 0a 28 ion-handling)..(
0f30: 64 65 66 69 6e 65 20 2a 67 6c 6f 62 61 6c 2d 64 define *global-d
0f40: 65 6c 74 61 2a 20 30 29 0a 28 64 65 66 69 6e 65 elta* 0).(define
0f50: 20 2a 6c 61 73 74 2d 67 6c 6f 62 61 6c 2d 64 65 *last-global-de
0f60: 6c 74 61 2d 70 72 69 6e 74 65 64 2a 20 30 29 0a lta-printed* 0).
0f70: 0a 28 64 65 66 69 6e 65 20 28 6f 70 65 6e 2d 72 .(define (open-r
0f80: 75 6e 2d 63 6c 6f 73 65 2d 6d 65 61 73 75 72 65 un-close-measure
0f90: 20 20 70 72 6f 63 20 69 64 62 20 2e 20 70 61 72 proc idb . par
0fa0: 61 6d 73 29 0a 20 20 28 64 65 62 75 67 3a 70 72 ams). (debug:pr
0fb0: 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 6f 70 65 int-info 11 "ope
0fc0: 6e 2d 72 75 6e 2d 63 6c 6f 73 65 2d 6d 65 61 73 n-run-close-meas
0fd0: 75 72 65 20 53 54 41 52 54 2c 20 69 64 62 3d 22 ure START, idb="
0fe0: 20 69 64 62 20 22 2c 20 70 61 72 61 6d 73 3d 22 idb ", params="
0ff0: 20 70 61 72 61 6d 73 29 0a 20 20 28 6c 65 74 2a params). (let*
1000: 20 28 28 73 74 61 72 74 2d 6d 73 20 28 63 75 72 ((start-ms (cur
1010: 72 65 6e 74 2d 6d 69 6c 6c 69 73 65 63 6f 6e 64 rent-millisecond
1020: 73 29 29 0a 09 20 28 64 62 20 20 20 20 20 20 20 s)).. (db
1030: 28 69 66 20 69 64 62 20 69 64 62 20 28 6f 70 65 (if idb idb (ope
1040: 6e 2d 64 62 29 29 29 0a 20 20 20 20 20 20 20 20 n-db))).
1050: 20 28 74 68 72 6f 74 74 6c 65 20 28 73 74 72 69 (throttle (stri
1060: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 63 6f 6e 66 ng->number (conf
1070: 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 ig-lookup *confi
1080: 67 64 61 74 2a 20 22 73 65 74 75 70 22 20 22 74 gdat* "setup" "t
1090: 68 72 6f 74 74 6c 65 22 29 29 29 29 0a 20 20 20 hrottle")))).
10a0: 20 28 64 62 3a 73 65 74 2d 73 79 6e 63 20 64 62 (db:set-sync db
10b0: 29 0a 20 20 20 20 28 73 65 74 21 20 72 65 73 20 ). (set! res
10c0: 20 20 20 20 20 28 61 70 70 6c 79 20 70 72 6f 63 (apply proc
10d0: 20 64 62 20 70 61 72 61 6d 73 29 29 0a 20 20 20 db params)).
10e0: 20 28 69 66 20 28 6e 6f 74 20 69 64 62 29 28 73 (if (not idb)(s
10f0: 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 qlite3:finalize!
1100: 20 64 62 29 29 0a 20 20 20 20 3b 3b 20 73 63 61 db)). ;; sca
1110: 6c 65 20 62 79 20 31 30 2c 20 61 76 65 72 61 67 le by 10, averag
1120: 65 20 77 69 74 68 20 63 75 72 72 65 6e 74 20 76 e with current v
1130: 61 6c 75 65 2e 0a 20 20 20 20 28 73 65 74 21 20 alue.. (set!
1140: 2a 67 6c 6f 62 61 6c 2d 64 65 6c 74 61 2a 20 28 *global-delta* (
1150: 2f 20 28 2b 20 2a 67 6c 6f 62 61 6c 2d 64 65 6c / (+ *global-del
1160: 74 61 2a 20 28 2a 20 28 2d 20 28 63 75 72 72 65 ta* (* (- (curre
1170: 6e 74 2d 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 29 nt-milliseconds)
1180: 20 73 74 61 72 74 2d 6d 73 29 0a 09 09 09 09 09 start-ms)......
1190: 09 20 28 69 66 20 74 68 72 6f 74 74 6c 65 20 74 . (if throttle t
11a0: 68 72 6f 74 74 6c 65 20 30 2e 30 31 29 29 29 0a hrottle 0.01))).
11b0: 09 09 09 20 20 20 20 32 29 29 0a 20 20 20 20 28 ... 2)). (
11c0: 69 66 20 28 3e 20 28 61 62 73 20 28 2d 20 2a 6c if (> (abs (- *l
11d0: 61 73 74 2d 67 6c 6f 62 61 6c 2d 64 65 6c 74 61 ast-global-delta
11e0: 2d 70 72 69 6e 74 65 64 2a 20 2a 67 6c 6f 62 61 -printed* *globa
11f0: 6c 2d 64 65 6c 74 61 2a 29 29 20 30 2e 30 38 29 l-delta*)) 0.08)
1200: 20 3b 3b 20 64 6f 6e 27 74 20 70 72 69 6e 74 20 ;; don't print
1210: 61 6c 6c 20 74 68 65 20 74 69 6d 65 2c 20 6f 6e all the time, on
1220: 6c 79 20 69 66 20 69 74 20 63 68 61 6e 67 65 73 ly if it changes
1230: 20 61 20 62 69 74 0a 09 28 62 65 67 69 6e 0a 09 a bit..(begin..
1240: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 (debug:print-i
1250: 6e 66 6f 20 31 20 22 6c 61 75 6e 63 68 20 74 68 nfo 1 "launch th
1260: 72 6f 74 74 6c 65 20 66 61 63 74 6f 72 3d 22 20 rottle factor="
1270: 2a 67 6c 6f 62 61 6c 2d 64 65 6c 74 61 2a 29 0a *global-delta*).
1280: 09 20 20 28 73 65 74 21 20 2a 6c 61 73 74 2d 67 . (set! *last-g
1290: 6c 6f 62 61 6c 2d 64 65 6c 74 61 2d 70 72 69 6e lobal-delta-prin
12a0: 74 65 64 2a 20 2a 67 6c 6f 62 61 6c 2d 64 65 6c ted* *global-del
12b0: 74 61 2a 29 29 29 0a 20 20 20 20 28 64 65 62 75 ta*))). (debu
12c0: 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 g:print-info 11
12d0: 22 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 2d "open-run-close-
12e0: 6d 65 61 73 75 72 65 20 45 4e 44 22 20 29 0a 20 measure END" ).
12f0: 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 69 6e res))..(defin
1300: 65 20 28 64 62 3a 69 6e 69 74 69 61 6c 69 7a 65 e (db:initialize
1310: 20 64 62 29 0a 20 20 28 64 65 62 75 67 3a 70 72 db). (debug:pr
1320: 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a int-info 11 "db:
1330: 69 6e 69 74 69 61 6c 69 7a 65 20 53 54 41 52 54 initialize START
1340: 22 29 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e "). (let* ((con
1350: 66 69 67 64 61 74 20 28 63 61 72 20 2a 63 6f 6e figdat (car *con
1360: 66 69 67 69 6e 66 6f 2a 29 29 20 20 3b 3b 20 74 figinfo*)) ;; t
1370: 75 74 20 74 75 74 2c 20 67 6c 6f 62 61 6c 20 77 ut tut, global w
1380: 61 72 6e 69 6e 67 2e 2e 2e 0a 09 20 28 6b 65 79 arning..... (key
1390: 73 20 20 20 20 20 28 63 6f 6e 66 69 67 2d 67 65 s (config-ge
13a0: 74 2d 66 69 65 6c 64 73 20 63 6f 6e 66 69 67 64 t-fields configd
13b0: 61 74 29 29 0a 09 20 28 68 61 76 65 6b 65 79 73 at)).. (havekeys
13c0: 20 28 3e 20 28 6c 65 6e 67 74 68 20 6b 65 79 73 (> (length keys
13d0: 29 20 30 29 29 0a 09 20 28 6b 65 79 73 74 72 20 ) 0)).. (keystr
13e0: 20 20 28 6b 65 79 73 2d 3e 6b 65 79 73 74 72 20 (keys->keystr
13f0: 6b 65 79 73 29 29 0a 09 20 28 66 69 65 6c 64 73 keys)).. (fields
1400: 74 72 20 28 6b 65 79 73 2d 3e 6b 65 79 2f 66 69 tr (keys->key/fi
1410: 65 6c 64 20 6b 65 79 73 29 29 29 0a 20 20 20 20 eld keys))).
1420: 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 (for-each (lambd
1430: 61 20 28 6b 65 79 29 0a 09 09 28 6c 65 74 20 28 a (key)...(let (
1440: 28 6b 65 79 6e 20 28 76 65 63 74 6f 72 2d 72 65 (keyn (vector-re
1450: 66 20 6b 65 79 20 30 29 29 29 0a 09 09 20 20 28 f key 0)))... (
1460: 69 66 20 28 6d 65 6d 62 65 72 20 28 73 74 72 69 if (member (stri
1470: 6e 67 2d 64 6f 77 6e 63 61 73 65 20 6b 65 79 6e ng-downcase keyn
1480: 29 0a 09 09 09 20 20 20 20 20 20 28 6c 69 73 74 ).... (list
1490: 20 22 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 "runname" "stat
14a0: 65 22 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e e" "status" "own
14b0: 65 72 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 er" "event_time"
14c0: 20 22 63 6f 6d 6d 65 6e 74 22 20 22 66 61 69 6c "comment" "fail
14d0: 5f 63 6f 75 6e 74 22 0a 09 09 09 09 20 20 20 20 _count".....
14e0: 22 70 61 73 73 5f 63 6f 75 6e 74 22 29 29 0a 09 "pass_count"))..
14f0: 09 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 . (begin...
1500: 09 28 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 .(print "ERROR:
1510: 79 6f 75 72 20 6b 65 79 20 63 61 6e 6e 6f 74 20 your key cannot
1520: 62 65 20 6e 61 6d 65 64 20 22 20 6b 65 79 6e 20 be named " keyn
1530: 22 20 61 73 20 74 68 69 73 20 63 6f 6e 66 6c 69 " as this confli
1540: 63 74 73 20 77 69 74 68 20 74 68 65 20 73 61 6d cts with the sam
1550: 65 20 6e 61 6d 65 64 20 66 69 65 6c 64 20 69 6e e named field in
1560: 20 74 68 65 20 72 75 6e 73 20 74 61 62 6c 65 22 the runs table"
1570: 29 0a 09 09 09 28 73 79 73 74 65 6d 20 28 63 6f )....(system (co
1580: 6e 63 20 22 72 6d 20 2d 66 20 22 20 64 62 70 61 nc "rm -f " dbpa
1590: 74 68 29 29 0a 09 09 09 28 65 78 69 74 20 31 29 th))....(exit 1)
15a0: 29 29 29 29 0a 09 20 20 20 20 20 20 6b 65 79 73 )))).. keys
15b0: 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 ). (sqlite3:e
15c0: 78 65 63 75 74 65 20 64 62 20 22 50 52 41 47 4d xecute db "PRAGM
15d0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 A synchronous =
15e0: 4f 46 46 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 OFF;"). (sqli
15f0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
1600: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 CREATE TABLE IF
1610: 4e 4f 54 20 45 58 49 53 54 53 20 6b 65 79 73 20 NOT EXISTS keys
1620: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
1630: 41 52 59 20 4b 45 59 2c 20 66 69 65 6c 64 6e 61 ARY KEY, fieldna
1640: 6d 65 20 54 45 58 54 2c 20 66 69 65 6c 64 74 79 me TEXT, fieldty
1650: 70 65 20 54 45 58 54 2c 20 43 4f 4e 53 54 52 41 pe TEXT, CONSTRA
1660: 49 4e 54 20 6b 65 79 63 6f 6e 73 74 72 61 69 6e INT keyconstrain
1670: 74 20 55 4e 49 51 55 45 20 28 66 69 65 6c 64 6e t UNIQUE (fieldn
1680: 61 6d 65 29 29 3b 22 29 0a 20 20 20 20 28 66 6f ame));"). (fo
1690: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
16a0: 6b 65 79 29 0a 09 09 28 73 71 6c 69 74 65 33 3a key)...(sqlite3:
16b0: 65 78 65 63 75 74 65 20 64 62 20 22 49 4e 53 45 execute db "INSE
16c0: 52 54 20 49 4e 54 4f 20 6b 65 79 73 20 28 66 69 RT INTO keys (fi
16d0: 65 6c 64 6e 61 6d 65 2c 66 69 65 6c 64 74 79 70 eldname,fieldtyp
16e0: 65 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 3b e) VALUES (?,?);
16f0: 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64 " (key:get-field
1700: 6e 61 6d 65 20 6b 65 79 29 28 6b 65 79 3a 67 65 name key)(key:ge
1710: 74 2d 66 69 65 6c 64 74 79 70 65 20 6b 65 79 29 t-fieldtype key)
1720: 29 29 0a 09 20 20 20 20 20 20 6b 65 79 73 29 0a )).. keys).
1730: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
1740: 63 75 74 65 20 64 62 20 28 63 6f 6e 63 20 0a 09 cute db (conc ..
1750: 09 09 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 .. "CREATE TABLE
1760: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 72 IF NOT EXISTS r
1770: 75 6e 73 20 28 69 64 20 49 4e 54 45 47 45 52 20 uns (id INTEGER
1780: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 22 20 0a PRIMARY KEY, " .
1790: 09 09 09 20 66 69 65 6c 64 73 74 72 20 28 69 66 ... fieldstr (if
17a0: 20 68 61 76 65 6b 65 79 73 20 22 2c 22 20 22 22 havekeys "," ""
17b0: 29 0a 09 09 09 20 22 72 75 6e 6e 61 6d 65 20 54 ).... "runname T
17c0: 45 58 54 2c 22 0a 09 09 09 20 22 73 74 61 74 65 EXT,".... "state
17d0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
17e0: 2c 22 0a 09 09 09 20 22 73 74 61 74 75 73 20 54 ,".... "status T
17f0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 22 EXT DEFAULT '',"
1800: 0a 09 09 09 20 22 6f 77 6e 65 72 20 54 45 58 54 .... "owner TEXT
1810: 20 44 45 46 41 55 4c 54 20 27 27 2c 22 0a 09 09 DEFAULT '',"...
1820: 09 20 22 65 76 65 6e 74 5f 74 69 6d 65 20 54 49 . "event_time TI
1830: 4d 45 53 54 41 4d 50 2c 22 0a 09 09 09 20 22 63 MESTAMP,".... "c
1840: 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 omment TEXT DEFA
1850: 55 4c 54 20 27 27 2c 22 0a 09 09 09 20 22 66 61 ULT '',".... "fa
1860: 69 6c 5f 63 6f 75 6e 74 20 49 4e 54 45 47 45 52 il_count INTEGER
1870: 20 44 45 46 41 55 4c 54 20 30 2c 22 0a 09 09 09 DEFAULT 0,"....
1880: 20 22 70 61 73 73 5f 63 6f 75 6e 74 20 49 4e 54 "pass_count INT
1890: 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c 22 EGER DEFAULT 0,"
18a0: 0a 09 09 09 20 22 43 4f 4e 53 54 52 41 49 4e 54 .... "CONSTRAINT
18b0: 20 72 75 6e 73 63 6f 6e 73 74 72 61 69 6e 74 20 runsconstraint
18c0: 55 4e 49 51 55 45 20 28 72 75 6e 6e 61 6d 65 22 UNIQUE (runname"
18d0: 20 28 69 66 20 68 61 76 65 6b 65 79 73 20 22 2c (if havekeys ",
18e0: 22 20 22 22 29 20 6b 65 79 73 74 72 20 22 29 29 " "") keystr "))
18f0: 3b 22 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 ;")). (sqlite
1900: 33 3a 65 78 65 63 75 74 65 20 64 62 20 28 63 6f 3:execute db (co
1910: 6e 63 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 nc "CREATE INDEX
1920: 20 72 75 6e 73 5f 69 6e 64 65 78 20 4f 4e 20 72 runs_index ON r
1930: 75 6e 73 20 28 72 75 6e 6e 61 6d 65 22 20 28 69 uns (runname" (i
1940: 66 20 68 61 76 65 6b 65 79 73 20 22 2c 22 20 22 f havekeys "," "
1950: 22 29 20 6b 65 79 73 74 72 20 22 29 3b 22 29 29 ") keystr ");"))
1960: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 . (sqlite3:ex
1970: 65 63 75 74 65 20 64 62 20 0a 09 09 20 20 20 20 ecute db ...
1980: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
1990: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 F NOT EXISTS tes
19a0: 74 73 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 ts .
19b0: 20 20 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 (id INTE
19c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
19d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19e0: 20 20 20 20 20 20 72 75 6e 5f 69 64 20 20 20 20 run_id
19f0: 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 20 INTEGER,.
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1a10: 65 73 74 6e 61 6d 65 20 20 20 54 45 58 54 2c 0a estname TEXT,.
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a30: 20 20 20 20 20 68 6f 73 74 20 20 20 20 20 20 20 host
1a40: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f TEXT DEFAULT 'n/
1a50: 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 a',.
1a60: 20 20 20 20 20 20 20 20 20 63 70 75 6c 6f 61 64 cpuload
1a70: 20 20 20 20 52 45 41 4c 20 44 45 46 41 55 4c 54 REAL DEFAULT
1a80: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 -1,.
1a90: 20 20 20 20 20 20 20 20 20 20 64 69 73 6b 66 72 diskfr
1aa0: 65 65 20 20 20 49 4e 54 45 47 45 52 20 44 45 46 ee INTEGER DEF
1ab0: 41 55 4c 54 20 2d 31 2c 0a 20 20 20 20 20 20 20 AULT -1,.
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e un
1ad0: 61 6d 65 20 20 20 20 20 20 54 45 58 54 20 44 45 ame TEXT DE
1ae0: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 20 0a 20 20 FAULT 'n/a', .
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b00: 20 20 20 72 75 6e 64 69 72 20 20 20 20 20 54 45 rundir TE
1b10: 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 27 XT DEFAULT 'n/a'
1b20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1b30: 20 20 20 20 20 20 20 73 68 6f 72 74 64 69 72 20 shortdir
1b40: 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 TEXT DEFAULT '
1b50: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
1b60: 20 20 20 20 20 20 20 20 69 74 65 6d 5f 70 61 74 item_pat
1b70: 68 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 h TEXT DEFAULT
1b80: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
1b90: 20 20 20 20 20 20 20 20 20 73 74 61 74 65 20 20 state
1ba0: 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 TEXT DEFAULT
1bb0: 20 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 0a 'NOT_STARTED',.
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bd0: 20 20 20 20 20 73 74 61 74 75 73 20 20 20 20 20 status
1be0: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 46 41 TEXT DEFAULT 'FA
1bf0: 49 4c 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 IL',.
1c00: 20 20 20 20 20 20 20 20 20 20 61 74 74 65 6d 70 attemp
1c10: 74 6e 75 6d 20 49 4e 54 45 47 45 52 20 44 45 46 tnum INTEGER DEF
1c20: 41 55 4c 54 20 30 2c 0a 20 20 20 20 20 20 20 20 AULT 0,.
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e fin
1c40: 61 6c 5f 6c 6f 67 66 20 54 45 58 54 20 44 45 46 al_logf TEXT DEF
1c50: 41 55 4c 54 20 27 6c 6f 67 73 2f 66 69 6e 61 6c AULT 'logs/final
1c60: 2e 6c 6f 67 27 2c 0a 20 20 20 20 20 20 20 20 20 .log',.
1c70: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 64 logd
1c80: 61 74 20 20 20 20 20 42 4c 4f 42 2c 20 0a 20 20 at BLOB, .
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca0: 20 20 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 run_duration
1cb0: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 INTEGER DEFAULT
1cc0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 0,.
1cd0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 20 comment
1ce0: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
1cf0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
1d00: 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 5f 74 event_t
1d10: 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 2c 0a 20 ime TIMESTAMP,.
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d30: 20 20 20 20 66 61 69 6c 5f 63 6f 75 6e 74 20 49 fail_count I
1d40: 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 NTEGER DEFAULT 0
1d50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1d60: 20 20 20 20 20 20 20 70 61 73 73 5f 63 6f 75 6e pass_coun
1d70: 74 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c t INTEGER DEFAUL
1d80: 54 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 T 0,.
1d90: 20 20 20 20 20 20 20 20 20 20 61 72 63 68 69 76 archiv
1da0: 65 64 20 20 20 49 4e 54 45 47 45 52 20 44 45 46 ed INTEGER DEF
1db0: 41 55 4c 54 20 30 2c 20 2d 2d 20 30 3d 6e 6f 2c AULT 0, -- 0=no,
1dc0: 20 31 3d 69 6e 20 70 72 6f 67 72 65 73 73 2c 20 1=in progress,
1dd0: 32 3d 79 65 73 0a 20 20 20 20 20 20 20 20 20 20 2=yes.
1de0: 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 CONST
1df0: 52 41 49 4e 54 20 74 65 73 74 73 63 6f 6e 73 74 RAINT testsconst
1e00: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 72 75 raint UNIQUE (ru
1e10: 6e 5f 69 64 2c 20 74 65 73 74 6e 61 6d 65 2c 20 n_id, testname,
1e20: 69 74 65 6d 5f 70 61 74 68 29 0a 20 20 20 20 20 item_path).
1e30: 20 20 20 20 20 29 3b 22 29 0a 20 20 20 20 28 73 );"). (s
1e40: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
1e50: 62 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 b "CREATE INDEX
1e60: 74 65 73 74 73 5f 69 6e 64 65 78 20 4f 4e 20 74 tests_index ON t
1e70: 65 73 74 73 20 28 72 75 6e 5f 69 64 2c 20 74 65 ests (run_id, te
1e80: 73 74 6e 61 6d 65 2c 20 69 74 65 6d 5f 70 61 74 stname, item_pat
1e90: 68 29 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 74 h);"). (sqlit
1ea0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 e3:execute db "C
1eb0: 52 45 41 54 45 20 56 49 45 57 20 72 75 6e 73 5f REATE VIEW runs_
1ec0: 74 65 73 74 73 20 41 53 20 53 45 4c 45 43 54 20 tests AS SELECT
1ed0: 2a 20 46 52 4f 4d 20 72 75 6e 73 20 49 4e 4e 45 * FROM runs INNE
1ee0: 52 20 4a 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 R JOIN tests ON
1ef0: 72 75 6e 73 2e 69 64 3d 74 65 73 74 73 2e 72 75 runs.id=tests.ru
1f00: 6e 5f 69 64 3b 22 29 0a 20 20 20 20 28 73 71 6c n_id;"). (sql
1f10: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
1f20: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
1f30: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 NOT EXISTS test
1f40: 5f 73 74 65 70 73 20 0a 20 20 20 20 20 20 20 20 _steps .
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f60: 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 (id INTEGE
1f70: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 R PRIMARY KEY,.
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 te
1fa0: 73 74 5f 69 64 20 49 4e 54 45 47 45 52 2c 20 0a st_id INTEGER, .
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
1fd0: 74 65 70 6e 61 6d 65 20 54 45 58 54 2c 20 0a 20 tepname TEXT, .
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 20 20 20 20 20 20 73 74 st
2000: 61 74 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 ate TEXT DEFAULT
2010: 20 27 4e 4f 54 5f 53 54 41 52 54 45 44 27 2c 20 'NOT_STARTED',
2020: 0a 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 20 20 20 20 20 20
2040: 73 74 61 74 75 73 20 54 45 58 54 20 44 45 46 41 status TEXT DEFA
2050: 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 20 20 ULT 'n/a',.
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2070: 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 5f event_
2080: 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 2c 0a time TIMESTAMP,.
2090: 20 20 20 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 63 c
20b0: 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 omment TEXT DEFA
20c0: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
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 6c 6f 67 66 69 6c 65 20 54 logfile T
20f0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
2120: 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 73 ONSTRAINT test_s
2130: 74 65 70 73 5f 63 6f 6e 73 74 72 61 69 6e 74 20 teps_constraint
2140: 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c UNIQUE (test_id,
2150: 73 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 29 29 stepname,state))
2160: 3b 22 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 ;"). (sqlite3
2170: 3a 65 78 65 63 75 74 65 20 64 62 20 22 43 52 45 :execute db "CRE
2180: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 ATE TABLE IF NOT
2190: 20 45 58 49 53 54 53 20 65 78 74 72 61 64 61 74 EXISTS extradat
21a0: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
21b0: 4d 41 52 59 20 4b 45 59 2c 20 72 75 6e 5f 69 64 MARY KEY, run_id
21c0: 20 49 4e 54 45 47 45 52 2c 20 6b 65 79 20 54 45 INTEGER, key TE
21d0: 58 54 2c 20 76 61 6c 20 54 45 58 54 29 3b 22 29 XT, val TEXT);")
21e0: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 . (sqlite3:ex
21f0: 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 45 ecute db "CREATE
2200: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 TABLE IF NOT EX
2210: 49 53 54 53 20 6d 65 74 61 64 61 74 20 28 69 64 ISTS metadat (id
2220: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
2230: 20 4b 45 59 2c 20 76 61 72 20 54 45 58 54 2c 20 KEY, var TEXT,
2240: 76 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 20 val TEXT,.
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2260: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 CONS
2270: 54 52 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 TRAINT metadat_c
2280: 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 onstraint UNIQUE
2290: 20 28 76 61 72 29 29 3b 22 29 0a 20 20 20 20 28 (var));"). (
22a0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
22b0: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 db "CREATE TABLE
22c0: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61 IF NOT EXISTS a
22d0: 63 63 65 73 73 5f 6c 6f 67 20 28 69 64 20 49 4e ccess_log (id IN
22e0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
22f0: 59 2c 20 75 73 65 72 20 54 45 58 54 2c 20 61 63 Y, user TEXT, ac
2300: 63 65 73 73 65 64 20 54 49 4d 45 53 54 41 4d 50 cessed TIMESTAMP
2310: 2c 20 61 72 67 73 20 54 45 58 54 29 3b 22 29 0a , args TEXT);").
2320: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
2330: 63 75 74 65 20 64 62 20 22 43 52 45 41 54 45 20 cute db "CREATE
2340: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 TABLE IF NOT EXI
2350: 53 54 53 20 74 65 73 74 5f 6d 65 74 61 20 28 69 STS test_meta (i
2360: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 d INTEGER PRIMAR
2370: 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 Y KEY,.
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2390: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test
23a0: 6e 61 6d 65 20 20 20 20 54 45 58 54 20 44 45 46 name TEXT DEF
23b0: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75 au
23e0: 74 68 6f 72 20 20 20 20 20 20 54 45 58 54 20 44 thor TEXT D
23f0: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 EFAULT '',.
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2420: 6f 77 6e 65 72 20 20 20 20 20 20 20 54 45 58 54 owner TEXT
2430: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2460: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 54 45 description TE
2470: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 XT DEFAULT '',.
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24a0: 20 20 20 20 72 65 76 69 65 77 65 64 20 20 20 20 reviewed
24b0: 54 49 4d 45 53 54 41 4d 50 2c 0a 20 20 20 20 20 TIMESTAMP,.
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24e0: 69 74 65 72 61 74 65 64 20 20 20 20 54 45 58 54 iterated TEXT
24f0: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2520: 20 20 61 76 67 5f 72 75 6e 74 69 6d 65 20 52 45 avg_runtime RE
2530: 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 AL,.
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2550: 20 20 20 20 20 20 20 20 20 61 76 67 5f 64 69 73 avg_dis
2560: 6b 20 20 20 20 52 45 41 4c 2c 0a 20 20 20 20 20 k REAL,.
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2590: 74 61 67 73 20 20 20 20 20 20 20 20 54 45 58 54 tags TEXT
25a0: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 DEFAULT '',.
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25d0: 20 20 6a 6f 62 67 72 6f 75 70 20 20 20 20 54 45 jobgroup TE
25e0: 58 54 20 44 45 46 41 55 4c 54 20 27 64 65 66 61 XT DEFAULT 'defa
25f0: 75 6c 74 27 2c 0a 20 20 20 20 20 20 20 20 20 20 ult',.
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2610: 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 CONSTRAINT
2620: 20 74 65 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 74 test_meta_const
2630: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 65 raint UNIQUE (te
2640: 73 74 6e 61 6d 65 29 29 3b 22 29 0a 20 20 20 20 stname));").
2650: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
2660: 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c db "CREATE TABL
2670: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
2680: 74 65 73 74 5f 64 61 74 61 20 28 69 64 20 49 4e test_data (id IN
2690: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
26a0: 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 Y,.
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26c0: 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 test_id INTEG
26d0: 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ER,.
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26f0: 20 20 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 category TEX
2700: 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 T DEFAULT '',.
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 va
2730: 72 69 61 62 6c 65 20 54 45 58 54 2c 0a 09 20 20 riable TEXT,..
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2750: 20 20 20 20 20 20 76 61 6c 75 65 20 52 45 41 4c value REAL
2760: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2770: 20 20 20 20 20 20 20 20 20 20 20 65 78 70 65 63 expec
2780: 74 65 64 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 ted REAL,..
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27a0: 20 20 20 74 6f 6c 20 52 45 41 4c 2c 0a 20 20 20 tol REAL,.
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 69 uni
27d0: 74 73 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 ts TEXT,.
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 6e 74 comment
2800: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
2810: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2830: 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 45 status TEXT DE
2840: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 typ
2870: 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 e TEXT DEFAULT '
2880: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a0: 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 CONSTRAINT test
28b0: 5f 64 61 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 _data_constraint
28c0: 20 55 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 UNIQUE (test_id
28d0: 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 ,category,variab
28e0: 6c 65 29 29 3b 22 29 0a 20 20 20 20 3b 3b 20 4d le));"). ;; M
28f0: 75 73 74 20 64 6f 20 74 68 69 73 20 2a 61 66 74 ust do this *aft
2900: 65 72 2a 20 72 75 6e 6e 69 6e 67 20 70 61 74 63 er* running patc
2910: 68 20 64 62 20 21 21 20 4e 6f 20 6d 6f 72 65 2e h db !! No more.
2920: 20 0a 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 . (db:set-va
2930: 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 r db "MEGATEST_V
2940: 45 52 53 49 4f 4e 22 20 6d 65 67 61 74 65 73 74 ERSION" megatest
2950: 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 28 64 -version). (d
2960: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
2970: 31 31 20 22 64 62 3a 69 6e 69 74 69 61 6c 69 7a 11 "db:initializ
2980: 65 20 45 4e 44 22 29 0a 20 20 20 20 29 29 0a 0a e END"). ))..
2990: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
29a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29d0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 54 20 45 20 ========.;; T E
29e0: 53 20 54 20 20 20 53 20 50 20 45 20 43 20 49 20 S T S P E C I
29f0: 46 20 49 20 43 20 20 20 44 20 42 20 0a 3b 3b 3d F I C D B .;;=
2a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2a40: 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 43 72 65 61 74 65 =====..;; Create
2a50: 20 74 68 65 20 73 71 6c 69 74 65 20 64 62 20 66 the sqlite db f
2a60: 6f 72 20 74 68 65 20 69 6e 64 69 76 69 64 75 61 or the individua
2a70: 6c 20 74 65 73 74 28 73 29 0a 28 64 65 66 69 6e l test(s).(defin
2a80: 65 20 28 6f 70 65 6e 2d 74 65 73 74 2d 64 62 20 e (open-test-db
2a90: 74 65 73 74 70 61 74 68 29 20 0a 20 20 28 64 65 testpath) . (de
2aa0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
2ab0: 31 20 22 6f 70 65 6e 2d 74 65 73 74 2d 64 62 20 1 "open-test-db
2ac0: 22 20 74 65 73 74 70 61 74 68 29 0a 20 20 28 69 " testpath). (i
2ad0: 66 20 28 61 6e 64 20 28 64 69 72 65 63 74 6f 72 f (and (director
2ae0: 79 3f 20 74 65 73 74 70 61 74 68 29 0a 09 20 20 y? testpath)..
2af0: 20 28 66 69 6c 65 2d 72 65 61 64 2d 61 63 63 65 (file-read-acce
2b00: 73 73 3f 20 74 65 73 74 70 61 74 68 29 29 0a 20 ss? testpath)).
2b10: 20 20 20 20 20 28 6c 65 74 2a 20 28 28 64 62 70 (let* ((dbp
2b20: 61 74 68 20 20 20 20 28 63 6f 6e 63 20 74 65 73 ath (conc tes
2b30: 74 70 61 74 68 20 22 2f 74 65 73 74 64 61 74 2e tpath "/testdat.
2b40: 64 62 22 29 29 0a 09 20 20 20 20 20 28 64 62 65 db")).. (dbe
2b50: 78 69 73 74 73 20 20 28 66 69 6c 65 2d 65 78 69 xists (file-exi
2b60: 73 74 73 3f 20 64 62 70 61 74 68 29 29 0a 09 20 sts? dbpath))..
2b70: 20 20 20 20 28 64 62 20 20 20 20 20 20 20 20 28 (db (
2b80: 73 71 6c 69 74 65 33 3a 6f 70 65 6e 2d 64 61 74 sqlite3:open-dat
2b90: 61 62 61 73 65 20 64 62 70 61 74 68 29 29 20 3b abase dbpath)) ;
2ba0: 3b 20 28 6e 65 76 65 72 2d 67 69 76 65 2d 75 70 ; (never-give-up
2bb0: 2d 6f 70 65 6e 2d 64 62 20 64 62 70 61 74 68 29 -open-db dbpath)
2bc0: 29 0a 09 20 20 20 20 20 28 68 61 6e 64 6c 65 72 ).. (handler
2bd0: 20 20 20 28 6d 61 6b 65 2d 62 75 73 79 2d 74 69 (make-busy-ti
2be0: 6d 65 6f 75 74 20 28 69 66 20 28 61 72 67 73 3a meout (if (args:
2bf0: 67 65 74 2d 61 72 67 20 22 2d 6f 76 65 72 72 69 get-arg "-overri
2c00: 64 65 2d 74 69 6d 65 6f 75 74 22 29 0a 09 09 09 de-timeout")....
2c10: 09 09 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 .. (string
2c20: 2d 3e 6e 75 6d 62 65 72 20 28 61 72 67 73 3a 67 ->number (args:g
2c30: 65 74 2d 61 72 67 20 22 2d 6f 76 65 72 72 69 64 et-arg "-overrid
2c40: 65 2d 74 69 6d 65 6f 75 74 22 29 29 0a 09 09 09 e-timeout"))....
2c50: 09 09 20 20 20 20 20 20 20 31 33 36 30 30 30 29 .. 136000)
2c60: 29 29 29 0a 09 28 73 71 6c 69 74 65 33 3a 73 65 )))..(sqlite3:se
2c70: 74 2d 62 75 73 79 2d 68 61 6e 64 6c 65 72 21 20 t-busy-handler!
2c80: 64 62 20 68 61 6e 64 6c 65 72 29 0a 09 28 69 66 db handler)..(if
2c90: 20 28 6e 6f 74 20 64 62 65 78 69 73 74 73 29 0a (not dbexists).
2ca0: 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 . (begin..
2cb0: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
2cc0: 75 74 65 20 64 62 20 22 50 52 41 47 4d 41 20 73 ute db "PRAGMA s
2cd0: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 46 55 4c ynchronous = FUL
2ce0: 4c 3b 22 29 0a 09 20 20 20 20 20 20 28 64 65 62 L;").. (deb
2cf0: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 ug:print-info 11
2d00: 20 22 49 6e 69 74 69 61 6c 69 7a 65 64 20 74 65 "Initialized te
2d10: 73 74 20 64 61 74 61 62 61 73 65 20 22 20 64 62 st database " db
2d20: 70 61 74 68 29 0a 09 20 20 20 20 20 20 28 64 62 path).. (db
2d30: 3a 74 65 73 74 64 62 2d 69 6e 69 74 69 61 6c 69 :testdb-initiali
2d40: 7a 65 20 64 62 29 29 29 0a 09 3b 3b 20 28 73 71 ze db)))..;; (sq
2d50: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
2d60: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f "PRAGMA synchro
2d70: 6e 6f 75 73 20 3d 20 30 3b 22 29 0a 09 28 64 65 nous = 0;")..(de
2d80: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
2d90: 31 20 22 6f 70 65 6e 2d 74 65 73 74 2d 64 62 20 1 "open-test-db
2da0: 45 4e 44 20 28 73 75 63 65 73 73 66 75 6c 29 22 END (sucessful)"
2db0: 20 74 65 73 74 70 61 74 68 29 0a 09 64 62 29 0a testpath)..db).
2dc0: 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 28 64 (begin..(d
2dd0: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
2de0: 31 31 20 22 6f 70 65 6e 2d 74 65 73 74 2d 64 62 11 "open-test-db
2df0: 20 45 4e 44 20 28 75 6e 73 75 63 65 73 73 66 75 END (unsucessfu
2e00: 6c 29 22 20 74 65 73 74 70 61 74 68 29 0a 09 23 l)" testpath)..#
2e10: 66 29 29 29 0a 0a 3b 3b 20 66 69 6e 64 20 61 6e f)))..;; find an
2e20: 64 20 6f 70 65 6e 20 74 68 65 20 74 65 73 74 64 d open the testd
2e30: 61 74 2e 64 62 20 66 69 6c 65 20 66 6f 72 20 61 at.db file for a
2e40: 6e 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 0a n existing test.
2e50: 28 64 65 66 69 6e 65 20 28 64 62 3a 6f 70 65 6e (define (db:open
2e60: 2d 74 65 73 74 2d 64 62 2d 62 79 2d 74 65 73 74 -test-db-by-test
2e70: 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 29 0a -id db test-id).
2e80: 20 20 28 6c 65 74 2a 20 28 28 74 65 73 74 2d 70 (let* ((test-p
2e90: 61 74 68 20 28 64 62 3a 74 65 73 74 2d 67 65 74 ath (db:test-get
2ea0: 2d 72 75 6e 64 69 72 2d 66 72 6f 6d 2d 74 65 73 -rundir-from-tes
2eb0: 74 2d 69 64 20 64 62 20 74 65 73 74 2d 69 64 29 t-id db test-id)
2ec0: 29 29 0a 20 20 20 20 28 6f 70 65 6e 2d 74 65 73 )). (open-tes
2ed0: 74 2d 64 62 20 74 65 73 74 2d 70 61 74 68 29 29 t-db test-path))
2ee0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 )..(define (db:t
2ef0: 65 73 74 64 62 2d 69 6e 69 74 69 61 6c 69 7a 65 estdb-initialize
2f00: 20 64 62 29 0a 20 20 28 64 65 62 75 67 3a 70 72 db). (debug:pr
2f10: 69 6e 74 20 31 31 20 22 64 62 3a 74 65 73 74 64 int 11 "db:testd
2f20: 62 2d 69 6e 69 74 69 61 6c 69 7a 65 20 53 54 41 b-initialize STA
2f30: 52 54 22 29 0a 20 20 28 66 6f 72 2d 65 61 63 68 RT"). (for-each
2f40: 0a 20 20 20 28 6c 61 6d 62 64 61 20 28 73 71 6c . (lambda (sql
2f50: 63 6d 64 29 0a 20 20 20 20 20 28 73 71 6c 69 74 cmd). (sqlit
2f60: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 73 71 e3:execute db sq
2f70: 6c 63 6d 64 29 29 0a 20 20 20 28 6c 69 73 74 20 lcmd)). (list
2f80: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
2f90: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 NOT EXISTS test
2fa0: 5f 72 75 6e 64 61 74 20 28 0a 20 20 20 20 20 20 _rundat (.
2fb0: 20 20 20 20 20 20 20 20 69 64 20 49 4e 54 45 47 id INTEG
2fc0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a ER PRIMARY KEY,.
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 up
2fe0: 64 61 74 65 5f 74 69 6d 65 20 54 49 4d 45 53 54 date_time TIMEST
2ff0: 41 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 AMP,.
3000: 20 20 20 63 70 75 6c 6f 61 64 20 49 4e 54 45 47 cpuload INTEG
3010: 45 52 20 44 45 46 41 55 4c 54 20 2d 31 2c 0a 20 ER DEFAULT -1,.
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 dis
3030: 6b 66 72 65 65 20 49 4e 54 45 47 45 52 20 44 45 kfree INTEGER DE
3040: 46 41 55 4c 54 20 2d 31 2c 0a 20 20 20 20 20 20 FAULT -1,.
3050: 20 20 20 20 20 20 20 20 64 69 73 6b 75 73 61 67 diskusag
3060: 65 20 49 4e 54 47 45 52 20 44 45 46 41 55 4c 54 e INTGER DEFAULT
3070: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 -1,.
3080: 20 20 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 run_duration
3090: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 INTEGER DEFAULT
30a0: 30 29 3b 22 0a 09 20 22 43 52 45 41 54 45 20 54 0);".. "CREATE T
30b0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
30c0: 54 53 20 74 65 73 74 5f 64 61 74 61 20 28 0a 20 TS test_data (.
30d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 20 id
30e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 INTEGER PRIMARY
30f0: 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 20 KEY,.
3100: 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 47 test_id INTEG
3110: 45 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ER,.
3120: 20 20 63 61 74 65 67 6f 72 79 20 54 45 58 54 20 category TEXT
3130: 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 DEFAULT '',.
3140: 20 20 20 20 20 20 20 20 20 20 76 61 72 69 61 62 variab
3150: 6c 65 20 54 45 58 54 2c 0a 09 20 20 20 20 20 20 le TEXT,..
3160: 76 61 6c 75 65 20 52 45 41 4c 2c 0a 09 20 20 20 value REAL,..
3170: 20 20 20 65 78 70 65 63 74 65 64 20 52 45 41 4c expected REAL
3180: 2c 0a 09 20 20 20 20 20 20 74 6f 6c 20 52 45 41 ,.. tol REA
3190: 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 L,.
31a0: 20 75 6e 69 74 73 20 54 45 58 54 2c 0a 20 20 20 units TEXT,.
31b0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 65 comme
31c0: 6e 74 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 nt TEXT DEFAULT
31d0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
31e0: 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 45 status TEXT DE
31f0: 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 20 FAULT 'n/a',.
3200: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 20 type
3210: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c TEXT DEFAULT '',
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 . C
3230: 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 64 ONSTRAINT test_d
3240: 61 74 61 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 ata_constraint U
3250: 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 63 NIQUE (test_id,c
3260: 61 74 65 67 6f 72 79 2c 76 61 72 69 61 62 6c 65 ategory,variable
3270: 29 29 3b 22 0a 09 20 22 43 52 45 41 54 45 20 54 ));".. "CREATE T
3280: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 ABLE IF NOT EXIS
3290: 54 53 20 74 65 73 74 5f 73 74 65 70 73 20 28 0a TS test_steps (.
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 id
32b0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
32c0: 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 20 KEY,.
32d0: 20 20 20 20 74 65 73 74 5f 69 64 20 49 4e 54 45 test_id INTE
32e0: 47 45 52 2c 20 0a 20 20 20 20 20 20 20 20 20 20 GER, .
32f0: 20 20 20 20 73 74 65 70 6e 61 6d 65 20 54 45 58 stepname TEX
3300: 54 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 T, .
3310: 20 20 73 74 61 74 65 20 54 45 58 54 20 44 45 46 state TEXT DEF
3320: 41 55 4c 54 20 27 4e 4f 54 5f 53 54 41 52 54 45 AULT 'NOT_STARTE
3330: 44 27 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 D', .
3340: 20 20 20 73 74 61 74 75 73 20 54 45 58 54 20 44 status TEXT D
3350: 45 46 41 55 4c 54 20 27 6e 2f 61 27 2c 0a 20 20 EFAULT 'n/a',.
3360: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e even
3370: 74 5f 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50 t_time TIMESTAMP
3380: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
3390: 63 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 comment TEXT DEF
33a0: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 AULT '',.
33b0: 20 20 20 20 20 20 20 6c 6f 67 66 69 6c 65 20 54 logfile T
33c0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a EXT DEFAULT '',.
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f CO
33e0: 4e 53 54 52 41 49 4e 54 20 74 65 73 74 5f 73 74 NSTRAINT test_st
33f0: 65 70 73 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 eps_constraint U
3400: 4e 49 51 55 45 20 28 74 65 73 74 5f 69 64 2c 73 NIQUE (test_id,s
3410: 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 29 29 3b tepname,state));
3420: 22 0a 09 20 3b 3b 20 74 65 73 74 5f 6d 65 74 61 ".. ;; test_meta
3430: 20 63 61 6e 20 62 65 20 75 73 65 64 20 66 6f 72 can be used for
3440: 20 68 61 6e 64 69 6e 67 20 63 6f 6d 6d 61 6e 64 handing command
3450: 73 20 74 6f 20 74 68 65 20 74 65 73 74 0a 09 20 s to the test..
3460: 3b 3b 20 65 2e 67 2e 20 4b 49 4c 4c 52 45 51 0a ;; e.g. KILLREQ.
3470: 09 20 3b 3b 20 20 20 20 20 20 74 68 65 20 61 63 . ;; the ac
3480: 6b 73 74 61 74 65 20 69 73 20 73 65 74 20 74 6f kstate is set to
3490: 20 31 20 6f 6e 63 65 20 74 68 65 20 63 6f 6d 6d 1 once the comm
34a0: 61 6e 64 20 68 61 73 20 62 65 65 6e 20 63 6f 6d and has been com
34b0: 70 6c 65 74 65 64 0a 09 20 22 43 52 45 41 54 45 pleted.. "CREATE
34c0: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 TABLE IF NOT EX
34d0: 49 53 54 53 20 74 65 73 74 5f 6d 65 74 61 20 28 ISTS test_meta (
34e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i
34f0: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 d INTEGER PRIMAR
3500: 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20 20 Y KEY,.
3510: 20 20 20 20 20 76 61 72 20 54 45 58 54 2c 0a 20 var TEXT,.
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c val
3530: 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 TEXT,.
3540: 20 20 20 20 20 61 63 6b 73 74 61 74 65 20 49 4e ackstate IN
3550: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 30 2c TEGER DEFAULT 0,
3560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 . C
3570: 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 64 61 ONSTRAINT metada
3580: 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e 49 t_constraint UNI
3590: 51 55 45 20 28 76 61 72 29 29 3b 22 29 29 0a 20 QUE (var));")).
35a0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 31 31 (debug:print 11
35b0: 20 22 64 62 3a 74 65 73 74 64 62 2d 69 6e 69 74 "db:testdb-init
35c0: 69 61 6c 69 7a 65 20 45 4e 44 22 29 29 0a 0a 3b ialize END"))..;
35d0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
35e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
35f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3610: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4c 20 4f 20 47 =======.;; L O G
3620: 20 47 20 49 20 4e 20 47 20 20 20 20 44 20 42 20 G I N G D B
3630: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
3640: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 =========..(defi
3680: 6e 65 20 28 6f 70 65 6e 2d 6c 6f 67 67 69 6e 67 ne (open-logging
3690: 2d 64 62 29 20 3b 3b 20 20 28 63 6f 6e 63 20 2a -db) ;; (conc *
36a0: 74 6f 70 70 61 74 68 2a 20 22 2f 6d 65 67 61 74 toppath* "/megat
36b0: 65 73 74 2e 64 62 22 29 20 28 63 61 72 20 2a 63 est.db") (car *c
36c0: 6f 6e 66 69 67 69 6e 66 6f 2a 29 29 29 0a 20 20 onfiginfo*))).
36d0: 28 6c 65 74 2a 20 28 28 64 62 70 61 74 68 20 20 (let* ((dbpath
36e0: 20 20 28 63 6f 6e 63 20 28 69 66 20 2a 74 6f 70 (conc (if *top
36f0: 70 61 74 68 2a 20 28 63 6f 6e 63 20 2a 74 6f 70 path* (conc *top
3700: 70 61 74 68 2a 20 22 2f 22 29 20 22 22 29 20 22 path* "/") "") "
3710: 6c 6f 67 67 69 6e 67 2e 64 62 22 29 29 20 3b 3b logging.db")) ;;
3720: 20 66 6e 61 6d 65 29 0a 09 20 28 64 62 65 78 69 fname).. (dbexi
3730: 73 74 73 20 20 28 66 69 6c 65 2d 65 78 69 73 74 sts (file-exist
3740: 73 3f 20 64 62 70 61 74 68 29 29 0a 09 20 28 64 s? dbpath)).. (d
3750: 62 20 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 b (sqlite
3760: 33 3a 6f 70 65 6e 2d 64 61 74 61 62 61 73 65 20 3:open-database
3770: 64 62 70 61 74 68 29 29 20 3b 3b 20 28 6e 65 76 dbpath)) ;; (nev
3780: 65 72 2d 67 69 76 65 2d 75 70 2d 6f 70 65 6e 2d er-give-up-open-
3790: 64 62 20 64 62 70 61 74 68 29 29 0a 09 20 28 68 db dbpath)).. (h
37a0: 61 6e 64 6c 65 72 20 20 20 28 6d 61 6b 65 2d 62 andler (make-b
37b0: 75 73 79 2d 74 69 6d 65 6f 75 74 20 28 69 66 20 usy-timeout (if
37c0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "-
37d0: 6f 76 65 72 72 69 64 65 2d 74 69 6d 65 6f 75 74 override-timeout
37e0: 22 29 0a 09 09 09 09 09 20 20 20 28 73 74 72 69 ")...... (stri
37f0: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 61 72 67 73 ng->number (args
3800: 3a 67 65 74 2d 61 72 67 20 22 2d 6f 76 65 72 72 :get-arg "-overr
3810: 69 64 65 2d 74 69 6d 65 6f 75 74 22 29 29 0a 09 ide-timeout"))..
3820: 09 09 09 09 20 20 20 31 33 36 30 30 30 29 29 29 .... 136000)))
3830: 29 20 3b 3b 20 31 33 36 30 30 30 29 29 29 0a 20 ) ;; 136000))).
3840: 20 20 20 28 73 71 6c 69 74 65 33 3a 73 65 74 2d (sqlite3:set-
3850: 62 75 73 79 2d 68 61 6e 64 6c 65 72 21 20 64 62 busy-handler! db
3860: 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 28 69 handler). (i
3870: 66 20 28 6e 6f 74 20 64 62 65 78 69 73 74 73 29 f (not dbexists)
3880: 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 73 71 6c ..(begin.. (sql
3890: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
38a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
38b0: 20 4e 4f 54 20 45 58 49 53 54 53 20 6c 6f 67 20 NOT EXISTS log
38c0: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
38d0: 41 52 59 20 4b 45 59 2c 65 76 65 6e 74 5f 74 69 ARY KEY,event_ti
38e0: 6d 65 20 54 49 4d 45 53 54 41 4d 50 20 44 45 46 me TIMESTAMP DEF
38f0: 41 55 4c 54 20 28 73 74 72 66 74 69 6d 65 28 27 AULT (strftime('
3900: 25 73 27 2c 27 6e 6f 77 27 29 29 2c 6c 6f 67 6c %s','now')),logl
3910: 69 6e 65 20 54 45 58 54 2c 70 77 64 20 54 45 58 ine TEXT,pwd TEX
3920: 54 2c 63 6d 64 6c 69 6e 65 20 54 45 58 54 2c 70 T,cmdline TEXT,p
3930: 69 64 20 49 4e 54 45 47 45 52 29 3b 22 29 0a 09 id INTEGER);")..
3940: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
3950: 74 65 20 64 62 20 28 63 6f 6e 63 20 22 50 52 41 te db (conc "PRA
3960: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 GMA synchronous
3970: 3d 20 30 3b 22 29 29 29 29 0a 20 20 20 20 64 62 = 0;")))). db
3980: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
3990: 6c 6f 67 2d 65 76 65 6e 74 20 2e 20 6c 6f 67 6c log-event . logl
39a0: 73 74 29 0a 20 20 28 6c 65 74 20 28 28 64 62 20 st). (let ((db
39b0: 20 20 20 20 20 28 6f 70 65 6e 2d 6c 6f 67 67 69 (open-loggi
39c0: 6e 67 2d 64 62 29 29 0a 09 28 6c 6f 67 6c 69 6e ng-db))..(loglin
39d0: 65 20 28 61 70 70 6c 79 20 63 6f 6e 63 20 6c 6f e (apply conc lo
39e0: 67 6c 73 74 29 29 29 0a 20 20 20 20 28 73 71 6c glst))). (sql
39f0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
3a00: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67 "INSERT INTO log
3a10: 20 28 6c 6f 67 6c 69 6e 65 2c 70 77 64 2c 63 6d (logline,pwd,cm
3a20: 64 6c 69 6e 65 2c 70 69 64 29 20 56 41 4c 55 45 dline,pid) VALUE
3a30: 53 20 28 3f 2c 3f 2c 3f 2c 3f 29 3b 22 20 6c 6f S (?,?,?,?);" lo
3a40: 67 6c 69 6e 65 20 28 63 75 72 72 65 6e 74 2d 64 gline (current-d
3a50: 69 72 65 63 74 6f 72 79 29 28 73 74 72 69 6e 67 irectory)(string
3a60: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 61 72 -intersperse (ar
3a70: 67 76 29 20 22 20 22 29 28 63 75 72 72 65 6e 74 gv) " ")(current
3a80: 2d 70 72 6f 63 65 73 73 2d 69 64 29 29 0a 20 20 -process-id)).
3a90: 20 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c (sqlite3:final
3aa0: 69 7a 65 21 20 64 62 29 0a 20 20 20 20 6c 6f 67 ize! db). log
3ab0: 6c 69 6e 65 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d line))..;;======
3ac0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3ad0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3ae0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3af0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3b00: 0a 3b 3b 20 54 4f 44 4f 3a 0a 3b 3b 20 20 20 70 .;; TODO:.;; p
3b10: 75 74 20 64 65 6c 74 61 73 20 69 6e 74 6f 20 61 ut deltas into a
3b20: 6e 20 61 73 73 6f 63 20 6c 69 73 74 20 77 69 74 n assoc list wit
3b30: 68 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 h version number
3b40: 73 0a 3b 3b 20 20 20 61 70 70 6c 79 20 61 6c 6c s.;; apply all
3b50: 20 66 72 6f 6d 20 6c 61 73 74 20 74 6f 20 63 75 from last to cu
3b60: 72 72 65 6e 74 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d rrent.;;========
3b70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3b80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 28 ==============.(
3bb0: 64 65 66 69 6e 65 20 28 70 61 74 63 68 2d 64 62 define (patch-db
3bc0: 20 64 62 29 0a 20 20 28 68 61 6e 64 6c 65 2d 65 db). (handle-e
3bd0: 78 63 65 70 74 69 6f 6e 73 0a 20 20 20 65 78 6e xceptions. exn
3be0: 0a 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 . (begin.
3bf0: 28 70 72 69 6e 74 20 22 45 78 63 65 70 74 69 6f (print "Exceptio
3c00: 6e 3a 20 22 20 65 78 6e 29 0a 20 20 20 20 20 28 n: " exn). (
3c10: 70 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 50 6f print "ERROR: Po
3c20: 73 73 69 62 6c 65 20 6f 75 74 20 6f 66 20 64 61 ssible out of da
3c30: 74 65 20 73 63 68 65 6d 61 2c 20 61 74 74 65 6d te schema, attem
3c40: 70 74 69 6e 67 20 74 6f 20 61 64 64 20 74 61 62 pting to add tab
3c50: 6c 65 20 6d 65 74 61 64 61 74 61 2e 2e 2e 22 29 le metadata...")
3c60: 0a 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 . (sqlite3:e
3c70: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
3c80: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
3c90: 58 49 53 54 53 20 6d 65 74 61 64 61 74 20 28 69 XISTS metadat (i
3ca0: 64 20 49 4e 54 45 47 45 52 2c 20 76 61 72 20 54 d INTEGER, var T
3cb0: 45 58 54 2c 20 76 61 6c 20 54 45 58 54 2c 0a 20 EXT, val TEXT,.
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ce0: 43 4f 4e 53 54 52 41 49 4e 54 20 6d 65 74 61 64 CONSTRAINT metad
3cf0: 61 74 5f 63 6f 6e 73 74 72 61 69 6e 74 20 55 4e at_constraint UN
3d00: 49 51 55 45 20 28 76 61 72 29 29 3b 22 29 0a 20 IQUE (var));").
3d10: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 64 62 (if (not (db
3d20: 3a 67 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :get-var db "MEG
3d30: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 29 29 ATEST_VERSION"))
3d40: 0a 09 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 .. (db:set-var d
3d50: 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 b "MEGATEST_VERS
3d60: 49 4f 4e 22 20 31 2e 31 37 29 29 29 0a 20 20 20 ION" 1.17))).
3d70: 28 6c 65 74 20 28 28 6d 76 65 72 20 28 64 62 3a (let ((mver (db:
3d80: 67 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 41 get-var db "MEGA
3d90: 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 29 29 0a TEST_VERSION")).
3da0: 09 20 28 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 . (test-meta-def
3db0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 "CREATE TABLE I
3dc0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 F NOT EXISTS tes
3dd0: 74 5f 6d 65 74 61 20 28 69 64 20 49 4e 54 45 47 t_meta (id INTEG
3de0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a ER PRIMARY KEY,.
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e10: 20 20 20 20 20 74 65 73 74 6e 61 6d 65 20 20 20 testname
3e20: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 TEXT DEFAULT ''
3e30: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e50: 20 20 20 20 20 20 20 61 75 74 68 6f 72 20 20 20 author
3e60: 20 20 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 TEXT DEFAULT
3e70: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e90: 20 20 20 20 20 20 20 20 20 6f 77 6e 65 72 20 20 owner
3ea0: 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c TEXT DEFAUL
3eb0: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ed0: 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 descr
3ee0: 69 70 74 69 6f 6e 20 54 45 58 54 20 44 45 46 41 iption TEXT DEFA
3ef0: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 76 rev
3f20: 69 65 77 65 64 20 20 20 20 54 49 4d 45 53 54 41 iewed TIMESTA
3f30: 4d 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 MP,.
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f50: 20 20 20 20 20 20 20 20 20 69 74 65 72 61 74 65 iterate
3f60: 64 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c d TEXT DEFAUL
3f70: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f90: 20 20 20 20 20 20 20 20 20 20 20 61 76 67 5f 72 avg_r
3fa0: 75 6e 74 69 6d 65 20 52 45 41 4c 2c 0a 20 20 20 untime REAL,.
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fd0: 20 20 61 76 67 5f 64 69 73 6b 20 20 20 20 52 45 avg_disk RE
3fe0: 41 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 AL,.
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4000: 20 20 20 20 20 20 20 20 20 74 61 67 73 20 20 20 tags
4010: 20 20 20 20 20 54 45 58 54 20 44 45 46 41 55 4c TEXT DEFAUL
4020: 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 T '',.
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4040: 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 CONSTRAINT
4050: 20 74 65 73 74 5f 6d 65 74 61 5f 63 6f 6e 73 74 test_meta_const
4060: 72 61 69 6e 74 20 55 4e 49 51 55 45 20 28 74 65 raint UNIQUE (te
4070: 73 74 6e 61 6d 65 29 29 3b 22 29 29 0a 20 20 20 stname));")).
4080: 20 20 28 70 72 69 6e 74 20 22 43 75 72 72 65 6e (print "Curren
4090: 74 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e t schema version
40a0: 3a 20 22 20 6d 76 65 72 20 22 20 63 75 72 72 65 : " mver " curre
40b0: 6e 74 20 6d 65 67 61 74 65 73 74 20 76 65 72 73 nt megatest vers
40c0: 69 6f 6e 3a 20 22 20 6d 65 67 61 74 65 73 74 2d ion: " megatest-
40d0: 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 28 63 version). (c
40e0: 6f 6e 64 0a 20 20 20 20 20 20 28 28 6e 6f 74 20 ond. ((not
40f0: 6d 76 65 72 29 0a 20 20 20 20 20 20 20 28 70 72 mver). (pr
4100: 69 6e 74 20 22 41 64 64 69 6e 67 20 6d 65 67 61 int "Adding mega
4110: 74 65 73 74 2d 76 65 72 73 69 6f 6e 20 74 6f 20 test-version to
4120: 6d 65 74 61 64 61 74 61 22 29 20 3b 3b 20 4e 65 metadata") ;; Ne
4130: 65 64 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 ed to recreate t
4140: 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 20 he table.
4150: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
4160: 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 db "DROP TABLE
4170: 49 46 20 45 58 49 53 54 53 20 6d 65 74 61 64 61 IF EXISTS metada
4180: 74 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c t;"). (sql
4190: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
41a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 "CREATE TABLE IF
41b0: 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 65 74 61 NOT EXISTS meta
41c0: 64 61 74 20 28 69 64 20 49 4e 54 45 47 45 52 2c dat (id INTEGER,
41d0: 20 76 61 72 20 54 45 58 54 2c 20 76 61 6c 20 54 var TEXT, val T
41e0: 45 58 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 EXT,.
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4200: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e CONSTRAIN
4210: 54 20 6d 65 74 61 64 61 74 5f 63 6f 6e 73 74 72 T metadat_constr
4220: 61 69 6e 74 20 55 4e 49 51 55 45 20 28 76 61 72 aint UNIQUE (var
4230: 29 29 3b 22 29 0a 20 20 20 20 20 20 20 28 64 62 ));"). (db
4240: 3a 73 65 74 2d 76 61 72 20 64 62 20 22 4d 45 47 :set-var db "MEG
4250: 41 54 45 53 54 5f 56 45 52 53 49 4f 4e 22 20 31 ATEST_VERSION" 1
4260: 2e 31 37 29 0a 20 20 20 20 20 20 20 28 70 61 74 .17). (pat
4270: 63 68 2d 64 62 29 29 0a 20 20 20 20 20 20 28 28 ch-db)). ((
4280: 3c 20 6d 76 65 72 20 31 2e 32 31 29 0a 20 20 20 < mver 1.21).
4290: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
42a0: 63 75 74 65 20 64 62 20 22 44 52 4f 50 20 54 41 cute db "DROP TA
42b0: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 6d 65 BLE IF EXISTS me
42c0: 74 61 64 61 74 3b 22 29 0a 20 20 20 20 20 20 20 tadat;").
42d0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
42e0: 20 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c db "CREATE TABL
42f0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 E IF NOT EXISTS
4300: 6d 65 74 61 64 61 74 20 28 69 64 20 49 4e 54 45 metadat (id INTE
4310: 47 45 52 2c 20 76 61 72 20 54 45 58 54 2c 20 76 GER, var TEXT, v
4320: 61 6c 20 54 45 58 54 2c 0a 20 20 20 20 20 20 20 al TEXT,.
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4340: 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 CONST
4350: 52 41 49 4e 54 20 6d 65 74 61 64 61 74 5f 63 6f RAINT metadat_co
4360: 6e 73 74 72 61 69 6e 74 20 55 4e 49 51 55 45 20 nstraint UNIQUE
4370: 28 76 61 72 29 29 3b 22 29 0a 20 20 20 20 20 20 (var));").
4380: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
4390: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
43a0: 4e 22 20 31 2e 32 31 29 20 3b 3b 20 73 65 74 20 N" 1.21) ;; set
43b0: 62 65 66 6f 72 65 2c 20 6a 75 73 74 20 69 6e 20 before, just in
43c0: 63 61 73 65 20 74 68 65 20 63 68 61 6e 67 65 73 case the changes
43d0: 20 61 72 65 20 61 6c 72 65 61 64 79 20 61 70 70 are already app
43e0: 6c 69 65 64 0a 20 20 20 20 20 20 20 28 73 71 6c lied. (sql
43f0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
4400: 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 29 0a 09 test-meta-def)..
4410: 09 09 09 09 3b 28 66 6f 72 2d 65 61 63 68 20 0a ....;(for-each .
4420: 09 09 09 09 09 3b 20 28 6c 61 6d 62 64 61 20 28 .....; (lambda (
4430: 73 74 6d 74 29 0a 09 09 09 09 09 3b 20 20 20 28 stmt)......; (
4440: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
4450: 64 62 20 73 74 6d 74 29 29 0a 09 09 09 09 09 3b db stmt))......;
4460: 20 28 6c 69 73 74 20 0a 09 09 09 09 09 3b 20 20 (list ......;
4470: 22 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 73 "ALTER TABLE tes
4480: 74 73 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66 69 ts ADD COLUMN fi
4490: 72 73 74 5f 65 72 72 20 54 45 58 54 3b 22 0a 09 rst_err TEXT;"..
44a0: 09 09 09 09 3b 20 20 22 41 4c 54 45 52 20 54 41 ....; "ALTER TA
44b0: 42 4c 45 20 74 65 73 74 73 20 41 44 44 20 43 4f BLE tests ADD CO
44c0: 4c 55 4d 4e 20 66 69 72 73 74 5f 77 61 72 6e 20 LUMN first_warn
44d0: 54 45 58 54 3b 22 0a 09 09 09 09 09 3b 20 20 29 TEXT;"......; )
44e0: 29 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d ). (patch-
44f0: 64 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d db)). ((< m
4500: 76 65 72 20 31 2e 32 34 29 0a 20 20 20 20 20 20 ver 1.24).
4510: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
4520: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
4530: 4e 22 20 31 2e 32 34 29 0a 20 20 20 20 20 20 20 N" 1.24).
4540: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
4550: 20 64 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 db "DROP TABLE
4560: 49 46 20 45 58 49 53 54 53 20 74 65 73 74 5f 64 IF EXISTS test_d
4570: 61 74 61 3b 22 29 0a 20 20 20 20 20 20 20 28 73 ata;"). (s
4580: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
4590: 62 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46 b "DROP TABLE IF
45a0: 20 45 58 49 53 54 53 20 74 65 73 74 5f 6d 65 74 EXISTS test_met
45b0: 61 3b 22 29 0a 20 20 20 20 20 20 20 28 73 71 6c a;"). (sql
45c0: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
45d0: 74 65 73 74 2d 6d 65 74 61 2d 64 65 66 29 0a 20 test-meta-def).
45e0: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
45f0: 78 65 63 75 74 65 20 64 62 20 22 43 52 45 41 54 xecute db "CREAT
4600: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 E TABLE IF NOT E
4610: 58 49 53 54 53 20 74 65 73 74 5f 64 61 74 61 20 XISTS test_data
4620: 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d (id INTEGER PRIM
4630: 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 ARY KEY,.
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4650: 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 69 64 test_id
4660: 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 20 INTEGER,.
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4680: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f catego
4690: 72 79 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 ry TEXT DEFAULT
46a0: 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 '',.
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
46c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 54 45 58 variable TEX
46d0: 54 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 T,..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 valu
46f0: 65 20 52 45 41 4c 2c 0a 09 20 20 20 20 20 20 20 e REAL,..
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4710: 20 65 78 70 65 63 74 65 64 20 52 45 41 4c 2c 0a expected REAL,.
4720: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4730: 20 20 20 20 20 20 20 20 20 74 6f 6c 20 52 45 41 tol REA
4740: 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 L,.
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4760: 20 20 20 75 6e 69 74 73 20 54 45 58 54 2c 0a 20 units TEXT,.
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
4790: 6f 6d 6d 65 6e 74 20 54 45 58 54 20 44 45 46 41 omment TEXT DEFA
47a0: 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 20 20 ULT '',.
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47c0: 20 20 20 20 20 20 20 20 73 74 61 74 75 73 20 54 status T
47d0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 6e 2f 61 EXT DEFAULT 'n/a
47e0: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ',.
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4800: 20 43 4f 4e 53 54 52 41 49 4e 54 20 74 65 73 74 CONSTRAINT test
4810: 5f 64 61 74 61 20 55 4e 49 51 55 45 20 28 74 65 _data UNIQUE (te
4820: 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 st_id,category,v
4830: 61 72 69 61 62 6c 65 29 29 3b 22 29 0a 20 20 20 ariable));").
4840: 20 20 20 20 28 70 72 69 6e 74 20 22 57 41 52 4e (print "WARN
4850: 49 4e 47 3a 20 54 61 62 6c 65 20 74 65 73 74 5f ING: Table test_
4860: 64 61 74 61 20 61 6e 64 20 74 65 73 74 5f 6d 65 data and test_me
4870: 74 61 20 77 65 72 65 20 72 65 63 72 65 61 74 65 ta were recreate
4880: 64 2e 20 50 6c 65 61 73 65 20 64 6f 20 6d 65 67 d. Please do meg
4890: 61 74 65 73 74 20 2d 75 70 64 61 74 65 2d 6d 65 atest -update-me
48a0: 74 61 22 29 0a 20 20 20 20 20 20 20 28 70 61 74 ta"). (pat
48b0: 63 68 2d 64 62 29 29 0a 20 20 20 20 20 20 28 28 ch-db)). ((
48c0: 3c 20 6d 76 65 72 20 31 2e 32 37 29 0a 20 20 20 < mver 1.27).
48d0: 20 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 (db:set-var
48e0: 64 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 db "MEGATEST_VER
48f0: 53 49 4f 4e 22 20 31 2e 32 37 29 0a 20 20 20 20 SION" 1.27).
4900: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
4910: 75 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 ute db "ALTER TA
4920: 42 4c 45 20 74 65 73 74 5f 64 61 74 61 20 41 44 BLE test_data AD
4930: 44 20 43 4f 4c 55 4d 4e 20 74 79 70 65 20 54 45 D COLUMN type TE
4940: 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 XT DEFAULT '';")
4950: 0a 20 20 20 20 20 20 20 28 70 61 74 63 68 2d 64 . (patch-d
4960: 62 29 29 0a 20 20 20 20 20 20 28 28 3c 20 6d 76 b)). ((< mv
4970: 65 72 20 31 2e 32 39 29 0a 20 20 20 20 20 20 20 er 1.29).
4980: 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 (db:set-var db "
4990: 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f 4e MEGATEST_VERSION
49a0: 22 20 31 2e 32 39 29 0a 20 20 20 20 20 20 20 28 " 1.29). (
49b0: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
49c0: 64 62 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 db "ALTER TABLE
49d0: 74 65 73 74 5f 73 74 65 70 73 20 41 44 44 20 43 test_steps ADD C
49e0: 4f 4c 55 4d 4e 20 6c 6f 67 66 69 6c 65 20 54 45 OLUMN logfile TE
49f0: 58 54 20 44 45 46 41 55 4c 54 20 27 27 3b 22 29 XT DEFAULT '';")
4a00: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
4a10: 3a 65 78 65 63 75 74 65 20 64 62 20 22 41 4c 54 :execute db "ALT
4a20: 45 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 ER TABLE tests A
4a30: 44 44 20 43 4f 4c 55 4d 4e 20 73 68 6f 72 74 64 DD COLUMN shortd
4a40: 69 72 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 ir TEXT DEFAULT
4a50: 27 27 3b 22 29 29 0a 20 20 20 20 20 20 28 28 3c '';")). ((<
4a60: 20 6d 76 65 72 20 31 2e 33 36 29 0a 20 20 20 20 mver 1.36).
4a70: 20 20 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 (db:set-var d
4a80: 62 20 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 b "MEGATEST_VERS
4a90: 49 4f 4e 22 20 31 2e 33 36 29 0a 20 20 20 20 20 ION" 1.36).
4aa0: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
4ab0: 74 65 20 64 62 20 22 41 4c 54 45 52 20 54 41 42 te db "ALTER TAB
4ac0: 4c 45 20 74 65 73 74 5f 6d 65 74 61 20 41 44 44 LE test_meta ADD
4ad0: 20 43 4f 4c 55 4d 4e 20 6a 6f 62 67 72 6f 75 70 COLUMN jobgroup
4ae0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 64 TEXT DEFAULT 'd
4af0: 65 66 61 75 6c 74 27 3b 22 29 29 0a 20 20 20 20 efault';")).
4b00: 20 20 28 28 3c 20 6d 76 65 72 20 31 2e 33 37 29 ((< mver 1.37)
4b10: 0a 20 20 20 20 20 20 20 28 64 62 3a 73 65 74 2d . (db:set-
4b20: 76 61 72 20 64 62 20 22 4d 45 47 41 54 45 53 54 var db "MEGATEST
4b30: 5f 56 45 52 53 49 4f 4e 22 20 31 2e 33 37 29 0a _VERSION" 1.37).
4b40: 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a (sqlite3:
4b50: 65 78 65 63 75 74 65 20 64 62 20 22 41 4c 54 45 execute db "ALTE
4b60: 52 20 54 41 42 4c 45 20 74 65 73 74 73 20 41 44 R TABLE tests AD
4b70: 44 20 43 4f 4c 55 4d 4e 20 61 72 63 68 69 76 65 D COLUMN archive
4b80: 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c d INTEGER DEFAUL
4b90: 54 20 30 3b 22 29 29 20 0a 20 20 20 20 20 20 28 T 0;")) . (
4ba0: 28 3c 20 6d 76 65 72 20 6d 65 67 61 74 65 73 74 (< mver megatest
4bb0: 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 -version).
4bc0: 20 28 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 (db:set-var db
4bd0: 22 4d 45 47 41 54 45 53 54 5f 56 45 52 53 49 4f "MEGATEST_VERSIO
4be0: 4e 22 20 6d 65 67 61 74 65 73 74 2d 76 65 72 73 N" megatest-vers
4bf0: 69 6f 6e 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d ion))))))..;;===
4c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c40: 3d 3d 3d 0a 3b 3b 20 6d 65 74 61 20 67 65 74 20 ===.;; meta get
4c50: 61 6e 64 20 73 65 74 20 76 61 72 73 0a 3b 3b 3d and set vars.;;=
4c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4ca0: 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 74 75 72 6e =====..;; return
4cb0: 73 20 6e 75 6d 62 65 72 20 69 66 20 73 74 72 69 s number if stri
4cc0: 6e 67 2d 3e 6e 75 6d 62 65 72 20 69 73 20 73 75 ng->number is su
4cd0: 63 63 65 73 73 66 75 6c 2c 20 73 74 72 69 6e 67 ccessful, string
4ce0: 20 6f 74 68 65 72 77 69 73 65 0a 3b 3b 20 61 6c otherwise.;; al
4cf0: 73 6f 20 75 70 64 61 74 65 73 20 2a 67 6c 6f 62 so updates *glob
4d00: 61 6c 2d 64 65 6c 74 61 2a 0a 28 64 65 66 69 6e al-delta*.(defin
4d10: 65 20 28 64 62 3a 67 65 74 2d 76 61 72 20 64 62 e (db:get-var db
4d20: 20 76 61 72 29 0a 20 20 28 64 65 62 75 67 3a 70 var). (debug:p
4d30: 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 rint-info 11 "db
4d40: 3a 67 65 74 2d 76 61 72 20 53 54 41 52 54 20 22 :get-var START "
4d50: 20 76 61 72 29 0a 20 20 28 6c 65 74 2a 20 28 28 var). (let* ((
4d60: 73 74 61 72 74 2d 6d 73 20 28 63 75 72 72 65 6e start-ms (curren
4d70: 74 2d 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 29 29 t-milliseconds))
4d80: 0a 20 20 20 20 20 20 20 20 20 28 74 68 72 6f 74 . (throt
4d90: 74 6c 65 20 28 6c 65 74 20 28 28 74 20 20 28 63 tle (let ((t (c
4da0: 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f onfig-lookup *co
4db0: 6e 66 69 67 64 61 74 2a 20 22 73 65 74 75 70 22 nfigdat* "setup"
4dc0: 20 22 74 68 72 6f 74 74 6c 65 22 29 29 29 0a 09 "throttle")))..
4dd0: 09 20 20 20 20 20 28 69 66 20 74 20 28 73 74 72 . (if t (str
4de0: 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 74 29 20 74 ing->number t) t
4df0: 29 29 29 0a 09 20 28 72 65 73 20 20 20 20 20 20 ))).. (res
4e00: 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65 #f)). (sqlite
4e10: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 3:for-each-row.
4e20: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 76 61 6c (lambda (val
4e30: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
4e40: 65 73 20 76 61 6c 29 29 0a 20 20 20 20 20 64 62 es val)). db
4e50: 20 22 53 45 4c 45 43 54 20 76 61 6c 20 46 52 4f "SELECT val FRO
4e60: 4d 20 6d 65 74 61 64 61 74 20 57 48 45 52 45 20 M metadat WHERE
4e70: 76 61 72 3d 3f 3b 22 20 76 61 72 29 0a 20 20 20 var=?;" var).
4e80: 20 3b 3b 20 63 6f 6e 76 65 72 74 20 74 6f 20 6e ;; convert to n
4e90: 75 6d 62 65 72 20 69 66 20 63 61 6e 0a 20 20 20 umber if can.
4ea0: 20 28 69 66 20 28 73 74 72 69 6e 67 3f 20 72 65 (if (string? re
4eb0: 73 29 0a 09 28 6c 65 74 20 28 28 76 61 6c 6e 75 s)..(let ((valnu
4ec0: 6d 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 m (string->numbe
4ed0: 72 20 72 65 73 29 29 29 0a 09 20 20 28 69 66 20 r res))).. (if
4ee0: 76 61 6c 6e 75 6d 20 28 73 65 74 21 20 72 65 73 valnum (set! res
4ef0: 20 76 61 6c 6e 75 6d 29 29 29 29 0a 20 20 20 20 valnum)))).
4f00: 3b 3b 20 73 63 61 6c 65 20 62 79 20 31 30 2c 20 ;; scale by 10,
4f10: 61 76 65 72 61 67 65 20 77 69 74 68 20 63 75 72 average with cur
4f20: 72 65 6e 74 20 76 61 6c 75 65 2e 0a 20 20 20 20 rent value..
4f30: 28 73 65 74 21 20 2a 67 6c 6f 62 61 6c 2d 64 65 (set! *global-de
4f40: 6c 74 61 2a 20 28 2f 20 28 2b 20 2a 67 6c 6f 62 lta* (/ (+ *glob
4f50: 61 6c 2d 64 65 6c 74 61 2a 20 28 2a 20 28 2d 20 al-delta* (* (-
4f60: 28 63 75 72 72 65 6e 74 2d 6d 69 6c 6c 69 73 65 (current-millise
4f70: 63 6f 6e 64 73 29 20 73 74 61 72 74 2d 6d 73 29 conds) start-ms)
4f80: 0a 09 09 09 09 09 09 20 28 69 66 20 74 68 72 6f ....... (if thro
4f90: 74 74 6c 65 20 74 68 72 6f 74 74 6c 65 20 30 2e ttle throttle 0.
4fa0: 30 31 29 29 29 0a 09 09 09 20 20 20 20 32 29 29 01))).... 2))
4fb0: 0a 20 20 20 20 28 69 66 20 28 3e 20 28 61 62 73 . (if (> (abs
4fc0: 20 28 2d 20 2a 6c 61 73 74 2d 67 6c 6f 62 61 6c (- *last-global
4fd0: 2d 64 65 6c 74 61 2d 70 72 69 6e 74 65 64 2a 20 -delta-printed*
4fe0: 2a 67 6c 6f 62 61 6c 2d 64 65 6c 74 61 2a 29 29 *global-delta*))
4ff0: 20 30 2e 30 38 29 20 3b 3b 20 64 6f 6e 27 74 20 0.08) ;; don't
5000: 70 72 69 6e 74 20 61 6c 6c 20 74 68 65 20 74 69 print all the ti
5010: 6d 65 2c 20 6f 6e 6c 79 20 69 66 20 69 74 20 63 me, only if it c
5020: 68 61 6e 67 65 73 20 61 20 62 69 74 0a 09 28 62 hanges a bit..(b
5030: 65 67 69 6e 0a 09 20 20 28 64 65 62 75 67 3a 70 egin.. (debug:p
5040: 72 69 6e 74 2d 69 6e 66 6f 20 34 20 22 6c 61 75 rint-info 4 "lau
5050: 6e 63 68 20 74 68 72 6f 74 74 6c 65 20 66 61 63 nch throttle fac
5060: 74 6f 72 3d 22 20 2a 67 6c 6f 62 61 6c 2d 64 65 tor=" *global-de
5070: 6c 74 61 2a 29 0a 09 20 20 28 73 65 74 21 20 2a lta*).. (set! *
5080: 6c 61 73 74 2d 67 6c 6f 62 61 6c 2d 64 65 6c 74 last-global-delt
5090: 61 2d 70 72 69 6e 74 65 64 2a 20 2a 67 6c 6f 62 a-printed* *glob
50a0: 61 6c 2d 64 65 6c 74 61 2a 29 29 29 0a 20 20 20 al-delta*))).
50b0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e (debug:print-in
50c0: 66 6f 20 31 31 20 22 64 62 3a 67 65 74 2d 76 61 fo 11 "db:get-va
50d0: 72 20 45 4e 44 20 22 20 76 61 72 20 22 20 76 61 r END " var " va
50e0: 6c 3d 22 20 72 65 73 29 0a 20 20 20 20 72 65 73 l=" res). res
50f0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
5100: 73 65 74 2d 76 61 72 20 64 62 20 76 61 72 20 76 set-var db var v
5110: 61 6c 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 al). (debug:pri
5120: 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a 73 nt-info 11 "db:s
5130: 65 74 2d 76 61 72 20 53 54 41 52 54 20 22 20 76 et-var START " v
5140: 61 72 20 22 20 22 20 76 61 6c 29 0a 20 20 28 73 ar " " val). (s
5150: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
5160: 62 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 b "INSERT OR REP
5170: 4c 41 43 45 20 49 4e 54 4f 20 6d 65 74 61 64 61 LACE INTO metada
5180: 74 20 28 76 61 72 2c 76 61 6c 29 20 56 41 4c 55 t (var,val) VALU
5190: 45 53 20 28 3f 2c 3f 29 3b 22 20 76 61 72 20 76 ES (?,?);" var v
51a0: 61 6c 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 al). (debug:pri
51b0: 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a 73 nt-info 11 "db:s
51c0: 65 74 2d 76 61 72 20 45 4e 44 20 22 20 76 61 72 et-var END " var
51d0: 20 22 20 22 20 76 61 6c 29 29 0a 0a 28 64 65 66 " " val))..(def
51e0: 69 6e 65 20 28 64 62 3a 64 65 6c 2d 76 61 72 20 ine (db:del-var
51f0: 64 62 20 76 61 72 29 0a 20 20 28 64 65 62 75 67 db var). (debug
5200: 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 :print-info 11 "
5210: 64 62 3a 64 65 6c 2d 76 61 72 20 53 54 41 52 54 db:del-var START
5220: 20 22 20 76 61 72 29 0a 20 20 28 73 71 6c 69 74 " var). (sqlit
5230: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 e3:execute db "D
5240: 45 4c 45 54 45 20 46 52 4f 4d 20 6d 65 74 61 64 ELETE FROM metad
5250: 61 74 20 57 48 45 52 45 20 76 61 72 3d 3f 3b 22 at WHERE var=?;"
5260: 20 76 61 72 29 0a 20 20 28 64 65 62 75 67 3a 70 var). (debug:p
5270: 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 rint-info 11 "db
5280: 3a 64 65 6c 2d 76 61 72 20 45 4e 44 20 22 20 76 :del-var END " v
5290: 61 72 29 29 0a 0a 3b 3b 20 75 73 65 20 61 20 67 ar))..;; use a g
52a0: 6c 6f 62 61 6c 20 66 6f 72 20 73 6f 6d 65 20 70 lobal for some p
52b0: 72 69 6d 69 74 69 76 65 20 63 61 63 68 69 6e 67 rimitive caching
52c0: 2c 20 69 74 20 69 73 20 6a 75 73 74 20 73 69 6c , it is just sil
52d0: 6c 79 20 74 6f 20 72 65 2d 72 65 61 64 20 74 68 ly to re-read th
52e0: 65 20 64 62 20 0a 3b 3b 20 6f 76 65 72 20 61 6e e db .;; over an
52f0: 64 20 6f 76 65 72 20 61 67 61 69 6e 20 66 6f 72 d over again for
5300: 20 74 68 65 20 6b 65 79 73 20 73 69 6e 63 65 20 the keys since
5310: 74 68 65 79 20 6e 65 76 65 72 20 63 68 61 6e 67 they never chang
5320: 65 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 e..(define (db:g
5330: 65 74 2d 6b 65 79 73 20 64 62 29 0a 20 20 28 69 et-keys db). (i
5340: 66 20 2a 64 62 2d 6b 65 79 73 2a 20 2a 64 62 2d f *db-keys* *db-
5350: 6b 65 79 73 2a 20 0a 20 20 20 20 20 20 28 6c 65 keys* . (le
5360: 74 20 28 28 72 65 73 20 27 28 29 29 29 0a 09 28 t ((res '()))..(
5370: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f debug:print-info
5380: 20 31 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 73 11 "db:get-keys
5390: 20 53 54 41 52 54 20 28 63 61 63 68 65 20 6d 69 START (cache mi
53a0: 73 73 29 22 29 0a 09 28 73 71 6c 69 74 65 33 3a ss)")..(sqlite3:
53b0: 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 09 20 for-each-row ..
53c0: 28 6c 61 6d 62 64 61 20 28 6b 65 79 20 6b 65 79 (lambda (key key
53d0: 74 79 70 65 29 0a 09 20 20 20 28 73 65 74 21 20 type).. (set!
53e0: 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f res (cons (vecto
53f0: 72 20 6b 65 79 20 6b 65 79 74 79 70 65 29 20 72 r key keytype) r
5400: 65 73 29 29 29 0a 09 20 64 62 0a 09 20 22 53 45 es))).. db.. "SE
5410: 4c 45 43 54 20 66 69 65 6c 64 6e 61 6d 65 2c 66 LECT fieldname,f
5420: 69 65 6c 64 74 79 70 65 20 46 52 4f 4d 20 6b 65 ieldtype FROM ke
5430: 79 73 20 4f 52 44 45 52 20 42 59 20 69 64 20 44 ys ORDER BY id D
5440: 45 53 43 3b 22 29 0a 09 28 73 65 74 21 20 2a 64 ESC;")..(set! *d
5450: 62 2d 6b 65 79 73 2a 20 72 65 73 29 0a 09 28 64 b-keys* res)..(d
5460: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
5470: 31 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 73 20 11 "db:get-keys
5480: 45 4e 44 20 28 63 61 63 68 65 20 6d 69 73 73 29 END (cache miss)
5490: 22 29 0a 09 72 65 73 29 29 29 0a 0a 28 64 65 66 ")..res)))..(def
54a0: 69 6e 65 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 ine (db:get-valu
54b0: 65 2d 62 79 2d 68 65 61 64 65 72 20 72 6f 77 20 e-by-header row
54c0: 68 65 61 64 65 72 20 66 69 65 6c 64 29 0a 20 20 header field).
54d0: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 (debug:print-inf
54e0: 6f 20 34 20 22 64 62 3a 67 65 74 2d 76 61 6c 75 o 4 "db:get-valu
54f0: 65 2d 62 79 2d 68 65 61 64 65 72 20 72 6f 77 3a e-by-header row:
5500: 20 22 20 72 6f 77 20 22 20 68 65 61 64 65 72 3a " row " header:
5510: 20 22 20 68 65 61 64 65 72 20 22 20 66 69 65 6c " header " fiel
5520: 64 3a 20 22 20 66 69 65 6c 64 29 0a 20 20 28 69 d: " field). (i
5530: 66 20 28 6e 75 6c 6c 3f 20 68 65 61 64 65 72 29 f (null? header)
5540: 20 23 66 0a 20 20 20 20 20 20 28 6c 65 74 20 6c #f. (let l
5550: 6f 6f 70 20 28 28 68 65 64 20 28 63 61 72 20 68 oop ((hed (car h
5560: 65 61 64 65 72 29 29 0a 09 09 20 28 74 61 6c 20 eader))... (tal
5570: 28 63 64 72 20 68 65 61 64 65 72 29 29 0a 09 09 (cdr header))...
5580: 20 28 6e 20 20 20 30 29 29 0a 09 28 69 66 20 28 (n 0))..(if (
5590: 65 71 75 61 6c 3f 20 68 65 64 20 66 69 65 6c 64 equal? hed field
55a0: 29 0a 09 20 20 20 20 28 76 65 63 74 6f 72 2d 72 ).. (vector-r
55b0: 65 66 20 72 6f 77 20 6e 29 0a 09 20 20 20 20 28 ef row n).. (
55c0: 69 66 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 20 23 if (null? tal) #
55d0: 66 20 28 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c f (loop (car tal
55e0: 29 28 63 64 72 20 74 61 6c 29 28 2b 20 6e 20 31 )(cdr tal)(+ n 1
55f0: 29 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d )))))))..;;=====
5600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5630: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5640: 3d 0a 3b 3b 20 20 52 20 55 20 4e 20 53 0a 3b 3b =.;; R U N S.;;
5650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5690: 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 ======..(define
56a0: 28 72 75 6e 73 3a 67 65 74 2d 73 74 64 2d 72 75 (runs:get-std-ru
56b0: 6e 2d 66 69 65 6c 64 73 20 6b 65 79 73 20 72 65 n-fields keys re
56c0: 6d 66 69 65 6c 64 73 29 0a 20 20 28 6c 65 74 2a mfields). (let*
56d0: 20 28 28 68 65 61 64 65 72 20 20 20 20 28 61 70 ((header (ap
56e0: 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a 67 65 pend (map key:ge
56f0: 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 73 t-fieldname keys
5700: 29 0a 09 09 09 20 20 20 20 72 65 6d 66 69 65 6c ).... remfiel
5710: 64 73 29 29 0a 09 20 28 6b 65 79 73 74 72 20 20 ds)).. (keystr
5720: 20 20 28 63 6f 6e 63 20 28 6b 65 79 73 2d 3e 6b (conc (keys->k
5730: 65 79 73 74 72 20 6b 65 79 73 29 20 22 2c 22 0a eystr keys) ",".
5740: 09 09 09 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 ... (string-int
5750: 65 72 73 70 65 72 73 65 20 72 65 6d 66 69 65 6c ersperse remfiel
5760: 64 73 20 22 2c 22 29 29 29 29 0a 20 20 20 20 28 ds ",")))). (
5770: 6c 69 73 74 20 6b 65 79 73 74 72 20 68 65 61 64 list keystr head
5780: 65 72 29 29 29 0a 0a 3b 3b 20 6d 61 6b 65 20 61 er)))..;; make a
5790: 20 71 75 65 72 79 20 28 66 69 65 6c 64 6e 61 6d query (fieldnam
57a0: 65 20 6c 69 6b 65 20 27 70 61 74 74 31 27 20 4f e like 'patt1' O
57b0: 52 20 66 69 65 6c 64 6e 61 6d 65 20 0a 28 64 65 R fieldname .(de
57c0: 66 69 6e 65 20 28 64 62 3a 70 61 74 74 2d 3e 6c fine (db:patt->l
57d0: 69 6b 65 20 66 69 65 6c 64 6e 61 6d 65 20 70 61 ike fieldname pa
57e0: 74 74 73 74 72 20 23 21 6b 65 79 20 28 63 6f 6d ttstr #!key (com
57f0: 70 61 72 61 74 6f 72 20 22 20 4f 52 20 22 29 29 parator " OR "))
5800: 0a 20 20 28 6c 65 74 20 28 28 70 61 74 74 73 20 . (let ((patts
5810: 28 69 66 20 28 73 74 72 69 6e 67 3f 20 70 61 74 (if (string? pat
5820: 74 73 74 72 29 0a 09 09 20 20 20 28 73 74 72 69 tstr)... (stri
5830: 6e 67 2d 73 70 6c 69 74 20 70 61 74 74 73 74 72 ng-split pattstr
5840: 20 22 2c 22 29 0a 09 09 20 20 20 27 28 22 25 22 ",")... '("%"
5850: 29 29 29 29 0a 20 20 20 20 28 73 74 72 69 6e 67 )))). (string
5860: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 -intersperse (ma
5870: 70 20 28 6c 61 6d 62 64 61 20 28 70 61 74 74 29 p (lambda (patt)
5880: 0a 09 09 09 20 20 20 20 20 20 20 28 6c 65 74 20 .... (let
5890: 28 28 77 69 6c 64 74 79 70 65 20 28 69 66 20 28 ((wildtype (if (
58a0: 73 75 62 73 74 72 69 6e 67 2d 69 6e 64 65 78 20 substring-index
58b0: 22 25 22 20 70 61 74 74 29 20 22 4c 49 4b 45 22 "%" patt) "LIKE"
58c0: 20 22 47 4c 4f 42 22 29 29 29 0a 09 09 09 09 20 "GLOB"))).....
58d0: 28 63 6f 6e 63 20 66 69 65 6c 64 6e 61 6d 65 20 (conc fieldname
58e0: 22 20 22 20 77 69 6c 64 74 79 70 65 20 22 20 27 " " wildtype " '
58f0: 22 20 70 61 74 74 20 22 27 22 29 29 29 0a 09 09 " patt "'")))...
5900: 09 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f . (if (null?
5910: 20 70 61 74 74 73 29 0a 09 09 09 09 20 27 28 22 patts)..... '("
5920: 22 29 0a 09 09 09 09 20 70 61 74 74 73 29 29 0a ")..... patts)).
5930: 09 09 09 63 6f 6d 70 61 72 61 74 6f 72 29 29 29 ...comparator)))
5940: 0a 0a 3b 3b 20 72 65 70 6c 61 63 65 20 68 65 61 ..;; replace hea
5950: 64 65 72 20 61 6e 64 20 6b 65 79 73 74 72 20 77 der and keystr w
5960: 69 74 68 20 61 20 63 61 6c 6c 20 74 6f 20 72 75 ith a call to ru
5970: 6e 73 3a 67 65 74 2d 73 74 64 2d 72 75 6e 2d 66 ns:get-std-run-f
5980: 69 65 6c 64 73 0a 3b 3b 0a 3b 3b 20 6b 65 79 70 ields.;;.;; keyp
5990: 61 74 74 73 3a 20 28 20 28 4b 45 59 31 20 22 61 atts: ( (KEY1 "a
59a0: 62 63 25 64 65 66 22 29 28 4b 45 59 32 20 22 25 bc%def")(KEY2 "%
59b0: 22 29 20 29 0a 3b 3b 20 72 75 6e 70 61 74 74 73 ") ).;; runpatts
59c0: 3a 20 70 61 74 74 31 2c 70 61 74 74 32 20 2e 2e : patt1,patt2 ..
59d0: 2e 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 ..;;.(define (db
59e0: 3a 67 65 74 2d 72 75 6e 73 20 64 62 20 72 75 6e :get-runs db run
59f0: 70 61 74 74 20 63 6f 75 6e 74 20 6f 66 66 73 65 patt count offse
5a00: 74 20 6b 65 79 70 61 74 74 73 29 0a 20 20 28 6c t keypatts). (l
5a10: 65 74 2a 20 28 28 72 65 73 20 20 20 20 20 20 20 et* ((res
5a20: 27 28 29 29 0a 09 20 28 6b 65 79 73 20 20 20 20 '()).. (keys
5a30: 20 20 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 (db:get-keys
5a40: 64 62 29 29 0a 09 20 28 72 75 6e 70 61 74 74 73 db)).. (runpatts
5a50: 74 72 20 28 64 62 3a 70 61 74 74 2d 3e 6c 69 6b tr (db:patt->lik
5a60: 65 20 22 72 75 6e 6e 61 6d 65 22 20 72 75 6e 70 e "runname" runp
5a70: 61 74 74 29 29 0a 09 20 28 72 65 6d 66 69 65 6c att)).. (remfiel
5a80: 64 73 20 20 28 6c 69 73 74 20 22 69 64 22 20 22 ds (list "id" "
5a90: 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 runname" "state"
5aa0: 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 "status" "owner
5ab0: 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 29 " "event_time"))
5ac0: 0a 09 20 28 68 65 61 64 65 72 20 20 20 20 20 28 .. (header (
5ad0: 61 70 70 65 6e 64 20 28 6d 61 70 20 6b 65 79 3a append (map key:
5ae0: 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 get-fieldname ke
5af0: 79 73 29 0a 09 09 20 20 20 20 20 20 20 20 20 20 ys)...
5b00: 20 20 20 72 65 6d 66 69 65 6c 64 73 29 29 0a 09 remfields))..
5b10: 20 28 6b 65 79 73 74 72 20 20 20 20 20 28 63 6f (keystr (co
5b20: 6e 63 20 28 6b 65 79 73 2d 3e 6b 65 79 73 74 72 nc (keys->keystr
5b30: 20 6b 65 79 73 29 20 22 2c 22 0a 09 09 20 20 20 keys) ","...
5b40: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d (string-
5b50: 69 6e 74 65 72 73 70 65 72 73 65 20 72 65 6d 66 intersperse remf
5b60: 69 65 6c 64 73 20 22 2c 22 29 29 29 0a 09 20 28 ields ","))).. (
5b70: 71 72 79 73 74 72 20 20 20 20 20 28 63 6f 6e 63 qrystr (conc
5b80: 20 22 53 45 4c 45 43 54 20 22 20 6b 65 79 73 74 "SELECT " keyst
5b90: 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 r " FROM runs WH
5ba0: 45 52 45 20 28 22 20 72 75 6e 70 61 74 74 73 74 ERE (" runpattst
5bb0: 72 20 22 29 20 22 20 3b 3b 20 72 75 6e 6e 61 6d r ") " ;; runnam
5bc0: 65 20 4c 49 4b 45 20 3f 20 22 0a 09 09 20 20 20 e LIKE ? "...
5bd0: 20 20 20 20 20 20 20 20 3b 3b 20 47 65 6e 65 72 ;; Gener
5be0: 61 74 65 3a 20 22 20 41 4e 44 20 78 20 4c 49 4b ate: " AND x LIK
5bf0: 45 20 27 6b 65 79 70 61 74 74 27 20 2e 2e 2e 22 E 'keypatt' ..."
5c00: 0a 09 09 20 20 20 20 20 20 20 20 20 20 20 28 69 ... (i
5c10: 66 20 28 6e 75 6c 6c 3f 20 6b 65 79 70 61 74 74 f (null? keypatt
5c20: 73 29 20 22 22 0a 09 09 20 20 20 20 20 20 20 20 s) ""...
5c30: 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20 41 (conc " A
5c40: 4e 44 20 22 0a 09 09 09 09 20 20 20 20 20 28 73 ND "..... (s
5c50: 74 72 69 6e 67 2d 6a 6f 69 6e 20 0a 09 09 09 09 tring-join .....
5c60: 20 20 20 20 20 20 28 6d 61 70 20 28 6c 61 6d 62 (map (lamb
5c70: 64 61 20 28 6b 65 79 70 61 74 74 29 0a 09 09 09 da (keypatt)....
5c80: 09 09 20 20 20 20 20 28 6c 65 74 20 28 28 6b 65 .. (let ((ke
5c90: 79 20 20 28 63 61 72 20 6b 65 79 70 61 74 74 29 y (car keypatt)
5ca0: 29 0a 09 09 09 09 09 09 20 20 20 28 70 61 74 74 )....... (patt
5cb0: 20 28 63 61 64 72 20 6b 65 79 70 61 74 74 29 29 (cadr keypatt))
5cc0: 29 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 64 )...... (d
5cd0: 62 3a 70 61 74 74 2d 3e 6c 69 6b 65 20 6b 65 79 b:patt->like key
5ce0: 20 70 61 74 74 29 29 29 0a 09 09 09 09 09 20 20 patt)))......
5cf0: 20 6b 65 79 70 61 74 74 73 29 0a 09 09 09 09 20 keypatts).....
5d00: 20 20 20 20 20 22 20 41 4e 44 20 22 29 29 29 0a " AND "))).
5d10: 09 09 20 20 20 20 20 20 20 20 20 20 20 22 20 4f .. " O
5d20: 52 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69 RDER BY event_ti
5d30: 6d 65 20 44 45 53 43 20 22 0a 09 09 20 20 20 20 me DESC "...
5d40: 20 20 20 20 20 20 20 28 69 66 20 28 6e 75 6d 62 (if (numb
5d50: 65 72 3f 20 63 6f 75 6e 74 29 0a 09 09 20 20 20 er? count)...
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e (con
5d70: 63 20 22 20 4c 49 4d 49 54 20 22 20 63 6f 75 6e c " LIMIT " coun
5d80: 74 29 0a 09 09 20 20 20 20 20 20 20 20 20 20 20 t)...
5d90: 20 20 20 20 22 22 29 0a 09 09 20 20 20 20 20 20 "")...
5da0: 20 20 20 20 20 28 69 66 20 28 6e 75 6d 62 65 72 (if (number
5db0: 3f 20 6f 66 66 73 65 74 29 0a 09 09 20 20 20 20 ? offset)...
5dc0: 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 (conc
5dd0: 20 22 20 4f 46 46 53 45 54 20 22 20 6f 66 66 73 " OFFSET " offs
5de0: 65 74 29 0a 09 09 20 20 20 20 20 20 20 20 20 20 et)...
5df0: 20 20 20 20 20 22 22 29 29 29 29 0a 20 20 20 20 "")))).
5e00: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 (debug:print-inf
5e10: 6f 20 31 31 20 22 64 62 3a 67 65 74 2d 72 75 6e o 11 "db:get-run
5e20: 73 20 53 54 41 52 54 20 71 72 79 73 74 72 3a 20 s START qrystr:
5e30: 22 20 71 72 79 73 74 72 20 22 20 6b 65 79 70 61 " qrystr " keypa
5e40: 74 74 73 3a 20 22 20 6b 65 79 70 61 74 74 73 20 tts: " keypatts
5e50: 22 20 6f 66 66 73 65 74 3a 20 22 20 6f 66 66 73 " offset: " offs
5e60: 65 74 20 22 20 6c 69 6d 69 74 3a 20 22 20 63 6f et " limit: " co
5e70: 75 6e 74 29 0a 20 20 20 20 28 73 71 6c 69 74 65 unt). (sqlite
5e80: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 20 3:for-each-row.
5e90: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 61 20 2e (lambda (a .
5ea0: 20 78 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 x). (set!
5eb0: 20 72 65 73 20 28 63 6f 6e 73 20 28 61 70 70 6c res (cons (appl
5ec0: 79 20 76 65 63 74 6f 72 20 61 20 78 29 20 72 65 y vector a x) re
5ed0: 73 29 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 s))). db.
5ee0: 20 20 71 72 79 73 74 72 0a 20 20 20 20 20 29 0a qrystr. ).
5ef0: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
5f00: 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a 67 65 74 -info 11 "db:get
5f10: 2d 72 75 6e 73 20 45 4e 44 20 71 72 79 73 74 72 -runs END qrystr
5f20: 3a 20 22 20 71 72 79 73 74 72 20 22 20 6b 65 79 : " qrystr " key
5f30: 70 61 74 74 73 3a 20 22 20 6b 65 79 70 61 74 74 patts: " keypatt
5f40: 73 20 22 20 6f 66 66 73 65 74 3a 20 22 20 6f 66 s " offset: " of
5f50: 66 73 65 74 20 22 20 6c 69 6d 69 74 3a 20 22 20 fset " limit: "
5f60: 63 6f 75 6e 74 29 0a 20 20 20 20 28 76 65 63 74 count). (vect
5f70: 6f 72 20 68 65 61 64 65 72 20 72 65 73 29 29 29 or header res)))
5f80: 0a 0a 3b 3b 20 6a 75 73 74 20 67 65 74 20 63 6f ..;; just get co
5f90: 75 6e 74 20 6f 66 20 72 75 6e 73 0a 28 64 65 66 unt of runs.(def
5fa0: 69 6e 65 20 28 64 62 3a 67 65 74 2d 6e 75 6d 2d ine (db:get-num-
5fb0: 72 75 6e 73 20 64 62 20 72 75 6e 70 61 74 74 29 runs db runpatt)
5fc0: 0a 20 20 28 6c 65 74 20 28 28 6e 75 6d 72 75 6e . (let ((numrun
5fd0: 73 20 30 29 29 0a 20 20 20 20 28 64 65 62 75 67 s 0)). (debug
5fe0: 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 :print-info 11 "
5ff0: 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 20 db:get-num-runs
6000: 53 54 41 52 54 20 22 20 72 75 6e 70 61 74 74 29 START " runpatt)
6010: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f . (sqlite3:fo
6020: 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 r-each-row .
6030: 20 28 6c 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 (lambda (count)
6040: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 6e 75 . (set! nu
6050: 6d 72 75 6e 73 20 63 6f 75 6e 74 29 29 0a 20 20 mruns count)).
6060: 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 4c 45 db. "SELE
6070: 43 54 20 43 4f 55 4e 54 28 69 64 29 20 46 52 4f CT COUNT(id) FRO
6080: 4d 20 72 75 6e 73 20 57 48 45 52 45 20 72 75 6e M runs WHERE run
6090: 6e 61 6d 65 20 4c 49 4b 45 20 3f 3b 22 20 72 75 name LIKE ?;" ru
60a0: 6e 70 61 74 74 29 0a 20 20 20 20 28 64 65 62 75 npatt). (debu
60b0: 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 g:print-info 11
60c0: 22 64 62 3a 67 65 74 2d 6e 75 6d 2d 72 75 6e 73 "db:get-num-runs
60d0: 20 45 4e 44 20 22 20 72 75 6e 70 61 74 74 29 0a END " runpatt).
60e0: 20 20 20 20 6e 75 6d 72 75 6e 73 29 29 0a 0a 3b numruns))..;
60f0: 3b 20 75 73 65 20 28 67 65 74 2d 76 61 6c 75 65 ; use (get-value
6100: 2d 62 79 2d 68 65 61 64 65 72 20 28 64 62 3a 67 -by-header (db:g
6110: 65 74 2d 68 65 61 64 65 72 20 72 75 6e 69 6e 66 et-header runinf
6120: 6f 29 28 64 62 3a 67 65 74 2d 72 6f 77 20 72 75 o)(db:get-row ru
6130: 6e 69 6e 66 6f 29 29 0a 28 64 65 66 69 6e 65 20 ninfo)).(define
6140: 28 64 62 3a 67 65 74 2d 72 75 6e 2d 69 6e 66 6f (db:get-run-info
6150: 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 69 db run-id). (i
6160: 66 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 f (hash-table-re
6170: 66 2f 64 65 66 61 75 6c 74 20 2a 72 75 6e 2d 69 f/default *run-i
6180: 6e 66 6f 2d 63 61 63 68 65 2a 20 72 75 6e 2d 69 nfo-cache* run-i
6190: 64 20 23 66 29 0a 20 20 20 20 20 20 28 68 61 73 d #f). (has
61a0: 68 2d 74 61 62 6c 65 2d 72 65 66 20 2a 72 75 6e h-table-ref *run
61b0: 2d 69 6e 66 6f 2d 63 61 63 68 65 2a 20 72 75 6e -info-cache* run
61c0: 2d 69 64 29 0a 20 20 20 20 20 20 28 6c 65 74 2a -id). (let*
61d0: 20 28 28 72 65 73 20 20 20 20 20 20 23 66 29 0a ((res #f).
61e0: 09 20 20 20 20 20 28 6b 65 79 73 20 20 20 20 20 . (keys
61f0: 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62 (db:get-keys db
6200: 29 29 0a 09 20 20 20 20 20 28 72 65 6d 66 69 65 )).. (remfie
6210: 6c 64 73 20 28 6c 69 73 74 20 22 69 64 22 20 22 lds (list "id" "
6220: 72 75 6e 6e 61 6d 65 22 20 22 73 74 61 74 65 22 runname" "state"
6230: 20 22 73 74 61 74 75 73 22 20 22 6f 77 6e 65 72 "status" "owner
6240: 22 20 22 65 76 65 6e 74 5f 74 69 6d 65 22 29 29 " "event_time"))
6250: 0a 09 20 20 20 20 20 28 68 65 61 64 65 72 20 20 .. (header
6260: 20 20 28 61 70 70 65 6e 64 20 28 6d 61 70 20 6b (append (map k
6270: 65 79 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 ey:get-fieldname
6280: 20 6b 65 79 73 29 0a 09 09 09 09 72 65 6d 66 69 keys).....remfi
6290: 65 6c 64 73 29 29 0a 09 20 20 20 20 20 28 6b 65 elds)).. (ke
62a0: 79 73 74 72 20 20 20 20 28 63 6f 6e 63 20 28 6b ystr (conc (k
62b0: 65 79 73 2d 3e 6b 65 79 73 74 72 20 6b 65 79 73 eys->keystr keys
62c0: 29 20 22 2c 22 0a 09 09 09 20 20 20 20 20 20 28 ) ",".... (
62d0: 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 string-intersper
62e0: 73 65 20 72 65 6d 66 69 65 6c 64 73 20 22 2c 22 se remfields ","
62f0: 29 29 29 29 0a 09 28 64 65 62 75 67 3a 70 72 69 ))))..(debug:pri
6300: 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a 67 nt-info 11 "db:g
6310: 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 72 75 6e 2d et-run-info run-
6320: 69 64 3a 20 22 20 72 75 6e 2d 69 64 20 22 20 68 id: " run-id " h
6330: 65 61 64 65 72 3a 20 22 20 68 65 61 64 65 72 20 eader: " header
6340: 22 20 6b 65 79 73 74 72 3a 20 22 20 6b 65 79 73 " keystr: " keys
6350: 74 72 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f tr)..(sqlite3:fo
6360: 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 28 6c 61 r-each-row.. (la
6370: 6d 62 64 61 20 28 61 20 2e 20 78 29 0a 09 20 20 mbda (a . x)..
6380: 20 28 73 65 74 21 20 72 65 73 20 28 61 70 70 6c (set! res (appl
6390: 79 20 76 65 63 74 6f 72 20 61 20 78 29 29 29 0a y vector a x))).
63a0: 09 20 64 62 0a 09 20 28 63 6f 6e 63 20 22 53 45 . db.. (conc "SE
63b0: 4c 45 43 54 20 22 20 6b 65 79 73 74 72 20 22 20 LECT " keystr "
63c0: 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 FROM runs WHERE
63d0: 69 64 3d 3f 3b 22 29 0a 09 20 72 75 6e 2d 69 64 id=?;").. run-id
63e0: 29 0a 09 28 64 65 62 75 67 3a 70 72 69 6e 74 2d )..(debug:print-
63f0: 69 6e 66 6f 20 31 31 20 22 64 62 3a 67 65 74 2d info 11 "db:get-
6400: 72 75 6e 2d 69 6e 66 6f 20 72 75 6e 2d 69 64 3a run-info run-id:
6410: 20 22 20 72 75 6e 2d 69 64 20 22 20 68 65 61 64 " run-id " head
6420: 65 72 3a 20 22 20 68 65 61 64 65 72 20 22 20 6b er: " header " k
6430: 65 79 73 74 72 3a 20 22 20 6b 65 79 73 74 72 29 eystr: " keystr)
6440: 0a 09 28 6c 65 74 20 28 28 66 69 6e 61 6c 72 65 ..(let ((finalre
6450: 73 20 28 76 65 63 74 6f 72 20 68 65 61 64 65 72 s (vector header
6460: 20 72 65 73 29 29 29 0a 09 20 20 28 68 61 73 68 res))).. (hash
6470: 2d 74 61 62 6c 65 2d 73 65 74 21 20 2a 72 75 6e -table-set! *run
6480: 2d 69 6e 66 6f 2d 63 61 63 68 65 2a 20 72 75 6e -info-cache* run
6490: 2d 69 64 20 66 69 6e 61 6c 72 65 73 29 0a 09 20 -id finalres)..
64a0: 20 66 69 6e 61 6c 72 65 73 29 29 29 29 0a 0a 28 finalres))))..(
64b0: 64 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 63 define (db:set-c
64c0: 6f 6d 6d 65 6e 74 2d 66 6f 72 2d 72 75 6e 20 64 omment-for-run d
64d0: 62 20 72 75 6e 2d 69 64 20 63 6f 6d 6d 65 6e 74 b run-id comment
64e0: 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ). (debug:print
64f0: 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a 73 65 74 -info 11 "db:set
6500: 2d 63 6f 6d 6d 65 6e 74 2d 66 6f 72 2d 72 75 6e -comment-for-run
6510: 20 53 54 41 52 54 20 72 75 6e 2d 69 64 3a 20 22 START run-id: "
6520: 20 72 75 6e 2d 69 64 20 22 20 63 6f 6d 6d 65 6e run-id " commen
6530: 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 20 20 t: " comment).
6540: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
6550: 20 64 62 20 22 55 50 44 41 54 45 20 72 75 6e 73 db "UPDATE runs
6560: 20 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 SET comment=? W
6570: 48 45 52 45 20 69 64 3d 3f 3b 22 20 63 6f 6d 6d HERE id=?;" comm
6580: 65 6e 74 20 72 75 6e 2d 69 64 29 0a 20 20 28 64 ent run-id). (d
6590: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
65a0: 31 31 20 22 64 62 3a 73 65 74 2d 63 6f 6d 6d 65 11 "db:set-comme
65b0: 6e 74 2d 66 6f 72 2d 72 75 6e 20 45 4e 44 20 72 nt-for-run END r
65c0: 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 20 un-id: " run-id
65d0: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
65e0: 6d 65 6e 74 29 29 0a 0a 3b 3b 20 64 6f 65 73 20 ment))..;; does
65f0: 6e 6f 74 20 28 6f 62 76 69 6f 75 73 6c 79 21 29 not (obviously!)
6600: 20 72 65 6d 6f 76 65 64 20 64 65 70 65 6e 64 65 removed depende
6610: 6e 74 20 64 61 74 61 2e 20 42 75 74 20 77 68 79 nt data. But why
6620: 20 6e 6f 74 21 21 3f 0a 28 64 65 66 69 6e 65 20 not!!?.(define
6630: 28 64 62 3a 64 65 6c 65 74 65 2d 72 75 6e 20 64 (db:delete-run d
6640: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 71 6c b run-id). (sql
6650: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
6660: 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 72 75 6e "DELETE FROM run
6670: 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 72 s WHERE id=?;" r
6680: 75 6e 2d 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 un-id))..(define
6690: 20 28 64 62 3a 75 70 64 61 74 65 2d 72 75 6e 2d (db:update-run-
66a0: 65 76 65 6e 74 5f 74 69 6d 65 20 64 62 20 72 75 event_time db ru
66b0: 6e 2d 69 64 29 0a 20 20 28 64 65 62 75 67 3a 70 n-id). (debug:p
66c0: 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 rint-info 11 "db
66d0: 3a 75 70 64 61 74 65 2d 72 75 6e 2d 65 76 65 6e :update-run-even
66e0: 74 5f 74 69 6d 65 20 53 54 41 52 54 20 72 75 6e t_time START run
66f0: 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 0a 20 -id: " run-id).
6700: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 (sqlite3:execut
6710: 65 20 64 62 20 22 55 50 44 41 54 45 20 72 75 6e e db "UPDATE run
6720: 73 20 53 45 54 20 65 76 65 6e 74 5f 74 69 6d 65 s SET event_time
6730: 3d 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 =strftime('%s','
6740: 6e 6f 77 27 29 20 57 48 45 52 45 20 69 64 3d 3f now') WHERE id=?
6750: 3b 22 20 72 75 6e 2d 69 64 29 0a 20 20 28 64 65 ;" run-id). (de
6760: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
6770: 31 20 22 64 62 3a 75 70 64 61 74 65 2d 72 75 6e 1 "db:update-run
6780: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 45 4e 44 20 -event_time END
6790: 72 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 run-id: " run-id
67a0: 29 29 20 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 )) ..(define (db
67b0: 3a 6c 6f 63 6b 2f 75 6e 6c 6f 63 6b 2d 72 75 6e :lock/unlock-run
67c0: 20 64 62 20 72 75 6e 2d 69 64 20 6c 6f 63 6b 20 db run-id lock
67d0: 75 6e 6c 6f 63 6b 20 75 73 65 72 29 0a 20 20 28 unlock user). (
67e0: 6c 65 74 20 28 28 6e 65 77 6c 6f 63 6b 76 61 6c let ((newlockval
67f0: 20 28 69 66 20 6c 6f 63 6b 20 22 6c 6f 63 6b 65 (if lock "locke
6800: 64 22 0a 09 09 09 28 69 66 20 75 6e 6c 6f 63 6b d"....(if unlock
6810: 0a 09 09 09 20 20 20 20 22 75 6e 6c 6f 63 6b 65 .... "unlocke
6820: 64 22 0a 09 09 09 20 20 20 20 22 6c 6f 63 6b 65 d".... "locke
6830: 64 22 29 29 29 29 20 3b 3b 20 73 65 6d 69 2d 66 d")))) ;; semi-f
6840: 61 69 6c 73 61 66 65 0a 20 20 20 20 28 73 71 6c ailsafe. (sql
6850: 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 ite3:execute db
6860: 22 55 50 44 41 54 45 20 72 75 6e 73 20 53 45 54 "UPDATE runs SET
6870: 20 73 74 61 74 65 3d 3f 20 57 48 45 52 45 20 69 state=? WHERE i
6880: 64 3d 3f 3b 22 20 6e 65 77 6c 6f 63 6b 76 61 6c d=?;" newlockval
6890: 20 72 75 6e 2d 69 64 29 0a 20 20 20 20 28 73 71 run-id). (sq
68a0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 lite3:execute db
68b0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 63 "INSERT INTO ac
68c0: 63 65 73 73 5f 6c 6f 67 20 28 75 73 65 72 2c 61 cess_log (user,a
68d0: 63 63 65 73 73 65 64 2c 61 72 67 73 29 20 56 41 ccessed,args) VA
68e0: 4c 55 45 53 28 3f 2c 73 74 72 66 74 69 6d 65 28 LUES(?,strftime(
68f0: 27 25 73 27 2c 27 6e 6f 77 27 29 2c 3f 29 3b 22 '%s','now'),?);"
6900: 0a 09 09 20 20 20 20 20 75 73 65 72 20 28 63 6f ... user (co
6910: 6e 63 20 6e 65 77 6c 6f 63 6b 76 61 6c 20 22 20 nc newlockval "
6920: 22 20 72 75 6e 2d 69 64 29 29 0a 20 20 20 20 28 " run-id)). (
6930: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f debug:print-info
6940: 20 31 20 22 22 20 6e 65 77 6c 6f 63 6b 76 61 6c 1 "" newlockval
6950: 20 22 20 72 75 6e 20 6e 75 6d 62 65 72 20 22 20 " run number "
6960: 72 75 6e 2d 69 64 29 29 29 0a 0a 3b 3b 3d 3d 3d run-id)))..;;===
6970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6990: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
69a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
69b0: 3d 3d 3d 0a 3b 3b 20 4b 20 45 20 59 20 53 0a 3b ===.;; K E Y S.;
69c0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
69d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
69e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
69f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6a00: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 67 65 74 20 =======..;; get
6a10: 6b 65 79 20 76 61 6c 20 70 61 69 72 73 20 66 6f key val pairs fo
6a20: 72 20 61 20 67 69 76 65 6e 20 72 75 6e 2d 69 64 r a given run-id
6a30: 0a 3b 3b 20 28 20 28 46 49 45 4c 44 4e 41 4d 45 .;; ( (FIELDNAME
6a40: 31 20 6b 65 79 76 61 6c 31 29 20 28 46 49 45 4c 1 keyval1) (FIEL
6a50: 44 4e 41 4d 45 32 20 6b 65 79 76 61 6c 32 29 20 DNAME2 keyval2)
6a60: 2e 2e 2e 20 29 0a 28 64 65 66 69 6e 65 20 28 64 ... ).(define (d
6a70: 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 2d 70 61 b:get-key-val-pa
6a80: 69 72 73 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 irs db run-id).
6a90: 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 28 67 (let* ((keys (g
6aa0: 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 28 et-keys db)).. (
6ab0: 72 65 73 20 20 27 28 29 29 29 0a 20 20 20 20 28 res '())). (
6ac0: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f debug:print-info
6ad0: 20 31 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 2d 11 "db:get-key-
6ae0: 76 61 6c 2d 70 61 69 72 73 20 53 54 41 52 54 20 val-pairs START
6af0: 6b 65 79 73 3a 20 22 20 6b 65 79 73 20 22 20 72 keys: " keys " r
6b00: 75 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 un-id: " run-id)
6b10: 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a . (for-each .
6b20: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6b 65 (lambda (ke
6b30: 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 y). (let (
6b40: 28 71 72 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 (qry (conc "SELE
6b50: 43 54 20 22 20 28 6b 65 79 3a 67 65 74 2d 66 69 CT " (key:get-fi
6b60: 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20 22 20 46 eldname key) " F
6b70: 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45 20 69 ROM runs WHERE i
6b80: 64 3d 3f 3b 22 29 29 29 0a 09 20 3b 3b 20 28 64 d=?;"))).. ;; (d
6b90: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 71 72 ebug:print 0 "qr
6ba0: 79 3a 20 22 20 71 72 79 29 0a 09 20 28 73 71 6c y: " qry).. (sql
6bb0: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
6bc0: 77 20 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 6b w .. (lambda (k
6bd0: 65 79 2d 76 61 6c 29 0a 09 20 20 20 20 28 73 65 ey-val).. (se
6be0: 74 21 20 72 65 73 20 28 63 6f 6e 73 20 28 6c 69 t! res (cons (li
6bf0: 73 74 20 28 6b 65 79 3a 67 65 74 2d 66 69 65 6c st (key:get-fiel
6c00: 64 6e 61 6d 65 20 6b 65 79 29 20 6b 65 79 2d 76 dname key) key-v
6c10: 61 6c 29 20 72 65 73 29 29 29 0a 09 20 20 64 62 al) res))).. db
6c20: 20 71 72 79 20 72 75 6e 2d 69 64 29 29 29 0a 20 qry run-id))).
6c30: 20 20 20 20 6b 65 79 73 29 0a 20 20 20 20 28 64 keys). (d
6c40: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
6c50: 31 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 2d 76 11 "db:get-key-v
6c60: 61 6c 2d 70 61 69 72 73 20 45 4e 44 20 6b 65 79 al-pairs END key
6c70: 73 3a 20 22 20 6b 65 79 73 20 22 20 72 75 6e 2d s: " keys " run-
6c80: 69 64 3a 20 22 20 72 75 6e 2d 69 64 29 0a 20 20 id: " run-id).
6c90: 20 20 28 72 65 76 65 72 73 65 20 72 65 73 29 29 (reverse res))
6ca0: 29 0a 0a 3b 3b 20 67 65 74 20 6b 65 79 20 76 61 )..;; get key va
6cb0: 6c 73 20 66 6f 72 20 61 20 67 69 76 65 6e 20 72 ls for a given r
6cc0: 75 6e 2d 69 64 0a 28 64 65 66 69 6e 65 20 28 64 un-id.(define (d
6cd0: 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20 64 b:get-key-vals d
6ce0: 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 6c 65 74 b run-id). (let
6cf0: 20 28 28 6d 79 6b 65 79 76 61 6c 73 20 28 68 61 ((mykeyvals (ha
6d00: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 sh-table-ref/def
6d10: 61 75 6c 74 20 2a 6b 65 79 76 61 6c 73 2a 20 72 ault *keyvals* r
6d20: 75 6e 2d 69 64 20 23 66 29 29 29 0a 20 20 20 20 un-id #f))).
6d30: 28 69 66 20 6d 79 6b 65 79 76 61 6c 73 20 0a 09 (if mykeyvals ..
6d40: 6d 79 6b 65 79 76 61 6c 73 0a 09 28 6c 65 74 2a mykeyvals..(let*
6d50: 20 28 28 6b 65 79 73 20 28 67 65 74 2d 6b 65 79 ((keys (get-key
6d60: 73 20 64 62 29 29 0a 09 20 20 20 20 20 20 20 28 s db)).. (
6d70: 72 65 73 20 20 27 28 29 29 29 0a 09 20 20 28 64 res '())).. (d
6d80: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 ebug:print-info
6d90: 31 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 2d 76 11 "db:get-key-v
6da0: 61 6c 73 20 53 54 41 52 54 20 6b 65 79 73 3a 20 als START keys:
6db0: 22 20 6b 65 79 73 20 22 20 72 75 6e 2d 69 64 3a " keys " run-id:
6dc0: 20 22 20 72 75 6e 2d 69 64 29 0a 09 20 20 28 66 " run-id).. (f
6dd0: 6f 72 2d 65 61 63 68 20 0a 09 20 20 20 28 6c 61 or-each .. (la
6de0: 6d 62 64 61 20 28 6b 65 79 29 0a 09 20 20 20 20 mbda (key)..
6df0: 20 28 6c 65 74 20 28 28 71 72 79 20 28 63 6f 6e (let ((qry (con
6e00: 63 20 22 53 45 4c 45 43 54 20 22 20 28 6b 65 79 c "SELECT " (key
6e10: 3a 67 65 74 2d 66 69 65 6c 64 6e 61 6d 65 20 6b :get-fieldname k
6e20: 65 79 29 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 ey) " FROM runs
6e30: 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 29 29 0a WHERE id=?;"))).
6e40: 09 20 20 20 20 20 20 20 3b 3b 20 28 64 65 62 75 . ;; (debu
6e50: 67 3a 70 72 69 6e 74 20 30 20 22 71 72 79 3a 20 g:print 0 "qry:
6e60: 22 20 71 72 79 29 0a 09 20 20 20 20 20 20 20 28 " qry).. (
6e70: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
6e80: 2d 72 6f 77 20 0a 09 09 28 6c 61 6d 62 64 61 20 -row ...(lambda
6e90: 28 6b 65 79 2d 76 61 6c 29 0a 09 09 20 20 28 73 (key-val)... (s
6ea0: 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 6b 65 et! res (cons ke
6eb0: 79 2d 76 61 6c 20 72 65 73 29 29 29 0a 09 09 64 y-val res)))...d
6ec0: 62 20 71 72 79 20 72 75 6e 2d 69 64 29 29 29 0a b qry run-id))).
6ed0: 09 20 20 20 6b 65 79 73 29 0a 09 20 20 28 64 65 . keys).. (de
6ee0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
6ef0: 31 20 22 64 62 3a 67 65 74 2d 6b 65 79 2d 76 61 1 "db:get-key-va
6f00: 6c 73 20 45 4e 44 20 6b 65 79 73 3a 20 22 20 6b ls END keys: " k
6f10: 65 79 73 20 22 20 72 75 6e 2d 69 64 3a 20 22 20 eys " run-id: "
6f20: 72 75 6e 2d 69 64 29 0a 09 20 20 28 6c 65 74 20 run-id).. (let
6f30: 28 28 66 69 6e 61 6c 2d 72 65 73 20 28 72 65 76 ((final-res (rev
6f40: 65 72 73 65 20 72 65 73 29 29 29 0a 09 20 20 20 erse res)))..
6f50: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 (hash-table-set
6f60: 21 20 2a 6b 65 79 76 61 6c 73 2a 20 72 75 6e 2d ! *keyvals* run-
6f70: 69 64 20 66 69 6e 61 6c 2d 72 65 73 29 0a 09 20 id final-res)..
6f80: 20 20 20 66 69 6e 61 6c 2d 72 65 73 29 29 29 29 final-res))))
6f90: 29 0a 0a 3b 3b 20 54 68 65 20 74 61 72 67 65 74 )..;; The target
6fa0: 20 69 73 20 6b 65 79 76 61 6c 31 2f 6b 65 79 76 is keyval1/keyv
6fb0: 61 6c 32 2e 2e 2e 2c 20 63 61 63 68 65 64 20 69 al2..., cached i
6fc0: 6e 20 2a 74 61 72 67 65 74 2a 20 61 73 20 69 74 n *target* as it
6fd0: 20 69 73 20 75 73 65 64 20 6f 66 74 65 6e 0a 28 is used often.(
6fe0: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 define (db:get-t
6ff0: 61 72 67 65 74 20 64 62 20 72 75 6e 2d 69 64 29 arget db run-id)
7000: 0a 20 20 28 6c 65 74 20 28 28 6d 79 74 61 72 67 . (let ((mytarg
7010: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 (hash-table-ref
7020: 2f 64 65 66 61 75 6c 74 20 2a 74 61 72 67 65 74 /default *target
7030: 2a 20 72 75 6e 2d 69 64 20 23 66 29 29 29 0a 20 * run-id #f))).
7040: 20 20 20 28 69 66 20 6d 79 74 61 72 67 0a 09 6d (if mytarg..m
7050: 79 74 61 72 67 0a 09 28 6c 65 74 2a 20 28 28 6b ytarg..(let* ((k
7060: 65 79 76 61 6c 73 20 28 64 62 3a 67 65 74 2d 6b eyvals (db:get-k
7070: 65 79 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 ey-vals db run-i
7080: 64 29 29 0a 09 20 20 20 20 20 20 20 28 74 68 65 d)).. (the
7090: 6b 65 79 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 key (string-int
70a0: 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c ersperse (map (l
70b0: 61 6d 62 64 61 20 28 78 29 28 69 66 20 78 20 78 ambda (x)(if x x
70c0: 20 22 2d 6e 61 2d 22 29 29 20 6b 65 79 76 61 6c "-na-")) keyval
70d0: 73 29 20 22 2f 22 29 29 29 0a 09 20 20 28 68 61 s) "/"))).. (ha
70e0: 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 2a 74 sh-table-set! *t
70f0: 61 72 67 65 74 2a 20 72 75 6e 2d 69 64 20 74 68 arget* run-id th
7100: 65 6b 65 79 29 0a 09 20 20 74 68 65 6b 65 79 29 ekey).. thekey)
7110: 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d )))..;;=========
7120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
7160: 20 20 54 20 45 20 53 20 54 20 53 0a 3b 3b 3d 3d T E S T S.;;==
7170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71b0: 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 64 ====..(define (d
71c0: 62 3a 74 65 73 74 73 2d 72 65 67 69 73 74 65 72 b:tests-register
71d0: 2d 74 65 73 74 20 64 62 20 72 75 6e 2d 69 64 20 -test db run-id
71e0: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
71f0: 61 74 68 29 0a 20 20 28 64 65 62 75 67 3a 70 72 ath). (debug:pr
7200: 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 3a int-info 11 "db:
7210: 74 65 73 74 73 2d 72 65 67 69 73 74 65 72 2d 74 tests-register-t
7220: 65 73 74 20 53 54 41 52 54 20 64 62 3d 22 20 64 est START db=" d
7230: 62 20 22 2c 20 72 75 6e 2d 69 64 3d 22 20 72 75 b ", run-id=" ru
7240: 6e 2d 69 64 20 22 2c 20 74 65 73 74 2d 6e 61 6d n-id ", test-nam
7250: 65 3d 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 2c e=" test-name ",
7260: 20 69 74 65 6d 2d 70 61 74 68 3d 5c 22 22 20 69 item-path=\"" i
7270: 74 65 6d 2d 70 61 74 68 20 22 5c 22 22 29 0a 20 tem-path "\"").
7280: 20 28 6c 65 74 20 28 28 69 74 65 6d 2d 70 61 74 (let ((item-pat
7290: 68 73 20 28 69 66 20 28 65 71 75 61 6c 3f 20 69 hs (if (equal? i
72a0: 74 65 6d 2d 70 61 74 68 20 22 22 29 0a 09 09 09 tem-path "")....
72b0: 28 6c 69 73 74 20 69 74 65 6d 2d 70 61 74 68 29 (list item-path)
72c0: 0a 09 09 09 28 6c 69 73 74 20 69 74 65 6d 2d 70 ....(list item-p
72d0: 61 74 68 20 22 22 29 29 29 29 0a 20 20 20 20 28 ath "")))). (
72e0: 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 28 for-each . (
72f0: 6c 61 6d 62 64 61 20 28 70 74 68 29 0a 20 20 20 lambda (pth).
7300: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 (sqlite3:exe
7310: 63 75 74 65 20 64 62 20 22 49 4e 53 45 52 54 20 cute db "INSERT
7320: 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74 OR IGNORE INTO t
7330: 65 73 74 73 20 28 72 75 6e 5f 69 64 2c 74 65 73 ests (run_id,tes
7340: 74 6e 61 6d 65 2c 65 76 65 6e 74 5f 74 69 6d 65 tname,event_time
7350: 2c 69 74 65 6d 5f 70 61 74 68 2c 73 74 61 74 65 ,item_path,state
7360: 2c 73 74 61 74 75 73 29 20 56 41 4c 55 45 53 20 ,status) VALUES
7370: 28 3f 2c 3f 2c 73 74 72 66 74 69 6d 65 28 27 25 (?,?,strftime('%
7380: 73 27 2c 27 6e 6f 77 27 29 2c 3f 2c 27 4e 4f 54 s','now'),?,'NOT
7390: 5f 53 54 41 52 54 45 44 27 2c 27 6e 2f 61 27 29 _STARTED','n/a')
73a0: 3b 22 20 0a 09 09 09 72 75 6e 2d 69 64 20 0a 09 ;" ....run-id ..
73b0: 09 09 74 65 73 74 2d 6e 61 6d 65 0a 09 09 09 70 ..test-name....p
73c0: 74 68 29 29 0a 20 20 20 20 20 69 74 65 6d 2d 70 th)). item-p
73d0: 61 74 68 73 29 0a 20 20 28 64 65 62 75 67 3a 70 aths). (debug:p
73e0: 72 69 6e 74 2d 69 6e 66 6f 20 31 31 20 22 64 62 rint-info 11 "db
73f0: 3a 74 65 73 74 73 2d 72 65 67 69 73 74 65 72 2d :tests-register-
7400: 74 65 73 74 20 45 4e 44 20 64 62 3d 22 20 64 62 test END db=" db
7410: 20 22 2c 20 72 75 6e 2d 69 64 3d 22 20 72 75 6e ", run-id=" run
7420: 2d 69 64 20 22 2c 20 74 65 73 74 2d 6e 61 6d 65 -id ", test-name
7430: 3d 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 2c 20 =" test-name ",
7440: 69 74 65 6d 2d 70 61 74 68 3d 5c 22 22 20 69 74 item-path=\"" it
7450: 65 6d 2d 70 61 74 68 20 22 5c 22 22 29 0a 20 20 em-path "\"").
7460: 20 20 23 66 29 29 0a 0a 0a 3b 3b 20 73 74 61 74 #f))...;; stat
7470: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
7480: 61 72 65 20 6c 69 73 74 73 2c 20 74 75 72 6e 20 are lists, turn
7490: 74 68 65 6d 20 69 6e 74 6f 20 28 22 50 41 53 53 them into ("PASS
74a0: 22 2c 22 46 41 49 4c 22 2e 2e 2e 29 20 61 6e 64 ","FAIL"...) and
74b0: 20 75 73 65 20 4e 4f 54 20 49 4e 0a 3b 3b 20 69 use NOT IN.;; i
74c0: 2e 65 2e 20 74 68 65 73 65 20 6c 69 73 74 73 20 .e. these lists
74d0: 64 65 66 69 6e 65 20 77 68 61 74 20 74 6f 20 4e define what to N
74e0: 4f 54 20 73 68 6f 77 2e 0a 3b 3b 20 73 74 61 74 OT show..;; stat
74f0: 65 73 20 61 6e 64 20 73 74 61 74 75 73 65 73 20 es and statuses
7500: 61 72 65 20 72 65 71 75 69 72 65 64 20 74 6f 20 are required to
7510: 62 65 20 6c 69 73 74 73 2c 20 65 6d 70 74 79 20 be lists, empty
7520: 69 73 20 6f 6b 0a 3b 3b 20 6e 6f 74 2d 69 6e 20 is ok.;; not-in
7530: 23 74 20 3d 20 61 62 6f 76 65 20 62 65 68 61 76 #t = above behav
7540: 69 6f 75 72 2c 20 23 66 20 3d 20 6d 75 73 74 20 iour, #f = must
7550: 6d 61 74 63 68 0a 28 64 65 66 69 6e 65 20 28 64 match.(define (d
7560: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d b:get-tests-for-
7570: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 74 65 run db run-id te
7580: 73 74 70 61 74 74 20 73 74 61 74 65 73 20 73 74 stpatt states st
7590: 61 74 75 73 65 73 20 0a 09 09 09 20 20 20 20 20 atuses ....
75a0: 20 23 21 6b 65 79 20 28 6e 6f 74 2d 69 6e 20 23 #!key (not-in #
75b0: 74 29 0a 09 09 09 20 20 20 20 20 20 28 73 6f 72 t).... (sor
75c0: 74 2d 62 79 20 23 66 29 20 3b 3b 20 27 72 75 6e t-by #f) ;; 'run
75d0: 64 69 72 20 27 65 76 65 6e 74 5f 74 69 6d 65 0a dir 'event_time.
75e0: 09 09 09 20 20 20 20 20 20 29 0a 20 20 28 64 65 ... ). (de
75f0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
7600: 31 20 22 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 1 "db:get-tests-
7610: 66 6f 72 2d 72 75 6e 20 53 54 41 52 54 20 72 75 for-run START ru
7620: 6e 2d 69 64 3d 22 20 72 75 6e 2d 69 64 20 22 2c n-id=" run-id ",
7630: 20 74 65 73 74 70 61 74 74 3d 22 20 74 65 73 74 testpatt=" test
7640: 70 61 74 74 20 22 2c 20 73 74 61 74 65 73 3d 22 patt ", states="
7650: 20 73 74 61 74 65 73 20 22 2c 20 73 74 61 74 75 states ", statu
7660: 73 65 73 3d 22 20 73 74 61 74 75 73 65 73 20 22 ses=" statuses "
7670: 2c 20 6e 6f 74 2d 69 6e 3d 22 20 6e 6f 74 2d 69 , not-in=" not-i
7680: 6e 20 22 2c 20 73 6f 72 74 2d 62 79 3d 22 20 73 n ", sort-by=" s
7690: 6f 72 74 2d 62 79 29 0a 20 20 28 6c 65 74 2a 20 ort-by). (let*
76a0: 28 28 72 65 73 20 27 28 29 29 0a 09 20 3b 3b 20 ((res '()).. ;;
76b0: 69 66 20 73 74 61 74 65 73 20 6f 72 20 73 74 61 if states or sta
76c0: 74 75 73 65 73 20 61 72 65 20 6e 75 6c 6c 20 74 tuses are null t
76d0: 68 65 6e 20 61 73 73 75 6d 65 20 6d 61 74 63 68 hen assume match
76e0: 20 61 6c 6c 20 77 68 65 6e 20 6e 6f 74 2d 69 6e all when not-in
76f0: 20 69 73 20 66 61 6c 73 65 0a 09 20 28 73 74 61 is false.. (sta
7700: 74 65 73 2d 71 72 79 20 20 20 20 20 20 28 69 66 tes-qry (if
7710: 20 28 6e 75 6c 6c 3f 20 73 74 61 74 65 73 29 20 (null? states)
7720: 0a 09 09 09 20 20 20 20 20 20 23 66 0a 09 09 09 .... #f....
7730: 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20 73 74 (conc " st
7740: 61 74 65 20 22 20 20 0a 09 09 09 09 20 20 20 20 ate " .....
7750: 28 69 66 20 6e 6f 74 2d 69 6e 20 22 4e 4f 54 22 (if not-in "NOT"
7760: 20 22 22 29 20 0a 09 09 09 09 20 20 20 20 22 20 "") ..... "
7770: 49 4e 20 28 27 22 20 0a 09 09 09 09 20 20 20 20 IN ('" .....
7780: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
7790: 72 73 65 20 73 74 61 74 65 73 20 20 20 22 27 2c rse states "',
77a0: 27 22 29 0a 09 09 09 09 20 20 20 20 22 27 29 22 '")..... "')"
77b0: 29 29 29 0a 09 20 28 73 74 61 74 75 73 65 73 2d ))).. (statuses-
77c0: 71 72 79 20 20 20 20 28 69 66 20 28 6e 75 6c 6c qry (if (null
77d0: 3f 20 73 74 61 74 75 73 65 73 29 0a 09 09 09 20 ? statuses)....
77e0: 20 20 20 20 20 23 66 0a 09 09 09 20 20 20 20 20 #f....
77f0: 20 28 63 6f 6e 63 20 22 20 73 74 61 74 75 73 20 (conc " status
7800: 22 0a 09 09 09 09 20 20 20 20 28 69 66 20 6e 6f "..... (if no
7810: 74 2d 69 6e 20 22 4e 4f 54 22 20 22 22 29 20 0a t-in "NOT" "") .
7820: 09 09 09 09 20 20 20 20 22 20 49 4e 20 28 27 22 .... " IN ('"
7830: 20 0a 09 09 09 09 20 20 20 20 28 73 74 72 69 6e ..... (strin
7840: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 73 74 g-intersperse st
7850: 61 74 75 73 65 73 20 22 27 2c 27 22 29 0a 09 09 atuses "','")...
7860: 09 09 20 20 20 20 22 27 29 22 29 29 29 0a 09 20 .. "')")))..
7870: 28 74 65 73 74 73 2d 6d 61 74 63 68 2d 71 72 79 (tests-match-qry
7880: 20 28 74 65 73 74 73 3a 6d 61 74 63 68 2d 3e 73 (tests:match->s
7890: 71 6c 71 72 79 20 74 65 73 74 70 61 74 74 29 29 qlqry testpatt))
78a0: 0a 09 20 28 71 72 79 20 20 20 20 20 20 20 20 20 .. (qry
78b0: 20 20 20 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 (conc "SELEC
78c0: 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 65 73 74 T id,run_id,test
78d0: 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 61 74 75 name,state,statu
78e0: 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c 68 6f 73 s,event_time,hos
78f0: 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 t,cpuload,diskfr
7900: 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 69 72 2c ee,uname,rundir,
7910: 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e 5f 64 75 item_path,run_du
7920: 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 ration,final_log
7930: 66 2c 63 6f 6d 6d 65 6e 74 20 22 0a 09 09 09 09 f,comment ".....
7940: 22 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 " FROM tests WHE
7950: 52 45 20 72 75 6e 5f 69 64 3d 3f 20 22 0a 09 09 RE run_id=? "...
7960: 09 09 28 69 66 20 73 74 61 74 65 73 2d 71 72 79 ..(if states-qry
7970: 20 20 20 28 63 6f 6e 63 20 22 20 41 4e 44 20 22 (conc " AND "
7980: 20 73 74 61 74 65 73 2d 71 72 79 29 20 20 20 22 states-qry) "
7990: 22 29 0a 09 09 09 09 28 69 66 20 73 74 61 74 75 ").....(if statu
79a0: 73 65 73 2d 71 72 79 20 28 63 6f 6e 63 20 22 20 ses-qry (conc "
79b0: 41 4e 44 20 22 20 73 74 61 74 75 73 65 73 2d 71 AND " statuses-q
79c0: 72 79 29 20 22 22 29 0a 09 09 09 09 28 69 66 20 ry) "").....(if
79d0: 74 65 73 74 73 2d 6d 61 74 63 68 2d 71 72 79 20 tests-match-qry
79e0: 28 63 6f 6e 63 20 22 20 41 4e 44 20 28 22 20 74 (conc " AND (" t
79f0: 65 73 74 73 2d 6d 61 74 63 68 2d 71 72 79 20 22 ests-match-qry "
7a00: 29 20 22 29 20 22 22 29 0a 09 09 09 09 28 63 61 ) ") "").....(ca
7a10: 73 65 20 73 6f 72 74 2d 62 79 0a 09 09 09 09 20 se sort-by.....
7a20: 20 28 28 72 75 6e 64 69 72 29 20 20 20 20 20 22 ((rundir) "
7a30: 20 4f 52 44 45 52 20 42 59 20 6c 65 6e 67 74 68 ORDER BY length
7a40: 28 72 75 6e 64 69 72 29 20 44 45 53 43 3b 22 29 (rundir) DESC;")
7a50: 0a 09 09 09 09 20 20 28 28 65 76 65 6e 74 5f 74 ..... ((event_t
7a60: 69 6d 65 29 20 22 20 4f 52 44 45 52 20 42 59 20 ime) " ORDER BY
7a70: 65 76 65 6e 74 5f 74 69 6d 65 20 41 53 43 3b 22 event_time ASC;"
7a80: 29 0a 09 09 09 09 20 20 28 65 6c 73 65 20 20 20 )..... (else
7a90: 20 20 20 20 20 20 22 3b 22 29 29 0a 09 09 09 20 ";"))....
7aa0: 29 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 ))). (debug:p
7ab0: 72 69 6e 74 2d 69 6e 66 6f 20 38 20 22 64 62 3a rint-info 8 "db:
7ac0: 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 get-tests-for-ru
7ad0: 6e 20 71 72 79 3d 22 20 71 72 79 29 0a 20 20 20 n qry=" qry).
7ae0: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
7af0: 63 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 ch-row . (la
7b00: 6d 62 64 61 20 28 61 20 2e 20 62 29 20 3b 3b 20 mbda (a . b) ;;
7b10: 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 id run-id testna
7b20: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
7b30: 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 event-time host
7b40: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
7b50: 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 uname rundir it
7b60: 65 6d 2d 70 61 74 68 20 72 75 6e 2d 64 75 72 61 em-path run-dura
7b70: 74 69 6f 6e 20 66 69 6e 61 6c 2d 6c 6f 67 66 20 tion final-logf
7b80: 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 20 20 comment).
7b90: 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 (set! res (cons
7ba0: 28 61 70 70 6c 79 20 76 65 63 74 6f 72 20 61 20 (apply vector a
7bb0: 62 29 20 72 65 73 29 29 29 20 3b 3b 20 69 64 20 b) res))) ;; id
7bc0: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
7bd0: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
7be0: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
7bf0: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
7c00: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
7c10: 70 61 74 68 20 72 75 6e 2d 64 75 72 61 74 69 6f path run-duratio
7c20: 6e 20 66 69 6e 61 6c 2d 6c 6f 67 66 20 63 6f 6d n final-logf com
7c30: 6d 65 6e 74 29 20 72 65 73 29 29 29 0a 20 20 20 ment) res))).
7c40: 20 20 64 62 20 0a 20 20 20 20 20 71 72 79 0a 20 db . qry.
7c50: 20 20 20 20 72 75 6e 2d 69 64 0a 20 20 20 20 20 run-id.
7c60: 3b 3b 20 28 69 66 20 74 65 73 74 70 61 74 74 20 ;; (if testpatt
7c70: 74 65 73 74 70 61 74 74 20 22 25 22 29 0a 20 20 testpatt "%").
7c80: 20 20 20 3b 3b 20 28 69 66 20 69 74 65 6d 70 61 ;; (if itempa
7c90: 74 74 20 69 74 65 6d 70 61 74 74 20 22 25 22 29 tt itempatt "%")
7ca0: 29 0a 20 20 20 20 20 29 0a 20 20 20 20 28 64 65 ). ). (de
7cb0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 bug:print-info 1
7cc0: 31 20 22 64 62 3a 67 65 74 2d 74 65 73 74 73 2d 1 "db:get-tests-
7cd0: 66 6f 72 2d 72 75 6e 20 53 54 41 52 54 20 72 75 for-run START ru
7ce0: 6e 2d 69 64 3d 22 20 72 75 6e 2d 69 64 20 22 2c n-id=" run-id ",
7cf0: 20 74 65 73 74 70 61 74 74 3d 22 20 74 65 73 74 testpatt=" test
7d00: 70 61 74 74 20 22 2c 20 73 74 61 74 65 73 3d 22 patt ", states="
7d10: 20 73 74 61 74 65 73 20 22 2c 20 73 74 61 74 75 states ", statu
7d20: 73 65 73 3d 22 20 73 74 61 74 75 73 65 73 20 22 ses=" statuses "
7d30: 2c 20 6e 6f 74 2d 69 6e 3d 22 20 6e 6f 74 2d 69 , not-in=" not-i
7d40: 6e 20 22 2c 20 73 6f 72 74 2d 62 79 3d 22 20 73 n ", sort-by=" s
7d50: 6f 72 74 2d 62 79 29 0a 20 20 20 20 72 65 73 29 ort-by). res)
7d60: 29 0a 0a 3b 3b 20 74 68 69 73 20 6f 6e 65 20 69 )..;; this one i
7d70: 73 20 61 20 62 69 74 20 62 72 6f 6b 65 6e 20 42 s a bit broken B
7d80: 55 47 20 46 49 58 4d 45 0a 28 64 65 66 69 6e 65 UG FIXME.(define
7d90: 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74 (db:delete-test
7da0: 2d 73 74 65 70 2d 72 65 63 6f 72 64 73 20 64 62 -step-records db
7db0: 20 74 65 73 74 2d 69 64 29 0a 20 20 3b 3b 20 42 test-id). ;; B
7dc0: 72 65 61 6b 69 6e 67 20 69 74 20 69 6e 74 6f 20 reaking it into
7dd0: 74 77 6f 20 71 75 65 72 69 65 73 20 66 6f 72 20 two queries for
7de0: 62 65 74 74 65 72 20 66 69 6c 65 20 61 63 63 65 better file acce
7df0: 73 73 20 69 6e 74 65 72 6c 65 61 76 69 6e 67 0a ss interleaving.
7e00: 20 20 28 6c 65 74 2a 20 28 28 74 64 62 20 28 64 (let* ((tdb (d
7e10: 62 3a 6f 70 65 6e 2d 74 65 73 74 2d 64 62 2d 62 b:open-test-db-b
7e20: 79 2d 74 65 73 74 2d 69 64 20 64 62 20 74 65 73 y-test-id db tes
7e30: 74 2d 69 64 29 29 29 0a 20 20 20 20 3b 3b 20 74 t-id))). ;; t
7e40: 65 73 74 20 64 62 27 73 20 63 61 6e 20 67 6f 20 est db's can go
7e50: 61 77 61 79 20 2d 20 6d 75 73 74 20 63 68 65 63 away - must chec
7e60: 6b 20 65 76 65 72 79 20 74 69 6d 65 0a 20 20 20 k every time.
7e70: 20 28 69 66 20 74 64 62 0a 09 28 62 65 67 69 6e (if tdb..(begin
7e80: 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 .. (sqlite3:exe
7e90: 63 75 74 65 20 74 64 62 20 22 44 45 4c 45 54 45 cute tdb "DELETE
7ea0: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
7eb0: 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a ;").. (sqlite3:
7ec0: 65 78 65 63 75 74 65 20 74 64 62 20 22 44 45 4c execute tdb "DEL
7ed0: 45 54 45 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 ETE FROM test_da
7ee0: 74 61 3b 22 29 0a 09 20 20 28 73 71 6c 69 74 65 ta;").. (sqlite
7ef0: 33 3a 66 69 6e 61 6c 69 7a 65 21 20 74 64 62 29 3:finalize! tdb)
7f00: 29 29 29 29 0a 0a 3b 3b 20 0a 28 64 65 66 69 6e ))))..;; .(defin
7f10: 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 e (db:delete-tes
7f20: 74 2d 72 65 63 6f 72 64 73 20 64 62 20 74 64 62 t-records db tdb
7f30: 20 74 65 73 74 2d 69 64 20 23 21 6b 65 79 20 28 test-id #!key (
7f40: 66 6f 72 63 65 20 23 66 29 29 0a 20 20 28 69 66 force #f)). (if
7f50: 20 74 64 62 20 0a 20 20 20 20 20 20 28 62 65 67 tdb . (beg
7f60: 69 6e 0a 09 28 73 71 6c 69 74 65 33 3a 65 78 65 in..(sqlite3:exe
7f70: 63 75 74 65 20 74 64 62 20 22 44 45 4c 45 54 45 cute tdb "DELETE
7f80: 20 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 FROM test_steps
7f90: 3b 22 29 0a 09 28 73 71 6c 69 74 65 33 3a 65 78 ;")..(sqlite3:ex
7fa0: 65 63 75 74 65 20 74 64 62 20 22 44 45 4c 45 54 ecute tdb "DELET
7fb0: 45 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 E FROM test_data
7fc0: 3b 22 29 29 29 0a 20 20 3b 3b 20 28 73 71 6c 69 ;"))). ;; (sqli
7fd0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 te3:execute db "
7fe0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 DELETE FROM test
7ff0: 73 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 74 s WHERE id=?;" t
8000: 65 73 74 2d 69 64 29 29 0a 20 20 28 69 66 20 64 est-id)). (if d
8010: 62 20 0a 20 20 20 20 20 20 28 62 65 67 69 6e 0a b . (begin.
8020: 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 .(sqlite3:execut
8030: 65 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f e db "DELETE FRO
8040: 4d 20 74 65 73 74 5f 73 74 65 70 73 20 57 48 45 M test_steps WHE
8050: 52 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 20 74 RE test_id=?;" t
8060: 65 73 74 2d 69 64 29 0a 09 28 73 71 6c 69 74 65 est-id)..(sqlite
8070: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 44 45 3:execute db "DE
8080: 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 5f 64 LETE FROM test_d
8090: 61 74 61 20 20 57 48 45 52 45 20 74 65 73 74 5f ata WHERE test_
80a0: 69 64 3d 3f 3b 22 20 74 65 73 74 2d 69 64 29 0a id=?;" test-id).
80b0: 09 28 69 66 20 66 6f 72 63 65 0a 09 20 20 20 20 .(if force..
80c0: 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 (sqlite3:execute
80d0: 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d db "DELETE FROM
80e0: 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 3d tests WHERE id=
80f0: 3f 3b 22 20 74 65 73 74 2d 69 64 29 0a 09 20 20 ?;" test-id)..
8100: 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 (sqlite3:execu
8110: 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 te db "UPDATE te
8120: 73 74 73 20 53 45 54 20 73 74 61 74 65 3d 27 44 sts SET state='D
8130: 45 4c 45 54 45 44 27 2c 73 74 61 74 75 73 3d 27 ELETED',status='
8140: 6e 2f 61 27 20 57 48 45 52 45 20 69 64 3d 3f 3b n/a' WHERE id=?;
8150: 22 20 74 65 73 74 2d 69 64 29 29 29 29 29 0a 0a " test-id)))))..
8160: 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c 65 (define (db:dele
8170: 74 65 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e te-tests-for-run
8180: 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 28 73 db run-id). (s
8190: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
81a0: 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 b "DELETE FROM t
81b0: 65 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 ests WHERE run_i
81c0: 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 29 0a 0a d=?;" run-id))..
81d0: 28 64 65 66 69 6e 65 20 28 64 62 3a 64 65 6c 65 (define (db:dele
81e0: 74 65 2d 6f 6c 64 2d 64 65 6c 65 74 65 64 2d 74 te-old-deleted-t
81f0: 65 73 74 2d 72 65 63 6f 72 64 73 20 64 62 29 0a est-records db).
8200: 20 20 28 6c 65 74 20 28 28 74 61 72 67 74 69 6d (let ((targtim
8210: 65 20 28 2d 20 28 63 75 72 72 65 6e 74 2d 73 65 e (- (current-se
8220: 63 6f 6e 64 73 29 28 2a 20 33 30 20 32 34 20 36 conds)(* 30 24 6
8230: 30 20 36 30 29 29 29 29 20 3b 3b 20 6f 6e 65 20 0 60)))) ;; one
8240: 6d 6f 6e 74 68 20 69 6e 20 74 68 65 20 70 61 73 month in the pas
8250: 74 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 t. (sqlite3:e
8260: 78 65 63 75 74 65 20 64 62 20 22 44 45 4c 45 54 xecute db "DELET
8270: 45 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 E FROM tests WHE
8280: 52 45 20 73 74 61 74 65 3d 27 44 45 4c 45 54 45 RE state='DELETE
8290: 44 27 20 41 4e 44 20 65 76 65 6e 74 5f 74 69 6d D' AND event_tim
82a0: 65 3c 3f 3b 22 20 74 61 72 67 74 69 6d 65 29 29 e<?;" targtime))
82b0: 29 0a 0a 3b 3b 20 73 65 74 20 74 65 73 74 73 20 )..;; set tests
82c0: 77 69 74 68 20 73 74 61 74 65 20 63 75 72 72 73 with state currs
82d0: 74 61 74 65 20 61 6e 64 20 73 74 61 74 75 73 20 tate and status
82e0: 63 75 72 72 73 74 61 74 75 73 20 74 6f 20 6e 65 currstatus to ne
82f0: 77 73 74 61 74 65 20 61 6e 64 20 6e 65 77 73 74 wstate and newst
8300: 61 74 75 73 0a 3b 3b 20 75 73 65 20 63 75 72 72 atus.;; use curr
8310: 73 74 61 74 65 20 3d 20 23 66 20 61 6e 64 20 6f state = #f and o
8320: 72 20 63 75 72 72 73 74 61 74 75 73 20 3d 20 23 r currstatus = #
8330: 66 20 74 6f 20 61 70 70 6c 79 20 74 6f 20 61 6e f to apply to an
8340: 79 20 73 74 61 74 65 20 6f 72 20 73 74 61 74 75 y state or statu
8350: 73 20 72 65 73 70 65 63 74 69 76 65 6c 79 0a 3b s respectively.;
8360: 3b 20 57 41 52 4e 49 4e 47 3a 20 53 51 4c 20 69 ; WARNING: SQL i
8370: 6e 6a 65 63 74 69 6f 6e 20 72 69 73 6b 0a 28 64 njection risk.(d
8380: 65 66 69 6e 65 20 28 64 62 3a 73 65 74 2d 74 65 efine (db:set-te
8390: 73 74 73 2d 73 74 61 74 65 2d 73 74 61 74 75 73 sts-state-status
83a0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e db run-id testn
83b0: 61 6d 65 73 20 63 75 72 72 73 74 61 74 65 20 63 ames currstate c
83c0: 75 72 72 73 74 61 74 75 73 20 6e 65 77 73 74 61 urrstatus newsta
83d0: 74 65 20 6e 65 77 73 74 61 74 75 73 29 0a 20 20 te newstatus).
83e0: 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 (for-each (lambd
83f0: 61 20 28 74 65 73 74 6e 61 6d 65 29 0a 09 20 20 a (testname)..
8400: 20 20 20 20 28 6c 65 74 20 28 28 71 72 79 20 28 (let ((qry (
8410: 63 6f 6e 63 20 22 55 50 44 41 54 45 20 74 65 73 conc "UPDATE tes
8420: 74 73 20 53 45 54 20 73 74 61 74 65 3d 3f 2c 73 ts SET state=?,s
8430: 74 61 74 75 73 3d 3f 20 57 48 45 52 45 20 22 0a tatus=? WHERE ".
8440: 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 75 ... (if cu
8450: 72 72 73 74 61 74 65 20 20 28 63 6f 6e 63 20 22 rrstate (conc "
8460: 73 74 61 74 65 3d 27 22 20 63 75 72 72 73 74 61 state='" currsta
8470: 74 65 20 22 27 20 41 4e 44 20 22 29 20 22 22 29 te "' AND ") "")
8480: 0a 09 09 09 20 20 20 20 20 20 20 28 69 66 20 63 .... (if c
8490: 75 72 72 73 74 61 74 75 73 20 28 63 6f 6e 63 20 urrstatus (conc
84a0: 22 73 74 61 74 75 73 3d 27 22 20 63 75 72 72 73 "status='" currs
84b0: 74 61 74 75 73 20 22 27 20 41 4e 44 20 22 29 20 tatus "' AND ")
84c0: 22 22 29 0a 09 09 09 20 20 20 20 20 20 20 22 20 "").... "
84d0: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
84e0: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 4e 4f 54 20 tname=? AND NOT
84f0: 28 69 74 65 6d 5f 70 61 74 68 3d 27 27 20 41 4e (item_path='' AN
8500: 44 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 D testname in (S
8510: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74 ELECT DISTINCT t
8520: 65 73 74 6e 61 6d 65 20 46 52 4f 4d 20 74 65 73 estname FROM tes
8530: 74 73 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d ts WHERE testnam
8540: 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 e=? AND item_pat
8550: 68 20 21 3d 20 27 27 29 29 3b 22 29 29 29 0a 09 h != ''));")))..
8560: 09 3b 3b 28 64 65 62 75 67 3a 70 72 69 6e 74 20 .;;(debug:print
8570: 30 20 22 51 52 59 3a 20 22 20 71 72 79 29 0a 09 0 "QRY: " qry)..
8580: 09 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 .(sqlite3:execut
8590: 65 20 64 62 20 71 72 79 20 72 75 6e 2d 69 64 20 e db qry run-id
85a0: 6e 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 newstate newstat
85b0: 75 73 20 74 65 73 74 6e 61 6d 65 20 74 65 73 74 us testname test
85c0: 6e 61 6d 65 29 29 29 0a 09 20 20 20 20 74 65 73 name))).. tes
85d0: 74 6e 61 6d 65 73 29 29 0a 0a 28 64 65 66 69 6e tnames))..(defin
85e0: 65 20 28 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 e (db:delete-tes
85f0: 74 73 2d 69 6e 2d 73 74 61 74 65 20 64 62 20 72 ts-in-state db r
8600: 75 6e 2d 69 64 20 73 74 61 74 65 29 0a 20 20 28 un-id state). (
8610: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
8620: 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 db "DELETE FROM
8630: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
8640: 65 3d 3f 20 41 4e 44 20 72 75 6e 5f 69 64 3d 3f e=? AND run_id=?
8650: 3b 22 20 73 74 61 74 65 20 72 75 6e 2d 69 64 29 ;" state run-id)
8660: 29 0a 0a 3b 3b 20 73 70 65 65 64 20 75 70 20 66 )..;; speed up f
8670: 6f 72 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 73 20 or common cases
8680: 77 69 74 68 20 61 20 6c 69 74 74 6c 65 20 6c 6f with a little lo
8690: 67 69 63 0a 28 64 65 66 69 6e 65 20 28 64 62 3a gic.(define (db:
86a0: 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 test-set-state-s
86b0: 74 61 74 75 73 2d 62 79 2d 69 64 20 64 62 20 74 tatus-by-id db t
86c0: 65 73 74 2d 69 64 20 6e 65 77 73 74 61 74 65 20 est-id newstate
86d0: 6e 65 77 73 74 61 74 75 73 20 6e 65 77 63 6f 6d newstatus newcom
86e0: 6d 65 6e 74 29 0a 20 20 28 63 6f 6e 64 0a 20 20 ment). (cond.
86f0: 20 28 28 61 6e 64 20 6e 65 77 73 74 61 74 65 20 ((and newstate
8700: 6e 65 77 73 74 61 74 75 73 20 6e 65 77 63 6f 6d newstatus newcom
8710: 6d 65 6e 74 29 0a 20 20 20 20 28 73 71 6c 69 74 ment). (sqlit
8720: 65 33 3a 65 78 65 63 74 75 74 65 20 64 62 20 22 e3:exectute db "
8730: 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 UPDATE tests SET
8740: 20 73 74 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d state=?,status=
8750: 3f 2c 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 ?,comment=? WHER
8760: 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 E id=?;" newstat
8770: 65 20 6e 65 77 73 74 61 74 75 73 20 74 65 73 74 e newstatus test
8780: 2d 69 64 29 29 0a 20 20 20 28 28 61 6e 64 20 6e -id)). ((and n
8790: 65 77 73 74 61 74 65 20 6e 65 77 73 74 61 74 75 ewstate newstatu
87a0: 73 29 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a s). (sqlite3:
87b0: 65 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 execute db "UPDA
87c0: 54 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 TE tests SET sta
87d0: 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 20 57 48 te=?,status=? WH
87e0: 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 73 74 ERE id=?;" newst
87f0: 61 74 65 20 6e 65 77 73 74 61 74 75 73 20 74 65 ate newstatus te
8800: 73 74 2d 69 64 29 29 0a 20 20 20 28 65 6c 73 65 st-id)). (else
8810: 0a 20 20 20 20 28 69 66 20 6e 65 77 73 74 61 74 . (if newstat
8820: 65 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 e (sqlite3:exe
8830: 63 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 cute db "UPDATE
8840: 74 65 73 74 73 20 53 45 54 20 73 74 61 74 65 3d tests SET state=
8850: 3f 20 20 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 ? WHERE id=?;"
8860: 20 6e 65 77 73 74 61 74 65 20 20 20 74 65 73 74 newstate test
8870: 2d 69 64 29 29 0a 20 20 20 20 28 69 66 20 6e 65 -id)). (if ne
8880: 77 73 74 61 74 75 73 20 20 28 73 71 6c 69 74 65 wstatus (sqlite
8890: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50 3:execute db "UP
88a0: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
88b0: 74 61 74 75 73 3d 3f 20 20 57 48 45 52 45 20 69 tatus=? WHERE i
88c0: 64 3d 3f 3b 22 20 6e 65 77 73 74 61 74 75 73 20 d=?;" newstatus
88d0: 20 74 65 73 74 2d 69 64 29 29 0a 20 20 20 20 28 test-id)). (
88e0: 69 66 20 6e 65 77 63 6f 6d 6d 65 6e 74 20 28 73 if newcomment (s
88f0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
8900: 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 b "UPDATE tests
8910: 53 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 SET comment=? WH
8920: 45 52 45 20 69 64 3d 3f 3b 22 20 6e 65 77 63 6f ERE id=?;" newco
8930: 6d 6d 65 6e 74 20 74 65 73 74 2d 69 64 29 29 29 mment test-id)))
8940: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
8950: 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d 73 test-set-state-s
8960: 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69 64 2d tatus-by-run-id-
8970: 74 65 73 74 6e 61 6d 65 20 64 62 20 72 75 6e 2d testname db run-
8980: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
8990: 6d 2d 70 61 74 68 20 73 74 61 74 75 73 20 73 74 m-path status st
89a0: 61 74 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a ate). (sqlite3:
89b0: 65 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 execute db "UPDA
89c0: 54 45 20 74 65 73 74 73 20 53 45 54 20 73 74 61 TE tests SET sta
89d0: 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 2c 65 76 te=?,status=?,ev
89e0: 65 6e 74 5f 74 69 6d 65 3d 73 74 72 66 74 69 6d ent_time=strftim
89f0: 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 57 48 e('%s','now') WH
8a00: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 ERE run_id=? AND
8a10: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 testname=? AND
8a20: 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 0a 09 item_path=?;" ..
8a30: 09 20 20 20 73 74 61 74 65 20 73 74 61 74 75 73 . state status
8a40: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
8a50: 65 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a 28 e item-path))..(
8a60: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 63 define (db:get-c
8a70: 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e 69 ount-tests-runni
8a80: 6e 67 20 64 62 29 0a 20 20 28 6c 65 74 20 28 28 ng db). (let ((
8a90: 72 65 73 20 30 29 29 0a 20 20 20 20 28 73 71 6c res 0)). (sql
8aa0: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
8ab0: 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 w. (lambda (
8ac0: 63 6f 75 6e 74 29 0a 20 20 20 20 20 20 20 28 73 count). (s
8ad0: 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 29 0a et! res count)).
8ae0: 20 20 20 20 20 64 62 0a 20 20 20 20 20 22 53 45 db. "SE
8af0: 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 LECT count(id) F
8b00: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
8b10: 73 74 61 74 65 20 69 6e 20 28 27 52 55 4e 4e 49 state in ('RUNNI
8b20: 4e 47 27 2c 27 4c 41 55 4e 43 48 45 44 27 2c 27 NG','LAUNCHED','
8b30: 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 REMOTEHOSTSTART'
8b40: 29 3b 22 29 0a 20 20 20 20 72 65 73 29 29 0a 0a );"). res))..
8b50: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
8b60: 63 6f 75 6e 74 2d 74 65 73 74 73 2d 72 75 6e 6e count-tests-runn
8b70: 69 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 ing-in-jobgroup
8b80: 64 62 20 6a 6f 62 67 72 6f 75 70 29 0a 20 20 28 db jobgroup). (
8b90: 69 66 20 28 6e 6f 74 20 6a 6f 62 67 72 6f 75 70 if (not jobgroup
8ba0: 29 0a 20 20 20 20 20 20 30 20 3b 3b 20 0a 20 20 ). 0 ;; .
8bb0: 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 30 (let ((res 0
8bc0: 29 29 0a 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 ))..(sqlite3:for
8bd0: 2d 65 61 63 68 2d 72 6f 77 0a 09 20 28 6c 61 6d -each-row.. (lam
8be0: 62 64 61 20 28 63 6f 75 6e 74 29 0a 09 20 20 20 bda (count)..
8bf0: 28 73 65 74 21 20 72 65 73 20 63 6f 75 6e 74 29 (set! res count)
8c00: 29 0a 09 20 64 62 0a 09 20 22 53 45 4c 45 43 54 ).. db.. "SELECT
8c10: 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 count(id) FROM
8c20: 74 65 73 74 73 20 57 48 45 52 45 20 73 74 61 74 tests WHERE stat
8c30: 65 20 3d 20 27 52 55 4e 4e 49 4e 47 27 20 4f 52 e = 'RUNNING' OR
8c40: 20 73 74 61 74 65 20 3d 20 27 4c 41 55 4e 43 48 state = 'LAUNCH
8c50: 45 44 27 20 4f 52 20 73 74 61 74 65 20 3d 20 27 ED' OR state = '
8c60: 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 27 REMOTEHOSTSTART'
8c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e . AN
8c80: 44 20 74 65 73 74 6e 61 6d 65 20 69 6e 20 28 53 D testname in (S
8c90: 45 4c 45 43 54 20 74 65 73 74 6e 61 6d 65 20 46 ELECT testname F
8ca0: 52 4f 4d 20 74 65 73 74 5f 6d 65 74 61 20 57 48 ROM test_meta WH
8cb0: 45 52 45 20 6a 6f 62 67 72 6f 75 70 3d 3f 3b 22 ERE jobgroup=?;"
8cc0: 0a 09 20 6a 6f 62 67 72 6f 75 70 29 0a 09 72 65 .. jobgroup)..re
8cd0: 73 29 29 29 0a 0a 3b 3b 20 64 6f 6e 65 20 77 69 s)))..;; done wi
8ce0: 74 68 20 72 75 6e 20 77 68 65 6e 3a 0a 3b 3b 20 th run when:.;;
8cf0: 20 20 30 20 74 65 73 74 73 20 69 6e 20 4c 41 55 0 tests in LAU
8d00: 4e 43 48 45 44 2c 20 4e 4f 54 5f 53 54 41 52 54 NCHED, NOT_START
8d10: 45 44 2c 20 52 45 4d 4f 54 45 48 4f 53 54 53 54 ED, REMOTEHOSTST
8d20: 41 52 54 2c 20 52 55 4e 4e 49 4e 47 0a 28 64 65 ART, RUNNING.(de
8d30: 66 69 6e 65 20 28 64 62 3a 65 73 74 69 6d 61 74 fine (db:estimat
8d40: 65 64 2d 74 65 73 74 73 2d 72 65 6d 61 69 6e 69 ed-tests-remaini
8d50: 6e 67 20 64 62 20 72 75 6e 2d 69 64 29 0a 20 20 ng db run-id).
8d60: 28 6c 65 74 20 28 28 72 65 73 20 30 29 29 0a 20 (let ((res 0)).
8d70: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
8d80: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
8d90: 61 6d 62 64 61 20 28 63 6f 75 6e 74 29 0a 20 20 ambda (count).
8da0: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 63 (set! res c
8db0: 6f 75 6e 74 29 29 0a 20 20 20 20 20 64 62 20 3b ount)). db ;
8dc0: 3b 20 4e 42 2f 2f 20 4b 49 4c 4c 52 45 51 20 6d ; NB// KILLREQ m
8dd0: 65 61 6e 73 20 74 68 65 20 6a 6f 62 73 20 69 73 eans the jobs is
8de0: 20 73 74 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 still probably
8df0: 72 75 6e 6e 69 6e 67 0a 20 20 20 20 20 22 53 45 running. "SE
8e00: 4c 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 LECT count(id) F
8e10: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
8e20: 73 74 61 74 65 20 69 6e 20 28 27 4c 41 55 4e 43 state in ('LAUNC
8e30: 48 45 44 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 HED','NOT_STARTE
8e40: 44 27 2c 27 52 45 4d 4f 54 45 48 4f 53 54 53 54 D','REMOTEHOSTST
8e50: 41 52 54 27 2c 27 52 55 4e 4e 49 4e 47 27 2c 27 ART','RUNNING','
8e60: 4b 49 4c 4c 52 45 51 27 29 20 41 4e 44 20 72 75 KILLREQ') AND ru
8e70: 6e 5f 69 64 3d 3f 3b 22 20 72 75 6e 2d 69 64 29 n_id=?;" run-id)
8e80: 0a 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 6d . res))..;; m
8e90: 61 70 20 72 75 6e 2d 69 64 2c 20 74 65 73 74 6e ap run-id, testn
8ea0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 74 6f ame item-path to
8eb0: 20 74 65 73 74 2d 69 64 0a 28 64 65 66 69 6e 65 test-id.(define
8ec0: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 64 (db:get-test-id
8ed0: 2d 63 61 63 68 65 64 20 64 62 20 72 75 6e 2d 69 -cached db run-i
8ee0: 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d d testname item-
8ef0: 70 61 74 68 29 0a 20 20 28 6c 65 74 2a 20 28 28 path). (let* ((
8f00: 74 65 73 74 2d 6b 65 79 20 28 63 6f 6e 63 20 72 test-key (conc r
8f10: 75 6e 2d 69 64 20 22 2d 22 20 74 65 73 74 6e 61 un-id "-" testna
8f20: 6d 65 20 22 2d 22 20 69 74 65 6d 2d 70 61 74 68 me "-" item-path
8f30: 29 29 0a 09 20 28 72 65 73 20 20 20 20 20 20 28 )).. (res (
8f40: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 hash-table-ref/d
8f50: 65 66 61 75 6c 74 20 2a 74 65 73 74 2d 69 64 73 efault *test-ids
8f60: 2a 20 74 65 73 74 2d 6b 65 79 20 23 66 29 29 29 * test-key #f)))
8f70: 0a 20 20 20 20 28 69 66 20 72 65 73 20 0a 09 72 . (if res ..r
8f80: 65 73 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 73 es..(begin.. (s
8f90: 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d qlite3:for-each-
8fa0: 72 6f 77 0a 09 20 20 20 28 6c 61 6d 62 64 61 20 row.. (lambda
8fb0: 28 69 64 29 20 3b 3b 20 20 72 75 6e 2d 69 64 20 (id) ;; run-id
8fc0: 74 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 testname state s
8fd0: 74 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 tatus event-time
8fe0: 20 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 host cpuload di
8ff0: 73 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e skfree uname run
9000: 64 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 dir item-path ru
9010: 6e 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c n_duration final
9020: 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 0a _logf comment ).
9030: 09 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 . (set! res
9040: 69 64 29 29 20 3b 3b 20 28 76 65 63 74 6f 72 20 id)) ;; (vector
9050: 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 id run-id testna
9060: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
9070: 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 event-time host
9080: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
9090: 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 uname rundir it
90a0: 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 em-path run_dura
90b0: 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 tion final_logf
90c0: 63 6f 6d 6d 65 6e 74 20 29 29 29 0a 09 20 20 20 comment )))..
90d0: 64 62 20 0a 09 20 20 20 22 53 45 4c 45 43 54 20 db .. "SELECT
90e0: 69 64 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 id FROM tests WH
90f0: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 ERE run_id=? AND
9100: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 testname=? AND
9110: 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 09 20 item_path=?;"..
9120: 20 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d run-id testnam
9130: 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 09 20 20 e item-path)..
9140: 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 (hash-table-set!
9150: 20 2a 74 65 73 74 2d 69 64 73 2a 20 74 65 73 74 *test-ids* test
9160: 2d 6b 65 79 20 72 65 73 29 0a 09 20 20 72 65 73 -key res).. res
9170: 29 29 29 29 0a 0a 3b 3b 20 6d 61 70 20 72 75 6e ))))..;; map run
9180: 2d 69 64 2c 20 74 65 73 74 6e 61 6d 65 20 69 74 -id, testname it
9190: 65 6d 2d 70 61 74 68 20 74 6f 20 74 65 73 74 2d em-path to test-
91a0: 69 64 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 67 id.(define (db:g
91b0: 65 74 2d 74 65 73 74 2d 69 64 2d 6e 6f 74 2d 63 et-test-id-not-c
91c0: 61 63 68 65 64 20 64 62 20 72 75 6e 2d 69 64 20 ached db run-id
91d0: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 testname item-pa
91e0: 74 68 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 th). (let* ((re
91f0: 73 20 23 66 29 29 0a 20 20 20 20 28 73 71 6c 69 s #f)). (sqli
9200: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
9210: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 . (lambda (i
9220: 64 29 20 3b 3b 20 20 72 75 6e 2d 69 64 20 74 65 d) ;; run-id te
9230: 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 stname state sta
9240: 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 68 tus event-time h
9250: 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 6b ost cpuload disk
9260: 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 69 free uname rundi
9270: 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e 5f r item-path run_
9280: 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c duration final_l
9290: 6f 67 66 20 63 6f 6d 6d 65 6e 74 20 29 0a 20 20 ogf comment ).
92a0: 20 20 20 20 20 28 73 65 74 21 20 72 65 73 20 69 (set! res i
92b0: 64 29 29 20 3b 3b 20 28 76 65 63 74 6f 72 20 69 d)) ;; (vector i
92c0: 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d d run-id testnam
92d0: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 65 e state status e
92e0: 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 vent-time host c
92f0: 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 puload diskfree
9300: 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 uname rundir ite
9310: 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 m-path run_durat
9320: 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 ion final_logf c
9330: 6f 6d 6d 65 6e 74 20 29 29 29 0a 20 20 20 20 20 omment ))).
9340: 64 62 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 db . "SELECT
9350: 20 69 64 20 46 52 4f 4d 20 74 65 73 74 73 20 57 id FROM tests W
9360: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
9370: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
9380: 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 item_path=?;".
9390: 20 20 20 20 72 75 6e 2d 69 64 20 74 65 73 74 6e run-id testn
93a0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 ame item-path).
93b0: 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 69 6e res))..(defin
93c0: 65 20 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 64 e db:get-test-id
93d0: 20 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 64 2d db:get-test-id-
93e0: 63 61 63 68 65 64 29 0a 0a 3b 3b 20 67 69 76 65 cached)..;; give
93f0: 6e 20 61 20 74 65 73 74 2d 69 6e 66 6f 20 72 65 n a test-info re
9400: 63 6f 72 64 2c 20 70 61 74 63 68 20 69 6e 20 74 cord, patch in t
9410: 68 65 20 6c 61 74 65 73 74 20 64 61 74 61 20 66 he latest data f
9420: 72 6f 6d 20 74 68 65 20 74 65 73 74 64 61 74 2e rom the testdat.
9430: 64 62 20 66 69 6c 65 0a 3b 3b 20 66 6f 75 6e 64 db file.;; found
9440: 20 69 6e 20 74 68 65 20 74 65 73 74 20 72 75 6e in the test run
9450: 20 64 69 72 65 63 74 6f 72 79 0a 28 64 65 66 69 directory.(defi
9460: 6e 65 20 28 64 62 3a 70 61 74 63 68 2d 74 64 62 ne (db:patch-tdb
9470: 2d 64 61 74 61 2d 69 6e 74 6f 2d 74 65 73 74 2d -data-into-test-
9480: 69 6e 66 6f 20 64 62 20 74 65 73 74 2d 69 64 20 info db test-id
9490: 72 65 73 29 0a 20 20 28 6c 65 74 20 28 28 74 64 res). (let ((td
94a0: 62 20 28 64 62 3a 6f 70 65 6e 2d 74 65 73 74 2d b (db:open-test-
94b0: 64 62 2d 62 79 2d 74 65 73 74 2d 69 64 20 64 62 db-by-test-id db
94c0: 20 74 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 test-id))).
94d0: 3b 3b 20 67 65 74 20 73 74 61 74 65 20 61 6e 64 ;; get state and
94e0: 20 73 74 61 74 75 73 20 66 72 6f 6d 20 6d 65 67 status from meg
94f0: 61 74 65 73 74 2e 64 62 20 69 6e 20 72 65 61 6c atest.db in real
9500: 20 74 69 6d 65 0a 20 20 20 20 3b 3b 20 6f 74 68 time. ;; oth
9510: 65 72 20 66 69 65 6c 64 73 20 74 68 61 74 20 70 er fields that p
9520: 65 72 68 61 70 73 20 73 68 6f 75 6c 64 20 62 65 erhaps should be
9530: 20 75 70 64 61 74 65 64 3a 0a 20 20 20 20 3b 3b updated:. ;;
9540: 20 20 20 66 61 69 6c 5f 63 6f 75 6e 74 0a 20 20 fail_count.
9550: 20 20 3b 3b 20 20 20 70 61 73 73 5f 63 6f 75 6e ;; pass_coun
9560: 74 0a 20 20 20 20 3b 3b 20 20 20 66 69 6e 61 6c t. ;; final
9570: 5f 6c 6f 67 66 0a 20 20 20 20 28 73 71 6c 69 74 _logf. (sqlit
9580: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 0a e3:for-each-row.
9590: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 73 74 (lambda (st
95a0: 61 74 65 20 73 74 61 74 75 73 20 66 69 6e 61 6c ate status final
95b0: 5f 6c 6f 67 66 29 0a 20 20 20 20 20 20 20 28 64 _logf). (d
95c0: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 b:test-set-state
95d0: 21 20 20 20 20 20 20 20 20 72 65 73 20 73 74 61 ! res sta
95e0: 74 65 29 0a 20 20 20 20 20 20 20 28 64 62 3a 74 te). (db:t
95f0: 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20 est-set-status!
9600: 20 20 20 20 20 20 72 65 73 20 73 74 61 74 75 73 res status
9610: 29 0a 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 ). (db:tes
9620: 74 2d 73 65 74 2d 66 69 6e 61 6c 5f 6c 6f 67 66 t-set-final_logf
9630: 21 20 20 20 72 65 73 20 66 69 6e 61 6c 5f 6c 6f ! res final_lo
9640: 67 66 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 gf)). db.
9650: 20 20 22 53 45 4c 45 43 54 20 73 74 61 74 65 2c "SELECT state,
9660: 73 74 61 74 75 73 2c 66 69 6e 61 6c 5f 6c 6f 67 status,final_log
9670: 66 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 f FROM tests WHE
9680: 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 20 20 74 RE id=?;". t
9690: 65 73 74 2d 69 64 29 0a 20 20 20 20 28 69 66 20 est-id). (if
96a0: 74 64 62 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 tdb..(begin.. (
96b0: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
96c0: 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d 62 64 61 -row.. (lambda
96d0: 20 28 75 70 64 61 74 65 5f 74 69 6d 65 20 63 70 (update_time cp
96e0: 75 6c 6f 61 64 20 64 69 73 6b 5f 66 72 65 65 20 uload disk_free
96f0: 72 75 6e 5f 64 75 72 61 74 69 6f 6e 29 0a 09 20 run_duration)..
9700: 20 20 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 (db:test-set
9710: 2d 63 70 75 6c 6f 61 64 21 20 20 20 20 20 20 72 -cpuload! r
9720: 65 73 20 63 70 75 6c 6f 61 64 29 0a 09 20 20 20 es cpuload)..
9730: 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 64 (db:test-set-d
9740: 69 73 6b 66 72 65 65 21 20 20 20 20 20 72 65 73 iskfree! res
9750: 20 64 69 73 6b 5f 66 72 65 65 29 0a 09 20 20 20 disk_free)..
9760: 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d 72 (db:test-set-r
9770: 75 6e 5f 64 75 72 61 74 69 6f 6e 21 20 72 65 73 un_duration! res
9780: 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 29 29 0a run_duration)).
9790: 09 20 20 20 74 64 62 0a 09 20 20 20 22 53 45 4c . tdb.. "SEL
97a0: 45 43 54 20 75 70 64 61 74 65 5f 74 69 6d 65 2c ECT update_time,
97b0: 63 70 75 6c 6f 61 64 2c 64 69 73 6b 66 72 65 65 cpuload,diskfree
97c0: 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 46 52 ,run_duration FR
97d0: 4f 4d 20 74 65 73 74 5f 72 75 6e 64 61 74 20 4f OM test_rundat O
97e0: 52 44 45 52 20 42 59 20 69 64 20 44 45 53 43 20 RDER BY id DESC
97f0: 4c 49 4d 49 54 20 31 3b 22 29 0a 09 20 20 28 73 LIMIT 1;").. (s
9800: 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 qlite3:finalize!
9810: 20 74 64 62 29 29 0a 09 3b 3b 20 69 66 20 74 68 tdb))..;; if th
9820: 65 20 74 65 73 74 20 64 62 20 69 73 20 6e 6f 74 e test db is not
9830: 20 66 6f 75 6e 64 20 77 68 61 74 20 74 6f 20 64 found what to d
9840: 6f 3f 0a 09 3b 3b 20 31 2e 20 73 65 74 20 73 74 o?..;; 1. set st
9850: 61 74 65 20 74 6f 20 44 45 4c 45 54 45 44 0a 09 ate to DELETED..
9860: 3b 3b 20 32 2e 20 73 65 74 20 73 74 61 74 75 73 ;; 2. set status
9870: 20 74 6f 20 6e 2f 61 0a 09 28 62 65 67 69 6e 0a to n/a..(begin.
9880: 09 20 20 28 64 62 3a 74 65 73 74 2d 73 65 74 2d . (db:test-set-
9890: 73 74 61 74 65 21 20 20 72 65 73 20 22 4e 4f 54 state! res "NOT
98a0: 5f 53 54 41 52 54 45 44 22 29 0a 09 20 20 28 64 _STARTED").. (d
98b0: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 b:test-set-statu
98c0: 73 21 20 72 65 73 20 22 6e 2f 61 22 29 29 29 29 s! res "n/a"))))
98d0: 29 0a 0a 28 64 65 66 69 6e 65 20 2a 6c 61 73 74 )..(define *last
98e0: 2d 74 65 73 74 2d 63 61 63 68 65 2d 64 65 6c 65 -test-cache-dele
98f0: 74 65 2a 20 28 63 75 72 72 65 6e 74 2d 73 65 63 te* (current-sec
9900: 6f 6e 64 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 onds))..(define
9910: 28 64 62 3a 63 6c 65 61 6e 2d 61 6c 6c 2d 63 61 (db:clean-all-ca
9920: 63 68 65 73 29 0a 20 20 28 73 65 74 21 20 2a 74 ches). (set! *t
9930: 65 73 74 2d 69 6e 66 6f 2a 20 28 6d 61 6b 65 2d est-info* (make-
9940: 68 61 73 68 2d 74 61 62 6c 65 29 29 0a 20 20 28 hash-table)). (
9950: 73 65 74 21 20 2a 74 65 73 74 2d 69 64 2d 63 61 set! *test-id-ca
9960: 63 68 65 2a 20 28 6d 61 6b 65 2d 68 61 73 68 2d che* (make-hash-
9970: 74 61 62 6c 65 29 29 29 0a 0a 3b 3b 20 47 65 74 table)))..;; Get
9980: 20 74 65 73 74 20 64 61 74 61 20 75 73 69 6e 67 test data using
9990: 20 74 65 73 74 5f 69 64 0a 28 64 65 66 69 6e 65 test_id.(define
99a0: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e (db:get-test-in
99b0: 66 6f 2d 63 61 63 68 65 64 2d 62 79 2d 69 64 20 fo-cached-by-id
99c0: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 3b 3b db test-id). ;;
99d0: 20 69 73 20 61 6c 6c 20 74 68 69 73 20 63 72 61 is all this cra
99e0: 70 20 72 65 61 6c 6c 79 20 77 6f 72 74 68 20 69 p really worth i
99f0: 74 3f 20 49 20 73 6f 6d 65 68 6f 77 20 64 6f 75 t? I somehow dou
9a00: 62 74 20 69 74 2e 0a 20 20 28 6c 65 74 2a 20 28 bt it.. (let* (
9a10: 28 6c 61 73 74 2d 64 65 6c 65 74 65 2d 73 74 72 (last-delete-str
9a20: 20 28 64 62 3a 67 65 74 2d 76 61 72 20 64 62 20 (db:get-var db
9a30: 22 44 45 4c 45 54 45 44 5f 54 45 53 54 53 22 29 "DELETED_TESTS")
9a40: 29 0a 09 20 28 6c 61 73 74 2d 64 65 6c 65 74 65 ).. (last-delete
9a50: 20 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 (if (string
9a60: 3f 20 6c 61 73 74 2d 64 65 6c 65 74 65 2d 73 74 ? last-delete-st
9a70: 72 29 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 r)(string->numbe
9a80: 72 20 6c 61 73 74 2d 64 65 6c 65 74 65 2d 73 74 r last-delete-st
9a90: 72 29 20 23 66 29 29 29 0a 20 20 20 20 28 69 66 r) #f))). (if
9aa0: 20 28 61 6e 64 20 6c 61 73 74 2d 64 65 6c 65 74 (and last-delet
9ab0: 65 20 28 3e 20 6c 61 73 74 2d 64 65 6c 65 74 65 e (> last-delete
9ac0: 20 2a 6c 61 73 74 2d 74 65 73 74 2d 63 61 63 68 *last-test-cach
9ad0: 65 2d 64 65 6c 65 74 65 2a 29 29 0a 09 28 62 65 e-delete*))..(be
9ae0: 67 69 6e 0a 09 20 20 28 73 65 74 21 20 2a 74 65 gin.. (set! *te
9af0: 73 74 2d 69 6e 66 6f 2a 20 28 6d 61 6b 65 2d 68 st-info* (make-h
9b00: 61 73 68 2d 74 61 62 6c 65 29 29 0a 09 20 20 28 ash-table)).. (
9b10: 73 65 74 21 20 2a 74 65 73 74 2d 69 64 2d 63 61 set! *test-id-ca
9b20: 63 68 65 2a 20 28 6d 61 6b 65 2d 68 61 73 68 2d che* (make-hash-
9b30: 74 61 62 6c 65 29 29 0a 09 20 20 28 73 65 74 21 table)).. (set!
9b40: 20 2a 6c 61 73 74 2d 74 65 73 74 2d 63 61 63 68 *last-test-cach
9b50: 65 2d 64 65 6c 65 74 65 2a 20 6c 61 73 74 2d 64 e-delete* last-d
9b60: 65 6c 65 74 65 29 0a 09 20 20 28 64 65 62 75 67 elete).. (debug
9b70: 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 34 20 22 43 :print-info 4 "C
9b80: 6c 65 61 72 69 6e 67 20 74 65 73 74 20 64 61 74 learing test dat
9b90: 61 20 63 61 63 68 65 22 29 29 29 29 0a 20 20 28 a cache")))). (
9ba0: 69 66 20 28 6e 6f 74 20 74 65 73 74 2d 69 64 29 if (not test-id)
9bb0: 0a 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 28 . (begin..(
9bc0: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f debug:print-info
9bd0: 20 34 20 22 64 62 3a 67 65 74 2d 74 65 73 74 2d 4 "db:get-test-
9be0: 69 6e 66 6f 2d 62 79 2d 69 64 20 63 61 6c 6c 65 info-by-id calle
9bf0: 64 20 77 69 74 68 20 74 65 73 74 2d 69 64 3d 22 d with test-id="
9c00: 20 74 65 73 74 2d 69 64 29 0a 09 23 66 29 0a 20 test-id)..#f).
9c10: 20 20 20 20 20 28 6c 65 74 2a 20 28 28 72 65 73 (let* ((res
9c20: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 (hash-table-ref
9c30: 2f 64 65 66 61 75 6c 74 20 2a 74 65 73 74 2d 69 /default *test-i
9c40: 6e 66 6f 2a 20 74 65 73 74 2d 69 64 20 23 66 29 nfo* test-id #f)
9c50: 29 29 0a 09 28 69 66 20 28 61 6e 64 20 72 65 73 ))..(if (and res
9c60: 0a 09 09 20 28 6d 65 6d 62 65 72 20 28 64 62 3a ... (member (db:
9c70: 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20 72 test-get-state r
9c80: 65 73 29 20 27 28 22 52 55 4e 4e 49 4e 47 22 20 es) '("RUNNING"
9c90: 22 43 4f 4d 50 4c 45 54 45 44 22 29 29 29 0a 09 "COMPLETED")))..
9ca0: 20 20 20 20 28 64 62 3a 70 61 74 63 68 2d 74 64 (db:patch-td
9cb0: 62 2d 64 61 74 61 2d 69 6e 74 6f 2d 74 65 73 74 b-data-into-test
9cc0: 2d 69 6e 66 6f 20 64 62 20 74 65 73 74 2d 69 64 -info db test-id
9cd0: 20 72 65 73 29 0a 09 20 20 20 20 3b 3b 20 69 66 res).. ;; if
9ce0: 20 6e 6f 20 63 61 63 68 65 64 20 76 61 6c 75 65 no cached value
9cf0: 20 74 68 65 6e 20 66 75 6c 6c 20 72 65 61 64 20 then full read
9d00: 61 6e 64 20 77 72 69 74 65 20 74 6f 20 63 61 63 and write to cac
9d10: 68 65 0a 09 20 20 20 20 28 62 65 67 69 6e 0a 09 he.. (begin..
9d20: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 (sqlite3:f
9d30: 6f 72 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 20 or-each-row..
9d40: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 69 64 20 (lambda (id
9d50: 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 run-id testname
9d60: 73 74 61 74 65 20 73 74 61 74 75 73 20 65 76 65 state status eve
9d70: 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 63 70 75 nt-time host cpu
9d80: 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 20 75 6e load diskfree un
9d90: 61 6d 65 20 72 75 6e 64 69 72 20 69 74 65 6d 2d ame rundir item-
9da0: 70 61 74 68 20 72 75 6e 5f 64 75 72 61 74 69 6f path run_duratio
9db0: 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d n final_logf com
9dc0: 6d 65 6e 74 29 0a 09 09 20 3b 3b 20 20 20 20 20 ment)... ;;
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 0
9de0: 20 31 20 20 20 20 20 20 20 32 20 20 20 20 20 20 1 2
9df0: 33 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 3 4
9e00: 35 20 20 20 20 20 20 20 36 20 20 20 20 20 20 37 5 6 7
9e10: 20 20 20 20 20 20 20 20 38 20 20 20 20 20 39 20 8 9
9e20: 20 20 20 20 31 30 20 20 20 20 20 20 31 31 20 20 10 11
9e30: 20 20 20 20 20 20 20 20 31 32 20 20 20 20 20 20 12
9e40: 20 20 20 20 31 33 20 20 20 20 20 20 20 31 34 0a 13 14.
9e50: 09 09 20 28 73 65 74 21 20 72 65 73 20 28 76 65 .. (set! res (ve
9e60: 63 74 6f 72 20 69 64 20 72 75 6e 2d 69 64 20 74 ctor id run-id t
9e70: 65 73 74 6e 61 6d 65 20 73 74 61 74 65 20 73 74 estname state st
9e80: 61 74 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 atus event-time
9e90: 68 6f 73 74 20 63 70 75 6c 6f 61 64 20 64 69 73 host cpuload dis
9ea0: 6b 66 72 65 65 20 75 6e 61 6d 65 20 72 75 6e 64 kfree uname rund
9eb0: 69 72 20 69 74 65 6d 2d 70 61 74 68 20 72 75 6e ir item-path run
9ec0: 5f 64 75 72 61 74 69 6f 6e 20 66 69 6e 61 6c 5f _duration final_
9ed0: 6c 6f 67 66 20 63 6f 6d 6d 65 6e 74 29 29 29 0a logf comment))).
9ee0: 09 20 20 20 20 20 20 20 64 62 20 0a 09 20 20 20 . db ..
9ef0: 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 72 "SELECT id,r
9f00: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 un_id,testname,s
9f10: 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e tate,status,even
9f20: 74 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c t_time,host,cpul
9f30: 6f 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 oad,diskfree,una
9f40: 6d 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 me,rundir,item_p
9f50: 61 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e ath,run_duration
9f60: 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d ,final_logf,comm
9f70: 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 ent FROM tests W
9f80: 48 45 52 45 20 69 64 3d 3f 3b 22 0a 09 20 20 20 HERE id=?;"..
9f90: 20 20 20 20 74 65 73 74 2d 69 64 29 0a 09 20 20 test-id)..
9fa0: 20 20 20 20 28 69 66 20 72 65 73 20 28 64 62 3a (if res (db:
9fb0: 70 61 74 63 68 2d 74 64 62 2d 64 61 74 61 2d 69 patch-tdb-data-i
9fc0: 6e 74 6f 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 nto-test-info db
9fd0: 20 74 65 73 74 2d 69 64 20 72 65 73 29 29 0a 09 test-id res))..
9fe0: 20 20 20 20 20 20 72 65 73 29 29 29 29 29 0a 0a res)))))..
9ff0: 3b 3b 20 47 65 74 20 74 65 73 74 20 64 61 74 61 ;; Get test data
a000: 20 75 73 69 6e 67 20 74 65 73 74 5f 69 64 0a 28 using test_id.(
a010: 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 define (db:get-t
a020: 65 73 74 2d 69 6e 66 6f 2d 6e 6f 74 2d 63 61 63 est-info-not-cac
a030: 68 65 64 2d 62 79 2d 69 64 20 64 62 20 74 65 73 hed-by-id db tes
a040: 74 2d 69 64 29 0a 20 20 28 69 66 20 28 6e 6f 74 t-id). (if (not
a050: 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 test-id).
a060: 28 62 65 67 69 6e 0a 09 28 64 65 62 75 67 3a 70 (begin..(debug:p
a070: 72 69 6e 74 2d 69 6e 66 6f 20 34 20 22 64 62 3a rint-info 4 "db:
a080: 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 2d 62 79 get-test-info-by
a090: 2d 69 64 20 63 61 6c 6c 65 64 20 77 69 74 68 20 -id called with
a0a0: 74 65 73 74 2d 69 64 3d 22 20 74 65 73 74 2d 69 test-id=" test-i
a0b0: 64 29 0a 09 23 66 29 0a 20 20 20 20 20 20 28 6c d)..#f). (l
a0c0: 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 09 28 et ((res #f))..(
a0d0: 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 sqlite3:for-each
a0e0: 2d 72 6f 77 0a 09 20 28 6c 61 6d 62 64 61 20 28 -row.. (lambda (
a0f0: 69 64 20 72 75 6e 2d 69 64 20 74 65 73 74 6e 61 id run-id testna
a100: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
a110: 65 76 65 6e 74 2d 74 69 6d 65 20 68 6f 73 74 20 event-time host
a120: 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 65 cpuload diskfree
a130: 20 75 6e 61 6d 65 20 72 75 6e 64 69 72 20 69 74 uname rundir it
a140: 65 6d 2d 70 61 74 68 20 72 75 6e 5f 64 75 72 61 em-path run_dura
a150: 74 69 6f 6e 20 66 69 6e 61 6c 5f 6c 6f 67 66 20 tion final_logf
a160: 63 6f 6d 6d 65 6e 74 29 0a 09 20 20 20 3b 3b 20 comment).. ;;
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a180: 30 20 20 20 20 31 20 20 20 20 20 20 20 32 20 20 0 1 2
a190: 20 20 20 20 33 20 20 20 20 20 20 34 20 20 20 20 3 4
a1a0: 20 20 20 20 35 20 20 20 20 20 20 20 36 20 20 20 5 6
a1b0: 20 20 20 37 20 20 20 20 20 20 20 20 38 20 20 20 7 8
a1c0: 20 20 39 20 20 20 20 20 31 30 20 20 20 20 20 20 9 10
a1d0: 31 31 20 20 20 20 20 20 20 20 20 20 31 32 20 20 11 12
a1e0: 20 20 20 20 20 20 20 20 31 33 20 20 20 20 20 20 13
a1f0: 20 31 34 0a 09 20 20 20 28 73 65 74 21 20 72 65 14.. (set! re
a200: 73 20 28 76 65 63 74 6f 72 20 69 64 20 72 75 6e s (vector id run
a210: 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 73 74 61 -id testname sta
a220: 74 65 20 73 74 61 74 75 73 20 65 76 65 6e 74 2d te status event-
a230: 74 69 6d 65 20 68 6f 73 74 20 63 70 75 6c 6f 61 time host cpuloa
a240: 64 20 64 69 73 6b 66 72 65 65 20 75 6e 61 6d 65 d diskfree uname
a250: 20 72 75 6e 64 69 72 20 69 74 65 6d 2d 70 61 74 rundir item-pat
a260: 68 20 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 66 h run_duration f
a270: 69 6e 61 6c 5f 6c 6f 67 66 20 63 6f 6d 6d 65 6e inal_logf commen
a280: 74 29 29 29 0a 09 20 64 62 20 0a 09 20 22 53 45 t))).. db .. "SE
a290: 4c 45 43 54 20 69 64 2c 72 75 6e 5f 69 64 2c 74 LECT id,run_id,t
a2a0: 65 73 74 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74 estname,state,st
a2b0: 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c atus,event_time,
a2c0: 68 6f 73 74 2c 63 70 75 6c 6f 61 64 2c 64 69 73 host,cpuload,dis
a2d0: 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e 64 kfree,uname,rund
a2e0: 69 72 2c 69 74 65 6d 5f 70 61 74 68 2c 72 75 6e ir,item_path,run
a2f0: 5f 64 75 72 61 74 69 6f 6e 2c 66 69 6e 61 6c 5f _duration,final_
a300: 6c 6f 67 66 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f logf,comment FRO
a310: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 M tests WHERE id
a320: 3d 3f 3b 22 0a 09 20 74 65 73 74 2d 69 64 29 0a =?;".. test-id).
a330: 09 72 65 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 .res)))..(define
a340: 20 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 db:get-test-inf
a350: 6f 2d 62 79 2d 69 64 20 64 62 3a 67 65 74 2d 74 o-by-id db:get-t
a360: 65 73 74 2d 69 6e 66 6f 2d 6e 6f 74 2d 63 61 63 est-info-not-cac
a370: 68 65 64 2d 62 79 2d 69 64 29 0a 0a 28 64 65 66 hed-by-id)..(def
a380: 69 6e 65 20 28 64 62 3a 67 65 74 2d 74 65 73 74 ine (db:get-test
a390: 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69 64 20 -info db run-id
a3a0: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d 70 61 testname item-pa
a3b0: 74 68 29 0a 20 20 28 64 62 3a 67 65 74 2d 74 65 th). (db:get-te
a3c0: 73 74 2d 69 6e 66 6f 2d 62 79 2d 69 64 20 64 62 st-info-by-id db
a3d0: 20 28 64 62 3a 67 65 74 2d 74 65 73 74 2d 69 64 (db:get-test-id
a3e0: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 6e db run-id testn
a3f0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 ame item-path)))
a400: 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 ..(define (db:te
a410: 73 74 2d 73 65 74 2d 63 6f 6d 6d 65 6e 74 20 64 st-set-comment d
a420: 62 20 74 65 73 74 2d 69 64 20 63 6f 6d 6d 65 6e b test-id commen
a430: 74 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 t). (sqlite3:ex
a440: 65 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 ecute . db .
a450: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 "UPDATE tests S
a460: 45 54 20 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 ET comment=? WHE
a470: 52 45 20 69 64 3d 3f 3b 22 0a 20 20 20 63 6f 6d RE id=?;". com
a480: 6d 65 6e 74 20 74 65 73 74 2d 69 64 29 29 0a 0a ment test-id))..
a490: 3b 3b 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 ;;.(define (db:t
a4a0: 65 73 74 2d 73 65 74 2d 72 75 6e 64 69 72 21 20 est-set-rundir!
a4b0: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e db run-id test-n
a4c0: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 72 75 ame item-path ru
a4d0: 6e 64 69 72 29 0a 20 20 28 73 71 6c 69 74 65 33 ndir). (sqlite3
a4e0: 3a 65 78 65 63 75 74 65 20 0a 20 20 20 64 62 20 :execute . db
a4f0: 0a 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 . "UPDATE test
a500: 73 20 53 45 54 20 72 75 6e 64 69 72 3d 3f 20 57 s SET rundir=? W
a510: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e HERE run_id=? AN
a520: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 D testname=? AND
a530: 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 20 item_path=?;".
a540: 20 20 72 75 6e 64 69 72 20 72 75 6e 2d 69 64 20 rundir run-id
a550: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 test-name item-p
a560: 61 74 68 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ath))..(define (
a570: 64 62 3a 74 65 73 74 2d 73 65 74 2d 72 75 6e 64 db:test-set-rund
a580: 69 72 2d 62 79 2d 74 65 73 74 2d 69 64 21 20 64 ir-by-test-id! d
a590: 62 20 74 65 73 74 2d 69 64 20 72 75 6e 64 69 72 b test-id rundir
a5a0: 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ). (sqlite3:exe
a5b0: 63 75 74 65 20 0a 20 20 20 64 62 20 0a 20 20 20 cute . db .
a5c0: 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 "UPDATE tests SE
a5d0: 54 20 72 75 6e 64 69 72 3d 3f 20 57 48 45 52 45 T rundir=? WHERE
a5e0: 20 69 64 3d 3f 22 0a 20 20 20 72 75 6e 64 69 72 id=?". rundir
a5f0: 20 74 65 73 74 2d 69 64 29 29 0a 0a 3b 3b 20 0a test-id))..;; .
a600: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
a610: 2d 67 65 74 2d 72 75 6e 64 69 72 2d 66 72 6f 6d -get-rundir-from
a620: 2d 74 65 73 74 2d 69 64 20 64 62 20 74 65 73 74 -test-id db test
a630: 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 72 65 -id). (let ((re
a640: 73 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 s (hash-table-re
a650: 66 2f 64 65 66 61 75 6c 74 20 2a 74 65 73 74 2d f/default *test-
a660: 70 61 74 68 73 2a 20 74 65 73 74 2d 69 64 20 23 paths* test-id #
a670: 66 29 29 29 0a 20 20 20 20 28 69 66 20 72 65 73 f))). (if res
a680: 0a 09 72 65 73 0a 09 28 62 65 67 69 6e 0a 09 20 ..res..(begin..
a690: 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 (sqlite3:for-ea
a6a0: 63 68 2d 72 6f 77 0a 09 20 20 20 28 6c 61 6d 62 ch-row.. (lamb
a6b0: 64 61 20 28 74 70 61 74 68 29 0a 09 20 20 20 20 da (tpath)..
a6c0: 20 28 73 65 74 21 20 72 65 73 20 74 70 61 74 68 (set! res tpath
a6d0: 29 29 0a 09 20 20 20 64 62 20 0a 09 20 20 20 22 )).. db .. "
a6e0: 53 45 4c 45 43 54 20 72 75 6e 64 69 72 20 46 52 SELECT rundir FR
a6f0: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 OM tests WHERE i
a700: 64 3d 3f 3b 22 0a 09 20 20 20 74 65 73 74 2d 69 d=?;".. test-i
a710: 64 29 0a 09 20 20 28 68 61 73 68 2d 74 61 62 6c d).. (hash-tabl
a720: 65 2d 73 65 74 21 20 2a 74 65 73 74 2d 70 61 74 e-set! *test-pat
a730: 68 73 2a 20 74 65 73 74 2d 69 64 20 72 65 73 29 hs* test-id res)
a740: 0a 09 20 20 72 65 73 29 29 29 29 0a 0a 28 64 65 .. res))))..(de
a750: 66 69 6e 65 20 28 64 62 3a 74 65 73 74 2d 73 65 fine (db:test-se
a760: 74 2d 6c 6f 67 21 20 64 62 20 74 65 73 74 2d 69 t-log! db test-i
a770: 64 20 6c 6f 67 66 29 0a 20 20 28 69 66 20 28 73 d logf). (if (s
a780: 74 72 69 6e 67 3f 20 6c 6f 67 66 29 0a 20 20 20 tring? logf).
a790: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 (sqlite3:exec
a7a0: 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 74 ute db "UPDATE t
a7b0: 65 73 74 73 20 53 45 54 20 66 69 6e 61 6c 5f 6c ests SET final_l
a7c0: 6f 67 66 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f ogf=? WHERE id=?
a7d0: 3b 22 0a 09 09 20 20 20 20 20 20 20 6c 6f 67 66 ;"... logf
a7e0: 20 74 65 73 74 2d 69 64 29 0a 20 20 20 20 20 20 test-id).
a7f0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 (debug:print 0 "
a800: 45 52 52 4f 52 3a 20 64 62 3a 74 65 73 74 2d 73 ERROR: db:test-s
a810: 65 74 2d 6c 6f 67 21 20 63 61 6c 6c 65 64 20 77 et-log! called w
a820: 69 74 68 20 6e 6f 6e 2d 73 74 72 69 6e 67 20 6c ith non-string l
a830: 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20 22 20 6c og file name " l
a840: 6f 67 66 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d ogf)))..;;======
a850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a890: 0a 3b 3b 20 4d 69 73 63 2e 20 74 65 73 74 20 72 .;; Misc. test r
a8a0: 65 6c 61 74 65 64 20 71 75 65 72 69 65 73 0a 3b elated queries.;
a8b0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
a8c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a8d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a8e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a8f0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 =======..(define
a900: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 70 61 (db:test-get-pa
a910: 74 68 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 ths-matching db
a920: 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 20 keynames target
a930: 66 6e 61 6d 65 70 61 74 74 20 23 21 6b 65 79 20 fnamepatt #!key
a940: 28 72 65 73 20 27 28 29 29 29 0a 20 20 28 6c 65 (res '())). (le
a950: 74 2a 20 28 28 74 65 73 74 70 61 74 74 20 20 20 t* ((testpatt
a960: 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 (if (args:get-ar
a970: 67 20 22 2d 74 65 73 74 70 61 74 74 22 29 28 61 g "-testpatt")(a
a980: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 rgs:get-arg "-te
a990: 73 74 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 stpatt") "%"))..
a9a0: 20 28 73 74 61 74 65 70 61 74 74 20 20 28 69 66 (statepatt (if
a9b0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 (args:get-arg "
a9c0: 3a 73 74 61 74 65 22 29 20 20 20 28 61 72 67 73 :state") (args
a9d0: 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 :get-arg ":state
a9e0: 22 29 20 20 20 20 22 25 22 29 29 0a 09 20 28 73 ") "%")).. (s
a9f0: 74 61 74 75 73 70 61 74 74 20 28 69 66 20 28 61 tatuspatt (if (a
aa00: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 rgs:get-arg ":st
aa10: 61 74 75 73 22 29 20 20 28 61 72 67 73 3a 67 65 atus") (args:ge
aa20: 74 2d 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 t-arg ":status")
aa30: 20 20 20 22 25 22 29 29 0a 09 20 28 72 75 6e 6e "%")).. (runn
aa40: 61 6d 65 20 20 20 20 28 69 66 20 28 61 72 67 73 ame (if (args
aa50: 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 :get-arg ":runna
aa60: 6d 65 22 29 20 28 61 72 67 73 3a 67 65 74 2d 61 me") (args:get-a
aa70: 72 67 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 rg ":runname")
aa80: 22 25 22 29 29 0a 09 20 28 6b 65 79 73 74 72 20 "%")).. (keystr
aa90: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
aaa0: 72 73 65 20 0a 09 09 20 20 28 6d 61 70 20 28 6c rse ... (map (l
aab0: 61 6d 62 64 61 20 28 6b 65 79 20 76 61 6c 29 0a ambda (key val).
aac0: 09 09 09 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b ... (conc "r." k
aad0: 65 79 20 22 20 6c 69 6b 65 20 27 22 20 76 61 6c ey " like '" val
aae0: 20 22 27 22 29 29 0a 09 09 20 20 20 20 20 20 20 "'"))...
aaf0: 6b 65 79 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 keynames ...
ab00: 20 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 (string-split
ab10: 20 74 61 72 67 65 74 20 22 2f 22 29 29 0a 09 09 target "/"))...
ab20: 20 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28 74 " AND ")).. (t
ab30: 65 73 74 71 72 79 20 28 74 65 73 74 73 3a 6d 61 estqry (tests:ma
ab40: 74 63 68 2d 3e 73 71 6c 71 72 79 20 74 65 73 74 tch->sqlqry test
ab50: 70 61 74 74 29 29 0a 09 20 28 71 72 79 73 74 72 patt)).. (qrystr
ab60: 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 74 (conc "SELECT t
ab70: 2e 72 75 6e 64 69 72 20 46 52 4f 4d 20 74 65 73 .rundir FROM tes
ab80: 74 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f ts AS t INNER JO
ab90: 49 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 IN runs AS r ON
aba0: 74 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 t.run_id=r.id WH
abb0: 45 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 6b ERE "... k
abc0: 65 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 75 eystr " AND r.ru
abd0: 6e 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 nname LIKE '" ru
abe0: 6e 6e 61 6d 65 20 22 27 20 41 4e 44 20 22 20 74 nname "' AND " t
abf0: 65 73 74 71 72 79 0a 09 09 20 20 20 20 20 20 20 estqry...
ac00: 22 20 41 4e 44 20 74 2e 73 74 61 74 65 20 4c 49 " AND t.state LI
ac10: 4b 45 20 27 22 20 73 74 61 74 65 70 61 74 74 20 KE '" statepatt
ac20: 22 27 20 41 4e 44 20 74 2e 73 74 61 74 75 73 20 "' AND t.status
ac30: 4c 49 4b 45 20 27 22 20 73 74 61 74 75 73 70 61 LIKE '" statuspa
ac40: 74 74 20 0a 09 09 20 20 20 20 20 20 20 22 27 20 tt ... "'
ac50: 4f 52 44 45 52 20 42 59 20 74 2e 65 76 65 6e 74 ORDER BY t.event
ac60: 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 29 0a 20 _time ASC;"))).
ac70: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
ac80: 33 20 22 71 72 79 73 74 72 3a 20 22 20 71 72 79 3 "qrystr: " qry
ac90: 73 74 72 29 0a 20 20 20 20 28 73 71 6c 69 74 65 str). (sqlite
aca0: 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 0a 3:for-each-row .
acb0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 29 (lambda (p)
acc0: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65 . (set! re
acd0: 73 20 28 63 6f 6e 73 20 70 20 72 65 73 29 29 29 s (cons p res)))
ace0: 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 71 . db . q
acf0: 72 79 73 74 72 29 0a 20 20 20 20 28 69 66 20 66 rystr). (if f
ad00: 6e 61 6d 65 70 61 74 74 0a 09 28 61 70 70 6c 79 namepatt..(apply
ad10: 20 61 70 70 65 6e 64 20 0a 09 20 20 20 20 20 20 append ..
ad20: 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 70 (map (lambda (p
ad30: 29 0a 09 09 20 20 20 20 20 20 28 67 6c 6f 62 20 )... (glob
ad40: 28 63 6f 6e 63 20 70 20 22 2f 22 20 66 6e 61 6d (conc p "/" fnam
ad50: 65 70 61 74 74 29 29 29 0a 09 09 20 20 20 20 72 epatt)))... r
ad60: 65 73 29 29 0a 09 72 65 73 29 29 29 0a 0a 3b 3b es))..res)))..;;
ad70: 20 6c 6f 6f 6b 20 74 68 72 6f 75 67 68 20 74 65 look through te
ad80: 73 74 73 20 66 72 6f 6d 20 6d 61 74 63 68 69 6e sts from matchin
ad90: 67 20 72 75 6e 73 20 66 6f 72 20 61 20 66 69 6c g runs for a fil
ada0: 65 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 e.(define (db:te
adb0: 73 74 2d 67 65 74 2d 66 69 72 73 74 2d 70 61 74 st-get-first-pat
adc0: 68 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b 65 h-matching db ke
add0: 79 6e 61 6d 65 73 20 74 61 72 67 65 74 20 66 6e ynames target fn
ade0: 61 6d 65 29 0a 20 20 3b 3b 20 5b 72 65 66 70 61 ame). ;; [refpa
adf0: 74 68 73 5d 20 69 73 20 74 68 65 20 73 65 63 74 ths] is the sect
ae00: 69 6f 6e 20 77 68 65 72 65 20 72 65 66 65 72 65 ion where refere
ae10: 6e 63 65 73 20 74 6f 20 6f 74 68 65 72 20 6d 65 nces to other me
ae20: 67 61 74 65 73 74 20 64 61 74 61 62 61 73 65 73 gatest databases
ae30: 20 61 72 65 20 73 74 6f 72 65 64 0a 20 20 28 6c are stored. (l
ae40: 65 74 20 28 28 6d 74 2d 70 61 74 68 73 20 28 63 et ((mt-paths (c
ae50: 6f 6e 66 69 67 66 3a 67 65 74 2d 73 65 63 74 69 onfigf:get-secti
ae60: 6f 6e 20 22 72 65 66 70 61 74 68 73 22 29 29 0a on "refpaths")).
ae70: 09 28 72 65 73 20 20 20 20 20 20 20 28 64 62 3a .(res (db:
ae80: 74 65 73 74 2d 67 65 74 2d 70 61 74 68 73 2d 6d test-get-paths-m
ae90: 61 74 63 68 69 6e 67 20 64 62 20 6b 65 79 6e 61 atching db keyna
aea0: 6d 65 73 20 74 61 72 67 65 74 20 66 6e 61 6d 65 mes target fname
aeb0: 29 29 29 0a 20 20 20 20 28 6c 65 74 20 6c 6f 6f ))). (let loo
aec0: 70 20 28 28 70 61 74 68 64 61 74 20 28 69 66 20 p ((pathdat (if
aed0: 28 6e 75 6c 6c 3f 20 70 61 74 68 73 29 20 23 66 (null? paths) #f
aee0: 20 28 63 61 72 20 6d 74 2d 70 61 74 68 73 29 29 (car mt-paths))
aef0: 29 0a 09 20 20 20 20 20 20 20 28 74 61 6c 20 20 ).. (tal
af00: 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 70 61 (if (null? pa
af10: 74 68 73 29 20 27 28 29 28 63 64 72 20 6d 74 2d ths) '()(cdr mt-
af20: 70 61 74 68 73 29 29 29 29 0a 20 20 20 20 20 20 paths)))).
af30: 28 69 66 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 (if (not (null?
af40: 72 65 73 29 29 0a 09 20 20 28 63 61 72 20 72 65 res)).. (car re
af50: 73 29 20 3b 3b 20 72 65 74 75 72 6e 20 66 69 72 s) ;; return fir
af60: 73 74 20 66 6f 75 6e 64 0a 09 20 20 28 69 66 20 st found.. (if
af70: 70 61 74 68 0a 09 20 20 20 20 20 20 28 6c 65 74 path.. (let
af80: 2a 20 28 28 64 62 20 20 20 20 20 28 6f 70 65 6e * ((db (open
af90: 2d 64 62 20 70 61 74 68 3a 20 28 63 61 64 72 20 -db path: (cadr
afa0: 70 61 74 68 64 61 74 29 29 29 0a 09 09 20 20 20 pathdat)))...
afb0: 20 20 28 6e 65 77 72 65 73 20 28 64 62 3a 74 65 (newres (db:te
afc0: 73 74 2d 67 65 74 2d 70 61 74 68 73 2d 6d 61 74 st-get-paths-mat
afd0: 63 68 69 6e 67 20 64 62 20 6b 65 79 6e 61 6d 65 ching db keyname
afe0: 73 20 74 61 72 67 65 74 20 66 6e 61 6d 65 29 29 s target fname))
aff0: 29 0a 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 )...(debug:print
b000: 2d 69 6e 66 6f 20 34 20 22 54 72 79 69 6e 67 20 -info 4 "Trying
b010: 22 20 28 63 61 72 20 70 61 74 68 64 61 74 29 20 " (car pathdat)
b020: 22 20 61 74 20 22 20 28 63 61 64 72 20 70 61 74 " at " (cadr pat
b030: 68 64 61 74 29 29 0a 09 09 28 73 71 6c 69 74 65 hdat))...(sqlite
b040: 33 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 0a 3:finalize! db).
b050: 09 09 28 69 66 20 28 6e 6f 74 20 28 6e 75 6c 6c ..(if (not (null
b060: 3f 20 6e 65 77 72 65 73 29 29 0a 09 09 20 20 20 ? newres))...
b070: 20 28 63 61 72 20 6e 65 77 72 65 73 29 0a 09 09 (car newres)...
b080: 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 74 (if (null? t
b090: 61 6c 29 0a 09 09 09 23 66 0a 09 09 09 28 6c 6f al)....#f....(lo
b0a0: 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 64 72 op (car tal)(cdr
b0b0: 20 74 61 6c 29 29 29 29 29 29 29 29 29 29 0a 0a tal))))))))))..
b0c0: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 .(define (db:tes
b0d0: 74 2d 67 65 74 2d 74 65 73 74 2d 72 65 63 6f 72 t-get-test-recor
b0e0: 64 73 2d 6d 61 74 63 68 69 6e 67 20 64 62 20 6b ds-matching db k
b0f0: 65 79 6e 61 6d 65 73 20 74 61 72 67 65 74 29 0a eynames target).
b100: 20 20 28 6c 65 74 2a 20 28 28 72 65 73 20 27 28 (let* ((res '(
b110: 29 29 0a 09 20 28 69 74 65 6d 70 61 74 74 20 20 )).. (itempatt
b120: 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61 (if (args:get-a
b130: 72 67 20 22 2d 69 74 65 6d 70 61 74 74 22 29 28 rg "-itempatt")(
b140: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 69 args:get-arg "-i
b150: 74 65 6d 70 61 74 74 22 29 20 22 25 22 29 29 0a tempatt") "%")).
b160: 09 20 28 74 65 73 74 70 61 74 74 20 20 20 28 69 . (testpatt (i
b170: 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 f (args:get-arg
b180: 22 2d 74 65 73 74 70 61 74 74 22 29 28 61 72 67 "-testpatt")(arg
b190: 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 65 73 74 s:get-arg "-test
b1a0: 70 61 74 74 22 29 20 22 25 22 29 29 0a 09 20 28 patt") "%")).. (
b1b0: 73 74 61 74 65 70 61 74 74 20 20 28 69 66 20 28 statepatt (if (
b1c0: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 args:get-arg ":s
b1d0: 74 61 74 65 22 29 20 20 20 28 61 72 67 73 3a 67 tate") (args:g
b1e0: 65 74 2d 61 72 67 20 22 3a 73 74 61 74 65 22 29 et-arg ":state")
b1f0: 20 20 20 20 22 25 22 29 29 0a 09 20 28 73 74 61 "%")).. (sta
b200: 74 75 73 70 61 74 74 20 28 69 66 20 28 61 72 67 tuspatt (if (arg
b210: 73 3a 67 65 74 2d 61 72 67 20 22 3a 73 74 61 74 s:get-arg ":stat
b220: 75 73 22 29 20 20 28 61 72 67 73 3a 67 65 74 2d us") (args:get-
b230: 61 72 67 20 22 3a 73 74 61 74 75 73 22 29 20 20 arg ":status")
b240: 20 22 25 22 29 29 0a 09 20 28 72 75 6e 6e 61 6d "%")).. (runnam
b250: 65 20 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 e (if (args:g
b260: 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e 61 6d 65 et-arg ":runname
b270: 22 29 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 ") (args:get-arg
b280: 20 22 3a 72 75 6e 6e 61 6d 65 22 29 20 20 22 25 ":runname") "%
b290: 22 29 29 0a 09 20 28 6b 65 79 73 74 72 20 28 73 ")).. (keystr (s
b2a0: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 tring-interspers
b2b0: 65 20 0a 09 09 20 20 28 6d 61 70 20 28 6c 61 6d e ... (map (lam
b2c0: 62 64 61 20 28 6b 65 79 20 76 61 6c 29 0a 09 09 bda (key val)...
b2d0: 09 20 28 63 6f 6e 63 20 22 72 2e 22 20 6b 65 79 . (conc "r." key
b2e0: 20 22 20 6c 69 6b 65 20 27 22 20 76 61 6c 20 22 " like '" val "
b2f0: 27 22 29 29 0a 09 09 20 20 20 20 20 20 20 6b 65 '"))... ke
b300: 79 6e 61 6d 65 73 20 0a 09 09 20 20 20 20 20 20 ynames ...
b310: 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 74 (string-split t
b320: 61 72 67 65 74 20 22 2f 22 29 29 0a 09 09 20 20 arget "/"))...
b330: 22 20 41 4e 44 20 22 29 29 0a 09 20 28 71 72 79 " AND ")).. (qry
b340: 73 74 72 20 28 63 6f 6e 63 20 22 53 45 4c 45 43 str (conc "SELEC
b350: 54 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 T .
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
b370: 2e 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 .id.
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b390: 74 2e 72 75 6e 5f 69 64 20 20 20 20 20 0a 20 20 t.run_id .
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3b0: 20 20 20 20 20 20 20 20 20 20 74 2e 74 65 73 74 t.test
b3c0: 6e 61 6d 65 20 20 20 0a 20 20 20 20 20 20 20 20 name .
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3e0: 20 20 20 20 74 2e 68 6f 73 74 20 20 20 20 20 20 t.host
b3f0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
b410: 63 70 75 6c 6f 61 64 20 20 20 20 0a 20 20 20 20 cpuload .
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b430: 20 20 20 20 20 20 20 20 74 2e 64 69 73 6b 66 72 t.diskfr
b440: 65 65 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 ee .
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b460: 20 20 74 2e 75 6e 61 6d 65 20 20 20 20 20 20 0a t.uname .
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b480: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 72 75 t.ru
b490: 6e 64 69 72 20 20 20 20 20 0a 20 20 20 20 20 20 ndir .
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b4b0: 20 20 20 20 20 20 74 2e 73 68 6f 72 74 64 69 72 t.shortdir
b4c0: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b4e0: 74 2e 69 74 65 6d 5f 70 61 74 68 20 20 0a 20 20 t.item_path .
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b500: 20 20 20 20 20 20 20 20 20 20 74 2e 73 74 61 74 t.stat
b510: 65 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 e .
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b530: 20 20 20 20 74 2e 73 74 61 74 75 73 20 20 20 20 t.status
b540: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
b560: 61 74 74 65 6d 70 74 6e 75 6d 20 0a 20 20 20 20 attemptnum .
b570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b580: 20 20 20 20 20 20 20 20 74 2e 66 69 6e 61 6c 5f t.final_
b590: 6c 6f 67 66 20 0a 20 20 20 20 20 20 20 20 20 20 logf .
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b5b0: 20 20 74 2e 6c 6f 67 64 61 74 20 20 20 20 20 0a t.logdat .
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 2e 72 75 t.ru
b5e0: 6e 5f 64 75 72 61 74 69 6f 0a 20 20 20 20 20 20 n_duratio.
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b600: 20 20 20 20 20 20 74 2e 63 6f 6d 6d 65 6e 74 20 t.comment
b610: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 .
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b630: 74 2e 65 76 65 6e 74 5f 74 69 6d 65 20 0a 20 20 t.event_time .
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b650: 20 20 20 20 20 20 20 20 20 20 74 2e 66 61 69 6c t.fail
b660: 5f 63 6f 75 6e 74 20 0a 20 20 20 20 20 20 20 20 _count .
b670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b680: 20 20 20 20 74 2e 70 61 73 73 5f 63 6f 75 6e 74 t.pass_count
b690: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 2e t.
b6b0: 61 72 63 68 69 76 65 64 20 20 20 0a 20 20 20 20 archived .
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b6d0: 20 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74 FROM test
b6e0: 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f 49 s AS t INNER JOI
b6f0: 4e 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 N runs AS r ON t
b700: 2e 72 75 6e 5f 69 64 3d 72 2e 69 64 20 57 48 45 .run_id=r.id WHE
b710: 52 45 20 22 0a 09 09 20 20 20 20 20 20 20 6b 65 RE "... ke
b720: 79 73 74 72 20 22 20 41 4e 44 20 72 2e 72 75 6e ystr " AND r.run
b730: 6e 61 6d 65 20 4c 49 4b 45 20 27 22 20 72 75 6e name LIKE '" run
b740: 6e 61 6d 65 20 22 27 20 41 4e 44 20 69 74 65 6d name "' AND item
b750: 5f 70 61 74 68 20 4c 49 4b 45 20 27 22 20 69 74 _path LIKE '" it
b760: 65 6d 70 61 74 74 20 22 27 20 41 4e 44 20 74 65 empatt "' AND te
b770: 73 74 6e 61 6d 65 20 4c 49 4b 45 20 27 22 0a 09 stname LIKE '"..
b780: 09 20 20 20 20 20 20 20 74 65 73 74 70 61 74 74 . testpatt
b790: 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 65 20 "' AND t.state
b7a0: 4c 49 4b 45 20 27 22 20 73 74 61 74 65 70 61 74 LIKE '" statepat
b7b0: 74 20 22 27 20 41 4e 44 20 74 2e 73 74 61 74 75 t "' AND t.statu
b7c0: 73 20 4c 49 4b 45 20 27 22 20 73 74 61 74 75 73 s LIKE '" status
b7d0: 70 61 74 74 20 0a 09 09 20 20 20 20 20 20 20 22 patt ... "
b7e0: 27 4f 52 44 45 52 20 42 59 20 74 2e 65 76 65 6e 'ORDER BY t.even
b7f0: 74 5f 74 69 6d 65 20 41 53 43 3b 22 29 29 29 0a t_time ASC;"))).
b800: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
b810: 20 33 20 22 71 72 79 73 74 72 3a 20 22 20 71 72 3 "qrystr: " qr
b820: 79 73 74 72 29 0a 20 20 20 20 28 73 71 6c 69 74 ystr). (sqlit
b830: 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 20 e3:for-each-row
b840: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 . (lambda (p
b850: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 ). (set! r
b860: 65 73 20 28 63 6f 6e 73 20 70 20 72 65 73 29 29 es (cons p res))
b870: 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20 20 20 ). db .
b880: 71 72 79 73 74 72 29 0a 20 20 20 20 72 65 73 29 qrystr). res)
b890: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
b8a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b8b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b8c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b8d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 51 ===========.;; Q
b8e0: 55 45 55 45 20 55 50 20 4d 45 54 41 2c 20 54 45 UEUE UP META, TE
b8f0: 53 54 20 53 54 41 54 55 53 20 41 4e 44 20 53 54 ST STATUS AND ST
b900: 45 50 53 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d EPS.;;==========
b910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b ============..;;
b950: 20 64 62 3a 75 70 64 61 74 65 72 20 69 73 20 72 db:updater is r
b960: 75 6e 20 69 6e 20 61 20 74 68 72 65 61 64 20 74 un in a thread t
b970: 6f 20 77 72 69 74 65 20 6f 75 74 20 74 68 65 20 o write out the
b980: 63 61 63 68 65 64 20 64 61 74 61 20 70 65 72 69 cached data peri
b990: 6f 64 69 63 61 6c 6c 79 0a 28 64 65 66 69 6e 65 odically.(define
b9a0: 20 28 64 62 3a 75 70 64 61 74 65 72 29 0a 20 20 (db:updater).
b9b0: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 (debug:print-inf
b9c0: 6f 20 34 20 22 53 74 61 72 74 69 6e 67 20 63 61 o 4 "Starting ca
b9d0: 63 68 65 20 70 72 6f 63 65 73 73 69 6e 67 22 29 che processing")
b9e0: 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 29 0a . (let loop ().
b9f0: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 (thread-slee
ba00: 70 21 20 31 30 29 20 3b 3b 20 6d 6f 76 65 20 73 p! 10) ;; move s
ba10: 61 76 65 20 74 69 6d 65 20 61 72 6f 75 6e 64 20 ave time around
ba20: 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 72 65 67 75 to minimize regu
ba30: 6c 61 72 20 63 6f 6c 6c 69 73 69 6f 6e 73 3f 0a lar collisions?.
ba40: 20 20 20 20 28 64 62 3a 77 72 69 74 65 2d 63 61 (db:write-ca
ba50: 63 68 65 64 2d 64 61 74 61 29 0a 20 20 20 20 28 ched-data). (
ba60: 6c 6f 6f 70 29 29 29 0a 0a 3b 3b 20 63 64 62 3a loop)))..;; cdb:
ba70: 63 61 63 68 65 64 2d 61 63 63 65 73 73 20 69 73 cached-access is
ba80: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 65 20 73 called by the s
ba90: 65 72 76 65 72 20 6c 6f 6f 70 20 74 6f 20 64 69 erver loop to di
baa0: 73 70 61 74 63 68 20 63 6f 6d 6d 61 6e 64 73 20 spatch commands
bab0: 6f 72 20 71 75 65 75 65 20 75 70 0a 3b 3b 20 64 or queue up.;; d
bac0: 62 20 61 63 63 65 73 73 65 73 0a 3b 3b 0a 3b 3b b accesses.;;.;;
bad0: 20 70 61 72 61 6d 73 20 3a 3d 20 71 72 79 2d 6e params := qry-n
bae0: 61 6d 65 20 63 61 63 68 65 64 3f 20 76 61 6c 31 ame cached? val1
baf0: 20 76 61 6c 32 20 76 61 6c 33 20 2e 2e 2e 0a 28 val2 val3 ....(
bb00: 64 65 66 69 6e 65 20 28 63 64 62 3a 63 61 63 68 define (cdb:cach
bb10: 65 64 2d 61 63 63 65 73 73 20 70 61 72 61 6d 73 ed-access params
bb20: 29 0a 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 ). (debug:print
bb30: 2d 69 6e 66 6f 20 31 32 20 22 63 64 62 3a 63 61 -info 12 "cdb:ca
bb40: 63 68 65 64 2d 61 63 63 65 73 73 20 70 61 72 61 ched-access para
bb50: 6d 73 3d 22 20 70 61 72 61 6d 73 29 0a 20 20 28 ms=" params). (
bb60: 69 66 20 28 3c 20 28 6c 65 6e 67 74 68 20 70 61 if (< (length pa
bb70: 72 61 6d 73 29 20 32 29 0a 20 20 20 20 20 20 22 rams) 2). "
bb80: 45 52 52 4f 52 22 0a 20 20 20 20 20 20 28 6c 65 ERROR". (le
bb90: 74 20 28 28 71 72 79 2d 6e 61 6d 65 20 28 63 61 t ((qry-name (ca
bba0: 72 20 70 61 72 61 6d 73 29 29 0a 09 20 20 20 20 r params))..
bbb0: 28 63 61 63 68 65 64 3f 20 20 28 63 61 64 72 20 (cached? (cadr
bbc0: 70 61 72 61 6d 73 29 29 0a 09 20 20 20 20 28 72 params)).. (r
bbd0: 65 6d 70 61 72 61 6d 20 28 6c 69 73 74 2d 74 61 emparam (list-ta
bbe0: 69 6c 20 70 61 72 61 6d 73 20 32 29 29 29 20 0a il params 2))) .
bbf0: 09 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e .(debug:print-in
bc00: 66 6f 20 31 32 20 22 63 64 62 3a 63 61 63 68 65 fo 12 "cdb:cache
bc10: 64 2d 61 63 63 65 73 73 20 71 72 79 2d 6e 61 6d d-access qry-nam
bc20: 65 3d 22 20 71 72 79 2d 6e 61 6d 65 20 22 20 70 e=" qry-name " p
bc30: 61 72 61 6d 73 3d 22 20 70 61 72 61 6d 73 29 0a arams=" params).
bc40: 09 3b 3b 20 41 6e 79 20 73 70 65 63 69 61 6c 20 .;; Any special
bc50: 63 61 6c 6c 73 20 61 72 65 20 64 69 73 70 61 74 calls are dispat
bc60: 63 68 65 64 20 68 65 72 65 2e 20 0a 09 3b 3b 20 ched here. ..;;
bc70: 52 65 6d 61 69 6e 64 65 72 20 61 72 65 20 70 75 Remainder are pu
bc80: 74 20 69 6e 20 74 68 65 20 64 62 20 71 75 65 75 t in the db queu
bc90: 65 0a 09 28 63 61 73 65 20 71 72 79 2d 6e 61 6d e..(case qry-nam
bca0: 65 0a 09 20 20 28 28 6c 6f 67 69 6e 29 20 3b 3b e.. ((login) ;;
bcb0: 20 6c 6f 67 69 6e 20 63 68 65 63 6b 73 20 74 68 login checks th
bcc0: 61 74 20 74 68 65 20 6d 65 67 61 74 65 73 74 20 at the megatest
bcd0: 70 61 74 68 20 6d 61 74 63 68 65 73 0a 09 20 20 path matches..
bce0: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 72 65 6d 70 (if (null? remp
bcf0: 61 72 61 6d 29 0a 09 20 20 20 20 20 20 20 23 66 aram).. #f
bd00: 20 3b 3b 20 6e 6f 20 70 61 74 68 20 2d 20 66 61 ;; no path - fa
bd10: 69 6c 21 0a 09 20 20 20 20 20 20 20 28 6c 65 74 il!.. (let
bd20: 20 28 28 63 61 6c 6c 69 6e 67 2d 70 61 74 68 20 ((calling-path
bd30: 28 63 61 72 20 72 65 6d 70 61 72 61 6d 29 29 29 (car remparam)))
bd40: 0a 09 09 20 28 69 66 20 28 65 71 75 61 6c 3f 20 ... (if (equal?
bd50: 63 61 6c 6c 69 6e 67 2d 70 61 74 68 20 2a 74 6f calling-path *to
bd60: 70 70 61 74 68 2a 29 0a 09 09 20 20 20 20 20 23 ppath*)... #
bd70: 74 20 20 20 20 20 20 3b 3b 20 70 61 74 68 20 6d t ;; path m
bd80: 61 74 63 68 65 73 20 2d 20 70 61 73 73 21 20 53 atches - pass! S
bd90: 68 6f 75 6c 64 20 76 65 74 20 74 68 65 20 63 61 hould vet the ca
bda0: 6c 6c 65 72 20 61 74 20 74 68 69 73 20 74 69 6d ller at this tim
bdb0: 65 20 2e 2e 2e 0a 09 09 20 20 20 20 20 23 66 29 e ...... #f)
bdc0: 29 29 29 20 20 3b 3b 20 65 6c 73 65 20 66 61 69 ))) ;; else fai
bdd0: 6c 20 74 6f 20 6c 6f 67 69 6e 0a 09 20 20 28 28 l to login.. ((
bde0: 66 6c 75 73 68 29 0a 09 20 20 20 28 64 62 3a 77 flush).. (db:w
bdf0: 72 69 74 65 2d 63 61 63 68 65 64 2d 64 61 74 61 rite-cached-data
be00: 29 0a 09 20 20 20 23 74 29 0a 09 20 20 28 65 6c ).. #t).. (el
be10: 73 65 0a 09 20 20 20 28 6d 75 74 65 78 2d 6c 6f se.. (mutex-lo
be20: 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 ck! *incoming-mu
be30: 74 65 78 2a 29 0a 09 20 20 20 28 73 65 74 21 20 tex*).. (set!
be40: 2a 6c 61 73 74 2d 64 62 2d 61 63 63 65 73 73 2a *last-db-access*
be50: 20 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 (current-second
be60: 73 29 29 0a 09 20 20 20 28 73 65 74 21 20 2a 69 s)).. (set! *i
be70: 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 28 63 ncoming-data* (c
be80: 6f 6e 73 20 0a 09 09 09 09 20 20 28 76 65 63 74 ons ..... (vect
be90: 6f 72 20 71 72 79 2d 6e 61 6d 65 0a 09 09 09 09 or qry-name.....
bea0: 09 20 20 28 63 75 72 72 65 6e 74 2d 6d 69 6c 6c . (current-mill
beb0: 69 73 65 63 6f 6e 64 73 29 0a 09 09 09 09 09 20 iseconds)......
bec0: 20 70 61 72 61 6d 73 29 0a 09 09 09 09 20 20 2a params)..... *
bed0: 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 29 29 incoming-data*))
bee0: 0a 09 20 20 20 28 6d 75 74 65 78 2d 75 6e 6c 6f .. (mutex-unlo
bef0: 63 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 ck! *incoming-mu
bf00: 74 65 78 2a 29 0a 09 20 20 20 3b 3b 20 4e 4f 54 tex*).. ;; NOT
bf10: 45 3a 20 69 66 20 63 61 63 68 65 64 3f 20 69 73 E: if cached? is
bf20: 20 23 66 20 74 68 65 6e 20 74 68 69 73 20 63 61 #f then this ca
bf30: 6c 6c 20 6d 75 73 74 20 62 65 20 72 75 6e 20 69 ll must be run i
bf40: 6d 6d 65 64 69 61 74 65 6c 79 0a 09 20 20 20 3b mmediately.. ;
bf50: 3b 20 20 20 20 20 20 20 62 75 74 20 66 69 72 73 ; but firs
bf60: 74 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 20 74 t all calls in t
bf70: 68 65 20 71 75 65 75 65 20 61 72 65 20 72 75 6e he queue are run
bf80: 20 66 69 72 73 74 20 69 6e 20 74 68 65 20 6f 72 first in the or
bf90: 64 65 72 0a 09 20 20 20 3b 3b 20 20 20 20 20 20 der.. ;;
bfa0: 20 6f 66 20 74 68 65 69 72 20 74 69 6d 65 20 73 of their time s
bfb0: 74 61 6d 70 0a 09 20 20 20 28 69 66 20 28 61 6e tamp.. (if (an
bfc0: 64 20 63 61 63 68 65 64 3f 20 2a 63 61 63 68 65 d cached? *cache
bfd0: 2d 6f 6e 2a 29 0a 09 20 20 20 20 20 20 20 28 62 -on*).. (b
bfe0: 65 67 69 6e 0a 09 09 20 28 64 65 62 75 67 3a 70 egin... (debug:p
bff0: 72 69 6e 74 2d 69 6e 66 6f 20 31 32 20 22 2a 63 rint-info 12 "*c
c000: 61 63 68 65 2d 6f 6e 2a 20 69 73 20 22 20 2a 63 ache-on* is " *c
c010: 61 63 68 65 2d 6f 6e 2a 20 22 2c 20 73 6b 69 70 ache-on* ", skip
c020: 70 69 6e 67 20 63 61 63 68 65 20 77 72 69 74 65 ping cache write
c030: 22 29 0a 09 09 20 22 43 41 43 48 45 44 22 29 0a ")... "CACHED").
c040: 09 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 . (begin..
c050: 09 20 28 64 62 3a 77 72 69 74 65 2d 63 61 63 68 . (db:write-cach
c060: 65 64 2d 64 61 74 61 29 0a 09 09 20 22 57 52 49 ed-data)... "WRI
c070: 54 54 45 4e 22 29 29 29 29 29 29 29 0a 0a 28 64 TTEN")))))))..(d
c080: 65 66 69 6e 65 20 28 64 62 3a 6f 62 6a 2d 3e 73 efine (db:obj->s
c090: 74 72 69 6e 67 20 6f 62 6a 29 28 77 69 74 68 2d tring obj)(with-
c0a0: 6f 75 74 70 75 74 2d 74 6f 2d 73 74 72 69 6e 67 output-to-string
c0b0: 20 28 6c 61 6d 62 64 61 20 28 29 28 73 65 72 69 (lambda ()(seri
c0c0: 61 6c 69 7a 65 20 6f 62 6a 29 29 29 29 0a 28 64 alize obj)))).(d
c0d0: 65 66 69 6e 65 20 28 64 62 3a 73 74 72 69 6e 67 efine (db:string
c0e0: 2d 3e 6f 62 6a 20 6d 73 67 29 28 77 69 74 68 2d ->obj msg)(with-
c0f0: 69 6e 70 75 74 2d 66 72 6f 6d 2d 73 74 72 69 6e input-from-strin
c100: 67 20 6d 73 67 20 28 6c 61 6d 62 64 61 20 28 29 g msg (lambda ()
c110: 28 64 65 73 65 72 69 61 6c 69 7a 65 29 29 29 29 (deserialize))))
c120: 0a 0a 28 64 65 66 69 6e 65 20 28 63 64 62 3a 63 ..(define (cdb:c
c130: 6c 69 65 6e 74 2d 63 61 6c 6c 20 7a 6d 71 2d 73 lient-call zmq-s
c140: 6f 63 6b 65 74 20 2e 20 70 61 72 61 6d 73 29 0a ocket . params).
c150: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 (debug:print-i
c160: 6e 66 6f 20 31 31 20 22 63 64 62 3a 63 6c 69 65 nfo 11 "cdb:clie
c170: 6e 74 2d 63 61 6c 6c 20 7a 6d 71 2d 73 6f 63 6b nt-call zmq-sock
c180: 65 74 3d 22 20 7a 6d 71 2d 73 6f 63 6b 65 74 20 et=" zmq-socket
c190: 22 20 70 61 72 61 6d 73 3d 22 20 70 61 72 61 6d " params=" param
c1a0: 73 29 0a 20 20 28 6c 65 74 20 28 28 7a 64 61 74 s). (let ((zdat
c1b0: 20 28 64 62 3a 6f 62 6a 2d 3e 73 74 72 69 6e 67 (db:obj->string
c1c0: 20 70 61 72 61 6d 73 29 29 20 3b 3b 20 28 77 69 params)) ;; (wi
c1d0: 74 68 2d 6f 75 74 70 75 74 2d 74 6f 2d 73 74 72 th-output-to-str
c1e0: 69 6e 67 20 28 6c 61 6d 62 64 61 20 28 29 28 73 ing (lambda ()(s
c1f0: 65 72 69 61 6c 69 7a 65 20 70 61 72 61 6d 73 29 erialize params)
c200: 29 29 29 0a 09 28 72 65 73 20 20 23 66 29 29 0a )))..(res #f)).
c210: 20 20 20 20 28 70 72 69 6e 74 20 22 63 64 62 3a (print "cdb:
c220: 63 6c 69 65 6e 74 2d 63 61 6c 6c 20 62 65 66 6f client-call befo
c230: 72 65 20 73 65 6e 64 20 6d 65 73 73 61 67 65 22 re send message"
c240: 29 0a 20 20 20 20 28 73 65 6e 64 2d 6d 65 73 73 ). (send-mess
c250: 61 67 65 20 7a 6d 71 2d 73 6f 63 6b 65 74 20 7a age zmq-socket z
c260: 64 61 74 29 0a 20 20 20 20 28 70 72 69 6e 74 20 dat). (print
c270: 22 63 64 62 3a 63 6c 69 65 6e 74 2d 63 61 6c 6c "cdb:client-call
c280: 20 61 66 74 65 72 20 73 65 6e 64 20 6d 65 73 73 after send mess
c290: 61 67 65 22 29 0a 20 20 20 20 28 73 65 74 21 20 age"). (set!
c2a0: 72 65 73 20 28 64 62 3a 73 74 72 69 6e 67 2d 3e res (db:string->
c2b0: 6f 62 6a 20 28 72 65 63 65 69 76 65 2d 6d 65 73 obj (receive-mes
c2c0: 73 61 67 65 20 7a 6d 71 2d 73 6f 63 6b 65 74 20 sage zmq-socket
c2d0: 7a 64 61 74 29 29 29 0a 20 20 20 20 28 64 65 62 zdat))). (deb
c2e0: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 31 ug:print-info 11
c2f0: 20 22 7a 6d 71 2d 73 6f 63 6b 65 74 20 22 20 28 "zmq-socket " (
c300: 63 61 72 20 70 61 72 61 6d 73 29 20 22 20 72 65 car params) " re
c310: 73 3d 22 20 72 65 73 29 0a 20 20 20 20 72 65 73 s=" res). res
c320: 29 29 0a 20 20 0a 28 64 65 66 69 6e 65 20 28 63 )). .(define (c
c330: 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 db:test-set-stat
c340: 75 73 2d 73 74 61 74 65 20 7a 6d 71 73 6f 63 6b us-state zmqsock
c350: 65 74 20 74 65 73 74 2d 69 64 20 73 74 61 74 75 et test-id statu
c360: 73 20 73 74 61 74 65 20 6d 73 67 29 0a 20 20 28 s state msg). (
c370: 69 66 20 6d 73 67 0a 20 20 20 20 20 20 28 63 64 if msg. (cd
c380: 62 3a 63 6c 69 65 6e 74 2d 63 61 6c 6c 20 7a 6d b:client-call zm
c390: 71 73 6f 63 6b 65 74 20 27 73 74 61 74 65 2d 73 qsocket 'state-s
c3a0: 74 61 74 75 73 2d 6d 73 67 20 73 74 61 74 65 20 tatus-msg state
c3b0: 73 74 61 74 75 73 20 6d 73 67 20 74 65 73 74 2d status msg test-
c3c0: 69 64 29 0a 20 20 20 20 20 20 28 63 64 62 3a 63 id). (cdb:c
c3d0: 6c 69 65 6e 74 2d 63 61 6c 6c 20 7a 6d 71 73 6f lient-call zmqso
c3e0: 63 6b 65 74 20 27 73 74 61 74 65 2d 73 74 61 74 cket 'state-stat
c3f0: 75 73 20 73 74 61 74 65 20 73 74 61 74 75 73 20 us state status
c400: 74 65 73 74 2d 69 64 29 29 29 20 3b 3b 20 72 75 test-id))) ;; ru
c410: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
c420: 74 65 6d 2d 70 61 74 68 20 6d 69 6e 75 74 65 73 tem-path minutes
c430: 20 63 70 75 6c 6f 61 64 20 64 69 73 6b 66 72 65 cpuload diskfre
c440: 65 20 74 6d 70 66 72 65 65 29 20 0a 0a 28 64 65 e tmpfree) ..(de
c450: 66 69 6e 65 20 28 63 64 62 3a 74 65 73 74 2d 72 fine (cdb:test-r
c460: 6f 6c 6c 75 70 2d 74 65 73 74 5f 64 61 74 61 2d ollup-test_data-
c470: 70 61 73 73 2d 66 61 69 6c 20 7a 6d 71 73 6f 63 pass-fail zmqsoc
c480: 6b 65 74 20 74 65 73 74 2d 69 64 29 0a 20 20 28 ket test-id). (
c490: 63 64 62 3a 63 6c 69 65 6e 74 2d 63 61 6c 6c 20 cdb:client-call
c4a0: 7a 6d 71 73 6f 63 6b 65 74 20 27 74 65 73 74 5f zmqsocket 'test_
c4b0: 64 61 74 61 2d 70 66 2d 72 6f 6c 6c 75 70 20 23 data-pf-rollup #
c4c0: 74 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 t test-id test-i
c4d0: 64 20 74 65 73 74 2d 69 64 29 29 0a 0a 28 64 65 d test-id))..(de
c4e0: 66 69 6e 65 20 28 63 64 62 3a 70 61 73 73 2d 66 fine (cdb:pass-f
c4f0: 61 69 6c 2d 63 6f 75 6e 74 73 20 7a 6d 71 73 6f ail-counts zmqso
c500: 63 6b 65 74 20 74 65 73 74 2d 69 64 20 66 61 69 cket test-id fai
c510: 6c 2d 63 6f 75 6e 74 20 70 61 73 73 2d 63 6f 75 l-count pass-cou
c520: 6e 74 29 0a 20 20 28 63 64 62 3a 63 6c 69 65 6e nt). (cdb:clien
c530: 74 2d 63 61 6c 6c 20 7a 6d 71 73 6f 63 6b 65 74 t-call zmqsocket
c540: 20 27 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 'pass-fail-coun
c550: 74 73 20 66 61 69 6c 2d 63 6f 75 6e 74 20 70 61 ts fail-count pa
c560: 73 73 2d 63 6f 75 6e 74 20 74 65 73 74 2d 69 64 ss-count test-id
c570: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 63 64 62 ))..(define (cdb
c580: 3a 74 65 73 74 73 2d 72 65 67 69 73 74 65 72 2d :tests-register-
c590: 74 65 73 74 20 7a 6d 71 73 6f 63 6b 65 74 20 64 test zmqsocket d
c5a0: 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 b run-id test-na
c5b0: 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20 20 me item-path).
c5c0: 28 6c 65 74 20 28 28 69 74 65 6d 2d 70 61 74 68 (let ((item-path
c5d0: 73 20 28 69 66 20 28 65 71 75 61 6c 3f 20 69 74 s (if (equal? it
c5e0: 65 6d 2d 70 61 74 68 20 22 22 29 0a 09 09 09 28 em-path "")....(
c5f0: 6c 69 73 74 20 69 74 65 6d 2d 70 61 74 68 29 0a list item-path).
c600: 09 09 09 28 6c 69 73 74 20 69 74 65 6d 2d 70 61 ...(list item-pa
c610: 74 68 20 22 22 29 29 29 29 0a 20 20 20 20 28 63 th "")))). (c
c620: 64 62 3a 63 6c 69 65 6e 74 2d 63 61 6c 6c 20 7a db:client-call z
c630: 6d 71 73 6f 63 6b 65 74 20 27 72 65 67 69 73 74 mqsocket 'regist
c640: 65 72 2d 74 65 73 74 20 72 75 6e 2d 69 64 20 74 er-test run-id t
c650: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 est-name item-pa
c660: 74 68 29 29 29 0a 0a 3b 3b 20 54 68 65 20 71 75 th)))..;; The qu
c670: 65 75 65 20 69 73 20 61 20 6c 69 73 74 20 6f 66 eue is a list of
c680: 20 76 65 63 74 6f 72 73 20 77 68 65 72 65 20 74 vectors where t
c690: 68 65 20 7a 65 72 6f 74 68 20 73 6c 6f 74 20 69 he zeroth slot i
c6a0: 6e 64 69 63 61 74 65 73 20 74 68 65 20 74 79 70 ndicates the typ
c6b0: 65 20 6f 66 20 71 75 65 72 79 20 74 6f 0a 3b 3b e of query to.;;
c6c0: 20 61 70 70 6c 79 20 61 6e 64 20 74 68 65 20 73 apply and the s
c6d0: 65 63 6f 6e 64 20 73 6c 6f 74 20 69 73 20 74 68 econd slot is th
c6e0: 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20 71 75 e time of the qu
c6f0: 65 72 79 20 61 6e 64 20 74 68 65 20 74 68 69 72 ery and the thir
c700: 64 20 65 6e 74 72 79 20 69 73 20 61 20 6c 69 73 d entry is a lis
c710: 74 20 6f 66 20 0a 3b 3b 20 76 61 6c 75 65 73 20 t of .;; values
c720: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 0a 3b 3b to be applied.;;
c730: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 77 72 69 .(define (db:wri
c740: 74 65 2d 63 61 63 68 65 64 2d 64 61 74 61 29 0a te-cached-data).
c750: 20 20 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 (open-run-clos
c760: 65 0a 20 20 20 28 6c 61 6d 62 64 61 20 28 64 62 e. (lambda (db
c770: 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 20 20 20 . params).
c780: 28 6c 65 74 20 28 28 72 65 67 69 73 74 65 72 2d (let ((register-
c790: 74 65 73 74 2d 73 74 6d 74 20 20 20 20 28 73 71 test-stmt (sq
c7a0: 6c 69 74 65 33 3a 70 72 65 70 61 72 65 20 64 62 lite3:prepare db
c7b0: 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f "INSERT OR IGNO
c7c0: 52 45 20 49 4e 54 4f 20 74 65 73 74 73 20 28 72 RE INTO tests (r
c7d0: 75 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 65 un_id,testname,e
c7e0: 76 65 6e 74 5f 74 69 6d 65 2c 69 74 65 6d 5f 70 vent_time,item_p
c7f0: 61 74 68 2c 73 74 61 74 65 2c 73 74 61 74 75 73 ath,state,status
c800: 29 20 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 73 74 ) VALUES (?,?,st
c810: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 rftime('%s','now
c820: 27 29 2c 3f 2c 27 4e 4f 54 5f 53 54 41 52 54 45 '),?,'NOT_STARTE
c830: 44 27 2c 27 6e 2f 61 27 29 3b 22 29 29 0a 09 20 D','n/a');"))..
c840: 20 20 28 73 74 61 74 65 2d 73 74 61 74 75 73 2d (state-status-
c850: 73 74 6d 74 20 20 20 20 20 28 73 71 6c 69 74 65 stmt (sqlite
c860: 33 3a 70 72 65 70 61 72 65 20 64 62 20 22 55 50 3:prepare db "UP
c870: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 73 DATE tests SET s
c880: 74 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f 20 tate=?,status=?
c890: 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 29 0a 09 WHERE id=?;"))..
c8a0: 20 20 20 28 73 74 61 74 65 2d 73 74 61 74 75 73 (state-status
c8b0: 2d 6d 73 67 2d 73 74 6d 74 20 28 73 71 6c 69 74 -msg-stmt (sqlit
c8c0: 65 33 3a 70 72 65 70 61 72 65 20 64 62 20 22 55 e3:prepare db "U
c8d0: 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 PDATE tests SET
c8e0: 73 74 61 74 65 3d 3f 2c 73 74 61 74 75 73 3d 3f state=?,status=?
c8f0: 2c 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 ,comment=? WHERE
c900: 20 69 64 3d 3f 3b 22 29 29 0a 09 20 20 20 28 70 id=?;")).. (p
c910: 61 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 2d ass-fail-counts-
c920: 73 74 6d 74 20 28 73 71 6c 69 74 65 33 3a 70 72 stmt (sqlite3:pr
c930: 65 70 61 72 65 20 64 62 20 22 55 50 44 41 54 45 epare db "UPDATE
c940: 20 74 65 73 74 73 20 53 45 54 20 66 61 69 6c 5f tests SET fail_
c950: 63 6f 75 6e 74 3d 3f 2c 70 61 73 73 5f 63 6f 75 count=?,pass_cou
c960: 6e 74 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b nt=? WHERE id=?;
c970: 22 29 29 0a 09 20 20 20 28 74 65 73 74 5f 64 61 ")).. (test_da
c980: 74 61 2d 72 6f 6c 6c 75 70 2d 73 74 6d 74 20 20 ta-rollup-stmt
c990: 28 73 71 6c 69 74 65 33 3a 70 72 65 70 61 72 65 (sqlite3:prepare
c9a0: 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 db "UPDATE test
c9b0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S
c9e0: 45 54 20 73 74 61 74 75 73 3d 43 41 53 45 20 57 ET status=CASE W
c9f0: 48 45 4e 20 28 53 45 4c 45 43 54 20 66 61 69 6c HEN (SELECT fail
ca00: 5f 63 6f 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 _count FROM test
ca10: 73 20 57 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 s WHERE id=?) >
ca20: 30 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 0 .
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca50: 20 20 20 54 48 45 4e 20 27 46 41 49 4c 27 0a 20 THEN 'FAIL'.
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 4e WHEN
ca90: 20 28 53 45 4c 45 43 54 20 70 61 73 73 5f 63 6f (SELECT pass_co
caa0: 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 unt FROM tests W
cab0: 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 41 HERE id=?) > 0 A
cac0: 4e 44 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 ND .
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
caf0: 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 73 74 (SELECT st
cb00: 61 74 75 73 20 46 52 4f 4d 20 74 65 73 74 73 20 atus FROM tests
cb10: 57 48 45 52 45 20 69 64 3d 3f 29 20 4e 4f 54 20 WHERE id=?) NOT
cb20: 49 4e 20 28 27 57 41 52 4e 27 2c 27 46 41 49 4c IN ('WARN','FAIL
cb30: 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ').
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cb60: 54 48 45 4e 20 27 50 41 53 53 27 0a 20 20 20 20 THEN 'PASS'.
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cb90: 20 20 20 20 20 20 20 20 20 45 4c 53 45 20 73 74 ELSE st
cba0: 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 20 atus.
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4e EN
cbd0: 44 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 29 29 D WHERE id=?;"))
cbe0: 0a 09 20 20 20 28 64 61 74 61 20 20 20 20 20 20 .. (data
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 23 66 29 0a #f).
cc00: 09 20 20 20 28 72 6f 6c 6c 75 70 73 20 20 20 20 . (rollups
cc10: 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65 (make
cc20: 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a 20 -hash-table))).
cc30: 20 20 20 20 20 20 28 6d 75 74 65 78 2d 6c 6f 63 (mutex-loc
cc40: 6b 21 20 2a 69 6e 63 6f 6d 69 6e 67 2d 6d 75 74 k! *incoming-mut
cc50: 65 78 2a 29 0a 20 20 20 20 20 20 20 28 73 65 74 ex*). (set
cc60: 21 20 64 61 74 61 20 28 73 6f 72 74 20 2a 69 6e ! data (sort *in
cc70: 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 28 6c 61 coming-data* (la
cc80: 6d 62 64 61 20 28 61 20 62 29 28 3c 20 28 76 65 mbda (a b)(< (ve
cc90: 63 74 6f 72 2d 72 65 66 20 61 20 31 29 28 76 65 ctor-ref a 1)(ve
cca0: 63 74 6f 72 2d 72 65 66 20 62 20 31 29 29 29 29 ctor-ref b 1))))
ccb0: 29 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 2a ). (set! *
ccc0: 69 6e 63 6f 6d 69 6e 67 2d 64 61 74 61 2a 20 27 incoming-data* '
ccd0: 28 29 29 0a 20 20 20 20 20 20 20 28 6d 75 74 65 ()). (mute
cce0: 78 2d 75 6e 6c 6f 63 6b 21 20 2a 69 6e 63 6f 6d x-unlock! *incom
ccf0: 69 6e 67 2d 6d 75 74 65 78 2a 29 0a 20 20 20 20 ing-mutex*).
cd00: 20 20 20 28 69 66 20 28 3e 20 28 6c 65 6e 67 74 (if (> (lengt
cd10: 68 20 64 61 74 61 29 20 30 29 0a 09 20 20 20 28 h data) 0).. (
cd20: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f debug:print-info
cd30: 20 34 20 22 57 72 69 74 69 6e 67 20 63 61 63 68 4 "Writing cach
cd40: 65 64 20 64 61 74 61 20 22 20 64 61 74 61 29 29 ed data " data))
cd50: 0a 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 . (sqlite3
cd60: 3a 77 69 74 68 2d 74 72 61 6e 73 61 63 74 69 6f :with-transactio
cd70: 6e 20 0a 09 64 62 0a 09 28 6c 61 6d 62 64 61 20 n ..db..(lambda
cd80: 28 29 0a 09 20 20 28 64 65 62 75 67 3a 70 72 69 ().. (debug:pri
cd90: 6e 74 2d 69 6e 66 6f 20 34 20 22 66 6c 75 73 68 nt-info 4 "flush
cda0: 69 6e 67 20 22 20 64 61 74 61 20 22 20 74 6f 20 ing " data " to
cdb0: 64 62 22 29 0a 09 20 20 28 66 6f 72 2d 65 61 63 db").. (for-eac
cdc0: 68 20 28 6c 61 6d 62 64 61 20 28 65 6e 74 72 79 h (lambda (entry
cdd0: 29 0a 09 09 20 20 20 20 20 20 28 6c 65 74 20 28 )... (let (
cde0: 28 70 61 72 61 6d 73 20 28 76 65 63 74 6f 72 2d (params (vector-
cdf0: 72 65 66 20 65 6e 74 72 79 20 32 29 29 29 0a 09 ref entry 2)))..
ce00: 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 ..(debug:print-i
ce10: 6e 66 6f 20 34 20 22 41 70 70 6c 79 69 6e 67 20 nfo 4 "Applying
ce20: 22 20 65 6e 74 72 79 20 22 20 74 6f 20 70 61 72 " entry " to par
ce30: 61 6d 73 20 22 20 70 61 72 61 6d 73 29 0a 09 09 ams " params)...
ce40: 09 28 63 61 73 65 20 28 76 65 63 74 6f 72 2d 72 .(case (vector-r
ce50: 65 66 20 65 6e 74 72 79 20 30 29 0a 09 09 09 20 ef entry 0)....
ce60: 20 28 28 73 74 61 74 65 2d 73 74 61 74 75 73 29 ((state-status)
ce70: 0a 09 09 09 20 20 20 28 61 70 70 6c 79 20 73 71 .... (apply sq
ce80: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 73 74 lite3:execute st
ce90: 61 74 65 2d 73 74 61 74 75 73 2d 73 74 6d 74 20 ate-status-stmt
cea0: 20 20 20 20 70 61 72 61 6d 73 29 29 0a 09 09 09 params))....
ceb0: 20 20 28 28 73 74 61 74 65 2d 73 74 61 74 75 73 ((state-status
cec0: 2d 6d 73 67 29 0a 09 09 09 20 20 20 28 61 70 70 -msg).... (app
ced0: 6c 79 20 73 71 6c 69 74 65 33 3a 65 78 65 63 75 ly sqlite3:execu
cee0: 74 65 20 73 74 61 74 65 2d 73 74 61 74 75 73 2d te state-status-
cef0: 6d 73 67 2d 73 74 6d 74 20 70 61 72 61 6d 73 29 msg-stmt params)
cf00: 29 0a 09 09 09 20 20 28 28 74 65 73 74 5f 64 61 ).... ((test_da
cf10: 74 61 2d 70 66 2d 72 6f 6c 6c 75 70 29 0a 09 09 ta-pf-rollup)...
cf20: 09 20 20 20 3b 3b 20 28 68 61 73 68 2d 74 61 62 . ;; (hash-tab
cf30: 6c 65 2d 73 65 74 21 20 72 6f 6c 6c 75 70 73 20 le-set! rollups
cf40: 28 63 61 72 20 70 61 72 61 6d 73 29 20 70 61 72 (car params) par
cf50: 61 6d 73 29 29 0a 09 09 09 20 20 20 28 61 70 70 ams)).... (app
cf60: 6c 79 20 73 71 6c 69 74 65 33 3a 65 78 65 63 75 ly sqlite3:execu
cf70: 74 65 20 74 65 73 74 5f 64 61 74 61 2d 72 6f 6c te test_data-rol
cf80: 6c 75 70 2d 73 74 6d 74 20 20 70 61 72 61 6d 73 lup-stmt params
cf90: 29 29 0a 09 09 09 20 20 28 28 70 61 73 73 2d 66 )).... ((pass-f
cfa0: 61 69 6c 2d 63 6f 75 6e 74 73 29 0a 09 09 09 20 ail-counts)....
cfb0: 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 65 33 (apply sqlite3
cfc0: 3a 65 78 65 63 75 74 65 20 70 61 73 73 2d 66 61 :execute pass-fa
cfd0: 69 6c 2d 63 6f 75 6e 74 73 2d 73 74 6d 74 20 70 il-counts-stmt p
cfe0: 61 72 61 6d 73 29 29 0a 09 09 09 20 20 28 28 72 arams)).... ((r
cff0: 65 67 69 73 74 65 72 2d 74 65 73 74 29 0a 09 09 egister-test)...
d000: 09 20 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 . (apply sqlit
d010: 65 33 3a 65 78 65 63 75 74 65 20 72 65 67 69 73 e3:execute regis
d020: 74 65 72 2d 74 65 73 74 2d 73 74 6d 74 20 20 20 ter-test-stmt
d030: 20 70 61 72 61 6d 73 29 29 0a 09 09 09 20 20 28 params)).... (
d040: 65 6c 73 65 0a 09 09 09 20 20 20 28 64 65 62 75 else.... (debu
d050: 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52 4f 52 g:print 0 "ERROR
d060: 3a 20 51 75 65 75 65 64 20 65 6e 74 72 79 20 6e : Queued entry n
d070: 6f 74 20 72 65 63 6f 67 6e 69 73 65 64 20 22 20 ot recognised "
d080: 65 6e 74 72 79 29 29 29 29 29 0a 09 09 20 20 20 entry)))))...
d090: 20 64 61 74 61 29 29 29 0a 20 20 20 20 20 20 20 data))).
d0a0: 3b 3b 20 6e 6f 77 20 64 6f 20 61 6e 79 20 72 6f ;; now do any ro
d0b0: 6c 6c 75 70 73 0a 20 20 20 20 20 20 20 3b 3b 20 llups. ;;
d0c0: 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 20 (for-each.
d0d0: 20 3b 3b 20 20 28 6c 61 6d 62 64 61 20 28 74 65 ;; (lambda (te
d0e0: 73 74 2d 69 64 29 0a 20 20 20 20 20 20 20 3b 3b st-id). ;;
d0f0: 20 20 20 20 28 61 70 70 6c 79 20 73 71 6c 69 74 (apply sqlit
d100: 65 33 3a 65 78 65 63 75 74 65 20 74 65 73 74 5f e3:execute test_
d110: 64 61 74 61 2d 72 6f 6c 6c 75 70 2d 73 74 6d 74 data-rollup-stmt
d120: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 (hash-table-ref
d130: 20 72 6f 6c 6c 75 70 73 20 74 65 73 74 2d 69 64 rollups test-id
d140: 29 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 20 28 ))). ;; (
d150: 68 61 73 68 2d 74 61 62 6c 65 2d 6b 65 79 73 20 hash-table-keys
d160: 72 6f 6c 6c 75 70 73 29 29 0a 20 20 20 20 20 20 rollups)).
d170: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 (sqlite3:finali
d180: 7a 65 21 20 73 74 61 74 65 2d 73 74 61 74 75 73 ze! state-status
d190: 2d 73 74 6d 74 29 0a 20 20 20 20 20 20 20 28 73 -stmt). (s
d1a0: 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 qlite3:finalize!
d1b0: 20 73 74 61 74 65 2d 73 74 61 74 75 73 2d 6d 73 state-status-ms
d1c0: 67 2d 73 74 6d 74 29 0a 20 20 20 20 20 20 20 28 g-stmt). (
d1d0: 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 sqlite3:finalize
d1e0: 21 20 74 65 73 74 5f 64 61 74 61 2d 72 6f 6c 6c ! test_data-roll
d1f0: 75 70 2d 73 74 6d 74 29 0a 20 20 20 20 20 20 20 up-stmt).
d200: 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a (sqlite3:finaliz
d210: 65 21 20 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75 e! pass-fail-cou
d220: 6e 74 73 2d 73 74 6d 74 29 0a 20 20 20 20 20 20 nts-stmt).
d230: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 (sqlite3:finali
d240: 7a 65 21 20 72 65 67 69 73 74 65 72 2d 74 65 73 ze! register-tes
d250: 74 2d 73 74 6d 74 29 0a 20 20 20 20 20 20 20 28 t-stmt). (
d260: 6c 65 74 20 28 28 63 61 63 68 65 2d 73 69 7a 65 let ((cache-size
d270: 20 28 6c 65 6e 67 74 68 20 64 61 74 61 29 29 29 (length data)))
d280: 0a 09 20 28 69 66 20 28 3e 20 63 61 63 68 65 2d .. (if (> cache-
d290: 73 69 7a 65 20 2a 6d 61 78 2d 63 61 63 68 65 2d size *max-cache-
d2a0: 73 69 7a 65 2a 29 0a 09 20 20 20 20 20 28 73 65 size*).. (se
d2b0: 74 21 20 2a 6d 61 78 2d 63 61 63 68 65 2d 73 69 t! *max-cache-si
d2c0: 7a 65 2a 20 63 61 63 68 65 2d 73 69 7a 65 29 29 ze* cache-size))
d2d0: 29 0a 20 20 20 20 20 20 20 29 29 0a 20 20 20 23 ). )). #
d2e0: 66 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 64 62 f))..(define cdb
d2f0: 3a 66 6c 75 73 68 2d 71 75 65 75 65 20 64 62 3a :flush-queue db:
d300: 77 72 69 74 65 2d 63 61 63 68 65 64 2d 64 61 74 write-cached-dat
d310: 61 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a a)..(define (db:
d320: 72 6f 6c 6c 2d 75 70 2d 70 61 73 73 2d 66 61 69 roll-up-pass-fai
d330: 6c 2d 63 6f 75 6e 74 73 20 64 62 20 72 75 6e 2d l-counts db run-
d340: 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 id test-name ite
d350: 6d 2d 70 61 74 68 20 73 74 61 74 75 73 29 0a 20 m-path status).
d360: 20 0a 0a 0a 0a 0a 20 20 3b 3b 20 4e 45 45 44 45 ..... ;; NEEDE
d370: 44 21 3f 0a 20 20 3b 3b 20 28 72 64 62 3a 66 6c D!?. ;; (rdb:fl
d380: 75 73 68 2d 71 75 65 75 65 29 0a 0a 0a 0a 0a 0a ush-queue)......
d390: 0a 20 20 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 . (if (and (not
d3a0: 20 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61 (equal? item-pa
d3b0: 74 68 20 22 22 29 29 0a 09 20 20 20 28 6f 72 20 th "")).. (or
d3c0: 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 (equal? status "
d3d0: 50 41 53 53 22 29 0a 09 20 20 20 20 20 20 20 28 PASS").. (
d3e0: 65 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 57 equal? status "W
d3f0: 41 52 4e 22 29 0a 09 20 20 20 20 20 20 20 28 65 ARN").. (e
d400: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 46 41 qual? status "FA
d410: 49 4c 22 29 0a 09 20 20 20 20 20 20 20 28 65 71 IL").. (eq
d420: 75 61 6c 3f 20 73 74 61 74 75 73 20 22 57 41 49 ual? status "WAI
d430: 56 45 44 22 29 0a 09 20 20 20 20 20 20 20 28 65 VED").. (e
d440: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 52 55 qual? status "RU
d450: 4e 4e 49 4e 47 22 29 29 29 0a 20 20 20 20 20 20 NNING"))).
d460: 28 62 65 67 69 6e 0a 09 28 73 71 6c 69 74 65 33 (begin..(sqlite3
d470: 3a 65 78 65 63 75 74 65 20 0a 09 20 64 62 0a 09 :execute .. db..
d480: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 0a "UPDATE tests .
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 54 SET
d4a0: 20 66 61 69 6c 5f 63 6f 75 6e 74 3d 28 53 45 4c fail_count=(SEL
d4b0: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 ECT count(id) FR
d4c0: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 OM tests WHERE r
d4d0: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 un_id=? AND test
d4e0: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f name=? AND item_
d4f0: 70 61 74 68 20 21 3d 20 27 27 20 41 4e 44 20 73 path != '' AND s
d500: 74 61 74 75 73 3d 27 46 41 49 4c 27 29 2c 0a 20 tatus='FAIL'),.
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d520: 70 61 73 73 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 pass_count=(SELE
d530: 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f CT count(id) FRO
d540: 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 M tests WHERE ru
d550: 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e n_id=? AND testn
d560: 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 ame=? AND item_p
d570: 61 74 68 20 21 3d 20 27 27 20 41 4e 44 20 28 73 ath != '' AND (s
d580: 74 61 74 75 73 3d 27 50 41 53 53 27 20 4f 52 20 tatus='PASS' OR
d590: 73 74 61 74 75 73 3d 27 57 41 52 4e 27 20 4f 52 status='WARN' OR
d5a0: 20 73 74 61 74 75 73 3d 27 57 41 49 56 45 44 27 status='WAIVED'
d5b0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
d5c0: 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 WHERE run_id=? A
d5d0: 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e ND testname=? AN
d5e0: 44 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 D item_path='';"
d5f0: 0a 09 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e .. run-id test-n
d600: 61 6d 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d ame run-id test-
d610: 6e 61 6d 65 20 72 75 6e 2d 69 64 20 74 65 73 74 name run-id test
d620: 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 3b -name). ;
d630: 3b 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21 ; (thread-sleep!
d640: 20 30 2e 31 29 20 3b 3b 20 67 69 76 65 20 6f 74 0.1) ;; give ot
d650: 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 61 20 her processes a
d660: 63 68 61 6e 63 65 20 68 65 72 65 2c 20 6e 6f 2c chance here, no,
d670: 20 62 65 74 74 65 72 20 74 6f 20 62 65 20 64 6f better to be do
d680: 6e 65 20 41 53 41 50 3f 0a 09 28 69 66 20 28 65 ne ASAP?..(if (e
d690: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 52 55 qual? status "RU
d6a0: 4e 4e 49 4e 47 22 29 20 3b 3b 20 72 75 6e 6e 69 NNING") ;; runni
d6b0: 6e 67 20 74 61 6b 65 73 20 70 72 69 6f 72 69 74 ng takes priorit
d6c0: 79 20 6f 76 65 72 20 61 6c 6c 20 6f 74 68 65 72 y over all other
d6d0: 20 73 74 61 74 65 73 2c 20 66 6f 72 63 65 20 74 states, force t
d6e0: 68 65 20 74 65 73 74 20 73 74 61 74 65 20 74 6f he test state to
d6f0: 20 52 55 4e 4e 49 4e 47 0a 09 20 20 20 20 28 73 RUNNING.. (s
d700: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
d710: 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 b "UPDATE tests
d720: 53 45 54 20 73 74 61 74 65 3d 3f 20 57 48 45 52 SET state=? WHER
d730: 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 E run_id=? AND t
d740: 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 estname=? AND it
d750: 65 6d 5f 70 61 74 68 3d 27 27 3b 22 20 22 52 55 em_path='';" "RU
d760: 4e 4e 49 4e 47 22 20 72 75 6e 2d 69 64 20 74 65 NNING" run-id te
d770: 73 74 2d 6e 61 6d 65 29 0a 09 20 20 20 20 28 73 st-name).. (s
d780: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 0a 09 qlite3:execute..
d790: 20 20 20 20 20 64 62 0a 09 20 20 20 20 20 22 55 db.. "U
d7a0: 50 44 41 54 45 20 74 65 73 74 73 0a 20 20 20 20 PDATE tests.
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d7c0: 20 20 20 53 45 54 20 73 74 61 74 65 3d 43 41 53 SET state=CAS
d7d0: 45 20 57 48 45 4e 20 28 53 45 4c 45 43 54 20 63 E WHEN (SELECT c
d7e0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 ount(id) FROM te
d7f0: 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 sts WHERE run_id
d800: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d =? AND testname=
d810: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 ? AND item_path
d820: 21 3d 20 27 27 20 41 4e 44 20 73 74 61 74 65 20 != '' AND state
d830: 69 6e 20 28 27 52 55 4e 4e 49 4e 47 27 2c 27 4e in ('RUNNING','N
d840: 4f 54 5f 53 54 41 52 54 45 44 27 29 29 20 3e 20 OT_STARTED')) >
d850: 30 20 54 48 45 4e 20 0a 20 20 20 20 20 20 20 20 0 THEN .
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d870: 20 20 27 52 55 4e 4e 49 4e 47 27 0a 20 20 20 20 'RUNNING'.
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d890: 20 20 20 45 4c 53 45 20 27 43 4f 4d 50 4c 45 54 ELSE 'COMPLET
d8a0: 45 44 27 20 45 4e 44 2c 0a 20 20 20 20 20 20 20 ED' END,.
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d8c0: 20 20 20 73 74 61 74 75 73 3d 43 41 53 45 20 57 status=CASE W
d8d0: 48 45 4e 20 66 61 69 6c 5f 63 6f 75 6e 74 20 3e HEN fail_count >
d8e0: 20 30 20 54 48 45 4e 20 27 46 41 49 4c 27 20 57 0 THEN 'FAIL' W
d8f0: 48 45 4e 20 70 61 73 73 5f 63 6f 75 6e 74 20 3e HEN pass_count >
d900: 20 30 20 41 4e 44 20 66 61 69 6c 5f 63 6f 75 6e 0 AND fail_coun
d910: 74 3d 30 20 54 48 45 4e 20 27 50 41 53 53 27 20 t=0 THEN 'PASS'
d920: 45 4c 53 45 20 27 55 4e 4b 4e 4f 57 4e 27 20 45 ELSE 'UNKNOWN' E
d930: 4e 44 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ND.
d940: 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 WHERE
d950: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 run_id=? AND tes
d960: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d tname=? AND item
d970: 5f 70 61 74 68 3d 27 27 3b 22 0a 09 20 20 20 20 _path='';"..
d980: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d run-id test-nam
d990: 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 e run-id test-na
d9a0: 6d 65 29 29 0a 09 23 66 29 0a 20 20 20 20 20 20 me))..#f).
d9b0: 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d #f))..;;========
d9c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d9d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d9e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d9f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
da00: 3b 20 54 65 73 74 73 20 6d 65 74 61 20 64 61 74 ; Tests meta dat
da10: 61 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d a.;;============
da20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
da30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
da40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
da50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 ==========..;; r
da60: 65 61 64 20 74 68 65 20 72 65 63 6f 72 64 20 67 ead the record g
da70: 69 76 65 6e 20 61 20 74 65 73 74 6e 61 6d 65 0a iven a testname.
da80: 28 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 (define (db:test
da90: 6d 65 74 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 meta-get-record
daa0: 64 62 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 28 db testname). (
dab0: 6c 65 74 20 28 28 72 65 73 20 23 66 29 29 0a 20 let ((res #f)).
dac0: 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d (sqlite3:for-
dad0: 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 20 28 6c each-row. (l
dae0: 61 6d 62 64 61 20 28 69 64 20 74 65 73 74 6e 61 ambda (id testna
daf0: 6d 65 20 61 75 74 68 6f 72 20 6f 77 6e 65 72 20 me author owner
db00: 64 65 73 63 72 69 70 74 69 6f 6e 20 72 65 76 69 description revi
db10: 65 77 65 64 20 69 74 65 72 61 74 65 64 20 61 76 ewed iterated av
db20: 67 5f 72 75 6e 74 69 6d 65 20 61 76 67 5f 64 69 g_runtime avg_di
db30: 73 6b 20 74 61 67 73 29 0a 20 20 20 20 20 20 20 sk tags).
db40: 28 73 65 74 21 20 72 65 73 20 28 76 65 63 74 6f (set! res (vecto
db50: 72 20 69 64 20 74 65 73 74 6e 61 6d 65 20 61 75 r id testname au
db60: 74 68 6f 72 20 6f 77 6e 65 72 20 64 65 73 63 72 thor owner descr
db70: 69 70 74 69 6f 6e 20 72 65 76 69 65 77 65 64 20 iption reviewed
db80: 69 74 65 72 61 74 65 64 20 61 76 67 5f 72 75 6e iterated avg_run
db90: 74 69 6d 65 20 61 76 67 5f 64 69 73 6b 20 74 61 time avg_disk ta
dba0: 67 73 29 29 29 0a 20 20 20 20 20 64 62 20 22 53 gs))). db "S
dbb0: 45 4c 45 43 54 20 69 64 2c 74 65 73 74 6e 61 6d ELECT id,testnam
dbc0: 65 2c 61 75 74 68 6f 72 2c 6f 77 6e 65 72 2c 64 e,author,owner,d
dbd0: 65 73 63 72 69 70 74 69 6f 6e 2c 72 65 76 69 65 escription,revie
dbe0: 77 65 64 2c 69 74 65 72 61 74 65 64 2c 61 76 67 wed,iterated,avg
dbf0: 5f 72 75 6e 74 69 6d 65 2c 61 76 67 5f 64 69 73 _runtime,avg_dis
dc00: 6b 2c 74 61 67 73 20 46 52 4f 4d 20 74 65 73 74 k,tags FROM test
dc10: 5f 6d 65 74 61 20 57 48 45 52 45 20 74 65 73 74 _meta WHERE test
dc20: 6e 61 6d 65 3d 3f 3b 22 0a 20 20 20 20 20 74 65 name=?;". te
dc30: 73 74 6e 61 6d 65 29 0a 20 20 20 20 72 65 73 29 stname). res)
dc40: 29 0a 0a 3b 3b 20 63 72 65 61 74 65 20 61 20 6e )..;; create a n
dc50: 65 77 20 72 65 63 6f 72 64 20 66 6f 72 20 61 20 ew record for a
dc60: 67 69 76 65 6e 20 74 65 73 74 6e 61 6d 65 0a 28 given testname.(
dc70: 64 65 66 69 6e 65 20 28 64 62 3a 74 65 73 74 6d define (db:testm
dc80: 65 74 61 2d 61 64 64 2d 72 65 63 6f 72 64 20 64 eta-add-record d
dc90: 62 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 28 73 b testname). (s
dca0: 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 qlite3:execute d
dcb0: 62 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e b "INSERT OR IGN
dcc0: 4f 52 45 20 49 4e 54 4f 20 74 65 73 74 5f 6d 65 ORE INTO test_me
dcd0: 74 61 20 28 74 65 73 74 6e 61 6d 65 2c 61 75 74 ta (testname,aut
dce0: 68 6f 72 2c 6f 77 6e 65 72 2c 64 65 73 63 72 69 hor,owner,descri
dcf0: 70 74 69 6f 6e 2c 72 65 76 69 65 77 65 64 2c 69 ption,reviewed,i
dd00: 74 65 72 61 74 65 64 2c 61 76 67 5f 72 75 6e 74 terated,avg_runt
dd10: 69 6d 65 2c 61 76 67 5f 64 69 73 6b 2c 74 61 67 ime,avg_disk,tag
dd20: 73 29 20 56 41 4c 55 45 53 20 28 3f 2c 27 27 2c s) VALUES (?,'',
dd30: 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 27 2c 27 '','','','','','
dd40: 27 2c 27 27 29 3b 22 20 74 65 73 74 6e 61 6d 65 ','');" testname
dd50: 29 29 0a 0a 3b 3b 20 75 70 64 61 74 65 20 6f 6e ))..;; update on
dd60: 65 20 6f 66 20 74 68 65 20 74 65 73 74 6d 65 74 e of the testmet
dd70: 61 20 66 69 65 6c 64 73 0a 28 64 65 66 69 6e 65 a fields.(define
dd80: 20 28 64 62 3a 74 65 73 74 6d 65 74 61 2d 75 70 (db:testmeta-up
dd90: 64 61 74 65 2d 66 69 65 6c 64 20 64 62 20 74 65 date-field db te
dda0: 73 74 6e 61 6d 65 20 66 69 65 6c 64 20 76 61 6c stname field val
ddb0: 75 65 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 65 ue). (sqlite3:e
ddc0: 78 65 63 75 74 65 20 64 62 20 28 63 6f 6e 63 20 xecute db (conc
ddd0: 22 55 50 44 41 54 45 20 74 65 73 74 5f 6d 65 74 "UPDATE test_met
dde0: 61 20 53 45 54 20 22 20 66 69 65 6c 64 20 22 3d a SET " field "=
ddf0: 3f 20 57 48 45 52 45 20 74 65 73 74 6e 61 6d 65 ? WHERE testname
de00: 3d 3f 3b 22 29 20 76 61 6c 75 65 20 74 65 73 74 =?;") value test
de10: 6e 61 6d 65 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d name))..;;======
de20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
de30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
de40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
de50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
de60: 0a 3b 3b 20 54 20 45 20 53 20 54 20 20 20 44 20 .;; T E S T D
de70: 41 20 54 20 41 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d A T A .;;=======
de80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
de90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
dea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
deb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
dec0: 0a 28 64 65 66 69 6e 65 20 28 64 62 3a 63 73 76 .(define (db:csv
ded0: 2d 3e 74 65 73 74 2d 64 61 74 61 20 64 62 20 74 ->test-data db t
dee0: 65 73 74 2d 69 64 20 63 73 76 64 61 74 61 29 0a est-id csvdata).
def0: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 (debug:print 4
df00: 20 22 74 65 73 74 2d 69 64 20 22 20 74 65 73 74 "test-id " test
df10: 2d 69 64 20 22 2c 20 63 73 76 64 61 74 61 3a 20 -id ", csvdata:
df20: 22 20 63 73 76 64 61 74 61 29 0a 20 20 28 6c 65 " csvdata). (le
df30: 74 20 28 28 74 64 62 20 20 20 20 20 28 64 62 3a t ((tdb (db:
df40: 6f 70 65 6e 2d 74 65 73 74 2d 64 62 2d 62 79 2d open-test-db-by-
df50: 74 65 73 74 2d 69 64 20 64 62 20 74 65 73 74 2d test-id db test-
df60: 69 64 29 29 29 0a 20 20 20 20 28 69 66 20 74 64 id))). (if td
df70: 62 0a 09 28 6c 65 74 20 28 28 63 73 76 6c 69 73 b..(let ((csvlis
df80: 74 20 28 63 73 76 2d 3e 6c 69 73 74 20 28 6d 61 t (csv->list (ma
df90: 6b 65 2d 63 73 76 2d 72 65 61 64 65 72 0a 09 09 ke-csv-reader...
dfa0: 09 09 20 20 20 28 6f 70 65 6e 2d 69 6e 70 75 74 .. (open-input
dfb0: 2d 73 74 72 69 6e 67 20 63 73 76 64 61 74 61 29 -string csvdata)
dfc0: 0a 09 09 09 09 20 20 20 27 28 28 73 74 72 69 70 ..... '((strip
dfd0: 2d 6c 65 61 64 69 6e 67 2d 77 68 69 74 65 73 70 -leading-whitesp
dfe0: 61 63 65 3f 20 23 74 29 0a 09 09 09 09 20 20 20 ace? #t).....
dff0: 20 20 28 73 74 72 69 70 2d 74 72 61 69 6c 69 6e (strip-trailin
e000: 67 2d 77 68 69 74 65 73 70 61 63 65 3f 20 23 74 g-whitespace? #t
e010: 29 29 20 29 29 29 29 20 3b 3b 20 28 63 73 76 2d )) )))) ;; (csv-
e020: 3e 6c 69 73 74 20 63 73 76 64 61 74 61 29 29 29 >list csvdata)))
e030: 0a 09 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 .. (for-each ..
e040: 20 20 20 28 6c 61 6d 62 64 61 20 28 63 73 76 72 (lambda (csvr
e050: 6f 77 29 0a 09 20 20 20 20 20 28 6c 65 74 2a 20 ow).. (let*
e060: 28 28 70 61 64 64 65 64 2d 72 6f 77 20 20 28 74 ((padded-row (t
e070: 61 6b 65 20 28 61 70 70 65 6e 64 20 63 73 76 72 ake (append csvr
e080: 6f 77 20 28 6c 69 73 74 20 23 66 20 23 66 20 23 ow (list #f #f #
e090: 66 20 23 66 20 23 66 20 23 66 20 23 66 20 23 66 f #f #f #f #f #f
e0a0: 20 23 66 29 29 20 39 29 29 0a 09 09 20 20 20 20 #f)) 9))...
e0b0: 28 63 61 74 65 67 6f 72 79 20 20 20 20 28 6c 69 (category (li
e0c0: 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 6f st-ref padded-ro
e0d0: 77 20 30 29 29 0a 09 09 20 20 20 20 28 76 61 72 w 0))... (var
e0e0: 69 61 62 6c 65 20 20 20 20 28 6c 69 73 74 2d 72 iable (list-r
e0f0: 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 31 29 ef padded-row 1)
e100: 29 0a 09 09 20 20 20 20 28 76 61 6c 75 65 20 20 )... (value
e110: 20 20 20 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 (any->numbe
e120: 72 2d 69 66 2d 70 6f 73 73 69 62 6c 65 20 28 6c r-if-possible (l
e130: 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 2d 72 ist-ref padded-r
e140: 6f 77 20 32 29 29 29 0a 09 09 20 20 20 20 28 65 ow 2)))... (e
e150: 78 70 65 63 74 65 64 20 20 20 20 28 61 6e 79 2d xpected (any-
e160: 3e 6e 75 6d 62 65 72 2d 69 66 2d 70 6f 73 73 69 >number-if-possi
e170: 62 6c 65 20 28 6c 69 73 74 2d 72 65 66 20 70 61 ble (list-ref pa
e180: 64 64 65 64 2d 72 6f 77 20 33 29 29 29 0a 09 09 dded-row 3)))...
e190: 20 20 20 20 28 74 6f 6c 20 20 20 20 20 20 20 20 (tol
e1a0: 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 2d 69 66 (any->number-if
e1b0: 2d 70 6f 73 73 69 62 6c 65 20 28 6c 69 73 74 2d -possible (list-
e1c0: 72 65 66 20 70 61 64 64 65 64 2d 72 6f 77 20 34 ref padded-row 4
e1d0: 29 29 29 20 3b 3b 20 3e 2c 20 3c 2c 20 3e 3d 2c ))) ;; >, <, >=,
e1e0: 20 3c 3d 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 <=, or a number
e1f0: 0a 09 09 20 20 20 20 28 75 6e 69 74 73 20 20 20 ... (units
e200: 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 70 61 (list-ref pa
e210: 64 64 65 64 2d 72 6f 77 20 35 29 29 0a 09 09 20 dded-row 5))...
e220: 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 20 20 20 (comment
e230: 28 6c 69 73 74 2d 72 65 66 20 70 61 64 64 65 64 (list-ref padded
e240: 2d 72 6f 77 20 36 29 29 0a 09 09 20 20 20 20 28 -row 6))... (
e250: 73 74 61 74 75 73 20 20 20 20 20 20 28 6c 65 74 status (let
e260: 20 28 28 73 20 28 6c 69 73 74 2d 72 65 66 20 70 ((s (list-ref p
e270: 61 64 64 65 64 2d 72 6f 77 20 37 29 29 29 0a 09 added-row 7)))..
e280: 09 09 09 20 20 20 28 69 66 20 28 61 6e 64 20 28 ... (if (and (
e290: 73 74 72 69 6e 67 3f 20 73 29 28 6f 72 20 28 73 string? s)(or (s
e2a0: 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 tring-match (reg
e2b0: 65 78 70 20 22 5e 5c 5c 73 2a 24 22 29 20 73 29 exp "^\\s*$") s)
e2c0: 0a 09 09 09 09 09 09 09 20 20 20 28 73 74 72 69 ........ (stri
e2d0: 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 ng-match (regexp
e2e0: 20 22 5e 6e 2f 61 24 22 29 20 73 29 29 29 0a 09 "^n/a$") s)))..
e2f0: 09 09 09 20 20 20 20 20 20 20 23 66 0a 09 09 09 ... #f....
e300: 09 20 20 20 20 20 20 20 73 29 29 29 20 3b 3b 20 . s))) ;;
e310: 69 66 20 73 70 65 63 69 66 69 65 64 20 6f 6e 20 if specified on
e320: 74 68 65 20 69 6e 70 75 74 20 74 68 65 6e 20 75 the input then u
e330: 73 65 2c 20 65 6c 73 65 20 63 61 6c 63 75 6c 61 se, else calcula
e340: 74 65 0a 09 09 20 20 20 20 28 74 79 70 65 20 20 te... (type
e350: 20 20 20 20 20 20 28 6c 69 73 74 2d 72 65 66 20 (list-ref
e360: 70 61 64 64 65 64 2d 72 6f 77 20 38 29 29 29 0a padded-row 8))).
e370: 09 20 20 20 20 20 20 20 3b 3b 20 6c 6f 6f 6b 20 . ;; look
e380: 75 70 20 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c up expected,tol,
e390: 75 6e 69 74 73 20 66 72 6f 6d 20 70 72 65 76 69 units from previ
e3a0: 6f 75 73 20 62 65 73 74 20 66 69 74 20 74 65 73 ous best fit tes
e3b0: 74 20 69 66 20 74 68 65 79 20 61 72 65 20 61 6c t if they are al
e3c0: 6c 20 65 69 74 68 65 72 20 23 66 20 6f 72 20 27 l either #f or '
e3d0: 27 0a 09 20 20 20 20 20 20 20 28 64 65 62 75 67 '.. (debug
e3e0: 3a 70 72 69 6e 74 20 34 20 22 42 45 46 4f 52 45 :print 4 "BEFORE
e3f0: 3a 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 61 : category: " ca
e400: 74 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 6c tegory " variabl
e410: 65 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 20 e: " variable "
e420: 76 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 0a value: " value .
e430: 09 09 09 20 20 20 20 22 2c 20 65 78 70 65 63 74 ... ", expect
e440: 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 22 ed: " expected "
e450: 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 6e tol: " tol " un
e460: 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 73 its: " units " s
e470: 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 20 tatus: " status
e480: 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f 6d " comment: " com
e490: 6d 65 6e 74 20 22 20 74 79 70 65 3a 20 22 20 74 ment " type: " t
e4a0: 79 70 65 29 0a 0a 09 20 20 20 20 20 20 20 28 69 ype)... (i
e4b0: 66 20 28 61 6e 64 20 28 6f 72 20 28 6e 6f 74 20 f (and (or (not
e4c0: 65 78 70 65 63 74 65 64 29 28 65 71 75 61 6c 3f expected)(equal?
e4d0: 20 65 78 70 65 63 74 65 64 20 22 22 29 29 0a 09 expected ""))..
e4e0: 09 09 28 6f 72 20 28 6e 6f 74 20 74 6f 6c 29 20 ..(or (not tol)
e4f0: 20 20 20 20 28 65 71 75 61 6c 3f 20 65 78 70 65 (equal? expe
e500: 63 74 65 64 20 22 22 29 29 0a 09 09 09 28 6f 72 cted ""))....(or
e510: 20 28 6e 6f 74 20 75 6e 69 74 73 29 20 20 20 28 (not units) (
e520: 65 71 75 61 6c 3f 20 65 78 70 65 63 74 65 64 20 equal? expected
e530: 22 22 29 29 29 0a 09 09 20 20 20 28 6c 65 74 2d "")))... (let-
e540: 76 61 6c 75 65 73 20 28 28 28 6e 65 77 2d 65 78 values (((new-ex
e550: 70 65 63 74 65 64 20 6e 65 77 2d 74 6f 6c 20 6e pected new-tol n
e560: 65 77 2d 75 6e 69 74 73 29 28 64 62 3a 67 65 74 ew-units)(db:get
e570: 2d 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 -prev-tol-for-te
e580: 73 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 st db test-id ca
e590: 74 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 29 tegory variable)
e5a0: 29 29 0a 09 09 09 20 20 20 20 20 20 20 28 73 65 )).... (se
e5b0: 74 21 20 65 78 70 65 63 74 65 64 20 6e 65 77 2d t! expected new-
e5c0: 65 78 70 65 63 74 65 64 29 0a 09 09 09 20 20 20 expected)....
e5d0: 20 20 20 20 28 73 65 74 21 20 74 6f 6c 20 20 20 (set! tol
e5e0: 20 20 20 6e 65 77 2d 74 6f 6c 29 0a 09 09 09 20 new-tol)....
e5f0: 20 20 20 20 20 20 28 73 65 74 21 20 75 6e 69 74 (set! unit
e600: 73 20 20 20 20 6e 65 77 2d 75 6e 69 74 73 29 29 s new-units))
e610: 29 0a 0a 09 20 20 20 20 20 20 20 28 64 65 62 75 )... (debu
e620: 67 3a 70 72 69 6e 74 20 34 20 22 41 46 54 45 52 g:print 4 "AFTER
e630: 3a 20 20 63 61 74 65 67 6f 72 79 3a 20 22 20 63 : category: " c
e640: 61 74 65 67 6f 72 79 20 22 20 76 61 72 69 61 62 ategory " variab
e650: 6c 65 3a 20 22 20 76 61 72 69 61 62 6c 65 20 22 le: " variable "
e660: 20 76 61 6c 75 65 3a 20 22 20 76 61 6c 75 65 20 value: " value
e670: 0a 09 09 09 20 20 20 20 22 2c 20 65 78 70 65 63 .... ", expec
e680: 74 65 64 3a 20 22 20 65 78 70 65 63 74 65 64 20 ted: " expected
e690: 22 20 74 6f 6c 3a 20 22 20 74 6f 6c 20 22 20 75 " tol: " tol " u
e6a0: 6e 69 74 73 3a 20 22 20 75 6e 69 74 73 20 22 20 nits: " units "
e6b0: 73 74 61 74 75 73 3a 20 22 20 73 74 61 74 75 73 status: " status
e6c0: 20 22 20 63 6f 6d 6d 65 6e 74 3a 20 22 20 63 6f " comment: " co
e6d0: 6d 6d 65 6e 74 29 0a 09 20 20 20 20 20 20 20 3b mment).. ;
e6e0: 3b 20 63 61 6c 63 75 6c 61 74 65 20 73 74 61 74 ; calculate stat
e6f0: 75 73 20 69 66 20 4e 4f 54 20 73 70 65 63 69 66 us if NOT specif
e700: 69 65 64 0a 09 20 20 20 20 20 20 20 28 69 66 20 ied.. (if
e710: 28 61 6e 64 20 28 6e 6f 74 20 73 74 61 74 75 73 (and (not status
e720: 29 28 6e 75 6d 62 65 72 3f 20 65 78 70 65 63 74 )(number? expect
e730: 65 64 29 28 6e 75 6d 62 65 72 3f 20 76 61 6c 75 ed)(number? valu
e740: 65 29 29 20 3b 3b 20 6e 65 65 64 20 65 78 70 65 e)) ;; need expe
e750: 63 74 65 64 20 61 6e 64 20 76 61 6c 75 65 20 74 cted and value t
e760: 6f 20 62 65 20 6e 75 6d 62 65 72 73 0a 09 09 20 o be numbers...
e770: 20 20 28 69 66 20 28 6e 75 6d 62 65 72 3f 20 74 (if (number? t
e780: 6f 6c 29 20 3b 3b 20 69 66 20 74 6f 6c 20 69 73 ol) ;; if tol is
e790: 20 61 20 6e 75 6d 62 65 72 20 74 68 65 6e 20 77 a number then w
e7a0: 65 20 64 6f 20 74 68 65 20 73 74 61 6e 64 61 72 e do the standar
e7b0: 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 09 09 20 d comparison...
e7c0: 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 6d 61 (let* ((ma
e7d0: 78 2d 76 61 6c 20 28 2b 20 65 78 70 65 63 74 65 x-val (+ expecte
e7e0: 64 20 74 6f 6c 29 29 0a 09 09 09 20 20 20 20 20 d tol))....
e7f0: 20 28 6d 69 6e 2d 76 61 6c 20 28 2d 20 65 78 70 (min-val (- exp
e800: 65 63 74 65 64 20 74 6f 6c 29 29 0a 09 09 09 20 ected tol))....
e810: 20 20 20 20 20 28 72 65 73 75 6c 74 20 20 28 61 (result (a
e820: 6e 64 20 28 3e 3d 20 20 76 61 6c 75 65 20 6d 69 nd (>= value mi
e830: 6e 2d 76 61 6c 29 28 3c 3d 20 76 61 6c 75 65 20 n-val)(<= value
e840: 6d 61 78 2d 76 61 6c 29 29 29 29 0a 09 09 09 20 max-val))))....
e850: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 (debug:print 4 "
e860: 6d 61 78 2d 76 61 6c 3a 20 22 20 6d 61 78 2d 76 max-val: " max-v
e870: 61 6c 20 22 20 6d 69 6e 2d 76 61 6c 3a 20 22 20 al " min-val: "
e880: 6d 69 6e 2d 76 61 6c 20 22 20 72 65 73 75 6c 74 min-val " result
e890: 3a 20 22 20 72 65 73 75 6c 74 29 0a 09 09 09 20 : " result)....
e8a0: 28 73 65 74 21 20 73 74 61 74 75 73 20 28 69 66 (set! status (if
e8b0: 20 72 65 73 75 6c 74 20 22 70 61 73 73 22 20 22 result "pass" "
e8c0: 66 61 69 6c 22 29 29 29 0a 09 09 20 20 20 20 20 fail")))...
e8d0: 20 20 28 73 65 74 21 20 73 74 61 74 75 73 20 3b (set! status ;
e8e0: 3b 20 4e 42 2f 2f 20 6e 65 65 64 20 74 6f 20 61 ; NB// need to a
e8f0: 73 73 65 73 73 20 65 61 63 68 20 6f 6e 65 20 28 ssess each one (
e900: 69 2e 65 2e 20 6e 6f 74 20 72 65 74 75 72 6e 20 i.e. not return
e910: 6f 70 65 72 61 74 6f 72 20 73 69 6e 63 65 20 6e operator since n
e920: 65 65 64 20 74 6f 20 61 63 74 20 69 66 20 6e 6f eed to act if no
e930: 74 20 76 61 6c 69 64 20 6f 70 2e 0a 09 09 09 20 t valid op.....
e940: 20 20 20 20 28 63 61 73 65 20 28 73 74 72 69 6e (case (strin
e950: 67 2d 3e 73 79 6d 62 6f 6c 20 74 6f 6c 29 20 3b g->symbol tol) ;
e960: 3b 20 74 6f 6c 20 73 68 6f 75 6c 64 20 62 65 20 ; tol should be
e970: 3e 2c 20 3c 2c 20 3e 3d 2c 20 3c 3d 0a 09 09 09 >, <, >=, <=....
e980: 20 20 20 20 20 20 20 28 28 3e 29 20 20 28 69 66 ((>) (if
e990: 20 28 3e 20 20 76 61 6c 75 65 20 65 78 70 65 63 (> value expec
e9a0: 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 ted) "pass" "fai
e9b0: 6c 22 29 29 0a 09 09 09 20 20 20 20 20 20 20 28 l")).... (
e9c0: 28 3c 29 20 20 28 69 66 20 28 3c 20 20 76 61 6c (<) (if (< val
e9d0: 75 65 20 65 78 70 65 63 74 65 64 29 20 22 70 61 ue expected) "pa
e9e0: 73 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 ss" "fail"))....
e9f0: 20 20 20 20 20 20 20 28 28 3e 3d 29 20 28 69 66 ((>=) (if
ea00: 20 28 3e 3d 20 76 61 6c 75 65 20 65 78 70 65 63 (>= value expec
ea10: 74 65 64 29 20 22 70 61 73 73 22 20 22 66 61 69 ted) "pass" "fai
ea20: 6c 22 29 29 0a 09 09 09 20 20 20 20 20 20 20 28 l")).... (
ea30: 28 3c 3d 29 20 28 69 66 20 28 3c 3d 20 76 61 6c (<=) (if (<= val
ea40: 75 65 20 65 78 70 65 63 74 65 64 29 20 22 70 61 ue expected) "pa
ea50: 73 73 22 20 22 66 61 69 6c 22 29 29 0a 09 09 09 ss" "fail"))....
ea60: 20 20 20 20 20 20 20 28 65 6c 73 65 20 28 63 6f (else (co
ea70: 6e 63 20 22 45 52 52 4f 52 3a 20 62 61 64 20 74 nc "ERROR: bad t
ea80: 6f 6c 20 63 6f 6d 70 61 72 61 74 6f 72 20 22 20 ol comparator "
ea90: 74 6f 6c 29 29 29 29 29 29 0a 09 20 20 20 20 20 tol))))))..
eaa0: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 (debug:print 4
eab0: 20 22 41 46 54 45 52 32 3a 20 63 61 74 65 67 6f "AFTER2: catego
eac0: 72 79 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 ry: " category "
ead0: 20 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 variable: " var
eae0: 69 61 62 6c 65 20 22 20 76 61 6c 75 65 3a 20 22 iable " value: "
eaf0: 20 76 61 6c 75 65 20 0a 09 09 09 20 20 20 20 22 value .... "
eb00: 2c 20 65 78 70 65 63 74 65 64 3a 20 22 20 65 78 , expected: " ex
eb10: 70 65 63 74 65 64 20 22 20 74 6f 6c 3a 20 22 20 pected " tol: "
eb20: 74 6f 6c 20 22 20 75 6e 69 74 73 3a 20 22 20 75 tol " units: " u
eb30: 6e 69 74 73 20 22 20 73 74 61 74 75 73 3a 20 22 nits " status: "
eb40: 20 73 74 61 74 75 73 20 22 20 63 6f 6d 6d 65 6e status " commen
eb50: 74 3a 20 22 20 63 6f 6d 6d 65 6e 74 29 0a 09 20 t: " comment)..
eb60: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 (sqlite3:e
eb70: 78 65 63 75 74 65 20 74 64 62 20 22 49 4e 53 45 xecute tdb "INSE
eb80: 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e RT OR REPLACE IN
eb90: 54 4f 20 74 65 73 74 5f 64 61 74 61 20 28 74 65 TO test_data (te
eba0: 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76 st_id,category,v
ebb0: 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78 ariable,value,ex
ebc0: 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73 pected,tol,units
ebd0: 2c 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 75 73 2c ,comment,status,
ebe0: 74 79 70 65 29 20 56 41 4c 55 45 53 20 28 3f 2c type) VALUES (?,
ebf0: 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c ?,?,?,?,?,?,?,?,
ec00: 3f 29 3b 22 0a 09 09 09 09 74 65 73 74 2d 69 64 ?);".....test-id
ec10: 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 61 62 category variab
ec20: 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 74 65 le value expecte
ec30: 64 20 74 6f 6c 20 75 6e 69 74 73 20 28 69 66 20 d tol units (if
ec40: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 comment comment
ec50: 22 22 29 20 73 74 61 74 75 73 20 74 79 70 65 29 "") status type)
ec60: 0a 09 20 20 20 20 20 20 20 28 73 71 6c 69 74 65 .. (sqlite
ec70: 33 3a 66 69 6e 61 6c 69 7a 65 21 20 74 64 62 29 3:finalize! tdb)
ec80: 29 29 0a 09 20 20 20 63 73 76 6c 69 73 74 29 29 )).. csvlist))
ec90: 29 29 29 0a 0a 3b 3b 20 67 65 74 20 61 20 6c 69 )))..;; get a li
eca0: 73 74 20 6f 66 20 74 65 73 74 5f 64 61 74 61 20 st of test_data
ecb0: 72 65 63 6f 72 64 73 20 6d 61 74 63 68 69 6e 67 records matching
ecc0: 20 63 61 74 65 67 6f 72 79 70 61 74 74 0a 28 64 categorypatt.(d
ecd0: 65 66 69 6e 65 20 28 64 62 3a 72 65 61 64 2d 74 efine (db:read-t
ece0: 65 73 74 2d 64 61 74 61 20 64 62 20 74 65 73 74 est-data db test
ecf0: 2d 69 64 20 63 61 74 65 67 6f 72 79 70 61 74 74 -id categorypatt
ed00: 29 0a 20 20 28 6c 65 74 20 28 28 74 64 62 20 20 ). (let ((tdb
ed10: 28 64 62 3a 6f 70 65 6e 2d 74 65 73 74 2d 64 62 (db:open-test-db
ed20: 2d 62 79 2d 74 65 73 74 2d 69 64 20 64 62 20 74 -by-test-id db t
ed30: 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 28 69 est-id))). (i
ed40: 66 20 74 64 62 0a 09 28 6c 65 74 20 28 28 72 65 f tdb..(let ((re
ed50: 73 20 27 28 29 29 29 0a 09 20 20 28 73 71 6c 69 s '())).. (sqli
ed60: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
ed70: 20 0a 09 20 20 20 28 6c 61 6d 62 64 61 20 28 69 .. (lambda (i
ed80: 64 20 74 65 73 74 5f 69 64 20 63 61 74 65 67 6f d test_id catego
ed90: 72 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 ry variable valu
eda0: 65 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 e expected tol u
edb0: 6e 69 74 73 20 63 6f 6d 6d 65 6e 74 20 73 74 61 nits comment sta
edc0: 74 75 73 20 74 79 70 65 29 0a 09 20 20 20 20 20 tus type)..
edd0: 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73 20 (set! res (cons
ede0: 28 76 65 63 74 6f 72 20 69 64 20 74 65 73 74 5f (vector id test_
edf0: 69 64 20 63 61 74 65 67 6f 72 79 20 76 61 72 69 id category vari
ee00: 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 65 63 able value expec
ee10: 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 63 6f ted tol units co
ee20: 6d 6d 65 6e 74 20 73 74 61 74 75 73 20 74 79 70 mment status typ
ee30: 65 29 20 72 65 73 29 29 29 0a 09 20 20 20 74 64 e) res))).. td
ee40: 62 0a 09 20 20 20 22 53 45 4c 45 43 54 20 69 64 b.. "SELECT id
ee50: 2c 74 65 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 ,test_id,categor
ee60: 79 2c 76 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 y,variable,value
ee70: 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e ,expected,tol,un
ee80: 69 74 73 2c 63 6f 6d 6d 65 6e 74 2c 73 74 61 74 its,comment,stat
ee90: 75 73 2c 74 79 70 65 20 46 52 4f 4d 20 74 65 73 us,type FROM tes
eea0: 74 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 73 t_data WHERE tes
eeb0: 74 5f 69 64 3d 3f 20 41 4e 44 20 63 61 74 65 67 t_id=? AND categ
eec0: 6f 72 79 20 4c 49 4b 45 20 3f 20 4f 52 44 45 52 ory LIKE ? ORDER
eed0: 20 42 59 20 63 61 74 65 67 6f 72 79 2c 76 61 72 BY category,var
eee0: 69 61 62 6c 65 3b 22 20 74 65 73 74 2d 69 64 20 iable;" test-id
eef0: 63 61 74 65 67 6f 72 79 70 61 74 74 29 0a 09 20 categorypatt)..
ef00: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 (sqlite3:finali
ef10: 7a 65 21 20 74 64 62 29 0a 09 20 20 28 72 65 76 ze! tdb).. (rev
ef20: 65 72 73 65 20 72 65 73 29 29 0a 09 27 28 29 29 erse res))..'())
ef30: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 64 62 3a ))..(define (db:
ef40: 6c 6f 61 64 2d 74 65 73 74 2d 64 61 74 61 20 64 load-test-data d
ef50: 62 20 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 b test-id). (le
ef60: 74 20 6c 6f 6f 70 20 28 28 6c 69 6e 20 28 72 65 t loop ((lin (re
ef70: 61 64 2d 6c 69 6e 65 29 29 29 0a 20 20 20 20 28 ad-line))). (
ef80: 69 66 20 28 6e 6f 74 20 28 65 6f 66 2d 6f 62 6a if (not (eof-obj
ef90: 65 63 74 3f 20 6c 69 6e 29 29 0a 09 28 62 65 67 ect? lin))..(beg
efa0: 69 6e 0a 09 20 20 28 64 65 62 75 67 3a 70 72 69 in.. (debug:pri
efb0: 6e 74 20 34 20 6c 69 6e 29 0a 09 20 20 28 64 62 nt 4 lin).. (db
efc0: 3a 63 73 76 2d 3e 74 65 73 74 2d 64 61 74 61 20 :csv->test-data
efd0: 64 62 20 74 65 73 74 2d 69 64 20 6c 69 6e 29 0a db test-id lin).
efe0: 09 20 20 28 6c 6f 6f 70 20 28 72 65 61 64 2d 6c . (loop (read-l
eff0: 69 6e 65 29 29 29 29 29 0a 20 20 3b 3b 20 72 6f ine))))). ;; ro
f000: 6c 6c 20 75 70 20 74 68 65 20 63 75 72 72 65 6e ll up the curren
f010: 74 20 72 65 73 75 6c 74 73 2e 0a 20 20 3b 3b 20 t results.. ;;
f020: 46 49 58 4d 45 3a 20 41 64 64 20 74 68 65 20 73 FIXME: Add the s
f030: 74 61 74 75 73 20 74 6f 20 0a 20 20 28 64 62 3a tatus to . (db:
f040: 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c 6c 75 70 test-data-rollup
f050: 20 64 62 20 74 65 73 74 2d 69 64 20 23 66 29 29 db test-id #f))
f060: 0a 0a 3b 3b 20 57 41 52 4e 49 4e 47 3a 20 44 6f ..;; WARNING: Do
f070: 20 4e 4f 54 20 63 61 6c 6c 20 74 68 69 73 20 66 NOT call this f
f080: 6f 72 20 74 68 65 20 70 61 72 65 6e 74 20 74 65 or the parent te
f090: 73 74 20 6f 6e 20 61 6e 20 69 74 65 72 61 74 65 st on an iterate
f0a0: 64 20 74 65 73 74 0a 3b 3b 20 52 6f 6c 6c 20 75 d test.;; Roll u
f0b0: 70 20 74 65 73 74 5f 64 61 74 61 20 70 61 73 73 p test_data pass
f0c0: 2f 66 61 69 6c 20 72 65 73 75 6c 74 73 0a 3b 3b /fail results.;;
f0d0: 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 74 65 73 look at the tes
f0e0: 74 5f 64 61 74 61 20 73 74 61 74 75 73 20 66 69 t_data status fi
f0f0: 65 6c 64 2c 20 0a 3b 3b 20 20 20 20 69 66 20 61 eld, .;; if a
f100: 6c 6c 20 61 72 65 20 70 61 73 73 20 28 61 6e 79 ll are pass (any
f110: 20 63 61 73 65 29 20 61 6e 64 20 74 68 65 20 74 case) and the t
f120: 65 73 74 20 73 74 61 74 75 73 20 69 73 20 50 41 est status is PA
f130: 53 53 20 6f 72 20 4e 55 4c 4c 20 6f 72 20 27 27 SS or NULL or ''
f140: 20 74 68 65 6e 20 73 65 74 20 74 65 73 74 20 73 then set test s
f150: 74 61 74 75 73 20 74 6f 20 50 41 53 53 2e 0a 3b tatus to PASS..;
f160: 3b 20 20 20 20 69 66 20 6f 6e 65 20 6f 72 20 6d ; if one or m
f170: 6f 72 65 20 61 72 65 20 66 61 69 6c 20 28 61 6e ore are fail (an
f180: 79 20 63 61 73 65 29 20 74 68 65 6e 20 73 65 74 y case) then set
f190: 20 74 65 73 74 20 73 74 61 74 75 73 20 74 6f 20 test status to
f1a0: 50 41 53 53 2c 20 6e 6f 6e 20 22 70 61 73 73 22 PASS, non "pass"
f1b0: 20 6f 72 20 22 66 61 69 6c 22 20 61 72 65 20 69 or "fail" are i
f1c0: 67 6e 6f 72 65 64 0a 28 64 65 66 69 6e 65 20 28 gnored.(define (
f1d0: 64 62 3a 74 65 73 74 2d 64 61 74 61 2d 72 6f 6c db:test-data-rol
f1e0: 6c 75 70 20 64 62 20 74 65 73 74 2d 69 64 20 73 lup db test-id s
f1f0: 74 61 74 75 73 29 0a 20 20 28 6c 65 74 20 28 28 tatus). (let ((
f200: 74 64 62 20 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c tdb (open-run-cl
f210: 6f 73 65 20 64 62 3a 6f 70 65 6e 2d 74 65 73 74 ose db:open-test
f220: 2d 64 62 2d 62 79 2d 74 65 73 74 2d 69 64 20 64 -db-by-test-id d
f230: 62 20 74 65 73 74 2d 69 64 29 29 0a 09 28 66 61 b test-id))..(fa
f240: 69 6c 2d 63 6f 75 6e 74 20 30 29 0a 09 28 70 61 il-count 0)..(pa
f250: 73 73 2d 63 6f 75 6e 74 20 30 29 29 0a 20 20 20 ss-count 0)).
f260: 20 28 69 66 20 74 64 62 0a 09 28 62 65 67 69 6e (if tdb..(begin
f270: 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72 .. (sqlite3:for
f280: 2d 65 61 63 68 2d 72 6f 77 0a 09 20 20 20 28 6c -each-row.. (l
f290: 61 6d 62 64 61 20 28 66 63 6f 75 6e 74 20 70 63 ambda (fcount pc
f2a0: 6f 75 6e 74 29 0a 09 20 20 20 20 20 28 73 65 74 ount).. (set
f2b0: 21 20 66 61 69 6c 2d 63 6f 75 6e 74 20 66 63 6f ! fail-count fco
f2c0: 75 6e 74 29 0a 09 20 20 20 20 20 28 73 65 74 21 unt).. (set!
f2d0: 20 70 61 73 73 2d 63 6f 75 6e 74 20 70 63 6f 75 pass-count pcou
f2e0: 6e 74 29 29 0a 09 20 20 20 74 64 62 20 0a 09 20 nt)).. tdb ..
f2f0: 20 20 22 53 45 4c 45 43 54 20 28 53 45 4c 45 43 "SELECT (SELEC
f300: 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d T count(id) FROM
f310: 20 74 65 73 74 5f 64 61 74 61 20 57 48 45 52 45 test_data WHERE
f320: 20 74 65 73 74 5f 69 64 3d 3f 20 41 4e 44 20 73 test_id=? AND s
f330: 74 61 74 75 73 20 6c 69 6b 65 20 27 66 61 69 6c tatus like 'fail
f340: 27 29 20 41 53 20 66 61 69 6c 5f 63 6f 75 6e 74 ') AS fail_count
f350: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
f360: 20 20 20 20 20 28 53 45 4c 45 43 54 20 63 6f 75 (SELECT cou
f370: 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73 74 nt(id) FROM test
f380: 5f 64 61 74 61 20 57 48 45 52 45 20 74 65 73 74 _data WHERE test
f390: 5f 69 64 3d 3f 20 41 4e 44 20 73 74 61 74 75 73 _id=? AND status
f3a0: 20 6c 69 6b 65 20 27 70 61 73 73 27 29 20 41 53 like 'pass') AS
f3b0: 20 70 61 73 73 5f 63 6f 75 6e 74 3b 22 0a 09 20 pass_count;"..
f3c0: 20 20 74 65 73 74 2d 69 64 20 74 65 73 74 2d 69 test-id test-i
f3d0: 64 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 66 d).. (sqlite3:f
f3e0: 69 6e 61 6c 69 7a 65 21 20 74 64 62 29 0a 0a 09 inalize! tdb)...
f3f0: 20 20 3b 3b 20 4e 6f 77 20 72 6f 6c 6c 75 70 20 ;; Now rollup
f400: 74 68 65 20 63 6f 75 6e 74 73 20 74 6f 20 74 68 the counts to th
f410: 65 20 63 65 6e 74 72 61 6c 20 6d 65 67 61 74 65 e central megate
f420: 73 74 2e 64 62 0a 09 20 20 28 72 64 62 3a 70 61 st.db.. (rdb:pa
f430: 73 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 74 ss-fail-counts t
f440: 65 73 74 2d 69 64 20 66 61 69 6c 2d 63 6f 75 6e est-id fail-coun
f450: 74 20 70 61 73 73 2d 63 6f 75 6e 74 29 0a 09 20 t pass-count)..
f460: 20 3b 3b 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ;; (sqlite3:exe
f470: 63 75 74 65 20 64 62 20 22 55 50 44 41 54 45 20 cute db "UPDATE
f480: 74 65 73 74 73 20 53 45 54 20 66 61 69 6c 5f 63 tests SET fail_c
f490: 6f 75 6e 74 3d 3f 2c 70 61 73 73 5f 63 6f 75 6e ount=?,pass_coun
f4a0: 74 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 t=? WHERE id=?;"
f4b0: 20 0a 09 20 20 3b 3b 20 20 20 20 20 20 20 20 20 .. ;;
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c fail
f4d0: 2d 63 6f 75 6e 74 20 70 61 73 73 2d 63 6f 75 6e -count pass-coun
f4e0: 74 20 74 65 73 74 2d 69 64 29 0a 0a 09 20 20 28 t test-id)... (
f4f0: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 31 29 thread-sleep! 1)
f500: 20 3b 3b 20 70 6c 61 79 20 6e 69 63 65 20 77 69 ;; play nice wi
f510: 74 68 20 74 68 65 20 71 75 65 75 65 20 62 79 20 th the queue by
f520: 65 6e 73 75 72 69 6e 67 20 74 68 65 20 72 6f 6c ensuring the rol
f530: 6c 75 70 20 69 73 20 61 74 20 6c 65 61 73 74 20 lup is at least
f540: 31 30 6d 73 20 6c 61 74 65 72 20 74 68 61 6e 20 10ms later than
f550: 74 68 65 20 73 65 74 0a 09 20 20 0a 09 20 20 3b the set.. .. ;
f560: 3b 20 69 66 20 74 68 65 20 74 65 73 74 20 69 73 ; if the test is
f570: 20 6e 6f 74 20 46 41 49 4c 20 74 68 65 6e 20 73 not FAIL then s
f580: 65 74 20 73 74 61 74 75 73 20 62 61 73 65 64 20 et status based
f590: 6f 6e 20 74 68 65 20 66 61 69 6c 20 61 6e 64 20 on the fail and
f5a0: 70 61 73 73 20 63 6f 75 6e 74 73 2e 0a 09 20 20 pass counts...
f5b0: 28 72 64 62 3a 74 65 73 74 2d 72 6f 6c 6c 75 70 (rdb:test-rollup
f5c0: 2d 74 65 73 74 5f 64 61 74 61 2d 70 61 73 73 2d -test_data-pass-
f5d0: 66 61 69 6c 20 74 65 73 74 2d 69 64 29 0a 09 20 fail test-id)..
f5e0: 20 3b 3b 20 28 73 71 6c 69 74 65 33 3a 65 78 65 ;; (sqlite3:exe
f5f0: 63 75 74 65 0a 09 20 20 3b 3b 20 20 64 62 20 20 cute.. ;; db
f600: 20 3b 3b 3b 20 4e 4f 54 45 3a 20 53 68 6f 75 6c ;;; NOTE: Shoul
f610: 64 20 74 68 69 73 20 62 65 20 57 41 52 4e 2c 46 d this be WARN,F
f620: 41 49 4c 3f 20 41 20 57 41 52 4e 20 69 73 20 6e AIL? A WARN is n
f630: 6f 74 20 61 20 46 41 49 4c 3f 3f 3f 3f 3f 20 42 ot a FAIL????? B
f640: 55 47 20 46 49 58 4d 45 0a 09 20 20 3b 3b 20 20 UG FIXME.. ;;
f650: 22 55 50 44 41 54 45 20 74 65 73 74 73 0a 20 20 "UPDATE tests.
f660: 20 20 20 20 20 20 20 20 3b 3b 20 20 20 20 20 20 ;;
f670: 20 20 20 20 20 20 20 53 45 54 20 73 74 61 74 75 SET statu
f680: 73 3d 43 41 53 45 20 57 48 45 4e 20 28 53 45 4c s=CASE WHEN (SEL
f690: 45 43 54 20 66 61 69 6c 5f 63 6f 75 6e 74 20 46 ECT fail_count F
f6a0: 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 ROM tests WHERE
f6b0: 69 64 3d 3f 29 20 3e 20 30 20 0a 20 20 20 20 20 id=?) > 0 .
f6c0: 20 20 20 20 20 3b 3b 20 20 20 20 20 20 20 20 20 ;;
f6d0: 20 20 20 20 20 20 20 54 48 45 4e 20 27 46 41 49 THEN 'FAI
f6e0: 4c 27 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 L'. ;;
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 4e WHEN
f700: 20 28 53 45 4c 45 43 54 20 70 61 73 73 5f 63 6f (SELECT pass_co
f710: 75 6e 74 20 46 52 4f 4d 20 74 65 73 74 73 20 57 unt FROM tests W
f720: 48 45 52 45 20 69 64 3d 3f 29 20 3e 20 30 20 41 HERE id=?) > 0 A
f730: 4e 44 20 0a 20 20 20 20 20 20 20 20 20 20 3b 3b ND . ;;
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f750: 20 20 28 53 45 4c 45 43 54 20 73 74 61 74 75 73 (SELECT status
f760: 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 FROM tests WHER
f770: 45 20 69 64 3d 3f 29 20 4e 4f 54 20 49 4e 20 28 E id=?) NOT IN (
f780: 27 57 41 52 4e 27 2c 27 46 41 49 4c 27 29 0a 20 'WARN','FAIL').
f790: 20 20 20 20 20 20 20 20 20 3b 3b 20 20 20 20 20 ;;
f7a0: 20 20 20 20 20 20 20 20 54 48 45 4e 20 27 50 41 THEN 'PA
f7b0: 53 53 27 0a 20 20 20 20 20 20 20 20 20 20 3b 3b SS'. ;;
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 ELS
f7d0: 45 20 73 74 61 74 75 73 0a 20 20 20 20 20 20 20 E status.
f7e0: 20 20 20 3b 3b 20 20 20 20 20 20 20 20 20 45 4e ;; EN
f7f0: 44 20 57 48 45 52 45 20 69 64 3d 3f 3b 22 0a 09 D WHERE id=?;"..
f800: 20 20 3b 3b 20 20 74 65 73 74 2d 69 64 20 74 65 ;; test-id te
f810: 73 74 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 st-id test-id te
f820: 73 74 2d 69 64 29 0a 09 20 20 29 29 29 29 0a 0a st-id).. ))))..
f830: 28 64 65 66 69 6e 65 20 28 64 62 3a 67 65 74 2d (define (db:get-
f840: 70 72 65 76 2d 74 6f 6c 2d 66 6f 72 2d 74 65 73 prev-tol-for-tes
f850: 74 20 64 62 20 74 65 73 74 2d 69 64 20 63 61 74 t db test-id cat
f860: 65 67 6f 72 79 20 76 61 72 69 61 62 6c 65 29 0a egory variable).
f870: 20 20 3b 3b 20 46 69 6e 69 73 68 20 6d 65 3f 0a ;; Finish me?.
f880: 20 20 28 76 61 6c 75 65 73 20 23 66 20 23 66 20 (values #f #f
f890: 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d #f))..;;========
f8a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f8b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f8c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f8d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
f8e0: 3b 20 53 20 54 20 45 20 50 20 53 20 0a 3b 3b 3d ; S T E P S .;;=
f8f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
f930: 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 =====..(define (
f940: 64 62 3a 73 74 65 70 2d 67 65 74 2d 74 69 6d 65 db:step-get-time
f950: 2d 61 73 2d 73 74 72 69 6e 67 20 76 65 63 29 0a -as-string vec).
f960: 20 20 28 73 65 63 6f 6e 64 73 2d 3e 74 69 6d 65 (seconds->time
f970: 2d 73 74 72 69 6e 67 20 28 64 62 3a 73 74 65 70 -string (db:step
f980: 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
f990: 76 65 63 29 29 29 0a 0a 3b 3b 20 64 62 2d 67 65 vec)))..;; db-ge
f9a0: 74 2d 74 65 73 74 2d 73 74 65 70 73 2d 66 6f 72 t-test-steps-for
f9b0: 2d 72 75 6e 0a 28 64 65 66 69 6e 65 20 28 64 62 -run.(define (db
f9c0: 3a 67 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 :get-steps-for-t
f9d0: 65 73 74 20 64 62 20 74 65 73 74 2d 69 64 29 0a est db test-id).
f9e0: 20 20 28 6c 65 74 2a 20 28 28 74 64 62 20 28 64 (let* ((tdb (d
f9f0: 62 3a 6f 70 65 6e 2d 74 65 73 74 2d 64 62 2d 62 b:open-test-db-b
fa00: 79 2d 74 65 73 74 2d 69 64 20 64 62 20 74 65 73 y-test-id db tes
fa10: 74 2d 69 64 29 29 0a 09 20 28 72 65 73 20 27 28 t-id)).. (res '(
fa20: 29 29 29 0a 20 20 20 20 28 69 66 20 74 64 62 0a ))). (if tdb.
fa30: 09 28 62 65 67 69 6e 0a 09 20 20 28 73 71 6c 69 .(begin.. (sqli
fa40: 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 te3:for-each-row
fa50: 20 0a 09 20 20 20 28 6c 61 6d 62 64 61 20 28 69 .. (lambda (i
fa60: 64 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e 61 d test-id stepna
fa70: 6d 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 me state status
fa80: 65 76 65 6e 74 2d 74 69 6d 65 20 6c 6f 67 66 69 event-time logfi
fa90: 6c 65 29 0a 09 20 20 20 20 20 28 73 65 74 21 20 le).. (set!
faa0: 72 65 73 20 28 63 6f 6e 73 20 28 76 65 63 74 6f res (cons (vecto
fab0: 72 20 69 64 20 74 65 73 74 2d 69 64 20 73 74 65 r id test-id ste
fac0: 70 6e 61 6d 65 20 73 74 61 74 65 20 73 74 61 74 pname state stat
fad0: 75 73 20 65 76 65 6e 74 2d 74 69 6d 65 20 28 69 us event-time (i
fae0: 66 20 28 73 74 72 69 6e 67 3f 20 6c 6f 67 66 69 f (string? logfi
faf0: 6c 65 29 20 6c 6f 67 66 69 6c 65 20 22 22 29 29 le) logfile ""))
fb00: 20 72 65 73 29 29 29 0a 09 20 20 20 74 64 62 0a res))).. tdb.
fb10: 09 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 74 . "SELECT id,t
fb20: 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c est_id,stepname,
fb30: 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 state,status,eve
fb40: 6e 74 5f 74 69 6d 65 2c 6c 6f 67 66 69 6c 65 20 nt_time,logfile
fb50: 46 52 4f 4d 20 74 65 73 74 5f 73 74 65 70 73 20 FROM test_steps
fb60: 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f 20 WHERE test_id=?
fb70: 4f 52 44 45 52 20 42 59 20 69 64 20 41 53 43 3b ORDER BY id ASC;
fb80: 22 20 3b 3b 20 65 76 65 6e 74 5f 74 69 6d 65 20 " ;; event_time
fb90: 44 45 53 43 2c 69 64 20 41 53 43 3b 0a 09 20 20 DESC,id ASC;..
fba0: 20 74 65 73 74 2d 69 64 29 0a 09 20 20 28 73 71 test-id).. (sq
fbb0: 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 lite3:finalize!
fbc0: 74 64 62 29 0a 09 20 20 28 72 65 76 65 72 73 65 tdb).. (reverse
fbd0: 20 72 65 73 29 29 0a 09 27 28 29 29 29 29 0a 0a res))..'())))..
fbe0: 3b 3b 20 67 65 74 20 61 20 70 72 65 74 74 79 20 ;; get a pretty
fbf0: 74 61 62 6c 65 20 74 6f 20 73 75 6d 6d 61 72 69 table to summari
fc00: 7a 65 20 73 74 65 70 73 0a 3b 3b 0a 28 64 65 66 ze steps.;;.(def
fc10: 69 6e 65 20 28 64 62 3a 67 65 74 2d 73 74 65 70 ine (db:get-step
fc20: 73 2d 74 61 62 6c 65 20 64 62 20 74 65 73 74 2d s-table db test-
fc30: 69 64 29 0a 20 20 28 6c 65 74 20 28 28 73 74 65 id). (let ((ste
fc40: 70 73 20 20 20 28 64 62 3a 67 65 74 2d 73 74 65 ps (db:get-ste
fc50: 70 73 2d 66 6f 72 2d 74 65 73 74 20 64 62 20 74 ps-for-test db t
fc60: 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 3b 3b est-id))). ;;
fc70: 20 6f 72 67 61 6e 69 73 65 20 74 68 65 20 73 74 organise the st
fc80: 65 70 73 20 66 6f 72 20 62 65 74 74 65 72 20 72 eps for better r
fc90: 65 61 64 61 62 69 6c 69 74 79 0a 20 20 20 20 28 eadability. (
fca0: 6c 65 74 20 28 28 72 65 73 20 28 6d 61 6b 65 2d let ((res (make-
fcb0: 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a 20 20 hash-table))).
fcc0: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 (for-each .
fcd0: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 73 (lambda (s
fce0: 74 65 70 29 0a 09 20 28 64 65 62 75 67 3a 70 72 tep).. (debug:pr
fcf0: 69 6e 74 20 36 20 22 73 74 65 70 3d 22 20 73 74 int 6 "step=" st
fd00: 65 70 29 0a 09 20 28 6c 65 74 20 28 28 72 65 63 ep).. (let ((rec
fd10: 6f 72 64 20 28 68 61 73 68 2d 74 61 62 6c 65 2d ord (hash-table-
fd20: 72 65 66 2f 64 65 66 61 75 6c 74 20 0a 09 09 09 ref/default ....
fd30: 72 65 73 20 0a 09 09 09 28 64 62 3a 73 74 65 70 res ....(db:step
fd40: 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 -get-stepname st
fd50: 65 70 29 20 0a 09 09 09 3b 3b 20 20 20 20 20 20 ep) ....;;
fd60: 20 20 73 74 65 70 6e 61 6d 65 20 20 20 20 20 20 stepname
fd70: 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 20 start
fd80: 65 6e 64 20 73 74 61 74 75 73 20 20 20 20 0a 09 end status ..
fd90: 09 09 28 76 65 63 74 6f 72 20 28 64 62 3a 73 74 ..(vector (db:st
fda0: 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 ep-get-stepname
fdb0: 73 74 65 70 29 20 22 22 20 20 20 22 22 20 22 22 step) "" "" ""
fdc0: 20 20 20 20 20 22 22 20 22 22 29 29 29 29 0a 09 "" ""))))..
fdd0: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 (debug:print
fde0: 36 20 22 72 65 63 6f 72 64 28 62 65 66 6f 72 65 6 "record(before
fdf0: 29 20 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 09 ) = " record ...
fe00: 09 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 20 ."\nid: "
fe10: 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 20 (db:step-get-id
fe20: 73 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 70 step)...."\nstep
fe30: 6e 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 70 name: " (db:step
fe40: 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 -get-stepname st
fe50: 65 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 3a ep)...."\nstate:
fe60: 20 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 " (db:step-g
fe70: 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a 09 et-state step)..
fe80: 09 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 22 .."\nstatus: "
fe90: 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
fea0: 61 74 75 73 20 73 74 65 70 29 0a 09 09 09 22 5c atus step)...."\
feb0: 6e 74 69 6d 65 3a 20 20 20 20 20 22 20 28 64 62 ntime: " (db
fec0: 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f :step-get-event_
fed0: 74 69 6d 65 20 73 74 65 70 29 29 0a 09 20 20 20 time step))..
fee0: 28 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e 73 (case (string->s
fef0: 79 6d 62 6f 6c 20 28 64 62 3a 73 74 65 70 2d 67 ymbol (db:step-g
ff00: 65 74 2d 73 74 61 74 65 20 73 74 65 70 29 29 0a et-state step)).
ff10: 09 20 20 20 20 20 28 28 73 74 61 72 74 29 28 76 . ((start)(v
ff20: 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 ector-set! recor
ff30: 64 20 31 20 28 64 62 3a 73 74 65 70 2d 67 65 74 d 1 (db:step-get
ff40: 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 70 -event_time step
ff50: 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f )).. (vecto
ff60: 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 33 20 r-set! record 3
ff70: 28 69 66 20 28 65 71 75 61 6c 3f 20 28 76 65 63 (if (equal? (vec
ff80: 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 33 tor-ref record 3
ff90: 29 20 22 22 29 0a 09 09 09 09 09 28 64 62 3a 73 ) "")......(db:s
ffa0: 74 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 tep-get-status s
ffb0: 74 65 70 29 29 29 0a 09 20 20 20 20 20 20 28 69 tep))).. (i
ffc0: 66 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e f (> (string-len
ffd0: 67 74 68 20 28 64 62 3a 73 74 65 70 2d 67 65 74 gth (db:step-get
ffe0: 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 0a -logfile step)).
fff0: 09 09 20 20 20 20 20 30 29 0a 09 09 20 20 28 76 .. 0)... (v
10000 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 ector-set! recor
10010 64 20 35 20 28 64 62 3a 73 74 65 70 2d 67 65 74 d 5 (db:step-get
10020 2d 6c 6f 67 66 69 6c 65 20 73 74 65 70 29 29 29 -logfile step)))
10030 29 0a 09 20 20 20 20 20 28 28 65 6e 64 29 20 20 ).. ((end)
10040 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f 72 2d .. (vector-
10050 73 65 74 21 20 72 65 63 6f 72 64 20 32 20 28 61 set! record 2 (a
10060 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 64 62 3a 73 ny->number (db:s
10070 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 tep-get-event_ti
10080 6d 65 20 73 74 65 70 29 29 29 0a 09 20 20 20 20 me step)))..
10090 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
100a0 65 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 70 ecord 3 (db:step
100b0 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 -get-status step
100c0 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f )).. (vecto
100d0 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 20 r-set! record 4
100e0 28 6c 65 74 20 28 28 73 74 61 72 74 74 20 28 61 (let ((startt (a
100f0 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 76 65 63 74 ny->number (vect
10100 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 20 31 29 or-ref record 1)
10110 29 29 0a 09 09 09 09 09 20 20 28 65 6e 64 74 20 ))...... (endt
10120 20 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72 20 28 (any->number (
10130 76 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 vector-ref recor
10140 64 20 32 29 29 29 29 0a 09 09 09 09 20 20 20 20 d 2)))).....
10150 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 (debug:print 4
10160 20 22 72 65 63 6f 72 64 5b 31 5d 3d 22 20 28 76 "record[1]=" (v
10170 65 63 74 6f 72 2d 72 65 66 20 72 65 63 6f 72 64 ector-ref record
10180 20 31 29 20 0a 09 09 09 09 09 09 20 20 20 22 2c 1) ....... ",
10190 20 73 74 61 72 74 74 3d 22 20 73 74 61 72 74 74 startt=" startt
101a0 20 22 2c 20 65 6e 64 74 3d 22 20 65 6e 64 74 0a ", endt=" endt.
101b0 09 09 09 09 09 09 20 20 20 22 2c 20 67 65 74 2d ...... ", get-
101c0 73 74 61 74 75 73 3a 20 22 20 28 64 62 3a 73 74 status: " (db:st
101d0 65 70 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 ep-get-status st
101e0 65 70 29 29 0a 09 09 09 09 20 20 20 20 20 20 28 ep))..... (
101f0 69 66 20 28 61 6e 64 20 28 6e 75 6d 62 65 72 3f if (and (number?
10200 20 73 74 61 72 74 74 29 28 6e 75 6d 62 65 72 3f startt)(number?
10210 20 65 6e 64 74 29 29 0a 09 09 09 09 09 20 20 28 endt))...... (
10220 73 65 63 6f 6e 64 73 2d 3e 68 72 2d 6d 69 6e 2d seconds->hr-min-
10230 73 65 63 20 28 2d 20 65 6e 64 74 20 73 74 61 72 sec (- endt star
10240 74 74 29 29 20 22 2d 31 22 29 29 29 0a 09 20 20 tt)) "-1")))..
10250 20 20 20 20 28 69 66 20 28 3e 20 28 73 74 72 69 (if (> (stri
10260 6e 67 2d 6c 65 6e 67 74 68 20 28 64 62 3a 73 74 ng-length (db:st
10270 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 ep-get-logfile s
10280 74 65 70 29 29 0a 09 09 20 20 20 20 20 30 29 0a tep))... 0).
10290 09 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 .. (vector-set!
102a0 20 72 65 63 6f 72 64 20 35 20 28 64 62 3a 73 74 record 5 (db:st
102b0 65 70 2d 67 65 74 2d 6c 6f 67 66 69 6c 65 20 73 ep-get-logfile s
102c0 74 65 70 29 29 29 29 0a 09 20 20 20 20 20 28 65 tep)))).. (e
102d0 6c 73 65 0a 09 20 20 20 20 20 20 28 76 65 63 74 lse.. (vect
102e0 6f 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 32 or-set! record 2
102f0 20 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 (db:step-get-st
10300 61 74 65 20 73 74 65 70 29 29 0a 09 20 20 20 20 ate step))..
10310 20 20 28 76 65 63 74 6f 72 2d 73 65 74 21 20 72 (vector-set! r
10320 65 63 6f 72 64 20 33 20 28 64 62 3a 73 74 65 70 ecord 3 (db:step
10330 2d 67 65 74 2d 73 74 61 74 75 73 20 73 74 65 70 -get-status step
10340 29 29 0a 09 20 20 20 20 20 20 28 76 65 63 74 6f )).. (vecto
10350 72 2d 73 65 74 21 20 72 65 63 6f 72 64 20 34 20 r-set! record 4
10360 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 76 65 (db:step-get-eve
10370 6e 74 5f 74 69 6d 65 20 73 74 65 70 29 29 29 29 nt_time step))))
10380 0a 09 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 .. (hash-table
10390 2d 73 65 74 21 20 72 65 73 20 28 64 62 3a 73 74 -set! res (db:st
103a0 65 70 2d 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 ep-get-stepname
103b0 73 74 65 70 29 20 72 65 63 6f 72 64 29 0a 09 20 step) record)..
103c0 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 36 (debug:print 6
103d0 20 22 72 65 63 6f 72 64 28 61 66 74 65 72 29 20 "record(after)
103e0 20 3d 20 22 20 72 65 63 6f 72 64 20 0a 09 09 09 = " record ....
103f0 22 5c 6e 69 64 3a 20 20 20 20 20 20 20 22 20 28 "\nid: " (
10400 64 62 3a 73 74 65 70 2d 67 65 74 2d 69 64 20 73 db:step-get-id s
10410 74 65 70 29 0a 09 09 09 22 5c 6e 73 74 65 70 6e tep)...."\nstepn
10420 61 6d 65 3a 20 22 20 28 64 62 3a 73 74 65 70 2d ame: " (db:step-
10430 67 65 74 2d 73 74 65 70 6e 61 6d 65 20 73 74 65 get-stepname ste
10440 70 29 0a 09 09 09 22 5c 6e 73 74 61 74 65 3a 20 p)...."\nstate:
10450 20 20 20 22 20 28 64 62 3a 73 74 65 70 2d 67 65 " (db:step-ge
10460 74 2d 73 74 61 74 65 20 73 74 65 70 29 0a 09 09 t-state step)...
10470 09 22 5c 6e 73 74 61 74 75 73 3a 20 20 20 22 20 ."\nstatus: "
10480 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 73 74 61 (db:step-get-sta
10490 74 75 73 20 73 74 65 70 29 0a 09 09 09 22 5c 6e tus step)...."\n
104a0 74 69 6d 65 3a 20 20 20 20 20 22 20 28 64 62 3a time: " (db:
104b0 73 74 65 70 2d 67 65 74 2d 65 76 65 6e 74 5f 74 step-get-event_t
104c0 69 6d 65 20 73 74 65 70 29 29 29 29 0a 20 20 20 ime step)))).
104d0 20 20 20 20 3b 3b 20 28 65 6c 73 65 20 20 20 28 ;; (else (
104e0 76 65 63 74 6f 72 2d 73 65 74 21 20 72 65 63 6f vector-set! reco
104f0 72 64 20 31 20 28 64 62 3a 73 74 65 70 2d 67 65 rd 1 (db:step-ge
10500 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 73 74 65 t-event_time ste
10510 70 29 29 29 0a 20 20 20 20 20 20 20 28 73 6f 72 p))). (sor
10520 74 20 73 74 65 70 73 20 28 6c 61 6d 62 64 61 20 t steps (lambda
10530 28 61 20 62 29 28 3c 20 28 64 62 3a 73 74 65 70 (a b)(< (db:step
10540 2d 67 65 74 2d 65 76 65 6e 74 5f 74 69 6d 65 20 -get-event_time
10550 61 29 28 64 62 3a 73 74 65 70 2d 67 65 74 2d 65 a)(db:step-get-e
10560 76 65 6e 74 5f 74 69 6d 65 20 62 29 29 29 29 29 vent_time b)))))
10570 0a 20 20 20 20 20 20 72 65 73 29 29 29 0a 0a 3b . res)))..;
10580 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
10590 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
105a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
105b0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
105c0 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4d 20 49 20 53 =======.;; M I S
105d0 20 43 20 20 20 4d 20 41 20 4e 20 41 20 47 20 45 C M A N A G E
105e0 20 4d 20 45 20 4e 20 54 20 20 20 49 20 54 20 45 M E N T I T E
105f0 20 4d 20 53 20 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d M S .;;========
10600 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10610 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10620 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
10630 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
10640 3b 3b 20 74 68 65 20 6e 65 77 20 70 72 65 72 65 ;; the new prere
10650 71 73 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 qs calculation,
10660 6c 6f 6f 6b 73 20 61 6c 73 6f 20 61 74 20 69 74 looks also at it
10670 65 6d 70 61 74 68 20 69 66 20 73 70 65 63 69 66 empath if specif
10680 69 65 64 0a 3b 3b 20 61 6c 6c 20 70 72 65 72 65 ied.;; all prere
10690 71 73 20 6d 75 73 74 20 62 65 20 6d 65 74 3a 0a qs must be met:.
106a0 3b 3b 20 20 20 20 69 66 20 70 72 65 72 65 71 20 ;; if prereq
106b0 74 65 73 74 20 77 69 74 68 20 69 74 65 6d 70 61 test with itempa
106c0 74 68 3d 27 27 20 69 73 20 43 4f 4d 50 4c 45 54 th='' is COMPLET
106d0 45 44 20 61 6e 64 20 50 41 53 53 2c 20 57 41 52 ED and PASS, WAR
106e0 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 20 57 41 49 N, CHECK, or WAI
106f0 56 45 44 20 74 68 65 6e 20 70 72 65 72 65 71 20 VED then prereq
10700 69 73 20 6d 65 74 0a 3b 3b 20 20 20 20 69 66 20 is met.;; if
10710 70 72 65 72 65 71 20 74 65 73 74 20 77 69 74 68 prereq test with
10720 20 69 74 65 6d 70 61 74 68 3d 72 65 66 2d 69 74 itempath=ref-it
10730 65 6d 2d 70 61 74 68 20 61 6e 64 20 43 4f 4d 50 em-path and COMP
10740 4c 45 54 45 44 20 77 69 74 68 20 50 41 53 53 2c LETED with PASS,
10750 20 57 41 52 4e 2c 20 43 48 45 43 4b 2c 20 6f 72 WARN, CHECK, or
10760 20 57 41 49 56 45 44 20 74 68 65 6e 20 70 72 65 WAIVED then pre
10770 72 65 71 20 69 73 20 6d 65 74 0a 3b 3b 0a 3b 3b req is met.;;.;;
10780 20 4e 6f 74 65 3a 20 64 6f 20 6e 6f 74 20 63 6f Note: do not co
10790 6e 76 65 72 74 20 74 6f 20 72 65 6d 6f 74 65 20 nvert to remote
107a0 61 73 20 69 74 20 63 61 6c 6c 73 20 72 65 6d 6f as it calls remo
107b0 74 65 20 75 6e 64 65 72 20 74 68 65 20 68 6f 6f te under the hoo
107c0 64 0a 3b 3b 20 4e 6f 74 65 3a 20 6d 6f 64 65 20 d.;; Note: mode
107d0 27 6e 6f 72 6d 61 6c 20 6d 65 61 6e 73 20 74 68 'normal means th
107e0 61 74 20 74 65 73 74 73 20 6d 75 73 74 20 62 65 at tests must be
107f0 20 43 4f 4d 50 4c 45 54 45 44 20 61 6e 64 20 6f COMPLETED and o
10800 6b 20 28 69 2e 65 2e 20 50 41 53 53 2c 20 57 41 k (i.e. PASS, WA
10810 52 4e 2c 20 43 48 45 43 4b 20 6f 72 20 57 41 49 RN, CHECK or WAI
10820 56 45 44 29 0a 3b 3b 20 20 20 20 20 20 20 6d 6f VED).;; mo
10830 64 65 20 27 74 6f 70 6c 65 76 65 6c 20 6d 65 61 de 'toplevel mea
10840 6e 73 20 74 68 61 74 20 74 65 73 74 73 20 6d 75 ns that tests mu
10850 73 74 20 62 65 20 43 4f 4d 50 4c 45 54 45 44 20 st be COMPLETED
10860 6f 6e 6c 79 0a 3b 3b 20 20 20 20 20 20 20 6d 6f only.;; mo
10870 64 65 20 27 69 74 65 6d 6d 61 74 63 68 20 6d 65 de 'itemmatch me
10880 61 6e 73 20 74 68 61 74 20 74 65 73 74 73 20 69 ans that tests i
10890 74 65 6d 73 20 6d 75 73 74 20 62 65 20 43 4f 4d tems must be COM
108a0 50 4c 45 54 45 44 20 61 6e 64 20 28 50 41 53 53 PLETED and (PASS
108b0 7c 57 41 52 4e 7c 57 41 49 56 45 44 7c 43 48 45 |WARN|WAIVED|CHE
108c0 43 4b 29 20 5b 5b 20 4e 42 2f 2f 20 4e 4f 54 20 CK) [[ NB// NOT
108d0 49 4d 50 4c 45 4d 45 4e 54 45 44 20 59 45 54 20 IMPLEMENTED YET
108e0 5d 5d 0a 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 ]].;; .(define (
108f0 64 62 3a 67 65 74 2d 70 72 65 72 65 71 73 2d 6e db:get-prereqs-n
10900 6f 74 2d 6d 65 74 20 64 62 20 72 75 6e 2d 69 64 ot-met db run-id
10910 20 77 61 69 74 6f 6e 73 20 72 65 66 2d 69 74 65 waitons ref-ite
10920 6d 2d 70 61 74 68 20 23 21 6b 65 79 20 28 6d 6f m-path #!key (mo
10930 64 65 20 27 6e 6f 72 6d 61 6c 29 29 0a 20 20 28 de 'normal)). (
10940 69 66 20 28 6f 72 20 28 6e 6f 74 20 77 61 69 74 if (or (not wait
10950 6f 6e 73 29 0a 09 20 20 28 6e 75 6c 6c 3f 20 77 ons).. (null? w
10960 61 69 74 6f 6e 73 29 29 0a 20 20 20 20 20 20 27 aitons)). '
10970 28 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 (). (let* (
10980 28 75 6e 6d 65 74 2d 70 72 65 2d 72 65 71 73 20 (unmet-pre-reqs
10990 27 28 29 29 0a 09 20 20 20 20 20 28 72 65 73 75 '()).. (resu
109a0 6c 74 20 20 20 20 20 20 20 20 20 27 28 29 29 29 lt '()))
109b0 0a 09 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 28 ..(for-each .. (
109c0 6c 61 6d 62 64 61 20 28 77 61 69 74 6f 6e 74 65 lambda (waitonte
109d0 73 74 2d 6e 61 6d 65 29 0a 09 20 20 20 3b 3b 20 st-name).. ;;
109e0 62 79 20 67 65 74 74 69 6e 67 20 74 68 65 20 74 by getting the t
109f0 65 73 74 73 20 77 69 74 68 20 6d 61 74 63 68 69 ests with matchi
10a00 6e 67 20 6e 61 6d 65 20 77 65 20 61 72 65 20 6c ng name we are l
10a10 6f 6f 6b 69 6e 67 20 6f 6e 6c 79 20 61 74 20 74 ooking only at t
10a20 68 65 20 6d 61 74 63 68 69 6e 67 20 74 65 73 74 he matching test
10a30 20 0a 09 20 20 20 3b 3b 20 61 6e 64 20 72 65 6c .. ;; and rel
10a40 61 74 65 64 20 73 75 62 20 69 74 65 6d 73 0a 09 ated sub items..
10a50 20 20 20 28 6c 65 74 20 28 28 74 65 73 74 73 20 (let ((tests
10a60 20 20 20 20 20 20 20 20 20 20 20 20 28 64 62 3a (db:
10a70 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 get-tests-for-ru
10a80 6e 20 64 62 20 72 75 6e 2d 69 64 20 77 61 69 74 n db run-id wait
10a90 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 27 28 29 20 ontest-name '()
10aa0 27 28 29 29 29 0a 09 09 20 28 65 76 65 72 2d 73 '()))... (ever-s
10ab0 65 65 6e 20 20 20 20 20 20 20 20 20 23 66 29 0a een #f).
10ac0 09 09 20 28 70 61 72 65 6e 74 2d 77 61 69 74 6f .. (parent-waito
10ad0 6e 2d 6d 65 74 20 23 66 29 0a 09 09 20 28 69 74 n-met #f)... (it
10ae0 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 20 20 em-waiton-met
10af0 23 66 29 29 0a 09 20 20 20 20 20 28 66 6f 72 2d #f)).. (for-
10b00 65 61 63 68 20 0a 09 20 20 20 20 20 20 28 6c 61 each .. (la
10b10 6d 62 64 61 20 28 74 65 73 74 29 0a 09 09 3b 3b mbda (test)...;;
10b20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 77 61 69 (if (equal? wai
10b30 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 20 28 64 62 tontest-name (db
10b40 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 :test-get-testna
10b50 6d 65 20 74 65 73 74 29 29 20 3b 3b 20 62 79 20 me test)) ;; by
10b60 64 65 66 69 6e 74 69 6f 6e 20 74 68 69 73 20 68 defintion this h
10b70 61 64 20 62 65 74 74 65 72 20 62 65 20 74 72 75 ad better be tru
10b80 65 20 2e 2e 2e 0a 09 09 28 6c 65 74 2a 20 28 28 e ......(let* ((
10b90 73 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 state
10ba0 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 (db:test-get-s
10bb0 74 61 74 65 20 74 65 73 74 29 29 0a 09 09 20 20 tate test))...
10bc0 20 20 20 20 20 28 73 74 61 74 75 73 20 20 20 20 (status
10bd0 20 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74 (db:test
10be0 2d 67 65 74 2d 73 74 61 74 75 73 20 74 65 73 74 -get-status test
10bf0 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 74 65 ))... (ite
10c00 6d 2d 70 61 74 68 20 20 20 20 20 20 20 20 20 28 m-path (
10c10 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d db:test-get-item
10c20 2d 70 61 74 68 20 74 65 73 74 29 29 0a 09 09 20 -path test))...
10c30 20 20 20 20 20 20 28 69 73 2d 63 6f 6d 70 6c 65 (is-comple
10c40 74 65 64 20 20 20 20 20 20 28 65 71 75 61 6c 3f ted (equal?
10c50 20 73 74 61 74 65 20 22 43 4f 4d 50 4c 45 54 45 state "COMPLETE
10c60 44 22 29 29 0a 09 09 20 20 20 20 20 20 20 28 69 D"))... (i
10c70 73 2d 6f 6b 20 20 20 20 20 20 20 20 20 20 20 20 s-ok
10c80 20 28 6d 65 6d 62 65 72 20 73 74 61 74 75 73 20 (member status
10c90 27 28 22 50 41 53 53 22 20 22 57 41 52 4e 22 20 '("PASS" "WARN"
10ca0 22 43 48 45 43 4b 22 20 22 57 41 49 56 45 44 22 "CHECK" "WAIVED"
10cb0 29 29 29 0a 09 09 20 20 20 20 20 20 20 28 73 61 )))... (sa
10cc0 6d 65 2d 69 74 65 6d 70 61 74 68 20 20 20 20 20 me-itempath
10cd0 28 65 71 75 61 6c 3f 20 72 65 66 2d 69 74 65 6d (equal? ref-item
10ce0 2d 70 61 74 68 20 69 74 65 6d 2d 70 61 74 68 29 -path item-path)
10cf0 29 29 0a 09 09 20 20 28 73 65 74 21 20 65 76 65 ))... (set! eve
10d00 72 2d 73 65 65 6e 20 23 74 29 0a 09 09 20 20 28 r-seen #t)... (
10d10 63 6f 6e 64 0a 09 09 20 20 20 3b 3b 20 63 61 73 cond... ;; cas
10d20 65 20 31 2c 20 6e 6f 6e 2d 69 74 65 6d 20 28 70 e 1, non-item (p
10d30 61 72 65 6e 74 20 74 65 73 74 29 20 69 73 20 0a arent test) is .
10d40 09 09 20 20 20 28 28 61 6e 64 20 28 65 71 75 61 .. ((and (equa
10d50 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 22 22 29 l? item-path "")
10d60 20 3b 3b 20 74 68 69 73 20 69 73 20 74 68 65 20 ;; this is the
10d70 70 61 72 65 6e 74 20 74 65 73 74 0a 09 09 09 20 parent test....
10d80 69 73 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 09 09 is-completed....
10d90 20 28 6f 72 20 69 73 2d 6f 6b 20 28 65 71 3f 20 (or is-ok (eq?
10da0 6d 6f 64 65 20 27 74 6f 70 6c 65 76 65 6c 29 29 mode 'toplevel))
10db0 29 0a 09 09 20 20 20 20 28 73 65 74 21 20 70 61 )... (set! pa
10dc0 72 65 6e 74 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 rent-waiton-met
10dd0 23 74 29 29 0a 09 09 20 20 20 28 28 61 6e 64 20 #t))... ((and
10de0 73 61 6d 65 2d 69 74 65 6d 70 61 74 68 0a 09 09 same-itempath...
10df0 09 20 69 73 2d 63 6f 6d 70 6c 65 74 65 64 0a 09 . is-completed..
10e00 09 09 20 28 6f 72 20 69 73 2d 6f 6b 20 28 65 71 .. (or is-ok (eq
10e10 3f 20 6d 6f 64 65 20 27 74 6f 70 6c 65 76 65 6c ? mode 'toplevel
10e20 29 29 29 0a 09 09 20 20 20 20 28 73 65 74 21 20 )))... (set!
10e30 69 74 65 6d 2d 77 61 69 74 6f 6e 2d 6d 65 74 20 item-waiton-met
10e40 23 74 29 29 29 29 29 0a 09 20 20 20 20 20 20 74 #t))))).. t
10e50 65 73 74 73 29 0a 09 20 20 20 20 20 28 69 66 20 ests).. (if
10e60 28 6e 6f 74 20 28 6f 72 20 70 61 72 65 6e 74 2d (not (or parent-
10e70 77 61 69 74 6f 6e 2d 6d 65 74 20 69 74 65 6d 2d waiton-met item-
10e80 77 61 69 74 6f 6e 2d 6d 65 74 29 29 0a 09 09 20 waiton-met))...
10e90 28 73 65 74 21 20 72 65 73 75 6c 74 20 28 61 70 (set! result (ap
10ea0 70 65 6e 64 20 28 69 66 20 28 6e 75 6c 6c 3f 20 pend (if (null?
10eb0 74 65 73 74 73 29 20 28 6c 69 73 74 20 77 61 69 tests) (list wai
10ec0 74 6f 6e 74 65 73 74 2d 6e 61 6d 65 29 20 74 65 tontest-name) te
10ed0 73 74 73 29 20 72 65 73 75 6c 74 29 29 29 0a 09 sts) result)))..
10ee0 20 20 20 20 20 3b 3b 20 69 66 20 74 68 65 20 74 ;; if the t
10ef0 65 73 74 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 est is not found
10f00 20 74 68 65 6e 20 63 6c 65 61 72 6c 79 20 74 68 then clearly th
10f10 65 20 77 61 69 74 6f 6e 20 69 73 20 6e 6f 74 20 e waiton is not
10f20 6d 65 74 2e 2e 2e 0a 09 20 20 20 20 20 3b 3b 20 met..... ;;
10f30 28 69 66 20 28 6e 6f 74 20 65 76 65 72 2d 73 65 (if (not ever-se
10f40 65 6e 29 28 73 65 74 21 20 72 65 73 75 6c 74 20 en)(set! result
10f50 28 63 6f 6e 73 20 77 61 69 74 6f 6e 74 65 73 74 (cons waitontest
10f60 2d 6e 61 6d 65 20 72 65 73 75 6c 74 29 29 29 29 -name result))))
10f70 29 0a 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 ).. (if (not
10f80 20 65 76 65 72 2d 73 65 65 6e 29 0a 09 09 20 28 ever-seen)... (
10f90 73 65 74 21 20 72 65 73 75 6c 74 20 28 61 70 70 set! result (app
10fa0 65 6e 64 20 28 69 66 20 28 6e 75 6c 6c 3f 20 74 end (if (null? t
10fb0 65 73 74 73 29 28 6c 69 73 74 20 77 61 69 74 6f ests)(list waito
10fc0 6e 74 65 73 74 2d 6e 61 6d 65 29 20 74 65 73 74 ntest-name) test
10fd0 73 29 20 72 65 73 75 6c 74 29 29 29 29 29 0a 09 s) result)))))..
10fe0 20 77 61 69 74 6f 6e 73 29 0a 09 28 64 65 6c 65 waitons)..(dele
10ff0 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 72 65 te-duplicates re
11000 73 75 6c 74 29 29 29 29 0a 0a 28 64 65 66 69 6e sult))))..(defin
11010 65 20 28 64 62 3a 74 65 73 74 73 74 65 70 2d 73 e (db:teststep-s
11020 65 74 2d 73 74 61 74 75 73 21 20 64 62 20 74 65 et-status! db te
11030 73 74 2d 69 64 20 74 65 73 74 73 74 65 70 2d 6e st-id teststep-n
11040 61 6d 65 20 73 74 61 74 65 2d 69 6e 20 73 74 61 ame state-in sta
11050 74 75 73 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 6c tus-in comment l
11060 6f 67 66 69 6c 65 29 0a 20 20 28 64 65 62 75 67 ogfile). (debug
11070 3a 70 72 69 6e 74 20 34 20 22 74 65 73 74 2d 69 :print 4 "test-i
11080 64 3a 20 22 20 74 65 73 74 2d 69 64 20 22 20 74 d: " test-id " t
11090 65 73 74 73 74 65 70 2d 6e 61 6d 65 3a 20 22 20 eststep-name: "
110a0 74 65 73 74 73 74 65 70 2d 6e 61 6d 65 29 0a 20 teststep-name).
110b0 20 28 6c 65 74 2a 20 28 28 74 64 62 20 20 20 20 (let* ((tdb
110c0 20 20 20 28 64 62 3a 6f 70 65 6e 2d 74 65 73 74 (db:open-test
110d0 2d 64 62 2d 62 79 2d 74 65 73 74 2d 69 64 20 64 -db-by-test-id d
110e0 62 20 74 65 73 74 2d 69 64 29 29 0a 09 20 28 73 b test-id)).. (s
110f0 74 61 74 65 20 20 20 20 20 28 63 68 65 63 6b 2d tate (check-
11100 76 61 6c 69 64 2d 69 74 65 6d 73 20 22 73 74 61 valid-items "sta
11110 74 65 22 20 73 74 61 74 65 2d 69 6e 29 29 0a 09 te" state-in))..
11120 20 28 73 74 61 74 75 73 20 20 20 20 28 63 68 65 (status (che
11130 63 6b 2d 76 61 6c 69 64 2d 69 74 65 6d 73 20 22 ck-valid-items "
11140 73 74 61 74 75 73 22 20 73 74 61 74 75 73 2d 69 status" status-i
11150 6e 29 29 29 0a 20 20 20 20 28 69 66 20 28 6f 72 n))). (if (or
11160 20 28 6e 6f 74 20 73 74 61 74 65 29 28 6e 6f 74 (not state)(not
11170 20 73 74 61 74 75 73 29 29 0a 09 28 64 65 62 75 status))..(debu
11180 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49 g:print 0 "WARNI
11190 4e 47 3a 20 49 6e 76 61 6c 69 64 20 22 20 28 69 NG: Invalid " (i
111a0 66 20 73 74 61 74 75 73 20 22 73 74 61 74 75 73 f status "status
111b0 22 20 22 73 74 61 74 65 22 29 0a 09 09 20 20 20 " "state")...
111c0 20 20 22 20 76 61 6c 75 65 20 5c 22 22 20 28 69 " value \"" (i
111d0 66 20 73 74 61 74 75 73 20 73 74 61 74 65 2d 69 f status state-i
111e0 6e 20 73 74 61 74 75 73 2d 69 6e 29 20 22 5c 22 n status-in) "\"
111f0 2c 20 75 70 64 61 74 65 20 79 6f 75 72 20 76 61 , update your va
11200 6c 69 64 76 61 6c 75 65 73 20 73 65 63 74 69 6f lidvalues sectio
11210 6e 20 69 6e 20 6d 65 67 61 74 65 73 74 2e 63 6f n in megatest.co
11220 6e 66 69 67 22 29 29 0a 20 20 20 20 28 69 66 20 nfig")). (if
11230 74 64 62 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 tdb..(begin.. (
11240 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 sqlite3:execute
11250 0a 09 20 20 20 74 64 62 0a 09 20 20 20 22 49 4e .. tdb.. "IN
11260 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 SERT OR REPLACE
11270 69 6e 74 6f 20 74 65 73 74 5f 73 74 65 70 73 20 into test_steps
11280 28 74 65 73 74 5f 69 64 2c 73 74 65 70 6e 61 6d (test_id,stepnam
11290 65 2c 73 74 61 74 65 2c 73 74 61 74 75 73 2c 65 e,state,status,e
112a0 76 65 6e 74 5f 74 69 6d 65 2c 63 6f 6d 6d 65 6e vent_time,commen
112b0 74 2c 6c 6f 67 66 69 6c 65 29 20 56 41 4c 55 45 t,logfile) VALUE
112c0 53 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 S(?,?,?,?,?,?,?)
112d0 3b 22 0a 09 20 20 20 74 65 73 74 2d 69 64 20 74 ;".. test-id t
112e0 65 73 74 73 74 65 70 2d 6e 61 6d 65 20 73 74 61 eststep-name sta
112f0 74 65 2d 69 6e 20 73 74 61 74 75 73 2d 69 6e 20 te-in status-in
11300 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 (current-seconds
11310 29 20 28 69 66 20 63 6f 6d 6d 65 6e 74 20 63 6f ) (if comment co
11320 6d 6d 65 6e 74 20 22 22 29 20 28 69 66 20 6c 6f mment "") (if lo
11330 67 66 69 6c 65 20 6c 6f 67 66 69 6c 65 20 22 22 gfile logfile ""
11340 29 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 66 )).. (sqlite3:f
11350 69 6e 61 6c 69 7a 65 21 20 74 64 62 29 0a 09 20 inalize! tdb)..
11360 20 23 74 29 0a 09 23 66 29 29 29 0a 0a 3b 3b 3d #t)..#f)))..;;=
11370 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
11380 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
11390 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
113a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
113b0 3d 3d 3d 3d 3d 0a 3b 3b 20 45 78 74 72 61 63 74 =====.;; Extract
113c0 20 6f 64 73 20 66 69 6c 65 20 66 72 6f 6d 20 74 ods file from t
113d0 68 65 20 64 62 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d he db.;;========
113e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
113f0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
11400 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
11410 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
11420 3b 3b 20 72 75 6e 73 70 61 74 74 20 69 73 20 61 ;; runspatt is a
11430 20 63 6f 6d 6d 61 20 64 65 6c 69 6d 69 74 65 64 comma delimited
11440 20 6c 69 73 74 20 6f 66 20 72 75 6e 20 70 61 74 list of run pat
11450 74 65 72 6e 73 0a 3b 3b 20 6b 65 79 70 61 74 74 terns.;; keypatt
11460 2d 61 6c 69 73 74 20 6d 75 73 74 20 63 6f 6e 74 -alist must cont
11470 61 69 6e 20 2a 61 6c 6c 2a 20 6b 65 79 73 20 77 ain *all* keys w
11480 69 74 68 20 61 6e 20 61 73 73 6f 63 69 61 74 65 ith an associate
11490 64 20 70 61 74 74 65 72 6e 3a 20 27 28 20 28 22 d pattern: '( ("
114a0 4b 45 59 31 22 20 22 25 22 29 20 2e 2e 20 29 0a KEY1" "%") .. ).
114b0 28 64 65 66 69 6e 65 20 28 64 62 3a 65 78 74 72 (define (db:extr
114c0 61 63 74 2d 6f 64 73 2d 66 69 6c 65 20 64 62 20 act-ods-file db
114d0 6f 75 74 70 75 74 66 69 6c 65 20 6b 65 79 70 61 outputfile keypa
114e0 74 74 2d 61 6c 69 73 74 20 72 75 6e 73 70 61 74 tt-alist runspat
114f0 74 20 70 61 74 68 6d 6f 64 29 0a 20 20 28 6c 65 t pathmod). (le
11500 74 2a 20 28 28 6b 65 79 73 73 74 72 20 20 28 73 t* ((keysstr (s
11510 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 tring-interspers
11520 65 20 28 6d 61 70 20 63 61 72 20 6b 65 79 70 61 e (map car keypa
11530 74 74 2d 61 6c 69 73 74 29 20 22 2c 22 29 29 0a tt-alist) ",")).
11540 09 20 28 6b 65 79 71 72 79 20 20 20 28 73 74 72 . (keyqry (str
11550 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 ing-intersperse
11560 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 70 29 (map (lambda (p)
11570 28 63 6f 6e 63 20 28 63 61 72 20 70 29 20 22 20 (conc (car p) "
11580 4c 49 4b 45 20 3f 20 22 29 29 20 6b 65 79 70 61 LIKE ? ")) keypa
11590 74 74 2d 61 6c 69 73 74 29 20 22 20 41 4e 44 20 tt-alist) " AND
115a0 22 29 29 0a 09 20 28 6e 75 6d 6b 65 79 73 20 20 ")).. (numkeys
115b0 28 6c 65 6e 67 74 68 20 6b 65 79 70 61 74 74 2d (length keypatt-
115c0 61 6c 69 73 74 29 29 0a 09 20 28 74 65 73 74 2d alist)).. (test-
115d0 69 64 73 20 27 28 29 29 0a 09 20 28 77 69 6e 64 ids '()).. (wind
115e0 6f 77 73 20 20 28 61 6e 64 20 70 61 74 68 6d 6f ows (and pathmo
115f0 64 20 28 73 75 62 73 74 72 69 6e 67 2d 69 6e 64 d (substring-ind
11600 65 78 20 22 5c 5c 22 20 70 61 74 68 6d 6f 64 29 ex "\\" pathmod)
11610 29 29 0a 09 20 28 74 65 6d 70 64 69 72 20 20 28 )).. (tempdir (
11620 63 6f 6e 63 20 22 2f 74 6d 70 2f 22 20 28 63 75 conc "/tmp/" (cu
11630 72 72 65 6e 74 2d 75 73 65 72 2d 6e 61 6d 65 29 rrent-user-name)
11640 20 22 2f 22 20 72 75 6e 73 70 61 74 74 20 22 5f "/" runspatt "_
11650 22 20 28 72 61 6e 64 6f 6d 20 31 30 30 30 30 29 " (random 10000)
11660 20 22 5f 22 20 28 63 75 72 72 65 6e 74 2d 70 72 "_" (current-pr
11670 6f 63 65 73 73 2d 69 64 29 29 29 0a 09 20 28 72 ocess-id))).. (r
11680 75 6e 73 68 65 61 64 65 72 20 28 61 70 70 65 6e unsheader (appen
11690 64 20 28 6c 69 73 74 20 22 52 75 6e 20 49 64 22 d (list "Run Id"
116a0 20 22 52 75 6e 6e 61 6d 65 22 29 20 3b 20 30 20 "Runname") ; 0
116b0 31 0a 09 09 09 20 20 20 20 20 28 6d 61 70 20 63 1.... (map c
116c0 61 72 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 ar keypatt-alist
116d0 29 20 20 20 3b 20 2b 20 4e 20 3d 20 6c 65 6e 67 ) ; + N = leng
116e0 74 68 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 th keypatt-alist
116f0 0a 09 09 09 20 20 20 20 20 28 6c 69 73 74 20 22 .... (list "
11700 54 65 73 74 6e 61 6d 65 22 20 20 20 20 20 20 20 Testname"
11710 20 20 20 3b 20 32 0a 09 09 09 09 20 20 20 22 49 ; 2..... "I
11720 74 65 6d 20 50 61 74 68 22 20 20 20 20 20 20 20 tem Path"
11730 20 20 3b 20 33 20 0a 09 09 09 09 20 20 20 22 44 ; 3 ..... "D
11740 65 73 63 72 69 70 74 69 6f 6e 22 20 20 20 20 20 escription"
11750 20 20 3b 20 34 20 0a 09 09 09 09 20 20 20 22 53 ; 4 ..... "S
11760 74 61 74 65 22 20 20 20 20 20 20 20 20 20 20 20 tate"
11770 20 20 3b 20 35 20 0a 09 09 09 09 20 20 20 22 53 ; 5 ..... "S
11780 74 61 74 75 73 22 20 20 20 20 20 20 20 20 20 20 tatus"
11790 20 20 3b 20 36 20 20 0a 09 09 09 09 20 20 20 22 ; 6 ..... "
117a0 46 69 6e 61 6c 20 4c 6f 67 22 20 20 20 20 20 20 Final Log"
117b0 20 20 20 3b 20 37 20 0a 09 09 09 09 20 20 20 22 ; 7 ..... "
117c0 52 75 6e 20 44 75 72 61 74 69 6f 6e 22 20 20 20 Run Duration"
117d0 20 20 20 3b 20 38 20 0a 09 09 09 09 20 20 20 22 ; 8 ..... "
117e0 57 68 65 6e 20 52 75 6e 22 20 20 20 20 20 20 20 When Run"
117f0 20 20 20 3b 20 39 20 0a 09 09 09 09 20 20 20 22 ; 9 ..... "
11800 54 61 67 73 22 20 20 20 20 20 20 20 20 20 20 20 Tags"
11810 20 20 20 3b 20 31 30 0a 09 09 09 09 20 20 20 22 ; 10..... "
11820 52 75 6e 20 4f 77 6e 65 72 22 20 20 20 20 20 20 Run Owner"
11830 20 20 20 3b 20 31 31 0a 09 09 09 09 20 20 20 22 ; 11..... "
11840 43 6f 6d 6d 65 6e 74 22 20 20 20 20 20 20 20 20 Comment"
11850 20 20 20 3b 20 31 32 0a 09 09 09 09 20 20 20 22 ; 12..... "
11860 41 75 74 68 6f 72 22 20 20 20 20 20 20 20 20 20 Author"
11870 20 20 20 3b 20 31 33 0a 09 09 09 09 20 20 20 22 ; 13..... "
11880 54 65 73 74 20 4f 77 6e 65 72 22 20 20 20 20 20 Test Owner"
11890 20 20 20 3b 20 31 34 0a 09 09 09 09 20 20 20 22 ; 14..... "
118a0 52 65 76 69 65 77 65 64 22 20 20 20 20 20 20 20 Reviewed"
118b0 20 20 20 3b 20 31 35 0a 09 09 09 09 20 20 20 22 ; 15..... "
118c0 44 69 73 6b 66 72 65 65 22 20 20 20 20 20 20 20 Diskfree"
118d0 20 20 20 3b 20 31 36 0a 09 09 09 09 20 20 20 22 ; 16..... "
118e0 55 6e 61 6d 65 22 20 20 20 20 20 20 20 20 20 20 Uname"
118f0 20 20 20 3b 20 31 37 0a 09 09 09 09 20 20 20 22 ; 17..... "
11900 52 75 6e 64 69 72 22 20 20 20 20 20 20 20 20 20 Rundir"
11910 20 20 20 3b 20 31 38 0a 09 09 09 09 20 20 20 22 ; 18..... "
11920 48 6f 73 74 22 20 20 20 20 20 20 20 20 20 20 20 Host"
11930 20 20 20 3b 20 31 39 0a 09 09 09 09 20 20 20 22 ; 19..... "
11940 43 70 75 20 4c 6f 61 64 22 20 20 20 20 20 20 20 Cpu Load"
11950 20 20 20 3b 20 32 30 0a 09 09 09 09 20 20 20 29 ; 20..... )
11960 29 29 0a 09 20 28 72 65 73 75 6c 74 73 20 28 6c )).. (results (l
11970 69 73 74 20 72 75 6e 73 68 65 61 64 65 72 29 29 ist runsheader))
11980 09 09 09 20 0a 09 20 28 74 65 73 74 64 61 74 61 ... .. (testdata
11990 2d 68 65 61 64 65 72 20 28 6c 69 73 74 20 22 52 -header (list "R
119a0 75 6e 20 49 64 22 20 22 54 65 73 74 6e 61 6d 65 un Id" "Testname
119b0 22 20 22 49 74 65 6d 20 50 61 74 68 22 20 22 43 " "Item Path" "C
119c0 61 74 65 67 6f 72 79 22 20 22 56 61 72 69 61 62 ategory" "Variab
119d0 6c 65 22 20 22 56 61 6c 75 65 22 20 22 45 78 70 le" "Value" "Exp
119e0 65 63 74 65 64 22 20 22 54 6f 6c 22 20 22 55 6e ected" "Tol" "Un
119f0 69 74 73 22 20 22 53 74 61 74 75 73 22 20 22 43 its" "Status" "C
11a00 6f 6d 6d 65 6e 74 22 29 29 0a 09 20 28 6d 61 69 omment")).. (mai
11a10 6e 71 72 79 20 28 63 6f 6e 63 20 22 53 45 4c 45 nqry (conc "SELE
11a20 43 54 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 CT.
11a30 20 74 2e 74 65 73 74 6e 61 6d 65 2c 72 2e 69 64 t.testname,r.id
11a40 2c 72 75 6e 6e 61 6d 65 2c 22 20 6b 65 79 73 73 ,runname," keyss
11a50 74 72 20 22 2c 74 2e 74 65 73 74 6e 61 6d 65 2c tr ",t.testname,
11a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t
11a70 2e 69 74 65 6d 5f 70 61 74 68 2c 74 6d 2e 64 65 .item_path,tm.de
11a80 73 63 72 69 70 74 69 6f 6e 2c 74 2e 73 74 61 74 scription,t.stat
11a90 65 2c 74 2e 73 74 61 74 75 73 2c 0a 20 20 20 20 e,t.status,.
11aa0 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 5f final_
11ab0 6c 6f 67 66 2c 72 75 6e 5f 64 75 72 61 74 69 6f logf,run_duratio
11ac0 6e 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 n, .
11ad0 20 20 73 74 72 66 74 69 6d 65 28 27 25 6d 2f 25 strftime('%m/%
11ae0 64 2f 25 59 20 25 48 3a 25 4d 3a 25 53 27 2c 64 d/%Y %H:%M:%S',d
11af0 61 74 65 74 69 6d 65 28 74 2e 65 76 65 6e 74 5f atetime(t.event_
11b00 74 69 6d 65 2c 27 75 6e 69 78 65 70 6f 63 68 27 time,'unixepoch'
11b10 29 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c 0a ),'localtime'),.
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6d tm
11b30 2e 74 61 67 73 2c 72 2e 6f 77 6e 65 72 2c 74 2e .tags,r.owner,t.
11b40 63 6f 6d 6d 65 6e 74 2c 0a 20 20 20 20 20 20 20 comment,.
11b50 20 20 20 20 20 20 20 61 75 74 68 6f 72 2c 0a 20 author,.
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6d 2e tm.
11b70 6f 77 6e 65 72 2c 72 65 76 69 65 77 65 64 2c 0a owner,reviewed,.
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 di
11b90 73 6b 66 72 65 65 2c 75 6e 61 6d 65 2c 72 75 6e skfree,uname,run
11ba0 64 69 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 dir,.
11bb0 20 20 20 68 6f 73 74 2c 63 70 75 6c 6f 61 64 0a host,cpuload.
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d FROM
11bd0 20 74 65 73 74 73 20 41 53 20 74 20 4a 4f 49 4e tests AS t JOIN
11be0 20 72 75 6e 73 20 41 53 20 72 20 4f 4e 20 74 2e runs AS r ON t.
11bf0 72 75 6e 5f 69 64 3d 72 2e 69 64 20 4a 4f 49 4e run_id=r.id JOIN
11c00 20 74 65 73 74 5f 6d 65 74 61 20 41 53 20 74 6d test_meta AS tm
11c10 20 4f 4e 20 74 6d 2e 74 65 73 74 6e 61 6d 65 3d ON tm.testname=
11c20 74 2e 74 65 73 74 6e 61 6d 65 0a 20 20 20 20 20 t.testname.
11c30 20 20 20 20 20 20 20 57 48 45 52 45 20 72 75 6e WHERE run
11c40 6e 61 6d 65 20 4c 49 4b 45 20 3f 20 41 4e 44 20 name LIKE ? AND
11c50 22 20 6b 65 79 71 72 79 20 22 3b 22 29 29 29 0a " keyqry ";"))).
11c60 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print
11c70 20 32 20 22 55 73 69 6e 67 20 22 20 74 65 6d 70 2 "Using " temp
11c80 64 69 72 20 22 20 66 6f 72 20 63 6f 6e 73 74 72 dir " for constr
11c90 75 63 74 69 6e 67 20 74 68 65 20 6f 64 73 20 66 ucting the ods f
11ca0 69 6c 65 2e 20 6b 65 79 71 72 79 3a 20 22 20 6b ile. keyqry: " k
11cb0 65 79 71 72 79 20 22 20 6b 65 79 73 74 72 3a 20 eyqry " keystr:
11cc0 22 20 6b 65 79 73 73 74 72 20 22 20 77 69 74 68 " keysstr " with
11cd0 20 6b 65 79 73 3a 20 22 20 28 6d 61 70 20 63 61 keys: " (map ca
11ce0 64 72 20 6b 65 79 70 61 74 74 2d 61 6c 69 73 74 dr keypatt-alist
11cf0 29 0a 09 09 20 22 5c 6e 20 20 20 20 20 20 6d 61 )... "\n ma
11d00 69 6e 71 72 79 3a 20 22 20 6d 61 69 6e 71 72 79 inqry: " mainqry
11d10 29 0a 20 20 20 20 3b 3b 20 22 45 78 70 65 63 74 ). ;; "Expect
11d20 65 64 20 56 61 6c 75 65 22 0a 20 20 20 20 3b 3b ed Value". ;;
11d30 20 22 56 61 6c 75 65 20 46 6f 75 6e 64 22 0a 20 "Value Found".
11d40 20 20 20 3b 3b 20 22 54 6f 6c 65 72 61 6e 63 65 ;; "Tolerance
11d50 22 0a 20 20 20 20 28 61 70 70 6c 79 20 73 71 6c ". (apply sql
11d60 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f ite3:for-each-ro
11d70 77 0a 09 20 20 20 28 6c 61 6d 62 64 61 20 28 74 w.. (lambda (t
11d80 65 73 74 2d 69 64 20 2e 20 62 29 0a 09 20 20 20 est-id . b)..
11d90 20 20 28 73 65 74 21 20 74 65 73 74 2d 69 64 73 (set! test-ids
11da0 20 28 63 6f 6e 73 20 74 65 73 74 2d 69 64 20 74 (cons test-id t
11db0 65 73 74 2d 69 64 73 29 29 20 20 20 3b 3b 20 74 est-ids)) ;; t
11dc0 65 73 74 2d 69 64 20 69 73 20 6e 6f 77 20 74 65 est-id is now te
11dd0 73 74 6e 61 6d 65 0a 09 20 20 20 20 20 28 73 65 stname.. (se
11de0 74 21 20 72 65 73 75 6c 74 73 20 28 61 70 70 65 t! results (appe
11df0 6e 64 20 72 65 73 75 6c 74 73 20 3b 3b 20 6e 6f nd results ;; no
11e00 74 65 2c 20 64 72 6f 70 20 74 68 65 20 74 65 73 te, drop the tes
11e10 74 2d 69 64 0a 09 09 09 09 20 20 20 28 6c 69 73 t-id..... (lis
11e20 74 0a 09 09 09 09 20 20 20 20 28 69 66 20 70 61 t..... (if pa
11e30 74 68 6d 6f 64 0a 09 09 09 09 09 28 6c 65 74 2a thmod......(let*
11e40 20 28 28 76 62 20 20 20 20 20 20 20 20 28 61 70 ((vb (ap
11e50 70 6c 79 20 76 65 63 74 6f 72 20 62 29 29 0a 09 ply vector b))..
11e60 09 09 09 09 20 20 20 20 20 20 20 28 6b 65 79 76 .... (keyv
11e70 61 6c 73 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 als (let loop
11e80 28 28 69 20 20 20 20 30 29 0a 09 09 09 09 09 09 ((i 0).......
11e90 09 09 20 20 20 20 20 28 72 65 73 20 27 28 29 29 .. (res '())
11ea0 29 0a 09 09 09 09 09 09 09 20 20 20 20 28 69 66 )........ (if
11eb0 20 28 3e 3d 20 69 20 6e 75 6d 6b 65 79 73 29 0a (>= i numkeys).
11ec0 09 09 09 09 09 09 09 09 72 65 73 0a 09 09 09 09 ........res.....
11ed0 09 09 09 09 28 6c 6f 6f 70 20 28 2b 20 69 20 31 ....(loop (+ i 1
11ee0 29 0a 09 09 09 09 09 09 09 09 20 20 20 20 20 20 ).........
11ef0 28 61 70 70 65 6e 64 20 72 65 73 20 28 6c 69 73 (append res (lis
11f00 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 t (vector-ref vb
11f10 20 28 2b 20 69 20 32 29 29 29 29 29 29 29 29 0a (+ i 2)))))))).
11f20 09 09 09 09 09 20 20 20 20 20 20 20 28 72 75 6e ..... (run
11f30 6e 61 6d 65 20 20 20 28 76 65 63 74 6f 72 2d 72 name (vector-r
11f40 65 66 20 76 62 20 31 29 29 0a 09 09 09 09 09 20 ef vb 1))......
11f50 20 20 20 20 20 20 28 74 65 73 74 6e 61 6d 65 20 (testname
11f60 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 (vector-ref vb
11f70 28 2b 20 20 32 20 6e 75 6d 6b 65 79 73 29 29 29 (+ 2 numkeys)))
11f80 0a 09 09 09 09 09 20 20 20 20 20 20 20 28 69 74 ...... (it
11f90 65 6d 2d 70 61 74 68 20 28 76 65 63 74 6f 72 2d em-path (vector-
11fa0 72 65 66 20 76 62 20 28 2b 20 20 33 20 6e 75 6d ref vb (+ 3 num
11fb0 6b 65 79 73 29 29 29 0a 09 09 09 09 09 20 20 20 keys)))......
11fc0 20 20 20 20 28 66 69 6e 61 6c 2d 6c 6f 67 20 28 (final-log (
11fd0 76 65 63 74 6f 72 2d 72 65 66 20 76 62 20 28 2b vector-ref vb (+
11fe0 20 20 37 20 6e 75 6d 6b 65 79 73 29 29 29 0a 09 7 numkeys)))..
11ff0 09 09 09 09 20 20 20 20 20 20 20 28 72 75 6e 2d .... (run-
12000 64 69 72 20 20 20 28 76 65 63 74 6f 72 2d 72 65 dir (vector-re
12010 66 20 76 62 20 28 2b 20 31 38 20 6e 75 6d 6b 65 f vb (+ 18 numke
12020 79 73 29 29 29 0a 09 09 09 09 09 20 20 20 20 20 ys)))......
12030 20 20 28 6c 6f 67 2d 66 70 61 74 68 20 28 63 6f (log-fpath (co
12040 6e 63 20 72 75 6e 2d 64 69 72 20 22 2f 22 20 20 nc run-dir "/"
12050 66 69 6e 61 6c 2d 6c 6f 67 29 29 29 20 3b 3b 20 final-log))) ;;
12060 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
12070 72 73 65 20 6b 65 79 76 61 6c 73 20 22 2f 22 29 rse keyvals "/")
12080 20 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 2f "/" testname "/
12090 22 20 69 74 65 6d 2d 70 61 74 68 20 22 2f 22 0a " item-path "/".
120a0 09 09 09 09 09 20 20 28 64 65 62 75 67 3a 70 72 ..... (debug:pr
120b0 69 6e 74 20 34 20 22 6c 6f 67 3a 20 22 20 6c 6f int 4 "log: " lo
120c0 67 2d 66 70 61 74 68 20 22 20 65 78 69 73 74 73 g-fpath " exists
120d0 3a 20 22 20 28 66 69 6c 65 2d 65 78 69 73 74 73 : " (file-exists
120e0 3f 20 6c 6f 67 2d 66 70 61 74 68 29 29 0a 09 09 ? log-fpath))...
120f0 09 09 09 20 20 28 76 65 63 74 6f 72 2d 73 65 74 ... (vector-set
12100 21 20 76 62 20 28 2b 20 37 20 6e 75 6d 6b 65 79 ! vb (+ 7 numkey
12110 73 29 20 28 69 66 20 28 66 69 6c 65 2d 65 78 69 s) (if (file-exi
12120 73 74 73 3f 20 6c 6f 67 2d 66 70 61 74 68 29 0a sts? log-fpath).
12130 09 09 09 09 09 09 09 09 09 20 20 20 20 28 6c 65 ......... (le
12140 74 20 28 28 6e 65 77 70 61 74 68 20 28 63 6f 6e t ((newpath (con
12150 63 20 70 61 74 68 6d 6f 64 20 22 2f 22 0a 09 09 c pathmod "/"...
12160 09 09 09 09 09 09 09 09 09 09 20 28 73 74 72 69 .......... (stri
12170 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b ng-intersperse k
12180 65 79 76 61 6c 73 20 22 2f 22 29 0a 09 09 09 09 eyvals "/").....
12190 09 09 09 09 09 09 09 09 20 22 2f 22 20 72 75 6e ........ "/" run
121a0 6e 61 6d 65 20 22 2f 22 20 74 65 73 74 6e 61 6d name "/" testnam
121b0 65 20 22 2f 22 0a 09 09 09 09 09 09 09 09 09 09 e "/"...........
121c0 09 09 20 28 69 66 20 28 73 74 72 69 6e 67 3d 3f .. (if (string=?
121d0 20 69 74 65 6d 2d 70 61 74 68 20 22 22 29 20 22 item-path "") "
121e0 22 20 28 63 6f 6e 63 20 22 2f 22 20 69 74 65 6d " (conc "/" item
121f0 2d 70 61 74 68 29 29 0a 09 09 09 09 09 09 09 09 -path)).........
12200 09 09 09 09 20 66 69 6e 61 6c 2d 6c 6f 67 29 29 .... final-log))
12210 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 20 20 )..........
12220 20 3b 3b 20 66 6f 72 20 6e 6f 77 20 74 68 72 6f ;; for now thro
12230 77 20 61 77 61 79 20 6e 65 77 70 61 74 68 20 61 w away newpath a
12240 6e 64 20 75 73 65 20 74 68 65 20 6c 6f 67 2d 66 nd use the log-f
12250 70 61 74 68 20 63 6f 6e 63 27 64 20 77 69 74 68 path conc'd with
12260 20 70 61 74 68 6d 6f 64 0a 09 09 09 09 09 09 09 pathmod........
12270 09 09 20 20 20 20 20 20 28 73 65 74 21 20 6e 65 .. (set! ne
12280 77 70 61 74 68 20 28 63 6f 6e 63 20 70 61 74 68 wpath (conc path
12290 6d 6f 64 20 6c 6f 67 2d 66 70 61 74 68 29 29 0a mod log-fpath)).
122a0 09 09 09 09 09 09 09 09 09 20 20 20 20 20 20 28 ......... (
122b0 69 66 20 77 69 6e 64 6f 77 73 20 28 73 74 72 69 if windows (stri
122c0 6e 67 2d 74 72 61 6e 73 6c 61 74 65 20 6e 65 77 ng-translate new
122d0 70 61 74 68 20 22 2f 22 20 22 5c 5c 22 29 20 6e path "/" "\\") n
122e0 65 77 70 61 74 68 29 29 0a 09 09 09 09 09 09 09 ewpath))........
122f0 09 09 20 20 20 20 28 69 66 20 28 64 65 62 75 67 .. (if (debug
12300 3a 64 65 62 75 67 2d 6d 6f 64 65 20 31 29 0a 09 :debug-mode 1)..
12310 09 09 09 09 09 09 09 09 09 28 63 6f 6e 63 20 66 .........(conc f
12320 69 6e 61 6c 2d 6c 6f 67 20 22 20 6e 6f 74 2d 66 inal-log " not-f
12330 6f 75 6e 64 22 29 0a 09 09 09 09 09 09 09 09 09 ound")..........
12340 09 22 22 29 29 29 0a 09 09 09 09 09 20 20 28 76 ."")))...... (v
12350 65 63 74 6f 72 2d 3e 6c 69 73 74 20 76 62 29 29 ector->list vb))
12360 0a 09 09 09 09 09 62 29 29 29 29 29 0a 09 20 20 ......b)))))..
12370 20 64 62 0a 09 20 20 20 6d 61 69 6e 71 72 79 0a db.. mainqry.
12380 09 20 20 20 72 75 6e 73 70 61 74 74 20 28 6d 61 . runspatt (ma
12390 70 20 63 61 64 72 20 6b 65 79 70 61 74 74 2d 61 p cadr keypatt-a
123a0 6c 69 73 74 29 29 0a 20 20 20 20 28 64 65 62 75 list)). (debu
123b0 67 3a 70 72 69 6e 74 20 32 20 22 46 6f 75 6e 64 g:print 2 "Found
123c0 20 22 20 28 6c 65 6e 67 74 68 20 74 65 73 74 2d " (length test-
123d0 69 64 73 29 20 22 20 72 65 63 6f 72 64 73 22 29 ids) " records")
123e0 0a 20 20 20 20 28 73 65 74 21 20 72 65 73 75 6c . (set! resul
123f0 74 73 20 28 6c 69 73 74 20 28 63 6f 6e 73 20 22 ts (list (cons "
12400 52 75 6e 73 22 20 72 65 73 75 6c 74 73 29 29 29 Runs" results)))
12410 0a 20 20 20 20 3b 3b 20 6e 6f 77 2c 20 66 6f 72 . ;; now, for
12420 20 65 61 63 68 20 74 65 73 74 2c 20 63 6f 6c 6c each test, coll
12430 65 63 74 20 74 68 65 20 74 65 73 74 5f 64 61 74 ect the test_dat
12440 61 20 69 6e 66 6f 20 61 6e 64 20 61 64 64 20 61 a info and add a
12450 20 6e 65 77 20 73 68 65 65 74 0a 20 20 20 20 28 new sheet. (
12460 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20 28 6c for-each. (l
12470 61 6d 62 64 61 20 28 74 65 73 74 2d 69 64 29 0a ambda (test-id).
12480 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 74 65 (let ((te
12490 73 74 2d 64 61 74 61 20 28 6c 69 73 74 20 74 65 st-data (list te
124a0 73 74 64 61 74 61 2d 68 65 61 64 65 72 29 29 0a stdata-header)).
124b0 09 20 20 20 20 20 28 63 75 72 72 2d 74 65 73 74 . (curr-test
124c0 2d 6e 61 6d 65 20 23 66 29 29 0a 09 20 28 73 71 -name #f)).. (sq
124d0 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 lite3:for-each-r
124e0 6f 77 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 72 ow.. (lambda (r
124f0 75 6e 2d 69 64 20 74 65 73 74 6e 61 6d 65 20 69 un-id testname i
12500 74 65 6d 2d 70 61 74 68 20 63 61 74 65 67 6f 72 tem-path categor
12510 79 20 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 y variable value
12520 20 65 78 70 65 63 74 65 64 20 74 6f 6c 20 75 6e expected tol un
12530 69 74 73 20 73 74 61 74 75 73 20 63 6f 6d 6d 65 its status comme
12540 6e 74 29 0a 09 20 20 20 20 28 73 65 74 21 20 63 nt).. (set! c
12550 75 72 72 2d 74 65 73 74 2d 6e 61 6d 65 20 74 65 urr-test-name te
12560 73 74 6e 61 6d 65 29 0a 09 20 20 20 20 28 73 65 stname).. (se
12570 74 21 20 74 65 73 74 2d 64 61 74 61 20 28 61 70 t! test-data (ap
12580 70 65 6e 64 20 74 65 73 74 2d 64 61 74 61 20 28 pend test-data (
12590 6c 69 73 74 20 28 6c 69 73 74 20 72 75 6e 2d 69 list (list run-i
125a0 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d d testname item-
125b0 70 61 74 68 20 63 61 74 65 67 6f 72 79 20 76 61 path category va
125c0 72 69 61 62 6c 65 20 76 61 6c 75 65 20 65 78 70 riable value exp
125d0 65 63 74 65 64 20 74 6f 6c 20 75 6e 69 74 73 20 ected tol units
125e0 73 74 61 74 75 73 20 63 6f 6d 6d 65 6e 74 29 29 status comment))
125f0 29 29 29 0a 09 20 20 64 62 20 0a 09 20 20 3b 3b ))).. db .. ;;
12600 20 22 53 45 4c 45 43 54 20 72 75 6e 5f 69 64 2c "SELECT run_id,
12610 74 65 73 74 6e 61 6d 65 2c 69 74 65 6d 5f 70 61 testname,item_pa
12620 74 68 2c 63 61 74 65 67 6f 72 79 2c 76 61 72 69 th,category,vari
12630 61 62 6c 65 2c 74 64 2e 76 61 6c 75 65 20 41 53 able,td.value AS
12640 20 76 61 6c 75 65 2c 65 78 70 65 63 74 65 64 2c value,expected,
12650 74 6f 6c 2c 75 6e 69 74 73 2c 74 64 2e 73 74 61 tol,units,td.sta
12660 74 75 73 20 41 53 20 73 74 61 74 75 73 2c 74 64 tus AS status,td
12670 2e 63 6f 6d 6d 65 6e 74 20 41 53 20 63 6f 6d 6d .comment AS comm
12680 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 ent FROM test_da
12690 74 61 20 41 53 20 74 64 20 49 4e 4e 45 52 20 4a ta AS td INNER J
126a0 4f 49 4e 20 74 65 73 74 73 20 4f 4e 20 74 65 73 OIN tests ON tes
126b0 74 73 2e 69 64 3d 74 64 2e 74 65 73 74 5f 69 64 ts.id=td.test_id
126c0 20 57 48 45 52 45 20 74 65 73 74 5f 69 64 3d 3f WHERE test_id=?
126d0 3b 22 0a 09 20 20 22 53 45 4c 45 43 54 20 72 75 ;".. "SELECT ru
126e0 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 69 74 n_id,testname,it
126f0 65 6d 5f 70 61 74 68 2c 63 61 74 65 67 6f 72 79 em_path,category
12700 2c 76 61 72 69 61 62 6c 65 2c 74 64 2e 76 61 6c ,variable,td.val
12710 75 65 20 41 53 20 76 61 6c 75 65 2c 74 64 2e 65 ue AS value,td.e
12720 78 70 65 63 74 65 64 2c 74 64 2e 74 6f 6c 2c 74 xpected,td.tol,t
12730 64 2e 75 6e 69 74 73 2c 74 64 2e 73 74 61 74 75 d.units,td.statu
12740 73 20 41 53 20 73 74 61 74 75 73 2c 74 64 2e 63 s AS status,td.c
12750 6f 6d 6d 65 6e 74 20 41 53 20 63 6f 6d 6d 65 6e omment AS commen
12760 74 20 46 52 4f 4d 20 74 65 73 74 5f 64 61 74 61 t FROM test_data
12770 20 41 53 20 74 64 20 49 4e 4e 45 52 20 4a 4f 49 AS td INNER JOI
12780 4e 20 74 65 73 74 73 20 4f 4e 20 74 65 73 74 73 N tests ON tests
12790 2e 69 64 3d 74 64 2e 74 65 73 74 5f 69 64 20 57 .id=td.test_id W
127a0 48 45 52 45 20 74 65 73 74 6e 61 6d 65 3d 3f 3b HERE testname=?;
127b0 22 0a 09 20 20 74 65 73 74 2d 69 64 29 0a 09 20 ".. test-id)..
127c0 28 69 66 20 63 75 72 72 2d 74 65 73 74 2d 6e 61 (if curr-test-na
127d0 6d 65 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 me.. (set! r
127e0 65 73 75 6c 74 73 20 28 61 70 70 65 6e 64 20 72 esults (append r
127f0 65 73 75 6c 74 73 20 28 6c 69 73 74 20 28 63 6f esults (list (co
12800 6e 73 20 63 75 72 72 2d 74 65 73 74 2d 6e 61 6d ns curr-test-nam
12810 65 20 74 65 73 74 2d 64 61 74 61 29 29 29 29 29 e test-data)))))
12820 0a 09 20 29 29 0a 20 20 20 20 20 28 73 6f 72 74 .. )). (sort
12830 20 28 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 (delete-duplica
12840 74 65 73 20 74 65 73 74 2d 69 64 73 29 20 73 74 tes test-ids) st
12850 72 69 6e 67 3c 3d 29 29 0a 20 20 20 20 28 73 79 ring<=)). (sy
12860 73 74 65 6d 20 28 63 6f 6e 63 20 22 6d 6b 64 69 stem (conc "mkdi
12870 72 20 2d 70 20 22 20 74 65 6d 70 64 69 72 29 29 r -p " tempdir))
12880 0a 20 20 20 20 3b 3b 20 28 70 70 20 72 65 73 75 . ;; (pp resu
12890 6c 74 73 29 0a 20 20 20 20 28 6f 64 73 3a 6c 69 lts). (ods:li
128a0 73 74 2d 3e 6f 64 73 20 0a 20 20 20 20 20 74 65 st->ods . te
128b0 6d 70 64 69 72 0a 20 20 20 20 20 28 69 66 20 28 mpdir. (if (
128c0 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 string-match (re
128d0 67 65 78 70 20 22 5e 5b 2f 7e 5d 2b 2e 2a 22 29 gexp "^[/~]+.*")
128e0 20 6f 75 74 70 75 74 66 69 6c 65 29 20 3b 3b 20 outputfile) ;;
128f0 66 75 6c 6c 20 70 61 74 68 3f 0a 09 20 6f 75 74 full path?.. out
12900 70 75 74 66 69 6c 65 0a 09 20 28 62 65 67 69 6e putfile.. (begin
12910 0a 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e .. (debug:prin
12920 74 20 30 20 22 57 41 52 4e 49 4e 47 3a 20 70 61 t 0 "WARNING: pa
12930 74 68 20 67 69 76 65 6e 2c 20 22 20 6f 75 74 70 th given, " outp
12940 75 74 66 69 6c 65 20 22 20 69 73 20 72 65 6c 61 utfile " is rela
12950 74 69 76 65 2c 20 70 72 65 66 69 78 69 6e 67 20 tive, prefixing
12960 77 69 74 68 20 63 75 72 72 65 6e 74 20 64 69 72 with current dir
12970 65 63 74 6f 72 79 22 29 0a 09 20 20 20 28 63 6f ectory").. (co
12980 6e 63 20 28 63 75 72 72 65 6e 74 2d 64 69 72 65 nc (current-dire
12990 63 74 6f 72 79 29 20 22 2f 22 20 6f 75 74 70 75 ctory) "/" outpu
129a0 74 66 69 6c 65 29 29 29 0a 20 20 20 20 20 72 65 tfile))). re
129b0 73 75 6c 74 73 29 0a 20 20 20 20 3b 3b 20 62 72 sults). ;; br
129c0 75 74 61 6c 20 63 6c 65 61 6e 20 75 70 0a 20 20 utal clean up.
129d0 20 20 28 73 79 73 74 65 6d 20 22 72 6d 20 2d 72 (system "rm -r
129e0 66 20 74 65 6d 70 64 69 72 22 29 29 29 0a 0a 3b f tempdir")))..;
129f0 3b 20 28 64 62 3a 65 78 74 72 61 63 74 2d 6f 64 ; (db:extract-od
12a00 73 2d 66 69 6c 65 20 64 62 20 22 6f 75 74 70 75 s-file db "outpu
12a10 74 66 69 6c 65 2e 6f 64 73 22 20 27 28 28 22 73 tfile.ods" '(("s
12a20 79 73 6e 61 6d 65 22 20 22 25 22 29 28 22 66 73 ysname" "%")("fs
12a30 6e 61 6d 65 22 20 22 25 22 29 28 22 64 61 74 61 name" "%")("data
12a40 70 61 74 68 22 20 22 25 22 29 29 20 22 25 22 29 path" "%")) "%")
12a50 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ...;;===========
12a60 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12a70 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12a80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12a90 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 52 ===========.;; R
12aa0 45 4d 4f 54 45 20 44 42 20 41 43 43 45 53 53 20 EMOTE DB ACCESS
12ab0 56 49 41 20 52 50 43 0a 3b 3b 3d 3d 3d 3d 3d 3d VIA RPC.;;======
12ac0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12ad0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12ae0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12af0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
12b00 0a 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 ..;; (define (rd
12b10 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 b:test-set-statu
12b20 73 2d 73 74 61 74 65 20 74 65 73 74 2d 69 64 20 s-state test-id
12b30 73 74 61 74 75 73 20 73 74 61 74 65 20 6d 73 67 status state msg
12b40 29 0a 3b 3b 20 20 20 28 69 66 20 2a 72 75 6e 72 ).;; (if *runr
12b50 65 6d 6f 74 65 2a 0a 3b 3b 20 20 20 20 20 20 20 emote*.;;
12b60 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
12b70 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
12b80 74 65 2a 20 30 29 29 0a 3b 3b 20 09 20 20 20 20 te* 0)).;; .
12b90 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
12ba0 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
12bb0 29 29 0a 3b 3b 20 09 28 68 61 6e 64 6c 65 2d 65 )).;; .(handle-e
12bc0 78 63 65 70 74 69 6f 6e 73 0a 3b 3b 20 09 20 65 xceptions.;; . e
12bd0 78 6e 0a 3b 3b 20 09 20 28 62 65 67 69 6e 0a 3b xn.;; . (begin.;
12be0 3b 20 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 ; . (debug:pri
12bf0 6e 74 20 30 20 22 45 58 43 45 50 54 49 4f 4e 3a nt 0 "EXCEPTION:
12c00 20 72 70 63 20 63 61 6c 6c 20 66 61 69 6c 65 64 rpc call failed
12c10 3f 22 29 0a 3b 3b 20 09 20 20 20 28 64 65 62 75 ?").;; . (debu
12c20 67 3a 70 72 69 6e 74 20 30 20 22 20 20 22 20 28 g:print 0 " " (
12c30 28 63 6f 6e 64 69 74 69 6f 6e 2d 70 72 6f 70 65 (condition-prope
12c40 72 74 79 2d 61 63 63 65 73 73 6f 72 20 27 65 78 rty-accessor 'ex
12c50 6e 20 27 6d 65 73 73 61 67 65 29 20 65 78 6e 29 n 'message) exn)
12c60 29 0a 3b 3b 20 09 20 20 20 28 70 72 69 6e 74 2d ).;; . (print-
12c70 63 61 6c 6c 2d 63 68 61 69 6e 29 0a 3b 3b 20 09 call-chain).;; .
12c80 20 20 20 28 63 64 62 3a 74 65 73 74 2d 73 65 74 (cdb:test-set
12c90 2d 73 74 61 74 75 73 2d 73 74 61 74 65 20 74 65 -status-state te
12ca0 73 74 2d 69 64 20 73 74 61 74 75 73 20 73 74 61 st-id status sta
12cb0 74 65 20 6d 73 67 29 29 0a 3b 3b 20 09 20 28 28 te msg)).;; . ((
12cc0 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 63 rpc:procedure 'c
12cd0 64 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 db:test-set-stat
12ce0 75 73 2d 73 74 61 74 65 20 68 6f 73 74 20 70 6f us-state host po
12cf0 72 74 29 20 74 65 73 74 2d 69 64 20 73 74 61 74 rt) test-id stat
12d00 75 73 20 73 74 61 74 65 20 6d 73 67 29 29 29 0a us state msg))).
12d10 3b 3b 20 20 20 20 20 20 20 28 63 64 62 3a 74 65 ;; (cdb:te
12d20 73 74 2d 73 65 74 2d 73 74 61 74 75 73 2d 73 74 st-set-status-st
12d30 61 74 65 20 74 65 73 74 2d 69 64 20 73 74 61 74 ate test-id stat
12d40 75 73 20 73 74 61 74 65 20 6d 73 67 29 29 29 0a us state msg))).
12d50 3b 3b 20 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 ;; .;; (define (
12d60 72 64 62 3a 74 65 73 74 2d 72 6f 6c 6c 75 70 2d rdb:test-rollup-
12d70 74 65 73 74 5f 64 61 74 61 2d 70 61 73 73 2d 66 test_data-pass-f
12d80 61 69 6c 20 74 65 73 74 2d 69 64 29 0a 3b 3b 20 ail test-id).;;
12d90 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f 74 65 (if *runremote
12da0 2a 0a 3b 3b 20 20 20 20 20 20 20 28 6c 65 74 20 *.;; (let
12db0 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 2d 72 ((host (vector-r
12dc0 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 30 ef *runremote* 0
12dd0 29 29 0a 3b 3b 20 09 20 20 20 20 28 70 6f 72 74 )).;; . (port
12de0 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a 72 75 (vector-ref *ru
12df0 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a 3b 3b nremote* 1))).;;
12e00 20 09 28 28 72 70 63 3a 70 72 6f 63 65 64 75 72 .((rpc:procedur
12e10 65 20 27 63 64 62 3a 74 65 73 74 2d 72 6f 6c 6c e 'cdb:test-roll
12e20 75 70 2d 74 65 73 74 5f 64 61 74 61 2d 70 61 73 up-test_data-pas
12e30 73 2d 66 61 69 6c 20 68 6f 73 74 20 70 6f 72 74 s-fail host port
12e40 29 20 74 65 73 74 2d 69 64 29 29 0a 3b 3b 20 20 ) test-id)).;;
12e50 20 20 20 20 20 28 63 64 62 3a 74 65 73 74 2d 72 (cdb:test-r
12e60 6f 6c 6c 75 70 2d 74 65 73 74 5f 64 61 74 61 2d ollup-test_data-
12e70 70 61 73 73 2d 66 61 69 6c 20 74 65 73 74 2d 69 pass-fail test-i
12e80 64 29 29 29 0a 3b 3b 20 0a 3b 3b 20 28 64 65 66 d))).;; .;; (def
12e90 69 6e 65 20 28 72 64 62 3a 70 61 73 73 2d 66 61 ine (rdb:pass-fa
12ea0 69 6c 2d 63 6f 75 6e 74 73 20 74 65 73 74 2d 69 il-counts test-i
12eb0 64 20 66 61 69 6c 2d 63 6f 75 6e 74 20 70 61 73 d fail-count pas
12ec0 73 2d 63 6f 75 6e 74 29 0a 3b 3b 20 20 20 28 69 s-count).;; (i
12ed0 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 0a 3b 3b f *runremote*.;;
12ee0 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 6f (let ((ho
12ef0 73 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a st (vector-ref *
12f00 72 75 6e 72 65 6d 6f 74 65 2a 20 30 29 29 0a 3b runremote* 0)).;
12f10 3b 20 09 20 20 20 20 28 70 6f 72 74 20 28 76 65 ; . (port (ve
12f20 63 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d ctor-ref *runrem
12f30 6f 74 65 2a 20 31 29 29 29 0a 3b 3b 20 09 28 28 ote* 1))).;; .((
12f40 72 70 63 3a 70 72 6f 63 65 64 75 72 65 20 27 63 rpc:procedure 'c
12f50 64 62 3a 70 61 73 73 2d 66 61 69 6c 2d 63 6f 75 db:pass-fail-cou
12f60 6e 74 73 20 68 6f 73 74 20 70 6f 72 74 29 20 74 nts host port) t
12f70 65 73 74 2d 69 64 20 66 61 69 6c 2d 63 6f 75 6e est-id fail-coun
12f80 74 20 70 61 73 73 2d 63 6f 75 6e 74 29 29 0a 3b t pass-count)).;
12f90 3b 20 20 20 20 20 20 20 28 63 64 62 3a 70 61 73 ; (cdb:pas
12fa0 73 2d 66 61 69 6c 2d 63 6f 75 6e 74 73 20 74 65 s-fail-counts te
12fb0 73 74 2d 69 64 20 66 61 69 6c 2d 63 6f 75 6e 74 st-id fail-count
12fc0 20 70 61 73 73 2d 63 6f 75 6e 74 29 29 29 0a 3b pass-count))).;
12fd0 3b 20 0a 3b 3b 20 3b 3b 20 63 75 72 72 65 6e 74 ; .;; ;; current
12fe0 6c 79 20 66 6f 72 63 65 73 20 61 20 66 6c 75 73 ly forces a flus
12ff0 68 20 6f 66 20 74 68 65 20 71 75 65 75 65 0a 3b h of the queue.;
13000 3b 20 28 64 65 66 69 6e 65 20 28 72 64 62 3a 74 ; (define (rdb:t
13010 65 73 74 73 2d 72 65 67 69 73 74 65 72 2d 74 65 ests-register-te
13020 73 74 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 st db run-id tes
13030 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 t-name item-path
13040 29 0a 3b 3b 20 20 20 28 69 66 20 2a 72 75 6e 72 ).;; (if *runr
13050 65 6d 6f 74 65 2a 0a 3b 3b 20 20 20 20 20 20 20 emote*.;;
13060 28 6c 65 74 20 28 28 68 6f 73 74 20 28 76 65 63 (let ((host (vec
13070 74 6f 72 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f tor-ref *runremo
13080 74 65 2a 20 30 29 29 0a 3b 3b 20 09 20 20 20 20 te* 0)).;; .
13090 28 70 6f 72 74 20 28 76 65 63 74 6f 72 2d 72 65 (port (vector-re
130a0 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 f *runremote* 1)
130b0 29 29 0a 3b 3b 20 09 28 28 72 70 63 3a 70 72 6f )).;; .((rpc:pro
130c0 63 65 64 75 72 65 20 27 63 64 62 3a 74 65 73 74 cedure 'cdb:test
130d0 73 2d 72 65 67 69 73 74 65 72 2d 74 65 73 74 20 s-register-test
130e0 68 6f 73 74 20 70 6f 72 74 29 20 64 62 20 72 75 host port) db ru
130f0 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 n-id test-name i
13100 74 65 6d 2d 70 61 74 68 20 66 6f 72 63 65 2d 77 tem-path force-w
13110 72 69 74 65 3a 20 23 74 29 29 0a 3b 3b 20 20 20 rite: #t)).;;
13120 20 20 20 20 28 63 64 62 3a 74 65 73 74 73 2d 72 (cdb:tests-r
13130 65 67 69 73 74 65 72 2d 74 65 73 74 20 64 62 20 egister-test db
13140 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 run-id test-name
13150 20 69 74 65 6d 2d 70 61 74 68 20 66 6f 72 63 65 item-path force
13160 2d 77 72 69 74 65 3a 20 23 74 29 29 29 0a 3b 3b -write: #t))).;;
13170 20 0a 3b 3b 20 28 64 65 66 69 6e 65 20 28 72 64 .;; (define (rd
13180 62 3a 66 6c 75 73 68 2d 71 75 65 75 65 29 0a 3b b:flush-queue).;
13190 3b 20 20 20 28 69 66 20 2a 72 75 6e 72 65 6d 6f ; (if *runremo
131a0 74 65 2a 0a 3b 3b 20 20 20 20 20 20 20 28 6c 65 te*.;; (le
131b0 74 20 28 28 68 6f 73 74 20 28 76 65 63 74 6f 72 t ((host (vector
131c0 2d 72 65 66 20 2a 72 75 6e 72 65 6d 6f 74 65 2a -ref *runremote*
131d0 20 30 29 29 0a 3b 3b 20 09 20 20 20 20 28 70 6f 0)).;; . (po
131e0 72 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 2a rt (vector-ref *
131f0 72 75 6e 72 65 6d 6f 74 65 2a 20 31 29 29 29 0a runremote* 1))).
13200 3b 3b 20 09 28 28 72 70 63 3a 70 72 6f 63 65 64 ;; .((rpc:proced
13210 75 72 65 20 27 63 64 62 3a 66 6c 75 73 68 2d 71 ure 'cdb:flush-q
13220 75 65 75 65 20 68 6f 73 74 20 70 6f 72 74 29 29 ueue host port))
13230 29 0a 3b 3b 20 20 20 20 20 20 20 28 63 64 62 3a ).;; (cdb:
13240 66 6c 75 73 68 2d 71 75 65 75 65 29 29 29 0a 3b flush-queue))).;
13250 3b 20 0a ; .