From db37d9f6a801a2ae41cd54dd1c8fad4866d4fdea Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 8 Jul 2022 12:04:31 +0100 Subject: [PATCH] Split out inserting derivation output details sets So that this can be used when inserting builds. --- guix-data-service/model/derivation.scm | 74 ++++++++++++++------------ 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/guix-data-service/model/derivation.scm b/guix-data-service/model/derivation.scm index 17b1eee..696e2fd 100644 --- a/guix-data-service/model/derivation.scm +++ b/guix-data-service/model/derivation.scm @@ -54,6 +54,7 @@ select-derivation-outputs-in-revision fix-derivation-output-details-hash-encoding derivation-output-details->derivation-output-details-ids + derivation-output-details-ids->derivation-output-details-set-id select-derivations-by-revision-name-and-version select-derivation-inputs-by-derivation-id select-serialized-derivation-by-file-name @@ -985,6 +986,42 @@ LOCK TABLE ONLY derivation_output_details (assq-ref details 'recursive))) derivation-output-details))) +(define (derivation-output-details-ids->derivation-output-details-set-id + conn + derivation-output-details-ids) + (define (select-derivation-output-details-sets-id) + (match (exec-query + conn + (string-append + " +SELECT id +FROM derivation_output_details_sets +WHERE derivation_output_details_ids = ARRAY[" + (string-join (map number->string + derivation-output-details-ids) + ",") + "]")) + (((id)) + (string->number id)) + (_ #f))) + + (define (insert-into-derivation-output-details-sets) + (match (exec-query + conn + (string-append + " +INSERT INTO derivation_output_details_sets (derivation_output_details_ids) +VALUES (ARRAY[" + (string-join (map number->string derivation-output-details-ids) + ",") + "]) +RETURNING id")) + (((id)) + (string->number id)))) + + (or (select-derivation-output-details-sets-id) + (insert-into-derivation-output-details-sets))) + (define (insert-derivation-outputs conn derivation-id names-and-derivation-outputs) @@ -1004,37 +1041,6 @@ LOCK TABLE ONLY derivation_output_details ",") ";")) - (define (select-derivation-output-details-sets-id derivation-output-details-ids) - (match (exec-query - conn - (string-append - " -SELECT id -FROM derivation_output_details_sets -WHERE derivation_output_details_ids = ARRAY[" - (string-join (map number->string - derivation-output-details-ids) - ",") - "]")) - (((id)) - (string->number id)) - (_ #f))) - - (define (insert-into-derivation-output-details-sets - derivation-output-details-ids) - (match (exec-query - conn - (string-append - " -INSERT INTO derivation_output_details_sets (derivation_output_details_ids) -VALUES (ARRAY[" - (string-join (map number->string derivation-output-details-ids) - ",") - "]) -RETURNING id")) - (((id)) - (string->number id)))) - (define (insert-into-derivations-by-output-details-set derivation_output_details_set_id) (exec-query @@ -1072,9 +1078,9 @@ VALUES ($1, $2)" derivation-output-details-ids)) (insert-into-derivations-by-output-details-set - (or - (select-derivation-output-details-sets-id derivation-output-details-ids) - (insert-into-derivation-output-details-sets derivation-output-details-ids))) + (derivation-output-details-ids->derivation-output-details-set-id + conn + derivation-output-details-ids)) derivation-output-details-ids))