// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #include "Query.hpp" #include #include #include #include using namespace db; std::unique_ptr QueryCallback::fromFunction(QueryCallbackFunction &&callbackFunction) { return std::make_unique(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) {} EndpointListenerWithPages::EndpointListenerWithPages(EndpointQueryCallbackFunctionWithPages &&_callback, const PagedContext &_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; } bool EndpointListenerWithPages::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 &&listener) noexcept { queryListener = std::move(listener); } QueryResult::QueryResult(std::shared_ptr requestQuery) : requestQuery(std::move(requestQuery)) {} void QueryResult::setRequestQuery(const std::shared_ptr &requestQueryToSet) { requestQuery = requestQueryToSet; } std::shared_ptr QueryResult::getRequestQuery() const noexcept { return requestQuery; } void QueryResult::setRecordID(const uint32_t modifiedRecordID) { recordID = modifiedRecordID; } auto QueryResult::getRecordID() -> std::optional { return recordID; } 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); }