[Groonga-commit] groonga/groonga at 462b635 [master] inspect accessor: show more information

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Fri Nov 11 15:10:02 JST 2016


Kouhei Sutou	2016-11-11 15:10:02 +0900 (Fri, 11 Nov 2016)

  New Revision: 462b6353eadd2c587dc3bd279173a3a522a64370
  https://github.com/groonga/groonga/commit/462b6353eadd2c587dc3bd279173a3a522a64370

  Message:
    inspect accessor: show more information

  Modified files:
    lib/util.c

  Modified: lib/util.c (+111 -1)
===================================================================
--- lib/util.c    2016-11-11 14:46:56 +0900 (b976d65)
+++ lib/util.c    2016-11-11 15:10:02 +0900 (950b8af)
@@ -453,7 +453,117 @@ 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)
 {
-  return grn_column_name_(ctx, obj, buf);
+  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_TEXT_PUTS(ctx, buf, ">");
+
+  return GRN_SUCCESS;
 }
 
 static grn_rc
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る