mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-10 14:48:46 +02:00
build: require sqlite when building the wallet
Require that sqlite is available in order to compile the wallet. Removes instances of USE_SQLITE since it is no longer possible to not have sqlite available. The NO_SQLITE option is dropped from depends. Co-authored-by: Ava Chow <github@achow101.com> Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
// file COPYING or https://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bench/bench.h>
|
||||
#include <bitcoin-build-config.h> // IWYU pragma: keep
|
||||
#include <random.h>
|
||||
#include <support/allocators/secure.h>
|
||||
#include <test/util/setup_common.h>
|
||||
@@ -61,9 +60,7 @@ static void WalletCreate(benchmark::Bench& bench, bool encrypted)
|
||||
static void WalletCreatePlain(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/false); }
|
||||
static void WalletCreateEncrypted(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/true); }
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
BENCHMARK(WalletCreatePlain, benchmark::PriorityLevel::LOW);
|
||||
BENCHMARK(WalletCreateEncrypted, benchmark::PriorityLevel::LOW);
|
||||
#endif
|
||||
|
||||
} // namespace wallet
|
||||
|
||||
@@ -75,10 +75,8 @@ static void WalletIsMineLegacy(benchmark::Bench& bench) { WalletIsMine(bench, /*
|
||||
BENCHMARK(WalletIsMineLegacy, benchmark::PriorityLevel::LOW);
|
||||
#endif
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
static void WalletIsMineDescriptors(benchmark::Bench& bench) { WalletIsMine(bench, /*legacy_wallet=*/false); }
|
||||
static void WalletIsMineMigratedDescriptors(benchmark::Bench& bench) { WalletIsMine(bench, /*legacy_wallet=*/false, /*num_combo=*/2000); }
|
||||
BENCHMARK(WalletIsMineDescriptors, benchmark::PriorityLevel::LOW);
|
||||
BENCHMARK(WalletIsMineMigratedDescriptors, benchmark::PriorityLevel::LOW);
|
||||
#endif
|
||||
} // namespace wallet
|
||||
|
||||
@@ -73,8 +73,6 @@ static void WalletLoadingLegacy(benchmark::Bench& bench) { WalletLoading(bench,
|
||||
BENCHMARK(WalletLoadingLegacy, benchmark::PriorityLevel::HIGH);
|
||||
#endif
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
static void WalletLoadingDescriptors(benchmark::Bench& bench) { WalletLoading(bench, /*legacy_wallet=*/false); }
|
||||
BENCHMARK(WalletLoadingDescriptors, benchmark::PriorityLevel::HIGH);
|
||||
#endif
|
||||
} // namespace wallet
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or https://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <bitcoin-build-config.h> // IWYU pragma: keep
|
||||
|
||||
#include <bench/bench.h>
|
||||
#include <kernel/chain.h>
|
||||
#include <interfaces/chain.h>
|
||||
@@ -17,8 +15,6 @@
|
||||
|
||||
#include <optional>
|
||||
|
||||
#if defined(USE_SQLITE) // only enable benchmark when sqlite is enabled
|
||||
|
||||
namespace wallet{
|
||||
|
||||
static void WalletMigration(benchmark::Bench& bench)
|
||||
@@ -75,5 +71,3 @@ static void WalletMigration(benchmark::Bench& bench)
|
||||
BENCHMARK(WalletMigration, benchmark::PriorityLevel::LOW);
|
||||
|
||||
} // namespace wallet
|
||||
|
||||
#endif // end USE_SQLITE && USE_BDB
|
||||
|
||||
@@ -1215,11 +1215,6 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
|
||||
void BitcoinGUI::createWallet()
|
||||
{
|
||||
#ifdef ENABLE_WALLET
|
||||
#ifndef USE_SQLITE
|
||||
// Compiled without sqlite support (required for descriptor wallets)
|
||||
message(tr("Error creating wallet"), tr("Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets)"), CClientUIInterface::MSG_ERROR);
|
||||
return;
|
||||
#endif // USE_SQLITE
|
||||
auto activity = new CreateWalletActivity(getWalletController(), this);
|
||||
connect(activity, &CreateWalletActivity::created, this, &BitcoinGUI::setCurrentWallet);
|
||||
connect(activity, &CreateWalletActivity::created, rpcConsole, &RPCConsole::setCurrentWallet);
|
||||
|
||||
@@ -28,6 +28,7 @@ add_library(bitcoin_wallet STATIC EXCLUDE_FROM_ALL
|
||||
rpc/wallet.cpp
|
||||
scriptpubkeyman.cpp
|
||||
spend.cpp
|
||||
sqlite.cpp
|
||||
transaction.cpp
|
||||
wallet.cpp
|
||||
walletdb.cpp
|
||||
@@ -37,22 +38,13 @@ target_link_libraries(bitcoin_wallet
|
||||
PRIVATE
|
||||
core_interface
|
||||
bitcoin_common
|
||||
$<TARGET_NAME_IF_EXISTS:unofficial::sqlite3::sqlite3>
|
||||
$<TARGET_NAME_IF_EXISTS:SQLite::SQLite3>
|
||||
univalue
|
||||
Boost::headers
|
||||
$<TARGET_NAME_IF_EXISTS:USDT::headers>
|
||||
)
|
||||
|
||||
if(NOT USE_SQLITE AND NOT USE_BDB)
|
||||
message(FATAL_ERROR "Wallet functionality requested but no BDB or SQLite support available.")
|
||||
endif()
|
||||
if(USE_SQLITE)
|
||||
target_sources(bitcoin_wallet PRIVATE sqlite.cpp)
|
||||
target_link_libraries(bitcoin_wallet
|
||||
PRIVATE
|
||||
$<TARGET_NAME_IF_EXISTS:unofficial::sqlite3::sqlite3>
|
||||
$<TARGET_NAME_IF_EXISTS:SQLite::SQLite3>
|
||||
)
|
||||
endif()
|
||||
if(USE_BDB)
|
||||
target_sources(bitcoin_wallet PRIVATE bdb.cpp salvage.cpp)
|
||||
target_link_libraries(bitcoin_wallet PUBLIC BerkeleyDB::BerkeleyDB)
|
||||
|
||||
@@ -90,11 +90,7 @@ void WalletInit::AddWalletOptions(ArgsManager& argsman) const
|
||||
argsman.AddHiddenArgs({"-dblogsize", "-flushwallet", "-privdb", "-swapbdbendian"});
|
||||
#endif
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
argsman.AddArg("-unsafesqlitesync", "Set SQLite synchronous=OFF to disable waiting for the database to sync to disk. This is unsafe and can cause data loss and corruption. This option is only used by tests to improve their performance (default: false)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
||||
#else
|
||||
argsman.AddHiddenArgs({"-unsafesqlitesync"});
|
||||
#endif
|
||||
|
||||
argsman.AddArg("-walletrejectlongchains", strprintf("Wallet will not create transactions that violate mempool chain limits (default: %u)", DEFAULT_WALLET_REJECT_LONG_CHAINS), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
||||
argsman.AddArg("-walletcrosschain", strprintf("Allow reusing wallet files across chains (default: %u)", DEFAULT_WALLETCROSSCHAIN), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
||||
|
||||
@@ -403,9 +403,6 @@ static RPCHelpMan createwallet()
|
||||
flags |= WALLET_FLAG_AVOID_REUSE;
|
||||
}
|
||||
if (self.Arg<bool>("descriptors")) {
|
||||
#ifndef USE_SQLITE
|
||||
throw JSONRPCError(RPC_WALLET_ERROR, "Compiled without sqlite support (required for descriptor wallets)");
|
||||
#endif
|
||||
flags |= WALLET_FLAG_DESCRIPTORS;
|
||||
} else {
|
||||
if (!context.chain->rpcEnableDeprecated("create_bdb")) {
|
||||
|
||||
@@ -13,9 +13,7 @@
|
||||
#ifdef USE_BDB
|
||||
#include <wallet/bdb.h>
|
||||
#endif
|
||||
#ifdef USE_SQLITE
|
||||
#include <wallet/sqlite.h>
|
||||
#endif
|
||||
#include <wallet/migrate.h>
|
||||
#include <wallet/test/util.h>
|
||||
#include <wallet/walletutil.h> // for WALLET_FLAG_DESCRIPTORS
|
||||
@@ -138,9 +136,7 @@ static std::vector<std::unique_ptr<WalletDatabase>> TestDatabases(const fs::path
|
||||
// Needs BDB to make the DB to read
|
||||
dbs.emplace_back(std::make_unique<BerkeleyRODatabase>(BDBDataFile(path_root / "bdb"), /*open=*/false));
|
||||
#endif
|
||||
#ifdef USE_SQLITE
|
||||
dbs.emplace_back(MakeSQLiteDatabase(path_root / "sqlite", options, status, error));
|
||||
#endif
|
||||
dbs.emplace_back(CreateMockableWalletDatabase());
|
||||
return dbs;
|
||||
}
|
||||
@@ -293,8 +289,6 @@ BOOST_AUTO_TEST_CASE(erase_prefix)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
|
||||
// Test-only statement execution error
|
||||
constexpr int TEST_SQLITE_ERROR = -999;
|
||||
|
||||
@@ -385,7 +379,6 @@ BOOST_AUTO_TEST_CASE(concurrent_txn_dont_interfere)
|
||||
BOOST_CHECK(handler2->Read(key, read_value));
|
||||
BOOST_CHECK_EQUAL(read_value, value2);
|
||||
}
|
||||
#endif // USE_SQLITE
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
} // namespace wallet
|
||||
|
||||
@@ -8,8 +8,8 @@ target_sources(fuzz
|
||||
coinselection.cpp
|
||||
crypter.cpp
|
||||
fees.cpp
|
||||
$<$<BOOL:${USE_SQLITE}>:${CMAKE_CURRENT_LIST_DIR}/notifications.cpp>
|
||||
$<$<BOOL:${USE_SQLITE}>:${CMAKE_CURRENT_LIST_DIR}/scriptpubkeyman.cpp>
|
||||
notifications.cpp
|
||||
scriptpubkeyman.cpp
|
||||
spend.cpp
|
||||
wallet_bdb_parser.cpp
|
||||
)
|
||||
|
||||
@@ -27,9 +27,7 @@ class WalletDatabase;
|
||||
struct WalletContext;
|
||||
|
||||
static const DatabaseFormat DATABASE_FORMATS[] = {
|
||||
#ifdef USE_SQLITE
|
||||
DatabaseFormat::SQLITE,
|
||||
#endif
|
||||
#ifdef USE_BDB
|
||||
DatabaseFormat::BERKELEY,
|
||||
#endif
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
#include <wallet/bdb.h>
|
||||
#endif
|
||||
#include <wallet/migrate.h>
|
||||
#ifdef USE_SQLITE
|
||||
#include <wallet/sqlite.h>
|
||||
#endif
|
||||
#include <wallet/wallet.h>
|
||||
|
||||
#include <atomic>
|
||||
@@ -1464,25 +1462,14 @@ std::unique_ptr<WalletDatabase> MakeDatabase(const fs::path& path, const Databas
|
||||
|
||||
// If the format is not specified or detected, choose the default format based on what is available. We prefer BDB over SQLite for now.
|
||||
if (!format) {
|
||||
#ifdef USE_SQLITE
|
||||
format = DatabaseFormat::SQLITE;
|
||||
#endif
|
||||
#ifdef USE_BDB
|
||||
format = DatabaseFormat::BERKELEY;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (format == DatabaseFormat::SQLITE) {
|
||||
#ifdef USE_SQLITE
|
||||
if constexpr (true) {
|
||||
return MakeSQLiteDatabase(path, options, status, error);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
error = Untranslated(strprintf("Failed to open database path '%s'. Build does not support SQLite database format.", fs::PathToString(path)));
|
||||
status = DatabaseStatus::FAILED_BAD_FORMAT;
|
||||
return nullptr;
|
||||
}
|
||||
return MakeSQLiteDatabase(path, options, status, error);
|
||||
}
|
||||
|
||||
if (format == DatabaseFormat::BERKELEY_RO) {
|
||||
|
||||
Reference in New Issue
Block a user