1/*-------------------------------------------------------------------------
2 *
3 * visibilitymap.h
4 * visibility map interface
5 *
6 *
7 * Portions Copyright (c) 2007-2019, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/access/visibilitymap.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef VISIBILITYMAP_H
15#define VISIBILITYMAP_H
16
17#include "access/xlogdefs.h"
18#include "storage/block.h"
19#include "storage/buf.h"
20#include "utils/relcache.h"
21
22/* Number of bits for one heap page */
23#define BITS_PER_HEAPBLOCK 2
24
25/* Flags for bit map */
26#define VISIBILITYMAP_ALL_VISIBLE 0x01
27#define VISIBILITYMAP_ALL_FROZEN 0x02
28#define VISIBILITYMAP_VALID_BITS 0x03 /* OR of all valid visibilitymap
29 * flags bits */
30
31/* Macros for visibilitymap test */
32#define VM_ALL_VISIBLE(r, b, v) \
33 ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_VISIBLE) != 0)
34#define VM_ALL_FROZEN(r, b, v) \
35 ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_FROZEN) != 0)
36
37extern bool visibilitymap_clear(Relation rel, BlockNumber heapBlk,
38 Buffer vmbuf, uint8 flags);
39extern void visibilitymap_pin(Relation rel, BlockNumber heapBlk,
40 Buffer *vmbuf);
41extern bool visibilitymap_pin_ok(BlockNumber heapBlk, Buffer vmbuf);
42extern void visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
43 XLogRecPtr recptr, Buffer vmBuf, TransactionId cutoff_xid,
44 uint8 flags);
45extern uint8 visibilitymap_get_status(Relation rel, BlockNumber heapBlk, Buffer *vmbuf);
46extern void visibilitymap_count(Relation rel, BlockNumber *all_visible, BlockNumber *all_frozen);
47extern void visibilitymap_truncate(Relation rel, BlockNumber nheapblocks);
48
49#endif /* VISIBILITYMAP_H */
50