Example #1
0
/*
 * 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;
}
Example #2
0
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;
}
Example #3
0
/*
 * 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);
}
Example #4
0
/*
 * _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);
}