[Groonga-commit] groonga/groonga at 7146aa2 [master] Add grn_accessor_name()

Back to archive index

Kouhei Sutou null+****@clear*****
Tue May 15 16:44:49 JST 2018


Kouhei Sutou	2018-05-15 16:44:49 +0900 (Tue, 15 May 2018)

  New Revision: 7146aa261fcb973ad309074363c25fb41b8266c7
  https://github.com/groonga/groonga/commit/7146aa261fcb973ad309074363c25fb41b8266c7

  Message:
    Add grn_accessor_name()

  Added files:
    lib/accessor.c
  Modified files:
    include/groonga/accessor.h
    lib/c_sources.am
    lib/util.c

  Modified: include/groonga/accessor.h (+5 -1)
===================================================================
--- include/groonga/accessor.h    2018-05-15 16:06:23 +0900 (43953287b)
+++ include/groonga/accessor.h    2018-05-15 16:44:49 +0900 (3d576e7d1)
@@ -1,5 +1,5 @@
 /*
-  Copyright(C) 2012-2016 Brazil
+  Copyright(C) 2012-2018 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -29,6 +29,10 @@ GRN_API grn_rc grn_accessor_resolve(grn_ctx *ctx,
                                     grn_obj *res,
                                     grn_operator op);
 
+GRN_API grn_rc grn_accessor_name(grn_ctx *ctx,
+                                 grn_obj *accessor,
+                                 grn_obj *name);
+
 #ifdef __cplusplus
 }
 #endif

  Added: lib/accessor.c (+148 -0) 100644
===================================================================
--- /dev/null
+++ lib/accessor.c    2018-05-15 16:44:49 +0900 (1746cf0cd)
@@ -0,0 +1,148 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+  Copyright(C) 2018 Brazil
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License version 2.1 as published by the Free Software Foundation.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include "grn.h"
+#include "grn_db.h"
+
+grn_rc
+grn_accessor_name(grn_ctx *ctx, grn_obj *accessor, grn_obj *name)
+{
+  grn_accessor *accessor_;
+  GRN_API_ENTER;
+
+  if (!grn_obj_is_accessor(ctx, accessor)) {
+    grn_obj inspected;
+    GRN_TEXT_INIT(&inspected, 0);
+    ERR(GRN_INVALID_ARGUMENT,
+        "[accessor][name] not accessor: %.*s",
+        (int)GRN_TEXT_LEN(&inspected),
+        GRN_TEXT_VALUE(&inspected));
+    GRN_OBJ_FIN(ctx, &inspected);
+    GRN_API_RETURN(ctx->rc);
+  }
+
+  for (accessor_ = (grn_accessor *)accessor;
+       accessor_;
+       accessor_ = accessor_->next) {
+    grn_bool show_obj_name = GRN_FALSE;
+    grn_bool show_obj_domain_name = GRN_FALSE;
+
+    if (accessor_ != (grn_accessor *)accessor) {
+      GRN_TEXT_PUTS(ctx, name, ".");
+    }
+    switch (accessor_->action) {
+    case GRN_ACCESSOR_GET_ID :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_ID,
+                   GRN_COLUMN_NAME_ID_LEN);
+      show_obj_name = GRN_TRUE;
+      break;
+    case GRN_ACCESSOR_GET_KEY :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_KEY,
+                   GRN_COLUMN_NAME_KEY_LEN);
+      show_obj_name = GRN_TRUE;
+      break;
+    case GRN_ACCESSOR_GET_VALUE :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_VALUE,
+                   GRN_COLUMN_NAME_VALUE_LEN);
+      show_obj_name = GRN_TRUE;
+      break;
+    case GRN_ACCESSOR_GET_SCORE :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_SCORE,
+                   GRN_COLUMN_NAME_SCORE_LEN);
+      break;
+    case GRN_ACCESSOR_GET_NSUBRECS :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_NSUBRECS,
+                   GRN_COLUMN_NAME_NSUBRECS_LEN);
+      break;
+    case GRN_ACCESSOR_GET_MAX :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_MAX,
+                   GRN_COLUMN_NAME_MAX_LEN);
+      break;
+    case GRN_ACCESSOR_GET_MIN :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_MIN,
+                   GRN_COLUMN_NAME_MIN_LEN);
+      break;
+    case GRN_ACCESSOR_GET_SUM :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_SUM,
+                   GRN_COLUMN_NAME_SUM_LEN);
+      break;
+    case GRN_ACCESSOR_GET_AVG :
+      GRN_TEXT_PUT(ctx,
+                   name,
+                   GRN_COLUMN_NAME_AVG,
+                   GRN_COLUMN_NAME_AVG_LEN);
+      break;
+    case GRN_ACCESSOR_GET_COLUMN_VALUE :
+      grn_column_name_(ctx, accessor_->obj, name);
+      show_obj_domain_name = GRN_TRUE;
+      break;
+    case GRN_ACCESSOR_GET_DB_OBJ :
+      grn_text_printf(ctx, name, "(_db)");
+      break;
+    case GRN_ACCESSOR_LOOKUP :
+      grn_text_printf(ctx, name, "(_lookup)");
+      break;
+    case GRN_ACCESSOR_FUNCALL :
+      grn_text_printf(ctx, name, "(_funcall)");
+      break;
+    default :
+      grn_text_printf(ctx, name, "(unknown:%u)", accessor_->action);
+      break;
+    }
+
+    if (show_obj_name || show_obj_domain_name) {
+      grn_obj *target = accessor_->obj;
+      char target_name[GRN_TABLE_MAX_KEY_SIZE];
+      int target_name_size;
+
+      if (show_obj_domain_name) {
+        target = grn_ctx_at(ctx, target->header.domain);
+      }
+
+      target_name_size = grn_obj_name(ctx,
+                                      target,
+                                      target_name,
+                                      GRN_TABLE_MAX_KEY_SIZE);
+      GRN_TEXT_PUTS(ctx, name, "(");
+      if (target_name_size == 0) {
+        GRN_TEXT_PUTS(ctx, name, "anonymous");
+      } else {
+        GRN_TEXT_PUT(ctx, name, target_name, target_name_size);
+      }
+      GRN_TEXT_PUTS(ctx, name, ")");
+    }
+  }
+
+  GRN_API_RETURN(GRN_SUCCESS);
+}

  Modified: lib/c_sources.am (+1 -0)
===================================================================
--- lib/c_sources.am    2018-05-15 16:06:23 +0900 (cc42c467f)
+++ lib/c_sources.am    2018-05-15 16:44:49 +0900 (62c888600)
@@ -1,4 +1,5 @@
 libgroonga_c_sources =				\
+	accessor.c				\
 	alloc.c					\
 	grn_alloc.h				\
 	cache.c					\

  Modified: lib/util.c (+1 -107)
===================================================================
--- lib/util.c    2018-05-15 16:06:23 +0900 (81f9fba28)
+++ lib/util.c    2018-05-15 16:44:49 +0900 (12c35abca)
@@ -502,114 +502,8 @@ grn_vector_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *vector)
 static grn_rc
 grn_accessor_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
 {
-  grn_accessor *accessor = (grn_accessor *)obj;
-
   GRN_TEXT_PUTS(ctx, buf, "#<accessor ");
-  for (; accessor; accessor = accessor->next) {
-    grn_bool show_obj_name = GRN_FALSE;
-    grn_bool show_obj_domain_name = GRN_FALSE;
-
-    if (accessor != (grn_accessor *)obj) {
-      GRN_TEXT_PUTS(ctx, buf, ".");
-    }
-    switch (accessor->action) {
-    case GRN_ACCESSOR_GET_ID :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_ID,
-                   GRN_COLUMN_NAME_ID_LEN);
-      show_obj_name = GRN_TRUE;
-      break;
-    case GRN_ACCESSOR_GET_KEY :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_KEY,
-                   GRN_COLUMN_NAME_KEY_LEN);
-      show_obj_name = GRN_TRUE;
-      break;
-    case GRN_ACCESSOR_GET_VALUE :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_VALUE,
-                   GRN_COLUMN_NAME_VALUE_LEN);
-      show_obj_name = GRN_TRUE;
-      break;
-    case GRN_ACCESSOR_GET_SCORE :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_SCORE,
-                   GRN_COLUMN_NAME_SCORE_LEN);
-      break;
-    case GRN_ACCESSOR_GET_NSUBRECS :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_NSUBRECS,
-                   GRN_COLUMN_NAME_NSUBRECS_LEN);
-      break;
-    case GRN_ACCESSOR_GET_MAX :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_MAX,
-                   GRN_COLUMN_NAME_MAX_LEN);
-      break;
-    case GRN_ACCESSOR_GET_MIN :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_MIN,
-                   GRN_COLUMN_NAME_MIN_LEN);
-      break;
-    case GRN_ACCESSOR_GET_SUM :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_SUM,
-                   GRN_COLUMN_NAME_SUM_LEN);
-      break;
-    case GRN_ACCESSOR_GET_AVG :
-      GRN_TEXT_PUT(ctx,
-                   buf,
-                   GRN_COLUMN_NAME_AVG,
-                   GRN_COLUMN_NAME_AVG_LEN);
-      break;
-    case GRN_ACCESSOR_GET_COLUMN_VALUE :
-      grn_column_name_(ctx, accessor->obj, buf);
-      show_obj_domain_name = GRN_TRUE;
-      break;
-    case GRN_ACCESSOR_GET_DB_OBJ :
-      grn_text_printf(ctx, buf, "(_db)");
-      break;
-    case GRN_ACCESSOR_LOOKUP :
-      grn_text_printf(ctx, buf, "(_lookup)");
-      break;
-    case GRN_ACCESSOR_FUNCALL :
-      grn_text_printf(ctx, buf, "(_funcall)");
-      break;
-    default :
-      grn_text_printf(ctx, buf, "(unknown:%u)", accessor->action);
-      break;
-    }
-
-    if (show_obj_name || show_obj_domain_name) {
-      grn_obj *target = accessor->obj;
-      char name[GRN_TABLE_MAX_KEY_SIZE];
-      int name_size;
-
-      if (show_obj_domain_name) {
-        target = grn_ctx_at(ctx, target->header.domain);
-      }
-
-      name_size = grn_obj_name(ctx,
-                               target,
-                               name,
-                               GRN_TABLE_MAX_KEY_SIZE);
-      GRN_TEXT_PUTS(ctx, buf, "(");
-      if (name_size == 0) {
-        GRN_TEXT_PUTS(ctx, buf, "anonymous");
-      } else {
-        GRN_TEXT_PUT(ctx, buf, name, name_size);
-      }
-      GRN_TEXT_PUTS(ctx, buf, ")");
-    }
-  }
+  grn_accessor_name(ctx, obj, buf);
   GRN_TEXT_PUTS(ctx, buf, ">");
 
   return GRN_SUCCESS;
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180515/f0554393/attachment-0001.htm 



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