From dde1a9356493884b21b6b1dd585c5d6b9797cbb0 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 15 Apr 2020 19:50:25 +0200 Subject: [PATCH] database: Support "status:" keyword in queries. * src/cuirass/database.scm (query->bind-arguments): Handle "status" query. (db-get-builds-by-search, db-get-builds-query-min, db-get-builds-query-max): Add status filter. --- src/cuirass/database.scm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index 40c4b92..25ef527 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2018, 2020 Ludovic Courtès ;;; Copyright © 2018 Clément Lassieur ;;; Copyright © 2018 Tatiana Sholokhova -;;; Copyright © 2019 Ricardo Wurmus +;;; Copyright © 2019, 2020 Ricardo Wurmus ;;; ;;; This file is part of Cuirass. ;;; @@ -624,6 +624,12 @@ WHERE derivation =" derivation ";")) (define (query->bind-arguments query-string) "Return a list of keys to query strings by parsing QUERY-STRING." + (define status-values + `(("success" . ,(build-status succeeded)) + ("failed" . ,(build-status failed)) + ("failed-dependency" . ,(build-status failed-dependency)) + ("failed-other" . ,(build-status failed-other)) + ("canceled" . ,(build-status canceled)))) (let ((args (append-map (lambda (token) (match (string-split token #\:) @@ -631,6 +637,8 @@ WHERE derivation =" derivation ";")) `(#:system ,system)) (("spec" spec) `(#:spec ,spec)) + (("status" status) + `(#:status ,(assoc-ref status-values status))) ((_ invalid) '()) ; ignore ((query) `(#:query @@ -668,6 +676,8 @@ FROM Builds INNER JOIN Evaluations ON Builds.evaluation = Evaluations.id INNER JOIN Specifications ON Evaluations.specification = Specifications.name WHERE (Builds.nix_name LIKE :query) +AND (:status IS NULL + OR (Builds.status = :status)) AND (:spec IS NULL OR (Specifications.name = :spec)) AND (:system IS NULL @@ -973,6 +983,8 @@ ORDER BY E.id ASC;"))) INNER JOIN Evaluations ON Builds.evaluation = Evaluations.id INNER JOIN Specifications ON Evaluations.specification = Specifications.name WHERE (Builds.nix_name LIKE :query) +AND (:status IS NULL + OR (Builds.status = :status)) AND (:spec IS NULL OR (Specifications.name = :spec)) AND (:system IS NULL @@ -992,6 +1004,8 @@ AND (:system IS NULL INNER JOIN Evaluations ON Builds.evaluation = Evaluations.id INNER JOIN Specifications ON Evaluations.specification = Specifications.name WHERE (Builds.nix_name LIKE :query) +AND (:status IS NULL + OR (Builds.status = :status)) AND (:spec IS NULL OR (Specifications.name = :spec)) AND (:system IS NULL