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 */