mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
wallet: Move DummyDatabase to salvage
It's only used by salvage, so make it local to that only.
This commit is contained in:
parent
f67a385556
commit
14aa4cb1e4
4 changed files with 46 additions and 55 deletions
|
@ -174,51 +174,6 @@ public:
|
||||||
virtual std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) = 0;
|
virtual std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DummyCursor : public DatabaseCursor
|
|
||||||
{
|
|
||||||
Status Next(DataStream& key, DataStream& value) override { return Status::FAIL; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/** RAII class that provides access to a DummyDatabase. Never fails. */
|
|
||||||
class DummyBatch : public DatabaseBatch
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
bool ReadKey(DataStream&& key, DataStream& value) override { return true; }
|
|
||||||
bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite = true) override { return true; }
|
|
||||||
bool EraseKey(DataStream&& key) override { return true; }
|
|
||||||
bool HasKey(DataStream&& key) override { return true; }
|
|
||||||
bool ErasePrefix(Span<const std::byte> prefix) override { return true; }
|
|
||||||
|
|
||||||
public:
|
|
||||||
void Flush() override {}
|
|
||||||
void Close() override {}
|
|
||||||
|
|
||||||
std::unique_ptr<DatabaseCursor> GetNewCursor() override { return std::make_unique<DummyCursor>(); }
|
|
||||||
bool TxnBegin() override { return true; }
|
|
||||||
bool TxnCommit() override { return true; }
|
|
||||||
bool TxnAbort() override { return true; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A dummy WalletDatabase that does nothing and never fails. Only used by unit tests.
|
|
||||||
**/
|
|
||||||
class DummyDatabase : public WalletDatabase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void Open() override {};
|
|
||||||
void AddRef() override {}
|
|
||||||
void RemoveRef() override {}
|
|
||||||
bool Rewrite(const char* pszSkip=nullptr) override { return true; }
|
|
||||||
bool Backup(const std::string& strDest) const override { return true; }
|
|
||||||
void Close() override {}
|
|
||||||
void Flush() override {}
|
|
||||||
bool PeriodicFlush() override { return true; }
|
|
||||||
void IncrementUpdateCounter() override { ++nUpdateCounter; }
|
|
||||||
void ReloadDbEnv() override {}
|
|
||||||
std::string Filename() override { return "dummy"; }
|
|
||||||
std::string Format() override { return "dummy"; }
|
|
||||||
std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) override { return std::make_unique<DummyBatch>(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class DatabaseFormat {
|
enum class DatabaseFormat {
|
||||||
BERKELEY,
|
BERKELEY,
|
||||||
SQLITE,
|
SQLITE,
|
||||||
|
|
|
@ -23,6 +23,51 @@ static bool KeyFilter(const std::string& type)
|
||||||
return WalletBatch::IsKeyType(type) || type == DBKeys::HDCHAIN;
|
return WalletBatch::IsKeyType(type) || type == DBKeys::HDCHAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DummyCursor : public DatabaseCursor
|
||||||
|
{
|
||||||
|
Status Next(DataStream& key, DataStream& value) override { return Status::FAIL; }
|
||||||
|
};
|
||||||
|
|
||||||
|
/** RAII class that provides access to a DummyDatabase. Never fails. */
|
||||||
|
class DummyBatch : public DatabaseBatch
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
bool ReadKey(DataStream&& key, DataStream& value) override { return true; }
|
||||||
|
bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite=true) override { return true; }
|
||||||
|
bool EraseKey(DataStream&& key) override { return true; }
|
||||||
|
bool HasKey(DataStream&& key) override { return true; }
|
||||||
|
bool ErasePrefix(Span<const std::byte> prefix) override { return true; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
void Flush() override {}
|
||||||
|
void Close() override {}
|
||||||
|
|
||||||
|
std::unique_ptr<DatabaseCursor> GetNewCursor() override { return std::make_unique<DummyCursor>(); }
|
||||||
|
bool TxnBegin() override { return true; }
|
||||||
|
bool TxnCommit() override { return true; }
|
||||||
|
bool TxnAbort() override { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
|
/** A dummy WalletDatabase that does nothing and never fails. Only used by salvage.
|
||||||
|
**/
|
||||||
|
class DummyDatabase : public WalletDatabase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Open() override {};
|
||||||
|
void AddRef() override {}
|
||||||
|
void RemoveRef() override {}
|
||||||
|
bool Rewrite(const char* pszSkip=nullptr) override { return true; }
|
||||||
|
bool Backup(const std::string& strDest) const override { return true; }
|
||||||
|
void Close() override {}
|
||||||
|
void Flush() override {}
|
||||||
|
bool PeriodicFlush() override { return true; }
|
||||||
|
void IncrementUpdateCounter() override { ++nUpdateCounter; }
|
||||||
|
void ReloadDbEnv() override {}
|
||||||
|
std::string Filename() override { return "dummy"; }
|
||||||
|
std::string Format() override { return "dummy"; }
|
||||||
|
std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) override { return std::make_unique<DummyBatch>(); }
|
||||||
|
};
|
||||||
|
|
||||||
bool RecoverDatabaseFile(const ArgsManager& args, const fs::path& file_path, bilingual_str& error, std::vector<bilingual_str>& warnings)
|
bool RecoverDatabaseFile(const ArgsManager& args, const fs::path& file_path, bilingual_str& error, std::vector<bilingual_str>& warnings)
|
||||||
{
|
{
|
||||||
DatabaseOptions options;
|
DatabaseOptions options;
|
||||||
|
@ -135,7 +180,7 @@ bool RecoverDatabaseFile(const ArgsManager& args, const fs::path& file_path, bil
|
||||||
}
|
}
|
||||||
|
|
||||||
DbTxn* ptxn = env->TxnBegin();
|
DbTxn* ptxn = env->TxnBegin();
|
||||||
CWallet dummyWallet(nullptr, "", CreateDummyWalletDatabase());
|
CWallet dummyWallet(nullptr, "", std::make_unique<DummyDatabase>());
|
||||||
for (KeyValPair& row : salvagedData)
|
for (KeyValPair& row : salvagedData)
|
||||||
{
|
{
|
||||||
/* Filter for only private key type KV pairs to be added to the salvaged wallet */
|
/* Filter for only private key type KV pairs to be added to the salvaged wallet */
|
||||||
|
|
|
@ -1263,12 +1263,6 @@ std::unique_ptr<WalletDatabase> MakeDatabase(const fs::path& path, const Databas
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return object for accessing dummy database with no read/write capabilities. */
|
|
||||||
std::unique_ptr<WalletDatabase> CreateDummyWalletDatabase()
|
|
||||||
{
|
|
||||||
return std::make_unique<DummyDatabase>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Return object for accessing temporary in-memory database. */
|
/** Return object for accessing temporary in-memory database. */
|
||||||
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase(DatabaseOptions& options)
|
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase(DatabaseOptions& options)
|
||||||
{
|
{
|
||||||
|
|
|
@ -306,9 +306,6 @@ using KeyFilterFn = std::function<bool(const std::string&)>;
|
||||||
//! Unserialize a given Key-Value pair and load it into the wallet
|
//! Unserialize a given Key-Value pair and load it into the wallet
|
||||||
bool ReadKeyValue(CWallet* pwallet, DataStream& ssKey, CDataStream& ssValue, std::string& strType, std::string& strErr, const KeyFilterFn& filter_fn = nullptr);
|
bool ReadKeyValue(CWallet* pwallet, DataStream& ssKey, CDataStream& ssValue, std::string& strType, std::string& strErr, const KeyFilterFn& filter_fn = nullptr);
|
||||||
|
|
||||||
/** Return object for accessing dummy database with no read/write capabilities. */
|
|
||||||
std::unique_ptr<WalletDatabase> CreateDummyWalletDatabase();
|
|
||||||
|
|
||||||
/** Return object for accessing temporary in-memory database. */
|
/** Return object for accessing temporary in-memory database. */
|
||||||
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase(DatabaseOptions& options);
|
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase(DatabaseOptions& options);
|
||||||
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase();
|
std::unique_ptr<WalletDatabase> CreateMockWalletDatabase();
|
||||||
|
|
Loading…
Add table
Reference in a new issue