From 68a95808677328fcd1b952e08f690d4cd05ad64e Mon Sep 17 00:00:00 2001 From: Matteo Scaramuccia Date: Mon, 8 Jul 2019 22:09:21 +0200 Subject: [PATCH 1/2] Bug #72740 Improved tests --- tests/bug_72740.phpt | 49 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/tests/bug_72740.phpt b/tests/bug_72740.phpt index f9302599..e889fccf 100644 --- a/tests/bug_72740.phpt +++ b/tests/bug_72740.phpt @@ -1,5 +1,5 @@ --TEST-- -Solr Bug #72740 - addQueryField return wrong query +Solr Bug #72740 - addPhraseField return wrong query --SKIPIF-- --FILE-- @@ -23,11 +23,36 @@ $dismaxQuery->addPhraseField( "phraseField2", 5, 1 ); $dismaxQuery->addSortField('score', SolrQuery::ORDER_DESC); $dismaxQuery->addSortField('manufacturedate_dt', SolrQuery::ORDER_DESC); +// Scenario 1: DisMax Query Parser - Adds Phrase Fields with both boost and slop. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +$queryResponse = $client->query( $dismaxQuery ); + +print_r($queryResponse->getResponse()->responseHeader->params); + +// Scenario 2: Same as Scenario 1, now including explicit query fields too. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +// - qf parameter should list each query field with a trailing ^ (no boost here). +$dismaxQuery->addQueryField('score'); +$dismaxQuery->addQueryField('manufacturedate_dt'); $queryResponse = $client->query( $dismaxQuery ); print_r($queryResponse->getResponse()->responseHeader->params); +// Scenario 3: Same as Scenario 2, now including explicit boost value for the query fields. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +// - qf parameter should list each query field with a ^ prefix for boost value. +$dismaxQuery->removeQueryField('score'); +$dismaxQuery->removeQueryField('manufacturedate_dt'); +$dismaxQuery->addQueryField('score', 3); +$dismaxQuery->addQueryField('manufacturedate_dt', 7); + +$queryResponse = $client->query( $dismaxQuery ); + +print_r($queryResponse->getResponse()->responseHeader->params); ?> --EXPECTF-- SolrObject Object @@ -39,4 +64,26 @@ SolrObject Object [sort] => score desc,manufacturedate_dt desc [version] => 2.2 [wt] => xml +) +SolrObject Object +( + [q] => *:* + [defType] => edismax + [indent] => on + [qf] => score^ manufacturedate_dt^ + [pf] => phraseField1~5^10 phraseField2~1^5 + [sort] => score desc,manufacturedate_dt desc + [version] => 2.2 + [wt] => xml +) +SolrObject Object +( + [q] => *:* + [defType] => edismax + [indent] => on + [qf] => score^3 manufacturedate_dt^7 + [pf] => phraseField1~5^10 phraseField2~1^5 + [sort] => score desc,manufacturedate_dt desc + [version] => 2.2 + [wt] => xml ) \ No newline at end of file From 320fb739062ffef0a831d542f57508b1b647394f Mon Sep 17 00:00:00 2001 From: Matteo Scaramuccia Date: Sun, 7 Jul 2019 23:18:47 +0200 Subject: [PATCH 2/2] Bug #72740 Fixes NULL byte when using addQueryField() w/o boost Fixed regression added in b1b44e0 while working on #72740 --- src/php5/solr_functions_params.c | 4 ++-- src/php7/solr_functions_params.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/php5/solr_functions_params.c b/src/php5/solr_functions_params.c index f6cc9727..bc97a5c3 100644 --- a/src/php5/solr_functions_params.c +++ b/src/php5/solr_functions_params.c @@ -713,7 +713,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr { solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); @@ -730,7 +730,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); diff --git a/src/php7/solr_functions_params.c b/src/php7/solr_functions_params.c index 584577f4..3c0af16a 100644 --- a/src/php7/solr_functions_params.c +++ b/src/php7/solr_functions_params.c @@ -700,7 +700,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr { solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); @@ -717,7 +717,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator);