4#ifndef _Stroika_Foundation_Database_SQL_ORM_TableConnection_h_
5#define _Stroika_Foundation_Database_SQL_ORM_TableConnection_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include "Stroika/Foundation/Common/GUID.h"
10#include "Stroika/Foundation/Common/Property.h"
11#include "Stroika/Foundation/DataExchange/ObjectVariantMapper.h"
24namespace Stroika::Foundation::Database::SQL::ORM {
26 using namespace Containers;
27 using namespace DataExchange;
31 template <
typename T,
typename ID_TYPE = Common::GUID>
32 struct TableConnectionTraits {
34 static VariantValue ID2VariantValue (
const IDType&
id)
36 if constexpr (is_convertible_v<IDType, Memory::BLOB> or same_as<IDType, Common::GUID>) {
37 return VariantValue{
static_cast<Memory::BLOB
> (id)};
39 else if constexpr (same_as<IDType, IO::Network::URI>) {
40 return VariantValue{
id.template As<Characters::String> ()};
42 else if constexpr (is_convertible_v<IDType, Characters::String>) {
43 return VariantValue{
static_cast<Characters::String
> (id)};
48 return VariantValue{};
72 template <
typename T,
typename TRAITS = TableConnectionTraits<T>>
128 nonvirtual optional<T>
Get (
const typename TRAITS::IDType&
id);
149 nonvirtual
void AddNew (
const T& v);
162 nonvirtual
void Update (
const T& v);
168 nonvirtual
void Delete (
const typename TRAITS::IDType&
id);
169 nonvirtual
void Delete (
const T& v);
173 shared_ptr<const EngineProperties> fEngineProperties_;
174 Schema::Table fTableSchema_;
185 template <
typename FUN>
186 nonvirtual
void DoExecute_ (FUN&& f,
Statement& s,
bool write);
187 nonvirtual
void DoExecute_ (
Statement& s,
bool write);
197#include "TableConnection.inl"
#define AssertNotReached()
A generalization of a vector: a container whose elements are keyed by the natural numbers.
ObjectVariantMapper can be used to map C++ types to and from variant-union types, which can be transp...
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
TableConnection<T> wraps a database Connection::Ptr with information to map c++ objects to/from SQL d...
nonvirtual void AddOrUpdate(const T &v)
function< void(Operation op, const TableConnection *tableConn, const Statement *s, const exception_ptr &e)> OpertionCallbackPtr
nonvirtual optional< T > Get(const VariantValue &id)
nonvirtual void AddNew(const T &v)
nonvirtual void Update(const T &v)
nonvirtual Sequence< T > GetAll()
NOT a real mutex - just a debugging infrastructure support tool so in debug builds can be assured thr...