Class: Groonga::TableCursor

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
ext/rb-grn-table-cursor.c,
ext/rb-grn-table-cursor.c

Overview

テーブルに登録されているレコードを順番に取り出すための オブジェクト。Groonga::Table#open_cursorで生成できる。

Direct Known Subclasses

PatriciaTrieCursor

Defined Under Namespace

Modules: KeySupport

Instance Method Summary collapse

Instance Method Details

#closeObject

call-seq:

object.close

objectが使用しているリソースを開放する。これ以降objectを 使うことはできない。



462
463
464
465
466
467
468
469
470
471
472
473
# File 'ext/rb-grn-object.c', line 462

VALUE
rb_grn_object_close (VALUE self)
{
    grn_obj *object;
    grn_ctx *context;

    rb_grn_object_deconstruct(SELF(self), &object, &context,
			      NULL, NULL, NULL, NULL);
    if (object && context)
	grn_obj_close(context, object);
    return Qnil;
}

#closed?Boolean

call-seq:

object.closed? -> true/false

objectが開放済みの場合はtrueを返し、そうでない場合は falseを返す。

Returns:

  • (Boolean)


484
485
486
487
488
489
490
491
492
493
494
495
# File 'ext/rb-grn-object.c', line 484

VALUE
rb_grn_object_closed_p (VALUE self)
{
    RbGrnObject *rb_grn_object;

    rb_grn_object = SELF(self);
    if (rb_grn_object->context && rb_grn_object->object) {
        return Qfalse;
    } else {
        return Qtrue;
    }
}

#deleteObject

カレントレコードを削除する。



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'ext/rb-grn-table-cursor.c', line 126

static VALUE
rb_grn_table_cursor_delete (VALUE self)
{
    grn_ctx *context;
    grn_table_cursor *cursor;

    rb_grn_table_cursor_deconstruct(SELF(self), &cursor, &context,
				    NULL, NULL, NULL, NULL);
    if (context && cursor) {
        grn_rc rc;

        rc = grn_table_cursor_delete(context, cursor);
        rb_grn_rc_check(rc, self);
    }

    return Qnil;
}

#each {|record| ... } ⇒ Object

カーソルの範囲内にあるレコードを順番にブロックに渡す。

Yields:

  • (record)


177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'ext/rb-grn-table-cursor.c', line 177

static VALUE
rb_grn_table_cursor_each (VALUE self)
{
    grn_id record_id;
    grn_ctx *context;
    grn_table_cursor *cursor;

    rb_grn_table_cursor_deconstruct(SELF(self), &cursor, &context,
				    NULL, NULL, NULL, NULL);

    if (context && cursor) {
	while ((record_id = grn_table_cursor_next(context, cursor))) {
	    rb_yield(rb_grn_record_new(rb_iv_get(self, "@table"),
				       record_id, Qnil));
	}
    }

    return Qnil;
}

#nextGroonga::Record

カレントレコードを一件進めてそのレコードを返す。

Returns:



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'ext/rb-grn-table-cursor.c', line 150

static VALUE
rb_grn_table_cursor_next (VALUE self)
{
    VALUE rb_record = Qnil;
    grn_ctx *context;
    grn_table_cursor *cursor;

    rb_grn_table_cursor_deconstruct(SELF(self), &cursor, &context,
				    NULL, NULL, NULL, NULL);
    if (context && cursor) {
        grn_id record_id;

        record_id = grn_table_cursor_next(context, cursor);
        if (record_id != GRN_ID_NIL) /* FIXME: use grn_table_cursor_table */
            rb_record = rb_grn_record_new(rb_iv_get(self, "@table"),
					  record_id, Qnil);
    }

    return rb_record;
}

#valueObject

カレントレコードの値を返す。



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'ext/rb-grn-table-cursor.c', line 73

static VALUE
rb_grn_table_cursor_get_value (VALUE self)
{
    grn_ctx *context;
    grn_table_cursor *cursor;
    VALUE rb_value = Qnil;

    rb_grn_table_cursor_deconstruct(SELF(self), &cursor, &context,
				    NULL, NULL, NULL, NULL);
    if (context && cursor) {
        int n;
        void *value;

        n = grn_table_cursor_get_value(context, cursor, &value);
        rb_value = rb_str_new(value, n);
    }

    return rb_value;
}

#value=Object

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



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'ext/rb-grn-table-cursor.c', line 99

static VALUE
rb_grn_table_cursor_set_value (VALUE self, VALUE value)
{
    grn_ctx *context;
    grn_table_cursor *cursor;

    rb_grn_table_cursor_deconstruct(SELF(self), &cursor, &context,
				    NULL, NULL, NULL, NULL);
    if (context && cursor) {
        grn_rc rc;

        rc = grn_table_cursor_set_value(context,
                                        cursor,
                                        StringValuePtr(value),
					GRN_OBJ_SET);
        rb_grn_rc_check(rc, self);
    }

    return Qnil;
}