3#include "../SqlColumnTypeDefinitions.hpp"
4#include "BasicStringBinder.hpp"
20 using std::vector<uint8_t>::vector;
22 constexpr auto operator<=>(
SqlBinary const&)
const noexcept =
default;
27 mutable SQLLEN _indicator = 0;
33 static constexpr auto ColumnType = SqlColumnTypeDefinitions::Binary { 255 };
35 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
40 value._indicator =
static_cast<SQLLEN
>(value.size());
41 return SQLBindParameter(stmt,
48 (SQLPOINTER) value.data(),
53 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN OutputColumn(
59 cb.PlanPostProcessOutputColumn([stmt, column, result, indicator]() {
60 if (*indicator == SQL_NULL_DATA)
63 else if (*indicator == SQL_NO_TOTAL)
65 result->resize(result->size() - 1);
66 else if (std::cmp_less_equal(*indicator,
static_cast<SQLLEN
>(result->size())))
67 result->resize(*indicator);
73 auto const totalCharsRequired = *indicator;
74 result->resize(totalCharsRequired + 1);
75 auto const sqlResult =
76 SQLGetData(stmt, column, SQL_C_BINARY, (SQLPOINTER) result->data(), totalCharsRequired + 1, indicator);
78 assert(SQL_SUCCEEDED(sqlResult));
79 assert(*indicator == totalCharsRequired);
80 result->resize(totalCharsRequired);
84 return SQLBindCol(stmt, column, SQL_C_BINARY, (SQLPOINTER) result->data(), 255, indicator);
87 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN GetColumn(SQLHSTMT stmt,
96 return detail::GetArrayData<SQL_C_BINARY>(stmt, column, result, indicator);
99 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(
SqlBinary const& value)
101 return std::format(
"SqlBinary(size={})", value.size());
Represents a binary data type.