vacuum.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * vacuum.h
  4.  *   header file for postgres vacuum cleaner
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: vacuum.h,v 1.20.2.1 1999/08/25 11:32:52 ishii Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef VACUUM_H
  14. #define VACUUM_H
  15. #include "access/funcindex.h"
  16. #include "catalog/pg_index.h"
  17. #include "catalog/pg_attribute.h"
  18. #include "nodes/pg_list.h"
  19. #include "storage/block.h"
  20. #include "storage/off.h"
  21. typedef struct VAttListData
  22. {
  23. int val_dummy;
  24. struct VAttListData *val_next;
  25. } VAttListData;
  26. typedef VAttListData *VAttList;
  27. typedef struct VPageDescrData
  28. {
  29. BlockNumber vpd_blkno; /* BlockNumber of this Page */
  30. Size vpd_free; /* FreeSpace on this Page */
  31. uint16 vpd_offsets_used; /* Number of OffNums used by
  32.  * vacuum */
  33. uint16 vpd_offsets_free; /* Number of OffNums free or to be
  34.  * free */
  35. OffsetNumber vpd_offsets[1];/* Array of its OffNums */
  36. } VPageDescrData;
  37. typedef VPageDescrData *VPageDescr;
  38. typedef struct VPageListData
  39. {
  40. int vpl_empty_end_pages; /* Number of "empty" end-pages */
  41. int vpl_num_pages; /* Number of pages in vpl_pagedesc */
  42. int vpl_num_allocated_pages; /* Number of allocated pages in vpl_pagedesc */
  43. VPageDescr *vpl_pagedesc; /* Descriptions of pages */
  44. } VPageListData;
  45. typedef VPageListData *VPageList;
  46. typedef struct
  47. {
  48. FuncIndexInfo finfo;
  49. FuncIndexInfo *finfoP;
  50. Form_pg_index tform;
  51. int natts;
  52. } IndDesc;
  53. typedef struct
  54. {
  55. Form_pg_attribute attr;
  56. Datum best,
  57. guess1,
  58. guess2,
  59. max,
  60. min;
  61. int16 best_len,
  62. guess1_len,
  63. guess2_len,
  64. max_len,
  65. min_len;
  66. int32 best_cnt,
  67. guess1_cnt,
  68. guess1_hits,
  69. guess2_hits,
  70. null_cnt,
  71. nonnull_cnt;
  72. int32 max_cnt,
  73. min_cnt;
  74. FmgrInfo f_cmpeq,
  75. f_cmplt,
  76. f_cmpgt;
  77. regproc outfunc;
  78. bool initialized;
  79. } VacAttrStats;
  80. typedef struct VRelListData
  81. {
  82. Oid vrl_relid;
  83. struct VRelListData *vrl_next;
  84. } VRelListData;
  85. typedef VRelListData *VRelList;
  86. typedef struct VTupleLinkData
  87. {
  88. ItemPointerData new_tid;
  89. ItemPointerData this_tid;
  90. } VTupleLinkData;
  91. typedef VTupleLinkData *VTupleLink;
  92. typedef struct VTupleMoveData
  93. {
  94. ItemPointerData tid; /* tuple ID */
  95. VPageDescr vpd; /* where to move */
  96. bool cleanVpd; /* clean vpd before using */
  97. } VTupleMoveData;
  98. typedef VTupleMoveData *VTupleMove;
  99. typedef struct VRelStats
  100. {
  101. Oid relid;
  102. int num_tuples;
  103. int num_pages;
  104. Size min_tlen;
  105. Size max_tlen;
  106. bool hasindex;
  107. int va_natts; /* number of attrs being analyzed */
  108. VacAttrStats *vacattrstats;
  109. int num_vtlinks;
  110. VTupleLink vtlinks;
  111. } VRelStats;
  112. extern bool VacuumRunning;
  113. extern void vc_abort(void);
  114. extern void vacuum(char *vacrel, bool verbose, bool analyze, List *va_spec);
  115. #define ATTNVALS_SCALE 1000000000 /* XXX so it can act as a float4 */
  116. #endif  /* VACUUM_H */