Speed up querying for revision package derivations
By splitting it up by system.
This commit is contained in:
parent
4e7c2bcfbf
commit
e6205e988a
2 changed files with 49 additions and 39 deletions
|
|
@ -198,7 +198,7 @@ ORDER BY systems.system DESC,
|
|||
(define* (select-package-derivations-in-revision conn
|
||||
commit-hash
|
||||
#:key
|
||||
systems
|
||||
system
|
||||
targets
|
||||
minimum-builds
|
||||
maximum-builds
|
||||
|
|
@ -214,19 +214,25 @@ ORDER BY systems.system DESC,
|
|||
(string-join
|
||||
`(,@(filter-map
|
||||
(lambda (field values)
|
||||
(if values
|
||||
(string-append
|
||||
field " IN ("
|
||||
(string-join (map (lambda (value)
|
||||
(simple-format #f "'~A'" value))
|
||||
values)
|
||||
",")
|
||||
")")
|
||||
#f))
|
||||
'("systems.system"
|
||||
"target")
|
||||
(list systems
|
||||
targets))
|
||||
(cond
|
||||
((list? values)
|
||||
(string-append
|
||||
field " IN ("
|
||||
(string-join (map (lambda (value)
|
||||
(simple-format #f "'~A'" value))
|
||||
values)
|
||||
",")
|
||||
")"))
|
||||
((number? values)
|
||||
(string-append
|
||||
field " = " (number->string values)))
|
||||
(else
|
||||
#f)))
|
||||
'("package_derivations.system_id" "target")
|
||||
(list
|
||||
(and=> system (lambda (system)
|
||||
(system->system-id conn system)))
|
||||
targets))
|
||||
,@(if minimum-builds
|
||||
(list
|
||||
(string-append
|
||||
|
|
@ -346,7 +352,6 @@ EXISTS (
|
|||
(string-append
|
||||
"
|
||||
SELECT derivations.file_name,
|
||||
systems.system,
|
||||
package_derivations.target"
|
||||
(if include-builds?
|
||||
",
|
||||
|
|
@ -371,8 +376,6 @@ SELECT derivations.file_name,
|
|||
"")
|
||||
"
|
||||
FROM derivations
|
||||
INNER JOIN systems
|
||||
ON derivations.system_id = systems.id
|
||||
INNER JOIN derivations_by_output_details_set
|
||||
ON derivations.id = derivations_by_output_details_set.derivation_id
|
||||
INNER JOIN package_derivations
|
||||
|
|
@ -400,7 +403,7 @@ ORDER BY derivations.file_name
|
|||
"")))
|
||||
|
||||
(map (match-lambda
|
||||
((file_name system target builds)
|
||||
((file_name target builds)
|
||||
(list file_name
|
||||
system
|
||||
target
|
||||
|
|
@ -408,7 +411,7 @@ ORDER BY derivations.file_name
|
|||
(eq? #f builds))
|
||||
#()
|
||||
(json-string->scm builds))))
|
||||
((file_name system target)
|
||||
((file_name target)
|
||||
(list file_name system target)))
|
||||
(exec-query conn
|
||||
query
|
||||
|
|
|
|||
|
|
@ -1069,8 +1069,8 @@
|
|||
(assq-ref query-parameters 'field)))
|
||||
(letpar&
|
||||
((derivations
|
||||
(with-resource-from-pool (connection-pool) conn
|
||||
(if search-query
|
||||
(if search-query
|
||||
(with-resource-from-pool (connection-pool) conn
|
||||
(search-package-derivations-in-revision
|
||||
conn
|
||||
commit-hash
|
||||
|
|
@ -1088,24 +1088,31 @@
|
|||
string->symbol)
|
||||
#:limit-results limit-results
|
||||
#:after-name (assq-ref query-parameters 'after_name)
|
||||
#:include-builds? (member "builds" fields))
|
||||
(select-package-derivations-in-revision
|
||||
conn
|
||||
commit-hash
|
||||
#:systems (assq-ref query-parameters 'system)
|
||||
#:targets (assq-ref query-parameters 'target)
|
||||
#:maximum-builds (assq-ref query-parameters 'maximum_builds)
|
||||
#:minimum-builds (assq-ref query-parameters 'minimum_builds)
|
||||
#:build-from-build-servers (assq-ref query-parameters
|
||||
'build_from_build_server)
|
||||
#:no-build-from-build-servers (assq-ref query-parameters
|
||||
'no_build_from_build_server)
|
||||
#:build-status (and=> (assq-ref query-parameters
|
||||
'build_status)
|
||||
string->symbol)
|
||||
#:limit-results limit-results
|
||||
#:after-name (assq-ref query-parameters 'after_name)
|
||||
#:include-builds? (member "builds" fields)))))
|
||||
#:include-builds? (member "builds" fields)))
|
||||
(concatenate!
|
||||
(par-map&
|
||||
(lambda (system)
|
||||
(with-resource-from-pool (connection-pool) conn
|
||||
(select-package-derivations-in-revision
|
||||
conn
|
||||
commit-hash
|
||||
#:system system
|
||||
#:targets (assq-ref query-parameters 'target)
|
||||
#:maximum-builds (assq-ref query-parameters 'maximum_builds)
|
||||
#:minimum-builds (assq-ref query-parameters 'minimum_builds)
|
||||
#:build-from-build-servers (assq-ref query-parameters
|
||||
'build_from_build_server)
|
||||
#:no-build-from-build-servers (assq-ref query-parameters
|
||||
'no_build_from_build_server)
|
||||
#:build-status (and=> (assq-ref query-parameters
|
||||
'build_status)
|
||||
string->symbol)
|
||||
#:limit-results limit-results
|
||||
#:after-name (assq-ref query-parameters 'after_name)
|
||||
#:include-builds? (member "builds" fields))))
|
||||
(or (assq-ref query-parameters 'system)
|
||||
(call-with-resource-from-pool (connection-pool)
|
||||
list-systems))))))
|
||||
(build-server-urls
|
||||
(call-with-resource-from-pool (connection-pool)
|
||||
select-build-server-urls-by-id)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue