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