Bug 19451: (QA follow-up) Replace weird subquery
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Fri, 9 Feb 2018 10:47:52 +0000 (11:47 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 12 Feb 2018 21:02:00 +0000 (18:02 -0300)
As requested, we add a JOIN and make the SELECT distinct.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Tested that no-overwrite still works as expected.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
misc/maintenance/borrowers-force-messaging-defaults.pl

index 2daa8b7..72e8c95 100755 (executable)
@@ -54,12 +54,15 @@ sub force_borrower_messaging_defaults {
         $dbh->do(q|SET FOREIGN_KEY_CHECKS = 1|);
     }
 
-    my $sql = "SELECT borrowernumber, categorycode FROM borrowers bo WHERE dateenrolled >= ?";
+    my $sql =
+q|SELECT DISTINCT bo.borrowernumber, bo.categorycode FROM borrowers bo
+LEFT JOIN borrower_message_preferences mp USING (borrowernumber)
+WHERE bo.dateenrolled >= ?|;
     if ($not_expired) {
-        $sql .= " AND dateexpiry >= NOW()"
+        $sql .= " AND bo.dateexpiry >= NOW()"
     }
     if( $no_overwrite ) {
-        $sql .= " AND (SELECT COUNT(*) FROM borrower_message_preferences mp WHERE mp.borrowernumber=bo.borrowernumber) = 0"
+        $sql .= " AND mp.borrowernumber IS NULL";
     }
     my $sth = $dbh->prepare($sql);
     $sth->execute($since);