26 void *result,
Size allocated_size);
189 int ndims =
oldeah->ndims;
190 int dvalueslen =
oldeah->dvalueslen;
196 eah->lbound =
eah->dims + ndims;
202 eah->element_type =
oldeah->element_type;
209 dvalueslen *
sizeof(
Datum));
214 dvalueslen *
sizeof(
bool));
219 eah->dvalueslen = dvalueslen;
251 return eah->flat_size;
258 nelems =
eah->nelems;
261 dvalues =
eah->dvalues;
262 dnulls =
eah->dnulls;
264 for (
i = 0;
i < nelems;
i++)
266 if (dnulls && dnulls[
i])
274 errmsg(
"array size exceeds the maximum allowed (%zu)",
284 eah->flat_size = nbytes;
294 void *result,
Size allocated_size)
308 memcpy(result,
eah->fvalue, allocated_size);
313 Assert(allocated_size ==
eah->flat_size);
316 nelems =
eah->nelems;
329 aresult->dataoffset = dataoffset;
335 eah->dvalues,
eah->dnulls, nelems,
336 eah->typlen,
eah->typbyval,
eah->typalign,
436 eah->typlen,
eah->typbyval,
eah->typalign,
448 eah->dvalues = dvalues;
449 eah->dnulls = dnulls;
450 eah->dvalueslen =
eah->nelems = nelems;
#define DatumGetArrayTypePCopy(X)
#define ARR_OVERHEAD_WITHNULLS(ndims, nitems)
#define ARR_OVERHEAD_NONULLS(ndims)
static void copy_byval_expanded_array(ExpandedArrayHeader *eah, ExpandedArrayHeader *oldeah)
ExpandedArrayHeader * DatumGetExpandedArrayX(Datum d, ArrayMetaState *metacache)
Datum expand_array(Datum arraydatum, MemoryContext parentcontext, ArrayMetaState *metacache)
void deconstruct_expanded_array(ExpandedArrayHeader *eah)
static Size EA_get_flat_size(ExpandedObjectHeader *eohptr)
ExpandedArrayHeader * DatumGetExpandedArray(Datum d)
AnyArrayType * DatumGetAnyArrayP(Datum d)
static void EA_flatten_into(ExpandedObjectHeader *eohptr, void *result, Size allocated_size)
static const ExpandedObjectMethods EA_methods
void deconstruct_array(const ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
void CopyArrayEls(ArrayType *array, const Datum *values, const bool *nulls, int nitems, int typlen, bool typbyval, char typalign, bool freedata)
int ArrayGetNItems(int ndim, const int *dims)
#define Assert(condition)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
ExpandedObjectHeader * DatumGetEOHP(Datum d)
void EOH_init_header(ExpandedObjectHeader *eohptr, const ExpandedObjectMethods *methods, MemoryContext obj_context)
static Datum EOHPGetRWDatum(const struct ExpandedObjectHeader *eohptr)
#define PG_DETOAST_DATUM(datum)
void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval, char *typalign)
void * MemoryContextAlloc(MemoryContext context, Size size)
MemoryContext CurrentMemoryContext
#define AllocSetContextCreate
#define ALLOCSET_START_SMALL_SIZES
#define AllocSizeIsValid(size)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
static Pointer DatumGetPointer(Datum X)
#define att_align_nominal(cur_offset, attalign)
#define att_addlength_datum(cur_offset, attlen, attdatum)
static bool VARATT_IS_EXTERNAL_EXPANDED_RW(const void *PTR)
static bool VARATT_IS_EXTERNAL_EXPANDED(const void *PTR)
static void SET_VARSIZE(void *PTR, Size len)