summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-01-07 10:19:56 +0100
committerLudovic Courtès <ludo@gnu.org>2018-01-07 23:59:30 +0100
commit60b6c6fcc5dd3a9becded4ace160746fb0d9e548 (patch)
tree1c70fc39dbb629f42bf8f4b74de14b43eddd0eeb /src
parent581b6e4fee990a4d89c58708ed2c453dc383f6f1 (diff)
downloadcuirass-60b6c6fcc5dd3a9becded4ace160746fb0d9e548.tar
cuirass-60b6c6fcc5dd3a9becded4ace160746fb0d9e548.tar.gz
database: Extend and test 'db-get-builds'.
* src/cuirass/database.scm (db-get-builds): Make 'order' a separate filter. Add 'format-limit-clause'. Reverse OUTPUTS. * tests/database.scm (make-dummy-eval, make-dummy-derivation) (make-dummy-build): New procedures. (with-temporary-database): New macro. ("database"): Use 'make-dummy-build'. ("db-get-builds"): New test.
Diffstat (limited to 'src')
-rw-r--r--src/cuirass/database.scm34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index 0c7c8f8..a00023a 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -1,6 +1,7 @@
;;; database.scm -- store evaluation and build results
;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of Cuirass.
;;;
@@ -270,7 +271,7 @@ INNER JOIN Specifications ON Evaluations.specification = Specifications.repo_nam
(define (db-get-builds db filters)
"Retrieve all builds in database DB which are matched by given FILTERS.
FILTERS is an assoc list which possible keys are 'project | 'jobset | 'job |
-'system | 'nr."
+'system | 'nr | 'order."
(define (format-where-clause filters)
(let ((where-clause
@@ -294,13 +295,22 @@ FILTERS is an assoc list which possible keys are 'project | 'jobset | 'job |
"")))
(define (format-order-clause filters)
- (any
- (lambda (param)
- (match param
- (('nr number)
- (format #f "ORDER BY Builds.id DESC LIMIT '~A';" number))
- (_ #f)))
- filters))
+ (or (any (match-lambda
+ (('order 'build-id)
+ "ORDER BY Builds.id ASC")
+ (('order 'decreasing-build-id)
+ "ORDER BY Builds.id DESC")
+ (_ #f))
+ filters)
+ "ORDER BY Builds.id DESC")) ;default order
+
+ (define (format-limit-clause filters)
+ (or (any (match-lambda
+ (('nr number)
+ (format #f "LIMIT '~A'" number))
+ (_ #f))
+ filters)
+ ""))
(let loop ((rows
(sqlite-exec db (string-append
@@ -308,10 +318,14 @@ FILTERS is an assoc list which possible keys are 'project | 'jobset | 'job |
" "
(format-where-clause filters)
" "
- (format-order-clause filters))))
+ (format-order-clause filters)
+ " "
+ (format-limit-clause filters)
+ ";")))
(outputs '()))
(match rows
- (() outputs)
+ (()
+ (reverse outputs))
((row . rest)
(loop rest
(cons (db-format-build db row) outputs))))))