215 elog(
ERROR,
"invalid sliceoffset: %d", sliceoffset);
224 slicelength = slicelimit = -1;
277 sliceoffset, slicelength);
291 struct varlena *tmp = preslice;
316 if (sliceoffset >= attrsize)
321 else if (slicelength < 0 || slicelimit > attrsize)
322 slicelength = attrsize - sliceoffset;
327 memcpy(
VARDATA(result), attrdata + sliceoffset, slicelength);
329 if (preslice != attr)
351 elog(
ERROR,
"toast_fetch_datum shouldn't be called for non-ondisk datums");
376 attrsize, 0, attrsize, result);
405 elog(
ERROR,
"toast_fetch_datum_slice shouldn't be called for non-ondisk datums");
419 if (sliceoffset >= attrsize)
431 slicelength = slicelength +
sizeof(
int32);
438 if (((sliceoffset + slicelength) > attrsize) || slicelength < 0)
439 slicelength = attrsize - sliceoffset;
448 if (slicelength == 0)
456 attrsize, sliceoffset, slicelength,
489 elog(
ERROR,
"invalid compression method id %d", cmid);
532 elog(
ERROR,
"invalid compression method id %d", cmid);
static struct varlena * toast_decompress_datum_slice(struct varlena *attr, int32 slicelength)
Size toast_datum_size(Datum value)
static struct varlena * toast_fetch_datum(struct varlena *attr)
struct varlena * detoast_attr(struct varlena *attr)
static struct varlena * toast_fetch_datum_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
Size toast_raw_datum_size(Datum value)
struct varlena * detoast_external_attr(struct varlena *attr)
static struct varlena * toast_decompress_datum(struct varlena *attr)
struct varlena * detoast_attr_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
#define VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr)
ExpandedObjectHeader * DatumGetEOHP(Datum d)
void EOH_flatten_into(ExpandedObjectHeader *eohptr, void *result, Size allocated_size)
Size EOH_get_flat_size(ExpandedObjectHeader *eohptr)
Assert(PointerIsAligned(start, uint64))
static bool pg_add_s32_overflow(int32 a, int32 b, int32 *result)
void pfree(void *pointer)
int32 pglz_maximum_compressed_size(int32 rawsize, int32 total_compressed_size)
static Datum PointerGetDatum(const void *X)
static Pointer DatumGetPointer(Datum X)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
static void table_relation_fetch_toast_slice(Relation toastrel, Oid valueid, int32 attrsize, int32 sliceoffset, int32 slicelength, struct varlena *result)
struct varlena * pglz_decompress_datum(const struct varlena *value)
struct varlena * pglz_decompress_datum_slice(const struct varlena *value, int32 slicelength)
struct varlena * lz4_decompress_datum(const struct varlena *value)
struct varlena * lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength)
@ TOAST_LZ4_COMPRESSION_ID
@ TOAST_PGLZ_COMPRESSION_ID
#define TOAST_COMPRESS_EXTSIZE(ptr)
#define TOAST_COMPRESS_METHOD(ptr)
static bool VARATT_IS_SHORT(const void *PTR)
static Size VARDATA_COMPRESSED_GET_EXTSIZE(const void *PTR)
static void SET_VARSIZE_COMPRESSED(void *PTR, Size len)
static bool VARATT_IS_EXTERNAL_ONDISK(const void *PTR)
static Size VARATT_EXTERNAL_GET_EXTSIZE(struct varatt_external toast_pointer)
static Size VARSIZE_ANY(const void *PTR)
static bool VARATT_IS_EXTENDED(const void *PTR)
static bool VARATT_IS_EXTERNAL(const void *PTR)
static bool VARATT_IS_EXTERNAL_INDIRECT(const void *PTR)
static Size VARSIZE(const void *PTR)
static char * VARDATA(const void *PTR)
static bool VARATT_IS_COMPRESSED(const void *PTR)
static bool VARATT_IS_EXTERNAL_EXPANDED(const void *PTR)
static char * VARDATA_SHORT(const void *PTR)
static uint32 VARATT_EXTERNAL_GET_COMPRESS_METHOD(struct varatt_external toast_pointer)
static bool VARATT_EXTERNAL_IS_COMPRESSED(struct varatt_external toast_pointer)
static void SET_VARSIZE(void *PTR, Size len)
static Size VARSIZE_SHORT(const void *PTR)