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

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 22日 (火) 13:57:32 JST


Daijiro MORI	2011-11-22 04:57:32 +0000 (Tue, 22 Nov 2011)

  New Revision: 053253572b2a8fec3d0d921149b87e8a11584735

  Log:
    added grn_table_rename()

  Modified files:
    lib/db.c

  Modified: lib/db.c (+37 -0)
===================================================================
--- lib/db.c    2011-11-22 01:20:04 +0000 (fd0fd06)
+++ lib/db.c    2011-11-22 04:57:32 +0000 (3780916)
@@ -6180,6 +6180,43 @@ grn_obj_rename(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name_size)
 }
 
 grn_rc
+grn_table_rename(grn_ctx *ctx, grn_obj *table, const char *name, unsigned name_size)
+{
+  grn_rc rc = GRN_INVALID_ARGUMENT;
+  GRN_API_ENTER;
+  if (GRN_OBJ_TABLEP(table) && DB_OBJ(table)->id &&
+      !(DB_OBJ(table)->id & GRN_OBJ_TMP_OBJECT)) {
+    if (!(rc = grn_obj_rename(ctx, table, name, name_size))) {
+      grn_hash *cols;
+      if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+                                  GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+        if (grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) {
+          grn_id *key;
+          char fullname[GRN_PAT_MAX_KEY_SIZE];
+          memcpy(fullname, name, name_size);
+          fullname[name_size] = GRN_DB_DELIMITER;
+          GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+            grn_obj *col = grn_ctx_at(ctx, *key);
+            if (col) {
+              int colname_len = grn_column_name(ctx, col, fullname + name_size + 1,
+                                                GRN_PAT_MAX_KEY_SIZE - name_size - 1);
+              if (colname_len) {
+                if ((rc = grn_obj_rename(ctx, col, fullname,
+                                         name_size + 1 + colname_len))) {
+                  break;
+                }
+              }
+            }
+          });
+        }
+        grn_hash_close(ctx, cols);
+      }
+    }
+  }
+  GRN_API_RETURN(rc);
+}
+
+grn_rc
 grn_column_rename(grn_ctx *ctx, grn_obj *column, const char *name, unsigned name_size)
 {
   grn_rc rc = GRN_INVALID_ARGUMENT;




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