Class: Groonga::Record

Inherits:
Object
  • Object
show all
Defined in:
lib/groonga/record.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(table, id, values = nil) ⇒ Record

tableidに対応するレコードを作成する。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

#idObject (readonly)

レコードのID



23
24
25
# File 'lib/groonga/record.rb', line 23

def id
  @id
end

#tableObject (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

recordotherが同じ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

#attributesObject

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(options={})

レコードが所属するテーブルのロックを強制的に解除する。

利用可能なオプションは現在は無い。



255
256
257
# File 'lib/groonga/record.rb', line 255

def clear_lock(options={})
  @table.clear_lock(options.merge(:id => @id))
end

#columnsObject

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だけ減 少する。deltanilの場合は1減少する。



179
180
181
# File 'lib/groonga/record.rb', line 179

def decrement!(name, delta=nil)
  column(name).decrement!(@id, delta)
end

#deleteObject

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を返す。

Returns:

  • (Boolean)


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だけ増 加する。deltanilの場合は1増加する。



170
171
172
# File 'lib/groonga/record.rb', line 170

def increment!(name, delta=nil)
  column(name).increment!(@id, delta)
end

#keyObject

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(options={}, &block)
  @table.lock(options.merge(:id => @id), &block)
end

#locked?(options = {}) ⇒ Boolean

call-seq:

record.locked?(options={}) -> true/false

レコードが所属するテーブルがロックされていればtrueを返す。

利用可能なオプションは現在は無い。

Returns:

  • (Boolean)


265
266
267
# File 'lib/groonga/record.rb', line 265

def locked?(options={})
  @table.locked?(options.merge(:id => @id))
end

#n_sub_recordsObject

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を返す。

Returns:

  • (Boolean)


102
103
104
# File 'lib/groonga/record.rb', line 102

def reference_column?(name)
  column(name).range.is_a?(Groonga::Table)
end

#scoreObject

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メソッドを呼ぶ。 queryoptionsはそのメソッドにそのまま渡される。詳しく はGroonga::IndexColumn#searchを参照。



112
113
114
# File 'lib/groonga/record.rb', line 112

def search(name, query, options={})
  column(name).search(query, options)
end

#unlock(options = {}) ⇒ Object

call-seq:

record.unlock(options={})

レコードが所属するテーブルのロックを解除する。

利用可能なオプションは現在は無い。



245
246
247
# File 'lib/groonga/record.rb', line 245

def unlock(options={})
  @table.unlock(options.merge(:id => @id))
end

#valueObject

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