Improve performance of select-fixed-output-package-derivations-in-revision

This commit is contained in:
Christopher Baines 2023-03-11 18:19:19 +00:00
parent a20b929e90
commit 1a0eaeb672

View file

@ -35,6 +35,8 @@
#:use-module (guix-data-service utils)
#:use-module (guix-data-service database)
#:use-module (guix-data-service model utils)
#:use-module (guix-data-service model guix-revision)
#:use-module (guix-data-service model guix-revision-package-derivation)
#:use-module (guix-data-service model system)
#:export (valid-targets
count-derivations
@ -641,28 +643,12 @@ ORDER BY derivations.file_name
latest-build-status)
(define query
(string-append
(get-sql-to-select-package-and-related-derivations-for-revision
conn
(commit->revision-id conn commit)
#:system-id (system->system-id conn system)
#:target target)
"
WITH RECURSIVE all_derivations(id) AS (
SELECT package_derivations.derivation_id
FROM package_derivations
INNER JOIN systems
ON package_derivations.system_id = systems.id
INNER JOIN guix_revision_package_derivations
ON package_derivations.id =
guix_revision_package_derivations.package_derivation_id
INNER JOIN guix_revisions
ON guix_revision_package_derivations.revision_id = guix_revisions.id
WHERE guix_revisions.commit = $1
AND systems.system = $2
AND package_derivations.target = $3
UNION
SELECT derivation_outputs.derivation_id
FROM all_derivations
INNER JOIN derivation_inputs
ON all_derivations.id = derivation_inputs.derivation_id
INNER JOIN derivation_outputs
ON derivation_inputs.derivation_output_id = derivation_outputs.id
)
SELECT DISTINCT ON (derivations.file_name)
derivations.file_name,
(
@ -679,9 +665,9 @@ SELECT DISTINCT ON (derivations.file_name)
) AS latest_build
FROM all_derivations
INNER JOIN derivations
ON all_derivations.id = derivations.id
ON all_derivations.derivation_id = derivations.id
INNER JOIN derivation_outputs
ON all_derivations.id = derivation_outputs.derivation_id
ON all_derivations.derivation_id = derivation_outputs.derivation_id
INNER JOIN derivation_output_details
ON derivation_outputs.derivation_output_details_id = derivation_output_details.id
LEFT JOIN builds
@ -695,18 +681,18 @@ LEFT JOIN latest_build_status
WHERE derivation_output_details.hash IS NOT NULL"
(if after-derivation-file-name
"
AND derivations.file_name > $5"
AND derivations.file_name > $2"
"")
(if latest-build-status
(simple-format
#f
"
AND latest_build_status.status = $~A"
(if after-derivation-file-name 6 5))
(if after-derivation-file-name 3 2))
"")
"
ORDER BY derivations.file_name, latest_build_status.timestamp DESC
LIMIT $4"))
LIMIT $1"))
(map (match-lambda
((derivation_file_name latest_build)
@ -721,10 +707,7 @@ LIMIT $4"))
(exec-query-with-null-handling
conn
query
`(,commit
,system
,target
,(number->string (or limit-results 999999)) ; TODO
`(,(number->string (or limit-results 999999)) ; TODO
,@(if after-derivation-file-name
(list after-derivation-file-name)
'())