[Groonga-commit] groonga/groonga [master] inspect supports proc.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 8月 5日 (木) 15:55:46 JST


Kouhei Sutou	2010-08-05 06:55:46 +0000 (Thu, 05 Aug 2010)

  New Revision: b1df78cf1e684f582462f1bb4de2e37f79286d30

  Log:
    inspect supports proc.

  Modified files:
    lib/util.c
    test/unit/core/test-inspect.c

  Modified: lib/util.c (+44 -0)
===================================================================
--- lib/util.c    2010-08-05 06:19:04 +0000 (be22582)
+++ lib/util.c    2010-08-05 06:55:46 +0000 (a1947db)
@@ -79,6 +79,47 @@ grn_inspect_name(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
 }
 
 static grn_rc
+grn_proc_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+  grn_proc *proc = (grn_proc *)obj;
+  uint32_t i;
+
+  GRN_TEXT_PUTS(ctx, buf, "#<proc:");
+  switch (proc->type) {
+  case GRN_PROC_TOKENIZER :
+    GRN_TEXT_PUTS(ctx, buf, "tokenizer");
+    break;
+  case GRN_PROC_COMMAND :
+    GRN_TEXT_PUTS(ctx, buf, "command");
+    break;
+  case GRN_PROC_FUNCTION :
+    GRN_TEXT_PUTS(ctx, buf, "function");
+    break;
+  case GRN_PROC_HOOK :
+    GRN_TEXT_PUTS(ctx, buf, "hook");
+    break;
+  }
+  GRN_TEXT_PUTS(ctx, buf, " ");
+
+  grn_inspect_name(ctx, buf, obj);
+  GRN_TEXT_PUTS(ctx, buf, " ");
+
+  GRN_TEXT_PUTS(ctx, buf, "arguments:[");
+  for (i = 0; i < proc->nvars; i++) {
+    grn_expr_var *var = proc->vars + i;
+    if (i != 0) {
+      GRN_TEXT_PUTS(ctx, buf, ", ");
+    }
+    GRN_TEXT_PUT(ctx, buf, var->name, var->name_size);
+  }
+  GRN_TEXT_PUTS(ctx, buf, "]");
+
+  GRN_TEXT_PUTS(ctx, buf, ">");
+
+  return GRN_SUCCESS;
+}
+
+static grn_rc
 grn_accessor_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
 {
   return grn_column_name_(ctx, obj, buf);
@@ -586,6 +627,9 @@ grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)
   case GRN_EXPR :
     grn_expr_inspect(ctx, buffer, obj);
     return buffer;
+  case GRN_PROC :
+    grn_proc_inspect(ctx, buffer, obj);
+    return buffer;
   case GRN_ACCESSOR :
   case GRN_ACCESSOR_VIEW :
     grn_accessor_inspect(ctx, buffer, obj);

  Modified: test/unit/core/test-inspect.c (+30 -0)
===================================================================
--- test/unit/core/test-inspect.c    2010-08-05 06:19:04 +0000 (8af6c4e)
+++ test/unit/core/test-inspect.c    2010-08-05 06:55:46 +0000 (f09af36)
@@ -66,6 +66,8 @@ void test_column_var_size(void);
 void test_column_index(void);
 void test_type(void);
 void test_record(void);
+void test_proc_command(void);
+void test_proc_function(void);
 
 static gchar *tmp_directory;
 
@@ -806,3 +808,31 @@ test_record(void)
                           ">",
                           inspected_string());
 }
+
+void
+test_proc_command(void)
+{
+  grn_obj *proc;
+
+  proc = get_object("column_remove");
+  inspected = grn_inspect(context, NULL, proc);
+  cut_assert_equal_string("#<proc:command "
+                          "column_remove "
+                          "arguments:[table, name]"
+                          ">",
+                          inspected_string());
+}
+
+void
+test_proc_function(void)
+{
+  grn_obj *proc;
+
+  proc = get_object("geo_distance");
+  inspected = grn_inspect(context, NULL, proc);
+  cut_assert_equal_string("#<proc:function "
+                          "geo_distance "
+                          "arguments:[]"
+                          ">",
+                          inspected_string());
+}




Groonga-commit メーリングリストの案内
Back to archive index