in executor/kv/kv_executor.cpp [87:135]
std::unique_ptr<std::string> KVExecutor::ExecuteData(
const std::string& request) {
KVRequest kv_request;
KVResponse kv_response;
if (!kv_request.ParseFromString(request)) {
LOG(ERROR) << "parse data fail";
return nullptr;
}
LOG(ERROR)<<" execute cmd:"<<kv_request.cmd();
if (kv_request.cmd() == KVRequest::SET) {
Set(kv_request.key(), kv_request.value());
} else if (kv_request.cmd() == KVRequest::GET) {
kv_response.set_value(Get(kv_request.key()));
} else if (kv_request.cmd() == KVRequest::GETALLVALUES) {
kv_response.set_value(GetAllValues());
} else if (kv_request.cmd() == KVRequest::GETRANGE) {
kv_response.set_value(GetRange(kv_request.key(), kv_request.value()));
} else if (kv_request.cmd() == KVRequest::SET_WITH_VERSION) {
SetWithVersion(kv_request.key(), kv_request.value(), kv_request.version());
} else if (kv_request.cmd() == KVRequest::GET_WITH_VERSION) {
GetWithVersion(kv_request.key(), kv_request.version(),
kv_response.mutable_value_info());
} else if (kv_request.cmd() == KVRequest::GET_ALL_ITEMS) {
GetAllItems(kv_response.mutable_items());
} else if (kv_request.cmd() == KVRequest::GET_KEY_RANGE) {
GetKeyRange(kv_request.min_key(), kv_request.max_key(),
kv_response.mutable_items());
} else if (kv_request.cmd() == KVRequest::GET_HISTORY) {
GetHistory(kv_request.key(), kv_request.min_version(),
kv_request.max_version(), kv_response.mutable_items());
} else if (kv_request.cmd() == KVRequest::GET_TOP) {
GetTopHistory(kv_request.key(), kv_request.top_number(),
kv_response.mutable_items());
}
else if(!kv_request.smart_contract_request().empty()){
std::unique_ptr<std::string> resp = contract_manager_->ExecuteData(kv_request.smart_contract_request());
if(resp != nullptr){
kv_response.set_smart_contract_response(*resp);
}
}
std::unique_ptr<std::string> resp_str = std::make_unique<std::string>();
if (!kv_response.SerializeToString(resp_str.get())) {
return nullptr;
}
return resp_str;
}