@@ -109,21 +109,33 @@ ;; (if (< mver 1.18) ;; (begin ;; (print "Adding tags column to tests table") ;; (sqlite3:execute db "ALTER TABLE tests ADD COLUMN tags TEXT DEFAULT '';"))) (if (< mver 1.20) - (sqlite3:execute db "CREATE TABLE test_meta (id INTEGER PRIMARY KEY, + (begin + (sqlite3:execute db "CREATE TABLE test_meta (id INTEGER PRIMARY KEY, testname TEXT DEFAULT '', author TEXT DEFAULT '', owner TEXT DEFAULT '', description TEXT DEFAULT '', reviewed TIMESTAMP, iterated TEXT DEFAULT '', avg_runtime REAL, avg_disk REAL, tags TEXT DEFAULT '', - CONSTRAINT test_meta_contstraint UNIQUE (id,testname));")) + CONSTRAINT test_meta_contstraint UNIQUE (id,testname));") + (for-each + (lambda (stmt) + (sqlite3:execute db stmt)) + (list + "ALTER TABLE tests ADD COLUMN expected_value REAL;" ;; DO NOT Add a default, we want it to be NULL + "ALTER TABLE tests ADD COLUMN value REAL;" + "ALTER TABLE tests ADD COLUMN tol REAL;" + "ALTER TABLE tests ADD COLUMN tol_perc REAL;" + "ALTER TABLE tests ADD COLUMN first_err TEXT;" + "ALTER TABLE tests ADD COLUMN first_warn TEXT;" + )))) (if (< mver megatest-version) (db:set-var db "MEGATEST_VERSION" megatest-version))))) ;;====================================================================== ;; meta get and set vars @@ -199,10 +211,31 @@ (number? (cadr count))) (conc " OFFSET " (cadr count)) "")) runpatt) (vector header res))) + +;; replace header and keystr with a call to runs:get-std-run-fields +;; keypatt: '(("key1" "patt1")("key2" "patt2")...) +(define (db:get-runs db keys keypatts runpatt) + (let* ((res '()) + (remfields (list "id" "runname" "state" "status" "owner" "event_time")) + (header (append (map key:get-fieldname keys) + remfields)) + (keystr (conc (keys->keystr keys) "," + (string-intersperse remfields ",")))) + (sqlite3:for-each-row + (lambda (a . x) ;; turn all the fields returned into a vector and add to the list + (set! res (cons (apply vector a x) res))) + db + (conc "SELECT " keystr " FROM runs WHERE runname LIKE ? " + (map (lambda (keypatt) + (conc "AND " (car keypatt) " LIKE " (cadr keypatt) " ")) + keypatts) + "ORDER BY event_time DESC;") + runpatt) + (vector header res))) ;; use this one for db-get-run-info (define-inline (db:get-row vec)(vector-ref vec 1)) ;; use (get-value-by-header (db:get-header runinfo)(db:get-row runinfo)) @@ -467,25 +500,6 @@ (set! result (cons waitontest-name result)))))) tests) (if (not ever-seen)(set! result (cons waitontest-name result))))) waiton) (delete-duplicates result)))) -;; -;; ;; subtract from the waiton list the "COMPLETED" tests -;; ;;(completed-tests (filter (lambda (x) -;; ;; (equal? (db:test-get-state x) "COMPLETED")) -;; ;; tests)) -;; (completed-tests (let ((non-completed (make-hash-table))) -;; (for-each (lambda (x) -;; ;; could add check for PASS here -;; (if (not (and (equal? (db:test-get-state x) "COMPLETED") -;; (equal? (db:test-get-status x) "PASS"))) -;; (hash-table-set! non-completed (db:test-get-testname x) x))) -;; ;; (debug:print 0 "Completed: " (db:test-get-testname x)))) -;; tests) -;; (filter (lambda (x) -;; (not (hash-table-ref/default non-completed (db:test-get-testname x) #f))) -;; tests))) -;; (pre-dep-names (map db:test-get-testname completed-tests)) -;; (result (lset-difference string=? waiton pre-dep-names))) -;; (print "pre-dep-names: " pre-dep-names " waiton: " waiton " result: " result)