JBAS-1129 Remove custom language_filter additions
authorBill Erickson <berickxx@gmail.com>
Thu, 21 Jan 2016 16:20:14 +0000 (08:20 -0800)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
Custom language filter is unnecessary, since we already have coded value
map for item_lang.  Removing the code allows language and other
CCVM-filtered queries to complete.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm

index ceb6349..b0d653c 100644 (file)
@@ -1,6 +1,5 @@
 use strict;
 use warnings;
-use Switch;
 
 package OpenILS::Application::Storage::Driver::Pg::QueryParser;
 use OpenILS::Application::Storage::QueryParser;
@@ -101,6 +100,7 @@ sub quote_phrase_value {
 
     $value =~ s/^[*\^]//   if $left_anchored;
     $value =~ s/[*\$]$//  if $right_anchored;
+    $value = quotemeta($value);
     $value = '^' . $value if $left_anchored eq '^';
     $value = "$value\$"   if $right_anchored eq '$';
     $value = '[[:<:]]' . $value if $left_wb && !$left_anchored;
@@ -835,7 +835,6 @@ sub toSQL {
 
     my $flat_plan = $self->flatten;
 
-
     # generate the relevance ranking
     my $rel = '1'; # Default to something simple in case rank_list is empty.
     if (@{$$flat_plan{rank_list}}) {
@@ -1174,10 +1173,6 @@ SELECT  id,
   SELECT NULL,NULL,NULL,COUNT(*),COUNT(*),COUNT(*),0,0,NULL,NULL FROM w;
 SQL
 
-open SQLTXT, ">", "/tmp/sql.txt";
-print SQLTXT $sql;
-close SQLTXT;
-
     warn $sql if $self->QueryParser->debug;
     return $sql;
 
@@ -1209,7 +1204,6 @@ sub flatten {
     my $uses_bre = 0;
     my $uses_mrd = 0;
     my $uses_mrv = 0;
-    my $uses_mlf = 0;
 
     my @rank_list;
     for my $node ( @{$self->query_nodes} ) {
@@ -1362,13 +1356,10 @@ sub flatten {
                     $where .= " AND ${talias}.value ilike xml_encode_special_chars(search_normalize(";
                     my $phrase_list;
                     for my $atom (@{$node->only_real_atoms}) {
-#                       my $content = $atom->{content};
                         my $content = ref($atom) ? $atom->{content} : $atom;
                         $content =~ s/^\^//;
                         $content =~ s/\$$//;
                         $phrase_list .= "$content ";
-#                       next unless $atom->{content} && $atom->{content} =~ /(^\^|\$$)/;
-#                       $where .= " AND ${talias}.value ~* search_normalize(".$self->QueryParser->quote_phrase_value($atom->{content}).")";
                     }
                     $where .= $self->QueryParser->quote_phrase_value($phrase_list).'))';
                 }
@@ -1432,7 +1423,6 @@ sub flatten {
                 $uses_bre = $$subnode{uses_bre};
                 $uses_mrd = $$subnode{uses_mrd};
                 $uses_mrv = $$subnode{uses_mrv};
-                $uses_mlf = $$subnode{uses_mlf};
             }
         } else {
 
@@ -1489,31 +1479,16 @@ sub flatten {
     my @dlist = ();
     my $common = 0;
     # for each dynamic filter, build more of the WHERE clause
-
     for my $filter (@{$self->filters}) {
         my $NOT = $filter->negate ? 'NOT ' : '';
         if (grep { $_ eq $filter->name } @{ $self->QueryParser->dynamic_filters }) {
 
-            my @fargs = @{$filter->args};
             my $fname = $filter->name;
             $fname = 'item_lang' if $fname eq 'language'; #XXX filter aliases 
 
             warn "flatten(): processing dynamic filter ". $filter->name ."\n"
                 if $self->QueryParser->debug;
 
-            if ($fname eq 'item_lang')
-            {
-                $where .= "$NOT( " . 'mlf.value @@ ' . "\'" . join('|', @fargs) . '\'::tsquery)';
-                $uses_mlf = 1;
-            } else {
-                $where .= sprintf(
-                    "${NOT}COALESCE((mrd.attrs->'%s') IN (%s), false)", $fname, 
-                    join(',', map { $self->QueryParser->quote_value($_) } @fargs));
-            }
-
-            warn "flatten(): filter where => $where\n"
-                if $self->QueryParser->debug;
-
             my $vlist_query;
             ($vlist_query, $common) = $self->dynamic_filter_compile( $fname, $filter->args, $filter->negate );
 
@@ -1694,18 +1669,15 @@ sub flatten {
                     my $browseType = shift @{$filter->args};
                     my $entry = int(shift @{$filter->args});
                     my $fields = join(",", map(int, @{$filter->args}));
-                    my $defMap;
-                    #Set the correct table name based on the browse search type
-                    switch ($browseType) {
-                        case "title" { $defMap = "browse_title_entry_def_map" }
-                        case "author" { $defMap = "browse_author_entry_def_map" }
-                        case "subject" { $defMap = "browse_subject_entry_def_map" }
-                        case "series" { $defMap = "browse_series_entry_def_map" }
-                        # XXX I don't know where or why 'identifier#' is being inserted, but it seems harmless
-                        case "identifier#id|bibcn" { $defMap = "browse_call_number_entry_def_map" }
-                        # Default to title
-                        else { $defMap = "browse_title_entry_def_map" }
-                    }
+
+                    $browseType ||= "title";
+                    $browseType = "call_number"
+                        if $browseType eq "identifier#id|bibcn";
+
+                    $browseType = "title" unless
+                        $browseType =~ /title|author|subject|series|call_number/;
+
+                    my $defMap = "browse_${browseType}_entry_def_map";
                     $from .= "\n" . $spc x 3 . sprintf("INNER JOIN metabib.$defMap mbedm ON (mbedm.source = m.source AND mbedm.entry = %d AND mbedm.def IN (%s))", $entry, $fields);
                 }
             } elsif ($filter->name eq 'edit_date' or $filter->name eq 'create_date') {
@@ -1788,8 +1760,7 @@ sub flatten {
         vis_filter => \%vis_filter,
         uses_bre => $uses_bre,
         uses_mrv => $uses_mrv,
-        uses_mrd => $uses_mrd,
-        uses_mlf => $uses_mlf
+        uses_mrd => $uses_mrd
     };
 }
 
@@ -1924,7 +1895,6 @@ sub buildSQL {
 
 #-------------------------------
 package OpenILS::Application::Storage::Driver::Pg::QueryParser::query_plan::node;
-use OpenILS::Application::Storage::QueryParser;
 use base 'QueryParser::query_plan::node';
 use List::MoreUtils qw/uniq/;
 use Data::Dumper;