guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/03: Change select-build procedures to avoid join issues


From: Christopher Baines
Subject: 01/03: Change select-build procedures to avoid join issues
Date: Wed, 1 Jul 2020 18:09:59 -0400 (EDT)

cbaines pushed a commit to branch master
in repository data-service.

commit 1e2fefa7cf796b6a74f729b27805fbf140592ca7
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Wed Jul 1 19:42:42 2020 +0100

    Change select-build procedures to avoid join issues
    
    The number of build_status rows coming back was being amplified by the INNER
    JOIN, using a subquery guards against this.
---
 guix-data-service/model/build.scm | 40 +++++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/guix-data-service/model/build.scm 
b/guix-data-service/model/build.scm
index 9e81611..b9ba241 100644
--- a/guix-data-service/model/build.scm
+++ b/guix-data-service/model/build.scm
@@ -227,18 +227,20 @@ ORDER BY latest_build_status.timestamp DESC")
     "
 SELECT build_servers.url,
        builds.derivation_file_name,
-       JSON_AGG(
-         json_build_object(
-           'timestamp', build_status.timestamp,
-           'status', build_status.status
-         )
-         ORDER BY build_status.timestamp
+       (
+         SELECT JSON_AGG(
+                  json_build_object(
+                    'timestamp', build_status.timestamp,
+                    'status', build_status.status
+                  )
+                  ORDER BY build_status.timestamp
+                )
+         FROM build_status
+         WHERE build_status.build_id = builds.id
        ) AS statuses
 FROM builds
 INNER JOIN build_servers
   ON build_servers.id = builds.build_server_id
-INNER JOIN build_status
-  ON builds.id = build_status.build_id
 INNER JOIN derivations_by_output_details_set
   ON builds.derivation_output_details_set_id =
      derivations_by_output_details_set.derivation_output_details_set_id
@@ -246,7 +248,7 @@ INNER JOIN derivations
   ON derivations.id = derivations_by_output_details_set.derivation_id
 WHERE build_server_id = $1 AND
       builds.build_server_build_id = $2
-GROUP BY build_servers.url, builds.derivation_file_name")
+GROUP BY builds.id, build_servers.url, builds.derivation_file_name")
 
   (match (exec-query conn
                      query
@@ -265,18 +267,20 @@ GROUP BY build_servers.url, builds.derivation_file_name")
     "
 SELECT build_servers.url,
        builds.derivation_file_name,
-       JSON_AGG(
-         json_build_object(
-           'timestamp', build_status.timestamp,
-           'status', build_status.status
-         )
-         ORDER BY build_status.timestamp
+       (
+         SELECT JSON_AGG(
+                  json_build_object(
+                    'timestamp', build_status.timestamp,
+                    'status', build_status.status
+                  )
+                  ORDER BY build_status.timestamp
+                )
+         FROM build_status
+         WHERE build_status.build_id = builds.id
        ) AS statuses
 FROM builds
 INNER JOIN build_servers
   ON build_servers.id = builds.build_server_id
-INNER JOIN build_status
-  ON builds.id = build_status.build_id
 INNER JOIN derivations_by_output_details_set
   ON builds.derivation_output_details_set_id =
      derivations_by_output_details_set.derivation_output_details_set_id
@@ -284,7 +288,7 @@ INNER JOIN derivations
   ON derivations.id = derivations_by_output_details_set.derivation_id
 WHERE build_server_id = $1 AND
       derivations.file_name = $2
-GROUP BY build_servers.url, builds.derivation_file_name")
+GROUP BY builds.id, build_servers.url, builds.derivation_file_name")
 
   (match (exec-query conn
                      query



reply via email to

[Prev in Thread] Current Thread [Next in Thread]