Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/bdb.cpp
Show First 20 Lines • Show All 903 Lines • ▼ Show 20 Lines | if (env) { | ||||
env->m_db_in_use.notify_all(); | env->m_db_in_use.notify_all(); | ||||
} | } | ||||
} | } | ||||
std::unique_ptr<DatabaseBatch> | std::unique_ptr<DatabaseBatch> | ||||
BerkeleyDatabase::MakeBatch(const char *mode, bool flush_on_close) { | BerkeleyDatabase::MakeBatch(const char *mode, bool flush_on_close) { | ||||
return std::make_unique<BerkeleyBatch>(*this, mode, flush_on_close); | return std::make_unique<BerkeleyBatch>(*this, mode, flush_on_close); | ||||
} | } | ||||
bool ExistsBerkeleyDatabase(const fs::path &path) { | |||||
fs::path env_directory; | |||||
std::string data_filename; | |||||
SplitWalletPath(path, env_directory, data_filename); | |||||
return IsBerkeleyBtree(env_directory / data_filename); | |||||
} | |||||
std::unique_ptr<BerkeleyDatabase> | |||||
MakeBerkeleyDatabase(const fs::path &path, const DatabaseOptions &options, | |||||
DatabaseStatus &status, bilingual_str &error) { | |||||
std::unique_ptr<BerkeleyDatabase> db; | |||||
{ | |||||
// Lock env.m_databases until insert in BerkeleyDatabase constructor | |||||
LOCK(cs_db); | |||||
std::string data_filename; | |||||
std::shared_ptr<BerkeleyEnvironment> env = | |||||
GetWalletEnv(path, data_filename); | |||||
if (env->m_databases.count(data_filename)) { | |||||
error = Untranslated(strprintf( | |||||
"Refusing to load database. Data file '%s' is already loaded.", | |||||
(env->Directory() / data_filename).string())); | |||||
status = DatabaseStatus::FAILED_ALREADY_LOADED; | |||||
return nullptr; | |||||
} | |||||
db = std::make_unique<BerkeleyDatabase>(std::move(env), | |||||
std::move(data_filename)); | |||||
} | |||||
if (options.verify && !db->Verify(error)) { | |||||
status = DatabaseStatus::FAILED_VERIFY; | |||||
return nullptr; | |||||
} | |||||
status = DatabaseStatus::SUCCESS; | |||||
return db; | |||||
} |