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() 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 std::vector<fs::path> Files() override { return {m_filepath}; }
54
55 std::string Format() override { return "bdb_ro"; }
56
58 std::unique_ptr<DatabaseBatch> MakeBatch() override;
59};
60
62{
63private:
65 BerkeleyROData::const_iterator m_cursor;
66 BerkeleyROData::const_iterator m_cursor_end;
67
68public:
69 explicit BerkeleyROCursor(const BerkeleyRODatabase& database, std::span<const std::byte> prefix = {});
70 ~BerkeleyROCursor() = default;
71
72 Status Next(DataStream& key, DataStream& value) override;
73};
74
77{
78private:
80
81 bool ReadKey(DataStream&& key, DataStream& value) override;
82 // WriteKey returns true since various automatic upgrades for older wallets will expect writing to not fail.
83 // It is okay for this batch type to not actually write anything as those automatic upgrades will occur again after migration.
84 bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite = true) override { return true; }
85 bool EraseKey(DataStream&& key) override { return false; }
86 bool HasKey(DataStream&& key) override;
87 bool ErasePrefix(std::span<const std::byte> prefix) override { return false; }
88
89public:
90 explicit BerkeleyROBatch(const BerkeleyRODatabase& database) : m_database(database) {}
91 ~BerkeleyROBatch() = default;
92
95
96 void Close() override {}
97
98 std::unique_ptr<DatabaseCursor> GetNewCursor() override { return std::make_unique<BerkeleyROCursor>(m_database); }
99 std::unique_ptr<DatabaseCursor> GetNewPrefixCursor(std::span<const std::byte> prefix) override;
100 bool TxnBegin() override { return false; }
101 bool TxnCommit() override { return false; }
102 bool TxnAbort() override { return false; }
103 bool HasActiveTxn() override { return false; }
104};
105
107std::unique_ptr<BerkeleyRODatabase> MakeBerkeleyRODatabase(const fs::path& path, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error);
108} // namespace wallet
109
110#endif // BITCOIN_WALLET_MIGRATE_H
Double ended buffer combining vector and stream-like interfaces.
Definition: streams.h:130
RAII class that provides access to a BerkeleyRODatabase.
Definition: migrate.h:77
BerkeleyROBatch(const BerkeleyROBatch &)=delete
bool ErasePrefix(std::span< const std::byte > prefix) override
Definition: migrate.h:87
bool ReadKey(DataStream &&key, DataStream &value) override
Definition: migrate.cpp:735
bool WriteKey(DataStream &&key, DataStream &&value, bool overwrite=true) override
Definition: migrate.h:84
BerkeleyROBatch(const BerkeleyRODatabase &database)
Definition: migrate.h:90
bool HasActiveTxn() override
Definition: migrate.h:103
BerkeleyROBatch & operator=(const BerkeleyROBatch &)=delete
std::unique_ptr< DatabaseCursor > GetNewPrefixCursor(std::span< const std::byte > prefix) override
Definition: migrate.cpp:771
bool TxnCommit() override
Definition: migrate.h:101
bool TxnAbort() override
Definition: migrate.h:102
const BerkeleyRODatabase & m_database
Definition: migrate.h:79
std::unique_ptr< DatabaseCursor > GetNewCursor() override
Definition: migrate.h:98
bool EraseKey(DataStream &&key) override
Definition: migrate.h:85
bool HasKey(DataStream &&key) override
Definition: migrate.cpp:748
bool TxnBegin() override
Definition: migrate.h:100
void Close() override
Definition: migrate.h:96
BerkeleyROData::const_iterator m_cursor_end
Definition: migrate.h:66
BerkeleyROData::const_iterator m_cursor
Definition: migrate.h:65
const BerkeleyRODatabase & m_database
Definition: migrate.h:64
BerkeleyROCursor(const BerkeleyRODatabase &database, std::span< const std::byte > prefix={})
Definition: migrate.cpp:754
Status Next(DataStream &key, DataStream &value) override
Definition: migrate.cpp:760
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:707
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:529
std::vector< fs::path > Files() override
Return paths to all database created files.
Definition: migrate.h:53
const fs::path m_filepath
Definition: migrate.h:23
std::string Format() override
Definition: migrate.h:55
bool Rewrite() override
Rewrite the entire database on disk.
Definition: migrate.h:40
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:712
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:776
DatabaseStatus
Definition: db.h:186
const char * prefix
Definition: rest.cpp:1117
Bilingual messages:
Definition: translation.h:24