void grn_output_uint64(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, int64_t value) { put_delimiter(ctx, outbuf, output_type); switch (output_type) { case GRN_CONTENT_JSON: grn_text_ulltoa(ctx, outbuf, value); break; case GRN_CONTENT_TSV: grn_text_ulltoa(ctx, outbuf, value); break; case GRN_CONTENT_XML: GRN_TEXT_PUTS(ctx, outbuf, "<INT>"); grn_text_ulltoa(ctx, outbuf, value); GRN_TEXT_PUTS(ctx, outbuf, "</INT>"); break; case GRN_CONTENT_MSGPACK : #ifdef HAVE_MESSAGE_PACK msgpack_pack_uint64(&ctx->impl->msgpacker, value); #endif break; case GRN_CONTENT_NONE: break; } INCR_LENGTH; }
static void msgpack2json(msgpack_object *o, grn_ctx *ctx, grn_obj *buf) { switch (o->type) { case MSGPACK_OBJECT_POSITIVE_INTEGER: grn_text_ulltoa(ctx, buf, o->via.u64); break; case MSGPACK_OBJECT_RAW: grn_text_esc(ctx, buf, o->via.raw.ptr, o->via.raw.size); break; case MSGPACK_OBJECT_ARRAY: GRN_TEXT_PUTC(ctx, buf, '['); { int i; for (i = 0; i < o->via.array.size; i++) { msgpack2json(o->via.array.ptr, ctx, buf); } } GRN_TEXT_PUTC(ctx, buf, ']'); break; case MSGPACK_OBJECT_DOUBLE: grn_text_ftoa(ctx, buf, o->via.dec); break; default: print_error("cannot handle this msgpack type."); } }
/* grn_ts_writer_output() outputs search results into the output buffer. */ static grn_rc grn_ts_writer_output(grn_ctx *ctx, grn_ts_writer *writer, const grn_ts_record *in, size_t n_in, size_t n_hits) { grn_rc rc; GRN_OUTPUT_ARRAY_OPEN("RESULT", 1); GRN_OUTPUT_ARRAY_OPEN("RESULTSET", 2 + n_in); GRN_OUTPUT_ARRAY_OPEN("NHITS", 1); rc = grn_text_ulltoa(ctx, ctx->impl->output.buf, n_hits); if (rc != GRN_SUCCESS) { return rc; } GRN_OUTPUT_ARRAY_CLOSE(); /* NHITS. */ rc = grn_ts_writer_output_header(ctx, writer); if (rc != GRN_SUCCESS) { return rc; } rc = grn_ts_writer_output_body(ctx, writer, in, n_in); if (rc != GRN_SUCCESS) { return rc; } GRN_OUTPUT_ARRAY_CLOSE(); /* RESULTSET. */ GRN_OUTPUT_ARRAY_CLOSE(); /* RESET. */ return GRN_SUCCESS; }