Files
MuditaOS/module-db/Common/Query.cpp
Piotr Tanski 8fd488b084 [EGD-3720] Database service API cleanup for messages application. (#720)
- Major cleanup of database query usage.
2020-09-22 12:59:32 +02:00

76 lines
1.8 KiB
C++

#include "Query.hpp"
#include <stdexcept>
#include <memory>
#include <utility>
using namespace db;
std::unique_ptr<QueryCallback> QueryCallback::fromFunction(QueryCallbackFunction &&callbackFunction)
{
return std::make_unique<QueryCallback>(std::move(callbackFunction));
}
QueryCallback::QueryCallback(QueryCallbackFunction &&_callback) : callback{std::move(_callback)}
{}
bool QueryCallback::handleQueryResponse(QueryResult *response)
{
return callback(response);
}
EndpointListener::EndpointListener(EndpointQueryCallbackFunction &&_callback, Context &_context)
: callback{std::move(_callback)}, context{_context}
{}
bool EndpointListener::handleQueryResponse(db::QueryResult *response)
{
if (callback) {
LOG_DEBUG("Executing callback...");
const auto ret = callback(response, context);
LOG_DEBUG("Callback finished");
return ret;
}
LOG_ERROR("callback is nullptr!");
return false;
}
Query::Query(Type type) : type(type)
{}
QueryListener *Query::getQueryListener() const noexcept
{
return queryListener.get();
}
void Query::setQueryListener(std::unique_ptr<QueryListener> &&listener) noexcept
{
queryListener = std::move(listener);
}
QueryResult::QueryResult(std::shared_ptr<Query> requestQuery) : requestQuery(std::move(requestQuery))
{}
void QueryResult::setRequestQuery(const std::shared_ptr<Query> &requestQueryToSet)
{
requestQuery = requestQueryToSet;
}
std::shared_ptr<Query> QueryResult::getRequestQuery() const noexcept
{
return requestQuery;
}
bool QueryResult::hasListener() const noexcept
{
return requestQuery && (requestQuery->getQueryListener() != nullptr);
}
bool QueryResult::handle()
{
if (!hasListener()) {
throw std::runtime_error("No listener to handle query");
}
return requestQuery->getQueryListener()->handleQueryResponse(this);
}