Ditto 4.11.0
 
Loading...
Searching...
No Matches
QueryResult.hpp
1#ifndef _DITTO_DQL_QUERY_RESULT_
2#define _DITTO_DQL_QUERY_RESULT_
3
4#include "DocumentId.hpp"
5#include "json.hpp"
6
7#include <memory>
8#include <mutex>
9#include <vector>
10
11#include "any.hpp"
12#include <unordered_map>
13
14/* Forward declaration with typedef */
15typedef struct dittoffi_query_result dittoffi_query_result_t;
16typedef struct dittoffi_query_result_item dittoffi_query_result_item_t;
17
18namespace ditto {
19using ValueMap = std::unordered_map<std::string, any>;
20
21class StoreObserver;
22
28class QueryResultItem {
29 friend class QueryResult;
30 friend class Differ;
31
32private:
33 explicit QueryResultItem(dittoffi_query_result_item_t *raw);
34
35 explicit QueryResultItem(const nlohmann::json &json_dict);
36
37 std::shared_ptr<dittoffi_query_result_item> raw;
38 mutable std::shared_ptr<ValueMap> materialized_value;
39 mutable std::unique_ptr<std::mutex> synchronized;
40
41public:
55 std::shared_ptr<ValueMap> value() const;
56
66 bool is_materialized() const;
67
76 void materialize();
77
84 void dematerialize();
85
92 std::vector<uint8_t> cbor_data() const;
93
100 std::string json_string() const;
101
103
113 static QueryResultItem from_json(const nlohmann::json &json_dict);
115};
116
121class QueryResult {
122private:
123 friend class Store;
124 friend class StoreObserver;
125 friend class Transaction;
126 QueryResult(dittoffi_query_result_t *raw);
127 std::shared_ptr<dittoffi_query_result_t> raw;
128
129public:
133 size_t item_count() const;
134
139 QueryResultItem get_item(size_t index) const;
140
144 std::vector<QueryResultItem> items() const;
145
153 std::vector<DocumentId> mutated_document_ids() const;
154};
155
156}; // namespace ditto
157#endif
QueryResultItem get_item(size_t index) const
Returns the matching QueryResultItem.
Definition QueryResult.cpp:23
std::vector< QueryResultItem > items() const
Definition QueryResult.cpp:32
std::vector< DocumentId > mutated_document_ids() const
IDs of documents that were mutated by the DQL query. Empty array if no documents have been mutated.
Definition QueryResult.cpp:43
size_t item_count() const
Definition QueryResult.cpp:19
Represents a single match of a DQL query, similar to a "row" in SQL terms. It is a reference type ser...
Definition QueryResult.hpp:28
void dematerialize()
Releases the materialized value from memory. No-op if item is not materialized.
Definition QueryResult.cpp:106
std::string json_string() const
Returns the content of the item as a JSON string.
Definition QueryResult.cpp:108
std::shared_ptr< ValueMap > value() const
Returns the content as a materialized value map.
Definition QueryResult.cpp:86
std::vector< uint8_t > cbor_data() const
Returns the content of the item as CBOR data.
Definition QueryResult.cpp:115
bool is_materialized() const
Returns true if value is currently held materialized in memory, otherwise returns false.
Definition QueryResult.cpp:91
void materialize()
Loads the CBOR representation of the item's content, decodes it as a dictionary so it can be accessed...
Definition QueryResult.cpp:96
Definition StoreObserver.hpp:44