[Groonga-commit] groonga/groonga at b034a79 [master] grn_obj_get_info(GRN_INFO_TOKEN_FILTERS) writes to buffer again

Back to archive index
Kouhei Sutou null+****@clear*****
Tue Oct 30 15:10:14 JST 2018


Kouhei Sutou	2018-10-30 15:10:14 +0900 (Tue, 30 Oct 2018)

  Revision: b034a79882ea7bcaa78f84a898ada69f1923d8f2
  https://github.com/groonga/groonga/commit/b034a79882ea7bcaa78f84a898ada69f1923d8f2

  Message:
    grn_obj_get_info(GRN_INFO_TOKEN_FILTERS) writes to buffer again

  Modified files:
    lib/db.c

  Modified: lib/db.c (+33 -17)
===================================================================
--- lib/db.c    2018-10-30 15:04:04 +0900 (7ee13f7fb)
+++ lib/db.c    2018-10-30 15:10:14 +0900 (6b4d723de)
@@ -8377,23 +8377,39 @@ grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valueb
       }
       break;
     case GRN_INFO_TOKEN_FILTERS :
-      switch (obj->header.type) {
-      case GRN_TABLE_HASH_KEY :
-        valuebuf = &(((grn_hash *)obj)->token_filter_procs);
-        break;
-      case GRN_TABLE_PAT_KEY :
-        valuebuf = &(((grn_pat *)obj)->token_filter_procs);
-        break;
-      case GRN_TABLE_DAT_KEY :
-        valuebuf = &(((grn_dat *)obj)->token_filter_procs);
-        break;
-      default :
-        ERR(GRN_INVALID_ARGUMENT,
-            /* TODO: Show type name instead of type ID */
-            "[info][get][token-filters] target object must be one of "
-            "GRN_TABLE_HASH_KEY, GRN_TABLE_PAT_KEY and GRN_TABLE_DAT_KEY: %d",
-            obj->header.type);
-        break;
+      if (!valuebuf) {
+        if (!(valuebuf = grn_obj_open(ctx, GRN_PVECTOR, 0, 0))) {
+          ERR(GRN_NO_MEMORY_AVAILABLE,
+              "grn_obj_get_info: failed to allocate value buffer");
+          goto exit;
+        }
+      }
+      {
+        grn_obj *token_filters = NULL;
+        switch (obj->header.type) {
+        case GRN_TABLE_HASH_KEY :
+          token_filters = &(((grn_hash *)obj)->token_filter_procs);
+          break;
+        case GRN_TABLE_PAT_KEY :
+          token_filters = &(((grn_pat *)obj)->token_filter_procs);
+          break;
+        case GRN_TABLE_DAT_KEY :
+          token_filters = &(((grn_dat *)obj)->token_filter_procs);
+          break;
+        default :
+          ERR(GRN_INVALID_ARGUMENT,
+              /* TODO: Show type name instead of type ID */
+              "[info][get][token-filters] target object must be one of "
+              "GRN_TABLE_HASH_KEY, GRN_TABLE_PAT_KEY and GRN_TABLE_DAT_KEY: %d",
+              obj->header.type);
+          break;
+        }
+        if (token_filters) {
+          grn_bulk_write(ctx,
+                         valuebuf,
+                         GRN_BULK_HEAD(token_filters),
+                         GRN_BULK_VSIZE(token_filters));
+        }
       }
       break;
     default :
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20181030/66722023/attachment-0001.html>


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