mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
Set and check the sqlite user version
This commit is contained in:
parent
9d3d2d263c
commit
6173269866
1 changed files with 29 additions and 0 deletions
|
@ -18,6 +18,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
static const char* const DATABASE_FILENAME = "wallet.dat";
|
||||
static constexpr int32_t WALLET_SCHEMA_VERSION = 0;
|
||||
|
||||
static Mutex g_sqlite_mutex;
|
||||
static int g_sqlite_count GUARDED_BY(g_sqlite_mutex) = 0;
|
||||
|
@ -137,6 +138,27 @@ bool SQLiteDatabase::Verify(bilingual_str& error)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Check our schema version
|
||||
sqlite3_stmt* user_ver_stmt{nullptr};
|
||||
ret = sqlite3_prepare_v2(m_db, "PRAGMA user_version", -1, &user_ver_stmt, nullptr);
|
||||
if (ret != SQLITE_OK) {
|
||||
sqlite3_finalize(user_ver_stmt);
|
||||
error = strprintf(_("SQLiteDatabase: Failed to prepare the statement to fetch sqlite wallet schema version: %s"), sqlite3_errstr(ret));
|
||||
return false;
|
||||
}
|
||||
ret = sqlite3_step(user_ver_stmt);
|
||||
if (ret != SQLITE_ROW) {
|
||||
sqlite3_finalize(user_ver_stmt);
|
||||
error = strprintf(_("SQLiteDatabase: Failed to fetch sqlite wallet schema version: %s"), sqlite3_errstr(ret));
|
||||
return false;
|
||||
}
|
||||
int32_t user_ver = sqlite3_column_int(user_ver_stmt, 0);
|
||||
sqlite3_finalize(user_ver_stmt);
|
||||
if (user_ver != WALLET_SCHEMA_VERSION) {
|
||||
error = strprintf(_("SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported"), user_ver, WALLET_SCHEMA_VERSION);
|
||||
return false;
|
||||
}
|
||||
|
||||
sqlite3_stmt* stmt{nullptr};
|
||||
ret = sqlite3_prepare_v2(m_db, "PRAGMA integrity_check", -1, &stmt, nullptr);
|
||||
if (ret != SQLITE_OK) {
|
||||
|
@ -246,6 +268,13 @@ void SQLiteDatabase::Open()
|
|||
if (ret != SQLITE_OK) {
|
||||
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to set the application id: %s\n", sqlite3_errstr(ret)));
|
||||
}
|
||||
|
||||
// Set the user version
|
||||
std::string set_user_ver = strprintf("PRAGMA user_version = %d", WALLET_SCHEMA_VERSION);
|
||||
ret = sqlite3_exec(m_db, set_user_ver.c_str(), nullptr, nullptr, nullptr);
|
||||
if (ret != SQLITE_OK) {
|
||||
throw std::runtime_error(strprintf("SQLiteDatabase: Failed to set the wallet schema version: %s\n", sqlite3_errstr(ret)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue