[groonga-dev,00362] rroongaでcreateしたテーブルにレコードが挿入出来ない

Back to archive index

ono_matope matop****@gmail*****
2010年 9月 12日 (日) 04:35:43 JST


お世話になっております、小野マトペです。

先ほど、rroonga検証中に、
Groonga::PatriciaTrie.create でcreateしたPatriciaTrieテーブルへのレコードの挿入が失敗する、
挿入出来たものも_keyが0になり、なおかつ_keyが非ユニーク
という現象が発生しました。

以下に再現コードを添付します。

tmp_rroonga.rb
===========================================================
# -*- coding: utf-8 -*-
require 'groonga'

$dbpath = "testdb";
begin
  Groonga::Context.default_options = {:encoding => :utf8}
  Groonga::Database.create(:path => $dbpath )
rescue => exc 
  p exc 
end

tweets = Groonga::PatriciaTrie.create( :name => "Tweets", :key_type => "UInt32", :persistent => true )
tweets.define_column( "text", "ShortText")
tweets.add(5, :text => "主キーは5です。")
tweets.add(6, :text => "主キーは6です。")
tweets.add(7, :text => "主キーは7です。")
tweets.add(8, :text => "主キーは8です。")
tweets.add(20,:text => "主キーは20です。")
tweets.add(30)

p tweets.size
tweets.each{|i|
  p "_id:"+i["_id"].to_s+", _key:"+i["_key"].to_s+", text:"+i["text"].to_s
}
============================================================

結果
============================================================
2
"_id:1, _key:0, text:主キーは5です。"
"_id:2, _key:0, text:主キーは20です。"
============================================================

この現象は、主キー型がUInt64, UInt32, Int64,Int32 の時に確認され、ShortTextの時に確認されませんでした。
また、Hashテーブルの時には起こりませんでした。

一方、createをrroonga経由ではなくgroongaコマンドライン側で行った場合、意図通りの結果が得られました。
以下に成功時の再現コードを添付します。

table_create Tweets --flags TABLE_PAT_KEY --key_type UInt32
column_create Tweets text --flags COLUMN_SCALAR --type ShortText 

insert_rroonga.rb
===========================================================
# -*- coding: utf-8 -*-
require 'groonga'

$dbpath = "testdb";
begin
  Groonga::Context.default_options = {:encoding => :utf8}
  db = Groonga::Database.open( $dbpath )
rescue => exc 
  p exc 
end

tweets = Groonga["Tweets"]
tweets.add(5, :text => "主キーは5です。")
tweets.add(6, :text => "主キーは6です。")
tweets.add(7, :text => "主キーは7です。")
tweets.add(8, :text => "主キーは8です。")
tweets.add(20,:text => "主キーは20です。")
tweets.add(30)

p tweets.size
tweets.each{|i|
  p "_id:"+i["_id"].to_s+", _key:"+i["_key"].to_s+", text:"+i["text"].to_s
}
===========================================================

結果
===========================================================
6
"_id:1, _key:5, text:主キーは5です。"
"_id:2, _key:6, text:主キーは6です。"
"_id:3, _key:7, text:主キーは7です。"
"_id:4, _key:8, text:主キーは8です。"
"_id:5, _key:20, text:主キーは20です。"
"_id:6, _key:30, text:"
===========================================================

rroongaの使い方がどこか間違っているでしょうか?ご指摘いただければ幸いです。
環境は
CentOS 5.2 ruby-1.9.2 groonga-1.0.1 rroonga-1.0.0
です。




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