aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm101
1 files changed, 54 insertions, 47 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index db9508b..824af59 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -38,7 +38,7 @@
datastore-count-builds
datastore-for-each-build
datastore-find-build
- datastore-list-builds
+ datastore-fold-builds
datastore-insert-build-tags
datastore-fetch-build-tags
datastore-find-build-result
@@ -2329,11 +2329,13 @@ WHERE uuid = :uuid"
#f))))
(#f #f))))))
-(define-method (datastore-list-builds
+(define-method (datastore-fold-builds
(datastore <sqlite-datastore>)
.
rest)
- (define* (list-builds #:key
+ (define* (fold-builds proc
+ initial
+ #:key
(tags '())
(not-tags '())
(systems '())
@@ -2343,7 +2345,7 @@ WHERE uuid = :uuid"
(priority-> 'unset)
(priority-< 'unset)
(after-id #f)
- (limit 1000)
+ (limit #f)
;; other-builds-dependent or no-dependent-builds
(relationship 'unset))
(call-with-worker-thread
@@ -2514,60 +2516,65 @@ WHERE derivation_outputs.derivation_id = builds.derivation_id)"))
(statement
(sqlite-prepare db query #:cache? #t)))
+ (define row->alist
+ (match-lambda
+ (#(uuid derivation_name priority processed canceled
+ created_at end_time)
+ `((uuid . ,uuid)
+ (derivation-name . ,derivation_name)
+ (priority . ,priority)
+ (processed . ,(cond
+ ((= 0 processed) #f)
+ ((= 1 processed) #t)
+ (else
+ (error
+ "unknown processed value"))))
+ (canceled . ,(cond
+ ((= 0 canceled) #f)
+ ((= 1 canceled) #t)
+ (else
+ (error "unknown canceled value"))))
+ (created-at . ,(if (string? created_at)
+ (match (strptime "%F %T"
+ created_at)
+ ((parts . _) parts)
+ (#f
+ (error
+ (simple-format
+ #f
+ "error parsing created_at ~A (~A)"
+ created_at
+ uuid))))
+ #f))
+ (end-time . ,(if (string? end_time)
+ (match (strptime "%F %T"
+ end_time)
+ ((parts . _) parts)
+ (#f
+ (error
+ (simple-format
+ #f
+ "error parsing end_time ~A (~A)"
+ end_time
+ uuid))))
+ #f))))))
+
(when after-id
(sqlite-bind-arguments
statement
#:after_id after-id))
(let ((result
- (sqlite-map
- (match-lambda
- (#(uuid derivation_name priority processed canceled
- created_at end_time)
- `((uuid . ,uuid)
- (derivation-name . ,derivation_name)
- (priority . ,priority)
- (processed . ,(cond
- ((= 0 processed) #f)
- ((= 1 processed) #t)
- (else
- (error
- "unknown processed value"))))
- (canceled . ,(cond
- ((= 0 canceled) #f)
- ((= 1 canceled) #t)
- (else
- (error "unknown canceled value"))))
- (created-at . ,(if (string? created_at)
- (match (strptime "%F %T"
- created_at)
- ((parts . _) parts)
- (#f
- (error
- (simple-format
- #f
- "error parsing created_at ~A (~A)"
- created_at
- uuid))))
- #f))
- (end-time . ,(if (string? end_time)
- (match (strptime "%F %T"
- end_time)
- ((parts . _) parts)
- (#f
- (error
- (simple-format
- #f
- "error parsing end_time ~A (~A)"
- end_time
- uuid))))
- #f)))))
+ (sqlite-fold
+ (lambda (row result)
+ (proc (row->alist row) result))
+ initial
statement)))
(sqlite-reset statement)
result)))))))
- (apply list-builds rest))
+ (apply fold-builds rest))
(define-method (datastore-fetch-build-tags
(datastore <sqlite-datastore>)