Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Transaction.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
6
7namespace Stroika::Foundation::Database::SQL {
8
9 /*
10 ********************************************************************************
11 **************************** SQL::Transaction **********************************
12 ********************************************************************************
13 */
14 inline Transaction::Transaction (unique_ptr<IRep>&& rep)
15 : _fRep{move (rep)}
16 {
17#if qStroika_Foundation_Debug_AssertExternallySynchronizedMutex_Enabled
18 this->_fThisAssertExternallySynchronized.SetAssertExternallySynchronizedMutexContext (_fRep->_fThisAssertExternallySynchronized.GetSharedContext ());
19#endif
20 }
21 inline Transaction::~Transaction ()
22 {
23 // Since we allow move, that nulls out _fRep
24 if (_fRep != nullptr) {
25 if (_fRep->GetDisposition () == IRep::Disposition::eNone) {
26 try {
27 Rollback ();
28 }
29 catch (...) {
30 using namespace Characters::Literals;
31 DbgTrace ("Suppress rollback failure exception in SQL transaction: {}"_f, current_exception ());
32 // intentially fall-thru
33 }
34 }
35 }
36 }
37 inline void Transaction::Rollback ()
38 {
39 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{this->_fThisAssertExternallySynchronized};
40 RequireNotNull (_fRep);
41 _fRep->Rollback ();
42 }
43 inline void Transaction::Commit ()
44 {
45 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{this->_fThisAssertExternallySynchronized};
46 RequireNotNull (_fRep);
47 _fRep->Commit ();
48 }
49 inline String Transaction::ToString () const
50 {
51 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
52 RequireNotNull (_fRep);
54 sb << "{"sv;
55 sb << " disposition: "sv << _fRep->GetDisposition ();
56 sb << "}"sv;
57 return sb;
58 }
59
60}
62 template <>
63 constexpr EnumNames<Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition>
64 DefaultNames<Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition>::k{{{
65 {Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition::eNone, L"None"},
66 {Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition::eRolledBack, L"Rolled-Back"},
67 {Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition::eCompleted, L"Completed"},
68 {Stroika::Foundation::Database::SQL::Transaction::IRep::Disposition::eFailed, L"Failed"},
69 }}};
70}
#define RequireNotNull(p)
Definition Assertions.h:347
#define DbgTrace
Definition Trace.h:309
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
shared_lock< const AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...
unique_lock< AssertExternallySynchronizedMutex > WriteContext
Instantiate AssertExternallySynchronizedMutex::WriteContext to designate an area of code where protec...