Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/bdb.cpp
Show First 20 Lines • Show All 857 Lines • ▼ Show 20 Lines | bool BerkeleyBatch::TxnAbort() { | ||||
return (ret == 0); | return (ret == 0); | ||||
} | } | ||||
bool BerkeleyBatch::ReadKey(CDataStream &key, CDataStream &value) { | bool BerkeleyBatch::ReadKey(CDataStream &key, CDataStream &value) { | ||||
if (!pdb) { | if (!pdb) { | ||||
return false; | return false; | ||||
} | } | ||||
// Key | |||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
// Read | |||||
SafeDbt datValue; | SafeDbt datValue; | ||||
int ret = pdb->get(activeTxn, datKey, datValue, 0); | int ret = pdb->get(activeTxn, datKey, datValue, 0); | ||||
if (ret == 0 && datValue.get_data() != nullptr) { | if (ret == 0 && datValue.get_data() != nullptr) { | ||||
value.write((char *)datValue.get_data(), datValue.get_size()); | value.write((char *)datValue.get_data(), datValue.get_size()); | ||||
return true; | return true; | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
bool BerkeleyBatch::WriteKey(CDataStream &key, CDataStream &value, | bool BerkeleyBatch::WriteKey(CDataStream &key, CDataStream &value, | ||||
bool overwrite) { | bool overwrite) { | ||||
if (!pdb) { | if (!pdb) { | ||||
return true; | return true; | ||||
} | } | ||||
if (fReadOnly) { | if (fReadOnly) { | ||||
assert(!"Write called on database in read-only mode"); | assert(!"Write called on database in read-only mode"); | ||||
} | } | ||||
// Key | |||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
// Value | |||||
SafeDbt datValue(value.data(), value.size()); | SafeDbt datValue(value.data(), value.size()); | ||||
// Write | |||||
int ret = | int ret = | ||||
pdb->put(activeTxn, datKey, datValue, (overwrite ? 0 : DB_NOOVERWRITE)); | pdb->put(activeTxn, datKey, datValue, (overwrite ? 0 : DB_NOOVERWRITE)); | ||||
return (ret == 0); | return (ret == 0); | ||||
} | } | ||||
bool BerkeleyBatch::EraseKey(CDataStream &key) { | bool BerkeleyBatch::EraseKey(CDataStream &key) { | ||||
if (!pdb) { | if (!pdb) { | ||||
return false; | return false; | ||||
} | } | ||||
if (fReadOnly) { | if (fReadOnly) { | ||||
assert(!"Erase called on database in read-only mode"); | assert(!"Erase called on database in read-only mode"); | ||||
} | } | ||||
// Key | |||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
// Erase | |||||
int ret = pdb->del(activeTxn, datKey, 0); | int ret = pdb->del(activeTxn, datKey, 0); | ||||
return (ret == 0 || ret == DB_NOTFOUND); | return (ret == 0 || ret == DB_NOTFOUND); | ||||
} | } | ||||
bool BerkeleyBatch::HasKey(CDataStream &key) { | bool BerkeleyBatch::HasKey(CDataStream &key) { | ||||
if (!pdb) { | if (!pdb) { | ||||
return false; | return false; | ||||
} | } | ||||
// Key | |||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
// Exists | |||||
int ret = pdb->exists(activeTxn, datKey, 0); | int ret = pdb->exists(activeTxn, datKey, 0); | ||||
return ret == 0; | return ret == 0; | ||||
} | } |