Class: Groonga::Record

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

Defined Under Namespace

Classes: AttributeHashBuilder

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

tableid に対応するレコードを作成する。 values には各 カラムに設定する値を以下のような形式で指定する。

<pre> !!!ruby [

["カラム名", 値],
["カラム名", 値],
...,

] </pre>

Each value is set by #[]=. See #[]= how to set weight for a value.



41
42
43
44
45
46
47
48
49
50
# File 'lib/groonga/record.rb', line 41

def initialize(table, id, values=nil)
  @table = table
  @id = id
  @added = false
  if values
    values.each do |name, value|
      self[name] = value
    end
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (private)



387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
# File 'lib/groonga/record.rb', line 387

def method_missing(name, *args, &block)
  if /=\z/ =~ name.to_s
    base_name = $PREMATCH
    is_setter = true
  else
    base_name = name.to_s
    is_setter = false
  end
  _column = @table.column(base_name)
  if _column
    if is_setter
      _column.send("[]=", @id, *args, &block)
    else
      _column.send("[]", @id, *args, &block)
    end
  else
    super
  end
end

Instance Attribute Details

#tableObject (readonly)

レコードが所属するテーブル



26
27
28
# File 'lib/groonga/record.rb', line 26

def table
  @table
end

Instance Method Details

#==(other) ⇒ Object

recordother が同じテーブルに属していて、さらに、 同じレコードIDを持つなら true を返し、そうでなければ false を返す。



55
56
57
58
# File 'lib/groonga/record.rb', line 55

def ==(other)
  self.class == other.class and
    [table, id] == [other.table, other.id]
end

#[](column_name) ⇒ Object

このレコードの column_name で指定されたカラムの値を返す。



72
73
74
# File 'lib/groonga/record.rb', line 72

def [](column_name)
  @table.column_value(@id, column_name, :id => true)
end

#[]=(column_name, value) ⇒ Object #[]=(column_name, value_with_weight) ⇒ Object

Sets column value of the record.

Overloads:

  • #[]=(column_name, value) ⇒ Object

    Examples:

    Set a new value

    user["age"] = 29

    Parameters:

    • column_name (String)

      The column name.

    • value (Object)

      The column value. Weight of the value is 0.

  • #[]=(column_name, value_with_weight) ⇒ Object

    Examples:

    Set a new value with weight “2”

    user["tags"] = [{:value => "groonga", :weight => 2}]

    Parameters:

    • column_name (String)

      The column name.

    • value_with_weight (::Hash)

      The column value with weight.

    Options Hash (value_with_weight):

    • :value (Object) — default: nil

      The column value.

    • :weight (Integer or nil) — default: nil

      The weight for the value. You need to use vector column and weight supported index column for weight. See Table#set_column_value for details.

See Also:

  • Table#set_column_value


98
99
100
# File 'lib/groonga/record.rb', line 98

def []=(column_name, value)
  @table.set_column_value(@id, column_name, value, :id => true)
end

#added=(added) ⇒ Object



343
344
345
# File 'lib/groonga/record.rb', line 343

def added=(added)
  @added = added
end

#added?Boolean

Returns:

  • (Boolean)


338
339
340
# File 'lib/groonga/record.rb', line 338

def added?
  @added
end

#append(column_name, value) ⇒ Object

このレコードの column_name で指定されたカラムの値の最後に value を追加する。



104
105
106
# File 'lib/groonga/record.rb', line 104

def append(column_name, value)
  column(column_name).append(@id, value)
end

#as_jsonObject



259
260
261
262
263
264
265
266
267
268
# File 'lib/groonga/record.rb', line 259

def as_json
  accessor = AttributeHashBuilder.new(self) do |value|
    if value.is_a?(Time)
      value.iso8601
    else
      value
    end
  end
  accessor.build
end

#attributesObject

レコードが所属しているテーブルで定義されているインデックス 型のカラムでない全カラムを対象とし、カラムの名前をキーとし たこのレコードのカラムの値のハッシュを返す。

return same attributes object if duplicate records exist.



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

def attributes
  accessor = AttributeHashBuilder.new(self)
  accessor.build
end

#clear_lock(options = {}) ⇒ Object

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

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



305
306
307
# File 'lib/groonga/record.rb', line 305

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

#columnsObject

レコードが所属するテーブルの全てのカラムを返す。



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

def columns
  @table.columns
end

#decrement!(name, delta = nil) ⇒ Object

このレコードの name で指定されたカラムの値を delta だけ減 少する。 deltanil の場合は1減少する。



240
241
242
# File 'lib/groonga/record.rb', line 240

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

#deleteObject

レコードを削除する。



276
277
278
# File 'lib/groonga/record.rb', line 276

def delete
  @table.delete(@id)
end

#eql?(other) ⇒ Boolean

#== と同じ。

Returns:

  • (Boolean)


61
62
63
# File 'lib/groonga/record.rb', line 61

def eql?(other)
  self == other
end

#hashObject

同じテーブルの同じIDのレコードに対しては常に同じハッシュ 値を返す。



67
68
69
# File 'lib/groonga/record.rb', line 67

def hash
  @table.hash ^ @id.hash
end

#have_column?(name) ⇒ Boolean

名前が name のカラムがレコードの所属するテーブルで定義され ているなら true を返す。

Returns:

  • (Boolean)


122
123
124
# File 'lib/groonga/record.rb', line 122

def have_column?(name)
  not @table.column(normalize_column_name(name)).nil?
end

#increment!(name, delta = nil) ⇒ Object

このレコードの name で指定されたカラムの値を delta だけ増 加する。 deltanil の場合は1増加する。



234
235
236
# File 'lib/groonga/record.rb', line 234

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

#index_column?(name) ⇒ Boolean

名前が name のカラムが索引カラム ( IndexColumn )であるなら true を返す。

Returns:

  • (Boolean)


133
134
135
# File 'lib/groonga/record.rb', line 133

def index_column?(name)
  column(name).index?
end

#keyObject

レコードの主キーを返す。

record が所属するテーブルが Array の場合は常 に nil を返す。



162
163
164
165
166
167
168
# File 'lib/groonga/record.rb', line 162

def key
  if support_key?
    @key ||= @table.key(@id)
  else
    nil
  end
end

#lock(options = {}, &block) ⇒ Object

レコードが所属するテーブルをロックする。ロックに失敗した場 合は Groonga::ResourceDeadlockAvoided 例外が発生する。

ブロックを指定した場合はブロックを抜けたときにunlockする。

利用可能な option は以下の通り。

Parameters:

  • options (Hash) (defaults to: {})

    The name and value pairs. Omitted names are initialized as the default value.

Options Hash (options):

  • :timeout (Integer)

    The timeout ロックを獲得できなかった場合は :timeout 秒間ロックの獲得を試みる。 :timeout 秒以内にロックを獲得できなかった場合は例外が発生する。



291
292
293
# File 'lib/groonga/record.rb', line 291

def lock(options={}, &block)
  @table.lock(options.merge(:id => @id), &block)
end

#locked?(options = {}) ⇒ Boolean

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

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

Returns:

  • (Boolean)


312
313
314
# File 'lib/groonga/record.rb', line 312

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

#methods(include_inherited = true) ⇒ Object



327
328
329
330
331
# File 'lib/groonga/record.rb', line 327

def methods(include_inherited=true)
  original_methods = super
  return original_methods unless include_inherited
  (original_methods + dynamic_methods).uniq
end

#n_sub_recordsObject

主キーの値が同一であったレコードの件数を返す。検索結果とし て生成されたテーブルのみに定義される。

#support_sub_records? でこの値を利用でき るかがわかる。



212
213
214
# File 'lib/groonga/record.rb', line 212

def n_sub_records
  self["_nsubrecs"]
end

#prepend(column_name, value) ⇒ Object

このレコードの column_name で指定されたカラムの値の最初に value を追加する。



110
111
112
# File 'lib/groonga/record.rb', line 110

def prepend(column_name, value)
  column(column_name).prepend(@id, value)
end

#record_idObject

レコードを一意に識別するための情報を返す。

record が所属するテーブルが Array の場合はID を返し、それ以外の場合は主キーを返す。



174
175
176
177
178
179
180
# File 'lib/groonga/record.rb', line 174

def record_id
  if support_key?
    key
  else
    id
  end
end

#record_raw_idObject Also known as: id

レコードのIDを返す。



183
184
185
# File 'lib/groonga/record.rb', line 183

def record_raw_id
  @id
end

#reference_column?(name) ⇒ Boolean

名前が name のカラムが参照カラムであるなら true を返す。

Returns:

  • (Boolean)


127
128
129
# File 'lib/groonga/record.rb', line 127

def reference_column?(name)
  column(name).reference?
end

#respond_to?(name) ⇒ Boolean

Returns:

  • (Boolean)


334
335
336
# File 'lib/groonga/record.rb', line 334

def respond_to?(name)
  super or !@table.column(name.to_s.sub(/=\z/, '')).nil?
end

#scalar_column?(name) ⇒ Boolean

名前が name のカラムの値がスカラーであるなら true を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



147
148
149
# File 'lib/groonga/record.rb', line 147

def scalar_column?(name)
  column(name).scalar?
end

#scoreObject

レコードのスコア値を返す。検索結果として生成されたテーブル のみに定義される。



190
191
192
# File 'lib/groonga/record.rb', line 190

def score
  self["_score"]
end

#score=(new_score) ⇒ Object

Sets score. Score column exists only search result table.

Parameters:

  • new_score (Integer)

    The new score.



197
198
199
# File 'lib/groonga/record.rb', line 197

def score=(new_score)
  self["_score"] = new_score
end

#search(name, query, options = {}) ⇒ Object

名前が nameIndexColumn の search メソッドを呼ぶ。 queryoptions はそのメソッドにそのまま渡される。詳しく は IndexColumn#search を参照。



154
155
156
# File 'lib/groonga/record.rb', line 154

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

#sub_recordsSubRecords

Returns Sub records of the record.

Returns:



322
323
324
# File 'lib/groonga/record.rb', line 322

def sub_records
  SubRecords.new(self)
end

#support_key?Boolean

record が所属するテーブルで主キーを使える場合は true を返し、使えない場合は false を返す。

Returns:

  • (Boolean)


116
117
118
# File 'lib/groonga/record.rb', line 116

def support_key?
  @table.support_key?
end

#support_score?Boolean

#score が利用できる場合は true を 返す。

Returns:

  • (Boolean)


203
204
205
# File 'lib/groonga/record.rb', line 203

def support_score?
  @table.have_column?("_score") # TODO delegate to Table
end

#support_sub_records?Boolean

#n_sub_records が利用できる場合は true を 返す。

Returns:

  • (Boolean)


218
219
220
# File 'lib/groonga/record.rb', line 218

def support_sub_records?
  @table.support_sub_records?
end

#to_json(*args) ⇒ String

Returns the record formatted as JSON.

Returns:

  • (String)

    the record formatted as JSON.



271
272
273
# File 'lib/groonga/record.rb', line 271

def to_json(*args)
  as_json.to_json(*args)
end

#unlock(options = {}) ⇒ Object

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

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



298
299
300
# File 'lib/groonga/record.rb', line 298

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

#valid_id?Boolean

レコードが持つIDが有効なIDであれば true を返す。

Returns:

  • (Boolean)


317
318
319
# File 'lib/groonga/record.rb', line 317

def valid_id?
  @table.exist?(@id)
end

#valueObject

レコードの値を返す。



223
224
225
# File 'lib/groonga/record.rb', line 223

def value
  @table.value(@id, :id => true)
end

#value=(value) ⇒ Object

レコードの値を設定する。既存の値は上書きされる。



228
229
230
# File 'lib/groonga/record.rb', line 228

def value=(value)
  @table.set_value(@id, value, :id => true)
end

#vector_column?(name) ⇒ Boolean

名前が name のカラムの値がベクターであるなら true を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



140
141
142
# File 'lib/groonga/record.rb', line 140

def vector_column?(name)
  column(name).vector?
end