[Groonga-commit] groonga/groonga at 3063f31 [master] Extract code for outputting result set

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jul 13 22:51:44 JST 2014


Kouhei Sutou	2014-07-13 22:51:44 +0900 (Sun, 13 Jul 2014)

  New Revision: 3063f316216d90c52460efc4bb18572c88cdb1b2
  https://github.com/groonga/groonga/commit/3063f316216d90c52460efc4bb18572c88cdb1b2

  Message:
    Extract code for outputting result set

  Modified files:
    lib/output.c

  Modified: lib/output.c (+67 -53)
===================================================================
--- lib/output.c    2014-07-12 15:45:50 +0900 (855c65b)
+++ lib/output.c    2014-07-13 22:51:44 +0900 (b83cdaf)
@@ -1,5 +1,5 @@
 /* -*- c-basic-offset: 2 -*- */
-/* Copyright(C) 2009-2013 Brazil
+/* Copyright(C) 2009-2014 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -751,68 +751,83 @@ grn_output_bulk(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
   GRN_OBJ_FIN(ctx, &buf);
 }
 
-static inline void
-grn_output_uvector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
-                   grn_obj *uvector, grn_obj_format *format)
+static void
+grn_output_uvector_result_set(grn_ctx *ctx,
+                              grn_obj *outbuf,
+                              grn_content_type output_type,
+                              grn_obj *uvector,
+                              grn_obj_format *format)
 {
+  int i, j;
+  grn_id *v = (grn_id *)GRN_BULK_HEAD(uvector), *ve = (grn_id *)GRN_BULK_CURR(uvector);
+  int ncolumns = GRN_BULK_VSIZE(&format->columns) / sizeof(grn_obj *);
+  grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
   grn_obj buf;
+
   GRN_TEXT_INIT(&buf, 0);
-  if (format) {
-    int i, j;
-    grn_id *v = (grn_id *)GRN_BULK_HEAD(uvector), *ve = (grn_id *)GRN_BULK_CURR(uvector);
-    int ncolumns = GRN_BULK_VSIZE(&format->columns) / sizeof(grn_obj *);
-    grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
-    grn_output_array_open(ctx, outbuf, output_type, "RESULTSET", -1);
-    grn_output_array_open(ctx, outbuf, output_type, "NHITS", 1);
-    grn_text_itoa(ctx, outbuf, ve - v);
-    grn_output_array_close(ctx, outbuf, output_type);
-    if (v < ve) {
-      if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
-        grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", -1);
-        for (j = 0; j < ncolumns; j++) {
-          grn_id range_id;
-          grn_output_array_open(ctx, outbuf, output_type, "COLUMN", -1);
-          GRN_BULK_REWIND(&buf);
-          grn_column_name_(ctx, columns[j], &buf);
-          grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
-          /* column range */
-          range_id = grn_obj_get_range(ctx, columns[j]);
-          if (range_id == GRN_ID_NIL) {
-            GRN_TEXT_PUTS(ctx, outbuf, "null");
-          } else {
-            int name_len;
-            grn_obj *range_obj;
-            char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+  grn_output_array_open(ctx, outbuf, output_type, "RESULTSET", -1);
+  grn_output_array_open(ctx, outbuf, output_type, "NHITS", 1);
+  grn_text_itoa(ctx, outbuf, ve - v);
+  grn_output_array_close(ctx, outbuf, output_type);
+  if (v < ve) {
+    if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+      grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", -1);
+      for (j = 0; j < ncolumns; j++) {
+        grn_id range_id;
+        grn_output_array_open(ctx, outbuf, output_type, "COLUMN", -1);
+        GRN_BULK_REWIND(&buf);
+        grn_column_name_(ctx, columns[j], &buf);
+        grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+        /* column range */
+        range_id = grn_obj_get_range(ctx, columns[j]);
+        if (range_id == GRN_ID_NIL) {
+          GRN_TEXT_PUTS(ctx, outbuf, "null");
+        } else {
+          int name_len;
+          grn_obj *range_obj;
+          char name_buf[GRN_TABLE_MAX_KEY_SIZE];
 
-            range_obj = grn_ctx_at(ctx, range_id);
-            name_len = grn_obj_name(ctx, range_obj, name_buf,
-                                    GRN_TABLE_MAX_KEY_SIZE);
-            GRN_BULK_REWIND(&buf);
-            GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
-            grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
-          }
-          grn_output_array_close(ctx, outbuf, output_type);
-        }
-        grn_output_array_close(ctx, outbuf, output_type);
-      }
-      for (i = 0;; i++) {
-        grn_output_array_open(ctx, outbuf, output_type, "HITS", -1);
-        for (j = 0; j < ncolumns; j++) {
+          range_obj = grn_ctx_at(ctx, range_id);
+          name_len = grn_obj_name(ctx, range_obj, name_buf,
+                                  GRN_TABLE_MAX_KEY_SIZE);
           GRN_BULK_REWIND(&buf);
-          grn_obj_get_value(ctx, columns[j], *v, &buf);
+          GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
           grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
         }
         grn_output_array_close(ctx, outbuf, output_type);
-        v++;
-        if (v < ve) {
+      }
+      grn_output_array_close(ctx, outbuf, output_type);
+    }
+    for (i = 0;; i++) {
+      grn_output_array_open(ctx, outbuf, output_type, "HITS", -1);
+      for (j = 0; j < ncolumns; j++) {
+        GRN_BULK_REWIND(&buf);
+        grn_obj_get_value(ctx, columns[j], *v, &buf);
+        grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+      }
+      grn_output_array_close(ctx, outbuf, output_type);
+      v++;
+      if (v < ve) {
 
-        } else {
-          break;
-        }
+      } else {
+        break;
       }
     }
-    grn_output_array_close(ctx, outbuf, output_type);
-  } else {
+  }
+  grn_output_array_close(ctx, outbuf, output_type);
+  GRN_OBJ_FIN(ctx, &buf);
+}
+
+static inline void
+grn_output_uvector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+                   grn_obj *uvector, grn_obj_format *format)
+{
+  if (format) {
+    grn_output_uvector_result_set(ctx, outbuf, output_type, uvector, format);
+    return;
+  }
+
+  {
     grn_obj *range = grn_ctx_at(ctx, uvector->header.domain);
     if (range && range->header.type == GRN_TYPE) {
       int value_size = ((struct _grn_type *)range)->obj.range;
@@ -866,7 +881,6 @@ grn_output_uvector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
       grn_output_array_close(ctx, outbuf, output_type);
     }
   }
-  GRN_OBJ_FIN(ctx, &buf);
 }
 
 static inline void
-------------- next part --------------
HTML����������������������������...
Download 



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