aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-15 14:17:09 +0000
committerChristopher Baines <mail@cbaines.net>2019-12-16 15:19:02 +0000
commita41249d8fe327536fc6deb8c28080a0abe5d31f4 (patch)
tree68071a5d00dd4bd2f6a358e62b4dcdb2dab5be09 /guix-data-service/model
parent18504fba49ee23d17d3a26744ea084b681647442 (diff)
downloaddata-service-a41249d8fe327536fc6deb8c28080a0abe5d31f4.tar
data-service-a41249d8fe327536fc6deb8c28080a0abe5d31f4.tar.gz
Move group-to-alist to the model utils module
So it can be more widely used.
Diffstat (limited to 'guix-data-service/model')
-rw-r--r--guix-data-service/model/utils.scm15
1 files changed, 15 insertions, 0 deletions
diff --git a/guix-data-service/model/utils.scm b/guix-data-service/model/utils.scm
index c17224b..af60e45 100644
--- a/guix-data-service/model/utils.scm
+++ b/guix-data-service/model/utils.scm
@@ -14,6 +14,7 @@
parse-postgresql-array-string
deduplicate-strings
group-list-by-first-n-fields
+ group-to-alist
insert-missing-data-and-return-all-ids))
(define NULL '())
@@ -81,6 +82,20 @@
'()
lists))
+(define (group-to-alist process lst)
+ (fold (lambda (element result)
+ (match (process element)
+ ((key . value)
+ (match (assoc key result)
+ ((_ . existing-values)
+ `((,key . ,(cons value existing-values))
+ ,@result))
+ (#f
+ `((,key . (,value))
+ ,@result))))))
+ '()
+ lst))
+
(define* (insert-missing-data-and-return-all-ids
conn
table-name