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 には各 カラムに設定する値を以下のような形式で指定する。

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

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



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

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)



465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
# File 'lib/groonga/record.rb', line 465

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)

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



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

def table
  @table
end

Instance Method Details

#==(other) ⇒ Object

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



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

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

#[](column_name) ⇒ Object

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



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

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:



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

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

#added?Boolean

Returns:

  • (Boolean)


407
408
409
# File 'lib/groonga/record.rb', line 407

def added?
  @added
end

#append(column_name, value) ⇒ Object

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



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

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

#as_jsonObject



310
311
312
313
314
315
316
317
318
319
# File 'lib/groonga/record.rb', line 310

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.



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

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

#averageFloat

The average of integer/float values in grouped records. It can be used when specifying :calc_target and :calc_types to Table#group.

Returns:

  • (Float)

    The average of integer/float values in grouped records.

Since:

  • 5.0.0



269
270
271
# File 'lib/groonga/record.rb', line 269

def average
  self["_avg"]
end

#clear_lockvoid

This method returns an undefined value.

Forces to clear lock of the table to which the record belongs.



372
373
374
# File 'lib/groonga/record.rb', line 372

def clear_lock
  @table.clear_lock
end

#columnsObject

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



296
297
298
# File 'lib/groonga/record.rb', line 296

def columns
  @table.columns
end

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

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



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

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

#deleteObject

Delete the record.



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

def delete
  if support_key?
    @table.delete(@id, :id => true)
  else
    @table.delete(@id)
  end
end

#eql?(other) ⇒ Boolean

#== と同じ。

Returns:

  • (Boolean)


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

def eql?(other)
  self == other
end

#hashObject

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



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

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

#have_column?(name) ⇒ Boolean

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

Returns:

  • (Boolean)


129
130
131
# File 'lib/groonga/record.rb', line 129

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

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

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



285
286
287
# File 'lib/groonga/record.rb', line 285

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

#index_column?(name) ⇒ Boolean

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

Returns:

  • (Boolean)


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

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

#keyObject

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

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



169
170
171
172
173
174
175
# File 'lib/groonga/record.rb', line 169

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 秒以内にロックを獲得できなかった場合は例外が発生する。



358
359
360
# File 'lib/groonga/record.rb', line 358

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

#locked?Boolean

Checks whether the table to which the record belongs is locked or not.

Returns:

  • (Boolean)

    true if the table to which the record belongs is locked, false otherwise.



381
382
383
# File 'lib/groonga/record.rb', line 381

def locked?
  @table.locked?
end

#maxInteger

The maximum integer value from integer values in grouped records. It can be used when specifying :calc_target and :calc_types to Table#group.

Returns:

  • (Integer)

    The maximum integer value from integer values in grouped records.

Since:

  • 5.0.0



236
237
238
# File 'lib/groonga/record.rb', line 236

def max
  self["_max"]
end

#minInteger

The minimum integer value from integer values in grouped records. It can be used when specifying :calc_target and :calc_types to Table#group.

Returns:

  • (Integer)

    The minimum integer value from integer values in grouped records.

Since:

  • 5.0.0



247
248
249
# File 'lib/groonga/record.rb', line 247

def min
  self["_min"]
end

#n_sub_recordsObject

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

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



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

def n_sub_records
  self["_nsubrecs"]
end

#prepend(column_name, value) ⇒ Object

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



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

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

#record_idObject

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

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



181
182
183
184
185
186
187
# File 'lib/groonga/record.rb', line 181

def record_id
  if support_key?
    key
  else
    id
  end
end

#record_raw_idObject Also known as: id

レコードのIDを返す。



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

def record_raw_id
  @id
end

#reference_column?(name) ⇒ Boolean

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

Returns:

  • (Boolean)


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

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

#rename(new_key) ⇒ Object

Renames key of the record. Only available for DoubleArrayTrie table.

Since:

  • 4.0.5



339
340
341
342
343
344
345
# File 'lib/groonga/record.rb', line 339

def rename(new_key)
  if @table.is_a?(DoubleArrayTrie)
    @table.update(@id, new_key, :id => true)
  else
    raise OperationNotSupported, "Only Groonga::DoubleArrayTrie table supports Groonga::Record#rename: <#{@table.class}>"
  end
end

#scalar_column?(name) ⇒ Boolean

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

Returns:

  • (Boolean)

Since:

  • 1.0.5



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

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

#scoreObject

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



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

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.



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

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

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

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



161
162
163
# File 'lib/groonga/record.rb', line 161

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

#sub_recordsSubRecords

Returns Sub records of the record.

Returns:



391
392
393
# File 'lib/groonga/record.rb', line 391

def sub_records
  SubRecords.new(self)
end

#sumInteger

The sum of integer values in grouped records. It can be used when specifying :calc_target and :calc_types to Table#group.

Returns:

  • (Integer)

    The sum of integer values in grouped records.

Since:

  • 5.0.0



258
259
260
# File 'lib/groonga/record.rb', line 258

def sum
  self["_sum"]
end

#support_key?Boolean

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

Returns:

  • (Boolean)


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

def support_key?
  @table.support_key?
end

#support_score?Boolean

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

Returns:

  • (Boolean)


210
211
212
# File 'lib/groonga/record.rb', line 210

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

#support_sub_records?Boolean

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

Returns:

  • (Boolean)


225
226
227
# File 'lib/groonga/record.rb', line 225

def support_sub_records?
  @table.support_sub_records?
end

#support_value?Boolean

created with value type, @false@ otherwise.

Returns:

  • (Boolean)

    @true@ if the table that the record belongs to is



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

def support_value?
  @table.support_value?
end

#to_json(*args) ⇒ String

Returns the record formatted as JSON.

Returns:

  • (String)

    the record formatted as JSON.



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

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

#unlock(options = {}) ⇒ Object

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

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



365
366
367
# File 'lib/groonga/record.rb', line 365

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

#valid_id?Boolean

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

Returns:

  • (Boolean)


386
387
388
# File 'lib/groonga/record.rb', line 386

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

#valueObject

レコードの値を返す。



274
275
276
# File 'lib/groonga/record.rb', line 274

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

#value=(value) ⇒ Object

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



279
280
281
# File 'lib/groonga/record.rb', line 279

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

#vector_column?(name) ⇒ Boolean

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

Returns:

  • (Boolean)

Since:

  • 1.0.5



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

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