]> granicus.if.org Git - php/commitdiff
@- Mnogosearch extension updated. Now can compile with mnogosearch-3.2.11+
authorSergey Kartashoff <gluke@php.net>
Sat, 14 Jun 2003 18:45:26 +0000 (18:45 +0000)
committerSergey Kartashoff <gluke@php.net>
Sat, 14 Jun 2003 18:45:26 +0000 (18:45 +0000)
- Mnogosearch extension updated. Now can compile with mnogosearch-3.2.11+

ext/mnogosearch/php_mnogo.c
ext/mnogosearch/php_mnogo.h

index 03c6760c3747068a0a7a6395c2a5b8db515037bd..7ea7a37a93e3b49f2b292f43797000b99d78cab8 100644 (file)
@@ -163,6 +163,12 @@ function_entry mnogosearch_functions[] = {
 #if UDM_VERSION_ID >= 30204
        PHP_FE(udm_parse_query_string,  NULL)
        PHP_FE(udm_make_excerpt,        NULL)
+       PHP_FE(udm_set_agent_param_ex,  NULL)
+       PHP_FE(udm_get_res_field_ex,    NULL)
+#endif
+#if UDM_VERSION_ID >= 30211
+       PHP_FE(udm_hash32,              NULL)
+       PHP_FE(udm_alloc_agent_array,   NULL)
 #endif
 #endif
 
@@ -456,7 +462,7 @@ DLEXPORT PHP_FUNCTION(udm_alloc_agent)
                                UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
                                UdmSetLogLevel(Env,0);
                                UdmOpenLog("mnoGoSearch-php",Env,0);
-
+#if UDM_VERSION_ID <= 30210
                                if(!memcmp(dbaddr,"searchd:",8)){
                                        UDM_URL Url;
                                        UdmURLParse(&Url,dbaddr);
@@ -464,13 +470,18 @@ DLEXPORT PHP_FUNCTION(udm_alloc_agent)
                                }
                                
                                UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
+                               
                                if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
                                    sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
+#if UDM_VERSION_ID <= 30207
                                    Env->errcode=1;
-                                   php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C));
+#endif
+                                   php_error_docref(NULL TSRMLS_CC, E_WARNING,"Invalid DBAddr");
                                    RETURN_FALSE;
                                }
-                               
+#else
+                               UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
+#endif
                                Agent=UdmAgentInit(NULL,Env,0);
 #elif UDM_VERSION_ID >= 30200
                                Env=UdmAllocEnv();
@@ -508,7 +519,7 @@ DLEXPORT PHP_FUNCTION(udm_alloc_agent)
                                UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
                                UdmSetLogLevel(Env,0);
                                UdmOpenLog("mnoGoSearch-php",Env,0);
-
+#if UDM_VERSION_ID <= 30210
                                if(!memcmp(dbaddr,"searchd:",8)){
                                        UDM_URL Url;
                                        UdmURLParse(&Url,dbaddr);
@@ -517,10 +528,15 @@ DLEXPORT PHP_FUNCTION(udm_alloc_agent)
                                UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
                                if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
                                    sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
+#if UDM_VERSION_ID <= 30207
                                    Env->errcode=1;
-                                   php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C));
+#endif
+                                   php_error_docref(NULL TSRMLS_CC, E_WARNING,"Invalid DBAddr");
                                    RETURN_FALSE;
                                }
+#else
+                               UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
+#endif
                                Agent=UdmAgentInit(NULL,Env,0);
 #elif UDM_VERSION_ID >= 30200
                                Env=UdmAllocEnv();
@@ -620,7 +636,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 
                                        case UDM_MODE_PHRASE: 
 #if UDM_VERSION_ID >= 30200
-                                               php_error(E_WARNING,"%s(): Unknown search mode", get_active_function_name(TSRMLS_C));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search mode");
                                                RETURN_FALSE;
 #else
                                                Agent->search_mode=UDM_MODE_PHRASE;
@@ -633,7 +649,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else
                                                Agent->search_mode=UDM_MODE_ALL;
 #endif                                         
-                                               php_error(E_WARNING,"%s(): Unknown search mode", get_active_function_name(TSRMLS_C));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search mode");
                                                RETURN_FALSE;
                                                break;
                        }
@@ -679,7 +695,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else
                                                Agent->word_match=UDM_MATCH_WORD;
 #endif                                         
-                                               php_error(E_WARNING,"%s(): Unknown word match mode", get_active_function_name(TSRMLS_C));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown word match mode");
                                                RETURN_FALSE;
                                                break;
                        }
@@ -714,7 +730,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else                                                                  
                                        UdmReplaceStrVar(Agent->Conf->vars,"Cache","no",UDM_VARSRC_GLOBAL);
 #endif                                         
-                                       php_error(E_WARNING,"%s(): Unknown cache mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown cache mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -752,7 +768,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else
                                        UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","no",UDM_VARSRC_GLOBAL);
 #endif                         
-                                       php_error(E_WARNING,"%s(): Unknown track mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown track mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -771,7 +787,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                                        break;
                                        
                                default:
-                                       php_error(E_WARNING,"%s(): Unknown phrase mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown phrase mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -809,7 +825,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else
                                        UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 1, UDM_VARSRC_GLOBAL);                                     
 #endif                                                                                         
-                                       php_error(E_WARNING,"%s(): Unknown ispell prefixes mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown ispell prefixes mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -866,7 +882,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                        
                case UDM_PARAM_SYNONYM:
                        if (UdmSynonymListLoad(Agent->Conf,val)) {
-                               php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C),Agent->Conf->errstr);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",Agent->Conf->errstr);
                                RETURN_FALSE;
 #if UDM_VERSION_ID >= 30204
                        } else UdmSynonymListSort(&(Agent->Conf->Synonyms));
@@ -918,7 +934,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #else
                        if (UdmFileLoadStopList(Agent->Conf,val)) {
 #endif
-                               php_error(E_WARNING, "%s(): %s", Agent->Conf->errstr, get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", Agent->Conf->errstr);
                                RETURN_FALSE;
                        }
                        break;
@@ -985,7 +1001,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                                        break;
                                        
                                default:
-                                       php_error(E_WARNING,"%s(): Unknown crosswords mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown crosswords mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -997,6 +1013,8 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                case UDM_PARAM_VARDIR:
 #if UDM_VERSION_ID < 30200
                        udm_snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
+#elif UDM_VERSION_ID >= 30208
+                       UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
 #elif UDM_VERSION_ID >= 30204
                        UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
                        snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
@@ -1032,7 +1050,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                                        break;
                                        
                                default:
-                                       php_error(E_WARNING,"%s(): Unknown groupbysite mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown groupbysite mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -1057,7 +1075,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
                                        break;
                                        
                                default:
-                                       php_error(E_WARNING,"%s(): Unknown clones mode", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown clones mode");
                                        RETURN_FALSE;
                                        break;
                        }
@@ -1066,7 +1084,7 @@ DLEXPORT PHP_FUNCTION(udm_set_agent_param)
 #endif
 
                default:
-                       php_error(E_WARNING,"%s(): Unknown agent session parameter", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown agent session parameter");
                        RETURN_FALSE;
                        break;
        }
@@ -1160,12 +1178,12 @@ DLEXPORT PHP_FUNCTION(udm_load_ispell_data)
 #endif
                        
                        if (UdmImportAffixes(Agent->Conf,val1,val2,NULL,0)) {
-                               php_error(E_WARNING,"%s(): Cannot load affix file %s", get_active_function_name(TSRMLS_C),val2);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load affix file %s",val2);
                                RETURN_FALSE;
                        }
 #else
                        if (UdmImportAffixes(Agent->Conf,val1,charset,val2)) {
-                               php_error(E_WARNING,"%s(): Cannot load affix file %s", get_active_function_name(TSRMLS_C),val2);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load affix file %s",val2);
                                RETURN_FALSE;
                        }
     
@@ -1181,12 +1199,12 @@ DLEXPORT PHP_FUNCTION(udm_load_ispell_data)
 #endif
                        
                        if (UdmImportDictionary(Agent->Conf,val1,val2,1,"")) {
-                               php_error(E_WARNING,"%s(): Cannot load spell file %s", get_active_function_name(TSRMLS_C),val2);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load spell file %s",val2);
                                RETURN_FALSE;
                        }
 #else
                        if (UdmImportDictionary(Agent->Conf,val1,charset,val2,0,"")) {
-                               php_error(E_WARNING,"%s(): Cannot load spell file %s", get_active_function_name(TSRMLS_C),val2);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load spell file %s",val2);
                                RETURN_FALSE;
                        }
 #endif
@@ -1194,7 +1212,7 @@ DLEXPORT PHP_FUNCTION(udm_load_ispell_data)
 
 
                default:
-                       php_error(E_WARNING,"%s(): Unknown ispell type parameter", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown ispell type parameter");
                        RETURN_FALSE;
                        break;
        }
@@ -1328,7 +1346,7 @@ DLEXPORT PHP_FUNCTION(udm_add_search_limit)
                                Z_TYPE(stl_info)=2;
                                stl_info.t2=(time_t)(atol(edate+1));
                        } else {
-                               php_error(E_WARNING,"%s(): Incorrect date limit format", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Incorrect date limit format");
                                RETURN_FALSE;
                        }                       
                        
@@ -1338,7 +1356,7 @@ DLEXPORT PHP_FUNCTION(udm_add_search_limit)
 #endif
                        break;
                default:
-                       php_error(E_WARNING,"%s(): Unknown search limit parameter", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search limit parameter");
                        RETURN_FALSE;
                        break;
        }
@@ -1647,24 +1665,212 @@ DLEXPORT PHP_FUNCTION(udm_make_excerpt)
                
                Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), 256);
                
-               if (Excerpt != NULL) {
+               if ((Excerpt != NULL) && (strlen(Excerpt) > 6)) {
                        char *HlExcerpt = UdmHlConvert(&Res->WWList, Excerpt, Agent->Conf->lcs, Agent->Conf->bcs);
-                       UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",1);
                        UdmVarListReplaceStr(&(Res->Doc[row].Sections),"Body",HlExcerpt);
                        UDM_FREE(HlExcerpt);
+               }
+               if (Excerpt != NULL && (UdmVarListFindStr(&(Res->Doc[row].Sections), "Z", NULL) == NULL)) {
+                       UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",1);
                        UDM_FREE(Excerpt);
                } else {
                        UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",0);
                        RETURN_FALSE;
                }
        }else{
-               php_error(E_WARNING,"%s(): row number too large", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
                RETURN_FALSE;
        }
        
        RETURN_TRUE;
 }
 /* }}} */
+
+/* {{{ proto int udm_set_agent_param_ex(int agent, string var, string val)
+   Set mnoGoSearch agent session parameters extended */
+DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex)
+{
+       pval **yyagent, **yyvar, **yyval;
+       char *val, *var;
+       UDM_AGENT * Agent;
+
+       switch(ZEND_NUM_ARGS()){
+       
+               case 3:                 
+                       if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
+                               RETURN_FALSE;
+                       }
+                       convert_to_string_ex(yyvar);
+                       convert_to_string_ex(yyval);
+                       ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
+                       var = Z_STRVAL_PP(yyvar);
+                       val = Z_STRVAL_PP(yyval);
+                       
+                       break;
+                       
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+       
+       UdmVarListReplaceStr(&Agent->Conf->Vars,var,val);
+       
+       if (!strcasecmp(var,"LocalCharset")) {
+               const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1");
+               Agent->Conf->lcs=UdmGetCharSet(charset);
+       } else if (!strcasecmp(var,"BrowserCharset")) {
+               const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1");
+               Agent->Conf->bcs=UdmGetCharSet(charset);
+       } else if (!strcasecmp(var,"Synonym")) {
+               if (UdmSynonymListLoad(Agent->Conf,val)) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",Agent->Conf->errstr);
+                       RETURN_FALSE;
+               } else UdmSynonymListSort(&(Agent->Conf->Synonyms));
+       } else if (!strcasecmp(var,"Stopwordfile")) {
+               if (UdmStopListLoad(Agent->Conf,val)) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", Agent->Conf->errstr);
+                       RETURN_FALSE;
+               }
+       } else if (!strcasecmp(var,"MinWordLen")) {
+               Agent->Conf->WordParam.min_word_len=atoi(val);
+       } else if (!strcasecmp(var,"MaxWordLen")) {
+               Agent->Conf->WordParam.max_word_len=atoi(val);
+#if UDM_VERSION_ID <= 30207
+       } else if (!strcasecmp(var,"VarDir")) {
+               snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
+#endif
+       }
+
+       RETURN_TRUE;
+}
+
+/* {{{ proto string udm_get_res_field_ex(int res, int row, string field)
+   Fetch mnoGoSearch result field */
+DLEXPORT PHP_FUNCTION(udm_get_res_field_ex)
+{
+       pval **yyres, **yyrow_num, **yyfield_name;
+
+       UDM_RESULT * Res;
+       int row;
+       char *field;
+       
+       switch(ZEND_NUM_ARGS()){
+               case 3: {
+                               if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){
+                                       RETURN_FALSE;
+                               }
+                               convert_to_string_ex(yyrow_num);
+                               convert_to_string_ex(yyfield_name);
+                               field = Z_STRVAL_PP(yyfield_name);
+                               row = atoi(Z_STRVAL_PP(yyrow_num));
+                       }
+                       break;
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+       
+       ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
+       if(row<Res->num_rows){
+               if (!strcasecmp(field,"URL")) {
+                   char        *al;
+                   al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), field, "")));
+                   UdmVarListReplaceStr(&Res->Doc[row].Sections,field,al);
+                   free(al);
+               }
+               RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,field,""),1);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+#endif
+
+#if UDM_VERSION_ID >= 30211
+/* {{{ proto int udm_alloc_agent_array(array dbaddr)
+   Allocate mnoGoSearch session */
+DLEXPORT PHP_FUNCTION(udm_alloc_agent_array)
+{
+       switch(ZEND_NUM_ARGS()){
+
+               case 1: {
+                               pval **yydbaddr;
+                               zval **tmp;
+                               char *dbaddr;
+                               UDM_ENV   * Env;
+                               UDM_AGENT * Agent;
+                               HashPosition   pos;
+                               
+                               if(zend_get_parameters_ex(1,&yydbaddr)==FAILURE){
+                                       RETURN_FALSE;
+                               }
+                               
+                               if (Z_TYPE_PP(yydbaddr) != IS_ARRAY) {
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument DBAddr must be an array.");
+                                       RETURN_FALSE;
+                               }
+                               convert_to_array_ex(yydbaddr);
+                               
+                               Env=UdmEnvInit(NULL);
+                               UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
+                               UdmSetLogLevel(Env,0);
+                               UdmOpenLog("mnoGoSearch-php",Env,0);
+                               
+                               zend_hash_internal_pointer_reset_ex(HASH_OF(*yydbaddr), &pos);
+                               
+                               while (zend_hash_get_current_data_ex(HASH_OF(*yydbaddr), (void **)&tmp, &pos) == SUCCESS) {
+                                   convert_to_string_ex(tmp);
+                                   dbaddr = Z_STRVAL_PP(tmp);
+                                   UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
+                                   
+                                   zend_hash_move_forward_ex(HASH_OF(*yydbaddr), &pos);
+                               }
+                               
+                               Agent=UdmAgentInit(NULL,Env,0);
+                               ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
+                       }
+                       break;
+                       
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+}
+/* }}} */
+
+/* {{{ proto int udm_hash32(int agent, string str)
+   Return Hash32 checksum of gived string */
+DLEXPORT PHP_FUNCTION(udm_hash32)
+{
+       pval ** yystr, ** yyagent;
+       char *str;
+       udmhash32_t hash32;
+       char buf[32];
+       UDM_AGENT * Agent;
+       int id=-1;
+
+       switch(ZEND_NUM_ARGS()){
+               case 2: {
+                               if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {
+                                       RETURN_FALSE;
+                               }
+                       }
+                       break;
+               default:                                
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+       ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
+       convert_to_string_ex(yystr);
+       str = Z_STRVAL_PP(yystr);
+
+       hash32=UdmHash32((str),strlen(str));
+       snprintf(buf,sizeof(buf)-1,"%u",hash32);
+       
+       RETURN_STRING(buf,1);
+}
+/* }}} */
 #endif
 
 /* {{{ proto int udm_find(int agent, string query)
@@ -1876,12 +2082,12 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field)
 #endif
                                
                        default: 
-                               php_error(E_WARNING,"%s(): Unknown mnoGoSearch field name", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown mnoGoSearch field name");
                                RETURN_FALSE;
                                break;
                }
        }else{
-               php_error(E_WARNING,"%s(): row number too large", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
                RETURN_FALSE;
        }
 }
@@ -1926,7 +2132,6 @@ DLEXPORT PHP_FUNCTION(udm_get_res_param)
                            {   
                                size_t wsize=(1+len*15)*sizeof(char);
                                char *wordinfo = (char*) malloc(wsize);
-                               int corder = -1, ccount = 0;
          
                                *wordinfo = '\0';
          
@@ -1956,7 +2161,7 @@ DLEXPORT PHP_FUNCTION(udm_get_res_param)
                            {   
                                size_t wsize=(1+len*15)*sizeof(char);
                                char *wordinfo = (char*) malloc(wsize);
-                               int corder = -1, ccount = 0;
+                               int corder = (size_t)-1, ccount = 0;
          
                                *wordinfo = '\0';
                                
@@ -1998,7 +2203,7 @@ DLEXPORT PHP_FUNCTION(udm_get_res_param)
                        break;
 
                default:
-                       php_error(E_WARNING,"%s(): Unknown mnoGoSearch param name", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown mnoGoSearch param name");
                        RETURN_FALSE;
                        break;
        }
@@ -2071,7 +2276,13 @@ DLEXPORT PHP_FUNCTION(udm_errno)
                        break;
        }
        ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30204
+#if UDM_VERSION_ID >= 30208
+       if (UdmEnvErrMsg(Agent->Conf) && strlen(UdmEnvErrMsg(Agent->Conf))) {
+           RETURN_LONG(1);
+       } else {
+           RETURN_LONG(0);
+       }
+#elif UDM_VERSION_ID >= 30204
        RETURN_LONG(UdmEnvErrCode(Agent->Conf));
 #else
        RETURN_LONG(UdmDBErrorCode(Agent->db));
@@ -2147,13 +2358,15 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
 #if UDM_VERSION_ID >= 30204
        bzero(&C,sizeof(C));
        strncpy(C.addr,cat,sizeof(C.addr)-1);
+#if UDM_VERSION_ID <= 30210
        if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_LIST,Agent->Conf->db)){
+#else
+       if(UDM_OK == UdmCatAction(Agent,&C,UDM_CAT_ACTION_LIST)){
+#endif
 #else
        if((c=UdmCatList(Agent,cat))){
 #endif
-               if (array_init(return_value)==FAILURE) {
-                       RETURN_FALSE;
-               }
+               array_init(return_value);
                
                if (!(buf=calloc(1,UDMSTRSIZ+1))) {
                        RETURN_FALSE;
@@ -2164,11 +2377,9 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
                    int i;
                    if (C.ncategories) {
                        for(i=0;i<C.ncategories;i++){
-                           snprintf(buf, UDMSTRSIZ, "%s%s",C.Category[i].link[0]?"@ ":"", C.Category[i].name);
-                           add_next_index_string(return_value, C.Category[i].link[0]?C.Category[i].link:C.Category[i].path, 1);
-                           add_next_index_string(return_value, buf, 1);
+                           add_next_index_stringl(return_value, C.Category[i].path,strlen(C.Category[i].path),1);
+                           add_next_index_stringl(return_value, C.Category[i].name,strlen(C.Category[i].name),1);
                        }
-                       free(C.Category);
                    } else {
                        RETURN_FALSE;
                    }
@@ -2221,13 +2432,15 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
 #if UDM_VERSION_ID >= 30204
        bzero(&C,sizeof(C));
        strncpy(C.addr,cat,sizeof(C.addr)-1);
+#if UDM_VERSION_ID <= 30210
        if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_PATH,Agent->Conf->db)){
+#else
+       if(UDM_OK == UdmCatAction(Agent,&C,UDM_CAT_ACTION_PATH)){
+#endif
 #else
        if((c=UdmCatPath(Agent,cat))){
 #endif
-               if (array_init(return_value)==FAILURE) {
-                       RETURN_FALSE;
-               }
+               array_init(return_value);
                
                if (!(buf=calloc(1,UDMSTRSIZ+1))) {
                        RETURN_FALSE;
@@ -2238,11 +2451,9 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
                    int i;
                    if (C.ncategories) {
                        for(i=0;i<C.ncategories;i++){                   
-                           snprintf(buf, UDMSTRSIZ, "%s%s",C.Category[i].link[0]?"@ ":"", C.Category[i].name);
-                           add_next_index_string(return_value, C.Category[i].link[0]?C.Category[i].link:C.Category[i].path, 1);
-                           add_next_index_string(return_value, buf, 1);
+                           add_next_index_stringl(return_value, C.Category[i].path,strlen(C.Category[i].path),1);
+                           add_next_index_stringl(return_value, C.Category[i].name,strlen(C.Category[i].name),1);
                        }
-                       free(C.Category);
                    } else {
                        RETURN_FALSE;
                    }
@@ -2284,7 +2495,11 @@ DLEXPORT PHP_FUNCTION(udm_get_doc_count)
        }
        ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
 #if UDM_VERSION_ID >= 30204
+#if UDM_VERSION_ID <= 30210
        if (!Agent->doccount) UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT,Agent->Conf->db);
+#else
+       if (!Agent->doccount) UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT);
+#endif
        RETURN_LONG(Agent->doccount);
 #else
        RETURN_LONG(UdmGetDocCount(Agent));
index 93047b9e7cce35279721a7d2a042308b987358f6..574e299d8d645aa34bde2b2fdf0fa51c4e04b887 100644 (file)
@@ -27,8 +27,6 @@
 
 #if HAVE_MNOGOSEARCH
 
-#undef HAVE_PGSQL
-#undef HAVE_MYSQL
 #include <udm_config.h>
 #include <udmsearch.h>
 
@@ -70,6 +68,12 @@ DLEXPORT PHP_FUNCTION(udm_crc32);
 #if UDM_VERSION_ID >= 30204
 DLEXPORT PHP_FUNCTION(udm_parse_query_string);
 DLEXPORT PHP_FUNCTION(udm_make_excerpt);
+DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex);
+DLEXPORT PHP_FUNCTION(udm_get_res_field_ex);
+#endif
+#if UDM_VERSION_ID >= 30211
+DLEXPORT PHP_FUNCTION(udm_hash32);
+DLEXPORT PHP_FUNCTION(udm_alloc_agent_array);
 #endif
 #endif