| /* |
| * AM-callable functions for BRIN indexes |
| * |
| * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1994, Regents of the University of California |
| * |
| * IDENTIFICATION |
| * src/include/access/brin.h |
| */ |
| #ifndef BRIN_H |
| #define BRIN_H |
| |
| #include "nodes/execnodes.h" |
| #include "utils/relcache.h" |
| |
| |
| /* |
| * Storage type for BRIN's reloptions |
| */ |
| typedef struct BrinOptions |
| { |
| int32 vl_len_; /* varlena header (do not touch directly!) */ |
| BlockNumber pagesPerRange; |
| bool autosummarize; |
| } BrinOptions; |
| |
| |
| /* |
| * BrinStatsData represents stats data for planner use |
| */ |
| typedef struct BrinStatsData |
| { |
| BlockNumber pagesPerRange; |
| BlockNumber revmapNumPages; |
| } BrinStatsData; |
| |
| |
| #define BRIN_DEFAULT_PAGES_PER_RANGE 128 |
| #define BrinGetPagesPerRange(relation) \ |
| (AssertMacro(relation->rd_rel->relkind == RELKIND_INDEX && \ |
| IsIndexAccessMethod(relation->rd_rel->relam, BRIN_AM_OID)), \ |
| (relation)->rd_options ? \ |
| ((BrinOptions *) (relation)->rd_options)->pagesPerRange : \ |
| BRIN_DEFAULT_PAGES_PER_RANGE) |
| #define BrinGetAutoSummarize(relation) \ |
| (AssertMacro(relation->rd_rel->relkind == RELKIND_INDEX && \ |
| IsIndexAccessMethod(relation->rd_rel->relam, BRIN_AM_OID)), \ |
| (relation)->rd_options ? \ |
| ((BrinOptions *) (relation)->rd_options)->autosummarize : \ |
| false) |
| |
| |
| extern void brinGetStats(Relation index, BrinStatsData *stats); |
| |
| #endif /* BRIN_H */ |