aboutsummaryrefslogtreecommitdiff
path: root/src/include/commands/vacuum.h
blob: 59863f2d5749f2cb61fc5a4ae9babfb278747808 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*-------------------------------------------------------------------------
 *
 * vacuum.h--
 *	  header file for postgres vacuum cleaner
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: vacuum.h,v 1.8 1997/09/07 04:57:33 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
#ifndef VACUUM_H
#define VACUUM_H

#include <access/funcindex.h>
#include <catalog/pg_index.h>

typedef struct VAttListData
{
	int				val_dummy;
	struct VAttListData *val_next;
}				VAttListData;

typedef VAttListData *VAttList;

typedef struct VPageDescrData
{
	BlockNumber		vpd_blkno;	/* BlockNumber of this Page */
	Size			vpd_free;	/* FreeSpace on this Page */
	uint16			vpd_nusd;	/* Number of OffNums used by vacuum */
	uint16			vpd_noff;	/* Number of OffNums free or to be free */
	OffsetNumber	vpd_voff[1];/* Array of its OffNums */
}				VPageDescrData;

typedef VPageDescrData *VPageDescr;

typedef struct VPageListData
{
	int				vpl_nemend; /* Number of "empty" end-pages */
	int				vpl_npages; /* Number of pages in vpl_pgdesc */
	VPageDescr	   *vpl_pgdesc; /* Descriptions of pages */
}				VPageListData;

typedef VPageListData *VPageList;

typedef struct
{
	FuncIndexInfo	finfo;
	FuncIndexInfo  *finfoP;
	IndexTupleForm	tform;
	int				natts;
}				IndDesc;

typedef struct
{
	AttributeTupleForm attr;
	Datum			best,
					guess1,
					guess2,
					max,
					min;
	int16			best_len,
					guess1_len,
					guess2_len,
					max_len,
					min_len;
	int32			best_cnt,
					guess1_cnt,
					guess1_hits,
					guess2_hits,
					null_cnt,
					nonnull_cnt;
	int32			max_cnt,
					min_cnt;
	func_ptr		f_cmpeq,
					f_cmplt,
					f_cmpgt;
	regproc			outfunc;
	bool			initialized;
}				VacAttrStats;

typedef struct VRelListData
{
	Oid				vrl_relid;
	struct VRelListData *vrl_next;
}				VRelListData;

typedef VRelListData *VRelList;

typedef struct VRelStats
{
	Oid				relid;
	int				ntups;
	int				npages;
	Size			min_tlen;
	Size			max_tlen;
	bool			hasindex;
	int				va_natts;	/* number of attrs being analyzed */
	VacAttrStats   *vacattrstats;
}				VRelStats;

extern bool		VacuumRunning;

extern void		vc_abort(void);
extern void		vacuum(char *vacrel, bool verbose, bool analyze, List * va_spec);

#define ATTNVALS_SCALE	1000000000		/* XXX so it can act as a float4 */

#endif							/* VACUUM_H */