diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/access/gist_private.h | 10 | ||||
-rw-r--r-- | src/include/access/gistxlog.h | 17 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index 36ed7244ba0..a73716d6eaa 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -240,6 +240,7 @@ typedef struct GistSplitVector typedef struct { Relation r; + Relation heapRel; Size freespace; /* free space to be left */ GISTInsertStack *stack; @@ -389,7 +390,8 @@ extern void freeGISTstate(GISTSTATE *giststate); extern void gistdoinsert(Relation r, IndexTuple itup, Size freespace, - GISTSTATE *GISTstate); + GISTSTATE *GISTstate, + Relation heapRel); /* A List of these is returned from gistplacetopage() in *splitinfo */ typedef struct @@ -404,7 +406,8 @@ extern bool gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, OffsetNumber oldoffnum, BlockNumber *newblkno, Buffer leftchildbuf, List **splitinfo, - bool markleftchild); + bool markleftchild, + Relation heapRel); extern SplitedPageLayout *gistSplit(Relation r, Page page, IndexTuple *itup, int len, GISTSTATE *giststate); @@ -414,6 +417,9 @@ extern XLogRecPtr gistXLogUpdate(Buffer buffer, IndexTuple *itup, int ntup, Buffer leftchild); +XLogRecPtr gistXLogDelete(Buffer buffer, OffsetNumber *todelete, + int ntodelete, RelFileNode hnode); + extern XLogRecPtr gistXLogSplit(bool page_is_leaf, SplitedPageLayout *dist, BlockNumber origrlink, GistNSN oldnsn, diff --git a/src/include/access/gistxlog.h b/src/include/access/gistxlog.h index 1a2b9496d0d..b67c7100500 100644 --- a/src/include/access/gistxlog.h +++ b/src/include/access/gistxlog.h @@ -18,6 +18,7 @@ #include "lib/stringinfo.h" #define XLOG_GIST_PAGE_UPDATE 0x00 +#define XLOG_GIST_DELETE 0x10 /* delete leaf index tuples for a page */ /* #define XLOG_GIST_NEW_ROOT 0x20 */ /* not used anymore */ #define XLOG_GIST_PAGE_SPLIT 0x30 /* #define XLOG_GIST_INSERT_COMPLETE 0x40 */ /* not used anymore */ @@ -41,6 +42,22 @@ typedef struct gistxlogPageUpdate } gistxlogPageUpdate; /* + * Backup Blk 0: Leaf page, whose index tuples are deleted. + */ +typedef struct gistxlogDelete +{ + RelFileNode hnode; /* RelFileNode of the heap the index currently + * points at */ + uint16 ntodelete; /* number of deleted offsets */ + + /* + * In payload of blk 0 : todelete OffsetNumbers + */ +} gistxlogDelete; + +#define SizeOfGistxlogDelete (offsetof(gistxlogDelete, ntodelete) + sizeof(uint16)) + +/* * Backup Blk 0: If this operation completes a page split, by inserting a * downlink for the split page, the left half of the split * Backup Blk 1 - npage: split pages (1 is the original page) |