Kouhei Sutou
null+****@clear*****
Tue Apr 28 15:24:59 JST 2015
Kouhei Sutou 2015-04-28 15:24:59 +0900 (Tue, 28 Apr 2015) New Revision: c845d17a4638989a8178c3d411ae93372ffede36 https://github.com/groonga/groonga/commit/c845d17a4638989a8178c3d411ae93372ffede36 Message: mrb: support Bulk#value for record Modified files: lib/mrb/mrb_bulk.c Modified: lib/mrb/mrb_bulk.c (+34 -14) =================================================================== --- lib/mrb/mrb_bulk.c 2015-04-28 15:02:51 +0900 (0fa7472) +++ lib/mrb/mrb_bulk.c 2015-04-28 15:24:59 +0900 (84cfb8d) @@ -137,27 +137,47 @@ grn_mrb_value_from_bulk(mrb_state *mrb, grn_obj *bulk) break; default : { -#define MESSAGE_SIZE 4096 - char message[MESSAGE_SIZE]; grn_obj *domain; - char domain_name[GRN_TABLE_MAX_KEY_SIZE]; - int domain_name_size; + grn_bool is_record = GRN_FALSE; domain = grn_ctx_at(ctx, bulk->header.domain); if (domain) { - domain_name_size = grn_obj_name(ctx, domain, - domain_name, GRN_TABLE_MAX_KEY_SIZE); + switch (domain->header.type) { + case GRN_TABLE_HASH_KEY : + case GRN_TABLE_PAT_KEY : + case GRN_TABLE_DAT_KEY : + case GRN_TABLE_NO_KEY : + is_record = GRN_TRUE; + break; + default : + break; + } + } + + if (is_record) { + mrb_value_ = mrb_fixnum_value(GRN_RECORD_VALUE(bulk)); grn_obj_unlink(ctx, domain); } else { - grn_strcpy(domain_name, GRN_TABLE_MAX_KEY_SIZE, "unknown"); - domain_name_size = strlen(domain_name); +#define MESSAGE_SIZE 4096 + char message[MESSAGE_SIZE]; + char domain_name[GRN_TABLE_MAX_KEY_SIZE]; + int domain_name_size; + + if (domain) { + domain_name_size = grn_obj_name(ctx, domain, + domain_name, GRN_TABLE_MAX_KEY_SIZE); + grn_obj_unlink(ctx, domain); + } else { + grn_strcpy(domain_name, GRN_TABLE_MAX_KEY_SIZE, "unknown"); + domain_name_size = strlen(domain_name); + } + grn_snprintf(message, MESSAGE_SIZE, MESSAGE_SIZE, + "unsupported bulk value type: <%d>(%.*s)", + bulk->header.domain, + domain_name_size, + domain_name); + mrb_raise(mrb, E_RANGE_ERROR, message); } - grn_snprintf(message, MESSAGE_SIZE, MESSAGE_SIZE, - "unsupported bulk value type: <%d>(%.*s)", - bulk->header.domain, - domain_name_size, - domain_name); - mrb_raise(mrb, E_RANGE_ERROR, message); #undef MESSAGE_SIZE } break; -------------- next part -------------- HTML����������������������������...下载