diff options
| author | Vadim B. Mikheev <vadim4o@yahoo.com> | 2000-10-21 15:43:36 +0000 |
|---|---|---|
| committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 2000-10-21 15:43:36 +0000 |
| commit | a7fcadd10ab67a9cc938eb2818aae33d5be0238a (patch) | |
| tree | 2739d0f36c72ff592740864b48023cffa692afac /src/backend/storage/page | |
| parent | 7c177a49082f6c22dc6c12cbaf58cf984fbb6cfd (diff) | |
| download | postgresql-a7fcadd10ab67a9cc938eb2818aae33d5be0238a.tar.gz | |
WAL
Diffstat (limited to 'src/backend/storage/page')
| -rw-r--r-- | src/backend/storage/page/bufpage.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index dd1b44d334..6f043bf944 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.32 2000/10/20 11:28:39 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.33 2000/10/21 15:43:29 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -245,7 +245,11 @@ itemidcompare(const void *itemidp1, const void *itemidp2) /* * PageRepairFragmentation - * Frees fragmented space on a page. + * + * Frees fragmented space on a page. + * It doesn't remove unused line pointers! Please don't change this. + * This routine is usable for heap pages only. + * */ void PageRepairFragmentation(Page page) @@ -264,6 +268,8 @@ PageRepairFragmentation(Page page) for (i = 0; i < nline; i++) { lp = ((PageHeader) page)->pd_linp + i; + if ((*lp).lp_flags & LP_DELETE) /* marked for deletion */ + (*lp).lp_flags &= ~(LP_USED | LP_DELETE); if ((*lp).lp_flags & LP_USED) nused++; } @@ -344,6 +350,31 @@ PageGetFreeSpace(Page page) } /* + * PageRepairFragmentation un-useful for index page cleanup because + * of it doesn't remove line pointers. This routine could be more + * effective but ... no time -:) + */ +void +IndexPageCleanup(Buffer buffer) +{ + Page page = (Page) BufferGetPage(buffer); + ItemId lp; + OffsetNumber maxoff; + OffsetNumber i; + + maxoff = PageGetMaxOffsetNumber(page); + for (i = 0; i < maxoff; i++) + { + lp = ((PageHeader) page)->pd_linp + i; + if ((*lp).lp_flags & LP_DELETE) /* marked for deletion */ + { + PageIndexTupleDelete(page, i + 1); + maxoff--; + } + } +} + +/* *---------------------------------------------------------------- * PageIndexTupleDelete *---------------------------------------------------------------- |
