From: Mike Rylander Date: Wed, 20 Jun 2018 13:22:38 +0000 (-0400) Subject: LP#1773832: Empty deleted records can be surfaced in search results X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=e9accd82769f4ec396b7365c25579de9d8c0ff31;p=working%2FEvergreen.git LP#1773832: Empty deleted records can be surfaced in search results There are cases where we avoid checking the deleted flag of bibs as an optimization that avoids a JOIN in the search query. However, for some shapes of real-world data, particularly in upgraded instances, deleted records can slip through. This commit adds an explicit check for the flag to all search queries. Signed-off-by: Mike Rylander Signed-off-by: Daniel Pearl Signed-off-by: Jason Stephenson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm index 7110321b5a..5584326d04 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm @@ -841,8 +841,8 @@ sub toSQL { $bre_join = 'INNER JOIN biblio.record_entry bre ON m.source = bre.id AND bre.deleted'; # The above suffices for filters too when the #deleted modifier # is in use. - } elsif ($$flat_plan{uses_bre} or !$self->find_modifier('staff')) { - $bre_join = 'INNER JOIN biblio.record_entry bre ON m.source = bre.id'; + } else { + $bre_join = 'INNER JOIN biblio.record_entry bre ON m.source = bre.id AND NOT bre.deleted'; } my $desc = 'ASC'; @@ -1022,7 +1022,7 @@ sub toSQL { "AND (bre.vis_attr_vector IS NULL OR NOT ( int4range(0,268435455,'[]') @> ANY(bre.vis_attr_vector) ))". "))"; # We need bre here, regardless - $bre_join ||= 'INNER JOIN biblio.record_entry bre ON m.source = bre.id'; + $bre_join ||= 'INNER JOIN biblio.record_entry bre ON m.source = bre.id AND NOT bre.deleted'; } my $final_b_attr_test;