Stroika Library 3.0d23
 
Loading...
Searching...
No Matches
Foundation/Database/Document/Connection.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
5#include "Stroika/Foundation/Execution/Activity.h"
7
8namespace Stroika::Foundation::Database::Document::Connection {
9
10 /*
11 ********************************************************************************
12 ************************* Document::Connection::Ptr ****************************
13 ********************************************************************************
14 */
15 inline Ptr::Ptr (const inherited& i) noexcept
16 : inherited{i}
17 {
18 }
19 inline Ptr::Ptr (nullptr_t) noexcept
20 : inherited{nullptr}
21 {
22 }
23 inline bool Ptr::operator== (const Ptr& rhs) const noexcept
24 {
25 return this->get () == rhs.get ();
26 }
27 inline bool Ptr::operator== (nullptr_t) const noexcept
28 {
29 return this->get () == nullptr;
30 }
31 inline auto Ptr::GetEngineProperties () const -> shared_ptr<const EngineProperties>
32 {
33 return this->get ()->GetEngineProperties ();
34 }
35 inline auto Ptr::GetOptions () const -> Options
36 {
37 return this->get ()->GetOptions ();
38 }
39 inline uintmax_t Ptr::GetSpaceConsumed () const
40 {
41 auto activity = Execution::LazyEvalActivity{[&] () -> String { return "Getting database size"sv; }};
42 Execution::DeclareActivity da{&activity};
43 return this->get ()->GetSpaceConsumed ();
44 }
46 {
47 auto activity = Execution::LazyEvalActivity{[&] () -> String { return "Getting collections from document database"sv; }};
48 Execution::DeclareActivity da{&activity};
49 return this->get ()->GetCollections ();
50 }
51 inline Collection::Ptr Ptr::CreateCollection (const String& name) const
52 {
53 auto activity = Execution::LazyEvalActivity{[&] () -> String { return "Creating collection in document database"sv; }};
54 Execution::DeclareActivity da{&activity};
55 return this->get ()->CreateCollection (name);
56 }
57 inline void Ptr::DropCollection (const String& name) const
58 {
59 auto activity = Execution::LazyEvalActivity{[&] () -> String { return "Dropping collection from document database"sv; }};
60 Execution::DeclareActivity da{&activity};
61 this->get ()->DropCollection (name);
62 }
63 inline Collection::Ptr Ptr::GetCollection (const String& name) const
64 {
65 auto activity = Execution::LazyEvalActivity{[&] () -> String { return "Gett collection from document database"sv; }};
66 Execution::DeclareActivity da{&activity};
67 return this->get ()->GetCollection (name);
68 }
69 inline String Ptr::ToString () const
70 {
71 using namespace Characters;
72 return Format ("{}"_f, static_cast<const void*> (this->get ()));
73 }
74}
75
76namespace Stroika::Foundation::Database::Document::Connection::Private_ {
77 /**
78 * Private utility to faciliate logging and tracking of database reads/writes times
79 */
80 template <typename FUN>
81 auto WrapLoggingExecuteHelper_ (FUN&& f, Connection::IRep* documentDBConnection, const Connection::Options& options,
82 const optional<String>& collectionName, bool write)
83 {
84 if (options.fOperationLoggingCallback == nullptr) {
85 return f ();
86 }
87 else {
88 auto callback = options.fOperationLoggingCallback;
89 Connection::Ptr connPtr = documentDBConnection->shared_from_this ();
90 callback (write ? Operation::eStartingWrite : Operation::eStartingRead, connPtr, collectionName, nullptr);
91 [[maybe_unused]] auto&& cleanup = Execution::Finally ([&] () noexcept {
92 callback (write ? Operation::eCompletedWrite : Operation::eCompletedRead, connPtr, collectionName, nullptr);
93 });
94 try {
95 return f ();
96 }
97 catch (...) {
98 callback (Operation::eNotifyError, connPtr, collectionName, current_exception ());
100 }
101 }
102 }
103}
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
nonvirtual Set< String > GetCollections() const
return the names of all collections in the referenced database
nonvirtual Collection::Ptr CreateCollection(const String &name) const
auto Finally(FUNCTION &&f) -> Private_::FinallySentry< FUNCTION >
Definition Finally.inl:31