[groonga-dev,01524] rroongaのUInt8, UInt16について

Back to archive index

Masaharu YOSHIOKA yoshi****@ist*****
2013年 7月 9日 (火) 14:04:34 JST


北大の吉岡と申します。

rroongaを利用しているのですが、UInt8,Uint16を利用した場合に、予想外の
挙動を示しますので、報告いたします。

まず、利用しているソフトウェアのバージョンは以下の通りです。

> ruby -v
ruby 1.9.3p429 (2013-05-15) [x86_64-linux]
> groonga --version
groonga 3.0.4 [linux-gnu,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,zlib,lzo,epoll]
> gem list rroonga
*** LOCAL GEMS ***
rroonga (3.0.4, 3.0.2)

ここで、以下のようなコードを実行した際に、
データの数が多くなった段階で、UInt8,UInt16などの返り値がおかしくなりま
す。

具体的には、_idにひきずられているようで、UInt8の場合は、256(2^8)以上、
UInt16の場合は、65536(2^16)以上で、本来の値の範囲以外の値が出力されま
す。

#groongaで直接データを見た場合には、適切な値が設定されていることが
#確認できています。 

IDが 65536 の場合には、Uint8でもUIt16で、共に0を設定しても、同じく、
65536という値が返ることから、一貫して、_idの上位ビットの値が追加されて
いるように思われます。

データの数を増やしていないので、何とも言えませんが、もしかすると、
UInt32も2^32個のデータを登録すると、おかしな値を出すのかも知れません。

こちらのソフトウェアのバージョンなどによる問題かもしれませんが、ご確認
のほど、よろしくお願いします。

#!/usr/local/bin/ruby
# encoding: utf-8

require 'rubygems'
require 'groonga'

dbName = ARGV.shift or exit

Groonga::Context.default_options = {:encoding => :utf8}
Groonga::Database.create(:path => dbName)
Groonga::Schema.create_table("test", {:type => :hash} ){|table|
  table.unsigned_integer8("int8")
  table.unsigned_integer8("int82")
  table.unsigned_integer16("int16")
  table.unsigned_integer32("int32")
}

testTable = Groonga["test"]
(0..70000).each{|i|
  testTable.add("ABC#{i}", :int8 => i % 256 , :int82 => 1, :int16 => i % 65536, :int32 => i)
}
testTable.select.each{|elem|
  puts [elem._key, elem.int8, elem.int8 % 256, elem.int82, elem.int82 % 256, elem.int16, elem.int16 % 65536, elem.int32].join (",")
}

北海道大学大学院情報科学研究科コンピュータサイエンス専攻 准教授
〒060-0814 北海道札幌市北区北14条西9丁目
吉岡 真治		e-mail: yoshi****@ist*****
           URL: http://www-kb.ist.hokudai.ac.jp/~yoshioka/




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