Improve the package derivation by guix revision range insert queries

This commit is contained in:
Christopher Baines 2022-05-26 00:23:56 +01:00
parent e0f5ad3f51
commit 786a5fa041

View file

@ -83,14 +83,11 @@ INNER JOIN (
INNER JOIN guix_revisions INNER JOIN guix_revisions
ON guix_revisions.git_repository_id = $1 ON guix_revisions.git_repository_id = $1
AND revision_packages.revision_id = guix_revisions.id AND revision_packages.revision_id = guix_revisions.id
INNER JOIN git_branches
ON git_branches.id = $2
INNER JOIN git_commits INNER JOIN git_commits
ON git_branches.id = git_commits.git_branch_id ON git_commits.git_branch_id = $2
AND guix_revisions.commit = git_commits.commit AND guix_revisions.commit = git_commits.commit
WINDOW package_version AS ( WINDOW package_version AS (
PARTITION BY git_branches.git_repository_id, git_branches.name, PARTITION BY packages.name, packages.version, revision_packages.derivation_id
packages.name, packages.version, revision_packages.derivation_id
ORDER BY git_commits.datetime ORDER BY git_commits.datetime
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) )
@ -126,7 +123,7 @@ PARTITION OF package_derivations_by_guix_revision_range FOR VALUES IN ("
" "
INSERT INTO package_derivations_by_guix_revision_range INSERT INTO package_derivations_by_guix_revision_range
SELECT DISTINCT SELECT DISTINCT
git_branches.id, $2,
packages.name AS package_name, packages.name AS package_name,
packages.version AS package_version, packages.version AS package_version,
revision_packages.derivation_id AS derivation_id, revision_packages.derivation_id AS derivation_id,
@ -152,11 +149,8 @@ INNER JOIN (
INNER JOIN guix_revisions INNER JOIN guix_revisions
ON guix_revisions.git_repository_id = $1 ON guix_revisions.git_repository_id = $1
AND revision_packages.revision_id = guix_revisions.id AND revision_packages.revision_id = guix_revisions.id
INNER JOIN git_branches
ON git_branches.name = $2
AND git_branches.git_repository_id = $1
INNER JOIN git_commits INNER JOIN git_commits
ON git_branches.id = git_commits.git_branch_id ON git_commits.git_branch_id = $2
AND guix_revisions.commit = git_commits.commit AND guix_revisions.commit = git_commits.commit
WHERE revision_packages.derivation_id IN ( WHERE revision_packages.derivation_id IN (
SELECT package_derivations.derivation_id SELECT package_derivations.derivation_id
@ -166,19 +160,32 @@ WHERE revision_packages.derivation_id IN (
WHERE revision_id = $3 WHERE revision_id = $3
) )
WINDOW package_version AS ( WINDOW package_version AS (
PARTITION BY git_branches.git_repository_id, git_branches.name, PARTITION BY packages.name, packages.version, revision_packages.derivation_id
packages.name, packages.version, revision_packages.derivation_id
ORDER BY git_commits.datetime ORDER BY git_commits.datetime
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) )
ORDER BY packages.name, packages.version") ORDER BY packages.name, packages.version")
(exec-query (let ((git-branch-id (git-branch-for-repository-and-name conn
conn (string->number
query git-repository-id)
(list git-repository-id branch-name)))
branch-name (exec-query
guix-revision-id))) conn
(string-append
"
CREATE TABLE IF NOT EXISTS package_derivations_by_guix_revision_range_git_branch_"
(number->string git-branch-id) "
PARTITION OF package_derivations_by_guix_revision_range FOR VALUES IN ("
(number->string git-branch-id)
")"))
(exec-query
conn
query
(list git-repository-id
(number->string git-branch-id)
guix-revision-id))))
(define (update-package-derivations-table conn (define (update-package-derivations-table conn
git-repository-id git-repository-id