6#include "SqlNullValue.hpp"
12struct SqlDataBinder<std::optional<T>>
14 using OptionalValue = std::optional<T>;
16 static constexpr auto ColumnType = SqlDataBinder<T>::ColumnType;
18 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
20 OptionalValue
const& value,
23 if (value.has_value())
24 return SqlDataBinder<T>::InputParameter(stmt, column, *value, cb);
26 return SqlDataBinder<SqlNullType>::InputParameter(stmt, column,
SqlNullValue, cb);
29 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN OutputColumn(
30 SQLHSTMT stmt, SQLUSMALLINT column, OptionalValue* result, SQLLEN* indicator,
SqlDataBinderCallback& cb)
noexcept
35 auto const sqlReturn = SqlDataBinder<T>::OutputColumn(stmt, column, &result->emplace(), indicator, cb);
36 cb.PlanPostProcessOutputColumn([result, indicator]() {
37 if (indicator && *indicator == SQL_NULL_DATA)
38 *result = std::nullopt;
43 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN GetColumn(SQLHSTMT stmt,
45 OptionalValue* result,
49 auto const sqlReturn = SqlDataBinder<T>::GetColumn(stmt, column, &result->emplace(), indicator, cb);
50 if (indicator && *indicator == SQL_NULL_DATA)
51 *result = std::nullopt;
55 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(OptionalValue
const& value)
noexcept
60 return std::string(SqlDataBinder<T>::Inspect(*value));
constexpr auto SqlNullValue