示例#1
0
static mrb_value
mrb_grn_expression_take_object(mrb_state *mrb, mrb_value self)
{
  grn_ctx *ctx = (grn_ctx *)mrb->ud;
  grn_obj *expr;
  mrb_value mrb_object;
  grn_obj *grn_object;

  mrb_get_args(mrb, "o", &mrb_object);
  expr = DATA_PTR(self);
  grn_object = DATA_PTR(mrb_object);
  grn_expr_take_obj(ctx, expr, grn_object);

  return mrb_object;
}
示例#2
0
/*
 * _object_ を追加し、 _n_arguments_ 個の引数を取る _operation_ を追加する。
 *
 * @overload append_object(object, operation=Groonga::Operator::PUSH, n_arguments=1)
 *   @param [Object] object 追加するオブジェクト
 *   @param [Groonga::Operator::XXX] operation 追加する _operation_
 *   @param [Integer] n_arguments _operation_ の取る引数
 * @return [Self] self
 *
 */
static VALUE
rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self)
{
    VALUE rb_object, rb_operation, rb_n_arguments;
    grn_ctx *context = NULL;
    grn_obj *expression, *object;
    grn_operator operation = GRN_OP_PUSH;
    int n_arguments = 1;

    rb_scan_args(argc, argv, "12", &rb_object, &rb_operation, &rb_n_arguments);
    if (!NIL_P(rb_operation))
        operation = RVAL2GRNOPERATOR(rb_operation);
    if (!NIL_P(rb_n_arguments))
        n_arguments = NUM2INT(rb_n_arguments);

    rb_grn_expression_deconstruct(SELF(self), &expression, &context,
                                  NULL, NULL,
                                  NULL, NULL, NULL);

    if (RB_TYPE_P(rb_object, RUBY_T_HASH)) {
        RbGrnHashFromRubyHashData data;
        data.context = context;
        data.hash = grn_hash_create(context, NULL,
                                    GRN_TABLE_MAX_KEY_SIZE,
                                    sizeof(grn_obj),
                                    GRN_OBJ_KEY_VAR_SIZE |
                                    GRN_OBJ_TEMPORARY |
                                    GRN_HASH_TINY);
        grn_expr_take_obj(context, expression, (grn_obj *)(data.hash));
        data.rb_hash = rb_object;
        rb_hash_foreach(rb_object,
                        rb_grn_hash_from_ruby_hash_body,
                        (VALUE)&data);
        grn_expr_append_obj(context, expression, (grn_obj *)(data.hash),
                            operation, n_arguments);
    } else {
        object = RVAL2GRNOBJECT(rb_object, &context);
        grn_expr_append_obj(context, expression, object,
                            operation, n_arguments);
    }
    rb_grn_context_check(context, self);
    rb_ary_push(rb_iv_get(self, "@objects"), rb_object);

    return self;
}