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>",