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