[Groonga-commit] groonga/groonga at c13edf2 [master] grn_ts: use grn_ja_reader to read Text values

Back to archive index

Susumu Yata null+****@clear*****
Thu Dec 3 17:07:06 JST 2015


Susumu Yata	2015-12-03 17:07:06 +0900 (Thu, 03 Dec 2015)

  New Revision: c13edf266da052f5465630b2b38c16c84cebc3f6
  https://github.com/groonga/groonga/commit/c13edf266da052f5465630b2b38c16c84cebc3f6

  Message:
    grn_ts: use grn_ja_reader to read Text values
    
    GitHub: #441

  Modified files:
    lib/ts/ts_expr_node.c

  Modified: lib/ts/ts_expr_node.c (+17 -5)
===================================================================
--- lib/ts/ts_expr_node.c    2015-12-03 17:03:54 +0900 (089a2d3)
+++ lib/ts/ts_expr_node.c    2015-12-03 17:07:06 +0900 (69b5c41)
@@ -2452,21 +2452,33 @@ grn_ts_expr_column_node_evaluate_scalar(grn_ctx *ctx,
     GRN_TS_EXPR_COLUMN_NODE_EVALUATE_SCALAR_CASE(FLOAT, float)
     GRN_TS_EXPR_COLUMN_NODE_EVALUATE_SCALAR_CASE(TIME, time)
     case GRN_TS_TEXT: {
-      size_t i, size;
+      size_t i;
       char *buf_ptr;
       grn_ts_text *out_ptr = (grn_ts_text *)out;
-      /* Read column values into node->buf and save the size of each value. */
+      grn_ja_reader reader;
+      grn_ja_reader_init(ctx, &reader, (grn_ja *)node->column);
       node->buf.pos = 0;
       for (i = 0; i < n_in; i++) {
-        grn_rc rc = grn_ts_ja_get_value(ctx, node->column, in[i].id,
-                                        &node->buf, &size);
-        out_ptr[i].size = (rc == GRN_SUCCESS) ? size : 0;
+        grn_rc rc = grn_ja_reader_seek(ctx, &reader, in[i].id);
+        if (rc == GRN_SUCCESS) {
+          rc = grn_ts_buf_reserve(ctx, &node->buf,
+                                  node->buf.pos + reader.value_size);
+          if (rc == GRN_SUCCESS) {
+            rc = grn_ja_reader_read(ctx, &reader,
+                                    (char *)node->buf.ptr + node->buf.pos);
+            if (rc == GRN_SUCCESS) {
+              node->buf.pos += reader.value_size;
+            }
+          }
+        }
+        out_ptr[i].size = (rc == GRN_SUCCESS) ? reader.value_size : 0;
       }
       buf_ptr = (char *)node->buf.ptr;
       for (i = 0; i < n_in; i++) {
         out_ptr[i].ptr = buf_ptr;
         buf_ptr += out_ptr[i].size;
       }
+      grn_ja_reader_fin(ctx, &reader);
       return GRN_SUCCESS;
     }
     GRN_TS_EXPR_COLUMN_NODE_EVALUATE_SCALAR_CASE(GEO, geo)
-------------- next part --------------
HTML����������������������������...
다운로드 



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