null+****@clear*****
null+****@clear*****
2011年 12月 22日 (木) 08:34:25 JST
Daijiro MORI 2011-12-21 23:34:25 +0000 (Wed, 21 Dec 2011) New Revision: f3caec88fbff23dc5f4096079481bd4a36b74761 Log: exported grn_obj_delete_by_id() Modified files: include/groonga.h lib/db.c Modified: include/groonga.h (+8 -0) =================================================================== --- include/groonga.h 2011-12-21 22:41:37 +0000 (3f3ecf4) +++ include/groonga.h 2011-12-21 23:34:25 +0000 (acfed1b) @@ -1809,6 +1809,14 @@ GRN_API grn_obj *grn_obj_open(grn_ctx *ctx, unsigned char type, grn_obj_flags fl GRN_API int grn_column_index(grn_ctx *ctx, grn_obj *column, grn_operator op, grn_obj **indexbuf, int buf_size, int *section); + +/** + * grn_obj_delete_by_id: + * + * dbからidに対応するテーブルやカラムなどを削除します。mroonga向けに用意した内部APIです。 + **/ +GRN_API grn_rc grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, int removep); + /* geo */ typedef struct { Modified: lib/db.c (+10 -8) =================================================================== --- lib/db.c 2011-12-21 22:41:37 +0000 (20f2ea1) +++ lib/db.c 2011-12-21 23:34:25 +0000 (83cf022) @@ -282,8 +282,6 @@ grn_db_close(grn_ctx *ctx, grn_obj *db) GRN_API_RETURN(GRN_SUCCESS); } -static grn_rc grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, int removep); - grn_obj * grn_ctx_get(grn_ctx *ctx, const char *name, unsigned name_size) { @@ -6476,13 +6474,15 @@ grn_obj_register(grn_ctx *ctx, grn_obj *db, const char *name, unsigned name_size return id; } -static grn_rc +grn_rc grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, int removep) { + grn_rc rc = GRN_INVALID_ARGUMENT; + GRN_API_ENTER; if (id) { if (id & GRN_OBJ_TMP_OBJECT) { if (ctx->impl && ctx->impl->values) { - return grn_array_delete_by_id(ctx, ctx->impl->values, + rc = grn_array_delete_by_id(ctx, ctx->impl->values, id & ~GRN_OBJ_TMP_OBJECT, NULL); } } else { @@ -6497,16 +6497,18 @@ grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, int removep) if (removep) { switch (s->keys->header.type) { case GRN_TABLE_PAT_KEY : - return grn_pat_delete_by_id(ctx, (grn_pat *)s->keys, id, NULL); + rc = grn_pat_delete_by_id(ctx, (grn_pat *)s->keys, id, NULL); + break; case GRN_TABLE_DAT_KEY : - return grn_dat_delete_by_id(ctx, (grn_dat *)s->keys, id, NULL); + rc = grn_dat_delete_by_id(ctx, (grn_dat *)s->keys, id, NULL); + break; } } else { - return GRN_SUCCESS; + rc = GRN_SUCCESS; } } } - return GRN_INVALID_ARGUMENT; + GRN_API_RETURN(rc); } /* db must be validated by caller */