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;
150 std::optional<memory_context> context = std::nullopt) {
152 throw std::runtime_error(cppgres::fmt::format(
"datum is null and can't be coerced into {}",
153 utils::type_name<T>()));
181 std::optional<memory_context> context = std::nullopt) {
185template <
typename T> nullable_datum into_nullable_datum(
const std::optional<T> &v) {
189 return nullable_datum();
193template <
typename T> nullable_datum into_nullable_datum(
const T &v) {
194 if constexpr (std::same_as<nullable_datum, T>) {
203 cppgres::from_nullable_datum<T>(std::declval<nullable_datum>(), std::declval<oid>(),
204 std::declval<std::optional<memory_context>>())
205 } -> std::same_as<T>;
210 { cppgres::into_nullable_datum(std::declval<T>()) } -> std::same_as<nullable_datum>;
215 static constexpr std::size_t N = utils::tuple_size_v<T>;
217 template <std::size_t... I>
static constexpr bool impl(std::index_sequence<I...>) {
224 static constexpr bool value = impl(std::make_index_sequence<N>{});
Definition: datum.hpp:172
Definition: datum.hpp:201
Definition: datum.hpp:167
Definition: datum.hpp:209
Definition: datum.hpp:213
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.
static nullable_datum into_nullable_datum(const T &d)=delete
Convert into a nullable datum.
Definition: datum.hpp:142
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:149
static nullable_datum into_nullable_datum(const T &d)
Convert into a nullable datum.
Definition: datum.hpp:161
Definition: datum.hpp:176