5#include "../SqlColumnTypeDefinitions.hpp"
32 constexpr ~
SqlDate() noexcept = default;
35 [[nodiscard]] LIGHTWEIGHT_FORCE_INLINE constexpr std::chrono::year_month_day
value() const noexcept
43 return sqlValue.year == other.sqlValue.year &&
sqlValue.month == other.sqlValue.month
44 &&
sqlValue.day == other.sqlValue.day;
50 return !(*
this == other);
60 constexpr SqlDate(std::chrono::year year, std::chrono::month month, std::chrono::day day)
noexcept:
61 SqlDate(std::chrono::year_month_day { year, month, day })
66 [[nodiscard]]
static LIGHTWEIGHT_FORCE_INLINE
SqlDate Today() noexcept
68 return SqlDate { std::chrono::year_month_day {
69 std::chrono::floor<std::chrono::days>(std::chrono::system_clock::now()),
74 static LIGHTWEIGHT_FORCE_INLINE
constexpr SQL_DATE_STRUCT
ConvertToSqlValue(std::chrono::year_month_day
value)
noexcept
76 return SQL_DATE_STRUCT {
77 .year = (SQLSMALLINT) (
int)
value.year(),
78 .month = (SQLUSMALLINT) (
unsigned)
value.month(),
79 .day = (SQLUSMALLINT) (
unsigned)
value.day(),
84 static LIGHTWEIGHT_FORCE_INLINE
constexpr std::chrono::year_month_day
ConvertToNative(
85 SQL_DATE_STRUCT
const&
value)
noexcept
87 return std::chrono::year_month_day { std::chrono::year {
value.year },
88 std::chrono::month {
static_cast<unsigned>(
value.month) },
89 std::chrono::day {
static_cast<unsigned>(
value.day) } };
96struct std::formatter<Lightweight::SqlDate>: std::formatter<std::string>
98 auto format(
Lightweight::SqlDate const& value, std::format_context& ctx)
const -> std::format_context::iterator
100 return std::formatter<std::string>::format(
101 std::format(
"{:04}-{:02}-{:02}", value.sqlValue.year, value.sqlValue.month, value.sqlValue.day), ctx);
109struct SqlDataBinder<SqlDate>
111 static constexpr auto ColumnType = SqlColumnTypeDefinitions::Date {};
113 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
115 SqlDate
const& value,
116 SqlDataBinderCallback& )
noexcept
118 return SQLBindParameter(
119 stmt, column, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0, (SQLPOINTER) &value.sqlValue, 0,
nullptr);
122 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN OutputColumn(
123 SQLHSTMT stmt, SQLUSMALLINT column, SqlDate* result, SQLLEN* indicator, SqlDataBinderCallback& )
noexcept
125 return SQLBindCol(stmt, column, SQL_C_TYPE_DATE, &result->sqlValue,
sizeof(result->sqlValue), indicator);
128 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN GetColumn(
129 SQLHSTMT stmt, SQLUSMALLINT column, SqlDate* result, SQLLEN* indicator, SqlDataBinderCallback
const& )
noexcept
131 return SQLGetData(stmt, column, SQL_C_TYPE_DATE, &result->sqlValue,
sizeof(result->sqlValue), indicator);
134 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(SqlDate
const& value)
noexcept
136 return std::format(
"{}", value);
constexpr SqlDate(std::chrono::year_month_day value) noexcept
Constructs a date from individual std::chrono::year_month_day.
LIGHTWEIGHT_FORCE_INLINE constexpr std::chrono::year_month_day value() const noexcept
Returns the current date.
static LIGHTWEIGHT_FORCE_INLINE SqlDate Today() noexcept
Returns the current date.
constexpr SqlDate(std::chrono::year year, std::chrono::month month, std::chrono::day day) noexcept
Constructs a date from individual components.
LIGHTWEIGHT_FORCE_INLINE constexpr bool operator==(SqlDate const &other) const noexcept
Equality comparison operator.
constexpr SqlDate() noexcept=default
Default constructor.
SQL_DATE_STRUCT sqlValue
Holds the underlying SQL date structure.
static LIGHTWEIGHT_FORCE_INLINE constexpr SQL_DATE_STRUCT ConvertToSqlValue(std::chrono::year_month_day value) noexcept
Converts a std::chrono::year_month_day to the underlying SQL date structure.
static LIGHTWEIGHT_FORCE_INLINE constexpr std::chrono::year_month_day ConvertToNative(SQL_DATE_STRUCT const &value) noexcept
Converts a SQL date structure to std::chrono::year_month_day.
LIGHTWEIGHT_FORCE_INLINE constexpr bool operator!=(SqlDate const &other) const noexcept
Inequality comparison operator.