mirror of
https://github.com/postgres/postgres.git
synced 2025-10-24 01:29:19 +03:00
Split tuptoaster.c into three separate files.
detoast.c/h contain functions required to detoast a datum, partially or completely, plus a few other utility functions for examining the size of toasted datums. toast_internals.c/h contain functions that are used internally to the TOAST subsystem but which (mostly) do not need to be accessed from outside. heaptoast.c/h contains code that is intrinsically specific to the heap AM, either because it operates on HeapTuples or is based on the layout of a heap page. detoast.c and toast_internals.c are placed in src/backend/access/common rather than src/backend/access/heap. At present, both files still have dependencies on the heap, but that will be improved in a future commit. Patch by me, reviewed and tested by Prabhat Sabu, Thomas Munro, Andres Freund, and Álvaro Herrera. Discussion: http://postgr.es/m/CA+TgmoZv-=2iWM4jcw5ZhJeL18HF96+W1yJeYrnGMYdkFFnEpQ@mail.gmail.com
This commit is contained in:
54
src/include/access/toast_internals.h
Normal file
54
src/include/access/toast_internals.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* toast_internals.h
|
||||
* Internal definitions for the TOAST system.
|
||||
*
|
||||
* Copyright (c) 2000-2019, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/include/access/toast_internals.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef TOAST_INTERNALS_H
|
||||
#define TOAST_INTERNALS_H
|
||||
|
||||
#include "storage/lockdefs.h"
|
||||
#include "utils/relcache.h"
|
||||
#include "utils/snapshot.h"
|
||||
|
||||
/*
|
||||
* The information at the start of the compressed toast data.
|
||||
*/
|
||||
typedef struct toast_compress_header
|
||||
{
|
||||
int32 vl_len_; /* varlena header (do not touch directly!) */
|
||||
int32 rawsize;
|
||||
} toast_compress_header;
|
||||
|
||||
/*
|
||||
* Utilities for manipulation of header information for compressed
|
||||
* toast entries.
|
||||
*/
|
||||
#define TOAST_COMPRESS_HDRSZ ((int32) sizeof(toast_compress_header))
|
||||
#define TOAST_COMPRESS_RAWSIZE(ptr) (((toast_compress_header *) (ptr))->rawsize)
|
||||
#define TOAST_COMPRESS_RAWDATA(ptr) \
|
||||
(((char *) (ptr)) + TOAST_COMPRESS_HDRSZ)
|
||||
#define TOAST_COMPRESS_SET_RAWSIZE(ptr, len) \
|
||||
(((toast_compress_header *) (ptr))->rawsize = (len))
|
||||
|
||||
extern Datum toast_compress_datum(Datum value);
|
||||
extern Oid toast_get_valid_index(Oid toastoid, LOCKMODE lock);
|
||||
|
||||
extern void toast_delete_datum(Relation rel, Datum value, bool is_speculative);
|
||||
extern Datum toast_save_datum(Relation rel, Datum value,
|
||||
struct varlena *oldexternal, int options);
|
||||
|
||||
extern int toast_open_indexes(Relation toastrel,
|
||||
LOCKMODE lock,
|
||||
Relation **toastidxs,
|
||||
int *num_indexes);
|
||||
extern void toast_close_indexes(Relation *toastidxs, int num_indexes,
|
||||
LOCKMODE lock);
|
||||
extern void init_toast_snapshot(Snapshot toast_snapshot);
|
||||
|
||||
#endif /* TOAST_INTERNALS_H */
|
||||
Reference in New Issue
Block a user