null+****@clear*****
null+****@clear*****
2012年 4月 22日 (日) 09:39:53 JST
Kouhei Sutou 2012-04-22 09:39:53 +0900 (Sun, 22 Apr 2012) New Revision: 3dfb55feb91e1af714f41c879dc6764cfa8130b7 Log: Extract limited inspect code Modified files: lib/db.c Modified: lib/db.c (+43 -11) =================================================================== --- lib/db.c 2012-04-22 09:11:36 +0900 (58a139c) +++ lib/db.c 2012-04-22 09:39:53 +0900 (e607444) @@ -8713,6 +8713,47 @@ bracket_close(grn_ctx *ctx, grn_loader *loader) } } +static grn_bool +is_text_object(grn_obj *object) +{ + if (!object) { + return GRN_FALSE; + } + + if (object->header.type != GRN_BULK) { + return GRN_FALSE; + } + + switch (object->header.domain) { + case GRN_DB_SHORT_TEXT: + case GRN_DB_TEXT: + case GRN_DB_LONG_TEXT: + return GRN_TRUE; + default: + return GRN_FALSE; + } +} + +static void +limited_size_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *object) +{ + unsigned int original_size = 0; + unsigned int max_size = GRN_CTX_MSGSIZE / 2; + + if (object) { + original_size = GRN_BULK_VSIZE(object); + } + + if (original_size > max_size && is_text_object(object)) { + grn_text_esc(ctx, buffer, GRN_TEXT_VALUE(object), max_size); + GRN_TEXT_PUTS(ctx, buffer, "...("); + grn_text_lltoa(ctx, buffer, original_size); + GRN_TEXT_PUTS(ctx, buffer, ")"); + } else { + grn_inspect(ctx, buffer, object); + } +} + static void report_set_column_value_failure(grn_ctx *ctx, grn_obj *key, @@ -8721,20 +8762,11 @@ report_set_column_value_failure(grn_ctx *ctx, grn_obj *column_value) { grn_obj key_inspected, column_value_inspected; - unsigned int value_size; - unsigned int max_value_size = GRN_CTX_MSGSIZE / 2; GRN_TEXT_INIT(&key_inspected, 0); GRN_TEXT_INIT(&column_value_inspected, 0); - grn_inspect(ctx, &key_inspected, key); - grn_inspect(ctx, &column_value_inspected, column_value); - value_size = GRN_TEXT_LEN(&column_value_inspected); - if (value_size > max_value_size) { - grn_bulk_truncate(ctx, &column_value_inspected, max_value_size); - GRN_TEXT_PUTS(ctx, &column_value_inspected, "...("); - grn_text_lltoa(ctx, &column_value_inspected, value_size); - GRN_TEXT_PUTS(ctx, &column_value_inspected, ")"); - } + limited_size_inspect(ctx, &key_inspected, key); + limited_size_inspect(ctx, &column_value_inspected, column_value); GRN_LOG(ctx, GRN_LOG_ERROR, "[table][load] failed to set column value: %s: " "key: <%.*s>, column: <%.*s>, value: <%.*s>",