diff options
author | Teodor Sigaev | 2005-06-20 10:29:37 +0000 |
---|---|---|
committer | Teodor Sigaev | 2005-06-20 10:29:37 +0000 |
commit | d7aa06f1e1517aa34d71fca26649f4d7675e8c2e (patch) | |
tree | 62697e38f39ee0fcadded3ada8905b7f2c2ab76c /src/include/access/gist.h | |
parent | 6573bef801a43119159fff63bfe6cad548dee378 (diff) |
1. full functional WAL for GiST
2. improve vacuum for gist
- use FSM
- full vacuum:
- reforms parent tuple if it's needed
( tuples was deleted on child page or parent tuple remains invalid
after crash recovery )
- truncate index file if possible
3. fixes bugs and mistakes
Diffstat (limited to 'src/include/access/gist.h')
-rw-r--r-- | src/include/access/gist.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/include/access/gist.h b/src/include/access/gist.h index 4a0640e7b7..621342c171 100644 --- a/src/include/access/gist.h +++ b/src/include/access/gist.h @@ -36,6 +36,8 @@ * Page opaque data in a GiST index page. */ #define F_LEAF (1 << 0) +#define F_DELETED (1 << 1) +#define F_TUPLES_DELETED (1 << 2) typedef struct GISTPageOpaqueData { @@ -56,6 +58,7 @@ typedef struct GIST_SPLITVEC * spl_left */ int spl_lattrsize[INDEX_MAX_KEYS]; bool spl_lisnull[INDEX_MAX_KEYS]; + bool spl_leftvalid; OffsetNumber *spl_right; /* array of entries that go right */ int spl_nright; /* size of the array */ @@ -64,6 +67,7 @@ typedef struct GIST_SPLITVEC * spl_right */ int spl_rattrsize[INDEX_MAX_KEYS]; bool spl_risnull[INDEX_MAX_KEYS]; + bool spl_rightvalid; int *spl_idgrp; int *spl_ngrp; /* number in each group */ @@ -86,7 +90,18 @@ typedef struct GISTENTRY bool leafkey; } GISTENTRY; -#define GIST_LEAF(entry) (((GISTPageOpaque) PageGetSpecialPointer((entry)->page))->flags & F_LEAF) +#define GistPageIsLeaf(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags & F_LEAF) +#define GIST_LEAF(entry) (GistPageIsLeaf((entry)->page)) +#define GistPageSetLeaf(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags |= F_LEAF) +#define GistPageSetNonLeaf(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags &= ~F_LEAF) + +#define GistPageIsDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags & F_DELETED) +#define GistPageSetDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags |= F_DELETED) +#define GistPageSetNonDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags &= ~F_DELETED) + +#define GistTuplesDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags & F_TUPLES_DELETED) +#define GistMarkTuplesDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags |= F_TUPLES_DELETED) +#define GistClearTuplesDeleted(page) (((GISTPageOpaque) PageGetSpecialPointer(page))->flags &= ~F_TUPLES_DELETED) /* * Vector of GISTENTRY structs; user-defined methods union and pick |