diff options
Diffstat (limited to 'guix-data-service/model')
-rw-r--r-- | guix-data-service/model/utils.scm | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/guix-data-service/model/utils.scm b/guix-data-service/model/utils.scm index b46e2e4..c05f20d 100644 --- a/guix-data-service/model/utils.scm +++ b/guix-data-service/model/utils.scm @@ -406,17 +406,24 @@ WHERE table_name = $1" data) 3000))))) (missing-entries - (filter (lambda (field-values) - (not (vhash-assoc - ;; Normalise at this point, so that the proper value - ;; to insert is carried forward - (normalise-values field-values) - existing-entries))) - (if sets-of-data? - (delete-duplicates* (concatenate data)) - (if delete-duplicates? - (delete-duplicates* data) - data)))) + (let loop ((lst (if sets-of-data? + (concatenate data) + data)) + (result '())) + (if (null? lst) + (if delete-duplicates? + (delete-duplicates* result) + result) + (let ((field-values (car lst))) + (if (vhash-assoc + ;; Normalise at this point, so that the proper value + ;; to insert is carried forward + (normalise-values field-values) + existing-entries) + (loop (cdr lst) + result) + (loop (cdr lst) + (cons field-values result))))))) (new-entries (if (null? missing-entries) '() |