Class: Groonga::Record
- Inherits:
-
Object
- Object
- Groonga::Record
- Defined in:
- lib/groonga/record.rb
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
レコードのID.
-
#table ⇒ Object
readonly
レコードが所属するテーブル.
Instance Method Summary collapse
-
#==(other) ⇒ Object
call-seq: record == other -> true/false.
-
#[](column_name) ⇒ Object
call-seq: record -> 値.
-
#[]=(column_name, value) ⇒ Object
call-seq: record = 値.
-
#append(column_name, value) ⇒ Object
call-seq: record.append(column_name, value).
-
#attributes ⇒ Object
call-seq: attributes -> Hash.
-
#clear_lock(options = {}) ⇒ Object
call-seq: record.clear_lock(options={}).
-
#columns ⇒ Object
call-seq: record.columns -> Groonga::Columnの配列.
-
#decrement!(name, delta = nil) ⇒ Object
call-seq: record.decrement!(name, delta=nil).
-
#delete ⇒ Object
call-seq: record.delete.
-
#have_column?(name) ⇒ Boolean
call-seq: record.have_column?(name) -> true/false.
-
#increment!(name, delta = nil) ⇒ Object
call-seq: record.increment!(name, delta=nil).
-
#initialize(table, id, values = nil) ⇒ Record
constructor
tableのidに対応するレコードを作成する。valuesには各 カラムに設定する値を以下のような形式で指定する。.
-
#key ⇒ Object
call-seq: record.key -> 主キー.
-
#lock(options = {}, &block) ⇒ Object
call-seq: record.lock(options={}) record.lock(options={}) ….
-
#locked?(options = {}) ⇒ Boolean
call-seq: record.locked?(options={}) -> true/false.
-
#n_sub_records ⇒ Object
call-seq: record.n_sub_records -> 件数.
-
#prepend(column_name, value) ⇒ Object
call-seq: record.prepend(column_name, value).
-
#reference_column?(name) ⇒ Boolean
call-seq: record.reference_column?(name) -> true/false.
-
#score ⇒ Object
call-seq: record.score -> スコア値.
-
#search(name, query, options = {}) ⇒ Object
call-seq: record.search(name, query, options={}) -> Groonga::Hash.
-
#unlock(options = {}) ⇒ Object
call-seq: record.unlock(options={}).
-
#value ⇒ Object
call-seq: record.value -> 値.
-
#value=(value) ⇒ Object
call-seq: record.value = 値.
Constructor Details
#initialize(table, id, values = nil) ⇒ Record
tableのidに対応するレコードを作成する。valuesには各 カラムに設定する値を以下のような形式で指定する。
[
["カラム名", 値],
["カラム名", 値],
...,
]
32 33 34 35 36 37 38 39 40 |
# File 'lib/groonga/record.rb', line 32 def initialize(table, id, values=nil) @table = table @id = id if values values.each do |name, value| self[name] = value end end end |
Instance Attribute Details
#table ⇒ Object (readonly)
レコードが所属するテーブル
21 22 23 |
# File 'lib/groonga/record.rb', line 21 def table @table end |
Instance Method Details
#==(other) ⇒ Object
call-seq:
record == other -> true/false
recordとotherが同じgroongaのレコードならtrue
を返し、 そうでなければfalse
を返す。
47 48 49 50 |
# File 'lib/groonga/record.rb', line 47 def ==(other) self.class == other.class and [table, id] == [other.table, other.id] end |
#[](column_name) ⇒ Object
call-seq:
record[column_name] -> 値
このレコードのcolumn_nameで指定されたカラムの値を返す。
56 57 58 |
# File 'lib/groonga/record.rb', line 56 def [](column_name) @table.column_value(@id, column_name, :id => true) end |
#[]=(column_name, value) ⇒ Object
call-seq:
record[column_name] = 値
このレコードのcolumn_nameで指定されたカラムの値を設定す る。
65 66 67 |
# File 'lib/groonga/record.rb', line 65 def []=(column_name, value) @table.set_column_value(@id, column_name, value, :id => true) end |
#append(column_name, value) ⇒ Object
call-seq:
record.append(column_name, value)
このレコードのcolumn_nameで指定されたカラムの値の最後に valueを追加する。
74 75 76 |
# File 'lib/groonga/record.rb', line 74 def append(column_name, value) column(column_name).append(@id, value) end |
#attributes ⇒ Object
call-seq:
attributes -> Hash
レコードが所属しているテーブルで定義されているインデックス 型のカラムでない全カラムを対象とし、カラムの名前をキーとし たこのレコードのカラムの値のハッシュを返す。
197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/groonga/record.rb', line 197 def attributes attributes = {"id" => id} _key = key attributes["key"] = _key if _key table_name = @table.name columns.each do |column| next if column.is_a?(Groonga::IndexColumn) value = column[@id] # TODO: support recursive reference. value = value.attributes if value.is_a?(Groonga::Record) attributes[column.local_name] = value end attributes end |
#clear_lock(options = {}) ⇒ Object
call-seq:
record.clear_lock(={})
レコードが所属するテーブルのロックを強制的に解除する。
利用可能なオプションは現在は無い。
255 256 257 |
# File 'lib/groonga/record.rb', line 255 def clear_lock(={}) @table.clear_lock(.merge(:id => @id)) end |
#columns ⇒ Object
call-seq:
record.columns -> Groonga::Columnの配列
レコードが所属するテーブルの全てのカラムを返す。
187 188 189 |
# File 'lib/groonga/record.rb', line 187 def columns @table.columns end |
#decrement!(name, delta = nil) ⇒ Object
call-seq:
record.decrement!(name, delta=nil)
このレコードのnameで指定されたカラムの値をdeltaだけ減 少する。deltaがnil
の場合は1減少する。
179 180 181 |
# File 'lib/groonga/record.rb', line 179 def decrement!(name, delta=nil) column(name).decrement!(@id, delta) end |
#delete ⇒ Object
call-seq:
record.delete
レコードを削除する。
216 217 218 |
# File 'lib/groonga/record.rb', line 216 def delete @table.delete(@id) end |
#have_column?(name) ⇒ Boolean
call-seq:
record.have_column?(name) -> true/false
名前がnameのカラムがレコードの所属するテーブルで定義され ているならtrue
を返す。
92 93 94 95 96 |
# File 'lib/groonga/record.rb', line 92 def have_column?(name) column(name).is_a?(Groonga::Column) rescue Groonga::NoSuchColumn false end |
#increment!(name, delta = nil) ⇒ Object
call-seq:
record.increment!(name, delta=nil)
このレコードのnameで指定されたカラムの値をdeltaだけ増 加する。deltaがnil
の場合は1増加する。
170 171 172 |
# File 'lib/groonga/record.rb', line 170 def increment!(name, delta=nil) column(name).increment!(@id, delta) end |
#key ⇒ Object
call-seq:
record.key -> 主キー
レコードの主キーを返す。
recordが所属するテーブルがGroonga:::Arrayの場合は常 にnil
を返す。
123 124 125 126 127 128 129 |
# File 'lib/groonga/record.rb', line 123 def key if @table.is_a?(Groonga::Array) nil else @key ||= @table.key(@id) end end |
#lock(options = {}, &block) ⇒ Object
call-seq:
record.lock(options={})
record.lock(options={}) {...}
レコードが所属するテーブルをロックする。ロックに失敗した場 合はGroonga::ResourceDeadlockAvoided例外が発生する。
ブロックを指定した場合はブロックを抜けたときにunlockする。
利用可能なオプションは以下の通り。
- :timeout
-
ロックを獲得できなかった場合は:timeout秒間ロックの獲 得を試みる。:timeout秒以内にロックを獲得できなかった 場合は例外が発生する。
235 236 237 |
# File 'lib/groonga/record.rb', line 235 def lock(={}, &block) @table.lock(.merge(:id => @id), &block) end |
#locked?(options = {}) ⇒ Boolean
call-seq:
record.locked?(options={}) -> true/false
レコードが所属するテーブルがロックされていればtrue
を返す。
利用可能なオプションは現在は無い。
265 266 267 |
# File 'lib/groonga/record.rb', line 265 def locked?(={}) @table.locked?(.merge(:id => @id)) end |
#n_sub_records ⇒ Object
call-seq:
record.n_sub_records -> 件数
主キーの値が同一であったレコードの件数を返す。検索結果とし て生成されたテーブルのみに定義される。
145 146 147 |
# File 'lib/groonga/record.rb', line 145 def n_sub_records self["._nsubrecs"] end |
#prepend(column_name, value) ⇒ Object
call-seq:
record.prepend(column_name, value)
このレコードのcolumn_nameで指定されたカラムの値の最初に valueを追加する。
83 84 85 |
# File 'lib/groonga/record.rb', line 83 def prepend(column_name, value) column(column_name).prepend(@id, value) end |
#reference_column?(name) ⇒ Boolean
call-seq:
record.reference_column?(name) -> true/false
名前がnameのカラムが参照カラムであるならtrue
を返す。
102 103 104 |
# File 'lib/groonga/record.rb', line 102 def reference_column?(name) column(name).range.is_a?(Groonga::Table) end |
#score ⇒ Object
call-seq:
record.score -> スコア値
レコードのスコア値を返す。検索結果として生成されたテーブル のみに定義される。
136 137 138 |
# File 'lib/groonga/record.rb', line 136 def score self["._score"] end |
#search(name, query, options = {}) ⇒ Object
call-seq:
record.search(name, query, options={}) -> Groonga::Hash
名前がnameのGroonga::IndexColumnのsearchメソッドを呼ぶ。 queryとoptionsはそのメソッドにそのまま渡される。詳しく はGroonga::IndexColumn#searchを参照。
112 113 114 |
# File 'lib/groonga/record.rb', line 112 def search(name, query, ={}) column(name).search(query, ) end |
#unlock(options = {}) ⇒ Object
call-seq:
record.unlock(={})
レコードが所属するテーブルのロックを解除する。
利用可能なオプションは現在は無い。
245 246 247 |
# File 'lib/groonga/record.rb', line 245 def unlock(={}) @table.unlock(.merge(:id => @id)) end |
#value ⇒ Object
call-seq:
record.value -> 値
レコードの値を返す。
153 154 155 |
# File 'lib/groonga/record.rb', line 153 def value @table.value(@id, :id => true) end |
#value=(value) ⇒ Object
call-seq:
record.value = 値
レコードの値を設定する。既存の値は上書きされる。
161 162 163 |
# File 'lib/groonga/record.rb', line 161 def value=(value) @table.set_value(@id, value, :id => true) end |