18 oid() : oid_(InvalidOid) {}
23 bool operator==(
const oid &rhs)
const {
return oid_ == rhs.oid_; }
24 bool operator!=(
const oid &rhs)
const {
return !(rhs == *
this); }
26 bool operator==(const ::Oid &rhs)
const {
return oid_ == rhs; }
27 bool operator!=(const ::Oid &rhs)
const {
return oid_ != rhs; }
29 operator ::Oid()
const {
return oid_; }
30 operator ::Oid &() {
return oid_; }
32 bool is_valid()
const {
return oid_ != InvalidOid; }
37static_assert(
sizeof(::Oid) ==
sizeof(
oid));
42 operator const ::Datum &()
const {
return _datum; }
44 operator Pointer()
const {
return reinterpret_cast<Pointer
>(_datum); }
46 datum() : _datum(0) {}
49 bool operator==(
const datum &other)
const {
return _datum == other._datum; }
57 const char *what()
const noexcept override {
return "passed datum is null"; }
62 bool is_null()
const noexcept {
return _ndatum.isnull; }
64 operator struct datum &() {
71 operator const ::Datum &() {
75 return _datum.operator const ::Datum &();
78 operator const struct datum &()
const {
89 explicit nullable_datum(::Datum d) : _ndatum({.value = d, .isnull =
false}) {}
94 return other.is_null();
96 if (other.is_null()) {
99 return _datum.operator==(other._datum);
104 ::NullableDatum _ndatum;
123 std::optional<memory_context> context = std::nullopt) =
delete;
132 std::optional<memory_context> context = std::nullopt) =
delete;
154 std::optional<memory_context> context = std::nullopt) {
156 throw std::runtime_error(cppgres::fmt::format(
"datum is null and can't be coerced into {}",
157 utils::type_name<T>()));
185 std::optional<memory_context> context = std::nullopt) {
189template <
typename T> nullable_datum into_nullable_datum(
const std::optional<T> &v) {
193 return nullable_datum();
197template <
typename T> nullable_datum into_nullable_datum(
const T &v) {
198 if constexpr (std::same_as<nullable_datum, T>) {
207 cppgres::from_nullable_datum<T>(std::declval<nullable_datum>(), std::declval<oid>(),
208 std::declval<std::optional<memory_context>>())
209 } -> std::same_as<T>;
214 { cppgres::into_nullable_datum(std::declval<T>()) } -> std::same_as<nullable_datum>;
219 static constexpr std::size_t N = utils::tuple_size_v<T>;
221 template <std::size_t... I>
static constexpr bool impl(std::index_sequence<I...>) {
228 static constexpr bool value = impl(std::make_index_sequence<N>{});
Definition: datum.hpp:176
Definition: datum.hpp:205
Definition: datum.hpp:171
Definition: datum.hpp:213
Definition: datum.hpp:217
A trait to convert from and into a cppgres::datum.
Definition: datum.hpp:114
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:146
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:153
static nullable_datum into_nullable_datum(const T &d)
Convert into a nullable datum.
Definition: datum.hpp:165
Definition: datum.hpp:180