diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-01-07 10:19:56 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-01-07 23:59:30 +0100 |
commit | 60b6c6fcc5dd3a9becded4ace160746fb0d9e548 (patch) | |
tree | 1c70fc39dbb629f42bf8f4b74de14b43eddd0eeb /src | |
parent | 581b6e4fee990a4d89c58708ed2c453dc383f6f1 (diff) | |
download | cuirass-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.scm | 34 |
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)))))) |