aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix-data-service/model/package.scm52
1 files changed, 31 insertions, 21 deletions
diff --git a/guix-data-service/model/package.scm b/guix-data-service/model/package.scm
index f484fab..dc5cc4c 100644
--- a/guix-data-service/model/package.scm
+++ b/guix-data-service/model/package.scm
@@ -230,27 +230,37 @@ ORDER BY version")
(exec-query
conn
"
-SELECT package_version,
- first_guix_revisions.commit AS first_guix_revision_commit,
- first_git_branches.datetime AS first_datetime,
- last_guix_revisions.commit AS last_guix_revision_commit,
- last_git_branches.datetime AS last_datetime
-FROM package_versions_by_guix_revision_range
-INNER JOIN guix_revisions AS first_guix_revisions
- ON first_guix_revision_id = first_guix_revisions.id
-INNER JOIN git_branches AS first_git_branches
- ON first_guix_revisions.git_repository_id = first_git_branches.git_repository_id
- AND first_guix_revisions.commit = first_git_branches.commit
-INNER JOIN guix_revisions AS last_guix_revisions
- ON last_guix_revision_id = last_guix_revisions.id
-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_versions_by_guix_revision_range.git_repository_id = $2
-AND package_versions_by_guix_revision_range.branch_name = $3
-AND first_git_branches.name = $3
-AND last_git_branches.name = $3
+SELECT DISTINCT
+ data1.package_version,
+ first_value(first_guix_revision_commit) OVER version_window AS first_guix_revision_commit,
+ first_value(first_datetime) OVER version_window AS first_datetime,
+ last_value(last_guix_revision_commit) OVER version_window AS last_guix_revision_commit,
+ last_value(last_datetime) OVER version_window AS last_datetime
+FROM (
+ SELECT package_version,
+ first_guix_revisions.commit AS first_guix_revision_commit,
+ first_git_branches.datetime AS first_datetime,
+ last_guix_revisions.commit AS last_guix_revision_commit,
+ last_git_branches.datetime AS last_datetime
+ FROM package_derivations_by_guix_revision_range
+ INNER JOIN guix_revisions AS first_guix_revisions
+ ON first_guix_revision_id = first_guix_revisions.id
+ INNER JOIN git_branches AS first_git_branches
+ ON first_guix_revisions.git_repository_id = first_git_branches.git_repository_id
+ AND first_guix_revisions.commit = first_git_branches.commit
+ INNER JOIN guix_revisions AS last_guix_revisions
+ ON last_guix_revision_id = last_guix_revisions.id
+ 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"
(list package-name
(number->string git-repository-id)