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����������������������������...다운로드