[Groonga-commit] groonga/groonga [master] inspect supports ii deeply.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 9月 22日 (水) 16:49:18 JST


Kouhei Sutou	2010-09-22 07:49:18 +0000 (Wed, 22 Sep 2010)

  New Revision: 433613e9112714862eff84e30d4db225d0bcdefe

  Log:
    inspect supports ii deeply.

  Modified files:
    lib/ii.c
    lib/ii.h
    lib/util.c

  Modified: lib/ii.c (+70 -0)
===================================================================
--- lib/ii.c    2010-09-22 05:06:59 +0000 (579fac8)
+++ lib/ii.c    2010-09-22 07:49:18 +0000 (4c61487)
@@ -26,6 +26,7 @@
 #include "pat.h"
 #include "db.h"
 #include "output.h"
+#include "util.h"
 
 #define MAX_PSEG                 0x20000
 #define S_CHUNK                  (1 << GRN_II_W_CHUNK)
@@ -5999,3 +6000,72 @@ grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op)
     }
   }
 }
+
+void
+grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf)
+{
+  grn_obj key_buf;
+  char key[GRN_TABLE_MAX_KEY_SIZE];
+  int key_size;
+  int i = 0;
+
+  GRN_TEXT_PUTS(ctx, buf, "#<");
+  key_size = grn_table_get_key(ctx, c->ii->lexicon, c->id,
+                               key, GRN_TABLE_MAX_KEY_SIZE);
+  GRN_OBJ_INIT(&key_buf, GRN_BULK, 0, c->ii->lexicon->header.domain);
+  GRN_TEXT_SET(ctx, &key_buf, key, key_size);
+  grn_inspect(ctx, buf, &key_buf);
+  GRN_OBJ_FIN(ctx, &key_buf);
+
+  GRN_TEXT_PUTS(ctx, buf, " elements:[");
+  while (grn_ii_cursor_next(ctx, c)) {
+    grn_ii_posting *pos = c->post;
+    if (i > 0) {
+      GRN_TEXT_PUTS(ctx, buf, ", ");
+    }
+    i++;
+    GRN_TEXT_PUTS(ctx, buf, "{rid:");
+    grn_text_lltoa(ctx, buf, pos->rid);
+    GRN_TEXT_PUTS(ctx, buf, ", sid:");
+    grn_text_lltoa(ctx, buf, pos->sid);
+    GRN_TEXT_PUTS(ctx, buf, ", pos:");
+    grn_text_lltoa(ctx, buf, pos->pos);
+    GRN_TEXT_PUTS(ctx, buf, ", tf:");
+    grn_text_lltoa(ctx, buf, pos->tf);
+    GRN_TEXT_PUTS(ctx, buf, ", weight:");
+    grn_text_lltoa(ctx, buf, pos->weight);
+    GRN_TEXT_PUTS(ctx, buf, ", rest:");
+    grn_text_lltoa(ctx, buf, pos->rest);
+    GRN_TEXT_PUTS(ctx, buf, "}");
+  }
+  GRN_TEXT_PUTS(ctx, buf, "]>");
+}
+
+void
+grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf)
+{
+  grn_table_cursor *tc;
+  GRN_TEXT_PUTS(ctx, buf, "[");
+  if ((tc = grn_table_cursor_open(ctx, ii->lexicon, NULL, 0, NULL, 0, 0, -1,
+                                  GRN_CURSOR_ASCENDING))) {
+    int i = 0;
+    grn_id tid;
+    grn_ii_cursor *c;
+    while ((tid = grn_table_cursor_next(ctx, tc))) {
+      if (i > 0) {
+        GRN_TEXT_PUTS(ctx, buf, ",");
+      }
+      i++;
+      GRN_TEXT_PUTS(ctx, buf, "\n  ");
+      if ((c = grn_ii_cursor_open(ctx, ii, tid, GRN_ID_NIL, GRN_ID_MAX,
+                                  ii->n_elements,
+                                  GRN_OBJ_WITH_POSITION|GRN_OBJ_WITH_SECTION))) {
+        grn_ii_cursor_inspect(ctx, c, buf);
+        grn_ii_cursor_close(ctx, c);
+      }
+    }
+    grn_table_cursor_close(ctx, tc);
+  }
+  GRN_TEXT_PUTS(ctx, buf, "]");
+}
+

  Modified: lib/ii.h (+3 -0)
===================================================================
--- lib/ii.h    2010-09-22 05:06:59 +0000 (34375a4)
+++ lib/ii.h    2010-09-22 07:49:18 +0000 (ce894ec)
@@ -186,6 +186,9 @@ void grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op);
 
 grn_rc grn_ii_at(grn_ctx *ctx, grn_ii *ii, grn_id id, grn_hash *s, grn_operator op);
 
+void grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf);
+void grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf);
+
 #ifdef __cplusplus
 }
 #endif

  Modified: lib/util.c (+4 -0)
===================================================================
--- lib/util.c    2010-09-22 05:06:59 +0000 (64f4c2b)
+++ lib/util.c    2010-09-22 07:49:18 +0000 (dea483f)
@@ -19,6 +19,7 @@
 #include <stdio.h>
 #include "db.h"
 #include "pat.h"
+#include "ii.h"
 #include "util.h"
 
 grn_rc
@@ -290,6 +291,9 @@ grn_ii_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
     GRN_TEXT_PUTS(ctx, buf, "NONE");
   }
 
+  GRN_TEXT_PUTS(ctx, buf, " elements:");
+  grn_ii_inspect_elements(ctx, (grn_ii *)obj, buf);
+
   GRN_TEXT_PUTS(ctx, buf, ">");
 
   return GRN_SUCCESS;




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