null+****@clear*****
null+****@clear*****
2011年 11月 16日 (水) 11:00:38 JST
Daijiro MORI 2011-11-16 02:00:38 +0000 (Wed, 16 Nov 2011) New Revision: f00d6b3e92415bc182d5ad050c1626ea8f2827ef Log: added grn_table_update() Modified files: include/groonga.h lib/db.c Modified: include/groonga.h (+29 -1) =================================================================== --- include/groonga.h 2011-11-15 10:19:26 +0000 (25934c4) +++ include/groonga.h 2011-11-16 02:00:38 +0000 (4b448e0) @@ -772,12 +772,40 @@ GRN_API grn_rc grn_table_delete(grn_ctx *ctx, grn_obj *table, * @table: 対象table * @id: レコードID * - * tableのkeyに対応するレコードを削除する。 + * tableのidに対応するレコードを削除する。 * 対応するレコードが存在しない場合はGRN_INVALID_ARGUMENTを返す。 **/ GRN_API grn_rc grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id); /** + * grn_table_update_by_id: + * @table: 対象table + * @id: レコードID + * + * tableのidに対応するレコードのkeyを変更する。 + * 新しいkeyとそのbyte長をdest_keyとdest_key_sizeに指定する。 + * この操作は、GRN_TABLE_DAT_KEY型のテーブルのみ使用できる。 + **/ +GRN_API grn_rc grn_table_update_by_id(grn_ctx *ctx, grn_obj *table, grn_id id, + const void *dest_key, unsigned int dest_key_size); + +/** + * grn_table_update_by_id: + * @table: 対象table + * @src_key: 対象レコードのkey + * @src_key_size: 対象レコードのkeyの長さ(byte) + * @dest_key: 変更後のkey + * @dest_key_size: 変更後のkeyの長さ(byte) + * + * tableのsrc_keyに対応するレコードのkeyを変更する。 + * 新しいkeyとそのbyte長をdest_keyとdest_key_sizeに指定する。 + * この操作は、GRN_TABLE_DAT_KEY型のテーブルのみ使用できる。 + **/ +GRN_API grn_rc grn_table_update(grn_ctx *ctx, grn_obj *table, + const void *src_key, unsigned int src_key_size, + const void *dest_key, unsigned int dest_key_size); + +/** * grn_table_truncate: * @table: 対象table * Modified: lib/db.c (+34 -2) =================================================================== --- lib/db.c 2011-11-15 10:19:26 +0000 (16e1fe5) +++ lib/db.c 2011-11-16 02:00:38 +0000 (3ea6d1b) @@ -6033,11 +6033,43 @@ exit : } grn_rc +grn_table_update_by_id(grn_ctx *ctx, grn_obj *table, grn_id id, + const void *dest_key, unsigned int dest_key_size) +{ + grn_rc rc = GRN_OPERATION_NOT_SUPPORTED; + GRN_API_ENTER; + if (table->header.type == GRN_TABLE_DAT_KEY) { + rc = grn_dat_update_by_id(ctx, (grn_dat *)table, id, dest_key, dest_key_size); + } + GRN_API_RETURN(rc); +} + +grn_rc +grn_table_update(grn_ctx *ctx, grn_obj *table, + const void *src_key, unsigned int src_key_size, + const void *dest_key, unsigned int dest_key_size) +{ + grn_rc rc = GRN_OPERATION_NOT_SUPPORTED; + GRN_API_ENTER; + if (table->header.type == GRN_TABLE_DAT_KEY) { + rc = grn_dat_update(ctx, (grn_dat *)table, + src_key, src_key_size, + dest_key, dest_key_size); + } + GRN_API_RETURN(rc); +} + +grn_rc grn_obj_rename(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name_size) { + grn_rc rc = GRN_INVALID_ARGUMENT; GRN_API_ENTER; - /* coming soon! */ - GRN_API_RETURN(GRN_SUCCESS); + if (ctx && ctx->impl && GRN_DB_P(ctx->impl->db) && GRN_DB_OBJP(obj) && !IS_TEMP(obj)) { + grn_db *s = (grn_db *)ctx->impl->db; + grn_obj *keys = (grn_obj *)s->keys; + rc = grn_table_update_by_id(ctx, keys, DB_OBJ(obj)->id, name, name_size); + } + GRN_API_RETURN(rc); } grn_rc