From e5772157362dc8e1474270f789dda26217aa0660 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 27 Oct 2000 09:29:40 +0000 Subject: - added four functions to do fulltext query --- ext/hyperwave/hw.c | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 1 deletion(-) (limited to 'ext/hyperwave/hw.c') diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index d5e802efb1..d383d30629 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -82,6 +82,10 @@ function_entry hw_functions[] = { PHP_FE(hw_getobjectbyqueryobj, NULL) PHP_FE(hw_getobjectbyquerycoll, NULL) PHP_FE(hw_getobjectbyquerycollobj, NULL) + PHP_FE(hw_getobjectbyftquery, NULL) + PHP_FE(hw_getobjectbyftqueryobj, NULL) + PHP_FE(hw_getobjectbyftquerycoll, NULL) + PHP_FE(hw_getobjectbyftquerycollobj, NULL) PHP_FE(hw_getchilddoccoll, NULL) PHP_FE(hw_getchilddoccollobj, NULL) PHP_FE(hw_getanchors, NULL) @@ -2457,7 +2461,7 @@ PHP_FUNCTION(hw_new_document) { free(doc); RETURN_FALSE; } - memcpy(doc->data, arg2->value.str.val, arg3->value.lval); + memcpy(doc->data, arg2->value.str.val, arg3->value.lval); ptr = doc->data; ptr[arg3->value.lval] = '\0'; doc->attributes = strdup(arg1->value.str.val); @@ -3150,6 +3154,176 @@ PHP_FUNCTION(hw_getobjectbyquerycollobj) { } /* }}} */ +/* {{{ proto array hw_getobjectbyftquery(int link, string query, int maxhits) + Search for query as fulltext and return maxhits objids */ +PHP_FUNCTION(hw_getobjectbyftquery) { + pval **arg1, **arg2, **arg3; + int link, type, maxhits; + char *query; + int count, i; + int *childIDs = NULL; + float *weights; + hw_connection *ptr; + + if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(arg1); + convert_to_string_ex(arg2); + convert_to_long_ex(arg3); + link=(*arg1)->value.lval; + query=(*arg2)->value.str.val; + maxhits=(*arg3)->value.lval; + if (maxhits < 0) maxhits=0x7FFFFFFF; + ptr = zend_list_find(link,&type); + if(!ptr || (type!=HwSG(le_socketp) && type!=HwSG(le_psocketp))) { + php_error(E_WARNING,"Unable to find file identifier %d",link); + RETURN_FALSE; + } + + set_swap(ptr->swap_on); + if (0 != (ptr->lasterror = send_getobjbyftquery(ptr->socket, query, maxhits, &childIDs, &weights, &count))) { + php_error(E_WARNING, "send_command (getobjectbyftquery) returned %d\n", ptr->lasterror); + RETURN_FALSE; + } + + if (array_init(return_value) == FAILURE) { + efree(childIDs); + RETURN_FALSE; + } + + for(i=0; ivalue.lval; + query=(*arg2)->value.str.val; + maxhits=(*arg3)->value.lval; + if (maxhits < 0) maxhits=0x7FFFFFFF; + ptr = zend_list_find(link,&type); + if(!ptr || (type!=HwSG(le_socketp) && type!=HwSG(le_psocketp))) { + php_error(E_WARNING,"Unable to find file identifier %d",link); + RETURN_FALSE; + } + + set_swap(ptr->swap_on); + if (0 != (ptr->lasterror = send_getobjbyftqueryobj(ptr->socket, query, maxhits, &childObjRecs, &weights, &count))) { + php_error(E_WARNING, "send_command (getobjectbyftqueryobj) returned %d\n", ptr->lasterror); + RETURN_FALSE; + } + + /* create return value and free all memory */ + if( 0 > make_return_objrec(&return_value, childObjRecs, count)) + RETURN_FALSE; +} +/* }}} */ + +/* {{{ proto array hw_getobjectbyftquerycoll(int link, int collid, string query, int maxhits) + Search for fulltext query in collection and return maxhits objids */ +PHP_FUNCTION(hw_getobjectbyftquerycoll) { + pval **arg1, **arg2, **arg3, **arg4; + int link, id, type, maxhits; + char *query; + int count, i; + hw_connection *ptr; + int *childIDs = NULL; + float *weights; + + if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(arg1); + convert_to_long_ex(arg2); + convert_to_string_ex(arg3); + convert_to_long_ex(arg4); + link=(*arg1)->value.lval; + id=(*arg2)->value.lval; + query=(*arg3)->value.str.val; + maxhits=(*arg4)->value.lval; + if (maxhits < 0) maxhits=0x7FFFFFFF; + ptr = zend_list_find(link,&type); + if(!ptr || (type!=HwSG(le_socketp) && type!=HwSG(le_psocketp))) { + php_error(E_WARNING,"Unable to find file identifier %d",id); + RETURN_FALSE; + } + + set_swap(ptr->swap_on); + if (0 != (ptr->lasterror = send_getobjbyftquerycoll(ptr->socket, id, query, maxhits, &childIDs, &weights, &count))) { + php_error(E_WARNING, "send_command (getobjectbyquerycoll) returned %d\n", ptr->lasterror); + RETURN_FALSE; + } + + if (array_init(return_value) == FAILURE) { + efree(childIDs); + RETURN_FALSE; + } + + for(i=0; ivalue.lval; + id=(*arg2)->value.lval; + query=(*arg3)->value.str.val; + maxhits=(*arg4)->value.lval; + if (maxhits < 0) maxhits=0x7FFFFFFF; + ptr = zend_list_find(link,&type); + if(!ptr || (type!=HwSG(le_socketp) && type!=HwSG(le_psocketp))) { + php_error(E_WARNING,"Unable to find file identifier %d",id); + RETURN_FALSE; + } + + set_swap(ptr->swap_on); + if (0 != (ptr->lasterror = send_getobjbyftquerycollobj(ptr->socket, id, query, maxhits, &childObjRecs, &weights, &count))) { + php_error(E_WARNING, "send_command (getobjectbyquerycollobj) returned %d\n", ptr->lasterror); + RETURN_FALSE; + } + + /* create return value and free all memory */ + if( 0 > make_return_objrec(&return_value, childObjRecs, count)) + RETURN_FALSE; +} +/* }}} */ + /* {{{ proto array hw_getchilddoccoll(int link, int objid) Returns all children ids which are documents */ PHP_FUNCTION(hw_getchilddoccoll) { -- cgit v1.2.1