Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Statement.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5namespace Stroika::Foundation::Database::SQL {
6
7 /*
8 ********************************************************************************
9 ****************************** SQL::Statement **********************************
10 ********************************************************************************
11 */
12 inline Statement::Statement (unique_ptr<IRep>&& rep)
13 : _fRep{move (rep)}
14 {
15 }
16 inline auto Statement::GetColumns () const -> Sequence<ColumnDescription>
17 {
18 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fAssertExternallySynchronizedMutex};
19 RequireNotNull (_fRep); // Statement object moved
20 return _fRep->GetColumns ();
21 }
22 inline auto Statement::GetParameters () const -> Sequence<ParameterDescription>
23 {
24 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fAssertExternallySynchronizedMutex};
25 RequireNotNull (_fRep); // Statement object moved
26 return _fRep->GetParameters ();
27 }
28 inline void Statement::Bind ()
29 {
30 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
31 RequireNotNull (_fRep); // Statement object moved
32 _fRep->Bind ();
33 }
34 inline void Statement::Bind (unsigned int parameterIndex, const VariantValue& v)
35 {
36 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
37 RequireNotNull (_fRep); // Statement object moved
38 _fRep->Bind (parameterIndex, v);
39 }
40 inline void Statement::Bind (const String& parameterName, const VariantValue& v)
41 {
42 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
43 RequireNotNull (_fRep); // Statement object moved
44 _fRep->Bind (parameterName, v);
45 }
46 inline String Statement::GetSQL (WhichSQLFlag whichSQL) const
47 {
48 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fAssertExternallySynchronizedMutex};
49 RequireNotNull (_fRep); // Statement object moved
50 return _fRep->GetSQL (whichSQL);
51 }
52 inline void Statement::Reset ()
53 {
54 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
55 RequireNotNull (_fRep); // Statement object moved
56 _fRep->Reset ();
57 }
58 inline auto Statement::GetNextRow () -> optional<Row>
59 {
60 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
61 RequireNotNull (_fRep); // Statement object moved
62 return _fRep->GetNextRow ();
63 }
64 inline auto Statement::GetAllRows () -> Sequence<Row>
65 {
66 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
67 Reset ();
68 return GetAllRemainingRows ();
69 }
70 inline Sequence<VariantValue> Statement::GetAllRows (size_t restrictToColumn)
71 {
72 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
73 Reset ();
74 return GetAllRemainingRows (restrictToColumn);
75 }
76 inline Sequence<tuple<VariantValue, VariantValue>> Statement::GetAllRows (size_t restrictToColumn1, size_t restrictToColumn2)
77 {
78 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
79 Reset ();
80 return GetAllRemainingRows (restrictToColumn1, restrictToColumn2);
81 }
82 inline Sequence<tuple<VariantValue, VariantValue, VariantValue>> Statement::GetAllRows (size_t restrictToColumn1,
83 size_t restrictToColumn2, size_t restrictToColumn3)
84 {
85 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fAssertExternallySynchronizedMutex};
86 Reset ();
87 return GetAllRemainingRows (restrictToColumn1, restrictToColumn2, restrictToColumn3);
88 }
89
90}
#define RequireNotNull(p)
Definition Assertions.h:347
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201
A generalization of a vector: a container whose elements are keyed by the natural numbers.
Definition Sequence.h:187
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
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...