diff options
-rw-r--r-- | ext/mnogosearch/README | 8 | ||||
-rw-r--r-- | ext/mnogosearch/php_mnogo.c | 135 | ||||
-rw-r--r-- | ext/mnogosearch/test.php | 2 |
3 files changed, 85 insertions, 60 deletions
diff --git a/ext/mnogosearch/README b/ext/mnogosearch/README index e240cea91f..5e5b9e871a 100644 --- a/ext/mnogosearch/README +++ b/ext/mnogosearch/README @@ -1,7 +1,7 @@ $Source$ $Id$ -mnoGoSearch extension module version 0.3 for PHP4. +mnoGoSearch extension module for PHP4. Basic mnoGoSearch function implementation. If used with mysql you should not use bundled mysql library @@ -12,8 +12,7 @@ library. To do this you should compile php with specefying mysql-dir TODO ---- -1. Implement more UdmSearch functions. Only basic minimal functions -set is implemented for now. +1. Implement more UdmSearch functions. 2. Fix config.m4 to detect whether UdmSearch is actually installed. Currently there is no any checking. ./configure just trust that UdmSearch @@ -24,6 +23,3 @@ PHP4 by default and does not require any additional UdmSearch libraries. Actually it should work fine with other supported database. 4. Write PHP interface documentation. - -5. Add nice warnings when unknown parameters are passed to PHP functions. -Those places are marked with FIXME is php_udm.c diff --git a/ext/mnogosearch/php_mnogo.c b/ext/mnogosearch/php_mnogo.c index 5cde4fa17b..24b9d6025e 100644 --- a/ext/mnogosearch/php_mnogo.c +++ b/ext/mnogosearch/php_mnogo.c @@ -48,6 +48,8 @@ #define UDM_PARAM_CACHE_MODE 4 #define UDM_PARAM_TRACK_MODE 5 #define UDM_PARAM_CHARSET 6 +#define UDM_PARAM_STOPTABLE 7 +#define UDM_PARAM_STOPFILE 8 #define UDM_TRACK_ENABLED 1 #define UDM_TRACK_DISABLED 0 @@ -128,6 +130,8 @@ DLEXPORT PHP_MINIT_FUNCTION(mnogosearch) REGISTER_LONG_CONSTANT("UDM_PARAM_CACHE_MODE",UDM_PARAM_CACHE_MODE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_TRACK_MODE",UDM_PARAM_TRACK_MODE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_CHARSET",UDM_PARAM_CHARSET,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_STOPTABLE",UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_STOPFILE",UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT); /* udm_get_res_param constants */ REGISTER_LONG_CONSTANT("UDM_PARAM_FOUND",UDM_PARAM_FOUND,CONST_CS | CONST_PERSISTENT); @@ -285,7 +289,8 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param) break; default: - RETURN_STRING("<Udm_Set_Agent_Param: Unknown search mode>",1); + php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown search mode"); + RETURN_FALSE; break; } @@ -303,7 +308,8 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param) default: Agent->cache_mode=UDM_CACHE_DISABLED; - RETURN_STRING("<Udm_Set_Agent_Param: Unknown cache mode>",1); + php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown cache mode"); + RETURN_FALSE; break; } @@ -320,7 +326,8 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param) break; default: - RETURN_STRING("<Udm_Set_Agent_Param: Unknown track_mode>",1); + php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown track mode"); + RETURN_FALSE; break; } @@ -332,34 +339,26 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param) break; - default: - RETURN_STRING("<Udm_Set_Agent_Param: Unknown agent parameter>",1); - break; - } -} -/* }}} */ - + case UDM_PARAM_STOPTABLE: + strcat(Agent->Conf->stop_tables," "); + strcat(Agent->Conf->stop_tables,val); + break; -/* {{{ proto int udm_free_agent(int agent_identifier) - Free mnoGoSearch session */ -DLEXPORT PHP_FUNCTION(udm_free_agent) -{ - pval ** yyagent; - UDM_RESULT * Agent; - switch(ZEND_NUM_ARGS()){ - case 1: { - if (zend_get_parameters_ex(1, &yyagent)==FAILURE) { - RETURN_FALSE; - } + case UDM_PARAM_STOPFILE: + if (UdmFileLoadStopList(Agent->Conf,val)) { + php_error(E_WARNING,Agent->Conf->errstr); + RETURN_FALSE; } + break; + default: - WRONG_PARAM_COUNT; + php_error(E_WARNING,"Udm_Set_Agent_Param: Unknown agent parameter"); + RETURN_FALSE; break; } - ZEND_FETCH_RESOURCE(Agent, UDM_RESULT *, yyagent, -1, "mnoGoSearch-agent", le_link); - zend_list_delete((*yyagent)->value.lval); + RETURN_TRUE; } /* }}} */ @@ -429,10 +428,46 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field){ case UDM_FIELD_SCORE: RETURN_LONG((Res->Doc[row].rating));break; case UDM_FIELD_MODIFIED: RETURN_LONG((Res->Doc[row].last_mod_time));break; default: - RETURN_STRING("<Udm_Get_Res_Field: Unknown mnoGoSearch field name>",1);break; + php_error(E_WARNING,"Udm_Get_Res_Field: Unknown mnoGoSearch field name"); + RETURN_FALSE; + break; } }else{ - RETURN_STRING("<Udm_Get_Res_Field: row number too large>",1); + php_error(E_WARNING,"Udm_Get_Res_Field: row number too large"); + RETURN_FALSE; + } +} +/* }}} */ + + +/* {{{ proto int udm_get_res_param(int res_identifier, const int param_id) + mnoGoSearch result parameters */ +DLEXPORT PHP_FUNCTION(udm_get_res_param) +{ + pval ** yyres, ** yyparam; + int param; + UDM_RESULT * Res; + switch(ZEND_NUM_ARGS()){ + case 2: { + if (zend_get_parameters_ex(2, &yyres, &yyparam)==FAILURE) { + RETURN_FALSE; + } + convert_to_long_ex(yyparam); + param=((*yyparam)->value.lval); + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res); + switch(param){ + case UDM_PARAM_NUM_ROWS: RETURN_LONG(Res->num_rows);break; + case UDM_PARAM_FOUND: RETURN_LONG(Res->total_found);break; + default: + php_error(E_WARNING,"Udm_Get_Res_Param: Unknown mnoGoSearch param name"); + RETURN_FALSE; + break; } } /* }}} */ @@ -462,13 +497,12 @@ DLEXPORT PHP_FUNCTION(udm_free_res) /* }}} */ -/* {{{ proto int udm_error(int agent_identifier) - mnoGoSearch error message */ -DLEXPORT PHP_FUNCTION(udm_error) +/* {{{ proto int udm_errno(int agent_identifier) + mnoGoSearch error number */ +DLEXPORT PHP_FUNCTION(udm_errno) { pval ** yyagent; UDM_AGENT * Agent; - switch(ZEND_NUM_ARGS()){ case 1: { if (zend_get_parameters_ex(1, &yyagent)==FAILURE) { @@ -481,16 +515,18 @@ DLEXPORT PHP_FUNCTION(udm_error) break; } ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link); - RETURN_STRING(UdmDBErrorMsg(Agent->db),1); + RETURN_LONG(UdmDBErrorCode(Agent->db)); } /* }}} */ -/* {{{ proto int udm_errno(int agent_identifier) - mnoGoSearch error number */ -DLEXPORT PHP_FUNCTION(udm_errno) + +/* {{{ proto int udm_error(int agent_identifier) + mnoGoSearch error message */ +DLEXPORT PHP_FUNCTION(udm_error) { pval ** yyagent; UDM_AGENT * Agent; + switch(ZEND_NUM_ARGS()){ case 1: { if (zend_get_parameters_ex(1, &yyagent)==FAILURE) { @@ -503,43 +539,34 @@ DLEXPORT PHP_FUNCTION(udm_errno) break; } ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link); - RETURN_LONG(UdmDBErrorCode(Agent->db)); + RETURN_STRING(UdmDBErrorMsg(Agent->db),1); } /* }}} */ -/* {{{ proto int udm_get_res_param(int res_identifier, const int param_id) - mnoGoSearch result parameters */ -DLEXPORT PHP_FUNCTION(udm_get_res_param) +/* {{{ proto int udm_free_agent(int agent_identifier) + Free mnoGoSearch session */ +DLEXPORT PHP_FUNCTION(udm_free_agent) { - pval ** yyres, ** yyparam; - int param; - UDM_RESULT * Res; + pval ** yyagent; + UDM_RESULT * Agent; switch(ZEND_NUM_ARGS()){ - case 2: { - if (zend_get_parameters_ex(2, &yyres, &yyparam)==FAILURE) { + case 1: { + if (zend_get_parameters_ex(1, &yyagent)==FAILURE) { RETURN_FALSE; } - convert_to_long_ex(yyparam); - param=((*yyparam)->value.lval); } break; default: WRONG_PARAM_COUNT; break; } - ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res); - switch(param){ - case UDM_PARAM_NUM_ROWS: RETURN_LONG(Res->num_rows);break; - case UDM_PARAM_FOUND: RETURN_LONG(Res->total_found);break; - default: - /* FIXME: unknown parameter */ - RETURN_STRING("<Udm_Get_Res_Param: Unknown mnoGoSearch param name>",1); - break; - } + ZEND_FETCH_RESOURCE(Agent, UDM_RESULT *, yyagent, -1, "mnoGoSearch-agent", le_link); + zend_list_delete((*yyagent)->value.lval); } /* }}} */ + #endif diff --git a/ext/mnogosearch/test.php b/ext/mnogosearch/test.php index a97ffd1da1..0f99703fb0 100644 --- a/ext/mnogosearch/test.php +++ b/ext/mnogosearch/test.php @@ -35,6 +35,8 @@ Udm_Set_Agent_Param($udm,UDM_PARAM_CACHE_MODE,UDM_CACHE_DISABLED); Udm_Set_Agent_Param($udm,UDM_PARAM_TRACK_MODE,UDM_TRACK_DISABLED); Udm_Set_Agent_Param($udm,UDM_PARAM_CHARSET,"koi8-r"); + Udm_Set_Agent_Param($udm,UDM_PARAM_STOPTABLE,"stopwords"); +// Udm_Set_Agent_Param($udm,UDM_PARAM_STOPFILE,"stop.txt"); // Stage 3: perform search |