@@ -399,7 +399,7 @@ dataIsMoveRight(RumBtree btree, Page page)
399399if (RumPageRightMost (page ))
400400return FALSE;
401401
402- return (rumCompareItemPointers (btree -> items + btree -> curitem ,iptr )> 0 ) ? TRUE : FALSE;
402+ return (rumCompareItemPointers (& btree -> items [ btree -> curitem ]. iptr ,iptr )> 0 ) ? TRUE : FALSE;
403403}
404404
405405/*
@@ -449,7 +449,8 @@ dataLocateItem(RumBtree btree, RumBtreeStack *stack)
449449else
450450{
451451pitem = (PostingItem * )RumDataPageGetItem (page ,mid );
452- result = rumCompareItemPointers (btree -> items + btree -> curitem ,& (pitem -> key ));
452+ result = rumCompareItemPointers (& btree -> items [btree -> curitem ].iptr ,
453+ & (pitem -> key ));
453454}
454455
455456if (result == 0 )
@@ -500,7 +501,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
500501if (index -> offsetNumer == InvalidOffsetNumber )
501502break ;
502503
503- cmp = rumCompareItemPointers (& index -> iptr ,btree -> items + btree -> curitem );
504+ cmp = rumCompareItemPointers (& index -> iptr ,
505+ & btree -> items [btree -> curitem ].iptr );
504506if (cmp < 0 )
505507{
506508ptr = RumDataPageGetData (page )+ index -> pageOffset ;
@@ -522,7 +524,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
522524ptr = rumDataPageLeafRead (ptr ,btree -> entryAttnum ,& item ,
523525btree -> rumstate , false);
524526
525- cmp = rumCompareItemPointers (btree -> items + btree -> curitem ,& item .iptr );
527+ cmp = rumCompareItemPointers (& btree -> items [btree -> curitem ].iptr ,
528+ & item .iptr );
526529if (cmp == 0 )
527530{
528531* offset = i ;
@@ -719,17 +722,18 @@ dataIsEnoughSpace(RumBtree btree, Buffer buf, OffsetNumber off)
719722for (j = btree -> curitem ;j < btree -> nitem ;j ++ )
720723{
721724size = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
722- & btree -> items [j ],btree -> addInfo [j ],btree -> addInfoIsNull [j ],
723- (j == btree -> curitem ) ? (& iptr ) :& btree -> items [j - 1 ],
725+ & btree -> items [j ].iptr ,btree -> items [j ].addInfo ,
726+ btree -> items [j ].addInfoIsNull ,
727+ (j == btree -> curitem ) ? (& iptr ) :& btree -> items [j - 1 ].iptr ,
724728btree -> rumstate ,size );
725729}
726730}
727731else
728732{
729733j = btree -> curitem ;
730734size = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
731- & btree -> items [j ],btree -> addInfo [j ], btree -> addInfoIsNull [ j ] ,
732- & iptr ,btree -> rumstate ,size );
735+ & btree -> items [j ]. iptr ,btree -> items [j ]. addInfo ,
736+ btree -> items [ j ]. addInfoIsNull , & iptr ,btree -> rumstate ,size );
733737}
734738size += MAXIMUM_ALIGNOF ;
735739
@@ -823,20 +827,22 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
823827Pointer ptr2 ;
824828
825829ptr2 = page + rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
826- & btree -> items [j ],btree -> addInfo [j ],btree -> addInfoIsNull [j ],
830+ & btree -> items [j ].iptr ,btree -> items [j ].addInfo ,
831+ btree -> items [j ].addInfoIsNull ,
827832& iptr ,btree -> rumstate ,ptr - page );
828833
829834freespace = RumDataPageFreeSpacePre (page ,ptr2 );
830835if (freespace < 0 )
831836break ;
832837
833838ptr = rumPlaceToDataPageLeaf (ptr ,btree -> entryAttnum ,
834- & btree -> items [j ],btree -> addInfo [j ],btree -> addInfoIsNull [j ],
839+ & btree -> items [j ].iptr ,btree -> items [j ].addInfo ,
840+ btree -> items [j ].addInfoIsNull ,
835841& iptr ,btree -> rumstate );
836842freespace = RumDataPageFreeSpacePre (page ,ptr );
837843Assert (freespace >=0 );
838844
839- iptr = btree -> items [j ];
845+ iptr = btree -> items [j ]. iptr ;
840846btree -> curitem ++ ;
841847i ++ ;
842848}
@@ -948,12 +954,11 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
948954if (i == off )
949955{
950956prevIptr = item .iptr ;
951- item . iptr = btree -> items [maxItemIndex ];
957+ item = btree -> items [maxItemIndex ];
952958
953959prevTotalsize = totalsize ;
954960totalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
955- & item .iptr ,btree -> addInfo [maxItemIndex ],
956- btree -> addInfoIsNull [maxItemIndex ],
961+ & item .iptr ,item .addInfo ,item .addInfoIsNull ,
957962& prevIptr ,btree -> rumstate ,totalsize );
958963
959964maxItemIndex ++ ;
@@ -977,7 +982,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
977982if (off == maxoff + 1 )
978983{
979984prevIptr = item .iptr ;
980- item . iptr = btree -> items [maxItemIndex ];
985+ item = btree -> items [maxItemIndex ];
981986if (RumPageRightMost (newlPage ))
982987{
983988Size newTotalsize ;
@@ -988,8 +993,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
988993 */
989994while (maxItemIndex < btree -> nitem &&
990995(newTotalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
991- & item .iptr ,btree -> addInfo [maxItemIndex ],
992- btree -> addInfoIsNull [maxItemIndex ],
996+ & item .iptr ,item .addInfo ,item .addInfoIsNull ,
993997& prevIptr ,btree -> rumstate ,totalsize ))<
9949982 * RumDataPageSize - 2 * maxItemSize - 2 * MAXIMUM_ALIGNOF
995999)
@@ -1001,15 +1005,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10011005
10021006prevIptr = item .iptr ;
10031007if (maxItemIndex < btree -> nitem )
1004- item . iptr = btree -> items [maxItemIndex ];
1008+ item = btree -> items [maxItemIndex ];
10051009}
10061010}
10071011else
10081012{
10091013prevTotalsize = totalsize ;
10101014totalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
1011- & item .iptr ,btree -> addInfo [maxItemIndex ],
1012- btree -> addInfoIsNull [maxItemIndex ],
1015+ & item .iptr ,item .addInfo ,item .addInfoIsNull ,
10131016& prevIptr ,btree -> rumstate ,totalsize );
10141017maxItemIndex ++ ;
10151018
@@ -1038,14 +1041,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10381041while (btree -> curitem < maxItemIndex )
10391042{
10401043ptr = rumPlaceToDataPageLeaf (ptr ,btree -> entryAttnum ,
1041- & btree -> items [btree -> curitem ],
1042- btree -> addInfo [btree -> curitem ],
1043- btree -> addInfoIsNull [btree -> curitem ],
1044+ & btree -> items [btree -> curitem ]. iptr ,
1045+ btree -> items [btree -> curitem ]. addInfo ,
1046+ btree -> items [btree -> curitem ]. addInfoIsNull ,
10441047& prevIptr ,btree -> rumstate );
10451048freespace = RumDataPageFreeSpacePre (page ,ptr );
10461049Assert (freespace >=0 );
10471050
1048- prevIptr = btree -> items [btree -> curitem ];
1051+ prevIptr = btree -> items [btree -> curitem ]. iptr ;
10491052btree -> curitem ++ ;
10501053
10511054CHECK_SWITCH_TO_RPAGE ;
@@ -1070,14 +1073,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10701073while (btree -> curitem < maxItemIndex )
10711074{
10721075ptr = rumPlaceToDataPageLeaf (ptr ,btree -> entryAttnum ,
1073- & btree -> items [btree -> curitem ],
1074- btree -> addInfo [btree -> curitem ],
1075- btree -> addInfoIsNull [btree -> curitem ],
1076+ & btree -> items [btree -> curitem ]. iptr ,
1077+ btree -> items [btree -> curitem ]. addInfo ,
1078+ btree -> items [btree -> curitem ]. addInfoIsNull ,
10761079& prevIptr ,btree -> rumstate );
10771080freespace = RumDataPageFreeSpacePre (page ,ptr );
10781081Assert (freespace >=0 );
10791082
1080- prevIptr = btree -> items [btree -> curitem ];
1083+ prevIptr = btree -> items [btree -> curitem ]. iptr ;
10811084btree -> curitem ++ ;
10821085
10831086CHECK_SWITCH_TO_RPAGE ;
@@ -1138,7 +1141,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
11381141maxoff * sizeof (ItemPointerData )< 2 * (freeSpace - sizeof (ItemPointerData )))
11391142{
11401143memcpy (vector + maxoff * sizeof (ItemPointerData ),
1141- btree -> items + btree -> curitem ,
1144+ & btree -> items [ btree -> curitem ]. iptr ,
11421145sizeof (ItemPointerData ));
11431146maxoff ++ ;
11441147nCopied ++ ;
@@ -1152,7 +1155,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
11521155memmove (ptr + sizeofitem ,ptr , (maxoff - off + 1 )* sizeofitem );
11531156if (RumPageIsLeaf (newlPage ))
11541157{
1155- memcpy (ptr ,btree -> items + btree -> curitem ,sizeofitem );
1158+ memcpy (ptr ,& btree -> items [ btree -> curitem ]. iptr ,sizeofitem );
11561159btree -> curitem ++ ;
11571160}
11581161else
@@ -1396,21 +1399,9 @@ rumInsertItemPointers(RumState *rumstate,
13961399RumKey * items ,uint32 nitem ,
13971400GinStatsData * buildStats )
13981401{
1399- int i ;
1400-
14011402BlockNumber rootBlkno = gdi -> stack -> blkno ;
14021403
1403- /* TODO: Fix this terrible code. */
1404- gdi -> btree .items = (ItemPointerData * )palloc (sizeof (ItemPointerData )* nitem );
1405- gdi -> btree .addInfo = (Datum * )palloc (sizeof (Datum )* nitem );
1406- gdi -> btree .addInfoIsNull = (bool * )palloc (sizeof (bool )* nitem );
1407- for (i = 0 ;i < nitem ;i ++ )
1408- {
1409- gdi -> btree .items [i ]= items [i ].iptr ;
1410- gdi -> btree .addInfo [i ]= items [i ].addInfo ;
1411- gdi -> btree .addInfoIsNull [i ]= items [i ].addInfoIsNull ;
1412- }
1413-
1404+ gdi -> btree .items = items ;
14141405gdi -> btree .nitem = nitem ;
14151406gdi -> btree .curitem = 0 ;
14161407