[groonga-dev,00307] Re: 配列に配列を格納する形式のloadコマンドの実装がドキュメントと食い違う。

Back to archive index

Ryo Onodera onode****@clear*****
2009年 12月 16日 (水) 15:14:40 JST


小野寺です。

1. ドキュメント通りの(1)が動くような仕様に変更する。

こちらの案を採用し、loadコマンドの不具合を修正した上で、dumpからは、各レ
コードはJSONのオブジェクト形式({...})ではなく、配列形式([...])で出力する
ようにし、実装が終わりました。私のgroongaリポジトリにpushした次のコミッ
トがこの修正に該当します。

make load command behave as ducmented when records passed as arrays 
http://github.com/ryoqun/groonga/commit/c012430bcfa2c07a56e3288bb8908c9ba36d24fd

dump records as arrays instead of objects
http://github.com/ryoqun/groonga/commit/11da1fc968f405725acaaade2da3b89145545d9c

15日の打ち合わせで決まったとおり、本家のgroongaリポジトリにはまだpushし
ないことにします。このコミットをレビューしていただき、もし問題が無いよう
ならば、pullしていただけるか、あるいは私が本家にpushします。

それではよろしくお願いします。

On Tue, 2009-12-15 at 11:25 +0900, Ryo Onodera wrote:
> 小野寺です。
> 
> 分かりました。
> 
> On Mon, 2009-12-14 at 21:20 +0900, morit****@razil***** wrote:
> > 森です。
> > 
> > ご指摘ありがとうございます。
> > 
> >   2. 現在の実装通りの(4)の実行結果が(2),(3)でも動くように修正し、ドキュメ
> >   ントを修正する。
> > 
> > こちらの方向で対応したいと思います。
> > 
> > >>> Ryo Onodera さんは書きました:
> > > 小野寺です。
> > > 
> > > 現在、dumpコマンドはloadコマンドにJSONのオブジェクトの配
> > > 列([{...},{...},...])を渡しています。この形式だと各レコードごとにカラム
> > > 名を付随させなければならないため、dumpの出力結果が幾分か冗長になります。
> > > そのため配列に配列を格納する形式でloadコマンドに出力してやろうとしたので
> > > すが、その前に修正しなければならない箇所が判明しました。
> > > 
> > > [[カラム名1, カラム名2,..], [カラム値1, カラム値2,..], [カラム値1, カラム値2,..],..]
> > > 
> > > とドキュメントには記載されています。
> > > 
> > > この表記だと最初のカラム名の配列の要素数と次以降に続くカラム値の配列の要
> > > 素数が等しくなければならないような印象を受けました。しかし、実際は、
> > > GRN_TABLE_HASH_KEY又はGRN_TABLE_PAT_KEYの場合、カラム値の配列の要素数は
> > > カラム名の配列の要素数より一つ大きくなくてはなりません。
> > > 
> > > lib/db.c:10792      if (ndata == ncols + 1) {
> > > 
> > > そのカラム名と対応していないカラム値はそのテーブルの主キーとなります。さ
> > > らにその値は常にカラム値の配列の先頭の要素に位置しなければならず、カラム
> > > 値の配列の自由な位置に置くことができません。
> > > 
> > > lib/db.c:10793        id = loader_add(ctx, value);
> > > lib/db.c:10794        ndata--;
> > > lib/db.c:10795        value++;
> > > 
> > > 例としてドキュメントに準拠した次の入力は先頭の"_key"が"_key"カラムの値と
> > > してloadされてしまいます。
> > > 
> > > (1) [["_key"],["groonga"],["ruby"],["ubuntu"]]
> > > 
> > > それで、次のようにカラム名の配列を空にしても正しく動きません。
> > > 
> > > (2) [[],["groonga"],["ruby"],["ubuntu"]]
> > > 
> > > カラムを一個定義しても動きません。
> > > 
> > > (3) [["column1"],["key1","value1",],["key2","value2"]]
> > > 
> > > 最終的には、プログラムで意図されている挙動が正しく動くには二個以上のカラ
> > > ムが必要です。
> > > 
> > > (4) [["column1","column2"],["key1","value1-1","value1-2"],["key2","value2-1","value2-2"]]
> > > 
> > > このような状態なので、このバグを直すべきかと思いますが、二つの案が考えら
> > > れます。
> > > 
> > > 1. ドキュメント通りの(1)が動くような仕様に変更する。
> > > 2. 現在の実装通りの(4)の実行結果が(2),(3)でも動くように修正し、ドキュメ
> > > ントを修正する。
> > > 
> > > -- 
> > > 小野寺 諒 <onode****@clear*****>
> > > 株式会社クリアコード (http://www.clear-code.com/)
> > > 
> > > _______________________________________________
> > > groonga-dev mailing list
> > > groon****@lists*****
> > > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> > > 
> > --
> > morita
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev




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