Implement version history using the derivations table

Rather than having two big tables looking at the history, just use the
derivations table as it has all the information.

This will allow deleting the package_versions_by_guix_revision_range table
which should help save time when importing revisions, and reduce the size of
the database.
This commit is contained in:
Christopher Baines 2020-03-24 20:17:18 +00:00
parent 96bf658dfc
commit 102f7a0536

View file

@ -230,27 +230,37 @@ ORDER BY version")
(exec-query (exec-query
conn conn
" "
SELECT package_version, SELECT DISTINCT
first_guix_revisions.commit AS first_guix_revision_commit, data1.package_version,
first_git_branches.datetime AS first_datetime, first_value(first_guix_revision_commit) OVER version_window AS first_guix_revision_commit,
last_guix_revisions.commit AS last_guix_revision_commit, first_value(first_datetime) OVER version_window AS first_datetime,
last_git_branches.datetime AS last_datetime last_value(last_guix_revision_commit) OVER version_window AS last_guix_revision_commit,
FROM package_versions_by_guix_revision_range last_value(last_datetime) OVER version_window AS last_datetime
INNER JOIN guix_revisions AS first_guix_revisions FROM (
ON first_guix_revision_id = first_guix_revisions.id SELECT package_version,
INNER JOIN git_branches AS first_git_branches first_guix_revisions.commit AS first_guix_revision_commit,
ON first_guix_revisions.git_repository_id = first_git_branches.git_repository_id first_git_branches.datetime AS first_datetime,
AND first_guix_revisions.commit = first_git_branches.commit last_guix_revisions.commit AS last_guix_revision_commit,
INNER JOIN guix_revisions AS last_guix_revisions last_git_branches.datetime AS last_datetime
ON last_guix_revision_id = last_guix_revisions.id FROM package_derivations_by_guix_revision_range
INNER JOIN git_branches AS last_git_branches INNER JOIN guix_revisions AS first_guix_revisions
ON last_guix_revisions.git_repository_id = last_git_branches.git_repository_id ON first_guix_revision_id = first_guix_revisions.id
AND last_guix_revisions.commit = last_git_branches.commit INNER JOIN git_branches AS first_git_branches
WHERE package_name = $1 ON first_guix_revisions.git_repository_id = first_git_branches.git_repository_id
AND package_versions_by_guix_revision_range.git_repository_id = $2 AND first_guix_revisions.commit = first_git_branches.commit
AND package_versions_by_guix_revision_range.branch_name = $3 INNER JOIN guix_revisions AS last_guix_revisions
AND first_git_branches.name = $3 ON last_guix_revision_id = last_guix_revisions.id
AND last_git_branches.name = $3 INNER JOIN git_branches AS last_git_branches
ON last_guix_revisions.git_repository_id = last_git_branches.git_repository_id
AND last_guix_revisions.commit = last_git_branches.commit
WHERE package_name = $1
AND package_derivations_by_guix_revision_range.git_repository_id = $2
AND package_derivations_by_guix_revision_range.branch_name = $3
AND first_git_branches.name = $3
AND last_git_branches.name = $3
ORDER BY first_datetime ASC, package_version DESC
) AS data1
WINDOW version_window AS (PARTITION BY package_version)
ORDER BY first_datetime DESC, package_version DESC" ORDER BY first_datetime DESC, package_version DESC"
(list package-name (list package-name
(number->string git-repository-id) (number->string git-repository-id)