From 46b6b1505148e2cf5dabbd62a83a47ed30909a0c Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 21 Jan 2016 08:20:14 -0800 Subject: [PATCH] JBAS-1129 Remove custom language_filter additions 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 --- .../Application/Storage/Driver/Pg/QueryParser.pm | 52 +++++----------------- 1 file changed, 11 insertions(+), 41 deletions(-) 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 ceb6349e7d..b0d653cbf2 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 @@ -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; -- 2.11.0