1 /*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | http://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: |
14 | Israel Ekpo <iekpo@php.net> |
15 | Omar Shaban <omars@php.net> |
16 +----------------------------------------------------------------------+
17 */
18
19 #include "php_solr.h"
20
21 /* extern function_entry; */
22
23 zend_class_entry *solr_ce_SolrDixMaxQuery;
24
25 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_zero_arg_info, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 0)
26 ZEND_END_ARG_INFO()
27
28 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_addQueryField_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
29 ZEND_ARG_INFO(0, field)
30 ZEND_ARG_INFO(0, boost)
31 ZEND_END_ARG_INFO()
32
33 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery__construct_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 0)
34 ZEND_ARG_INFO(0, q)
35 ZEND_END_ARG_INFO()
36
37 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery__queryAlt_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
38 ZEND_ARG_INFO(0, q)
39 ZEND_END_ARG_INFO()
40
41 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_remove_field_arg, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
42 ZEND_ARG_INFO(0, field)
43 ZEND_END_ARG_INFO()
44
45 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_addPhraseField_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 2)
46 ZEND_ARG_INFO(0, field)
47 ZEND_ARG_INFO(0, boost)
48 ZEND_ARG_INFO(0, slop)
49 ZEND_END_ARG_INFO()
50
51 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_addBoostQuery_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 2)
52 ZEND_ARG_INFO(0, field)
53 ZEND_ARG_INFO(0, value)
54 ZEND_ARG_INFO(0, boost)
55 ZEND_END_ARG_INFO()
56
57 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setPhraseSlop_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
58 ZEND_ARG_INFO(0, slop)
59 ZEND_END_ARG_INFO()
60
61 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setBoostFunction_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
62 ZEND_ARG_INFO(0, function)
63 ZEND_END_ARG_INFO()
64
65 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setMinimumMatch_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
66 ZEND_ARG_INFO(0, value)
67 ZEND_END_ARG_INFO()
68
69 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setTieBreaker_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
70 ZEND_ARG_INFO(0, tieBreaker)
71 ZEND_END_ARG_INFO()
72
73 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setFields_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
74 ZEND_ARG_INFO(0, fields)
75 ZEND_END_ARG_INFO()
76
77 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_uf_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
78 ZEND_ARG_INFO(0, field)
79 ZEND_END_ARG_INFO()
80
81 ZEND_BEGIN_ARG_INFO_EX(SolrDisMaxQuery_setufs_args, SOLR_ARG_PASS_REMAINING_BY_REF_FALSE, SOLR_METHOD_RETURN_REFERENCE_FALSE, 1)
82 ZEND_ARG_INFO(0, fields)
83 ZEND_END_ARG_INFO()
84
85 static zend_function_entry solr_dismax_query_methods[] = {
86 PHP_ME(SolrDisMaxQuery, __construct, SolrDisMaxQuery__construct_args, ZEND_ACC_PUBLIC)
87 PHP_ME(SolrDisMaxQuery, setQueryAlt, SolrDisMaxQuery__queryAlt_args, ZEND_ACC_PUBLIC)
88
89 PHP_ME(SolrDisMaxQuery, addQueryField, SolrDisMaxQuery_addQueryField_args, ZEND_ACC_PUBLIC)
90 PHP_ME(SolrDisMaxQuery, removeQueryField, SolrDisMaxQuery_remove_field_arg, ZEND_ACC_PUBLIC)
91
92 PHP_ME(SolrDisMaxQuery, addPhraseField, SolrDisMaxQuery_addPhraseField_args, ZEND_ACC_PUBLIC)
93 PHP_ME(SolrDisMaxQuery, removePhraseField, SolrDisMaxQuery_remove_field_arg, ZEND_ACC_PUBLIC)
94 PHP_ME(SolrDisMaxQuery, setPhraseFields, SolrDisMaxQuery_setFields_args, ZEND_ACC_PUBLIC)
95
96
97 PHP_ME(SolrDisMaxQuery, setPhraseSlop, SolrDisMaxQuery_setPhraseSlop_args, ZEND_ACC_PUBLIC)
98 PHP_ME(SolrDisMaxQuery, setQueryPhraseSlop, SolrDisMaxQuery_setPhraseSlop_args, ZEND_ACC_PUBLIC)
99 PHP_ME(SolrDisMaxQuery, setBoostQuery, SolrDisMaxQuery__queryAlt_args , ZEND_ACC_PUBLIC)
100 PHP_ME(SolrDisMaxQuery, addBoostQuery, SolrDisMaxQuery_addBoostQuery_args, ZEND_ACC_PUBLIC)
101 PHP_ME(SolrDisMaxQuery, removeBoostQuery, SolrDisMaxQuery_remove_field_arg, ZEND_ACC_PUBLIC)
102 PHP_ME(SolrDisMaxQuery, setBoostFunction, SolrDisMaxQuery_setBoostFunction_args, ZEND_ACC_PUBLIC)
103 PHP_ME(SolrDisMaxQuery, setMinimumMatch, SolrDisMaxQuery_setMinimumMatch_args, ZEND_ACC_PUBLIC)
104 PHP_ME(SolrDisMaxQuery, setTieBreaker, SolrDisMaxQuery_setTieBreaker_args, ZEND_ACC_PUBLIC)
105
106 PHP_ME(SolrDisMaxQuery, useDisMaxQueryParser, SolrDisMaxQuery_zero_arg_info, ZEND_ACC_PUBLIC)
107 PHP_ME(SolrDisMaxQuery, useEDisMaxQueryParser, SolrDisMaxQuery_zero_arg_info, ZEND_ACC_PUBLIC)
108
109 PHP_ME(SolrDisMaxQuery, setBigramPhraseFields, SolrDisMaxQuery_setFields_args, ZEND_ACC_PUBLIC)
110 PHP_ME(SolrDisMaxQuery, addBigramPhraseField, SolrDisMaxQuery_addPhraseField_args, ZEND_ACC_PUBLIC)
111 PHP_ME(SolrDisMaxQuery, removeBigramPhraseField, SolrDisMaxQuery_remove_field_arg, ZEND_ACC_PUBLIC)
112 PHP_ME(SolrDisMaxQuery, setBigramPhraseSlop, SolrDisMaxQuery_setPhraseSlop_args, ZEND_ACC_PUBLIC)
113
114 PHP_ME(SolrDisMaxQuery, setTrigramPhraseFields, SolrDisMaxQuery_setFields_args, ZEND_ACC_PUBLIC)
115 PHP_ME(SolrDisMaxQuery, addTrigramPhraseField, SolrDisMaxQuery_addPhraseField_args, ZEND_ACC_PUBLIC)
116 PHP_ME(SolrDisMaxQuery, removeTrigramPhraseField, SolrDisMaxQuery_remove_field_arg, ZEND_ACC_PUBLIC)
117 PHP_ME(SolrDisMaxQuery, setTrigramPhraseSlop, SolrDisMaxQuery_setPhraseSlop_args, ZEND_ACC_PUBLIC)
118
119 PHP_ME(SolrDisMaxQuery, addUserField, SolrDisMaxQuery_uf_args, ZEND_ACC_PUBLIC)
120 PHP_ME(SolrDisMaxQuery, removeUserField, SolrDisMaxQuery_uf_args, ZEND_ACC_PUBLIC)
121 PHP_ME(SolrDisMaxQuery, setUserFields, SolrDisMaxQuery_setufs_args, ZEND_ACC_PUBLIC)
122
123 PHP_FE_END
124 };
125
init_solr_dismax_query(void)126 void init_solr_dismax_query(void){
127 zend_class_entry ce;
128 INIT_CLASS_ENTRY(ce, "SolrDisMaxQuery", solr_dismax_query_methods);
129 solr_ce_SolrDixMaxQuery = zend_register_internal_class_ex(
130 &ce,
131 solr_ce_SolrQuery
132 );
133 }
134
135 /* {{{ proto SolrQuery::__construct([string q])
136 Constructor for SolrDisMaxQuery */
PHP_METHOD(SolrDisMaxQuery,__construct)137 PHP_METHOD(SolrDisMaxQuery, __construct)
138 {
139 zval *param_value = NULL;
140 solr_char_t *deftype_param_name = "defType", *deftype_param_value = SOLR_DISMAX_DEFAULT_PARSER;
141 COMPAT_ARG_SIZE_T deftype_param_name_len = strlen("defType"),
142 deftype_param_value_len = strlen(SOLR_DISMAX_DEFAULT_PARSER);
143
144 if(zend_parse_parameters(ZEND_NUM_ARGS(), "|z", ¶m_value) == FAILURE){
145 php_error_docref(NULL, E_ERROR, "Invalid parameters");
146 RETURN_NULL();
147 }
148 if(param_value == NULL){
149 zend_call_method_with_0_params(OBJ_FOR_PROP(getThis()), solr_ce_SolrDixMaxQuery, &solr_ce_SolrDixMaxQuery->parent->constructor, "__construct", NULL);
150 }else{
151 zend_call_method_with_1_params(OBJ_FOR_PROP(getThis()), solr_ce_SolrDixMaxQuery, &solr_ce_SolrDixMaxQuery->parent->constructor, "__construct", NULL, param_value);
152 }
153 solr_add_or_set_normal_param(
154 getThis(),
155 deftype_param_name,
156 deftype_param_name_len,
157 deftype_param_value,
158 deftype_param_value_len,
159 0
160 );
161 }
162 /* }}} */
163
164 /* {{{ proto SolrQuery::useDisMaxQueryParser()
165 Switch Query Parser to dismax */
PHP_METHOD(SolrDisMaxQuery,useDisMaxQueryParser)166 PHP_METHOD(SolrDisMaxQuery, useDisMaxQueryParser)
167 {
168 solr_char_t *param_name = "defType", *param_value = "dismax";
169 COMPAT_ARG_SIZE_T param_name_len = strlen("defType"), param_value_len = strlen("dismax"), result=1;
170
171 result = solr_add_or_set_normal_param(
172 getThis(),
173 param_name,
174 param_name_len,
175 param_value,
176 param_value_len,
177 0
178 );
179
180 if(result != SUCCESS)
181 {
182 RETURN_NULL();
183 }
184 SOLR_RETURN_THIS();
185 }
186 /* }}} */
187
188 /* {{{ proto SolrQuery::useDisMaxQueryParser()
189 Switch Query Parser to edismax */
PHP_METHOD(SolrDisMaxQuery,useEDisMaxQueryParser)190 PHP_METHOD(SolrDisMaxQuery, useEDisMaxQueryParser)
191 {
192 solr_char_t *pname = "defType", *param_value = "edismax";
193 COMPAT_ARG_SIZE_T pname_len = strlen("defType"), param_value_len = strlen("edismax"), result=1;
194
195 result = solr_add_or_set_normal_param(
196 getThis(),
197 pname,
198 pname_len,
199 param_value,
200 param_value_len,
201 0
202 );
203
204 if(result != SUCCESS)
205 {
206 RETURN_NULL();
207 }
208 SOLR_RETURN_THIS();
209 }
210 /* }}} */
211
212 /* {{{ proto SolrQuery::setQueryAlt(string q)
213 SetQueryAlt uses q.alt if the q param is not defined */
PHP_METHOD(SolrDisMaxQuery,setQueryAlt)214 PHP_METHOD(SolrDisMaxQuery, setQueryAlt)
215 {
216 solr_char_t *pname = "q.alt";
217 COMPAT_ARG_SIZE_T pname_len = sizeof("q.alt")-1;
218 solr_char_t *param_value = NULL;
219 COMPAT_ARG_SIZE_T param_value_len = 0, set_param_return = 0;
220
221 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m_value, ¶m_value_len) == FAILURE){
222 php_error_docref(NULL, E_ERROR, "Invalid parameters");
223 RETURN_NULL();
224 }
225
226 set_param_return = solr_add_or_set_normal_param(getThis(), pname, pname_len, param_value, param_value_len, 0);
227 if(set_param_return == FAILURE)
228 {
229 RETURN_NULL();
230 }
231 SOLR_RETURN_THIS();
232 }
233 /* }}} */
234
235 /* {{{ proto SolrQuery::addQueryField(string field[, bool boost])
236 SetQueryAlt uses q.alt if the q param is not defined */
PHP_METHOD(SolrDisMaxQuery,addQueryField)237 PHP_METHOD(SolrDisMaxQuery, addQueryField) {
238 solr_char_t *pname = "qf";
239 COMPAT_ARG_SIZE_T pname_len = sizeof("qf")-1;
240 solr_char_t *boost_str = NULL;
241 solr_char_t *field_name = NULL;
242 COMPAT_ARG_SIZE_T field_name_len = 0;
243 int add_result = 0;
244 solr_char_t *delimiter = " ";
245 solr_char_t *separator = "^";
246 solr_char_t *separator_override="";
247 zval * boost = NULL;
248 int boost_len = 0;
249
250 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s|z", &field_name, &field_name_len, &boost) == FAILURE)
251 {
252 php_error_docref(NULL, E_ERROR, "Invalid parameters");
253 RETURN_NULL();
254 }
255
256 if(boost != NULL)
257 {
258 convert_to_string(boost);
259 boost_str = Z_STRVAL_P(boost);
260 boost_len = Z_STRLEN_P(boost);
261 add_result = solr_add_arg_list_param(
262 getThis(), pname, pname_len, field_name, field_name_len,
263 boost_str, boost_len, *delimiter, *separator
264 );
265 }else{
266 boost_str = "";
267 add_result = solr_add_arg_list_param_ex(
268 getThis(), pname, pname_len, field_name, field_name_len,
269 boost_str, boost_len, *delimiter, *separator, *separator_override
270 );
271 }
272
273 if(add_result == FAILURE)
274 {
275 RETURN_NULL();
276 }
277
278 SOLR_RETURN_THIS();
279 }
280 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeQueryField(string field)
281 Removes a sort field from the sort parameter. */
PHP_METHOD(SolrDisMaxQuery,removeQueryField)282 PHP_METHOD(SolrDisMaxQuery, removeQueryField)
283 {
284 solr_char_t *pname = (solr_char_t*) "qf";
285 COMPAT_ARG_SIZE_T pname_len = sizeof("qf")-1;
286 solr_char_t *field_name = NULL;
287 COMPAT_ARG_SIZE_T field_name_len = 0;
288
289 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
290 {
291 php_error_docref(NULL, E_WARNING, "Invalid parameters");
292 RETURN_NULL();
293 }
294 solr_delete_arg_list_param_value(
295 getThis(), pname, pname_len, field_name, field_name_len
296 );
297 SOLR_RETURN_THIS();
298 }
299 /* }}} */
300
301 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::addPhraseField(string field, float boost [, float slop])
302 * Adds a new phrase field
303 */
PHP_METHOD(SolrDisMaxQuery,addPhraseField)304 PHP_METHOD(SolrDisMaxQuery, addPhraseField)
305 {
306 solr_char_t *pname = (solr_char_t*) "pf";
307 COMPAT_ARG_SIZE_T pname_len = sizeof("pf")-1;
308 solr_char_t *field_name = NULL;
309 COMPAT_ARG_SIZE_T field_name_len = 0;
310 zval *boost = NULL;
311 zval *slop = NULL;
312 solr_char_t *boost_str = NULL;
313 solr_char_t *slop_str = NULL;
314 int add_result = 0;
315 char * separator = "^";
316 solr_char_t * delimiter_override = "";
317 solr_string_t boost_slop_buffer;
318
319 if(zend_parse_parameters(ZEND_NUM_ARGS(), "sz|z", &field_name, &field_name_len, &boost, &slop) == FAILURE)
320 {
321 php_error_docref(NULL, E_WARNING, "Invalid parameters");
322 RETURN_NULL();
323 }
324
325 if(boost != NULL)
326 {
327 convert_to_string(boost);
328 boost_str = Z_STRVAL_P(boost);
329 }
330
331 if (slop != NULL) {
332 convert_to_string(slop);
333 slop_str = Z_STRVAL_P(slop);
334 }
335
336 if (slop != NULL && boost !=NULL)
337 {
338 delimiter_override = "~";
339 memset(&boost_slop_buffer, 0, sizeof(solr_string_t));
340 solr_string_appends(&boost_slop_buffer, (solr_char_t *)slop_str , Z_STRLEN_P(slop));
341 solr_string_appendc(&boost_slop_buffer, '^');
342 solr_string_appends(&boost_slop_buffer, boost_str , Z_STRLEN_P(boost));
343 add_result = solr_add_arg_list_param_ex(
344 getThis(), pname, pname_len, field_name, field_name_len,
345 boost_slop_buffer.str, boost_slop_buffer.len, ' ', *separator,
346 *delimiter_override
347 );
348
349 solr_string_free(&boost_slop_buffer);
350 } else {
351 add_result = solr_add_arg_list_param(
352 getThis(), pname, pname_len, field_name, field_name_len,
353 boost_str, Z_STRLEN_P(boost),' ',*separator
354
355 );
356 }
357
358 if(add_result == FAILURE)
359 {
360 RETURN_NULL();
361 }
362
363 SOLR_RETURN_THIS();
364 }
365 /* }}} */
366
367 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeQueryField(string field)
368 Removes a phrase field from pf. */
PHP_METHOD(SolrDisMaxQuery,removePhraseField)369 PHP_METHOD(SolrDisMaxQuery, removePhraseField)
370 {
371 solr_char_t *pname = (solr_char_t*) "pf";
372 COMPAT_ARG_SIZE_T pname_len = sizeof("pf")-1;
373 solr_char_t *field_name = NULL;
374 COMPAT_ARG_SIZE_T field_name_len = 0;
375
376 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
377 {
378 php_error_docref(NULL, E_WARNING, "Invalid parameters");
379 RETURN_NULL();
380 }
381 solr_delete_arg_list_param_value(
382 getThis(), pname, pname_len, field_name, field_name_len
383 );
384 SOLR_RETURN_THIS();
385 }
386 /* }}} */
387
388 /* {{{ proto SolrQuery::setPhraseFields(string fields)
389 setPhraseFields uses pf parameter */
PHP_METHOD(SolrDisMaxQuery,setPhraseFields)390 PHP_METHOD(SolrDisMaxQuery, setPhraseFields)
391 {
392 solr_char_t *pname = "pf";
393 COMPAT_ARG_SIZE_T pname_len = sizeof("pf")-1;
394 int add_result = -1;
395 solr_char_t *pvalue = NULL;
396 COMPAT_ARG_SIZE_T pvalue_len = 0;
397 solr_param_t *param = NULL;
398 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
399 {
400 php_error_docref(NULL, E_WARNING, "Invalid parameters");
401 RETURN_NULL();
402 }
403
404 /* if the parameter is registered with a different type, remove it first */
405 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_NORMAL)
406 {
407 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
408 solr_delete_solr_parameter(getThis(), pname, pname_len);
409 }
410
411 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
412
413 if(add_result == FAILURE)
414 {
415 php_error_docref(NULL, E_WARNING, "Unable to add parameter %s", pname);
416 RETURN_NULL();
417 }
418
419 SOLR_RETURN_THIS();
420 }
421 /* }}} */
422
423 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setPhraseSlop(integer slop)
424 sets Phrase Slop ps argument. */
PHP_METHOD(SolrDisMaxQuery,setPhraseSlop)425 PHP_METHOD(SolrDisMaxQuery, setPhraseSlop)
426 {
427 solr_char_t *pname = (solr_char_t*) "ps";
428 COMPAT_ARG_SIZE_T pname_len = sizeof("ps")-1;
429 int add_result = -1;
430 solr_char_t *pvalue = NULL;
431 COMPAT_ARG_SIZE_T pvalue_len = 0;
432
433 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
434 {
435 php_error_docref(NULL, E_WARNING, "Invalid parameters");
436 RETURN_NULL();
437 }
438 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
439
440 if(add_result == FAILURE)
441 {
442 php_error_docref(NULL, E_WARNING, "Invalid parameter value");
443 RETURN_NULL();
444 }
445 SOLR_RETURN_THIS();
446 }
447 /* }}} */
448
449 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setQueryPhraseSlop(integer slop)
450 sets QueryPhrase Slop qs argument. */
PHP_METHOD(SolrDisMaxQuery,setQueryPhraseSlop)451 PHP_METHOD(SolrDisMaxQuery, setQueryPhraseSlop)
452 {
453 solr_char_t *pname = (solr_char_t*) "qs";
454 COMPAT_ARG_SIZE_T pname_len = sizeof("qs")-1;
455 int add_result = -1;
456 solr_char_t *pvalue = NULL;
457 COMPAT_ARG_SIZE_T pvalue_len = 0;
458
459 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
460 {
461 php_error_docref(NULL, E_WARNING, "Invalid parameters");
462 RETURN_NULL();
463 }
464 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
465
466 if(add_result == FAILURE)
467 {
468 php_error_docref(NULL, E_WARNING, "Invalid parameter value");
469 RETURN_NULL();
470 }
471 SOLR_RETURN_THIS();
472 }
473 /* }}} */
474
475
476 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setBoostQuery(string q)
477 sets Boost Query bq parameter. */
PHP_METHOD(SolrDisMaxQuery,setBoostQuery)478 PHP_METHOD(SolrDisMaxQuery, setBoostQuery)
479 {
480 solr_char_t *pname = (solr_char_t*) "bq";
481 COMPAT_ARG_SIZE_T pname_len = sizeof("bq")-1;
482 int add_result = -1;
483 solr_char_t *pvalue = NULL;
484 COMPAT_ARG_SIZE_T pvalue_len = 0;
485 solr_param_t *param = NULL;
486 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
487 {
488 php_error_docref(NULL, E_WARNING, "Invalid parameters");
489 RETURN_NULL();
490 }
491
492 /* if the parameter is registered with a different type, remove it first */
493 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_NORMAL)
494 {
495 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
496 solr_delete_solr_parameter(getThis(), pname, pname_len);
497 }
498
499 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
500
501 if(add_result == FAILURE)
502 {
503 php_error_docref(NULL, E_WARNING, "Unable to add parameter %s", pname);
504 RETURN_NULL();
505 }
506
507 SOLR_RETURN_THIS();
508 }
509 /* }}} */
510
511 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::addBoostQueryField(string field, string value [, float boost])
512 * Adds a new boost query field using the bq parameter
513 */
PHP_METHOD(SolrDisMaxQuery,addBoostQuery)514 PHP_METHOD(SolrDisMaxQuery, addBoostQuery)
515 {
516 solr_char_t *pname = (solr_char_t*) "bq";
517 COMPAT_ARG_SIZE_T pname_len = sizeof("bq")-1;
518 solr_char_t *field_name = NULL;
519 COMPAT_ARG_SIZE_T field_name_len = 0;
520 zval *boost = NULL;
521 solr_char_t *field_value = NULL;
522 COMPAT_ARG_SIZE_T field_value_len = 0;
523 solr_char_t *boost_str = NULL;
524 int add_result = 0;
525 char * separator = ":";
526 solr_char_t *boost_separator = "^";
527 solr_string_t *value_boost_str = NULL;
528 solr_param_t *param = NULL;
529
530 if(zend_parse_parameters(ZEND_NUM_ARGS(), "ss|z", &field_name, &field_name_len, &field_value, &field_value_len, &boost) == FAILURE)
531 {
532 php_error_docref(NULL, E_WARNING, "Invalid parameters");
533 RETURN_NULL();
534 }
535
536 /* if the parameter is registered with a different type, remove it first */
537 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_ARG_LIST)
538 {
539 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
540 solr_delete_solr_parameter(getThis(), pname, pname_len);
541 }
542
543 if(boost != NULL)
544 {
545 convert_to_string(boost);
546 boost_str = Z_STRVAL_P(boost);
547 }
548
549 if(boost !=NULL)
550 {
551 value_boost_str = emalloc(sizeof(solr_string_t));
552 memset(value_boost_str, 0, sizeof(solr_string_t));
553 solr_string_appends(value_boost_str, field_value, field_value_len);
554 solr_string_appendc(value_boost_str, *boost_separator);
555 solr_string_appends(value_boost_str, boost_str, Z_STRLEN_P(boost));
556
557 add_result = solr_add_arg_list_param(
558 getThis(),pname, pname_len, field_name, field_name_len,
559 value_boost_str->str, value_boost_str->len,' ',*separator
560
561 );
562 solr_string_free(value_boost_str);
563 efree(value_boost_str);
564 }else{
565 add_result = solr_add_arg_list_param(
566 getThis(),pname, pname_len, field_name, field_name_len,
567 field_value, field_value_len,' ',*separator
568
569 );
570 }
571
572 if(add_result == FAILURE)
573 {
574 RETURN_NULL();
575 }
576
577 SOLR_RETURN_THIS();
578 }
579 /* }}} */
580
581 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeBoostQuery(string field)
582 Removes a sort field from the sort parameter. */
PHP_METHOD(SolrDisMaxQuery,removeBoostQuery)583 PHP_METHOD(SolrDisMaxQuery, removeBoostQuery)
584 {
585 solr_char_t *pname = (solr_char_t*) "bq";
586 COMPAT_ARG_SIZE_T pname_len = sizeof("bq")-1;
587 solr_char_t *field_name = NULL;
588 COMPAT_ARG_SIZE_T field_name_len = 0;
589
590 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
591 {
592 php_error_docref(NULL, E_WARNING, "Invalid parameters");
593 RETURN_NULL();
594 }
595 solr_delete_arg_list_param_value(
596 getThis(), pname, pname_len, field_name, field_name_len
597 );
598 SOLR_RETURN_THIS();
599 }
600 /* }}} */
601
602 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setBoostFunction(string function)
603 sets Boost Query bf parameter. */
PHP_METHOD(SolrDisMaxQuery,setBoostFunction)604 PHP_METHOD(SolrDisMaxQuery, setBoostFunction)
605 {
606 solr_char_t *pname = (solr_char_t*) "bf";
607 COMPAT_ARG_SIZE_T pname_len = sizeof("bf")-1;
608 int add_result = -1;
609 solr_char_t *pvalue = NULL;
610 COMPAT_ARG_SIZE_T pvalue_len = 0;
611
612 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
613 {
614 php_error_docref(NULL, E_WARNING, "Invalid parameters");
615 RETURN_NULL();
616 }
617
618 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
619
620 if(add_result == FAILURE)
621 {
622 php_error_docref(NULL, E_WARNING, "Unable to add parameter %s", pname);
623 RETURN_NULL();
624 }
625
626 SOLR_RETURN_THIS();
627 }
628 /* }}} */
629
630 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setMinimumMatch(string value)
631 sets Minimum Match (mm) parameter. */
PHP_METHOD(SolrDisMaxQuery,setMinimumMatch)632 PHP_METHOD(SolrDisMaxQuery, setMinimumMatch)
633 {
634 solr_char_t *pname = (solr_char_t*) "mm";
635 COMPAT_ARG_SIZE_T pname_len = sizeof("mm")-1;
636 int add_result = -1;
637 solr_char_t *pvalue = NULL;
638 COMPAT_ARG_SIZE_T pvalue_len = 0;
639
640 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
641 {
642 php_error_docref(NULL, E_WARNING, "Invalid parameters");
643 RETURN_NULL();
644 }
645
646 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
647
648 if(add_result == FAILURE)
649 {
650 php_error_docref(NULL, E_WARNING, "Unable to add parameter %s", pname);
651 RETURN_NULL();
652 }
653
654 SOLR_RETURN_THIS();
655 }
656 /* }}} */
657
658 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setTieBreaker(float tieBreaker)
659 sets Tie Breaker (tie) parameter. */
PHP_METHOD(SolrDisMaxQuery,setTieBreaker)660 PHP_METHOD(SolrDisMaxQuery, setTieBreaker)
661 {
662 solr_char_t *pname = (solr_char_t*) "tie";
663 COMPAT_ARG_SIZE_T pname_len = sizeof("tie")-1;
664 int add_result = -1;
665 solr_char_t *pvalue = NULL;
666 COMPAT_ARG_SIZE_T pvalue_len = 0;
667
668 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
669 {
670 php_error_docref(NULL, E_WARNING, "Invalid parameters");
671 RETURN_NULL();
672 }
673
674 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
675
676 if(add_result == FAILURE)
677 {
678 php_error_docref(NULL, E_WARNING, "Unable to add parameter %s", pname);
679 RETURN_NULL();
680 }
681
682 SOLR_RETURN_THIS();
683 }
684 /* }}} */
685
686 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setBigramPhraseFields(string bigramFields)
687 setBigramPhraseFields uses pf2 parameter */
PHP_METHOD(SolrDisMaxQuery,setBigramPhraseFields)688 PHP_METHOD(SolrDisMaxQuery, setBigramPhraseFields)
689 {
690 solr_char_t *pname = "pf2";
691 COMPAT_ARG_SIZE_T pname_len = sizeof("pf2")-1;
692 solr_char_t *param_value = NULL;
693 COMPAT_ARG_SIZE_T param_value_len = 0;
694 int set_param_return = 0;
695 solr_param_t *param = NULL;
696
697 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m_value, ¶m_value_len) == FAILURE){
698 php_error_docref(NULL, E_ERROR, "Invalid parameters");
699 RETURN_NULL();
700 }
701
702 /* if the parameter is registered with a different type, remove it first */
703 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_NORMAL)
704 {
705 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
706 solr_delete_solr_parameter(getThis(), pname, pname_len);
707 }
708
709 set_param_return = solr_add_or_set_normal_param(getThis(), pname, pname_len, param_value, param_value_len, 0);
710 if(set_param_return == FAILURE)
711 {
712 RETURN_NULL();
713 }
714 SOLR_RETURN_THIS();
715 }
716 /* }}} */
717
718
719 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::addBigramPhraseField(string field, float boost [, float slop])
720 * Adds a new bigram phrase field (pf2) to the list of fields
721 */
PHP_METHOD(SolrDisMaxQuery,addBigramPhraseField)722 PHP_METHOD(SolrDisMaxQuery, addBigramPhraseField)
723 {
724 solr_char_t *field_name = NULL;
725 COMPAT_ARG_SIZE_T field_name_len = 0;
726 zval *boost = NULL;
727 zval *slop = NULL;
728 int add_result = 0;
729
730 if(zend_parse_parameters(ZEND_NUM_ARGS(), "sz|z", &field_name, &field_name_len, &boost, &slop) == FAILURE)
731 {
732 php_error_docref(NULL, E_WARNING, "Invalid parameters");
733 RETURN_NULL();
734 }
735 add_result = add_phrase_field(getThis(), "pf2", boost, slop, field_name, field_name_len);
736
737 if(add_result == FAILURE)
738 {
739 RETURN_NULL();
740 }
741
742 SOLR_RETURN_THIS();
743 }
744 /* }}} */
745
746
747 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeQueryField(string field)
748 Removes a bigram phrase field. */
PHP_METHOD(SolrDisMaxQuery,removeBigramPhraseField)749 PHP_METHOD(SolrDisMaxQuery, removeBigramPhraseField)
750 {
751 solr_char_t *pname = (solr_char_t*) "pf2";
752 COMPAT_ARG_SIZE_T pname_len = sizeof("pf2")-1;
753 solr_char_t *field_name = NULL;
754 COMPAT_ARG_SIZE_T field_name_len = 0;
755
756 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
757 {
758 php_error_docref(NULL, E_WARNING, "Invalid parameters");
759 RETURN_NULL();
760 }
761 solr_delete_arg_list_param_value(
762 getThis(), pname, pname_len, field_name, field_name_len
763 );
764 SOLR_RETURN_THIS();
765 }
766 /* }}} */
767
768 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setBigramPhraseSlop(integer slop)
769 sets Bigram Phrase Slop ps argument. */
PHP_METHOD(SolrDisMaxQuery,setBigramPhraseSlop)770 PHP_METHOD(SolrDisMaxQuery, setBigramPhraseSlop)
771 {
772 solr_char_t *pname = (solr_char_t*) "ps2";
773 COMPAT_ARG_SIZE_T pname_len = sizeof("ps2")-1;
774 int add_result = -1;
775 solr_char_t *pvalue = NULL;
776 COMPAT_ARG_SIZE_T pvalue_len = 0;
777
778 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
779 {
780 php_error_docref(NULL, E_WARNING, "Invalid parameters");
781 RETURN_NULL();
782 }
783 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
784
785 if(add_result == FAILURE)
786 {
787 php_error_docref(NULL, E_WARNING, "Invalid parameter value");
788 RETURN_NULL();
789 }
790 SOLR_RETURN_THIS();
791 }
792 /* }}} */
793
794
795 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setTrigramPhraseFields(string fields)
796 setTrigramPhraseFields uses pf3 parameter */
PHP_METHOD(SolrDisMaxQuery,setTrigramPhraseFields)797 PHP_METHOD(SolrDisMaxQuery, setTrigramPhraseFields)
798 {
799 solr_char_t *pname = "pf3";
800 COMPAT_ARG_SIZE_T pname_len = sizeof("pf3")-1;
801 solr_char_t *param_value = NULL;
802 COMPAT_ARG_SIZE_T param_value_len = 0;
803 int set_param_return = 0;
804 solr_param_t *param = NULL;
805
806 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m_value, ¶m_value_len) == FAILURE){
807 php_error_docref(NULL, E_ERROR, "Invalid parameters");
808 RETURN_NULL();
809 }
810
811 /* if the parameter is registered with a different type, remove it first */
812 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_NORMAL)
813 {
814 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
815 solr_delete_solr_parameter(getThis(), pname, pname_len);
816 }
817
818 set_param_return = solr_add_or_set_normal_param(getThis(), pname, pname_len, param_value, param_value_len, 0);
819 if(set_param_return == FAILURE)
820 {
821 RETURN_NULL();
822 }
823 SOLR_RETURN_THIS();
824 }
825 /* }}} */
826
827
828 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::addTrigramPhraseField(string field, float boost [, float slop])
829 * Adds a new trigram phrase field (pf3) to the list of fields
830 */
PHP_METHOD(SolrDisMaxQuery,addTrigramPhraseField)831 PHP_METHOD(SolrDisMaxQuery, addTrigramPhraseField)
832 {
833 solr_char_t *field_name = NULL;
834 COMPAT_ARG_SIZE_T field_name_len = 0;
835 zval *boost = NULL;
836 zval *slop = NULL;
837 int add_result = 0;
838
839 if(zend_parse_parameters(ZEND_NUM_ARGS(), "sz|z", &field_name, &field_name_len, &boost, &slop) == FAILURE)
840 {
841 php_error_docref(NULL, E_WARNING, "Invalid parameters");
842 RETURN_NULL();
843 }
844 add_result = add_phrase_field(getThis(), "pf3", boost, slop, field_name, field_name_len);
845
846 if(add_result == FAILURE)
847 {
848 RETURN_NULL();
849 }
850
851 SOLR_RETURN_THIS();
852 }
853 /* }}} */
854
855
856 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeQueryField(string field)
857 Removes a trigram phrase field. */
PHP_METHOD(SolrDisMaxQuery,removeTrigramPhraseField)858 PHP_METHOD(SolrDisMaxQuery, removeTrigramPhraseField)
859 {
860 solr_char_t *pname = (solr_char_t*) "pf3";
861 COMPAT_ARG_SIZE_T pname_len = sizeof("pf3")-1;
862 solr_char_t *field_name = NULL;
863 COMPAT_ARG_SIZE_T field_name_len = 0;
864
865 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
866 {
867 php_error_docref(NULL, E_WARNING, "Invalid parameters");
868 RETURN_NULL();
869 }
870 solr_delete_arg_list_param_value(
871 getThis(), pname, pname_len, field_name, field_name_len
872 );
873 SOLR_RETURN_THIS();
874 }
875 /* }}} */
876
877 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setTrigramPhraseSlop(integer slop)
878 sets Trigram Phrase Slop ps3 argument. */
PHP_METHOD(SolrDisMaxQuery,setTrigramPhraseSlop)879 PHP_METHOD(SolrDisMaxQuery, setTrigramPhraseSlop)
880 {
881 solr_char_t *pname = (solr_char_t*) "ps3";
882 COMPAT_ARG_SIZE_T pname_len = sizeof("ps3")-1;
883 int add_result = -1;
884 solr_char_t *pvalue = NULL;
885 COMPAT_ARG_SIZE_T pvalue_len = 0;
886
887 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
888 {
889 php_error_docref(NULL, E_WARNING, "Invalid parameters");
890 RETURN_NULL();
891 }
892 add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
893
894 if(add_result == FAILURE)
895 {
896 php_error_docref(NULL, E_WARNING, "Invalid parameter value");
897 RETURN_NULL();
898 }
899 SOLR_RETURN_THIS();
900 }
901 /* }}} */
902
903
904 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::addUserField(string field)
905 Adds a userfield rule to uf parameter. */
PHP_METHOD(SolrDisMaxQuery,addUserField)906 PHP_METHOD(SolrDisMaxQuery, addUserField)
907 {
908 solr_char_t *pname = (solr_char_t*) "uf";
909 COMPAT_ARG_SIZE_T pname_len = sizeof("uf")-1;
910 int add_result = -1;
911 solr_char_t *pvalue = NULL;
912 COMPAT_ARG_SIZE_T pvalue_len = 0;
913
914 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
915 {
916 php_error_docref(NULL, E_WARNING, "Invalid parameters");
917 RETURN_NULL();
918 }
919 add_result = solr_add_simple_list_param_ex(getThis(), pname, pname_len, pvalue, pvalue_len, " ");
920
921 if(add_result == FAILURE)
922 {
923 php_error_docref(NULL, E_WARNING, "Unable to add user field: Invalid parameter value");
924 RETURN_NULL();
925 }
926 SOLR_RETURN_THIS();
927 }
928 /* }}} */
929
930 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::removeUserField(string field)
931 Removes a userfield rule from uf parameter. */
PHP_METHOD(SolrDisMaxQuery,removeUserField)932 PHP_METHOD(SolrDisMaxQuery, removeUserField)
933 {
934 solr_char_t *pname = (solr_char_t*) "uf";
935 COMPAT_ARG_SIZE_T pname_len = sizeof("uf")-1;
936 solr_char_t *field_name = NULL;
937 COMPAT_ARG_SIZE_T field_name_len = 0;
938
939 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &field_name, &field_name_len) == FAILURE)
940 {
941 php_error_docref(NULL, E_WARNING, "Invalid parameters");
942 RETURN_NULL();
943 }
944
945 solr_delete_simple_list_param_value(getThis(), pname, pname_len, field_name, field_name_len);
946
947 SOLR_RETURN_THIS();
948 }
949 /* }}} */
950
951
952 /* {{{ proto SolrDisMaxQuery SolrDisMaxQuery::setUserFields(string fields)
953 Sets user fields (uf parameter) */
PHP_METHOD(SolrDisMaxQuery,setUserFields)954 PHP_METHOD(SolrDisMaxQuery, setUserFields)
955 {
956 solr_char_t *pname = "uf";
957 COMPAT_ARG_SIZE_T pname_len = sizeof("uf")-1;
958 solr_char_t *param_value = NULL;
959 COMPAT_ARG_SIZE_T param_value_len = 0;
960 int set_param_return = 0;
961 solr_param_t *param = NULL;
962
963 if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", ¶m_value, ¶m_value_len) == FAILURE){
964 php_error_docref(NULL, E_ERROR, "Invalid parameters");
965 RETURN_NULL();
966 }
967
968 /* if the parameter is registered with a different type, remove it first */
969 if(solr_param_find(getThis(), pname, pname_len, ¶m) == SUCCESS && param->type != SOLR_PARAM_TYPE_NORMAL)
970 {
971 php_error_docref(NULL, E_NOTICE, "Parameter %s value(s) was overwritten by this call", pname);
972 solr_delete_solr_parameter(getThis(), pname, pname_len);
973 }
974
975 set_param_return = solr_add_or_set_normal_param(getThis(), pname, pname_len, param_value, param_value_len, 0);
976 if(set_param_return == FAILURE)
977 {
978 RETURN_NULL();
979 }
980 SOLR_RETURN_THIS();
981 }
982 /* }}} */
983
984
add_phrase_field(zval * obj,solr_char_t * pname,zval * boost,zval * slop,solr_char_t * field_name,COMPAT_ARG_SIZE_T field_name_len)985 int add_phrase_field(zval *obj, solr_char_t *pname, zval *boost, zval *slop, solr_char_t *field_name, COMPAT_ARG_SIZE_T field_name_len)
986 {
987 COMPAT_ARG_SIZE_T pname_len = strlen(pname);
988 int add_result = 0;
989 solr_char_t *boost_str = NULL;
990 solr_char_t *slop_str = NULL;
991 char * separator = "^";
992 solr_char_t * delimiter_override = "";
993
994 solr_string_t boost_slop_buffer;
995 if(boost != NULL)
996 {
997 convert_to_string(boost);
998 boost_str = Z_STRVAL_P(boost);
999 }
1000
1001 if (slop != NULL) {
1002 convert_to_string(slop);
1003 slop_str = Z_STRVAL_P(slop);
1004 }
1005
1006 if (slop != NULL && boost !=NULL)
1007 {
1008 delimiter_override = "~";
1009 memset(&boost_slop_buffer, 0, sizeof(solr_string_t));
1010 solr_string_appends(&boost_slop_buffer, (solr_char_t *)slop_str , Z_STRLEN_P(slop));
1011 solr_string_appendc(&boost_slop_buffer, '^');
1012 solr_string_appends(&boost_slop_buffer, boost_str , Z_STRLEN_P(boost));
1013 add_result = solr_add_arg_list_param_ex(
1014 obj, pname, pname_len, field_name, field_name_len,
1015 boost_slop_buffer.str, boost_slop_buffer.len, ' ', *separator,
1016 *delimiter_override
1017 );
1018
1019 solr_string_free(&boost_slop_buffer);
1020 } else {
1021 add_result = solr_add_arg_list_param(
1022 obj, pname, pname_len, field_name, field_name_len,
1023 boost_str, Z_STRLEN_P(boost),' ',*separator
1024
1025 );
1026 }
1027 return add_result;
1028 }
1029