Go to the documentation of this file.
   34 namespace datum_impl {
 
   37 static_assert(
sizeof(
DatumRep) == 8, 
"Pointers are not 64-bit.");
 
   61 template<
class DatumImpl>
 
   70         return (
const char*) &
val();
 
   78         return ((
bool) ((
val()) != 0));
 
   86         return ((
char) (
val()));
 
   94         return ((int8_t) (
val()));
 
  102         return ((uint8_t) (
val()));
 
  110         return ((int16_t) (
val()));
 
  118         return ((uint16_t) (
val()));
 
  126         return ((int32_t) (
val()));
 
  134         return ((uint32_t) (
val()));
 
  150         return (int64_t) 
val();
 
  158         return (uint64_t) 
val();
 
  182         return ((
void*) (
val()));
 
  191         return reinterpret_cast<T* const
>(
val());
 
  197         return static_cast<const DatumImpl&
>(*this).m_val;
 
  201 template<
class DatumImpl>
 
  263         memcpy(
this, &d, 
sizeof(
Datum));
 
  269 #pragma GCC diagnostic push 
  270 #pragma GCC diagnostic ignored "-Wclass-memaccess" 
  272         memset(&d, 0, 
sizeof(
Datum));
 
  274 #pragma GCC diagnostic pop 
  284         memcpy(
this, &d,  
sizeof(
Datum));
 
  288 #pragma GCC diagnostic push 
  289 #pragma GCC diagnostic ignored "-Wclass-memaccess" 
  291         memset(&d, 0, 
sizeof(
Datum));
 
  293 #pragma GCC diagnostic pop 
  307     constexpr 
const char*
 
  309         return (
const char *) 
m_val;
 
  326     constexpr absl::string_view
 
  328         return absl::string_view((
const char *) 
m_val, 
m_size);
 
  334     constexpr 
const Datum&
 
  468         size_t len = std::strlen(str);
 
  469         if (len > std::numeric_limits<uint32_t>::max()) {
 
  470             LOG(
kFatal, 
"cstring is too long: %lu", len);
 
  505         size_t len = std::strlen(str.get());
 
  506         if (len > std::numeric_limits<uint32_t>::max()) {
 
  507             LOG(
kFatal, 
"cstring is too long: %lu", len);
 
  552         if (!bytes.get() || 
isnull) {
 
  600         LOG(
kError, 
"unexpected pass-by-value data length %u", size);
 
  628             memcpy(bytes_copy.get(), bytes, size);
 
  720     template<
class DatumImpl>
 
  722     template<
class DatumImpl>
 
  729 namespace datum_impl {
 
  731 template<
class DatumImpl>
 
  732 class DatumRefVarlenGetters: 
public NonVarlenGetters<DatumImpl> {
 
  738     constexpr 
const char*
 
  763     constexpr absl::string_view
 
  766             ->GetVarlenAsStringView();
 
  796         if (((DatumImpl&)(*
this)).isnull()) {
 
  876             LOG(
kFatal, 
"casting NULL datum to a DatumRef");
 
  914         uint32_t total_sz = 
MAXALIGN(n * 
sizeof(uint32_t));
 
  915         for (
size_t i = 0; i < n; ++i) {
 
  921         auto off = 
reinterpret_cast<uint32_t*
>(bytes.get());
 
  923         uint32_t cur_off = 
MAXALIGN(n * 
sizeof(uint32_t));
 
  924         auto payload = 
reinterpret_cast<char*
>(bytes.get());
 
  925         for (
size_t i = 0; i < n; ++i) {
 
  926             if (data[i].m_isvarlen) {
 
  927                 memcpy(payload + cur_off, (
const char*) data[i].m_val,
 
  929                 cur_off += 
MAXALIGN(data[i].m_size);
 
  930             } 
else if (!data[i].m_isnull) {
 
  936                 off[i + 1] = cur_off;
 
  937                 if (data[i].m_isvarlen) {
 
  942         ASSERT(cur_off == total_sz);
 
  949     template<
class SomeDatum>
 
  952         return *
reinterpret_cast<const uint32_t*
>(d.GetVarlenBytes())
 
  960     template<
class SomeDatum>
 
  967             off = 
MAXALIGN(n * 
sizeof(uint32_t));
 
  969             off = 
reinterpret_cast<const uint32_t*
>(d.GetVarlenBytes())[i]
 
  974             end_off = d.GetVarlenSize();
 
  976             end_off = 
reinterpret_cast<const uint32_t*
>(
 
  979         if (end_off == off) {
 
  984             reinterpret_cast<const uint32_t*
>(d.GetVarlenBytes())[i]) {
 
  
constexpr bool GetBool() const
Returns boolean value of a datum.
Definition: datum.h:77
 
static Datum FromVarlenAsStringView(absl::string_view bytes)
Returns datum representation of a variable-length object stored as an absl::string_view that is not o...
Definition: datum.h:563
 
Datum(Datum &&d)
Move constructor of Datum.
Definition: datum.h:262
 
static Datum FromFixedlenBytes(const char *bytes, uint32_t size)
Returns a fixed-length datum that is passed by value by copying its binary representation.
Definition: datum.h:586
 
constexpr uint16_t GetUInt16() const
Returns 16-bit unsigned integer value of a datum.
Definition: datum.h:117
 
static Datum From(char X)
Returns datum representation for a character.
Definition: datum.h:359
 
Datum DeepCopy() const
Returns a deep copy of this datum so that HasExternalRef() == false and the owned value is a copy of ...
Definition: datum.h:621
 
static Datum From(uint32_t X)
Returns datum representation for a 32-bit unsigned integer.
Definition: datum.h:410
 
A DatumRef object is a read-only reference to an C++ object of a supported runtime type.
Definition: datum.h:823
 
constexpr const char * GetVarlenBytes() const
Returns the variable-length value of a datum as an array of bytes.
Definition: datum.h:739
 
constexpr const Datum & GetThis() const
Returns a constant reference to ‘*this’.
Definition: datum.h:335
 
unique_malloced_ptr unique_aligned_alloc(size_t alignment, size_t size)
Wraps an aligned_alloced'd memory space in a std::unique_ptr.
Definition: tdb_base.h:101
 
static size_t GetArrayLength(SomeDatum &&d)
Returns the array length of the DataArray stored in d.
Definition: datum.h:951
 
DatumRef & operator=(const DatumRef &)=default
 
static Datum From(uint16_t X)
Returns datum representation for a 16-bit unsigned integer.
Definition: datum.h:391
 
constexpr const char * GetFixedlenBytes() const
Return the pointer to the binary representation of a fixed-length datum that is passed by value.
Definition: datum.h:69
 
constexpr int64_t GetInt64() const
Returns 64-bit integer value of a datum.
Definition: datum.h:149
 
static Datum From(float X)
Returns datum representation for a single-precision floating point number.
Definition: datum.h:446
 
DataArray is a plain byte array that can be stored as a Datum itself and stores the data of a few dat...
Definition: datum.h:903
 
float float_v
Definition: datum.h:47
 
bool m_isnull
Definition: datum.h:886
 
constexpr LogSeverity kError
Definition: logging.h:21
 
constexpr Datum & GetDatum() const
Returns a reference to the underlying datum if this references one with a variable-length value.
Definition: datum.h:777
 
static Datum From(bool X)
Returns datum representation for a boolean.
Definition: datum.h:351
 
constexpr bool isnull() const
Definition: datum.h:833
 
constexpr int32_t GetInt32() const
Returns 32-bit integer value of a datum.
Definition: datum.h:125
 
bool m_isvarlen
Whether the managed object is a variable-length object that is not a null-terminated string.
Definition: datum.h:707
 
constexpr const char * GetVarlenBytes() const
Returns the variable-length value of a datum as an array of bytes.
Definition: datum.h:308
 
DatumRef(datum_impl::DatumRep val)
Definition: datum.h:838
 
static Datum From(int8_t X)
Returns datum representation for an 8-bit integer.
Definition: datum.h:367
 
constexpr uint8_t GetUInt8() const
Returns 8-bit unsigned integer value of a datum.
Definition: datum.h:101
 
uint32_t m_size
The length of the variable-length value of the datum.
Definition: datum.h:713
 
constexpr const DatumRep & val() const
Definition: datum.h:196
 
NullableDatumRef(const Datum &d)
Definition: datum.h:863
 
Datum()
Constructs a Datum with a null value.
Definition: datum.h:652
 
static Datum FromVarlenBytes(unique_malloced_ptr bytes, uint32_t size, bool isnull=false)
Returns datum representation of a variable-length object that is owned by this datum.
Definition: datum.h:550
 
std::unique_ptr< void, AlignedAllocImpl::FreeMem > unique_malloced_ptr
Definition: tdb_base.h:94
 
constexpr double GetDouble() const
Returns double-precision floating point value of a datum.
Definition: datum.h:173
 
static Datum FromVarlenBytes(const char *bytes, uint32_t size)
Returns datum representation of a variable-length object that is not owned by this datum.
Definition: datum.h:517
 
datum_impl::DatumRep m_val
Definition: datum.h:841
 
static Datum From(uint8_t X)
Returns datum representation for an 8-bit unsigned integer.
Definition: datum.h:375
 
#define ASSERT(...)
Definition: tdb_base.h:190
 
constexpr T * GetPointerAs() const
Returns the pointer value of a datum as const T*.
Definition: datum.h:190
 
static Datum FromCString(std::unique_ptr< char[]> str, bool isnull=false)
Returns datum representation of a null-terminated string that is owned by this datum.
Definition: datum.h:502
 
Note from PostgreSQL: Float <-> Datum conversions.
Definition: datum.h:45
 
constexpr uint64_t GetUInt64() const
Returns 64-bit unsigned integer value of a datum.
Definition: datum.h:157
 
constexpr Oid GetOid() const
Returns object identifier value of a datum.
Definition: datum.h:141
 
bool m_isnull
Whether the value is null.
Definition: datum.h:701
 
constexpr LogSeverity kFatal
Definition: logging.h:22
 
static Datum From(int16_t X)
Returns datum representation for a 16-bit integer.
Definition: datum.h:383
 
constexpr char GetChar() const
Returns character value of a datum.
Definition: datum.h:85
 
static Datum FromVarlenBytes(const char *bytes, uint32_t size, bool isnull)
Returns datum representation of a variable-length object that is not owned by this datum if isnull is...
Definition: datum.h:527
 
Datum DeepCopy(bool isbyref) const
Returns a new Datum that is a deep copy of the underlying datum.
Definition: datum.h:795
 
static Datum From(const Datum *data, uint32_t n)
Makes a deep copy of the data and stores them in a data array.
Definition: datum.h:913
 
double double_v
Definition: datum.h:58
 
constexpr bool isnull() const
Definition: datum.h:300
 
bool HasExternalRef() const
Whether this datum is variable-length but does not own its byte array.
Definition: datum.h:612
 
bool m_isowned
Whether the managed object is owned by this Datum.
Definition: datum.h:696
 
constexpr int8_t GetInt8() const
Returns 8-bit integer value of a datum.
Definition: datum.h:93
 
NullableDatumRef & operator=(const NullableDatumRef &)=default
 
static Datum From(double X)
Returns datum representation for a double-precision floating point number.
Definition: datum.h:455
 
constexpr absl::string_view GetVarlenAsStringView() const
Definition: datum.h:327
 
DatumRef(const Datum &d)
Definition: datum.h:825
 
static Datum From(int32_t X)
Returns datum representation for a 32-bit integer.
Definition: datum.h:399
 
static Datum GetDatum(SomeDatum &&d, size_t i)
Returns the ith Datum of the DataArray stored in d.
Definition: datum.h:962
 
int64_t int64_v
Definition: datum.h:57
 
#define LOG(level,...)
LOG(LogSeverity level, const char *fmt, ...)
Definition: logging.h:116
 
uint32_t Oid
Definition: tdb_base.h:211
 
NullableDatumRef(const DatumRef &d)
Definition: datum.h:867
 
constexpr float GetFloat() const
Returns single-precision floating point value of a datum.
Definition: datum.h:165
 
constexpr absl::string_view GetVarlenAsStringView() const
Definition: datum.h:764
 
A Datum stores and possibly manage the memory resource of a read-only value of a plain fixed-length C...
Definition: datum.h:250
 
Datum & operator=(Datum &&d)
Move assignment operator of Datum.
Definition: datum.h:283
 
constexpr void * GetPointer() const
Returns pointer value of a datum.
Definition: datum.h:181
 
static Datum From(int64_t X)
Returns datum representation for a signed 64-bit integer.
Definition: datum.h:427
 
static Datum FromCString(const char *str)
Returns datum representation of a null-terminated string that is not owned by this datum.
Definition: datum.h:467
 
Datum(datum_impl::DatumRep value)
Definition: datum.h:659
 
Note from PostgreSQL: Float <-> Datum conversions.
Definition: datum.h:56
 
constexpr uint32_t GetVarlenSize() const
Returns the length of the variable-length value of a datum.
Definition: datum.h:748
 
#define MAXALIGN(LEN)
Definition: tdb_base.h:328
 
static Datum From(void *X)
Returns datum representation for a pointer.
Definition: datum.h:418
 
static Datum FromCString(const char *str, bool isnull)
Definition: datum.h:484
 
~Datum()
Definition: datum.h:252
 
datum_impl::DatumRep m_val
The actual value storage.
Definition: datum.h:718
 
Datum(datum_impl::DatumRep value, bool isowned, uint32_t size)
Constructs a Datum with a non-null and non-variable-length value (except for CString).
Definition: datum.h:677
 
static Datum From(T &&X, bool isnull)
This template version of From accepts a second argument isnull and returns a Datum with a null value ...
Definition: datum.h:577
 
constexpr static uint32_t VARLEN_MASK
Definition: datum.h:904
 
constexpr int16_t GetInt16() const
Returns 16-bit integer value of a datum.
Definition: datum.h:109
 
constexpr bool isnull() const
Definition: datum.h:881
 
constexpr uint32_t GetVarlenSize() const
Returns the size of the variable-length value of a datum.
Definition: datum.h:316
 
int32_t int32_v
Definition: datum.h:46
 
uintptr_t DatumRep
Definition: datum.h:36
 
static Datum From(uint64_t X)
Returns datum representation for an unsigned 64-bit integer.
Definition: datum.h:436
 
datum_impl::DatumRep m_val
Definition: datum.h:887
 
constexpr uint32_t GetUInt32() const
Returns 32-bit unsigned integer value of a datum.
Definition: datum.h:133
 
Datum Copy() const
Makes a shallow copy of this datum.
Definition: datum.h:640
 
static Datum FromNull()
Definition: datum.h:343