Bugzilla – Attachment 30638 Details for
Bug 12647
QueryParser fails tests
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 12647: PQF QueryParser driver and unit tests fixes
Bug-12647-PQF-QueryParser-driver-and-unit-tests-fi.patch (text/plain), 7.47 KB, created by
Tomás Cohen Arazi
on 2014-08-08 18:00:20 UTC
(
hide
)
Description:
Bug 12647: PQF QueryParser driver and unit tests fixes
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi
Created:
2014-08-08 18:00:20 UTC
Size:
7.47 KB
patch
obsolete
>From c22f72e1c00e1a2996d88c8be1ac118d37e42e58 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@gmail.com> >Date: Fri, 8 Aug 2014 14:48:59 -0300 >Subject: [PATCH] Bug 12647: PQF QueryParser driver and unit tests fixes > >Due to Perl 5.18, QueryParser the default search class is no longer >'keyword' (see bug 12738), and needs to be set manually. This patch >adds a line that does that. The problem that gets fixed is with test >'super simple keyword query'. > >The rest of the non-deterministically failing tests are due to the same >problem, keys returning differently sorted keys from hashes. > >So this patch sorts keys in the step that concatenates attributes when building >the PQF queries (and tests get adjusted to match the now deterministic result). > >I did that (sorting there) under Jared's recommendation. Hopefuly he will step >in and comment/fix any mistake I made. My main concern was a possible loss >in performance. That we agreed it is almost void, because of the tiny size >of the hash. > >Sponsored-by: Universidad Nacional de Cordoba >--- > Koha/QueryParser/Driver/PQF/Util.pm | 5 ++- > t/QueryParser.t | 70 +++++++++++++++++++++++++++++-------- > 2 files changed, 58 insertions(+), 17 deletions(-) > >diff --git a/Koha/QueryParser/Driver/PQF/Util.pm b/Koha/QueryParser/Driver/PQF/Util.pm >index 5d9ed71..af3c81b 100644 >--- a/Koha/QueryParser/Driver/PQF/Util.pm >+++ b/Koha/QueryParser/Driver/PQF/Util.pm >@@ -41,11 +41,10 @@ Convert a hashref with a Bib-1 mapping into its PQF string representation. > sub attributes_to_attr_string { > my ($attributes) = @_; > my $attr_string = ''; >- my $key; > my $value; >- while (($key, $value) = each(%$attributes)) { >+ foreach my $key ( sort keys %{$attributes} ) { > next unless looks_like_number($key); >- $attr_string .= ' @attr ' . $key . '=' . $value . ' '; >+ $attr_string .= ' @attr ' . $key . '=' . $attributes->{ $key } . ' '; > } > $attr_string =~ s/^\s*//; > $attr_string =~ s/\s*$//; >diff --git a/t/QueryParser.t b/t/QueryParser.t >index aa1e7fd..7b69430 100644 >--- a/t/QueryParser.t >+++ b/t/QueryParser.t >@@ -19,20 +19,62 @@ ok($QParser->load_config('./etc/searchengine/queryparser.yaml'), 'Loaded QP conf > is($QParser->search_class_count, 4, 'Initialized 4 search classes'); > is (scalar(@{$QParser->search_fields()->{'keyword'}}), 111, "Correct number of search fields for 'keyword' class"); > >-is($QParser->target_syntax('biblioserver', 'smith'), '@or @or @attr 1=1016 @attr 4=6 "smith" @attr 9=20 @attr 2=102 @attr 4=6 "smith" @attr 9=34 @attr 2=102 @attr 4=6 "smith"', 'super simple keyword query'); >-is($QParser->target_syntax('biblioserver', 'au:smith'), '@attr 1=1003 @attr 4=6 "smith"', 'simple author query'); >-is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'), '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query'); >-is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'), '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query'); >-is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'), '@attr 1=4 @attr 9=20 @attr 2=102 @attr 4=6 "smith"', 'relevance-bumped query'); >-is($QParser->target_syntax('biblioserver', 'au:smith && johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"', 'query with boolean &&'); >-is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&'); >-is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 @attr 2=2 "2008"', 'keyword search with pubdate limited to -2008'); >-is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 @attr 2=4 "2008"', 'keyword search with pubdate limited to 2008-'); >-is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 "2008"', 'keyword search with pubdate limited to 2008'); >-is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 4=4 @attr 1=31 "1980" @attr 4=4 @attr 1=31 "2008"', 'keyword search with pubdate limited to 1980, 2008'); >-is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'), '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"', 'keyword search sorted by acqdate descending'); >-is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'}, 'personal', 'retrieve field by attr'); >-is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'}, 'personal', 'retrieve field by attrstring'); >+# Set keyword search as the default >+$QParser->default_search_class('keyword'); >+ >+my $kwd_search = q/@attr 1=1016 @attr 4=6/; >+my $weight1 = q/@attr 2=102 @attr 9=20 @attr 4=6/; >+my $weight2 = q/@attr 2=102 @attr 9=34 @attr 4=6/; >+ >+like( $QParser->target_syntax('biblioserver', 'smith'), >+ qr/\@or \@or $kwd_search "smith" ($weight1 "smith" $weight2 "smith"|$weight2 "smith" $weight1 "smith")/, >+ 'super simple keyword query'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith'), >+ '@attr 1=1003 @attr 4=6 "smith"', 'simple author query'); >+ >+is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'), >+ '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query'); >+ >+is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'), >+ '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query'); >+ >+is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'), >+ '@attr 1=4 @attr 2=102 @attr 9=20 @attr 4=6 "smith"', >+ 'relevance-bumped query'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith && johnson'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"', >+ 'query with boolean &&'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=2 "2008"', >+ 'keyword search with pubdate limited to -2008'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=4 "2008"', >+ 'keyword search with pubdate limited to 2008-'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 "2008"', >+ 'keyword search with pubdate limited to 2008'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'), >+ '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 1=31 @attr 4=4 "1980" @attr 1=31 @attr 4=4 "2008"', >+ 'keyword search with pubdate limited to 1980, 2008'); >+ >+is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'), >+ '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"', >+ 'keyword search sorted by acqdate descending'); >+ >+is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'}, >+ 'personal', 'retrieve field by attr'); >+ >+is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'}, >+ 'personal', 'retrieve field by attrstring'); > > is ($QParser->clear_all_mappings, $QParser, 'clear all mappings returns self'); > is ($QParser->clear_all_configuration, $QParser, 'clear all configuration returns self'); >-- >1.9.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 12647
:
30638
|
30666
|
30671