~aleteoryx/muditaos

ref: 9095333b2c10af0127725c41c854c53453f41787 muditaos/module-db/Common/Query.cpp -rw-r--r-- 1.3 KiB
9095333b — Bartek Cichocki [EGD-3502] PR fixes 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "Query.hpp"
#include <stdexcept>
#include <memory>
#include <utility>

using namespace db;

Query::Query(Type type, QueryListener *listener) : type(type), queryListener(listener)
{}

QueryListener *Query::getQueryListener() const noexcept
{
    return queryListener;
}

void Query::setQueryListener(QueryListener *listener) noexcept
{
    queryListener = listener;
}

void Query::setQueryListener(std::unique_ptr<QueryListener> listener) noexcept
{
    queryListenerUniqueptr = std::move(listener);
    queryListener          = dynamic_cast<QueryListener *>(queryListenerUniqueptr.get());
}

QueryResult::QueryResult(std::shared_ptr<Query> requestQuery) : requestQuery(std::move(requestQuery))
{}

void QueryResult::setRequestQuery(std::shared_ptr<Query> requestQueryToSet)
{
    requestQuery = requestQueryToSet;
}

std::shared_ptr<Query> QueryResult::getRequestQuery() const noexcept
{
    return requestQuery;
}

bool QueryResult::hasListener() const noexcept
{
    return !(requestQuery == nullptr || requestQuery->getQueryListener() == nullptr);
}

bool QueryResult::handle()
{
    if (requestQuery == nullptr || requestQuery->getQueryListener() == nullptr) {
        throw std::runtime_error("No listener to handle query");
    }

    return requestQuery->getQueryListener()->handleQueryResponse(this);
}