Kouhei Sutou
null+****@clear*****
Thu May 9 11:34:46 JST 2013
Kouhei Sutou 2013-05-09 11:34:46 +0900 (Thu, 09 May 2013) New Revision: 7fd97024ecdc85e01d540daff890a6b0b42bcd67 https://github.com/groonga/groonga/commit/7fd97024ecdc85e01d540daff890a6b0b42bcd67 Message: Extract a code for setting a hash key table value Modified files: lib/db.c Modified: lib/db.c (+28 -14) =================================================================== --- lib/db.c 2013-05-09 11:33:26 +0900 (981708f) +++ lib/db.c 2013-05-09 11:34:46 +0900 (0ef7df4) @@ -5096,6 +5096,33 @@ call_hook_for_build(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int f } static grn_rc +grn_obj_set_value_table_hash_key(grn_ctx *ctx, grn_obj *obj, grn_id id, + grn_obj *value, int flags) +{ + grn_rc rc = GRN_INVALID_ARGUMENT; + grn_id range = DB_OBJ(obj)->range; + void *v = GRN_BULK_HEAD(value); + grn_obj buf; + + if (call_hook(ctx, obj, id, value, flags)) { + return rc; + } + + if (range != value->header.domain) { + GRN_OBJ_INIT(&buf, GRN_BULK, 0, range); + if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) { + v = GRN_BULK_HEAD(&buf); + } + } + rc = grn_hash_set_value(ctx, (grn_hash *)obj, id, v, flags); + if (range != value->header.domain) { + grn_obj_close(ctx, &buf); + } + + return rc; +} + +static grn_rc grn_obj_set_value_table_no_key(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int flags) { @@ -5393,20 +5420,7 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id, rc = GRN_OPERATION_NOT_SUPPORTED; break; case GRN_TABLE_HASH_KEY : - { - grn_obj buf; - if (call_hook(ctx, obj, id, value, flags)) { goto exit; } - if (range != value->header.domain) { - GRN_OBJ_INIT(&buf, GRN_BULK, 0, range); - if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) { - v = GRN_BULK_HEAD(&buf); - } - } - rc = grn_hash_set_value(ctx, (grn_hash *)obj, id, v, flags); - if (range != value->header.domain) { - grn_obj_close(ctx, &buf); - } - } + rc = grn_obj_set_value_table_hash_key(ctx, obj, id, value, flags); break; case GRN_TABLE_NO_KEY : rc = grn_obj_set_value_table_no_key(ctx, obj, id, value, flags); -------------- next part -------------- HTML����������������������������...Download