#pragma once #include #include 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 requestQuery = nullptr); virtual ~QueryResult() = default; void setRequestQuery(std::shared_ptr requestQueryToSet); std::shared_ptr getRequestQuery() const noexcept; virtual bool handle(); [[nodiscard]] virtual auto debugInfo() const -> std::string = 0; protected: std::shared_ptr requestQuery; }; } // namespace db