21 bool operator==(
const oid &rhs)
const {
return oid_ == rhs.oid_; }
22 bool operator!=(
const oid &rhs)
const {
return !(rhs == *
this); }
24 bool operator==(const ::Oid &rhs)
const {
return oid_ == rhs; }
25 bool operator!=(const ::Oid &rhs)
const {
return oid_ != rhs; }
27 operator ::Oid()
const {
return oid_; }
28 operator ::Oid &() {
return oid_; }
33static_assert(
sizeof(::Oid) ==
sizeof(
oid));
38 operator const ::Datum &()
const {
return _datum; }
40 operator Pointer()
const {
return reinterpret_cast<Pointer
>(_datum); }
42 datum() : _datum(0) {}
45 bool operator==(
const datum &other)
const {
return _datum == other._datum; }
53 const char *what()
const noexcept override {
return "passed datum is null"; }
58 bool is_null()
const noexcept {
return _ndatum.isnull; }
60 operator struct datum &() {
67 operator const ::Datum &() {
71 return _datum.operator const ::Datum &();
74 operator const struct datum &()
const {
85 explicit nullable_datum(::Datum d) : _ndatum({.value = d, .isnull =
false}) {}
90 return other.is_null();
92 if (other.is_null()) {
95 return _datum.operator==(other._datum);
100 ::NullableDatum _ndatum;
119 std::optional<memory_context> context = std::nullopt) =
delete;
128 std::optional<memory_context> context = std::nullopt) =
delete;
145 std::optional<memory_context> context = std::nullopt) {
147 throw std::runtime_error(cppgres::fmt::format(
"datum is null and can't be coerced into {}",
148 utils::type_name<T>()));
169 std::optional<memory_context> context = std::nullopt) {
173template <
typename T> nullable_datum into_nullable_datum(
const std::optional<T> &v) {
177 return nullable_datum();
181template <
typename T> nullable_datum into_nullable_datum(
const T &v) {
182 if constexpr (std::same_as<nullable_datum, T>) {
191 cppgres::from_nullable_datum<T>(std::declval<nullable_datum>(), std::declval<oid>(),
192 std::declval<std::optional<memory_context>>())
193 } -> std::same_as<T>;
198 { cppgres::into_nullable_datum(std::declval<T>()) } -> std::same_as<nullable_datum>;
203 static constexpr std::size_t N = utils::tuple_size_v<T>;
205 template <std::size_t... I>
static constexpr bool impl(std::index_sequence<I...>) {
212 static constexpr bool value = impl(std::make_index_sequence<N>{});
Definition: datum.hpp:160
Definition: datum.hpp:189
Definition: datum.hpp:155
Definition: datum.hpp:197
Definition: datum.hpp:201
A trait to convert from and into a cppgres::datum.
Definition: datum.hpp:110
static T from_datum(const datum &, const oid, std::optional< memory_context > context=std::nullopt)=delete
Convert from a datum.
static T from_nullable_datum(const nullable_datum &d, const oid oid, std::optional< memory_context > context=std::nullopt)=delete
Convert from a nullable datum.
static datum into_datum(const T &d)=delete
Convert datum into a type.
Definition: datum.hpp:137
static R from_nullable_datum(const nullable_datum &d, const oid oid, std::optional< memory_context > context=std::nullopt)
Convert from a nullable datum.
Definition: datum.hpp:144
Definition: datum.hpp:164