[PHP-dev 200] Re: PHP4_namazu-2.1.0 patch

Youichi Iwakiri php-dev@php.gr.jp
Wed, 09 Jan 2002 15:00:10 +0900


いわきりです

tsukada@fminn.nagano.nagano.jp wrote in <20020109031721.CE256183AA@castle.fminn.nagano.nagano.jp>:
 >こんにちは、塚田です。

こんにちは。

 >nmz_fetch_* の引数は、その数に応じて
 >次のように変更しようと思います。
 >  array nmz_fetch_score(int result, int limit)
 >  array nmz_fetch_score(int result, int whence, int max)
 >  array nmz_fetch_date(int result, int limit)
 >  array nmz_fetch_date(int result, int whence, int max)
 >  array nmz_fetch_field(int result, string field, int limit)
 >  array nmz_fetch_field(int result, string field, int whence, int max)
 >ちょっと名前を変えただけなんですが。

個人的には嬉しい変更です :)
最初にpatchを送った際に書きましたが
何番目(whence)から何個(max)という書き方が日本人としては
馴染みやすいです。
前の名称の
 >  array nmz_fetch_score(int result, int limit, int offset)
だと、どうも直感的に解りにくい気がしていたんですが、
DB関連だと軒並みその記述ですよね。
 "SELECT * FROM table LIMIT 50 OFFSET 10"
見たいに。
敢えてlimit, offsetを残しておくと勘違いする可能性もあり得そうなので
名称を変えるのには大賛成です。

あと、公開までに余裕があるようでしたら以下の関数の追加を
お願いしたいのですがよろしくお願いします。

bool nmz_set_debugmode(bool mode);
int nmz_get_idxnum(void);
string nmz_get_idxname(int index_id);
int nmz_get_idx_totalhitnum(int index_id);
array nmz_get_idx_hitnumlist(int index_id);

nmz_set_debugmode()は不要だとは思いますが、
他は参考ヒット数、フレーズ検索時の参考ヒット数を
表示したい場合に必要となりますので是非ご検討下さい。

私の処では下記のpatchをあてて実際に使ってます。

--- php_namazu.h	Mon Dec  3 21:29:06 2001
+++ ../php-dev/ext/namazu/php_namazu.h	Mon Jan  7 03:12:21 2002
@@ -32,6 +32,7 @@
 PHP_FUNCTION(nmz_get_lang_ctype);
 PHP_FUNCTION(nmz_is_lang_ja);
 PHP_FUNCTION(nmz_set_loggingmode);
+PHP_FUNCTION(nmz_set_debugmode);
 PHP_FUNCTION(nmz_open);
 PHP_FUNCTION(nmz_close);
 PHP_FUNCTION(nmz_free_result);
@@ -44,6 +45,10 @@
 PHP_FUNCTION(nmz_fetch_date);
 PHP_FUNCTION(nmz_fetch_field);
 PHP_FUNCTION(nmz_get_querytoken);
+PHP_FUNCTION(nmz_get_idxnum);
+PHP_FUNCTION(nmz_get_idxname);
+PHP_FUNCTION(nmz_get_idx_totalhitnum);
+PHP_FUNCTION(nmz_get_idx_hitnumlist);
 PHP_FUNCTION(nmz_codeconv_query);
 PHP_FUNCTION(nmz_info);
 
--- php_namazu.c	Mon Dec  3 22:50:38 2001
+++ ../php-dev/ext/namazu/php_namazu.c	Wed Jan  9 13:40:57 2002
@@ -55,6 +55,7 @@
 	PHP_FE(nmz_get_lang_ctype,		NULL)
 	PHP_FE(nmz_is_lang_ja,			NULL)
 	PHP_FE(nmz_set_loggingmode,		NULL)
+	PHP_FE(nmz_set_debugmode,		NULL)
 	PHP_FE(nmz_open,		NULL)
 	PHP_FE(nmz_close,		NULL)
 	PHP_FE(nmz_search,		NULL)
@@ -67,6 +68,10 @@
 	PHP_FE(nmz_fetch_field,		NULL)
 	PHP_FE(nmz_free_result,		NULL)
 	PHP_FE(nmz_get_querytoken,	NULL)
+	PHP_FE(nmz_get_idxnum,	NULL)
+	PHP_FE(nmz_get_idxname,	NULL)
+	PHP_FE(nmz_get_idx_totalhitnum,	NULL)
+	PHP_FE(nmz_get_idx_hitnumlist,	NULL)
 	PHP_FE(nmz_codeconv_query,	NULL)
 	PHP_FE(nmz_info,		NULL)
 	{NULL, NULL, NULL}
@@ -147,6 +152,7 @@
 	PHP_INI_ENTRY("namazu.sortmethod", NULL, PHP_INI_ALL, OnUpdate_namazu_sortmethod)
 	STD_PHP_INI_ENTRY("namazu.lang", NULL, PHP_INI_ALL, OnUpdateString, lang, zend_namazu_globals, namazu_globals)
 	STD_PHP_INI_BOOLEAN("namazu.loggingmode", "0", PHP_INI_ALL, OnUpdateInt, loggingmode, zend_namazu_globals, namazu_globals)
+	STD_PHP_INI_BOOLEAN("namazu.debugmode", "0", PHP_INI_ALL, OnUpdateInt, debugmode, zend_namazu_globals, namazu_globals)
 PHP_INI_END()
 
 
@@ -161,6 +167,7 @@
 	pglobals->sortfield = (char *)0;
 	pglobals->lang = (char *)0;
 	pglobals->loggingmode = 0;
+	pglobals->debugmode = 0;
 }
 
 
@@ -196,6 +203,7 @@
 	nmz_set_sortmethod(NMZG(sortmethod));
 	nmz_set_sortorder(NMZG(sortorder));
 	nmz_set_loggingmode((int)NMZG(loggingmode));
+	nmz_set_debugmode((int)NMZG(debugmode));
 	if (NMZG(sortfield)) {
 		nmz_set_sortfield(NMZG(sortfield));
 	}
@@ -363,6 +371,23 @@
 }
 /* }}} */
 
+/* {{{ proto bool nmz_set_debugmode(bool mode)
+   Set the debug mode */
+PHP_FUNCTION(nmz_set_debugmode)
+{
+	zval **arg_mode;
+
+	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_mode) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
+	convert_to_long_ex(arg_mode);
+	nmz_set_debugmode((int)Z_LVAL_PP(arg_mode));
+
+	RETURN_TRUE;
+}
+/* }}} */
+
 
 /* {{{ proto int nmz_open(mixed index)
    Open namazu index */
@@ -387,6 +412,7 @@
 	nmz_set_sortmethod(NMZG(sortmethod));
 	nmz_set_sortorder(NMZG(sortorder));
 	nmz_set_loggingmode((int)NMZG(loggingmode));
+	nmz_set_debugmode((int)NMZG(debugmode));
 	if (NMZG(sortfield)) {
 		nmz_set_sortfield(NMZG(sortfield));
 	}
@@ -745,18 +771,18 @@
 
 	limit = nmzres->hlist.num;
 	offset = 0;
-	if (ZEND_NUM_ARGS() >= 3) {
-		convert_to_long_ex(arg_limit);
-		if (limit > Z_LVAL_PP(arg_limit)) {
-			limit = Z_LVAL_PP(arg_limit);
-		}
-	}
 	if (ZEND_NUM_ARGS() == 4) {
 		convert_to_long_ex(arg_offset);
 		if (limit > Z_LVAL_PP(arg_offset)) {
 			offset = Z_LVAL_PP(arg_offset);
 		}
 	}
+	if (ZEND_NUM_ARGS() >= 3) {
+		convert_to_long_ex(arg_limit);
+		if (limit > offset + Z_LVAL_PP(arg_limit)) {
+			limit = offset + Z_LVAL_PP(arg_limit);
+		}
+	}
 
 	/* Initialize return array */
 	if (array_init(return_value) == FAILURE) {
@@ -783,7 +809,7 @@
 	char *query;
 	int i, n;
 
-	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_hlist) == FAILURE) {
+	if (ZEND_NUM_ARGS() != 1 ||zend_get_parameters_ex(1, &arg_hlist) == FAILURE) { 
 		WRONG_PARAM_COUNT;
 	}
 
@@ -802,6 +828,83 @@
 		if (query) {
 			add_next_index_string(return_value, query, 1);
 		}
+	}
+}
+/* }}} */
+
+/* {{{ proto int nmz_get_idxnum(void)
+   Get number of idecies */
+PHP_FUNCTION(nmz_get_idxnum)
+{
+	int max_idxid;
+
+	if (ZEND_NUM_ARGS() != 0) {
+		WRONG_PARAM_COUNT;
+	}
+
+	max_idxid = nmz_get_idxnum();
+	RETVAL_LONG(max_idxid);
+}
+
+/* {{{ proto string nmz_get_idxname(int index_id)
+   Get index name */
+PHP_FUNCTION(nmz_get_idxname)
+{
+	zval **arg_idxid;
+	char *indexname;
+
+	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_idxid) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
+	convert_to_long_ex(arg_idxid);
+	indexname = nmz_get_idxname((int)Z_LVAL_PP(arg_idxid));
+	RETVAL_STRING(indexname, 1);
+}
+
+/* {{{ proto int nmz_get_totalhitnum(int index_id)
+   Get number of Total hits */
+PHP_FUNCTION(nmz_get_idx_totalhitnum)
+{
+	zval **arg_idxid;
+	int totalhitnum;
+
+	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_idxid) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
+	convert_to_long_ex(arg_idxid);
+	totalhitnum = nmz_get_idx_totalhitnum((int)Z_LVAL_PP(arg_idxid));
+	RETVAL_LONG(totalhitnum);
+}
+
+/* {{{ proto array nmz_get_hitnumlist(int index_id)
+   Get token/number of hits */
+PHP_FUNCTION(nmz_get_idx_hitnumlist)
+{
+	zval **arg_idxid;
+	struct nmz_hitnumlist *hnlist;
+
+	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_idxid) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
+	/* Initialize index_info array */
+	if (array_init(return_value) == FAILURE) {
+		RETURN_FALSE;
+	}
+
+	hnlist = nmz_get_idx_hitnumlist((int)Z_LVAL_PP(arg_idxid));
+	if (hnlist->phrase != NULL) {
+		add_assoc_long(return_value, "phrase", hnlist->hitnum);
+		hnlist = hnlist->phrase;
+	} else {
+		add_assoc_long(return_value, "no-phrase", 0);
+	}
+
+	while (hnlist != NULL) {
+		add_assoc_long(return_value, hnlist->word, hnlist->hitnum);
+		hnlist = hnlist->next;
 	}
 }
 /* }}} */
--- php_namazu_globals.h	Mon Oct 29 14:26:00 2001
+++ ../php-dev/ext/namazu/php_namazu_globals.h	Mon Jan  7 03:13:06 2002
@@ -23,6 +23,7 @@
 	char *sortfield;
 	char *lang;
 	long loggingmode;
+	long debugmode;
 ZEND_END_MODULE_GLOBALS(namazu);

ここまで