89 lines
2.3 KiB
C
89 lines
2.3 KiB
C
|
/*
|
||
|
* brin_internal.h
|
||
|
* internal declarations for BRIN indexes
|
||
|
*
|
||
|
* Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
|
||
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||
|
*
|
||
|
* IDENTIFICATION
|
||
|
* src/include/access/brin_internal.h
|
||
|
*/
|
||
|
#ifndef BRIN_INTERNAL_H
|
||
|
#define BRIN_INTERNAL_H
|
||
|
|
||
|
#include "fmgr.h"
|
||
|
#include "storage/buf.h"
|
||
|
#include "storage/bufpage.h"
|
||
|
#include "storage/off.h"
|
||
|
#include "utils/relcache.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
* A BrinDesc is a struct designed to enable decoding a BRIN tuple from the
|
||
|
* on-disk format to an in-memory tuple and vice-versa.
|
||
|
*/
|
||
|
|
||
|
/* struct returned by "OpcInfo" amproc */
|
||
|
typedef struct BrinOpcInfo
|
||
|
{
|
||
|
/* Number of columns stored in an index column of this opclass */
|
||
|
uint16 oi_nstored;
|
||
|
|
||
|
/* Opaque pointer for the opclass' private use */
|
||
|
void *oi_opaque;
|
||
|
|
||
|
/* Type IDs of the stored columns */
|
||
|
Oid oi_typids[FLEXIBLE_ARRAY_MEMBER];
|
||
|
} BrinOpcInfo;
|
||
|
|
||
|
/* the size of a BrinOpcInfo for the given number of columns */
|
||
|
#define SizeofBrinOpcInfo(ncols) \
|
||
|
(offsetof(BrinOpcInfo, oi_typids) + sizeof(Oid) * ncols)
|
||
|
|
||
|
typedef struct BrinDesc
|
||
|
{
|
||
|
/* Containing memory context */
|
||
|
MemoryContext bd_context;
|
||
|
|
||
|
/* the index relation itself */
|
||
|
Relation bd_index;
|
||
|
|
||
|
/* tuple descriptor of the index relation */
|
||
|
TupleDesc bd_tupdesc;
|
||
|
|
||
|
/* cached copy for on-disk tuples; generated at first use */
|
||
|
TupleDesc bd_disktdesc;
|
||
|
|
||
|
/* total number of Datum entries that are stored on-disk for all columns */
|
||
|
int bd_totalstored;
|
||
|
|
||
|
/* per-column info; bd_tupdesc->natts entries long */
|
||
|
BrinOpcInfo *bd_info[FLEXIBLE_ARRAY_MEMBER];
|
||
|
} BrinDesc;
|
||
|
|
||
|
/*
|
||
|
* Globally-known function support numbers for BRIN indexes. Individual
|
||
|
* opclasses define their own function support numbers, which must not collide
|
||
|
* with the definitions here.
|
||
|
*/
|
||
|
#define BRIN_PROCNUM_OPCINFO 1
|
||
|
#define BRIN_PROCNUM_ADDVALUE 2
|
||
|
#define BRIN_PROCNUM_CONSISTENT 3
|
||
|
#define BRIN_PROCNUM_UNION 4
|
||
|
/* procedure numbers up to 10 are reserved for BRIN future expansion */
|
||
|
|
||
|
#define BRIN_DEBUG
|
||
|
|
||
|
/* we allow debug if using GCC; otherwise don't bother */
|
||
|
#if defined(BRIN_DEBUG) && defined(__GNUC__)
|
||
|
#define BRIN_elog(level, ...) elog(level, __VA_ARGS__)
|
||
|
#else
|
||
|
#define BRIN_elog(a) void(0)
|
||
|
#endif
|
||
|
|
||
|
/* brin.c */
|
||
|
extern BrinDesc *brin_build_desc(Relation rel);
|
||
|
extern void brin_free_desc(BrinDesc *bdesc);
|
||
|
|
||
|
#endif /* BRIN_INTERNAL_H */
|