/* * Document-method: column_value * * call-seq: * view.column_value(id, name) -> 値 * * _view_の_id_に対応するカラム_name_の値を返す。 */ static VALUE rb_grn_view_get_column_value (VALUE self, VALUE rb_id, VALUE rb_name) { VALUE rb_value = Qnil; #ifdef WIN32 rb_raise(rb_eNotImpError, "grn_obj_get_value_o() isn't available on Windows."); #else RbGrnTable *rb_view; grn_ctx *context = NULL; grn_obj *view, *value, *accessor; grn_obj id; rb_view = SELF(self); rb_grn_table_deconstruct(rb_view, &view, &context, NULL, NULL, &value, NULL, NULL, NULL); GRN_BULK_REWIND(value); GRN_TEXT_INIT(&id, 0); GRN_TEXT_PUT(context, &id, RSTRING_PTR(rb_id), RSTRING_LEN(rb_id)); accessor = grn_obj_column(context, view, RSTRING_PTR(rb_name), RSTRING_LEN(rb_name)); grn_obj_get_value_o(context, accessor, &id, value); grn_obj_unlink(context, accessor); rb_value = GRNOBJ2RVAL(Qnil, context, value, self); GRN_OBJ_FIN(context, &id); #endif return rb_value; }
VALUE rb_grn_vector_to_ruby_object (grn_ctx *context, grn_obj *vector) { VALUE array; grn_obj value; unsigned int i, n; if (!vector) return Qnil; GRN_VOID_INIT(&value); n = grn_vector_size(context, vector); array = rb_ary_new2(n); for (i = 0; i < n; i++) { const char *_value; unsigned int weight, length; grn_id domain; length = grn_vector_get_element(context, vector, i, &_value, &weight, &domain); grn_obj_reinit(context, &value, domain, 0); grn_bulk_write(context, &value, _value, length); rb_ary_push(array, GRNOBJ2RVAL(Qnil, context, &value, Qnil)); } GRN_OBJ_FIN(context, &value); return array; }
/* * call-seq: * context.pop -> 値 * * コンテキスト内にあるスタックから値を取り出す。このスタッ * クにはGroonga::Expression#executeの実行結果が格納される。 */ static VALUE rb_grn_context_pop (VALUE self) { grn_ctx *context; context = SELF(self); return GRNOBJ2RVAL(Qnil, context, grn_ctx_pop(context), self); }
/* * _expression_ を実行し、実行した結果を返す。 * * @overload execute * @return [値] */ static VALUE rb_grn_expression_execute (VALUE self) { grn_ctx *context = NULL; grn_obj *expression; grn_obj *result; rb_grn_expression_deconstruct(SELF(self), &expression, &context, NULL, NULL, NULL, NULL, NULL); result = grn_expr_exec(context, expression, 0); rb_grn_context_check(context, self); return GRNOBJ2RVAL(Qnil, context, result, self); }