6#include <userver/formats/bson/document.hpp>
7#include <userver/formats/bson/value.hpp>
8#include <userver/storages/mongo/options.hpp>
9#include <userver/utils/fast_pimpl.hpp>
11USERVER_NAMESPACE_BEGIN
13namespace storages::mongo::impl::cdriver {
14class CDriverCollectionImpl;
15class CDriverTransactionCollectionImpl;
28 Count(
Count&&)
noexcept;
41 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
42 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
45 static constexpr size_t kSize = 96;
46 static constexpr size_t kAlignment = 8;
48 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
70 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
71 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
74 static constexpr size_t kSize = 72;
75 static constexpr size_t kAlignment = 8;
77 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
87 Find(
Find&&)
noexcept;
105 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
106 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
109 static constexpr size_t kSize = 96;
110 static constexpr size_t kAlignment = 8;
112 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
131 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
132 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
135 static constexpr size_t kSize = 80;
136 static constexpr size_t kAlignment = 8;
138 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
145 explicit InsertMany(std::vector<formats::
bson::
Document> documents);
161 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
162 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
165 static constexpr size_t kSize = 88;
166 static constexpr size_t kAlignment = 8;
168 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
188 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
189 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
192 static constexpr size_t kSize = 96;
193 static constexpr size_t kAlignment = 8;
195 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
201 enum class Mode { kSingle, kMulti };
207 Update(
Update&&)
noexcept;
222 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
223 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
226 static constexpr size_t kSize = 96;
227 static constexpr size_t kAlignment = 8;
229 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
235 enum class Mode { kSingle, kMulti };
241 Delete(
Delete&&)
noexcept;
253 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
254 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
257 static constexpr size_t kSize = 80;
258 static constexpr size_t kAlignment = 8;
260 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
285 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
286 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
289 FindAndModify(Impl&&);
290 static constexpr size_t kSize = 80;
291 static constexpr size_t kAlignment = 8;
293 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
314 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
315 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
318 FindAndRemove(Impl&&);
319 static constexpr size_t kSize = 72;
320 static constexpr size_t kAlignment = 8;
322 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
328 explicit Aggregate(formats::
bson::
Value pipeline);
346 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
347 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
350 static constexpr size_t kSize = 120;
351 static constexpr size_t kAlignment = 8;
353 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
357class Distinct
final {
359 explicit Distinct(std::string field);
360 Distinct(std::string field, formats::
bson::
Document filter);
363 Distinct(
const Distinct&);
364 Distinct(Distinct&&)
noexcept;
365 Distinct& operator=(
const Distinct&);
366 Distinct& operator=(Distinct&&)
noexcept;
371 void SetOption(
const options::Collation&);
376 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
377 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
380 static constexpr size_t kSize = 104;
381 static constexpr size_t kAlignment = 8;
383 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;
392 Drop(
Drop&&)
noexcept;
400 friend class storages::mongo::impl::cdriver::CDriverCollectionImpl;
401 friend class storages::mongo::impl::cdriver::CDriverTransactionCollectionImpl;
404 static constexpr size_t kSize = 56;
405 static constexpr size_t kAlignment = 8;
407 utils::FastPimpl<Impl, kSize, kAlignment,
false> impl_;