@ -570,8 +570,7 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
Size lsize = 0 ,
Size lsize = 0 ,
size ;
size ;
char * ptr ;
char * ptr ;
IndexTuple itup ,
IndexTuple itup ;
leftrightmost = NULL ;
Page page ;
Page page ;
Page lpage = PageGetTempPageCopy ( BufferGetPage ( lbuf ) ) ;
Page lpage = PageGetTempPageCopy ( BufferGetPage ( lbuf ) ) ;
Page rpage = BufferGetPage ( rbuf ) ;
Page rpage = BufferGetPage ( rbuf ) ;
@ -635,7 +634,6 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
}
}
else
else
{
{
leftrightmost = itup ;
lsize + = MAXALIGN ( IndexTupleSize ( itup ) ) + sizeof ( ItemIdData ) ;
lsize + = MAXALIGN ( IndexTupleSize ( itup ) ) + sizeof ( ItemIdData ) ;
}
}
@ -645,11 +643,6 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
ptr + = MAXALIGN ( IndexTupleSize ( itup ) ) ;
ptr + = MAXALIGN ( IndexTupleSize ( itup ) ) ;
}
}
btree - > entry = GinFormInteriorTuple ( leftrightmost , lpage ,
BufferGetBlockNumber ( lbuf ) ) ;
btree - > rightblkno = BufferGetBlockNumber ( rbuf ) ;
data . node = btree - > index - > rd_node ;
data . node = btree - > index - > rd_node ;
data . rootBlkno = InvalidBlockNumber ;
data . rootBlkno = InvalidBlockNumber ;
data . lblkno = BufferGetBlockNumber ( lbuf ) ;
data . lblkno = BufferGetBlockNumber ( lbuf ) ;
@ -674,19 +667,20 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
}
}
/*
/*
* return newly allocated rightmost tuple
* Prepare the state in ' btree ' for inserting a downlink for given buffer .
*/
*/
IndexTuple
static void
ginPageGetLinkItup ( Buffer buf )
entryPrepareDownlink ( GinBtree btree , Buffer l buf)
{
{
IndexTuple itup ,
Page lpage = BufferGetPage ( lbuf ) ;
nitup ;
IndexTuple itup ;
Page page = BufferGetPage ( buf ) ;
itup = getRightMostTuple ( page ) ;
itup = getRightMostTuple ( lpage ) ;
nitup = GinFormInteriorTuple ( itup , page , BufferGetBlockNumber ( buf ) ) ;
return nitup ;
btree - > entry = GinFormInteriorTuple ( itup ,
lpage ,
BufferGetBlockNumber ( lbuf ) ) ;
btree - > rightblkno = GinPageGetOpaque ( lpage ) - > rightlink ;
}
}
/*
/*
@ -696,17 +690,21 @@ ginPageGetLinkItup(Buffer buf)
void
void
ginEntryFillRoot ( GinBtree btree , Buffer root , Buffer lbuf , Buffer rbuf )
ginEntryFillRoot ( GinBtree btree , Buffer root , Buffer lbuf , Buffer rbuf )
{
{
Page page ;
Page page = BufferGetPage ( root ) ;
Page lpage = BufferGetPage ( lbuf ) ;
Page rpage = BufferGetPage ( rbuf ) ;
IndexTuple itup ;
IndexTuple itup ;
page = BufferGetPage ( root ) ;
itup = GinFormInteriorTuple ( getRightMostTuple ( lpage ) ,
lpage ,
itup = ginPageGetLinkItup ( lbuf ) ;
BufferGetBlockNumber ( lbuf ) ) ;
if ( PageAddItem ( page , ( Item ) itup , IndexTupleSize ( itup ) , InvalidOffsetNumber , false , false ) = = InvalidOffsetNumber )
if ( PageAddItem ( page , ( Item ) itup , IndexTupleSize ( itup ) , InvalidOffsetNumber , false , false ) = = InvalidOffsetNumber )
elog ( ERROR , " failed to add item to index root page " ) ;
elog ( ERROR , " failed to add item to index root page " ) ;
pfree ( itup ) ;
pfree ( itup ) ;
itup = ginPageGetLinkItup ( rbuf ) ;
itup = GinFormInteriorTuple ( getRightMostTuple ( rpage ) ,
rpage ,
BufferGetBlockNumber ( rbuf ) ) ;
if ( PageAddItem ( page , ( Item ) itup , IndexTupleSize ( itup ) , InvalidOffsetNumber , false , false ) = = InvalidOffsetNumber )
if ( PageAddItem ( page , ( Item ) itup , IndexTupleSize ( itup ) , InvalidOffsetNumber , false , false ) = = InvalidOffsetNumber )
elog ( ERROR , " failed to add item to index root page " ) ;
elog ( ERROR , " failed to add item to index root page " ) ;
pfree ( itup ) ;
pfree ( itup ) ;
@ -736,6 +734,7 @@ ginPrepareEntryScan(GinBtree btree, OffsetNumber attnum,
btree - > placeToPage = entryPlaceToPage ;
btree - > placeToPage = entryPlaceToPage ;
btree - > splitPage = entrySplitPage ;
btree - > splitPage = entrySplitPage ;
btree - > fillRoot = ginEntryFillRoot ;
btree - > fillRoot = ginEntryFillRoot ;
btree - > prepareDownlink = entryPrepareDownlink ;
btree - > isData = FALSE ;
btree - > isData = FALSE ;
btree - > fullScan = FALSE ;
btree - > fullScan = FALSE ;