Bug 11137: fix certain types of searches run using QueryParser
authorGalen Charlton <gmc@esilibrary.com>
Thu, 24 Oct 2013 20:42:38 +0000 (20:42 +0000)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 14 Nov 2013 15:50:50 +0000 (15:50 +0000)
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>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes test plans, all tests and QA script.
Also checked the db_dependent/Search.t tests.
Tried some other searches, all seems to be working correctly.

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
I reproduce the bug and I confirm this patch fixes it.
Without the patch, kw:history && kw:earth, I got:
  Search biblios OK 4 1 1+0 RPN @attrset Bib-1 @attr 4=6 @attr 1=1016 history
With the path, I get:
   Search biblios OK 2 1 1+0 RPN @attrset Bib-1 @and @attr 4=6 @attr 1=1016 history @attr 4=6 @attr 1=1016 earth

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Koha/QueryParser/Driver/PQF.pm
t/QueryParser.t
t/db_dependent/Search.t

index cd3b994..8181cd3 100644 (file)
@@ -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 );
                 }
             }
index f0935ec..41782f2 100644 (file)
@@ -44,9 +44,7 @@ my $desired_config = {
   'field_mappings' => {
     'author' => {
       'personal' => {
-        'aliases' => [
-          'personal'
-        ],
+        'aliases' => [ ],
         'bib1_mapping' => {
           'biblioserver' => {
             '1' => '1004'
index 66d4259..378fc2d 100644 (file)
@@ -12,7 +12,7 @@ use YAML;
 use C4::Debug;
 require C4::Context;
 
-use Test::More tests => 198;
+use Test::More tests => 200;
 use Test::MockModule;
 use MARC::Record;
 use File::Spec;