Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/db.h
Show First 20 Lines • Show All 339 Lines • ▼ Show 20 Lines | template <typename K> bool Exists(const K &key) { | ||||
ssKey << key; | ssKey << key; | ||||
SafeDbt datKey(ssKey.data(), ssKey.size()); | SafeDbt datKey(ssKey.data(), ssKey.size()); | ||||
// Exists | // Exists | ||||
int ret = pdb->exists(activeTxn, datKey, 0); | int ret = pdb->exists(activeTxn, datKey, 0); | ||||
return (ret == 0); | return (ret == 0); | ||||
} | } | ||||
Dbc *GetCursor() { | Dbc *GetCursor(); | ||||
if (!pdb) { | int ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, CDataStream &ssValue); | ||||
return nullptr; | bool TxnBegin(); | ||||
} | bool TxnCommit(); | ||||
Dbc *pcursor = nullptr; | bool TxnAbort(); | ||||
int ret = pdb->cursor(nullptr, &pcursor, 0); | |||||
if (ret != 0) { | |||||
return nullptr; | |||||
} | |||||
return pcursor; | |||||
} | |||||
int ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, CDataStream &ssValue) { | |||||
// Read at cursor | |||||
SafeDbt datKey; | |||||
SafeDbt datValue; | |||||
int ret = pcursor->get(datKey, datValue, DB_NEXT); | |||||
if (ret != 0) { | |||||
return ret; | |||||
} else if (datKey.get_data() == nullptr || | |||||
datValue.get_data() == nullptr) { | |||||
return 99999; | |||||
} | |||||
// Convert to streams | |||||
ssKey.SetType(SER_DISK); | |||||
ssKey.clear(); | |||||
ssKey.write((char *)datKey.get_data(), datKey.get_size()); | |||||
ssValue.SetType(SER_DISK); | |||||
ssValue.clear(); | |||||
ssValue.write((char *)datValue.get_data(), datValue.get_size()); | |||||
return 0; | |||||
} | |||||
bool TxnBegin() { | |||||
if (!pdb || activeTxn) { | |||||
return false; | |||||
} | |||||
DbTxn *ptxn = env->TxnBegin(); | |||||
if (!ptxn) { | |||||
return false; | |||||
} | |||||
activeTxn = ptxn; | |||||
return true; | |||||
} | |||||
bool TxnCommit() { | |||||
if (!pdb || !activeTxn) { | |||||
return false; | |||||
} | |||||
int ret = activeTxn->commit(0); | |||||
activeTxn = nullptr; | |||||
return (ret == 0); | |||||
} | |||||
bool TxnAbort() { | |||||
if (!pdb || !activeTxn) { | |||||
return false; | |||||
} | |||||
int ret = activeTxn->abort(); | |||||
activeTxn = nullptr; | |||||
return (ret == 0); | |||||
} | |||||
static bool Rewrite(BerkeleyDatabase &database, | static bool Rewrite(BerkeleyDatabase &database, | ||||
const char *pszSkip = nullptr); | const char *pszSkip = nullptr); | ||||
}; | }; | ||||
#endif // BITCOIN_WALLET_DB_H | #endif // BITCOIN_WALLET_DB_H |