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;