Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb4eae02

Browse files
committed
Clean up the messy semantics (not to mention inefficiency) of PageGetTempPage
by splitting it into three functions with better-defined behaviors.Zdenek Kotala
1 parentf0dae70 commitb4eae02

File tree

10 files changed

+60
-55
lines changed

10 files changed

+60
-55
lines changed

‎src/backend/access/gin/gindatapage.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
*$PostgreSQL: pgsql/src/backend/access/gin/gindatapage.c,v 1.11 2008/06/19 00:46:03 alvherre Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/gindatapage.c,v 1.12 2008/11/03 20:47:48 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -445,7 +445,7 @@ dataSplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogRe
445445
char*ptr;
446446
OffsetNumberseparator;
447447
ItemPointerbound;
448-
Pagelpage=GinPageGetCopyPage(BufferGetPage(lbuf));
448+
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf));
449449
ItemPointerDataoldbound=*GinDataPageGetRightBound(lpage);
450450
intsizeofitem=GinSizeOfItem(lpage);
451451
OffsetNumbermaxoff=GinPageGetOpaque(lpage)->maxoff;

‎src/backend/access/gin/ginentrypage.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
*$PostgreSQL: pgsql/src/backend/access/gin/ginentrypage.c,v 1.17 2008/07/11 21:06:29 tgl Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginentrypage.c,v 1.18 2008/11/03 20:47:48 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -458,7 +458,7 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
458458
leftrightmost=NULL;
459459
staticginxlogSplitdata;
460460
Pagepage;
461-
Pagelpage=GinPageGetCopyPage(BufferGetPage(lbuf));
461+
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf));
462462
Pagerpage=BufferGetPage(rbuf);
463463
SizepageSize=PageGetPageSize(lpage);
464464

‎src/backend/access/gin/ginutil.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
*$PostgreSQL: pgsql/src/backend/access/gin/ginutil.c,v 1.17 2008/09/30 10:52:10 heikki Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginutil.c,v 1.18 2008/11/03 20:47:48 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -310,21 +310,6 @@ extractEntriesSU(GinState *ginstate, OffsetNumber attnum, Datum value, int32 *ne
310310
returnentries;
311311
}
312312

313-
/*
314-
* It's analog of PageGetTempPage(), but copies whole page
315-
*/
316-
Page
317-
GinPageGetCopyPage(Pagepage)
318-
{
319-
SizepageSize=PageGetPageSize(page);
320-
Pagetmppage;
321-
322-
tmppage= (Page)palloc(pageSize);
323-
memcpy(tmppage,page,pageSize);
324-
325-
returntmppage;
326-
}
327-
328313
Datum
329314
ginoptions(PG_FUNCTION_ARGS)
330315
{

‎src/backend/access/gin/ginvacuum.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
*$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.24 2008/10/31 15:04:59 heikki Exp $
11+
*$PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.25 2008/11/03 20:47:48 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414

@@ -546,7 +546,7 @@ ginVacuumEntryPage(GinVacuumState *gvs, Buffer buffer, BlockNumber *roots, uint3
546546
* On first difference we create temporary page in memory
547547
* and copies content in to it.
548548
*/
549-
tmppage=GinPageGetCopyPage(origpage);
549+
tmppage=PageGetTempPageCopy(origpage);
550550

551551
if (newN>0)
552552
{

‎src/backend/access/gist/gist.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.152 2008/09/30 10:52:10 heikki Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.153 2008/11/03 20:47:48 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -343,7 +343,7 @@ gistplacetopage(GISTInsertState *state, GISTSTATE *giststate)
343343
* we must create temporary page to operate
344344
*/
345345
dist->buffer=state->stack->buffer;
346-
dist->page=PageGetTempPage(BufferGetPage(dist->buffer),sizeof(GISTPageOpaqueData));
346+
dist->page=PageGetTempPageCopySpecial(BufferGetPage(dist->buffer));
347347

348348
/* clean all flags except F_LEAF */
349349
GistPageGetOpaque(dist->page)->flags= (is_leaf) ?F_LEAF :0;

‎src/backend/access/gist/gistvacuum.c

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.39 2008/10/31 15:04:59 heikki Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.40 2008/11/03 20:47:48 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -144,18 +144,6 @@ gistDeleteSubtree(GistVacuum *gv, BlockNumber blkno)
144144
UnlockReleaseBuffer(buffer);
145145
}
146146

147-
staticPage
148-
GistPageGetCopyPage(Pagepage)
149-
{
150-
SizepageSize=PageGetPageSize(page);
151-
Pagetmppage;
152-
153-
tmppage= (Page)palloc(pageSize);
154-
memcpy(tmppage,page,pageSize);
155-
156-
returntmppage;
157-
}
158-
159147
staticArrayTuple
160148
vacuumSplitPage(GistVacuum*gv,PagetempPage,Bufferbuffer,IndexTuple*addon,intcurlenaddon)
161149
{
@@ -325,7 +313,7 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion)
325313
addon= (IndexTuple*)palloc(sizeof(IndexTuple)*lenaddon);
326314

327315
/* get copy of page to work */
328-
tempPage=GistPageGetCopyPage(page);
316+
tempPage=PageGetTempPageCopy(page);
329317

330318
for (i=FirstOffsetNumber;i <=maxoff;i=OffsetNumberNext(i))
331319
{

‎src/backend/access/nbtree/nbtinsert.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.167 2008/06/11 08:38:56 heikki Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.168 2008/11/03 20:47:48 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -793,7 +793,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
793793

794794
rbuf=_bt_getbuf(rel,P_NEW,BT_WRITE);
795795
origpage=BufferGetPage(buf);
796-
leftpage=PageGetTempPage(origpage,sizeof(BTPageOpaqueData));
796+
leftpage=PageGetTempPage(origpage);
797797
rightpage=BufferGetPage(rbuf);
798798

799799
_bt_pageinit(leftpage,BufferGetPageSize(buf));

‎src/backend/storage/page/bufpage.c

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.80 2008/07/13 21:50:04 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.81 2008/11/03 20:47:48 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -254,28 +254,59 @@ PageAddItem(Page page,
254254

255255
/*
256256
* PageGetTempPage
257-
*Get a temporary page in local memory for special processing
257+
*Get a temporary page in local memory for special processing.
258+
*The returned page is not initialized at all; caller must do that.
258259
*/
259260
Page
260-
PageGetTempPage(Pagepage,SizespecialSize)
261+
PageGetTempPage(Pagepage)
262+
{
263+
SizepageSize;
264+
Pagetemp;
265+
266+
pageSize=PageGetPageSize(page);
267+
temp= (Page)palloc(pageSize);
268+
269+
returntemp;
270+
}
271+
272+
/*
273+
* PageGetTempPageCopy
274+
*Get a temporary page in local memory for special processing.
275+
*The page is initialized by copying the contents of the given page.
276+
*/
277+
Page
278+
PageGetTempPageCopy(Pagepage)
261279
{
262280
SizepageSize;
263281
Pagetemp;
264-
PageHeaderthdr;
265282

266283
pageSize=PageGetPageSize(page);
267284
temp= (Page)palloc(pageSize);
268-
thdr= (PageHeader)temp;
269285

270-
/* copy old page in */
271286
memcpy(temp,page,pageSize);
272287

273-
/* set high, low water marks */
274-
thdr->pd_lower=SizeOfPageHeaderData;
275-
thdr->pd_upper=pageSize-MAXALIGN(specialSize);
288+
returntemp;
289+
}
290+
291+
/*
292+
* PageGetTempPageCopySpecial
293+
*Get a temporary page in local memory for special processing.
294+
*The page is PageInit'd with the same special-space size as the
295+
*given page, and the special space is copied from the given page.
296+
*/
297+
Page
298+
PageGetTempPageCopySpecial(Pagepage)
299+
{
300+
SizepageSize;
301+
Pagetemp;
302+
303+
pageSize=PageGetPageSize(page);
304+
temp= (Page)palloc(pageSize);
276305

277-
/* clear out the middle */
278-
MemSet((char*)temp+thdr->pd_lower,0,thdr->pd_upper-thdr->pd_lower);
306+
PageInit(temp,pageSize,PageGetSpecialSize(page));
307+
memcpy(PageGetSpecialPointer(temp),
308+
PageGetSpecialPointer(page),
309+
PageGetSpecialSize(page));
279310

280311
returntemp;
281312
}

‎src/include/access/gin.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
*Copyright (c) 2006-2008, PostgreSQL Global Development Group
66
*
7-
*$PostgreSQL: pgsql/src/include/access/gin.h,v 1.25 2008/10/20 13:39:44 teodor Exp $
7+
*$PostgreSQL: pgsql/src/include/access/gin.h,v 1.26 2008/11/03 20:47:49 tgl Exp $
88
*--------------------------------------------------------------------------
99
*/
1010

@@ -246,7 +246,6 @@ extern intcompareAttEntries(GinState *ginstate, OffsetNumber attnum_a, Datum a,
246246
externDatum*extractEntriesS(GinState*ginstate,OffsetNumberattnum,Datumvalue,
247247
int32*nentries,bool*needUnique);
248248
externDatum*extractEntriesSU(GinState*ginstate,OffsetNumberattnum,Datumvalue,int32*nentries);
249-
externPageGinPageGetCopyPage(Pagepage);
250249

251250
externDatumgin_index_getattr(GinState*ginstate,IndexTupletuple);
252251
externOffsetNumbergintuple_get_attrnum(GinState*ginstate,IndexTupletuple);

‎src/include/storage/bufpage.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/storage/bufpage.h,v 1.83 2008/07/14 03:22:32 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/storage/bufpage.h,v 1.84 2008/11/03 20:47:49 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -362,7 +362,9 @@ extern void PageInit(Page page, Size pageSize, Size specialSize);
362362
externboolPageHeaderIsValid(PageHeaderpage);
363363
externOffsetNumberPageAddItem(Pagepage,Itemitem,Sizesize,
364364
OffsetNumberoffsetNumber,booloverwrite,boolis_heap);
365-
externPagePageGetTempPage(Pagepage,SizespecialSize);
365+
externPagePageGetTempPage(Pagepage);
366+
externPagePageGetTempPageCopy(Pagepage);
367+
externPagePageGetTempPageCopySpecial(Pagepage);
366368
externvoidPageRestoreTempPage(PagetempPage,PageoldPage);
367369
externvoidPageRepairFragmentation(Pagepage);
368370
externSizePageGetFreeSpace(Pagepage);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp