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...