Use LEFT JOIN to use PostgreSQL join removal when possible
authorVincent Tondellier <tonton+hg@team1664.org>
Sun, 14 Feb 2016 20:15:25 +0100
changeset 94 c5fcb00c7261
parent 93 31013a09b483
child 95 fcf3a68002e6
Use LEFT JOIN to use PostgreSQL join removal when possible
lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm
lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm
--- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm	Sun Feb 14 20:12:49 2016 +0100
+++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm	Sun Feb 14 20:15:25 2016 +0100
@@ -61,8 +61,8 @@
     my $count = $self->db->query("
         SELECT count(distinct(crash_group_id)) AS total
         FROM crash_reports
-        JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
-        JOIN products AS product ON crash_reports.product_id = product.id
+        LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
+        LEFT JOIN products AS product ON crash_reports.product_id = product.id
         JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
         $where
         ", @values)->hash;
@@ -79,10 +79,11 @@
                     min(version) AS first_version,
                     max(version) AS last_version,
                     string_agg(distinct(name), ', ') AS product_names,
+                    string_agg(distinct(main_module), ', ') AS program_names,
                     count(*) AS crash_count
                FROM crash_reports
-               JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
-               JOIN products AS product ON crash_reports.product_id = product.id
+               LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
+               LEFT JOIN products AS product ON crash_reports.product_id = product.id
                JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
                $where
                GROUP BY crash_group_id ) AS group_by_count
--- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm	Sun Feb 14 20:12:49 2016 +0100
+++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm	Sun Feb 14 20:15:25 2016 +0100
@@ -65,9 +65,9 @@
 
     my $count = $self->db->query("
         SELECT count(crash_reports.id) AS total FROM crash_reports
-        JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
-        JOIN products AS product ON crash_reports.product_id = product.id
-        JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
+        LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
+        LEFT JOIN products AS product ON crash_reports.product_id = product.id
+        LEFT JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
         $where
         ", @values)->hash;
 
@@ -88,9 +88,9 @@
                 crash_user.os AS u_os, crash_user.cpu_arch AS u_cpu_arch, crash_user.cpu_count AS u_cpu_count, crash_user.extra_info AS u_extra_info,
                 $extra_columns
         FROM crash_reports
-        JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
-        JOIN products AS product ON crash_reports.product_id = product.id
-        JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
+        LEFT JOIN crash_users AS crash_user ON crash_reports.crash_user_id = crash_user.id
+        LEFT JOIN products AS product ON crash_reports.product_id = product.id
+        LEFT JOIN crash_groups AS crash_group ON crash_reports.crash_group_id = crash_group.id
         $where
         ORDER BY crash_time DESC
         OFFSET (?) ROWS