Обсуждение: Stylistic changes in bufmgr.c
Basically replaces (*a).b with a->b as it is everywhere else in
Postgres.
Servus
Manfred
diff -Ncr ../base/src/backend/storage/page/bufpage.c src/backend/storage/page/bufpage.c
*** ../base/src/backend/storage/page/bufpage.c Sat Nov 29 20:51:57 2003
--- src/backend/storage/page/bufpage.c Wed Jun 2 22:26:12 2004
***************
*** 151,158 ****
if (offsetNumber < limit)
{
itemId = PageGetItemId(phdr, offsetNumber);
! if (((*itemId).lp_flags & LP_USED) ||
! ((*itemId).lp_len != 0))
{
elog(WARNING, "will not overwrite a used ItemId");
return InvalidOffsetNumber;
--- 151,158 ----
if (offsetNumber < limit)
{
itemId = PageGetItemId(phdr, offsetNumber);
! if ((itemId->lp_flags & LP_USED) ||
! (itemId->lp_len != 0))
{
elog(WARNING, "will not overwrite a used ItemId");
return InvalidOffsetNumber;
***************
*** 172,179 ****
for (offsetNumber = 1; offsetNumber < limit; offsetNumber++)
{
itemId = PageGetItemId(phdr, offsetNumber);
! if ((((*itemId).lp_flags & LP_USED) == 0) &&
! ((*itemId).lp_len == 0))
break;
}
/* if no free slot, we'll put it at limit (1st open slot) */
--- 172,179 ----
for (offsetNumber = 1; offsetNumber < limit; offsetNumber++)
{
itemId = PageGetItemId(phdr, offsetNumber);
! if (((itemId->lp_flags & LP_USED) == 0) &&
! (itemId->lp_len == 0))
break;
}
/* if no free slot, we'll put it at limit (1st open slot) */
***************
*** 214,222 ****
(limit - offsetNumber) * sizeof(ItemIdData));
/* set the item pointer */
! (*itemId).lp_off = upper;
! (*itemId).lp_len = size;
! (*itemId).lp_flags = flags;
/* copy the item's data onto the page */
memcpy((char *) page + upper, item, size);
--- 214,222 ----
(limit - offsetNumber) * sizeof(ItemIdData));
/* set the item pointer */
! itemId->lp_off = upper;
! itemId->lp_len = size;
! itemId->lp_flags = flags;
/* copy the item's data onto the page */
memcpy((char *) page + upper, item, size);
***************
*** 278,296 ****
/*
* sorting support for PageRepairFragmentation
*/
! struct itemIdSortData
{
int offsetindex; /* linp array index */
int itemoff; /* page offset of item data */
Size alignedlen; /* MAXALIGN(item data len) */
! };
static int
itemoffcompare(const void *itemidp1, const void *itemidp2)
{
/* Sort in decreasing itemoff order */
! return ((struct itemIdSortData *) itemidp2)->itemoff -
! ((struct itemIdSortData *) itemidp1)->itemoff;
}
/*
--- 278,297 ----
/*
* sorting support for PageRepairFragmentation
*/
! typedef struct itemIdSortData
{
int offsetindex; /* linp array index */
int itemoff; /* page offset of item data */
Size alignedlen; /* MAXALIGN(item data len) */
! } itemIdSortData;
! typedef itemIdSortData *itemIdSort;
static int
itemoffcompare(const void *itemidp1, const void *itemidp2)
{
/* Sort in decreasing itemoff order */
! return ((itemIdSort) itemidp2)->itemoff -
! ((itemIdSort) itemidp1)->itemoff;
}
/*
***************
*** 309,316 ****
Offset pd_lower = ((PageHeader) page)->pd_lower;
Offset pd_upper = ((PageHeader) page)->pd_upper;
Offset pd_special = ((PageHeader) page)->pd_special;
! struct itemIdSortData *itemidbase,
! *itemidptr;
ItemId lp;
int nline,
nused;
--- 310,317 ----
Offset pd_lower = ((PageHeader) page)->pd_lower;
Offset pd_upper = ((PageHeader) page)->pd_upper;
Offset pd_special = ((PageHeader) page)->pd_special;
! itemIdSort itemidbase,
! itemidptr;
ItemId lp;
int nline,
nused;
***************
*** 340,348 ****
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! if ((*lp).lp_flags & LP_DELETE) /* marked for deletion */
! (*lp).lp_flags &= ~(LP_USED | LP_DELETE);
! if ((*lp).lp_flags & LP_USED)
nused++;
else if (unused)
unused[i - nused] = (OffsetNumber) i;
--- 341,349 ----
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! if (lp->lp_flags & LP_DELETE) /* marked for deletion */
! lp->lp_flags &= ~(LP_USED | LP_DELETE);
! if (lp->lp_flags & LP_USED)
nused++;
else if (unused)
unused[i - nused] = (OffsetNumber) i;
***************
*** 354,390 ****
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! (*lp).lp_len = 0; /* indicate unused & deallocated */
}
((PageHeader) page)->pd_upper = pd_special;
}
else
{ /* nused != 0 */
/* Need to compact the page the hard way */
! itemidbase = (struct itemIdSortData *)
! palloc(sizeof(struct itemIdSortData) * nused);
itemidptr = itemidbase;
totallen = 0;
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! if ((*lp).lp_flags & LP_USED)
{
itemidptr->offsetindex = i;
! itemidptr->itemoff = (*lp).lp_off;
if (itemidptr->itemoff < (int) pd_upper ||
itemidptr->itemoff >= (int) pd_special)
ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
errmsg("corrupted item pointer: %u",
itemidptr->itemoff)));
! itemidptr->alignedlen = MAXALIGN((*lp).lp_len);
totallen += itemidptr->alignedlen;
itemidptr++;
}
else
{
! (*lp).lp_len = 0; /* indicate unused & deallocated */
}
}
--- 355,390 ----
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! lp->lp_len = 0; /* indicate unused & deallocated */
}
((PageHeader) page)->pd_upper = pd_special;
}
else
{ /* nused != 0 */
/* Need to compact the page the hard way */
! itemidbase = (itemIdSort) palloc(sizeof(itemIdSortData) * nused);
itemidptr = itemidbase;
totallen = 0;
for (i = 0; i < nline; i++)
{
lp = PageGetItemId(page, i + 1);
! if (lp->lp_flags & LP_USED)
{
itemidptr->offsetindex = i;
! itemidptr->itemoff = lp->lp_off;
if (itemidptr->itemoff < (int) pd_upper ||
itemidptr->itemoff >= (int) pd_special)
ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
errmsg("corrupted item pointer: %u",
itemidptr->itemoff)));
! itemidptr->alignedlen = MAXALIGN(lp->lp_len);
totallen += itemidptr->alignedlen;
itemidptr++;
}
else
{
! lp->lp_len = 0; /* indicate unused & deallocated */
}
}
***************
*** 395,401 ****
(unsigned int) totallen, pd_special - pd_lower)));
/* sort itemIdSortData array into decreasing itemoff order */
! qsort((char *) itemidbase, nused, sizeof(struct itemIdSortData),
itemoffcompare);
/* compactify page */
--- 395,401 ----
(unsigned int) totallen, pd_special - pd_lower)));
/* sort itemIdSortData array into decreasing itemoff order */
! qsort((char *) itemidbase, nused, sizeof(itemIdSortData),
itemoffcompare);
/* compactify page */
***************
*** 408,414 ****
memmove((char *) page + upper,
(char *) page + itemidptr->itemoff,
itemidptr->alignedlen);
! (*lp).lp_off = upper;
}
((PageHeader) page)->pd_upper = upper;
--- 408,414 ----
memmove((char *) page + upper,
(char *) page + itemidptr->itemoff,
itemidptr->alignedlen);
! lp->lp_off = upper;
}
((PageHeader) page)->pd_upper = upper;
***************
*** 538,545 ****
nline--; /* there's one less than when we started */
for (i = 1; i <= nline; i++)
{
! if (PageGetItemId(phdr, i)->lp_off <= offset)
! PageGetItemId(phdr, i)->lp_off += size;
}
}
}
--- 538,546 ----
nline--; /* there's one less than when we started */
for (i = 1; i <= nline; i++)
{
! ItemId ii = PageGetItemId(phdr, i);
! if (ii->lp_off <= offset)
! ii->lp_off += size;
}
}
}
Patch applied. Thanks.
---------------------------------------------------------------------------
Manfred Koizar wrote:
> Basically replaces (*a).b with a->b as it is everywhere else in
> Postgres.
>
> Servus
> Manfred
> diff -Ncr ../base/src/backend/storage/page/bufpage.c src/backend/storage/page/bufpage.c
> *** ../base/src/backend/storage/page/bufpage.c Sat Nov 29 20:51:57 2003
> --- src/backend/storage/page/bufpage.c Wed Jun 2 22:26:12 2004
> ***************
> *** 151,158 ****
> if (offsetNumber < limit)
> {
> itemId = PageGetItemId(phdr, offsetNumber);
> ! if (((*itemId).lp_flags & LP_USED) ||
> ! ((*itemId).lp_len != 0))
> {
> elog(WARNING, "will not overwrite a used ItemId");
> return InvalidOffsetNumber;
> --- 151,158 ----
> if (offsetNumber < limit)
> {
> itemId = PageGetItemId(phdr, offsetNumber);
> ! if ((itemId->lp_flags & LP_USED) ||
> ! (itemId->lp_len != 0))
> {
> elog(WARNING, "will not overwrite a used ItemId");
> return InvalidOffsetNumber;
> ***************
> *** 172,179 ****
> for (offsetNumber = 1; offsetNumber < limit; offsetNumber++)
> {
> itemId = PageGetItemId(phdr, offsetNumber);
> ! if ((((*itemId).lp_flags & LP_USED) == 0) &&
> ! ((*itemId).lp_len == 0))
> break;
> }
> /* if no free slot, we'll put it at limit (1st open slot) */
> --- 172,179 ----
> for (offsetNumber = 1; offsetNumber < limit; offsetNumber++)
> {
> itemId = PageGetItemId(phdr, offsetNumber);
> ! if (((itemId->lp_flags & LP_USED) == 0) &&
> ! (itemId->lp_len == 0))
> break;
> }
> /* if no free slot, we'll put it at limit (1st open slot) */
> ***************
> *** 214,222 ****
> (limit - offsetNumber) * sizeof(ItemIdData));
>
> /* set the item pointer */
> ! (*itemId).lp_off = upper;
> ! (*itemId).lp_len = size;
> ! (*itemId).lp_flags = flags;
>
> /* copy the item's data onto the page */
> memcpy((char *) page + upper, item, size);
> --- 214,222 ----
> (limit - offsetNumber) * sizeof(ItemIdData));
>
> /* set the item pointer */
> ! itemId->lp_off = upper;
> ! itemId->lp_len = size;
> ! itemId->lp_flags = flags;
>
> /* copy the item's data onto the page */
> memcpy((char *) page + upper, item, size);
> ***************
> *** 278,296 ****
> /*
> * sorting support for PageRepairFragmentation
> */
> ! struct itemIdSortData
> {
> int offsetindex; /* linp array index */
> int itemoff; /* page offset of item data */
> Size alignedlen; /* MAXALIGN(item data len) */
> ! };
>
> static int
> itemoffcompare(const void *itemidp1, const void *itemidp2)
> {
> /* Sort in decreasing itemoff order */
> ! return ((struct itemIdSortData *) itemidp2)->itemoff -
> ! ((struct itemIdSortData *) itemidp1)->itemoff;
> }
>
> /*
> --- 278,297 ----
> /*
> * sorting support for PageRepairFragmentation
> */
> ! typedef struct itemIdSortData
> {
> int offsetindex; /* linp array index */
> int itemoff; /* page offset of item data */
> Size alignedlen; /* MAXALIGN(item data len) */
> ! } itemIdSortData;
> ! typedef itemIdSortData *itemIdSort;
>
> static int
> itemoffcompare(const void *itemidp1, const void *itemidp2)
> {
> /* Sort in decreasing itemoff order */
> ! return ((itemIdSort) itemidp2)->itemoff -
> ! ((itemIdSort) itemidp1)->itemoff;
> }
>
> /*
> ***************
> *** 309,316 ****
> Offset pd_lower = ((PageHeader) page)->pd_lower;
> Offset pd_upper = ((PageHeader) page)->pd_upper;
> Offset pd_special = ((PageHeader) page)->pd_special;
> ! struct itemIdSortData *itemidbase,
> ! *itemidptr;
> ItemId lp;
> int nline,
> nused;
> --- 310,317 ----
> Offset pd_lower = ((PageHeader) page)->pd_lower;
> Offset pd_upper = ((PageHeader) page)->pd_upper;
> Offset pd_special = ((PageHeader) page)->pd_special;
> ! itemIdSort itemidbase,
> ! itemidptr;
> ItemId lp;
> int nline,
> nused;
> ***************
> *** 340,348 ****
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! if ((*lp).lp_flags & LP_DELETE) /* marked for deletion */
> ! (*lp).lp_flags &= ~(LP_USED | LP_DELETE);
> ! if ((*lp).lp_flags & LP_USED)
> nused++;
> else if (unused)
> unused[i - nused] = (OffsetNumber) i;
> --- 341,349 ----
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! if (lp->lp_flags & LP_DELETE) /* marked for deletion */
> ! lp->lp_flags &= ~(LP_USED | LP_DELETE);
> ! if (lp->lp_flags & LP_USED)
> nused++;
> else if (unused)
> unused[i - nused] = (OffsetNumber) i;
> ***************
> *** 354,390 ****
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! (*lp).lp_len = 0; /* indicate unused & deallocated */
> }
> ((PageHeader) page)->pd_upper = pd_special;
> }
> else
> { /* nused != 0 */
> /* Need to compact the page the hard way */
> ! itemidbase = (struct itemIdSortData *)
> ! palloc(sizeof(struct itemIdSortData) * nused);
> itemidptr = itemidbase;
> totallen = 0;
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! if ((*lp).lp_flags & LP_USED)
> {
> itemidptr->offsetindex = i;
> ! itemidptr->itemoff = (*lp).lp_off;
> if (itemidptr->itemoff < (int) pd_upper ||
> itemidptr->itemoff >= (int) pd_special)
> ereport(ERROR,
> (errcode(ERRCODE_DATA_CORRUPTED),
> errmsg("corrupted item pointer: %u",
> itemidptr->itemoff)));
> ! itemidptr->alignedlen = MAXALIGN((*lp).lp_len);
> totallen += itemidptr->alignedlen;
> itemidptr++;
> }
> else
> {
> ! (*lp).lp_len = 0; /* indicate unused & deallocated */
> }
> }
>
> --- 355,390 ----
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! lp->lp_len = 0; /* indicate unused & deallocated */
> }
> ((PageHeader) page)->pd_upper = pd_special;
> }
> else
> { /* nused != 0 */
> /* Need to compact the page the hard way */
> ! itemidbase = (itemIdSort) palloc(sizeof(itemIdSortData) * nused);
> itemidptr = itemidbase;
> totallen = 0;
> for (i = 0; i < nline; i++)
> {
> lp = PageGetItemId(page, i + 1);
> ! if (lp->lp_flags & LP_USED)
> {
> itemidptr->offsetindex = i;
> ! itemidptr->itemoff = lp->lp_off;
> if (itemidptr->itemoff < (int) pd_upper ||
> itemidptr->itemoff >= (int) pd_special)
> ereport(ERROR,
> (errcode(ERRCODE_DATA_CORRUPTED),
> errmsg("corrupted item pointer: %u",
> itemidptr->itemoff)));
> ! itemidptr->alignedlen = MAXALIGN(lp->lp_len);
> totallen += itemidptr->alignedlen;
> itemidptr++;
> }
> else
> {
> ! lp->lp_len = 0; /* indicate unused & deallocated */
> }
> }
>
> ***************
> *** 395,401 ****
> (unsigned int) totallen, pd_special - pd_lower)));
>
> /* sort itemIdSortData array into decreasing itemoff order */
> ! qsort((char *) itemidbase, nused, sizeof(struct itemIdSortData),
> itemoffcompare);
>
> /* compactify page */
> --- 395,401 ----
> (unsigned int) totallen, pd_special - pd_lower)));
>
> /* sort itemIdSortData array into decreasing itemoff order */
> ! qsort((char *) itemidbase, nused, sizeof(itemIdSortData),
> itemoffcompare);
>
> /* compactify page */
> ***************
> *** 408,414 ****
> memmove((char *) page + upper,
> (char *) page + itemidptr->itemoff,
> itemidptr->alignedlen);
> ! (*lp).lp_off = upper;
> }
>
> ((PageHeader) page)->pd_upper = upper;
> --- 408,414 ----
> memmove((char *) page + upper,
> (char *) page + itemidptr->itemoff,
> itemidptr->alignedlen);
> ! lp->lp_off = upper;
> }
>
> ((PageHeader) page)->pd_upper = upper;
> ***************
> *** 538,545 ****
> nline--; /* there's one less than when we started */
> for (i = 1; i <= nline; i++)
> {
> ! if (PageGetItemId(phdr, i)->lp_off <= offset)
> ! PageGetItemId(phdr, i)->lp_off += size;
> }
> }
> }
> --- 538,546 ----
> nline--; /* there's one less than when we started */
> for (i = 1; i <= nline; i++)
> {
> ! ItemId ii = PageGetItemId(phdr, i);
> ! if (ii->lp_off <= offset)
> ! ii->lp_off += size;
> }
> }
> }
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073