163    bool _modified { 
false };
 
  171struct IsAutoAssignPrimaryKeyField: std::false_type {};
 
  173template <
typename T, auto P>
 
  174struct IsAutoAssignPrimaryKeyField<Field<T, PrimaryKey::AutoAssign, P>>: std::true_type {};
 
  176template <
typename T, auto P>
 
  177struct IsAutoAssignPrimaryKeyField<Field<T, P, PrimaryKey::AutoAssign>>: std::true_type {};
 
  180struct IsAutoIncrementPrimaryKeyField: std::false_type {};
 
  182template <
typename T, auto P>
 
  183struct IsAutoIncrementPrimaryKeyField<Field<T, PrimaryKey::ServerSideAutoIncrement, P>>: std::true_type {};
 
  185template <
typename T, auto P>
 
  186struct IsAutoIncrementPrimaryKeyField<Field<T, P, PrimaryKey::ServerSideAutoIncrement>>: std::true_type {};
 
  189struct IsFieldType: std::false_type {};
 
  191template <
typename T, auto P1, auto P2>
 
  192struct IsFieldType<Field<T, P1, P2>>: std::true_type {};
 
  199constexpr bool IsPrimaryKey =
 
  200    detail::IsAutoAssignPrimaryKeyField<T>::value || detail::IsAutoIncrementPrimaryKeyField<T>::value;
 
  204constexpr bool IsAutoIncrementPrimaryKey = detail::IsAutoIncrementPrimaryKeyField<T>::value;
 
  207constexpr bool IsField = detail::IsFieldType<std::remove_cvref_t<T>>::value;
 
  209template <detail::FieldElementType T, auto P1, auto P2>
 
  210template <
typename... S>
 
  211    requires std::constructible_from<T, S...>
 
  212constexpr LIGHTWEIGHT_FORCE_INLINE Field<T, P1, P2>::Field(S&&... value) 
noexcept:
 
  213    _value(std::forward<S>(value)...)
 
  217template <detail::FieldElementType T, auto P1, auto P2>
 
  219    requires std::constructible_from<T, S> && (!std::same_as<std::remove_cvref_t<S>, Field<T, P1, P2>>)
 
  220constexpr LIGHTWEIGHT_FORCE_INLINE Field<T, P1, P2>& Field<T, P1, P2>::operator=(S&& value) 
noexcept 
  222    _value = std::forward<S>(value);
 
  227template <detail::FieldElementType T, auto P1, auto P2>
 
  230    return _value <=> other._value;
 
 
  233template <detail::FieldElementType T, auto P1, auto P2>
 
  235    requires std::convertible_to<S, T>
 
  238    return _value == value;
 
  241template <detail::FieldElementType T, auto P1, auto P2>
 
  243    requires std::convertible_to<S, T>
 
  246    return _value != value;
 
  249template <detail::FieldElementType T, auto P1, auto P2>
 
  252    if constexpr (std::is_same_v<T, std::string>)
 
  254        std::stringstream result;
 
  255        result << std::quoted(_value, 
'\'');
 
  258    else if constexpr (std::is_same_v<T, SqlText>)
 
  260        std::stringstream result;
 
  261        result << std::quoted(_value.value, 
'\'');
 
  264    else if constexpr (std::is_same_v<T, SqlDate>)
 
  265        return std::format(
"\'{}\'", _value.value);
 
  266    else if constexpr (std::is_same_v<T, SqlTime>)
 
  267        return std::format(
"\'{}\'", _value.value);
 
  268    else if constexpr (std::is_same_v<T, SqlDateTime>)
 
  269        return std::format(
"\'{}\'", _value.value());
 
  270    else if constexpr (SqlNumericType<T>)
 
  271        return std::format(
"{}", _value.ToString());
 
  272    else if constexpr (
requires { _value.has_value(); })
 
  274        if (_value.has_value())
 
  275            return std::format(
"{}", _value.value());
 
  280        return std::format(
"{}", _value);
 
 
  285template <detail::FieldElementType T, auto P1, auto P2>
 
  291template <detail::FieldElementType T, auto P1, auto P2>
 
  297template <detail::FieldElementType T, auto P1, auto P2>
 
  303template <detail::FieldElementType T, auto P1, auto P2>