Files
MuditaOS/module-db/Common/Query.hpp
Marcin Smoczyński 885fe1083a db: improve query handling
Introduce a new way to handle query responses allowing to deal with
races:
 - bind reponse with request,
 - handle responses with an observer-like interface.

Signed-off-by: Marcin Smoczyński <smoczynski.marcin@gmail.com>
2020-08-06 14:13:35 +02:00

62 lines
1.3 KiB
C++

#pragma once
#include <memory>
#include <string>
namespace db
{
class QueryResult;
class QueryListener
{
public:
virtual bool handleQueryResponse(QueryResult *) = 0;
};
/// virtual query input interface
class Query
{
public:
enum class Type
{
Create,
Read,
Update,
Delete
};
Query() = delete;
Query(Type type, QueryListener *listener = nullptr);
virtual ~Query() = default;
QueryListener *getQueryListener() const noexcept;
void setQueryListener(QueryListener *queryListener) noexcept;
const Type type;
[[nodiscard]] virtual auto debugInfo() const -> std::string = 0;
private:
QueryListener *listener = nullptr;
};
/// virtual query output (result) interface
class QueryResult
{
public:
QueryResult(std::shared_ptr<Query> requestQuery = nullptr);
virtual ~QueryResult() = default;
void setRequestQuery(std::shared_ptr<Query> requestQueryToSet);
std::shared_ptr<Query> getRequestQuery() const noexcept;
virtual bool handle();
[[nodiscard]] virtual auto debugInfo() const -> std::string = 0;
protected:
std::shared_ptr<Query> requestQuery;
};
} // namespace db