Kouhei Sutou
null+****@clear*****
Thu May 9 11:36:29 JST 2013
Kouhei Sutou 2013-05-09 11:36:29 +0900 (Thu, 09 May 2013) New Revision: 58b2d09b88e142003bc9b85727c4669704a8d0b7 https://github.com/groonga/groonga/commit/58b2d09b88e142003bc9b85727c4669704a8d0b7 Message: Extract a code for setting a pat key table value Modified files: lib/db.c Modified: lib/db.c (+28 -16) =================================================================== --- lib/db.c 2013-05-09 11:34:46 +0900 (0ef7df4) +++ lib/db.c 2013-05-09 11:36:29 +0900 (389aef1) @@ -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_pat_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_pat_set_value(ctx, (grn_pat *)obj, id, v, flags); + if (range != value->header.domain) { + grn_obj_close(ctx, &buf); + } + + return rc; +} + +static grn_rc grn_obj_set_value_table_hash_key(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int flags) { @@ -5397,24 +5424,9 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id, ERR(GRN_INVALID_ARGUMENT, "not db_obj"); } } else { - grn_id range = DB_OBJ(obj)->range; - void *v = GRN_BULK_HEAD(value); switch (obj->header.type) { case GRN_TABLE_PAT_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_pat_set_value(ctx, (grn_pat *)obj, id, v, flags); - if (range != value->header.domain) { - grn_obj_close(ctx, &buf); - } - } + rc = grn_obj_set_value_table_pat_key(ctx, obj, id, value, flags); break; case GRN_TABLE_DAT_KEY : rc = GRN_OPERATION_NOT_SUPPORTED; -------------- next part -------------- HTML����������������������������... Download