Lightweight 0.20260625.0
Loading...
Searching...
No Matches
Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector > Class Template Reference

Represents a one-to-one relationship through a join table. More...

#include <HasOneThrough.hpp>

Public Types

using ThroughRecord = ThroughTable
 The record type of the "through" side of the relationship.
 
using ReferencedRecord = OtherTable
 The record type of the "Other" side of the relationship.
 

Public Member Functions

LIGHTWEIGHT_FORCE_INLINE constexpr void EmplaceRecord (std::shared_ptr< ReferencedRecord > record)
 Emplaces the given record into this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordRecord () noexcept
 Retrieves the record in this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & Record () const noexcept
 Retrieves the record in this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr bool IsLoaded () const noexcept
 Checks if the record is loaded.
 
LIGHTWEIGHT_FORCE_INLINE void Unload () noexcept
 Unloads the record from memory.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordoperator* () noexcept
 Retrieves the record in this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & operator* () const noexcept
 Retrieves the record in this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordoperator-> () noexcept
 Retrieves the record in this relationship.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const * operator-> () const noexcept
 Retrieves the record in this relationship.
 
std::weak_ordering operator<=> (HasOneThrough const &other) const noexcept=default
 Default three-way comparison operator.
 
void SetAutoLoader (Loader loader)
 Used internally to configure on-demand loading of the record.
 

Static Public Attributes

static constexpr auto OwnerSelector = TheOwnerSelector
 Singles out the join record's foreign key pointing at the record owning this relationship.
 
static constexpr auto ThroughSelector = TheThroughSelector
 Singles out ReferencedRecord's foreign key pointing at ThroughRecord.
 

Detailed Description

template<typename OtherTable, typename ThroughTable, auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
class Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >

Represents a one-to-one relationship through a join table.

The OtherTable parameter is the record reached through the join table. The ThroughTable parameter is the join table, which references the current record.

Both foreign keys are located by matching the relationship type. When either record holds more than one foreign key into the same table, name the column to single one out - see the RelationSelector concept and the example on HasManyThrough.

Template Parameters
OtherTableThe record type reached through the join table.
ThroughTableThe join record type, holding a foreign key back to the owning record.
TheOwnerSelectorSingles out the join record's foreign key pointing at the owning record.
TheThroughSelectorSingles out OtherTable's foreign key pointing at ThroughTable.
See also
DataMapper, Field, HasManyThrough, RelationSelector

Definition at line 37 of file HasOneThrough.hpp.

Member Typedef Documentation

◆ ThroughRecord

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
using Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::ThroughRecord = ThroughTable

The record type of the "through" side of the relationship.

Definition at line 45 of file HasOneThrough.hpp.

◆ ReferencedRecord

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
using Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::ReferencedRecord = OtherTable

The record type of the "Other" side of the relationship.

Definition at line 48 of file HasOneThrough.hpp.

Member Function Documentation

◆ EmplaceRecord()

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr void Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::EmplaceRecord ( std::shared_ptr< ReferencedRecord record)
inlineconstexpr

Emplaces the given record into this relationship.

Definition at line 59 of file HasOneThrough.hpp.

◆ Record() [1/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord & Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::Record ( )
inlineconstexprnoexcept

Retrieves the record in this relationship.

Definition at line 62 of file HasOneThrough.hpp.

◆ Record() [2/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::Record ( ) const
inlineconstexprnoexcept

Retrieves the record in this relationship.

Definition at line 65 of file HasOneThrough.hpp.

◆ IsLoaded()

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr bool Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::IsLoaded ( ) const
inlineconstexprnoexcept

Checks if the record is loaded.

Definition at line 68 of file HasOneThrough.hpp.

◆ Unload()

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE void Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::Unload ( )
inlinenoexcept

Unloads the record from memory.

Definition at line 71 of file HasOneThrough.hpp.

◆ operator*() [1/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord & Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::operator* ( )
inlineconstexprnoexcept

Retrieves the record in this relationship.

Note
On-demand loads the record if it is not already loaded.

Definition at line 75 of file HasOneThrough.hpp.

◆ operator*() [2/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::operator* ( ) const
inlineconstexprnoexcept

Retrieves the record in this relationship.

Note
On-demand loads the record if it is not already loaded.

Definition at line 79 of file HasOneThrough.hpp.

◆ operator->() [1/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord * Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::operator-> ( )
inlineconstexprnoexcept

Retrieves the record in this relationship.

Note
On-demand loads the record if it is not already loaded.

Definition at line 83 of file HasOneThrough.hpp.

◆ operator->() [2/2]

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const * Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::operator-> ( ) const
inlineconstexprnoexcept

Retrieves the record in this relationship.

Note
On-demand loads the record if it is not already loaded.

Definition at line 87 of file HasOneThrough.hpp.

◆ SetAutoLoader()

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
void Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::SetAutoLoader ( Loader  loader)
inline

Used internally to configure on-demand loading of the record.

Definition at line 99 of file HasOneThrough.hpp.

Referenced by Lightweight::DataMapper::ConfigureRelationAutoLoading().

Member Data Documentation

◆ OwnerSelector

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
constexpr auto Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::OwnerSelector = TheOwnerSelector
staticconstexpr

Singles out the join record's foreign key pointing at the record owning this relationship.

Definition at line 51 of file HasOneThrough.hpp.

◆ ThroughSelector

template<typename OtherTable , typename ThroughTable , auto TheOwnerSelector = AutoDetectRelation, auto TheThroughSelector = AutoDetectRelation>
constexpr auto Lightweight::HasOneThrough< OtherTable, ThroughTable, TheOwnerSelector, TheThroughSelector >::ThroughSelector = TheThroughSelector
staticconstexpr

Singles out ReferencedRecord's foreign key pointing at ThroughRecord.

Definition at line 54 of file HasOneThrough.hpp.


The documentation for this class was generated from the following file: