diff options
author | Christopher Baines <mail@cbaines.net> | 2019-12-15 14:17:09 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-12-16 15:19:02 +0000 |
commit | a41249d8fe327536fc6deb8c28080a0abe5d31f4 (patch) | |
tree | 68071a5d00dd4bd2f6a358e62b4dcdb2dab5be09 /guix-data-service/model | |
parent | 18504fba49ee23d17d3a26744ea084b681647442 (diff) | |
download | data-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.scm | 15 |
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 |