Lightweight 0.20251202.0
Loading...
Searching...
No Matches
Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > Class Template Reference

Represents a one-to-one relationship. More...

#include <BelongsTo.hpp>

Public Types

using ReferencedRecord = MemberClassType< decltype(TheReferencedField)>
 Represents the record type of the other field.
 
using BaseType = std::remove_cvref_t< decltype(std::declval< ReferencedRecord >().*ReferencedField)>::ValueType
 Represents the base column type of the foreign key, matching the primary key of the other record.
 
using ValueType = std::conditional_t< Nullable==SqlNullable::Null, std::optional< BaseType >, BaseType >
 

Public Member Functions

template<typename... S>
requires std::constructible_from<ValueType, S...>
constexpr BelongsTo (S &&... value) noexcept
 
constexpr BelongsTo (ReferencedRecord const &other) noexcept
 
constexpr BelongsTo (BelongsTo const &other) noexcept
 
constexpr BelongsTo (BelongsTo &&other) noexcept
 
BelongsTooperator= (SqlNullType) noexcept
 
BelongsTooperator= (ReferencedRecord &other)
 
BelongsTooperator= (BelongsTo const &other)
 
BelongsTooperator= (BelongsTo &&other) noexcept
 
LIGHTWEIGHT_FORCE_INLINE constexpr void SetModified (bool value) noexcept
 Marks the field as modified or unmodified.
 
LIGHTWEIGHT_FORCE_INLINE constexpr bool IsModified () const noexcept
 Checks if the field is modified.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ValueType const & Value () const noexcept
 Retrieves the reference to the value of the field.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ValueTypeMutableValue () noexcept
 Retrieves the mutable reference to the value of the field.
 
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & Record (this Self &&self)
 Retrieves a record from the relationship. When the record is not optional.
 
template<typename Self >
requires (IsOptional)
LIGHTWEIGHT_FORCE_INLINE constexpr decltype(auto) Record (this Self &&self)
 
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordoperator* (this Self &&self) noexcept
 
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordoperator-> (this Self &&self)
 
LIGHTWEIGHT_FORCE_INLINE constexpr bool operator! () const noexcept
 Checks if the field value is NULL.
 
LIGHTWEIGHT_FORCE_INLINE constexpr operator bool () const noexcept
 Checks if the field value is not NULL.
 
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecordEmplaceRecord ()
 Emplaces a record into the relationship. This will mark the relationship as loaded.
 
template<typename Stmt >
LIGHTWEIGHT_FORCE_INLINE void BindOutputColumn (SQLSMALLINT outputIndex, Stmt &stmt)
 
std::weak_ordering operator<=> (BelongsTo const &other) const noexcept
 
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
std::weak_ordering operator<=> (Field< T, IsPrimaryKeyValue > const &other) const noexcept
 
bool operator== (BelongsTo const &other) const noexcept
 
bool operator!= (BelongsTo const &other) const noexcept
 
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
bool operator== (Field< T, IsPrimaryKeyValue > const &other) const noexcept
 
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
bool operator!= (Field< T, IsPrimaryKeyValue > const &other) const noexcept
 
void SetAutoLoader (Loader loader) noexcept
 Used internally to configure on-demand loading of the record.
 

Static Public Attributes

static constexpr auto ReferencedField = TheReferencedField
 The field in the other record that references the current record.
 
static constexpr std::string_view ColumnNameOverride
 If not an empty string, this value will be used as the column name in the database.
 
static constexpr auto IsOptional = Nullable == SqlNullable::Null
 
static constexpr auto IsMandatory = !IsOptional
 
static constexpr auto IsPrimaryKey = false
 
static constexpr auto IsAutoIncrementPrimaryKey = false
 

Detailed Description

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
class Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >

Represents a one-to-one relationship.

The TheReferencedField parameter is the field in the other record that references the current record, in the form of &OtherRecord::Field. Other Field must be a primary key.

Template Parameters
TheReferencedFieldThe field in the other record that references the current record.
ColumnNameOverrideStringIf not an empty string, this value will be used as the column name in the database.
struct User {
};
struct Email {
// Also possible to customize the column name
BelongsTo<&User::id, SqlRealName<"the_user_id">, SqlNullable::Null> maybe_user;
};
Represents a one-to-one relationship.
Definition BelongsTo.hpp:57
Represents a single column in a table.
Definition Field.hpp:84
Helper class, used to represent a real SQL column names as template arguments.

Definition at line 56 of file BelongsTo.hpp.

Member Typedef Documentation

◆ ReferencedRecord

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
using Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::ReferencedRecord = MemberClassType<decltype(TheReferencedField)>

Represents the record type of the other field.

Definition at line 81 of file BelongsTo.hpp.

◆ BaseType

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
using Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BaseType = std::remove_cvref_t<decltype(std::declval<ReferencedRecord>().*ReferencedField)>::ValueType

Represents the base column type of the foreign key, matching the primary key of the other record.

Definition at line 87 of file BelongsTo.hpp.

◆ ValueType

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
using Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::ValueType = std::conditional_t<Nullable == SqlNullable::Null, std::optional<BaseType>, BaseType>

Represents the value type of the foreign key, which can be either an optional or a non-optional type of the referenced field,

Definition at line 92 of file BelongsTo.hpp.

Constructor & Destructor Documentation

◆ BelongsTo() [1/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename... S>
requires std::constructible_from<ValueType, S...>
constexpr Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BelongsTo ( S &&...  value)
inlineconstexprnoexcept

Definition at line 101 of file BelongsTo.hpp.

◆ BelongsTo() [2/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BelongsTo ( ReferencedRecord const &  other)
inlineconstexprnoexcept

Definition at line 106 of file BelongsTo.hpp.

◆ BelongsTo() [3/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BelongsTo ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > const &  other)
inlineconstexprnoexcept

Definition at line 117 of file BelongsTo.hpp.

◆ BelongsTo() [4/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BelongsTo ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > &&  other)
inlineconstexprnoexcept

Definition at line 126 of file BelongsTo.hpp.

Member Function Documentation

◆ operator=() [1/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
BelongsTo & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator= ( SqlNullType  )
inlinenoexcept

Definition at line 135 of file BelongsTo.hpp.

◆ operator=() [2/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
BelongsTo & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator= ( ReferencedRecord other)
inline

Definition at line 146 of file BelongsTo.hpp.

◆ operator=() [3/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
BelongsTo & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator= ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > const &  other)
inline

Definition at line 165 of file BelongsTo.hpp.

◆ operator=() [4/4]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
BelongsTo & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator= ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > &&  other)
inlinenoexcept

Definition at line 179 of file BelongsTo.hpp.

◆ SetModified()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr void Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::SetModified ( bool  value)
inlineconstexprnoexcept

Marks the field as modified or unmodified.

Definition at line 195 of file BelongsTo.hpp.

◆ IsModified()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::IsModified ( ) const
inlineconstexprnoexcept

Checks if the field is modified.

Definition at line 201 of file BelongsTo.hpp.

◆ Value()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr ValueType const & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::Value ( ) const
inlineconstexprnoexcept

Retrieves the reference to the value of the field.

Definition at line 207 of file BelongsTo.hpp.

◆ MutableValue()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr ValueType & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::MutableValue ( )
inlineconstexprnoexcept

Retrieves the mutable reference to the value of the field.

Definition at line 213 of file BelongsTo.hpp.

◆ Record() [1/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord const & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::Record ( this Self &&  self)
inlineconstexpr

Retrieves a record from the relationship. When the record is not optional.

Definition at line 222 of file BelongsTo.hpp.

◆ Record() [2/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename Self >
requires (IsOptional)
LIGHTWEIGHT_FORCE_INLINE constexpr decltype(auto) Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::Record ( this Self &&  self)
inlineconstexpr

Retrieves a record from the relationship. When the record is optional we return object similar to std::optional<ReferencedRecord&>

Definition at line 232 of file BelongsTo.hpp.

◆ operator*()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator* ( this Self &&  self)
inlineconstexprnoexcept

Retrieves the record from the relationship. Only available when the relationship is mandatory.

Definition at line 248 of file BelongsTo.hpp.

◆ operator->()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename Self >
requires (IsMandatory)
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord * Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator-> ( this Self &&  self)
inlineconstexpr

Retrieves the record from the relationship. Only available when the relationship is mandatory.

Definition at line 258 of file BelongsTo.hpp.

◆ operator!()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator! ( ) const
inlineconstexprnoexcept

Checks if the field value is NULL.

Definition at line 268 of file BelongsTo.hpp.

◆ operator bool()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator bool ( ) const
inlineexplicitconstexprnoexcept

Checks if the field value is not NULL.

Definition at line 274 of file BelongsTo.hpp.

◆ EmplaceRecord()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
LIGHTWEIGHT_FORCE_INLINE constexpr ReferencedRecord & Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::EmplaceRecord ( )
inlineconstexpr

Emplaces a record into the relationship. This will mark the relationship as loaded.

Definition at line 280 of file BelongsTo.hpp.

◆ BindOutputColumn()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<typename Stmt >
LIGHTWEIGHT_FORCE_INLINE void Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::BindOutputColumn ( SQLSMALLINT  outputIndex,
Stmt &  stmt 
)
inline

Definition at line 288 of file BelongsTo.hpp.

◆ operator<=>() [1/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
std::weak_ordering Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator<=> ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > const &  other) const
inlinenoexcept

Definition at line 293 of file BelongsTo.hpp.

◆ operator<=>() [2/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
std::weak_ordering Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator<=> ( Field< T, IsPrimaryKeyValue > const &  other) const
inlinenoexcept

Definition at line 299 of file BelongsTo.hpp.

◆ operator==() [1/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator== ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > const &  other) const
inlinenoexcept

Definition at line 304 of file BelongsTo.hpp.

◆ operator!=() [1/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator!= ( BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable > const &  other) const
inlinenoexcept

Definition at line 309 of file BelongsTo.hpp.

◆ operator==() [2/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator== ( Field< T, IsPrimaryKeyValue > const &  other) const
inlinenoexcept

Definition at line 315 of file BelongsTo.hpp.

◆ operator!=() [2/2]

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
template<detail::FieldElementType T, PrimaryKey IsPrimaryKeyValue = PrimaryKey::No>
bool Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::operator!= ( Field< T, IsPrimaryKeyValue > const &  other) const
inlinenoexcept

Definition at line 321 of file BelongsTo.hpp.

◆ SetAutoLoader()

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
void Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::SetAutoLoader ( Loader  loader)
inlinenoexcept

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

Definition at line 332 of file BelongsTo.hpp.

Member Data Documentation

◆ ReferencedField

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr auto Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::ReferencedField = TheReferencedField
staticconstexpr

The field in the other record that references the current record.

Definition at line 60 of file BelongsTo.hpp.

◆ ColumnNameOverride

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr std::string_view Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::ColumnNameOverride
staticconstexpr
Initial value:
= []() consteval {
if constexpr (!std::same_as<decltype(ColumnNameOverrideString), std::nullopt_t>)
return std::string_view { ColumnNameOverrideString };
else
return std::string_view {};
}()

If not an empty string, this value will be used as the column name in the database.

Definition at line 63 of file BelongsTo.hpp.

◆ IsOptional

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr auto Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::IsOptional = Nullable == SqlNullable::Null
staticconstexpr

Definition at line 94 of file BelongsTo.hpp.

◆ IsMandatory

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr auto Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::IsMandatory = !IsOptional
staticconstexpr

Definition at line 95 of file BelongsTo.hpp.

◆ IsPrimaryKey

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr auto Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::IsPrimaryKey = false
staticconstexpr

Definition at line 96 of file BelongsTo.hpp.

◆ IsAutoIncrementPrimaryKey

template<auto TheReferencedField, auto ColumnNameOverrideString = std::nullopt, SqlNullable Nullable = SqlNullable::NotNull>
constexpr auto Lightweight::BelongsTo< TheReferencedField, ColumnNameOverrideString, Nullable >::IsAutoIncrementPrimaryKey = false
staticconstexpr

Definition at line 97 of file BelongsTo.hpp.


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