Insert derivation inputs in chunks

To avoid one massive query.
This commit is contained in:
Christopher Baines 2021-10-03 12:56:23 +01:00
parent d5ab67000e
commit 857b4e32d5

View file

@ -1354,6 +1354,8 @@ WHERE derivation_source_files.store_path = $1"
derivations))) derivations)))
(unless (null? data) (unless (null? data)
(for-each
(lambda (chunk)
(exec-query (exec-query
conn conn
(string-append (string-append
@ -1361,13 +1363,14 @@ WHERE derivation_source_files.store_path = $1"
INSERT INTO derivation_inputs (derivation_id, derivation_output_id) INSERT INTO derivation_inputs (derivation_id, derivation_output_id)
SELECT vals.derivation_id, derivation_outputs.id SELECT vals.derivation_id, derivation_outputs.id
FROM (VALUES " FROM (VALUES "
(string-join data ", ") (string-join chunk ", ")
") AS vals (derivation_id, file_name, output_name) ") AS vals (derivation_id, file_name, output_name)
INNER JOIN derivations INNER JOIN derivations
ON derivations.file_name = vals.file_name ON derivations.file_name = vals.file_name
INNER JOIN derivation_outputs INNER JOIN derivation_outputs
ON derivation_outputs.derivation_id = derivations.id ON derivation_outputs.derivation_id = derivations.id
AND vals.output_name = derivation_outputs.name"))))) AND vals.output_name = derivation_outputs.name")))
(chunk! data 1000)))))
(define (select-from-derivation-source-files store-paths) (define (select-from-derivation-source-files store-paths)
(string-append (string-append