LP#1745462: guard against scanning entire authority table
authorGalen Charlton <gmc@equinoxinitiative.org>
Thu, 25 Jan 2018 19:40:47 +0000 (14:40 -0500)
committerChris Sharp <csharp@georgialibraries.org>
Wed, 11 Jul 2018 18:29:20 +0000 (14:29 -0400)
This patch ensures that if, for whatever reason, a MARC editor headings
validation action includes a field whose subfield values are empty, it
ignores any cases where the normalized heading works out to NULL or the
empty string. Otherwise, the database can be asked to fetch the IDs
of most/all records in the database, and open-ils.cstore backend can be
asked to store the entire result set in memory.

To test
-------
[0] Ensure that statement logging is turned on in the PostgreSQL database.
[1] In the web staff client, create a new bib. Ensure that at least one of the
    authority-controlled fields has no subfield values.
[2] Hit the Validate button.
[3] Note that the following query is logged by the database:

SELECT "are".id AS "id" FROM authority.record_entry AS "are"
WHERE "are".control_set = '1'
AND "are".deleted = 'f' AND "are".simple_heading IS NOT NULL;

[4] Apply the patch and repeat steps 1 and 2. This time, note that
    no such query is recorded.
[5] Verify that validating headings that are not empty does continue
    to work.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Authority.pm

index a20dfb1..2e90ae2 100644 (file)
@@ -73,6 +73,10 @@ sub search_authority_by_simple_normalize_heading {
     my $e = new_editor();
     my $norm_heading = $e->json_query($norm_heading_query)->[0]->{'authority.simple_normalize_heading'};
 
+    unless (defined($norm_heading) && $norm_heading != '') {
+        return OpenILS::Event->new('BAD_PARAMS', note => 'Heading normalized to null or empty string');
+    }
+
     my $query = {
         select => { are => ['id'] },
         from   => 'are',