From: Mike Rylander Date: Thu, 29 Dec 2011 16:36:20 +0000 (-0500) Subject: Make last-wins true for facets, filters and modifiers -- arg!; Parameterized values... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=658f1c4fdae4509294aa06aa71741f714d50d2da;p=working%2FEvergreen.git Make last-wins true for facets, filters and modifiers -- arg!; Parameterized values win in the staged-search QP wrapper Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm index a5cb550b2f..9c2c942d87 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm @@ -3158,28 +3158,32 @@ sub query_parser_fts_wrapper { my $base_plan = $parser->new( query => $base_query )->parse; - $query = "preferred_language($args{preferred_language}) $query" + $query = "$query preferred_language($args{preferred_language})" if ($args{preferred_language} and !$base_plan->parse_tree->find_filter('preferred_language')); - $query = "preferred_language_weight($args{preferred_language_weight}) $query" + $query = "$query preferred_language_weight($args{preferred_language_weight})" if ($args{preferred_language_weight} and !$base_plan->parse_tree->find_filter('preferred_language_weight') and !$base_plan->parse_tree->find_filter('preferred_language_multiplier')); - $query = "estimation_strategy($args{estimation_strategy}) $query" if ($args{estimation_strategy}); - $query = "site($args{org_unit}) $query" if ($args{org_unit}); - $query = "depth($args{depth}) $query" if (defined($args{depth})); - $query = "sort($args{sort}) $query" if ($args{sort}); - $query = "limit($args{limit}) $query" if ($args{limit}); - $query = "core_limit($args{core_limit}) $query" if ($args{core_limit}); - $query = "skip_check($args{skip_check}) $query" if ($args{skip_check}); - $query = "superpage($args{superpage}) $query" if ($args{superpage}); - $query = "offset($args{offset}) $query" if ($args{offset}); - $query = "#metarecord $query" if ($self->api_name =~ /metabib/); - $query = "#available $query" if ($args{available}); - $query = "#descending $query" if ($args{sort_dir} && $args{sort_dir} =~ /^d/i); - $query = "#staff $query" if ($self->api_name =~ /staff/); - $query = "before($args{before}) $query" if (defined($args{before}) and $args{before} =~ /^\d+$/); - $query = "after($args{after}) $query" if (defined($args{after}) and $args{after} =~ /^\d+$/); - $query = "during($args{during}) $query" if (defined($args{during}) and $args{during} =~ /^\d+$/); - $query = "between($args{between}[0],$args{between}[1]) $query" + + # we add these to the end of the query (last-wins) because in wrapper mode we want to retain the behaviour + # of separately specified options taking precidenc -- IOW, the user should not be able to cause a change in, + # say, superpage size by adjusting the query string. + $query = "$query estimation_strategy($args{estimation_strategy})" if ($args{estimation_strategy}); + $query = "$query site($args{org_unit})" if ($args{org_unit}); + $query = "$query depth($args{depth})" if (defined($args{depth})); + $query = "$query sort($args{sort})" if ($args{sort}); + $query = "$query limit($args{limit})" if ($args{limit}); + $query = "$query core_limit($args{core_limit})" if ($args{core_limit}); + $query = "$query skip_check($args{skip_check})" if ($args{skip_check}); + $query = "$query superpage($args{superpage})" if ($args{superpage}); + $query = "$query offset($args{offset})" if ($args{offset}); + $query = "$query #metarecord" if ($self->api_name =~ /metabib/); + $query = "$query #available" if ($args{available}); + $query = "$query #descending" if ($args{sort_dir} && $args{sort_dir} =~ /^d/i); + $query = "$query #staff" if ($self->api_name =~ /staff/); + $query = "$query before($args{before})" if (defined($args{before}) and $args{before} =~ /^\d+$/); + $query = "$query after($args{after})" if (defined($args{after}) and $args{after} =~ /^\d+$/); + $query = "$query during($args{during})" if (defined($args{during}) and $args{during} =~ /^\d+$/); + $query = "$query between($args{between}[0],$args{between}[1])" if ( ref($args{between}) and @{$args{between}} == 2 and $args{between}[0] =~ /^\d+$/ and $args{between}[1] =~ /^\d+$/ ); @@ -3202,7 +3206,7 @@ sub query_parser_fts_wrapper { next if (@filter_list == 0); my $filter_string = join ',', @filter_list; - $query = "$filter($filter_string) $query"; + $query = "$query $filter($filter_string)"; } } diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/QueryParser.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/QueryParser.pm index dc4cfef896..1685323a37 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/QueryParser.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/QueryParser.pm @@ -915,7 +915,7 @@ sub add_modifier { my $modifier = shift; $self->{modifiers} ||= []; - return $self if (grep {$$_ eq $$modifier} @{$self->{modifiers}}); + $self->{modifiers} = [ grep {$_->name ne $modifier->name} @{$self->{modifiers}} ]; push(@{$self->{modifiers}}, $modifier); @@ -933,7 +933,7 @@ sub add_facet { my $facet = shift; $self->{facets} ||= []; - return $self if (grep {$_->name eq $facet->name} @{$self->{facets}}); + $self->{facets} = [ grep {$_->name ne $facet->name} @{$self->{facets}} ]; push(@{$self->{facets}}, $facet); @@ -951,7 +951,7 @@ sub add_filter { my $filter = shift; $self->{filters} ||= []; - return $self if (grep {$_->name eq $filter->name} @{$self->{filters}}); + $self->{filters} = [ grep {$_->name ne $filter->name} @{$self->{filters}} ]; push(@{$self->{filters}}, $filter); @@ -1195,13 +1195,19 @@ sub new { my $pkg = shift; $pkg = ref($pkg) || $pkg; my $modifier = shift; + my $negate = shift; - return bless \$modifier => $pkg; + return bless { name => $modifier, negate => $negate } => $pkg; } sub name { my $self = shift; - return $$self; + return $self->{name}; +} + +sub negate { + my $self = shift; + return $self->{negate}; } 1;