From ce73ec0fd585494cf943bbaf675db44a4fab1844 Mon Sep 17 00:00:00 2001
From: Galen Charlton <gmc@esilibrary.com>
Date: Thu, 24 Oct 2013 20:42:38 +0000
Subject: [PATCH] Bug 11137: fix certain types of searches run using
 QueryParser

QueryParser was loading redundant search aliases, which in turn resulted
in certain queries involving two or more clauses joined by a Boolean
operator getting parsed in correctly.

To test:

[1] Enable QueryParser.
[2] Arrange your database so that some some bib records contain
    the keyword 'history' while a smaller subset contain
    both 'history' and 'earth'.  (The exact words used don't
    matter.)
[3] Run the following search from the OPAC global search bar:

    kw:history && kw:earth

[4] Observe that the records that are returned include *all* bibs
    in the database with the keyword 'history'.  In other words, the
    restriction  that the records must also contain 'earth' is not
    observed.
[5] Apply the patch and rerun the search.
[6] This time, the results that are returned should include only those
    that contain both 'history' and 'earth'.
[7] Verify that prove -v t/QueryParser.t passes.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
---
 Koha/QueryParser/Driver/PQF.pm |    6 ------
 t/QueryParser.t                |    4 +---
 2 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/Koha/QueryParser/Driver/PQF.pm b/Koha/QueryParser/Driver/PQF.pm
index cd3b994..8181cd3 100644
--- a/Koha/QueryParser/Driver/PQF.pm
+++ b/Koha/QueryParser/Driver/PQF.pm
@@ -111,7 +111,6 @@ sub add_bib1_field_map {
     my ($self, $class, $field, $server, $attributes) = @_;
 
     $self->add_search_field( $class => $field );
-    $self->add_search_field_alias( $class => $field => $field );
     return $self->_add_field_mapping($self->bib1_field_map, $class, $field, $server, $attributes);
 }
 
@@ -542,14 +541,9 @@ sub initialize {
                     $self->add_bib1_field_map(
                         $class => $field => $server => $bib1_mapping );
                 }
-                $self->add_search_field_alias( $class => $field =>
-                      $field_mappings->{$class}->{$field}->{'index'} );
                 foreach my $alias (
                     @{ $field_mappings->{$class}->{$field}->{'aliases'} } )
                 {
-                    next
-                      if ( $alias eq
-                        $field_mappings->{$class}->{$field}->{'index'} );
                     $self->add_search_field_alias( $class => $field => $alias );
                 }
             }
diff --git a/t/QueryParser.t b/t/QueryParser.t
index f0935ec..41782f2 100644
--- a/t/QueryParser.t
+++ b/t/QueryParser.t
@@ -44,9 +44,7 @@ my $desired_config = {
   'field_mappings' => {
     'author' => {
       'personal' => {
-        'aliases' => [
-          'personal'
-        ],
+        'aliases' => [ ],
         'bib1_mapping' => {
           'biblioserver' => {
             '1' => '1004'
-- 
1.7.10.4