[Groonga-commit] groonga/groonga at 0bfa12c [master] grn_ii_buffer: flush tokenized values in grn_ii_buffer_tokenize

Back to archive index

susumu.yata null+****@clear*****
Fri Aug 14 13:14:11 JST 2015


susumu.yata	2015-08-14 13:14:11 +0900 (Fri, 14 Aug 2015)

  New Revision: 0bfa12c81fabac40e9fc9275917919a73cfb4fa9
  https://github.com/groonga/groonga/commit/0bfa12c81fabac40e9fc9275917919a73cfb4fa9

  Message:
    grn_ii_buffer: flush tokenized values in grn_ii_buffer_tokenize
    
    GitHub: #374

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+18 -17)
===================================================================
--- lib/ii.c    2015-08-14 12:56:08 +0900 (66e55f4)
+++ lib/ii.c    2015-08-14 13:14:11 +0900 (355bbce)
@@ -7555,7 +7555,25 @@ grn_ii_buffer_tokenize_value(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
 static void
 grn_ii_buffer_tokenize(grn_ctx *ctx, grn_ii_buffer *ii_buffer, grn_id rid)
 {
+  // Estimate the size of tokenized values and resize the internal buffer if
+  // the buffer size is not enough.
   unsigned int i;
+  uint32_t est_len = 0;
+  for (i = 0; i < ii_buffer->nvalues; i++) {
+    est_len += ii_buffer->values[i].len * 2 + 2;
+  }
+  if (ii_buffer->block_buf_size < ii_buffer->block_pos + est_len) {
+    grn_ii_buffer_flush(ctx, ii_buffer);
+  }
+  if (ii_buffer->block_buf_size < est_len) {
+    grn_id *block_buf = (grn_id *)GRN_REALLOC(ii_buffer->block_buf,
+                                              est_len * sizeof(grn_id));
+    if (block_buf) {
+      ii_buffer->block_buf = block_buf;
+      ii_buffer->block_buf_size = est_len;
+    }
+  }
+  // Tokenize values.
   for (i = 0; i < ii_buffer->nvalues; i++) {
     const ii_buffer_value *value = &ii_buffer->values[i];
     if (value->len) {
@@ -8111,7 +8129,6 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
     if ((tc = grn_table_cursor_open(ctx, target,
                                     NULL, 0, NULL, 0, 0, -1,
                                     GRN_CURSOR_BY_ID))) {
-      uint32_t est_len;
       grn_id rid;
       while ((rid = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
         unsigned int j;
@@ -8166,22 +8183,6 @@ grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
             break;
           }
         }
-
-        est_len = 0;
-        for (j = 0; j < ii_buffer->nvalues; j++) {
-          est_len += ii_buffer->values[j].len * 2 + 2;
-        }
-        if (ii_buffer->block_buf_size < ii_buffer->block_pos + est_len) {
-          grn_ii_buffer_flush(ctx, ii_buffer);
-        }
-        if (ii_buffer->block_buf_size < est_len) {
-          grn_id *block_buf = (grn_id *)GRN_REALLOC(ii_buffer->block_buf,
-                                                    est_len * sizeof(grn_id));
-          if (block_buf) {
-            ii_buffer->block_buf = block_buf;
-            ii_buffer->block_buf_size = est_len;
-          }
-        }
         grn_ii_buffer_tokenize(ctx, ii_buffer, rid);
       }
       grn_table_cursor_close(ctx, tc);
-------------- next part --------------
HTML����������������������������...
다운로드 



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