Ditto 1.1.7
PendingCursorOperation.hpp
1#ifndef _DITTO_PENDING_CURSOR_OPERATION_
2#define _DITTO_PENDING_CURSOR_OPERATION_
3
4#include "Document.hpp"
5#include "DocumentId.hpp"
6#include "Helpers.hpp"
7#include "LiveQuery.hpp"
8#include "MutableDocument.hpp"
9#include "SortDirection.hpp"
10#include "Subscription.hpp"
11#include "UpdateResult.hpp"
12#include "json.hpp"
13
14#include <functional>
15#include <memory>
16#include <string>
17#include <unordered_map>
18#include <vector>
19
20namespace ditto {
21class DittoHandleWrapper;
22
50 friend class Collection;
51 friend class PendingCollectionsOperation;
52
53 nlohmann::json query_args;
54 uint32_t _offset = 0;
55 int32_t _limit = -1;
56
58 std::shared_ptr<DittoHandleWrapper> ditto_handle_wrapper,
59 std::string collection_name, std::string query_str,
60 nlohmann::json query_args);
61
62 PendingCursorOperation() = default;
66
67 class Impl;
68 std::unique_ptr<Impl> impl_;
69
70public:
74 std::string collection_name;
75
79 std::string query;
80
82
83 // Follows the copy-and-swap idiom as described here:
84 // https://stackoverflow.com/a/3279550/2041080
85 friend void swap(PendingCursorOperation &first,
86 PendingCursorOperation &second) {
87 using std::swap;
88
89 swap(first.collection_name, second.collection_name);
90 swap(first.query, second.query);
91 swap(first.query_args, second.query_args);
92 swap(first._offset, second._offset);
93 swap(first._limit, second._limit);
94 swap(first.impl_, second.impl_);
95 }
96
107
125
138 PendingCursorOperation &sort(std::string query, SortDirection direction);
139
147 std::vector<Document> exec() const;
148
159 std::unordered_map<DocumentId, std::vector<std::unique_ptr<UpdateResult>>,
160 DocumentIdHasher>
161 update(std::function<void(std::vector<MutableDocument> &)> fn);
162
169 std::vector<DocumentId> remove() const;
170
177 std::vector<DocumentId> evict() const;
178
192 Subscription subscribe() const;
193
211 std::shared_ptr<LiveQuery>
212 observe(LiveQueryEventHandler handler) const DITTO_DEPRECATED;
213
231 std::shared_ptr<LiveQuery>
232 observe(LiveQueryEventCallback event_callback) const;
233
252 std::shared_ptr<LiveQuery>
253 observe_local(LiveQueryEventHandler handler) const DITTO_DEPRECATED;
254
273 std::shared_ptr<LiveQuery>
274 observe_local(LiveQueryEventCallback event_callback) const;
275
294 std::shared_ptr<LiveQuery> observe_with_next_signal(
295 LiveQueryWithNextSignalEventHandler handler) const DITTO_DEPRECATED;
296
315 std::shared_ptr<LiveQuery> observe_with_next_signal(
316 LiveQueryEventWithNextSignalCallback event_callback) const;
317
337 std::shared_ptr<LiveQuery> observe_local_with_next_signal(
338 LiveQueryWithNextSignalEventHandler handler) const DITTO_DEPRECATED;
339
359 std::shared_ptr<LiveQuery> observe_local_with_next_signal(
360 LiveQueryEventWithNextSignalCallback event_callback) const;
361};
362} // namespace ditto
363#endif
A reference to a collection in a Store.
Definition: Collection.hpp:26
These objects are returned when calling collections() on Store objects.
Definition: PendingCollectionsOperation.hpp:64
These objects are returned when using find-like functionality on Collection objects.
Definition: PendingCursorOperation.hpp:49
std::string query
Definition: PendingCursorOperation.hpp:79
std::vector< Document > exec() const
Execute the query generated by the preceding function chaining and return the list of matching docume...
Definition: PendingCursorOperation.cpp:99
PendingCursorOperation & limit(uint32_t limit)
Limit the number of documents that get returned when querying a collection for matching documents.
Definition: PendingCursorOperation.cpp:176
std::shared_ptr< LiveQuery > observe_with_next_signal(LiveQueryWithNextSignalEventHandler handler) const DITTO_DEPRECATED
Enables you to listen for changes that occur on a collection and match the specified query and qualif...
Definition: PendingCursorOperation.cpp:141
PendingCursorOperation & sort(std::string query, SortDirection direction)
Sort the documents that match the query provided in the preceding find-like function call.
Definition: PendingCursorOperation.cpp:181
Subscription subscribe() const
Subscribe to changes from other peers that occur in the collection.
Definition: PendingCursorOperation.cpp:228
std::shared_ptr< LiveQuery > observe(LiveQueryEventHandler handler) const DITTO_DEPRECATED
Enables you to listen for changes that occur on a collection and match the specified query and qualif...
Definition: PendingCursorOperation.cpp:114
PendingCursorOperation & offset(uint32_t offset)
Offset the resulting set of matching documents.
Definition: PendingCursorOperation.cpp:171
std::shared_ptr< LiveQuery > observe_local_with_next_signal(LiveQueryWithNextSignalEventHandler handler) const DITTO_DEPRECATED
Enables you to listen for changes that occur on a collection and match the specified query and qualif...
Definition: PendingCursorOperation.cpp:157
std::vector< DocumentId > remove() const
Remove all documents that match the query generated by the preceding function chaining.
Definition: PendingCursorOperation.cpp:204
std::vector< DocumentId > evict() const
Evict all documents that match the query generated by the preceding function chaining.
Definition: PendingCursorOperation.cpp:216
std::string collection_name
Definition: PendingCursorOperation.hpp:74
std::unordered_map< DocumentId, std::vector< std::unique_ptr< UpdateResult > >, DocumentIdHasher > update(std::function< void(std::vector< MutableDocument > &)> fn)
Update documents that match the query generated by the preceding function chaining.
Definition: PendingCursorOperation.cpp:189
std::shared_ptr< LiveQuery > observe_local(LiveQueryEventHandler handler) const DITTO_DEPRECATED
Enables you to listen for changes that occur on a collection and match the specified query and qualif...
Definition: PendingCursorOperation.cpp:129
While Subscription objects remain in scope they ensure that documents in the collection specified,...
Definition: Subscription.hpp:17
basic_json<> json
default JSON class
Definition: json.hpp:2933
A thin wrapper around a function that will get called when there are updates relating to a live query...
Definition: LiveQuery.hpp:75
A thin wrapper around a function that will get called when there are updates relating to a live query...
Definition: LiveQuery.hpp:93