diff options
author | Christopher Baines <mail@cbaines.net> | 2019-09-04 13:20:07 +0200 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-09-04 19:27:48 +0200 |
commit | f1a9495727add78bdf53fb5547b317d7fba242a6 (patch) | |
tree | 0634d6d56183c3a94be1bc7bdf0518d6b89b2c20 /guix-data-service | |
parent | fc6bbf3e3cbfd7288715833af8154ee5f0fc554c (diff) | |
download | data-service-f1a9495727add78bdf53fb5547b317d7fba242a6.tar data-service-f1a9495727add78bdf53fb5547b317d7fba242a6.tar.gz |
Reduce code duplication in the package-derivation module
Through using insert-missing-data-and-return-all-ids.
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/model/package-derivation.scm | 75 |
1 files changed, 5 insertions, 70 deletions
diff --git a/guix-data-service/model/package-derivation.scm b/guix-data-service/model/package-derivation.scm index 6e87765..5c4deb3 100644 --- a/guix-data-service/model/package-derivation.scm +++ b/guix-data-service/model/package-derivation.scm @@ -7,50 +7,9 @@ #:export (insert-package-derivations count-packages-derivations-in-revision)) -(define (insert-missing-package-derivations conn entries) - (define query - (string-append - "INSERT INTO package_derivations " - "(package_id, derivation_id, system, target) VALUES " - (string-join - (map - (lambda (entry) - (apply simple-format - #f "(~A, ~A, '~A', '~A')" - entry)) - entries) - ", ") - " RETURNING id")) - - (exec-query conn query)) - (define (insert-package-derivations conn package-ids-systems-and-targets derivation-ids) - (define select-existing-package-derivation-entries - (string-append - "SELECT id, package_derivations.package_id," - " package_derivations.derivation_id, package_derivations.system," - " package_derivations.target " - "FROM package_derivations " - "JOIN (VALUES " - (string-join (map (match-lambda* - (((package-id system target) derivation-id) - (simple-format - #f "(~A, ~A, '~A', '~A')" - package-id - derivation-id - system - target))) - package-ids-systems-and-targets - derivation-ids) - ", ") - ") AS vals (package_id, derivation_id, system, target) " - "ON package_derivations.package_id = vals.package_id " - "AND package_derivations.derivation_id = vals.derivation_id " - "AND package_derivations.system = vals.system " - "AND package_derivations.target = vals.target")) - (define data-4-tuples (map (match-lambda* (((package-id system target) derivation-id) @@ -63,35 +22,11 @@ (if (null? data-4-tuples) '() - (begin - (let* ((existing-entries - (exec-query->vhash - conn - select-existing-package-derivation-entries - cdr - first)) ;; id - - (missing-entries - (filter (lambda (4-tuple) - (not (vhash-assoc 4-tuple existing-entries))) - data-4-tuples)) - - (new-entry-ids - (if (null? missing-entries) - '() - (begin - (vlist->list existing-entries) - (insert-missing-package-derivations conn missing-entries)))) - - (new-entries-id-lookup-vhash - (two-lists->vhash missing-entries - new-entry-ids))) - (map (lambda (4-tuple) - (cdr - (or (vhash-assoc 4-tuple existing-entries) - (vhash-assoc 4-tuple new-entries-id-lookup-vhash) - (error "Missing entry")))) - data-4-tuples))))) + (insert-missing-data-and-return-all-ids + conn + "package_derivations" + '(package_id derivation_id system target) + data-4-tuples))) (define (count-packages-derivations-in-revision conn commit-hash) (define query |