2
0

gistxlog.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*-------------------------------------------------------------------------
  2. *
  3. * gistxlog.h
  4. * gist xlog routines
  5. *
  6. * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  7. * Portions Copyright (c) 1994, Regents of the University of California
  8. *
  9. * src/include/access/gistxlog.h
  10. *
  11. *-------------------------------------------------------------------------
  12. */
  13. #ifndef GIST_XLOG_H
  14. #define GIST_XLOG_H
  15. #include "access/gist.h"
  16. #include "access/xlogreader.h"
  17. #include "lib/stringinfo.h"
  18. #define XLOG_GIST_PAGE_UPDATE 0x00
  19. #define XLOG_GIST_DELETE 0x10 /* delete leaf index tuples for a
  20. * page */
  21. #define XLOG_GIST_PAGE_REUSE 0x20 /* old page is about to be reused
  22. * from FSM */
  23. #define XLOG_GIST_PAGE_SPLIT 0x30
  24. /* #define XLOG_GIST_INSERT_COMPLETE 0x40 */ /* not used anymore */
  25. /* #define XLOG_GIST_CREATE_INDEX 0x50 */ /* not used anymore */
  26. #define XLOG_GIST_PAGE_DELETE 0x60
  27. #define XLOG_GIST_ASSIGN_LSN 0x70 /* nop, assign new LSN */
  28. /*
  29. * Backup Blk 0: updated page.
  30. * Backup Blk 1: If this operation completes a page split, by inserting a
  31. * downlink for the split page, the left half of the split
  32. */
  33. typedef struct gistxlogPageUpdate
  34. {
  35. /* number of deleted offsets */
  36. uint16 ntodelete;
  37. uint16 ntoinsert;
  38. /*
  39. * In payload of blk 0 : 1. todelete OffsetNumbers 2. tuples to insert
  40. */
  41. } gistxlogPageUpdate;
  42. /*
  43. * Backup Blk 0: Leaf page, whose index tuples are deleted.
  44. */
  45. typedef struct gistxlogDelete
  46. {
  47. TransactionId latestRemovedXid;
  48. uint16 ntodelete; /* number of deleted offsets */
  49. /*
  50. * In payload of blk 0 : todelete OffsetNumbers
  51. */
  52. } gistxlogDelete;
  53. #define SizeOfGistxlogDelete (offsetof(gistxlogDelete, ntodelete) + sizeof(uint16))
  54. /*
  55. * Backup Blk 0: If this operation completes a page split, by inserting a
  56. * downlink for the split page, the left half of the split
  57. * Backup Blk 1 - npage: split pages (1 is the original page)
  58. */
  59. typedef struct gistxlogPageSplit
  60. {
  61. BlockNumber origrlink; /* rightlink of the page before split */
  62. GistNSN orignsn; /* NSN of the page before split */
  63. bool origleaf; /* was splitted page a leaf page? */
  64. uint16 npage; /* # of pages in the split */
  65. bool markfollowright; /* set F_FOLLOW_RIGHT flags */
  66. /*
  67. * follow: 1. gistxlogPage and array of IndexTupleData per page
  68. */
  69. } gistxlogPageSplit;
  70. /*
  71. * Backup Blk 0: page that was deleted.
  72. * Backup Blk 1: parent page, containing the downlink to the deleted page.
  73. */
  74. typedef struct gistxlogPageDelete
  75. {
  76. FullTransactionId deleteXid; /* last Xid which could see page in scan */
  77. OffsetNumber downlinkOffset; /* Offset of downlink referencing this
  78. * page */
  79. } gistxlogPageDelete;
  80. #define SizeOfGistxlogPageDelete (offsetof(gistxlogPageDelete, downlinkOffset) + sizeof(OffsetNumber))
  81. /*
  82. * This is what we need to know about page reuse, for hot standby.
  83. */
  84. typedef struct gistxlogPageReuse
  85. {
  86. RelFileNode node;
  87. BlockNumber block;
  88. FullTransactionId latestRemovedFullXid;
  89. } gistxlogPageReuse;
  90. #define SizeOfGistxlogPageReuse (offsetof(gistxlogPageReuse, latestRemovedFullXid) + sizeof(FullTransactionId))
  91. extern void gist_redo(XLogReaderState *record);
  92. extern void gist_desc(StringInfo buf, XLogReaderState *record);
  93. extern const char *gist_identify(uint8 info);
  94. extern void gist_xlog_startup(void);
  95. extern void gist_xlog_cleanup(void);
  96. extern void gist_mask(char *pagedata, BlockNumber blkno);
  97. #endif