Bitcoin Core 29.99.0
P2P Digital Currency
migrate.h
Go to the documentation of this file.
1// Copyright (c) 2021-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_WALLET_MIGRATE_H
6#define BITCOIN_WALLET_MIGRATE_H
7
8#include <wallet/db.h>
9
10#include <optional>
11
12namespace wallet {
13
14using BerkeleyROData = std::map<SerializeData, SerializeData, std::less<>>;
15
21{
22private:
23 const fs::path m_filepath;
24
25public:
27 BerkeleyRODatabase(const fs::path& filepath, bool open = true) : WalletDatabase(), m_filepath(filepath)
28 {
29 if (open) Open();
30 }
32
34
36 void Open() override;
37
40 bool Rewrite(const char* pszSkip = nullptr) override { return false; }
41
44 bool Backup(const std::string& strDest) const override;
45
49 void Close() override {}
50
52 std::string Filename() override { return fs::PathToString(m_filepath); }
53
54 std::string Format() override { return "bdb_ro"; }
55
57 std::unique_ptr<DatabaseBatch> MakeBatch() override;
58};
59
61{
62private:
64 BerkeleyROData::const_iterator m_cursor;
65 BerkeleyROData::const_iterator m_cursor_end;
66
67public:
68 explicit BerkeleyROCursor(const BerkeleyRODatabase& database, std::span<const std::byte> prefix = {});
69 ~BerkeleyROCursor() = default;
70
71 Status Next(DataStream& key, DataStream& value) override;
72};
73
76{
77private:
79
80 bool ReadKey(DataStream&& key, DataStream& value) override;
81 // WriteKey returns true since various automatic upgrades for older wallets will expect writing to not fail.
82 // It is okay for this batch type to not actually write anything as those automatic upgrades will occur again after migration.
83 bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite = true) override { return true; }
84 bool EraseKey(DataStream&& key) override { return false; }
85 bool HasKey(DataStream&& key) override;
86 bool ErasePrefix(std::span<const std::byte> prefix) override { return false; }
87
88public:
89 explicit BerkeleyROBatch(const BerkeleyRODatabase& database) : m_database(database) {}
90 ~BerkeleyROBatch() = default;
91
94
95 void Close() override {}
96
97 std::unique_ptr<DatabaseCursor> GetNewCursor() override { return std::make_unique<BerkeleyROCursor>(m_database); }
98 std::unique_ptr<DatabaseCursor> GetNewPrefixCursor(std::span<const std::byte> prefix) override;
99 bool TxnBegin() override { return false; }
100 bool TxnCommit() override { return false; }
101 bool TxnAbort() override { return false; }
102 bool HasActiveTxn() override { return false; }
103};
104
106std::unique_ptr<BerkeleyRODatabase> MakeBerkeleyRODatabase(const fs::path& path, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error);
107} // namespace wallet
108
109#endif // BITCOIN_WALLET_MIGRATE_H
Double ended buffer combining vector and stream-like interfaces.
Definition: streams.h:147
RAII class that provides access to a BerkeleyRODatabase.
Definition: migrate.h:76
BerkeleyROBatch(const BerkeleyROBatch &)=delete
bool ErasePrefix(std::span< const std::byte > prefix) override
Definition: migrate.h:86
bool ReadKey(DataStream &&key, DataStream &value) override
Definition: migrate.cpp:730
bool WriteKey(DataStream &&key, DataStream &&value, bool overwrite=true) override
Definition: migrate.h:83
BerkeleyROBatch(const BerkeleyRODatabase &database)
Definition: migrate.h:89
bool HasActiveTxn() override
Definition: migrate.h:102
BerkeleyROBatch & operator=(const BerkeleyROBatch &)=delete
std::unique_ptr< DatabaseCursor > GetNewPrefixCursor(std::span< const std::byte > prefix) override
Definition: migrate.cpp:766
bool TxnCommit() override
Definition: migrate.h:100
bool TxnAbort() override
Definition: migrate.h:101
const BerkeleyRODatabase & m_database
Definition: migrate.h:78
std::unique_ptr< DatabaseCursor > GetNewCursor() override
Definition: migrate.h:97
bool EraseKey(DataStream &&key) override
Definition: migrate.h:84
bool HasKey(DataStream &&key) override
Definition: migrate.cpp:743
bool TxnBegin() override
Definition: migrate.h:99
void Close() override
Definition: migrate.h:95
BerkeleyROData::const_iterator m_cursor_end
Definition: migrate.h:65
BerkeleyROData::const_iterator m_cursor
Definition: migrate.h:64
const BerkeleyRODatabase & m_database
Definition: migrate.h:63
BerkeleyROCursor(const BerkeleyRODatabase &database, std::span< const std::byte > prefix={})
Definition: migrate.cpp:749
Status Next(DataStream &key, DataStream &value) override
Definition: migrate.cpp:755
A class representing a BerkeleyDB file from which we can only read records.
Definition: migrate.h:21
BerkeleyROData m_records
Definition: migrate.h:33
std::unique_ptr< DatabaseBatch > MakeBatch() override
Make a DatabaseBatch connected to this database.
Definition: migrate.cpp:702
void Close() override
Flush to the database file and close the database.
Definition: migrate.h:49
void Open() override
Open the database if it is not already opened.
Definition: migrate.cpp:524
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
Definition: migrate.h:40
const fs::path m_filepath
Definition: migrate.h:23
std::string Format() override
Definition: migrate.h:54
std::string Filename() override
Return path to main database file for logs and error messages.
Definition: migrate.h:52
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
Definition: migrate.cpp:707
BerkeleyRODatabase(const fs::path &filepath, bool open=true)
Create DB handle.
Definition: migrate.h:27
RAII class that provides access to a WalletDatabase.
Definition: db.h:51
An instance of this class represents one database.
Definition: db.h:130
static std::string PathToString(const path &path)
Convert path object to a byte string.
Definition: fs.h:151
std::map< SerializeData, SerializeData, std::less<> > BerkeleyROData
Definition: migrate.h:14
std::unique_ptr< BerkeleyRODatabase > MakeBerkeleyRODatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
Return object giving access to Berkeley Read Only database at specified path.
Definition: migrate.cpp:771
DatabaseStatus
Definition: db.h:183
const char * prefix
Definition: rest.cpp:1009
Bilingual messages:
Definition: translation.h:24