Stroika Library 3.0d24
 
Loading...
Searching...
No Matches
Document/Transaction.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
6
7namespace Stroika::Foundation::Database::Document {
8
9 /*
10 ********************************************************************************
11 **************************** Document::Transaction *****************************
12 ********************************************************************************
13 */
14 inline Transaction::Transaction (unique_ptr<IRep>&& rep)
15 : _fRep{move (rep)}
16 {
17#if qStroika_Foundation_Debug_AssertExternallySynchronizedChecker_Enabled
18 this->_fThisAssertExternallySynchronized.SetAssertExternallySynchronizedCheckerContext (
19 _fRep->_fThisAssertExternallySynchronized.GetSharedContext ());
20#endif
21 }
22 inline Transaction::~Transaction ()
23 {
24 // Since we allow move, that nulls out _fRep
25 if (_fRep != nullptr) {
26 if (_fRep->GetDisposition () == IRep::Disposition::eNone) {
27 try {
28 Rollback ();
29 }
30 catch (...) {
31 using namespace Characters::Literals;
32 DbgTrace ("Suppress rollback failure exception in SQL transaction: {}"_f, current_exception ());
33 // intentially fall-thru
34 }
35 }
36 }
37 }
38 inline void Transaction::Rollback ()
39 {
40 Debug::AssertExternallySynchronizedChecker::WriteContext declareContext{this->_fThisAssertExternallySynchronized};
41 RequireNotNull (_fRep);
42 _fRep->Rollback ();
43 }
44 inline void Transaction::Commit ()
45 {
46 Debug::AssertExternallySynchronizedChecker::WriteContext declareContext{this->_fThisAssertExternallySynchronized};
47 RequireNotNull (_fRep);
48 _fRep->Commit ();
49 }
50 inline String Transaction::ToString () const
51 {
52 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
53 RequireNotNull (_fRep);
55 sb << "{"sv;
56 sb << " disposition: "sv << _fRep->GetDisposition ();
57 sb << "}"sv;
58 return sb;
59 }
60
61}
63 template <>
64 constexpr EnumNames<Stroika::Foundation::Database::Document::Transaction::IRep::Disposition>
65 DefaultNames<Stroika::Foundation::Database::Document::Transaction::IRep::Disposition>::k{{{
66 {Stroika::Foundation::Database::Document::Transaction::IRep::Disposition::eNone, L"None"},
67 {Stroika::Foundation::Database::Document::Transaction::IRep::Disposition::eRolledBack, L"Rolled-Back"},
68 {Stroika::Foundation::Database::Document::Transaction::IRep::Disposition::eCompleted, L"Completed"},
69 {Stroika::Foundation::Database::Document::Transaction::IRep::Disposition::eFailed, L"Failed"},
70 }}};
71}
#define RequireNotNull(p)
Definition Assertions.h:348
#define DbgTrace
Definition Trace.h:317
Similar to String, but intended to more efficiently construct a String. Mutable type (String is large...
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201
unique_lock< AssertExternallySynchronizedChecker > WriteContext
Instantiate AssertExternallySynchronizedChecker::WriteContext to designate an area of code where prot...
shared_lock< const AssertExternallySynchronizedChecker > ReadContext
Instantiate AssertExternallySynchronizedChecker::ReadContext to designate an area of code where prote...