6#include "SqlNullValue.hpp"
15struct SqlDataBinder<std::optional<T>>
17 using OptionalValue = std::optional<T>;
19 static constexpr auto ColumnType = SqlDataBinder<T>::ColumnType;
21 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
23 OptionalValue
const& value,
24 SqlDataBinderCallback& cb)
noexcept
26 if (value.has_value())
27 return SqlDataBinder<T>::InputParameter(stmt, column, *value, cb);
29 return SqlDataBinder<SqlNullType>::InputParameter(stmt, column,
SqlNullValue, cb);
32 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN OutputColumn(
33 SQLHSTMT stmt, SQLUSMALLINT column, OptionalValue* result, SQLLEN* indicator, SqlDataBinderCallback& cb)
noexcept
38 auto const sqlReturn = SqlDataBinder<T>::OutputColumn(stmt, column, &result->emplace(), indicator, cb);
39 cb.PlanPostProcessOutputColumn([result, indicator]() {
40 if (indicator && *indicator == SQL_NULL_DATA)
41 *result = std::nullopt;
46 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN GetColumn(SQLHSTMT stmt,
48 OptionalValue* result,
50 SqlDataBinderCallback
const& cb)
noexcept
52 auto const sqlReturn = SqlDataBinder<T>::GetColumn(stmt, column, &result->emplace(), indicator, cb);
53 if (indicator && *indicator == SQL_NULL_DATA)
54 *result = std::nullopt;
58 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(OptionalValue
const& value)
noexcept
63 return std::string(SqlDataBinder<T>::Inspect(*value));
constexpr auto SqlNullValue