Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/bdb.cpp
Show First 20 Lines • Show All 852 Lines • ▼ Show 20 Lines | bool BerkeleyBatch::TxnAbort() { | ||||
if (!pdb || !activeTxn) { | if (!pdb || !activeTxn) { | ||||
return false; | return false; | ||||
} | } | ||||
int ret = activeTxn->abort(); | int ret = activeTxn->abort(); | ||||
activeTxn = nullptr; | activeTxn = nullptr; | ||||
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; | ||||
} | } | ||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
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"); | ||||
} | } | ||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
SafeDbt datValue(value.data(), value.size()); | SafeDbt datValue(value.data(), value.size()); | ||||
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"); | ||||
} | } | ||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
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; | ||||
} | } | ||||
SafeDbt datKey(key.data(), key.size()); | SafeDbt datKey(key.data(), key.size()); | ||||
int ret = pdb->exists(activeTxn, datKey, 0); | int ret = pdb->exists(activeTxn, datKey, 0); | ||||
return ret == 0; | return ret == 0; | ||||
} | } |