null+****@clear*****
null+****@clear*****
2010年 7月 15日 (木) 17:25:59 JST
Kouhei Sutou 2010-07-15 08:25:59 +0000 (Thu, 15 Jul 2010) New Revision: e139b59e96041d0fdcb206e79fc8a17e36552f33 Log: support record uvector inspection. Modified files: lib/util.c test/unit/core/test-inspect.c Modified: lib/util.c (+41 -0) =================================================================== --- lib/util.c 2010-07-15 08:10:04 +0000 (5a3c7f9) +++ lib/util.c 2010-07-15 08:25:59 +0000 (70ecd70) @@ -392,6 +392,8 @@ grn_record_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj) table = grn_ctx_at(ctx, obj->header.domain); GRN_TEXT_PUTS(ctx, buf, "#<record:"); grn_table_type_inspect(ctx, buf, table); + GRN_TEXT_PUTS(ctx, buf, ":"); + grn_name_inspect(ctx, buf, table); GRN_TEXT_PUTS(ctx, buf, " id:"); id = GRN_RECORD_VALUE(obj); @@ -437,6 +439,29 @@ grn_record_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj) return GRN_SUCCESS; } +static grn_rc +grn_uvector_record_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj) +{ + int i; + grn_id *v, *ve; + grn_obj record; + + v = (grn_id *)GRN_BULK_HEAD(obj); + ve = (grn_id *)GRN_BULK_CURR(obj); + GRN_RECORD_INIT(&record, 0, obj->header.domain); + GRN_TEXT_PUTS(ctx, buf, "["); + while (v < ve) { + if (i++ > 0) { GRN_TEXT_PUTS(ctx, buf, ", "); } + GRN_RECORD_SET(ctx, &record, *v); + grn_inspect(ctx, buf, &record); + v++; + } + GRN_TEXT_PUTS(ctx, buf, "]"); + GRN_OBJ_FIN(ctx, &record); + + return GRN_SUCCESS; +} + grn_obj * grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj) { @@ -468,6 +493,22 @@ grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj) } } break; + case GRN_UVECTOR : + domain = grn_ctx_at(ctx, obj->header.domain); + if (domain) { + grn_id type = domain->header.type; + grn_obj_unlink(ctx, domain); + switch (type) { + case GRN_TABLE_HASH_KEY : + case GRN_TABLE_PAT_KEY : + case GRN_TABLE_NO_KEY : + grn_uvector_record_inspect(ctx, buffer, obj); + return buffer; + default : + break; + } + } + break; case GRN_EXPR : grn_expr_inspect(ctx, buffer, obj); return buffer; Modified: test/unit/core/test-inspect.c (+6 -2) =================================================================== --- test/unit/core/test-inspect.c 2010-07-15 08:10:04 +0000 (e6dd6ed) +++ test/unit/core/test-inspect.c 2010-07-15 08:25:59 +0000 (fb198f7) @@ -502,7 +502,11 @@ test_uvector_with_records(void) GRN_RECORD_PUT(context, uvector, 1); GRN_RECORD_PUT(context, uvector, 2); inspected = grn_inspect(context, NULL, uvector); - cut_assert_equal_string("[\"groonga.org\",\"razil.jp\"]", inspected_string()); + cut_assert_equal_string("[" + "#<record:pat:Sites id:1 key:\"groonga.org\">, " + "#<record:pat:Sites id:2 key:\"razil.jp\">" + "]", + inspected_string()); } void @@ -725,7 +729,7 @@ test_record(void) grn_obj_id(context, get_object("Sites"))); GRN_RECORD_SET(context, record, 1); inspected = grn_inspect(context, NULL, record); - cut_assert_equal_string("#<record:hash " + cut_assert_equal_string("#<record:hash:Sites " "id:1 " "key:\"groonga.org\" " "name:\"groonga\""