morit****@razil*****
morit****@razil*****
2009年 4月 7日 (火) 00:37:04 JST
森です。
ご指摘ありがとうございます!
flagの割り当てについてちょっと考えてから反映させていただきます。
エラー情報についてもご指摘ありがとうございます。
こちらも反映します。
>>> Kouhei Sutou さんは書きました:
> 須藤です。
>
> grn_table_create()はflagsをそのままキーストアのバックエンド
> に渡していますが、GRN_OBJ_TABLE_NO_KEY(3)を指定すると、
> GRN_ARRAY_TINY(2)ビットが立ってしまいます。
> そのため、pathを指定して永続テーブルにしようとすると、
> grn_arrayの作成に失敗してしまいます。
>
> これは、NO_KEYでは永続テーブルを作成できないということでしょ
> うか?
>
> とりあえず、こうすれば作成できるようになります。
>
> diff --git a/groonga.h b/groonga.h
> index b4a08ea..13a5154 100644
> --- a/groonga.h
> +++ b/groonga.h
> @@ -182,7 +182,7 @@ typedef unsigned int grn_obj_flags;
> #define GRN_OBJ_TABLE_TYPE_MASK (0x07)
> #define GRN_OBJ_TABLE_HASH_KEY (0x00)
> #define GRN_OBJ_TABLE_PAT_KEY (0x01)
> -#define GRN_OBJ_TABLE_NO_KEY (0x03)
> +#define GRN_OBJ_TABLE_NO_KEY (0x05)
> #define GRN_OBJ_TABLE_ALIAS (0x04)
>
> #define GRN_OBJ_KEY_MASK (0x07<<3)
>
>
> あと、grn_array_create()が失敗したらgrn_ctxにエラー情報を設定
> してくれるようになると、問題を早く見つけられるようになって便
> 利です。
>
> diff --git a/lib/hash.c b/lib/hash.c
> index 1ad35eb..2425ff2 100644
> --- a/lib/hash.c
> +++ b/lib/hash.c
> @@ -183,11 +183,14 @@ grn_array_create(grn_ctx *ctx, const char *path,
> uint32_t value_size, uint32_t f
> {
> grn_array *array;
> if (ctx && (array = GRN_MALLOC(sizeof(grn_array)))) {
> - if (!((flags & GRN_ARRAY_TINY) ?
> - tiny_array_init(array, ctx, path, value_size, flags) :
> - io_array_init(ctx, array, path, value_size, flags))) {
> + grn_rc rc;
> + if (flags & GRN_ARRAY_TINY)
> + rc = tiny_array_init(array, ctx, path, value_size, flags);
> + else
> + rc = io_array_init(ctx, array, path, value_size, flags);
> + if (!rc)
> return array;
> - }
> + ERR(rc, "failed to create array");
> GRN_FREE(array);
> }
> return NULL;
>
> grn_array_create()ではなくて、tiny_array_init()や
> io_array_init()でエラーを設定した方がよいかもしれませんが。。。
>
> --
> 須藤 功平 <kou****@clear*****>
>
> 株式会社クリアコード (http://www.clear-code.com/)
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>
--
morita