|
|
|
//
|
|
|
|
// Created by Ziyang Hu on 2022/4/13.
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "cozorocks.h"
|
|
|
|
#include "cozorocks/src/bridge.rs.h"
|
|
|
|
|
|
|
|
void write_status_impl(BridgeStatus &status, StatusCode code, StatusSubCode subcode, StatusSeverity severity,
|
|
|
|
int bridge_code) {
|
|
|
|
status.code = code;
|
|
|
|
status.subcode = subcode;
|
|
|
|
status.severity = severity;
|
|
|
|
status.bridge_code = static_cast<StatusBridgeCode>(bridge_code);
|
|
|
|
}
|
|
|
|
|
|
|
|
BridgeStatus IteratorBridge::status() const {
|
|
|
|
BridgeStatus s;
|
|
|
|
write_status(inner->status(), s);
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
unique_ptr<vector<PinnableSlice>> TransactionBridge::multiget_txn(
|
|
|
|
const ColumnFamilyHandle &cf,
|
|
|
|
rust::Slice<const rust::Slice<const uint8_t>> keys,
|
|
|
|
rust::Slice<BridgeStatus> statuses) const {
|
|
|
|
auto cpp_keys = vector<Slice>();
|
|
|
|
cpp_keys.reserve(keys.size());
|
|
|
|
for (auto key: keys) {
|
|
|
|
auto cpp_key = convert_slice(key);
|
|
|
|
cpp_keys.push_back(cpp_key);
|
|
|
|
}
|
|
|
|
auto ret = make_unique<vector<PinnableSlice>>(keys.size());
|
|
|
|
auto cpp_statuses = vector<Status>(keys.size());
|
|
|
|
inner->MultiGet(*r_ops,
|
|
|
|
const_cast<ColumnFamilyHandle *>(&cf),
|
|
|
|
keys.size(),
|
|
|
|
cpp_keys.data(),
|
|
|
|
ret->data(),
|
|
|
|
cpp_statuses.data());
|
|
|
|
for (size_t i = 0; i < cpp_statuses.size(); ++i) {
|
|
|
|
write_status(std::move(cpp_statuses[i]), statuses[i]);
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
unique_ptr<vector<PinnableSlice>> TransactionBridge::multiget_raw(
|
|
|
|
const ColumnFamilyHandle &cf,
|
|
|
|
rust::Slice<const rust::Slice<const uint8_t>> keys,
|
|
|
|
rust::Slice<BridgeStatus> statuses) const {
|
|
|
|
auto cpp_keys = vector<Slice>();
|
|
|
|
cpp_keys.reserve(keys.size());
|
|
|
|
for (auto key: keys) {
|
|
|
|
auto cpp_key = convert_slice(key);
|
|
|
|
cpp_keys.push_back(cpp_key);
|
|
|
|
}
|
|
|
|
auto ret = make_unique<vector<PinnableSlice>>(keys.size());
|
|
|
|
auto cpp_statuses = vector<Status>(keys.size());
|
|
|
|
raw_db->MultiGet(*r_ops,
|
|
|
|
const_cast<ColumnFamilyHandle *>(&cf),
|
|
|
|
keys.size(),
|
|
|
|
cpp_keys.data(),
|
|
|
|
ret->data(),
|
|
|
|
cpp_statuses.data());
|
|
|
|
for (size_t i = 0; i < cpp_statuses.size(); ++i) {
|
|
|
|
write_status(std::move(cpp_statuses[i]), statuses[i]);
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|