null+****@clear*****
null+****@clear*****
2012年 4月 22日 (日) 09:09:07 JST
Kouhei Sutou 2012-04-22 09:09:07 +0900 (Sun, 22 Apr 2012)
New Revision: c8cc636f0eaee20218678c9b07bce0eabb4eade7
Log:
load: log failed to set column value error
Modified files:
lib/db.c
Modified: lib/db.c (+46 -2)
===================================================================
--- lib/db.c 2012-04-22 08:57:54 +0900 (7081790)
+++ lib/db.c 2012-04-22 09:09:07 +0900 (47076b1)
@@ -8714,9 +8714,46 @@ bracket_close(grn_ctx *ctx, grn_loader *loader)
}
static void
+report_set_column_value_failure(grn_ctx *ctx,
+ grn_obj *key,
+ const char *column_name,
+ unsigned int column_name_size,
+ 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, ")");
+ }
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "[table][load] failed to set column value: %s: "
+ "key: <%.*s>, column: <%.*s>, value: <%.*s>",
+ ctx->errbuf,
+ GRN_TEXT_LEN(&key_inspected),
+ GRN_TEXT_VALUE(&key_inspected),
+ column_name_size,
+ column_name,
+ GRN_TEXT_LEN(&column_value_inspected),
+ GRN_TEXT_VALUE(&column_value_inspected));
+ GRN_OBJ_FIN(ctx, &key_inspected);
+ GRN_OBJ_FIN(ctx, &column_value_inspected);
+}
+
+static void
brace_close(grn_ctx *ctx, grn_loader *loader)
{
uint32_t begin;
+ grn_obj *key_value = NULL;
grn_obj *value, *ve;
grn_id id = GRN_ID_NIL;
GRN_UINT32_POP(&loader->level, begin);
@@ -8748,7 +8785,9 @@ brace_close(grn_ctx *ctx, grn_loader *loader)
}
key_column_name = value;
v++;
- id = loader_add(ctx, v);
+ key_value = v;
+ grn_p(ctx, key_value);
+ id = loader_add(ctx, key_value);
} else {
v = values_next(ctx, v);
}
@@ -8791,7 +8830,12 @@ brace_close(grn_ctx *ctx, grn_loader *loader)
} else if (value->header.domain == OPEN_BRACE) {
/* todo */
} else {
- grn_obj_set_value(ctx, col, id, value, GRN_OBJ_SET);
+ grn_rc rc;
+ rc = grn_obj_set_value(ctx, col, id, value, GRN_OBJ_SET);
+ if (rc != GRN_SUCCESS) {
+ report_set_column_value_failure(ctx, key_value,
+ name, name_size, value);
+ }
}
grn_obj_unlink(ctx, col);
} else {