Class: Groonga::Column

Inherits:
Object
  • Object
show all
Includes:
Flushable
Defined in:
ext/groonga/rb-grn-column.c,
lib/groonga/column.rb,
ext/groonga/rb-grn-column.c

Overview

テーブルに情報を付加するためのオブジェクト。テーブルに複 数のカラムを定義することによりレコード毎に複数の情報を付 加することができる。

カラムには大きく分けて3種類ある。

  • FixSizeColumn := 固定長のデータを格納するカラム。 =:
  • VariableSizeColumn := 可変長のデータを格納するカラム。 =:
  • IndexColumn := 転置インデックスを格納するカラム。全文検索や参照元レコー ドの検索を行う場合はこのカラムを使用する。 =:

固定長データ用カラム・可変長データ用カラムは1つのデータだ けを格納するか複数のデータを格納するかを選ぶことができる。 1つのデータの場合はスカラ値、複数のデータの場合はスカラー 値を格納するという。

カラムは名前を持ち、1つのテーブルでは同じカラム名を持つカ ラムを複数定義することはできない。

Direct Known Subclasses

DataColumn, IndexColumn

Instance Method Summary collapse

Methods included from Flushable

#flush

Methods inherited from Object

#==, #[], #[]=, #accessor?, #append, #builtin?, #close, #closed?, #column?, #dirty?, #domain, #function_procedure?, #id, #inspect, #key_accessor?, #last_modified, #name, #path, #persistent?, #prepend, #procedure?, #range, #remove, #scorer_procedure?, #selector_only_procedure?, #selector_procedure?, #table?, #temporary?, #touch, #unlink, #window_function_procedure?

Instance Method Details

#clear_lockvoid

Forces to clear lock of the column.

This method returns an undefined value.



512
513
514
515
516
517
518
519
520
521
522
523
524
525
# File 'ext/groonga/rb-grn-column.c', line 512

static VALUE
rb_grn_column_clear_lock (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    grn_obj_clear_lock(context, column);

    return Qnil;
}

#disk_usageObject



20
21
22
23
# File 'lib/groonga/column.rb', line 20

def disk_usage
  measurer = StatisticMeasurer.new
  measurer.measure_disk_usage(path)
end

#find_indexes(options = {}) ⇒ Array<Groonga::Index>

Return indexes on column. If operator is specified, indexes that can executes the operator are only returned. Otherwise, all indexes are returned.

Index means that index column and section.

Returns Target indexes on column.

Parameters:

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

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

Options Hash (options):

  • :operator (Object) — default: nil

    The operator that should be executable by indexes. nil means that all operators.

Returns:

Since:

  • 6.0.0



734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
# File 'ext/groonga/rb-grn-column.c', line 734

static VALUE
rb_grn_column_find_indexes (int argc, VALUE *argv, VALUE self)
{
    VALUE rb_options;
    VALUE rb_operator;
    grn_ctx *context;
    grn_obj *column;
    grn_index_datum *index_data = NULL;
    int i, n_indexes;
    VALUE rb_indexes;

    rb_scan_args(argc, argv, "01", &rb_options);
    rb_grn_scan_options(rb_options,
                        "operator", &rb_operator,
                        NULL);

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                              NULL, NULL,
                              NULL, NULL, NULL);

    if (NIL_P(rb_operator)) {
        n_indexes = grn_column_get_all_index_data(context, column, NULL, 0);
        if (n_indexes == 0)
            return rb_ary_new();

        index_data = xmalloc(sizeof(grn_index_datum) * n_indexes);
        n_indexes = grn_column_get_all_index_data(context, column,
                                                  index_data, n_indexes);
    } else {
        grn_operator operator;
        operator = RVAL2GRNOPERATOR(rb_operator);
        n_indexes = grn_column_find_index_data(context, column, operator,
                                               NULL, 0);
        if (n_indexes == 0)
            return rb_ary_new();

        index_data = xmalloc(sizeof(grn_index_datum) * n_indexes);
        n_indexes = grn_column_find_index_data(context, column, operator,
                                               index_data, n_indexes);
    }

    rb_indexes = rb_ary_new_capa(n_indexes);
    for (i = 0; i < n_indexes; i++) {
        VALUE rb_index_column;
        VALUE rb_section;
        rb_index_column = GRNOBJECT2RVAL(Qnil,
                                         context,
                                         index_data[i].index,
                                         GRN_FALSE);
        rb_section = UINT2NUM(index_data[i].section);
        rb_ary_push(rb_indexes, rb_grn_index_new(rb_index_column, rb_section));
        grn_obj_unlink(context, index_data[i].index);
    }
    xfree(index_data);
    return rb_indexes;
}

#index?Boolean Also known as: index_column?

columnIndexColumn の場合は +true+ を返し、 そうでない場合は +false+ を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
# File 'ext/groonga/rb-grn-column.c', line 619

static VALUE
rb_grn_column_index_p (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    if (column->header.type == GRN_COLUMN_INDEX) {
        return Qtrue;
    } else {
        return Qfalse;
    }
}

#indexes(operator = nil) ⇒ Array<Groonga::IndexColumn>

Deprecated.

since 6.0.0. Use #find_indexes instead.

Returns Indexes on column which can execute operator.

Parameters:

Returns:

Since:

  • 1.0.9



31
32
33
34
35
36
# File 'lib/groonga/column.rb', line 31

def indexes(operator=nil)
  operator ||= Operator::MATCH
  find_indexes(:operator => operator).collect do |index|
    index.column
  end
end

#local_nameObject

テーブル名を除いたカラム名を返す。

Examples:

items = Groonga::Array.create(:name => "Items")
title = items.define_column("title", "ShortText")
title.name # => "Items.title"
title.local_name # => "title"


167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'ext/groonga/rb-grn-column.c', line 167

static VALUE
rb_grn_column_get_local_name (VALUE self)
{
    RbGrnColumn *rb_grn_column;
    grn_ctx *context = NULL;
    grn_obj *column;
    VALUE rb_name;
    char *name;
    int name_size;

    rb_grn_column = SELF(self);
    rb_grn_object_deconstruct(RB_GRN_OBJECT(rb_grn_column), &column, &context,
                              NULL, NULL,
                              NULL, NULL);
    name_size = grn_column_name(context, column, NULL, 0);
    if (name_size == 0)
        return Qnil;

    name = xmalloc(name_size);
    grn_column_name(context, column, name, name_size);
    rb_name = rb_str_new(name, name_size);
    xfree(name);

    return rb_name;
}

#lock(options = {}) ⇒ Object #lock(options = {}) { ... } ⇒ Object

column をロックする。ロックに失敗した場合は ResourceDeadlockAvoided 例外が発生する。

Overloads:

  • #lock(options = {}) ⇒ Object

    Parameters:

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

      利用可能なオプションは以下の通り。

    Options Hash (options):

    • :timeout (Object)

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

    • :id (Object)

      _:id_で指定したレコードをロックする。(注: groonga側が 未実装のため、現在は無視される)

  • #lock(options = {}) { ... } ⇒ Object

    Parameters:

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

      利用可能なオプションは以下の通り。

    Options Hash (options):

    • :timeout (Object)

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

    • :id (Object)

      _:id_で指定したレコードをロックする。(注: groonga側が 未実装のため、現在は無視される)

    Yields:

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



468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
# File 'ext/groonga/rb-grn-column.c', line 468

static VALUE
rb_grn_column_lock (int argc, VALUE *argv, VALUE self)
{
    grn_id id = GRN_ID_NIL;
    grn_ctx *context;
    grn_obj *column;
    int timeout = 0;
    grn_rc rc;
    VALUE options, rb_timeout, rb_id;

    rb_scan_args(argc, argv, "01",  &options);

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    rb_grn_scan_options(options,
                        "timeout", &rb_timeout,
                        "id", &rb_id,
                        NULL);

    if (!NIL_P(rb_timeout))
        timeout = NUM2UINT(rb_timeout);

    if (!NIL_P(rb_id))
        id = NUM2UINT(rb_id);

    rc = grn_obj_lock(context, column, id, timeout);
    rb_grn_context_check(context, self);
    rb_grn_rc_check(rc, self);

    if (rb_block_given_p()) {
        return rb_ensure(rb_yield, Qnil, rb_grn_column_unlock_ensure, self);
    } else {
        return Qnil;
    }
}

#locked?Boolean

Checks whether the column is locked or not.

Returns true if the column is locked, false otherwise.

Returns:

  • (Boolean)

    true if the column is locked, false otherwise.

Returns:

  • (Boolean)


533
534
535
536
537
538
539
540
541
542
543
544
# File 'ext/groonga/rb-grn-column.c', line 533

static VALUE
rb_grn_column_locked_p (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    return CBOOL2RVAL(grn_obj_is_locked(context, column));
}

#reference?Boolean Also known as: reference_column?

column の値がテーブルのレコードとなる場合は +true+ を返し、 そうでない場合は +false+ を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
# File 'ext/groonga/rb-grn-column.c', line 554

static VALUE
rb_grn_column_reference_p (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;
    grn_id range_id;
    grn_obj *range;
    unsigned short int type;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    range_id = grn_obj_get_range(context, column);
    range = grn_ctx_at(context, range_id);
    type = range->header.type;
    grn_obj_unlink(context, range);
    switch (type) {
      case GRN_TABLE_HASH_KEY:
      case GRN_TABLE_PAT_KEY:
      case GRN_TABLE_NO_KEY:
        return Qtrue;
      default:
        return Qfalse;
    }
}

#rename(name) ⇒ Object

Renames the column to name.

Parameters:

  • name (String)

    the new name

Since:

  • 1.3.0



797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
# File 'ext/groonga/rb-grn-column.c', line 797

static VALUE
rb_grn_column_rename (VALUE self, VALUE rb_name)
{
    int rc;
    grn_ctx *context;
    grn_obj *column;
    char *name;
    int name_size;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                              NULL, NULL,
                              NULL, NULL, NULL);

    name = StringValueCStr(rb_name);
    name_size = RSTRING_LEN(rb_name);

    rc = grn_column_rename(context, column, name, name_size);
    rb_grn_context_check(context, self);
    rb_grn_rc_check(rc, self);
    rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(self)),
                                 name, name_size);
    return self;
}

#scalar?Boolean

column がスカラーカラムの場合は +true+ を返し、 そうでない場合は +false+ を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
# File 'ext/groonga/rb-grn-column.c', line 673

static VALUE
rb_grn_column_scalar_p (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;
    grn_column_flags flags;
    grn_column_flags column_type;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    switch (column->header.type) {
    case GRN_COLUMN_FIX_SIZE:
        return Qtrue;
    case GRN_COLUMN_VAR_SIZE:
        flags = grn_column_get_flags(context, column);
        column_type = (flags & GRN_OBJ_COLUMN_TYPE_MASK);
        return CBOOL2RVAL(column_type == GRN_OBJ_COLUMN_SCALAR);
    default:
        return Qfalse;
    }
}

#select(options) {|record| ... } ⇒ Groonga::Hash #select(query, options) ⇒ Groonga::Hash #select(expression, options) ⇒ Groonga::Hash

カラムが所属するテーブルからブロックまたは文字列で指定し た条件にマッチするレコードを返す。返されたテーブルには +expression+ という特異メソッドがあり、指定した条件を表し ている Expression を取得できる。 Expression#snippet を使うことにより、指定した条件 用のスニペットを簡単に生成できる。

Examples:

Shows texts around “Groonga”

results = description_column.select do |column|
  column =~ "Groonga"
end
snippet = results.expression.snippet([["<em>", "</em>"]])
results.each do |record|
  puts "#{record['name']}の説明文の中で「Groonga」を含む部分"
  snippet.execute(record["description"]).each do |snippet|
    puts "---"
    puts "#{snippet}..."
    puts "---"
  end
end

# Sample output:
#
# Rroongaの説明文の中で「Groonga」を含む部分
# ---
# Rroongaは<em>Groonga</em>のいわゆるDB-APIの層の...
# ---

Overloads:

  • #select(options) {|record| ... } ⇒ Groonga::Hash

    Parameters:

    • options (::Hash)

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

    Options Hash (options):

    • :operator (Object) — default: Groonga::Operator::OR

      マッチしたレコードをどのように扱うか。指定可能な値は以 下の通り。

      • Groonga::Operator::OR := マッチしたレコードを追加。すでにレコードが追加され ている場合は何もしない。 =:
      • Groonga::Operator::AND := マッチしたレコードのスコアを増加。マッチしなかった レコードを削除。 =:
      • Groonga::Operator::AND_NOT := マッチしたレコードを削除。 =:
      • Groonga::Operator::ADJUST := マッチしたレコードのスコアを増加。 =:
    • :result (Object)

      検索結果を格納するテーブル。マッチしたレコードが追加さ れていく。省略した場合は新しくテーブルを作成して返す。

    • :name (Object)

      条件の名前。省略した場合は名前を付けない。

    • :syntax (Object) — default: :query

      query の構文。

      参考: Expression#parse .

    • :allow_pragma (Object)

      query構文時にプラグマを利用するかどうか。省略した場合は 利用する。

      参考: Expression#parse .

    • :allow_column (Object)

      The allow_column query構文時にカラム指定を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_update (Object)

      script構文時に更新操作を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_leading_not (Object)

      指定語句の先頭に-を付けることで指定した語句を含まないレコードの 検索を有効にするかどうかを指定する。省略した場合は無効にする。

      参考: Expression#parse .

    Yield Parameters:

    • record (Groonga::Record)

      検索条件を指定するのに、 record に対して次のメソッドを使って検索条 件を指定できます。

      @==@ 、 @=~@ 、 @<@ 、 @<=@ 、 @>@ 、 @>=@ 、 @+@ 、 @-@ 、 @*@ 、 @/@ 、 @%@ 、 @match(query, :syntax => :query/:script, &block)@ ( query に指定した “grn_expr”:http://groonga.org/ja/docs/reference/grn_expr.html とのマッチ)、 @similar_search(text)@ ( text との類似文書探索)、 @term_extract(text)@ ( text 内から record の単語を抽出)

  • #select(query, options) ⇒ Groonga::Hash

    Parameters:

    • query (String)

      条件の指定 query には「[カラム名]:[演算子][値]」という書式で条件を 指定する。演算子は以下の通り。

      • なし := [カラム値] == [値]
      • @!@ := [カラム値] != [値]
      • @<@ := [カラム値] < [値]
      • @>@ := [カラム値] > [値]
      • @<=@ := [カラム値] <= [値]
      • @>=@ := [カラム値] >= [値]
      • @@@ := [カラム値]が[値]を含んでいるかどうか

      例:

      • @”groonga”@ := column カラムの値が @”groonga”@ のレコードにマッチ
      • @”name:daijiro”@ := column カラムが属しているテーブルの @”name”@ カラムの値が @”daijiro”@ のレコードにマッチ =:
      • @”description:@@@groonga”@ := column カラムが属しているテーブルの @”description”@ カラムが @”groonga”@ を含んでいるレコードにマッチ =:
    • options (::Hash)

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

    Options Hash (options):

    • :operator (Object) — default: Groonga::Operator::OR

      マッチしたレコードをどのように扱うか。指定可能な値は以 下の通り。

      • Groonga::Operator::OR := マッチしたレコードを追加。すでにレコードが追加され ている場合は何もしない。 =:
      • Groonga::Operator::AND := マッチしたレコードのスコアを増加。マッチしなかった レコードを削除。 =:
      • Groonga::Operator::AND_NOT := マッチしたレコードを削除。 =:
      • Groonga::Operator::ADJUST := マッチしたレコードのスコアを増加。 =:
    • :result (Object)

      検索結果を格納するテーブル。マッチしたレコードが追加さ れていく。省略した場合は新しくテーブルを作成して返す。

    • :name (Object)

      条件の名前。省略した場合は名前を付けない。

    • :syntax (Object) — default: :query

      query の構文。

      参考: Expression#parse .

    • :allow_pragma (Object)

      query構文時にプラグマを利用するかどうか。省略した場合は 利用する。

      参考: Expression#parse .

    • :allow_column (Object)

      The allow_column query構文時にカラム指定を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_update (Object)

      script構文時に更新操作を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_leading_not (Object)

      指定語句の先頭に-を付けることで指定した語句を含まないレコードの 検索を有効にするかどうかを指定する。省略した場合は無効にする。

      参考: Expression#parse .

  • #select(expression, options) ⇒ Groonga::Hash

    Parameters:

    • expression (Groonga::Expression)

      条件を表すオブジェクト expression には既に作成済みの Expression を渡す。

    • options (::Hash)

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

    Options Hash (options):

    • :operator (Object) — default: Groonga::Operator::OR

      マッチしたレコードをどのように扱うか。指定可能な値は以 下の通り。

      • Groonga::Operator::OR := マッチしたレコードを追加。すでにレコードが追加され ている場合は何もしない。 =:
      • Groonga::Operator::AND := マッチしたレコードのスコアを増加。マッチしなかった レコードを削除。 =:
      • Groonga::Operator::AND_NOT := マッチしたレコードを削除。 =:
      • Groonga::Operator::ADJUST := マッチしたレコードのスコアを増加。 =:
    • :result (Object)

      検索結果を格納するテーブル。マッチしたレコードが追加さ れていく。省略した場合は新しくテーブルを作成して返す。

    • :name (Object)

      条件の名前。省略した場合は名前を付けない。

    • :syntax (Object) — default: :query

      query の構文。

      参考: Expression#parse .

    • :allow_pragma (Object)

      query構文時にプラグマを利用するかどうか。省略した場合は 利用する。

      参考: Expression#parse .

    • :allow_column (Object)

      The allow_column query構文時にカラム指定を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_update (Object)

      script構文時に更新操作を利用するかどうか。省略した場合 は利用する。

      参考: Expression#parse .

    • :allow_leading_not (Object)

      指定語句の先頭に-を付けることで指定した語句を含まないレコードの 検索を有効にするかどうかを指定する。省略した場合は無効にする。

      参考: Expression#parse .

Returns:



321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# File 'ext/groonga/rb-grn-column.c', line 321

static VALUE
rb_grn_column_select (int argc, VALUE *argv, VALUE self)
{
    grn_ctx *context;
    grn_obj *table, *column, *result, *expression;
    grn_operator operator = GRN_OP_OR;
    VALUE options;
    VALUE rb_query, condition_or_options;
    VALUE rb_name, rb_operator, rb_result, rb_syntax;
    VALUE rb_allow_pragma, rb_allow_column, rb_allow_update, rb_allow_leading_not;
    VALUE builder;
    VALUE rb_expression = Qnil;

    rb_query = Qnil;

    rb_scan_args(argc, argv, "02", &condition_or_options, &options);

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                              NULL, NULL,
                              NULL, NULL, NULL);
    table = grn_column_table(context, column);

    if (RVAL2CBOOL(rb_obj_is_kind_of(condition_or_options, rb_cString))) {
        rb_query = condition_or_options;
    } else if (RVAL2CBOOL(rb_obj_is_kind_of(condition_or_options,
                                            rb_cGrnExpression))) {
        rb_expression = condition_or_options;
    } else {
        if (!NIL_P(options))
            rb_raise(rb_eArgError,
                     "should be [query_string, option_hash], "
                     "[expression, option_hash] "
                     "or [option_hash]: %s",
                     rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
        options = condition_or_options;
    }

    rb_grn_scan_options(options,
                        "operator", &rb_operator,
                        "result", &rb_result,
                        "name", &rb_name,
                        "syntax", &rb_syntax,
                        "allow_pragma", &rb_allow_pragma,
                        "allow_column", &rb_allow_column,
                        "allow_update", &rb_allow_update,
                        "allow_leading_not", &rb_allow_leading_not,
                        NULL);

    if (!NIL_P(rb_operator))
        operator = NUM2INT(rb_operator);

    if (NIL_P(rb_result)) {
        result = grn_table_create(context, NULL, 0, NULL,
                                  GRN_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
                                  table,
                                  0);
        rb_result = GRNTABLE2RVAL(context, result, GRN_TRUE);
    } else {
        result = RVAL2GRNTABLE(rb_result, &context);
    }

    if (NIL_P(rb_expression)) {
      builder = rb_grn_column_expression_builder_new(self, rb_name, rb_query);
      rb_funcall(builder, rb_intern("syntax="), 1, rb_syntax);
      rb_funcall(builder, rb_intern("allow_pragma="), 1, rb_allow_pragma);
      rb_funcall(builder, rb_intern("allow_column="), 1, rb_allow_column);
      rb_funcall(builder, rb_intern("allow_update="), 1, rb_allow_update);
      rb_funcall(builder, rb_intern("allow_leading_not="), 1, rb_allow_leading_not);
      rb_expression = rb_grn_column_expression_builder_build(builder);
    }
    rb_grn_object_deconstruct(RB_GRN_OBJECT(DATA_PTR(rb_expression)),
                              &expression, NULL,
                              NULL, NULL, NULL, NULL);

    grn_table_select(context, table, expression, result, operator);
    rb_grn_context_check(context, self);

    rb_attr(rb_singleton_class(rb_result),
            rb_intern("expression"),
            GRN_TRUE, GRN_FALSE, GRN_FALSE);
    rb_iv_set(rb_result, "@expression", rb_expression);

    return rb_result;
}

#tableGroonga::Table

カラムが所属するテーブルを返す。

Returns:



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'ext/groonga/rb-grn-column.c', line 141

static VALUE
rb_grn_column_get_table (VALUE self)
{
    grn_ctx *context = NULL;
    grn_obj *column;
    grn_obj *table;

    rb_grn_object_deconstruct((RbGrnObject *)(SELF(self)), &column, &context,
                              NULL, NULL,
                              NULL, NULL);
    table = grn_column_table(context, column);
    rb_grn_context_check(context, self);

    return GRNOBJECT2RVAL(Qnil, context, table, GRN_FALSE);
}

#truncateObject

Clears all values in column.

This method is a dangerous method. You can’t use this method when other process is using the column. The other process that is using the column must re-open its database after this method is done.

Returns void

Returns:

  • void

Since:

  • 4.0.8



593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
# File 'ext/groonga/rb-grn-column.c', line 593

static VALUE
rb_grn_column_truncate (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;
    grn_rc rc;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                              NULL, NULL,
                              NULL, NULL, NULL);
    rc = grn_column_truncate(context, column);

    rb_grn_context_check(context, self);
    rb_grn_rc_check(rc, self);

    return Qnil;
}

#unlock(options = {}) ⇒ Object

column のロックを解除する。

Parameters:

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

    利用可能なオプションは以下の通り。

Options Hash (options):

  • :id (Object)

    :id で指定したレコードのロックを解除する。 (注: groonga側が未実装のため、現在は無視される)



414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
# File 'ext/groonga/rb-grn-column.c', line 414

static VALUE
rb_grn_column_unlock (int argc, VALUE *argv, VALUE self)
{
    grn_id id = GRN_ID_NIL;
    grn_ctx *context;
    grn_obj *column;
    grn_rc rc;
    VALUE options, rb_id;

    rb_scan_args(argc, argv, "01",  &options);

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    rb_grn_scan_options(options,
                        "id", &rb_id,
                        NULL);

    if (!NIL_P(rb_id))
        id = NUM2UINT(rb_id);

    rc = grn_obj_unlock(context, column, id);
    rb_grn_context_check(context, self);
    rb_grn_rc_check(rc, self);

    return Qnil;
}

#vector?Boolean

column がベクターカラムの場合は +true+ を返し、 そうでない場合は +false+ を返す。

Returns:

  • (Boolean)

Since:

  • 1.0.5



644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
# File 'ext/groonga/rb-grn-column.c', line 644

static VALUE
rb_grn_column_vector_p (VALUE self)
{
    grn_ctx *context;
    grn_obj *column;
    grn_column_flags flags;
    grn_column_flags column_type;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                             NULL, NULL,
                             NULL, NULL, NULL);

    if (column->header.type != GRN_COLUMN_VAR_SIZE) {
        return Qfalse;
    }

    flags = grn_column_get_flags(context, column);
    column_type = (flags & GRN_OBJ_COLUMN_TYPE_MASK);
    return CBOOL2RVAL(column_type == GRN_OBJ_COLUMN_VECTOR);
}

#with_weight?Boolean

Returns:

  • (Boolean)

    @true@ if the column is vector and created with @:with_weight => true@ flag, @false@ otherwise.

  • (Boolean)

Since:

  • 4.0.1



703
704
705
706
707
708
709
710
711
712
713
714
715
716
# File 'ext/groonga/rb-grn-column.c', line 703

static VALUE
rb_grn_column_with_weight_p(VALUE self)
{
    grn_obj *column;
    grn_ctx *context;
    grn_column_flags flags;

    rb_grn_column_deconstruct(SELF(self), &column, &context,
                              NULL, NULL,
                              NULL, NULL, NULL);

    flags = grn_column_get_flags(context, column);
    return CBOOL2RVAL(flags & GRN_OBJ_WITH_WEIGHT);
}