[groonga-dev,00009] Re: GRN_OBJ_TABLE_NO_KEYと永続テーブル

Back to archive index

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




groonga-dev メーリングリストの案内
Back to archive index