[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);
ここまで