5#include "heap_tuple.hpp"
14 static constexpr ::SysCacheIdentifier cache_id = TYPEOID;
18 static constexpr ::SysCacheIdentifier cache_id = PROCOID;
24 { syscache_traits<T>::cache_id } -> std::same_as<const ::SysCacheIdentifier &>;
29 syscache(::SysCacheIdentifier cache_id,
const D &...key)
30 requires(
sizeof...(key) > 0 &&
sizeof...(key) < 5)
31 : cache_id(cache_id), tuple([&]() {
33 return ffi_guard{::SearchSysCache}(cache_id, keys[0], keys[1], keys[2], keys[3]);
35 if (!HeapTupleIsValid(tuple)) {
36 throw std::runtime_error(
"invalid tuple");
42 decltype(*std::declval<T>()) &
operator*() {
43 return *
reinterpret_cast<T
>(GETSTRUCT(tuple.operator HeapTuple()));
45 const decltype(*std::declval<T>()) &
operator*()
const {
46 return *
reinterpret_cast<T
>(GETSTRUCT(tuple.operator HeapTuple()));
56 template <convertible_from_datum V> std::optional<V>
get_attribute(
int attr) {
58 Datum ret =
ffi_guard{::SysCacheGetAttr}(cache_id, tuple, attr, &isnull);
65 operator const heap_tuple &()
const {
return tuple; }
68 ::SysCacheIdentifier cache_id;
Definition: datum.hpp:167
Definition: syscache.hpp:22
static datum into_datum(const T &d)=delete
Convert datum into a type.
Heap tuple convenience wrapper.
Definition: heap_tuple.hpp:11
Definition: syscache.hpp:11
Definition: syscache.hpp:27
std::optional< V > get_attribute(int attr)
Get an attribute by index.
Definition: syscache.hpp:56