[Groonga-commit] groonga/groonga at 348653c [master] mrb: add Expression.create

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Feb 3 15:20:11 JST 2015


Kouhei Sutou	2015-02-03 15:20:11 +0900 (Tue, 03 Feb 2015)

  New Revision: 348653c2e43372a2fd9ff4fa9779fec9155bd677
  https://github.com/groonga/groonga/commit/348653c2e43372a2fd9ff4fa9779fec9155bd677

  Message:
    mrb: add Expression.create
    
    The created expression should be closed manually.

  Modified files:
    lib/mrb/mrb_expr.c

  Modified: lib/mrb/mrb_expr.c (+40 -0)
===================================================================
--- lib/mrb/mrb_expr.c    2015-02-03 14:50:27 +0900 (d02d86e)
+++ lib/mrb/mrb_expr.c    2015-02-03 15:20:11 +0900 (011d6c9)
@@ -322,6 +322,41 @@ mrb_grn_expr_code_get_flags(mrb_state *mrb, mrb_value self)
 }
 
 static mrb_value
+mrb_grn_expression_singleton_create(mrb_state *mrb, mrb_value klass)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+  mrb_value mrb_expr;
+  mrb_value mrb_table;
+  mrb_value mrb_new_arguments[1];
+  grn_obj *expr, *variable = NULL;
+
+  mrb_get_args(mrb, "o", &mrb_table);
+  if (mrb_nil_p(mrb_table)) {
+    grn_obj *table = DATA_PTR(mrb_table);
+    GRN_EXPR_CREATE_FOR_QUERY(ctx, table, expr, variable);
+  } else {
+    expr = grn_expr_create(ctx, NULL, 0);
+  }
+
+  if (!expr) {
+    grn_mrb_ctx_check(mrb);
+    return mrb_nil_value();
+  }
+
+  mrb_new_arguments[0] = mrb_cptr_value(mrb, expr);
+  mrb_expr = mrb_obj_new(mrb, mrb_class_ptr(klass), 1, mrb_new_arguments);
+  {
+    mrb_value mrb_variable = mrb_nil_value();
+    if (variable) {
+      mrb_variable = grn_mrb_value_from_grn_obj(mrb, variable);
+    }
+    mrb_iv_set(mrb, mrb_expr, mrb_intern_lit(mrb, "@variable"), mrb_variable);
+  }
+
+  return mrb_expr;
+}
+
+static mrb_value
 mrb_grn_expression_initialize(mrb_state *mrb, mrb_value self)
 {
   mrb_value mrb_expression_ptr;
@@ -468,6 +503,11 @@ grn_mrb_expr_init(grn_ctx *ctx)
 
   klass = mrb_define_class_under(mrb, module, "Expression", object_class);
   MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+
+  mrb_define_singleton_method(mrb, (struct RObject *)klass, "create",
+                              mrb_grn_expression_singleton_create,
+                              MRB_ARGS_REQ(1));
+
   mrb_define_method(mrb, klass, "initialize",
                     mrb_grn_expression_initialize, MRB_ARGS_REQ(1));
   mrb_define_method(mrb, klass, "codes",
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index