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
|
(define* (select-package-derivations-in-revision conn
|
||||||
commit-hash
|
commit-hash
|
||||||
#:key
|
#:key
|
||||||
systems
|
system
|
||||||
targets
|
targets
|
||||||
minimum-builds
|
minimum-builds
|
||||||
maximum-builds
|
maximum-builds
|
||||||
|
|
@ -214,18 +214,24 @@ ORDER BY systems.system DESC,
|
||||||
(string-join
|
(string-join
|
||||||
`(,@(filter-map
|
`(,@(filter-map
|
||||||
(lambda (field values)
|
(lambda (field values)
|
||||||
(if values
|
(cond
|
||||||
|
((list? values)
|
||||||
(string-append
|
(string-append
|
||||||
field " IN ("
|
field " IN ("
|
||||||
(string-join (map (lambda (value)
|
(string-join (map (lambda (value)
|
||||||
(simple-format #f "'~A'" value))
|
(simple-format #f "'~A'" value))
|
||||||
values)
|
values)
|
||||||
",")
|
",")
|
||||||
")")
|
")"))
|
||||||
#f))
|
((number? values)
|
||||||
'("systems.system"
|
(string-append
|
||||||
"target")
|
field " = " (number->string values)))
|
||||||
(list systems
|
(else
|
||||||
|
#f)))
|
||||||
|
'("package_derivations.system_id" "target")
|
||||||
|
(list
|
||||||
|
(and=> system (lambda (system)
|
||||||
|
(system->system-id conn system)))
|
||||||
targets))
|
targets))
|
||||||
,@(if minimum-builds
|
,@(if minimum-builds
|
||||||
(list
|
(list
|
||||||
|
|
@ -346,7 +352,6 @@ EXISTS (
|
||||||
(string-append
|
(string-append
|
||||||
"
|
"
|
||||||
SELECT derivations.file_name,
|
SELECT derivations.file_name,
|
||||||
systems.system,
|
|
||||||
package_derivations.target"
|
package_derivations.target"
|
||||||
(if include-builds?
|
(if include-builds?
|
||||||
",
|
",
|
||||||
|
|
@ -371,8 +376,6 @@ SELECT derivations.file_name,
|
||||||
"")
|
"")
|
||||||
"
|
"
|
||||||
FROM derivations
|
FROM derivations
|
||||||
INNER JOIN systems
|
|
||||||
ON derivations.system_id = systems.id
|
|
||||||
INNER JOIN derivations_by_output_details_set
|
INNER JOIN derivations_by_output_details_set
|
||||||
ON derivations.id = derivations_by_output_details_set.derivation_id
|
ON derivations.id = derivations_by_output_details_set.derivation_id
|
||||||
INNER JOIN package_derivations
|
INNER JOIN package_derivations
|
||||||
|
|
@ -400,7 +403,7 @@ ORDER BY derivations.file_name
|
||||||
"")))
|
"")))
|
||||||
|
|
||||||
(map (match-lambda
|
(map (match-lambda
|
||||||
((file_name system target builds)
|
((file_name target builds)
|
||||||
(list file_name
|
(list file_name
|
||||||
system
|
system
|
||||||
target
|
target
|
||||||
|
|
@ -408,7 +411,7 @@ ORDER BY derivations.file_name
|
||||||
(eq? #f builds))
|
(eq? #f builds))
|
||||||
#()
|
#()
|
||||||
(json-string->scm builds))))
|
(json-string->scm builds))))
|
||||||
((file_name system target)
|
((file_name target)
|
||||||
(list file_name system target)))
|
(list file_name system target)))
|
||||||
(exec-query conn
|
(exec-query conn
|
||||||
query
|
query
|
||||||
|
|
|
||||||
|
|
@ -1069,8 +1069,8 @@
|
||||||
(assq-ref query-parameters 'field)))
|
(assq-ref query-parameters 'field)))
|
||||||
(letpar&
|
(letpar&
|
||||||
((derivations
|
((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
|
(search-package-derivations-in-revision
|
||||||
conn
|
conn
|
||||||
commit-hash
|
commit-hash
|
||||||
|
|
@ -1088,11 +1088,15 @@
|
||||||
string->symbol)
|
string->symbol)
|
||||||
#:limit-results limit-results
|
#:limit-results limit-results
|
||||||
#:after-name (assq-ref query-parameters 'after_name)
|
#: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
|
(select-package-derivations-in-revision
|
||||||
conn
|
conn
|
||||||
commit-hash
|
commit-hash
|
||||||
#:systems (assq-ref query-parameters 'system)
|
#:system system
|
||||||
#:targets (assq-ref query-parameters 'target)
|
#:targets (assq-ref query-parameters 'target)
|
||||||
#:maximum-builds (assq-ref query-parameters 'maximum_builds)
|
#:maximum-builds (assq-ref query-parameters 'maximum_builds)
|
||||||
#:minimum-builds (assq-ref query-parameters 'minimum_builds)
|
#:minimum-builds (assq-ref query-parameters 'minimum_builds)
|
||||||
|
|
@ -1105,7 +1109,10 @@
|
||||||
string->symbol)
|
string->symbol)
|
||||||
#:limit-results limit-results
|
#:limit-results limit-results
|
||||||
#:after-name (assq-ref query-parameters 'after_name)
|
#:after-name (assq-ref query-parameters 'after_name)
|
||||||
#:include-builds? (member "builds" fields)))))
|
#:include-builds? (member "builds" fields))))
|
||||||
|
(or (assq-ref query-parameters 'system)
|
||||||
|
(call-with-resource-from-pool (connection-pool)
|
||||||
|
list-systems))))))
|
||||||
(build-server-urls
|
(build-server-urls
|
||||||
(call-with-resource-from-pool (connection-pool)
|
(call-with-resource-from-pool (connection-pool)
|
||||||
select-build-server-urls-by-id)))
|
select-build-server-urls-by-id)))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue