Lightweight 0.20260921.0
Loading...
Searching...
No Matches
Lightweight::SqlVariant Struct Reference

Represents a value that can be any of the supported SQL data types. More...

#include <SqlVariant.hpp>

Public Types

using InnerType = std::variant< SqlNullType, SqlGuid, bool, int8_t, short, unsigned short, int, unsigned int, long long, unsigned long long, float, double, std::string, std::string_view, std::u16string, std::u16string_view, SqlText, SqlBinary, SqlDynamicNumeric, SqlDate, SqlTime, SqlDateTime >
 The inner type of the variant.
 

Public Member Functions

 SqlVariant ()=default
 Default construct a new SqlVariant.
 
 SqlVariant (SqlVariant const &)=default
 Copy construct a new SqlVariant from another.
 
 SqlVariant (SqlVariant &&) noexcept=default
 Move construct a new SqlVariant from another.
 
SqlVariant & operator= (SqlVariant const &)=default
 Copy assign a new SqlVariant from another.
 
SqlVariant & operator= (SqlVariant &&) noexcept=default
 Move assign a new SqlVariant from another.
 
 ~SqlVariant ()=default
 Destructor for SqlVariant.
 
LIGHTWEIGHT_FORCE_INLINE SqlVariant (InnerType const &other)
 Copy constructor of a SqlVariant from one of the supported types.
 
LIGHTWEIGHT_FORCE_INLINE SqlVariant (InnerType &&other) noexcept
 Move constructor of a SqlVariant from one of the supported types.
 
template<std::size_t N, typename T = char, SqlFixedStringMode Mode>
constexpr LIGHTWEIGHT_FORCE_INLINE SqlVariant (SqlFixedString< N, T, Mode > const &other)
 Construct a new SqlVariant from a SqlFixedString.
 
template<std::size_t TextSize>
constexpr LIGHTWEIGHT_FORCE_INLINE SqlVariant (char const (&text)[TextSize])
 Copy constructor of a SqlVariant from a char array.
 
template<std::size_t TextSize>
constexpr LIGHTWEIGHT_FORCE_INLINE SqlVariant (char16_t const (&text)[TextSize])
 Copy constructor of a SqlVariant from a char16_t array.
 
template<typename T >
LIGHTWEIGHT_FORCE_INLINE SqlVariant (std::optional< T > const &other)
 Copy constructor of a SqlVariant from an optional of one of the supported types.
 
LIGHTWEIGHT_FORCE_INLINE SqlVariant & operator= (InnerType const &other)
 Assignment operator of a SqlVariant from one of the supported types.
 
LIGHTWEIGHT_FORCE_INLINE SqlVariant & operator= (InnerType &&other) noexcept
 Assignment operator of a SqlVariant from one of the supported types.
 
template<detail::HasSqlViewHelper StringViewLike>
LIGHTWEIGHT_FORCE_INLINE SqlVariant (StringViewLike const *newValue)
 Construct from an string-like object that implements an SqlViewHelper<>.
 
template<detail::HasSqlViewHelper StringViewLike>
LIGHTWEIGHT_FORCE_INLINE SqlVariant & operator= (StringViewLike const *newValue) noexcept
 Assign from an string-like object that implements an SqlViewHelper<>.
 
LIGHTWEIGHT_FORCE_INLINE bool IsNull () const noexcept
 Check if the value is NULL.
 
template<typename T >
LIGHTWEIGHT_FORCE_INLINE bool Is () const noexcept
 Check if the value is of the specified type.
 
template<typename T >
LIGHTWEIGHT_FORCE_INLINE decltype(auto) Get () noexcept
 Retrieve the value as the specified type.
 
template<typename T >
LIGHTWEIGHT_FORCE_INLINE T ValueOr (T &&defaultValue) const noexcept
 Retrieve the value as the specified type, or return the default value if the value is NULL.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< bool > TryGetBool () const noexcept
 Retrieve the bool from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< int8_t > TryGetInt8 () const noexcept
 Retrieve the int8_t from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< short > TryGetShort () const noexcept
 Retrieve the unsigned short from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned short > TryGetUShort () const noexcept
 Retrieve the unsigned short from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< int > TryGetInt () const noexcept
 Retrieve the int from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned int > TryGetUInt () const noexcept
 Retrieve the unsigned int from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< long long > TryGetLongLong () const noexcept
 Retrieve the long long from the variant or std::nullopt.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned long long > TryGetULongLong () const noexcept
 Retrieve the unsigned long long from the variant or std::nullopt.
 
std::optional< std::string_view > TryGetStringView () const noexcept
 Retrieves a string view from the variant, or std::nullopt if the variant is NULL or holds a non-string alternative. The function is noexcept, so it must not propagate bad_variant_access.
 
std::optional< std::u16string_view > TryGetUtf16StringView () const noexcept
 Retrieves a UTF-16 string view from the variant, or std::nullopt if the variant is NULL or holds a non-string alternative. The function is noexcept, so it must not propagate bad_variant_access.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDate > TryGetDate () const
 function to get SqlDate from SqlVariant or std::nullopt
 
bool operator== (SqlVariant const &other) const noexcept
 Equality comparison operator.
 
bool operator!= (SqlVariant const &other) const noexcept
 Inequality comparison operator.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlTime > TryGetTime () const
 function to get SqlTime from SqlVariant or std::nullopt
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDateTime > TryGetDateTime () const
 function to get SqlDateTime from SqlVariant or std::nullopt
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlGuid > TryGetGuid () const
 Retrieve the GUID from the variant or std::nullopt if the value is NULL.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDynamicNumeric > TryGetNumeric () const
 Retrieve the exact fixed-point decimal from the variant, or std::nullopt if NULL.
 
LIGHTWEIGHT_FORCE_INLINE std::optional< SqlBinary > TryGetBinary () const
 Retrieve the binary payload from the variant, or std::nullopt if the value is NULL.
 
LIGHTWEIGHT_API std::string ToString () const
 Create string representation of the variant. Can be used for debug purposes.
 

Public Attributes

InnerType value
 The variant value.
 

Detailed Description

Represents a value that can be any of the supported SQL data types.

Use this class with care. Always prefer native types when possible, in order to avoid any unnecessary overhead.

Definition at line 46 of file SqlVariant.hpp.

Member Typedef Documentation

◆ InnerType

using Lightweight::SqlVariant::InnerType = std::variant<SqlNullType, SqlGuid, bool, int8_t, short, unsigned short, int, unsigned int, long long, unsigned long long, float, double, std::string, std::string_view, std::u16string, std::u16string_view, SqlText, SqlBinary, SqlDynamicNumeric, SqlDate, SqlTime, SqlDateTime>

The inner type of the variant.

This type is a variant of all the supported SQL data types.

Definition at line 51 of file SqlVariant.hpp.

Constructor & Destructor Documentation

◆ SqlVariant() [1/7]

LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( InnerType const &  other)
inline

Copy constructor of a SqlVariant from one of the supported types.

Definition at line 91 of file SqlVariant.hpp.

◆ SqlVariant() [2/7]

LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( InnerType &&  other)
inlinenoexcept

Move constructor of a SqlVariant from one of the supported types.

Definition at line 97 of file SqlVariant.hpp.

◆ SqlVariant() [3/7]

template<std::size_t N, typename T = char, SqlFixedStringMode Mode>
constexpr LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( SqlFixedString< N, T, Mode > const &  other)
inlineconstexpr

Construct a new SqlVariant from a SqlFixedString.

Definition at line 104 of file SqlVariant.hpp.

◆ SqlVariant() [4/7]

template<std::size_t TextSize>
constexpr LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( char const (&)  text[TextSize])
inlineconstexpr

Copy constructor of a SqlVariant from a char array.

Definition at line 111 of file SqlVariant.hpp.

◆ SqlVariant() [5/7]

template<std::size_t TextSize>
constexpr LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( char16_t const (&)  text[TextSize])
inlineconstexpr

Copy constructor of a SqlVariant from a char16_t array.

Definition at line 118 of file SqlVariant.hpp.

◆ SqlVariant() [6/7]

template<typename T >
LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( std::optional< T > const &  other)
inline

Copy constructor of a SqlVariant from an optional of one of the supported types.

Definition at line 125 of file SqlVariant.hpp.

◆ SqlVariant() [7/7]

template<detail::HasSqlViewHelper StringViewLike>
LIGHTWEIGHT_FORCE_INLINE Lightweight::SqlVariant::SqlVariant ( StringViewLike const *  newValue)
inlineexplicit

Construct from an string-like object that implements an SqlViewHelper<>.

Definition at line 146 of file SqlVariant.hpp.

Member Function Documentation

◆ operator=() [1/3]

LIGHTWEIGHT_FORCE_INLINE SqlVariant & Lightweight::SqlVariant::operator= ( InnerType const &  other)
inline

Assignment operator of a SqlVariant from one of the supported types.

Definition at line 131 of file SqlVariant.hpp.

References value.

◆ operator=() [2/3]

LIGHTWEIGHT_FORCE_INLINE SqlVariant & Lightweight::SqlVariant::operator= ( InnerType &&  other)
inlinenoexcept

Assignment operator of a SqlVariant from one of the supported types.

Definition at line 138 of file SqlVariant.hpp.

References value.

◆ operator=() [3/3]

template<detail::HasSqlViewHelper StringViewLike>
LIGHTWEIGHT_FORCE_INLINE SqlVariant & Lightweight::SqlVariant::operator= ( StringViewLike const *  newValue)
inlinenoexcept

Assign from an string-like object that implements an SqlViewHelper<>.

Definition at line 153 of file SqlVariant.hpp.

References value.

◆ IsNull()

LIGHTWEIGHT_FORCE_INLINE bool Lightweight::SqlVariant::IsNull ( ) const
inlinenoexcept

Check if the value is NULL.

Definition at line 160 of file SqlVariant.hpp.

References value.

Referenced by Get(), TryGetBinary(), TryGetDate(), TryGetDateTime(), TryGetGuid(), TryGetNumeric(), TryGetStringView(), TryGetTime(), TryGetUtf16StringView(), and ValueOr().

◆ Is()

template<typename T >
LIGHTWEIGHT_FORCE_INLINE bool Lightweight::SqlVariant::Is ( ) const
inlinenoexcept

Check if the value is of the specified type.

Definition at line 167 of file SqlVariant.hpp.

References value.

◆ Get()

template<typename T >
LIGHTWEIGHT_FORCE_INLINE decltype(auto) Lightweight::SqlVariant::Get ( )
inlinenoexcept

Retrieve the value as the specified type.

Note
A DECIMAL/NUMERIC column fills the SqlDynamicNumeric alternative and a binary column fills SqlBinary. Asking for a floating-point or std::string T converts from those and therefore yields a value rather than a reference. Use TryGetNumeric when the exact decimal matters.

Definition at line 179 of file SqlVariant.hpp.

References IsNull(), and value.

◆ ValueOr()

template<typename T >
LIGHTWEIGHT_FORCE_INLINE T Lightweight::SqlVariant::ValueOr ( T &&  defaultValue) const
inlinenoexcept

Retrieve the value as the specified type, or return the default value if the value is NULL.

Note
A DECIMAL/NUMERIC column fills the SqlDynamicNumeric alternative and a binary column fills SqlBinary. Both are converted here when a floating-point or string T is asked for, so callers written against the arithmetic/string alternatives keep working. Reach for TryGetNumeric when the exact decimal matters.

Definition at line 213 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetBool()

LIGHTWEIGHT_FORCE_INLINE std::optional< bool > Lightweight::SqlVariant::TryGetBool ( ) const
inlinenoexcept

Retrieve the bool from the variant or std::nullopt.

Definition at line 245 of file SqlVariant.hpp.

◆ TryGetInt8()

LIGHTWEIGHT_FORCE_INLINE std::optional< int8_t > Lightweight::SqlVariant::TryGetInt8 ( ) const
inlinenoexcept

Retrieve the int8_t from the variant or std::nullopt.

Definition at line 247 of file SqlVariant.hpp.

◆ TryGetShort()

LIGHTWEIGHT_FORCE_INLINE std::optional< short > Lightweight::SqlVariant::TryGetShort ( ) const
inlinenoexcept

Retrieve the unsigned short from the variant or std::nullopt.

Definition at line 249 of file SqlVariant.hpp.

◆ TryGetUShort()

LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned short > Lightweight::SqlVariant::TryGetUShort ( ) const
inlinenoexcept

Retrieve the unsigned short from the variant or std::nullopt.

Definition at line 251 of file SqlVariant.hpp.

◆ TryGetInt()

LIGHTWEIGHT_FORCE_INLINE std::optional< int > Lightweight::SqlVariant::TryGetInt ( ) const
inlinenoexcept

Retrieve the int from the variant or std::nullopt.

Definition at line 253 of file SqlVariant.hpp.

◆ TryGetUInt()

LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned int > Lightweight::SqlVariant::TryGetUInt ( ) const
inlinenoexcept

Retrieve the unsigned int from the variant or std::nullopt.

Definition at line 255 of file SqlVariant.hpp.

◆ TryGetLongLong()

LIGHTWEIGHT_FORCE_INLINE std::optional< long long > Lightweight::SqlVariant::TryGetLongLong ( ) const
inlinenoexcept

Retrieve the long long from the variant or std::nullopt.

Definition at line 257 of file SqlVariant.hpp.

◆ TryGetULongLong()

LIGHTWEIGHT_FORCE_INLINE std::optional< unsigned long long > Lightweight::SqlVariant::TryGetULongLong ( ) const
inlinenoexcept

Retrieve the unsigned long long from the variant or std::nullopt.

Definition at line 259 of file SqlVariant.hpp.

◆ TryGetStringView()

std::optional< std::string_view > Lightweight::SqlVariant::TryGetStringView ( ) const
inlinenoexcept

Retrieves a string view from the variant, or std::nullopt if the variant is NULL or holds a non-string alternative. The function is noexcept, so it must not propagate bad_variant_access.

Definition at line 292 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetUtf16StringView()

std::optional< std::u16string_view > Lightweight::SqlVariant::TryGetUtf16StringView ( ) const
inlinenoexcept

Retrieves a UTF-16 string view from the variant, or std::nullopt if the variant is NULL or holds a non-string alternative. The function is noexcept, so it must not propagate bad_variant_access.

Definition at line 314 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetDate()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDate > Lightweight::SqlVariant::TryGetDate ( ) const
inline

function to get SqlDate from SqlVariant or std::nullopt

Definition at line 330 of file SqlVariant.hpp.

References IsNull(), and value.

◆ operator==()

bool Lightweight::SqlVariant::operator== ( SqlVariant const &  other) const
inlinenoexcept

Equality comparison operator.

Definition at line 349 of file SqlVariant.hpp.

References ToString().

◆ operator!=()

bool Lightweight::SqlVariant::operator!= ( SqlVariant const &  other) const
inlinenoexcept

Inequality comparison operator.

Definition at line 355 of file SqlVariant.hpp.

◆ TryGetTime()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlTime > Lightweight::SqlVariant::TryGetTime ( ) const
inline

function to get SqlTime from SqlVariant or std::nullopt

Definition at line 361 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetDateTime()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDateTime > Lightweight::SqlVariant::TryGetDateTime ( ) const
inline

function to get SqlDateTime from SqlVariant or std::nullopt

Definition at line 381 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetGuid()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlGuid > Lightweight::SqlVariant::TryGetGuid ( ) const
inline

Retrieve the GUID from the variant or std::nullopt if the value is NULL.

Definition at line 393 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetNumeric()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlDynamicNumeric > Lightweight::SqlVariant::TryGetNumeric ( ) const
inline

Retrieve the exact fixed-point decimal from the variant, or std::nullopt if NULL.

DECIMAL and NUMERIC columns land on this alternative, keeping every digit the column declares. Use SqlDynamicNumeric::ToDouble only where an approximation is acceptable.

Exceptions
std::bad_variant_accessThe value is neither NULL nor a fixed-point decimal.

Definition at line 410 of file SqlVariant.hpp.

References IsNull(), and value.

◆ TryGetBinary()

LIGHTWEIGHT_FORCE_INLINE std::optional< SqlBinary > Lightweight::SqlVariant::TryGetBinary ( ) const
inline

Retrieve the binary payload from the variant, or std::nullopt if the value is NULL.

BINARY, VARBINARY and LONGVARBINARY columns land on this alternative, which keeps the bytes distinguishable from text so they bind back as SQL_C_BINARY.

Exceptions
std::bad_variant_accessThe value is neither NULL nor binary.

Definition at line 427 of file SqlVariant.hpp.

References IsNull(), and value.

Member Data Documentation

◆ value


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