[Groonga-commit] groonga/groonga [master] added grn_table_update()

Back to archive index

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




Groonga-commit メーリングリストの案内
Back to archive index