static int kvs_session_rename(WT_DATA_SOURCE *wtds, WT_SESSION *session, const char *uri, const char *newname, WT_CONFIG_ARG *config) { DATA_SOURCE *ds; DB *db; WT_EXTENSION_API *wt_api; int ret = 0; const char *name; (void)config; /* Unused parameters */ ds = (DATA_SOURCE *)wtds; wt_api = ds->wt_api; /* Get the object name */ if ((ret = uri2name(wt_api, session, uri, &name)) != 0) return (ret); if ((ret = single_thread(wtds, session, &ds->rwlock)) != 0) return (ret); if ((ret = db_create(&db, ds->dbenv, 0)) != 0) ESET(wt_api, session, WT_ERROR, "db_create: %s", db_strerror(ret)); else if ((ret = db->rename(db, name, NULL, newname, 0)) != 0) ESET(wt_api, session, WT_ERROR, "Db.rename: %s", db_strerror(ret)); /* db handle is dead */ ETRET(unlock(wt_api, session, &ds->rwlock)); return (ret); }
/* {{{ rberkeley_db_rename */ SEXP rberkeley_db_rename (SEXP _dbp, SEXP _file, SEXP _database, SEXP _newname) { DB *dbp; int ret; u_int32_t flags = 0; dbp = R_ExternalPtrAddr(_dbp); if(R_ExternalPtrTag(_dbp) != RBerkeley_DB || dbp == NULL) error("invalid 'db' handle"); ret = dbp->rename(dbp, (const char *)CHAR(STRING_ELT(_file,0)), (const char *)CHAR(STRING_ELT(_database,0)), (const char *)CHAR(STRING_ELT(_newname,0)), flags); return ScalarInteger(ret); }
int Db::rename(const char *file, const char *database, const char *newname, u_int32_t flags) { int err = 0; DB *db = unwrap(this); if (!db) { DB_ERROR("Db::rename", EINVAL, error_policy()); return (EINVAL); } // after a DB->rename (no matter if success or failure), // the underlying DB object must not be accessed, // so we clean up in advance. // cleanup(); if ((err = db->rename(db, file, database, newname, flags)) != 0) { DB_ERROR("Db::rename", err, error_policy()); return (err); } return (0); }