virtual std::pair<std::string,std::string> raw_key() = 0;
virtual bool raw_key_is_prefixed(const std::string &prefix) = 0;
virtual bufferlist value() = 0;
+ virtual bufferptr value_as_ptr() {
+ bufferlist bl = value();
+ if (bl.length()) {
+ return *bl.buffers().begin();
+ } else {
+ return bufferptr();
+ }
+ }
virtual int status() = 0;
virtual ~WholeSpaceIteratorImpl() { }
};
bufferlist value() {
return generic_iter->value();
}
+ bufferptr value_as_ptr() {
+ return generic_iter->value_as_ptr();
+ }
int status() {
return generic_iter->status();
}
KeyValueDB::Iterator it = get_iterator(prefix);
it->lower_bound(key);
if (it->valid() && it->key() == key) {
- *value = it->value();
+ value->append(it->value_as_ptr());
} else {
r = -ENOENT;
}
bufferlist value() {
return to_bufferlist(dbiter->value());
}
+
+ bufferptr value_as_ptr() {
+ leveldb::Slice data = dbiter->value();
+ return bufferptr(data.data(), data.size());
+ }
+
int status() {
return dbiter->status().ok() ? 0 : -1;
}
KeyValueDB::Iterator it = get_iterator(prefix);
it->lower_bound(key);
if (it->valid() && it->key() == key) {
- *out = it->value();
+ out->append(it->value_as_ptr());
} else {
r = -ENOENT;
}
{
return to_bufferlist(dbiter->value());
}
+
+bufferptr RocksDBStore::RocksDBWholeSpaceIteratorImpl::value_as_ptr()
+{
+ rocksdb::Slice val = dbiter->value();
+ return bufferptr(val.data(), val.size());
+}
+
int RocksDBStore::RocksDBWholeSpaceIteratorImpl::status()
{
return dbiter->status().ok() ? 0 : -1;
return limit;
}
-
RocksDBStore::WholeSpaceIterator RocksDBStore::_get_iterator()
{
return std::shared_ptr<KeyValueDB::WholeSpaceIteratorImpl>(
pair<string,string> raw_key();
bool raw_key_is_prefixed(const string &prefix);
bufferlist value();
+ bufferptr value_as_ptr();
int status();
};
}
int get(const string& prefix, const string& key, bufferlist& bl) {
- bufferlist outbl;
- int r = db->get(prefix, key, &outbl);
- if (!r) {
- bl.append(outbl);
- }
- return r;
+ return db->get(prefix, key, &bl);
}
int get(const string& prefix, const version_t ver, bufferlist& bl) {