@@ -399,7 +399,7 @@ dataIsMoveRight(RumBtree btree, Page page)
399
399
if (RumPageRightMost (page ))
400
400
return FALSE;
401
401
402
- return (rumCompareItemPointers (btree -> items + btree -> curitem , iptr ) > 0 ) ? TRUE : FALSE;
402
+ return (rumCompareItemPointers (& btree -> items [ btree -> curitem ]. iptr , iptr ) > 0 ) ? TRUE : FALSE;
403
403
}
404
404
405
405
/*
@@ -449,7 +449,8 @@ dataLocateItem(RumBtree btree, RumBtreeStack *stack)
449
449
else
450
450
{
451
451
pitem = (PostingItem * ) RumDataPageGetItem (page , mid );
452
- result = rumCompareItemPointers (btree -> items + btree -> curitem , & (pitem -> key ));
452
+ result = rumCompareItemPointers (& btree -> items [btree -> curitem ].iptr ,
453
+ & (pitem -> key ));
453
454
}
454
455
455
456
if (result == 0 )
@@ -500,7 +501,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
500
501
if (index -> offsetNumer == InvalidOffsetNumber )
501
502
break ;
502
503
503
- cmp = rumCompareItemPointers (& index -> iptr , btree -> items + btree -> curitem );
504
+ cmp = rumCompareItemPointers (& index -> iptr ,
505
+ & btree -> items [btree -> curitem ].iptr );
504
506
if (cmp < 0 )
505
507
{
506
508
ptr = RumDataPageGetData (page ) + index -> pageOffset ;
@@ -522,7 +524,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
522
524
ptr = rumDataPageLeafRead (ptr , btree -> entryAttnum , & item ,
523
525
btree -> rumstate , false);
524
526
525
- cmp = rumCompareItemPointers (btree -> items + btree -> curitem , & item .iptr );
527
+ cmp = rumCompareItemPointers (& btree -> items [btree -> curitem ].iptr ,
528
+ & item .iptr );
526
529
if (cmp == 0 )
527
530
{
528
531
* offset = i ;
@@ -719,17 +722,18 @@ dataIsEnoughSpace(RumBtree btree, Buffer buf, OffsetNumber off)
719
722
for (j = btree -> curitem ; j < btree -> nitem ; j ++ )
720
723
{
721
724
size = 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 ,
724
728
btree -> rumstate , size );
725
729
}
726
730
}
727
731
else
728
732
{
729
733
j = btree -> curitem ;
730
734
size = 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 );
733
737
}
734
738
size += MAXIMUM_ALIGNOF ;
735
739
@@ -823,20 +827,22 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
823
827
Pointer ptr2 ;
824
828
825
829
ptr2 = 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 ,
827
832
& iptr , btree -> rumstate , ptr - page );
828
833
829
834
freespace = RumDataPageFreeSpacePre (page , ptr2 );
830
835
if (freespace < 0 )
831
836
break ;
832
837
833
838
ptr = 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 ,
835
841
& iptr , btree -> rumstate );
836
842
freespace = RumDataPageFreeSpacePre (page ,ptr );
837
843
Assert (freespace >= 0 );
838
844
839
- iptr = btree -> items [j ];
845
+ iptr = btree -> items [j ]. iptr ;
840
846
btree -> curitem ++ ;
841
847
i ++ ;
842
848
}
@@ -948,12 +954,11 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
948
954
if (i == off )
949
955
{
950
956
prevIptr = item .iptr ;
951
- item . iptr = btree -> items [maxItemIndex ];
957
+ item = btree -> items [maxItemIndex ];
952
958
953
959
prevTotalsize = totalsize ;
954
960
totalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
955
- & item .iptr , btree -> addInfo [maxItemIndex ],
956
- btree -> addInfoIsNull [maxItemIndex ],
961
+ & item .iptr , item .addInfo , item .addInfoIsNull ,
957
962
& prevIptr , btree -> rumstate , totalsize );
958
963
959
964
maxItemIndex ++ ;
@@ -977,7 +982,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
977
982
if (off == maxoff + 1 )
978
983
{
979
984
prevIptr = item .iptr ;
980
- item . iptr = btree -> items [maxItemIndex ];
985
+ item = btree -> items [maxItemIndex ];
981
986
if (RumPageRightMost (newlPage ))
982
987
{
983
988
Size newTotalsize ;
@@ -988,8 +993,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
988
993
*/
989
994
while (maxItemIndex < btree -> nitem &&
990
995
(newTotalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
991
- & item .iptr , btree -> addInfo [maxItemIndex ],
992
- btree -> addInfoIsNull [maxItemIndex ],
996
+ & item .iptr , item .addInfo , item .addInfoIsNull ,
993
997
& prevIptr , btree -> rumstate , totalsize )) <
994
998
2 * RumDataPageSize - 2 * maxItemSize - 2 * MAXIMUM_ALIGNOF
995
999
)
@@ -1001,15 +1005,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
1001
1005
1002
1006
prevIptr = item .iptr ;
1003
1007
if (maxItemIndex < btree -> nitem )
1004
- item . iptr = btree -> items [maxItemIndex ];
1008
+ item = btree -> items [maxItemIndex ];
1005
1009
}
1006
1010
}
1007
1011
else
1008
1012
{
1009
1013
prevTotalsize = totalsize ;
1010
1014
totalsize = rumCheckPlaceToDataPageLeaf (btree -> entryAttnum ,
1011
- & item .iptr , btree -> addInfo [maxItemIndex ],
1012
- btree -> addInfoIsNull [maxItemIndex ],
1015
+ & item .iptr , item .addInfo , item .addInfoIsNull ,
1013
1016
& prevIptr , btree -> rumstate , totalsize );
1014
1017
maxItemIndex ++ ;
1015
1018
@@ -1038,14 +1041,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
1038
1041
while (btree -> curitem < maxItemIndex )
1039
1042
{
1040
1043
ptr = 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 ,
1044
1047
& prevIptr , btree -> rumstate );
1045
1048
freespace = RumDataPageFreeSpacePre (page , ptr );
1046
1049
Assert (freespace >= 0 );
1047
1050
1048
- prevIptr = btree -> items [btree -> curitem ];
1051
+ prevIptr = btree -> items [btree -> curitem ]. iptr ;
1049
1052
btree -> curitem ++ ;
1050
1053
1051
1054
CHECK_SWITCH_TO_RPAGE ;
@@ -1070,14 +1073,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
1070
1073
while (btree -> curitem < maxItemIndex )
1071
1074
{
1072
1075
ptr = 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 ,
1076
1079
& prevIptr , btree -> rumstate );
1077
1080
freespace = RumDataPageFreeSpacePre (page , ptr );
1078
1081
Assert (freespace >= 0 );
1079
1082
1080
- prevIptr = btree -> items [btree -> curitem ];
1083
+ prevIptr = btree -> items [btree -> curitem ]. iptr ;
1081
1084
btree -> curitem ++ ;
1082
1085
1083
1086
CHECK_SWITCH_TO_RPAGE ;
@@ -1138,7 +1141,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
1138
1141
maxoff * sizeof (ItemPointerData ) < 2 * (freeSpace - sizeof (ItemPointerData )))
1139
1142
{
1140
1143
memcpy (vector + maxoff * sizeof (ItemPointerData ),
1141
- btree -> items + btree -> curitem ,
1144
+ & btree -> items [ btree -> curitem ]. iptr ,
1142
1145
sizeof (ItemPointerData ));
1143
1146
maxoff ++ ;
1144
1147
nCopied ++ ;
@@ -1152,7 +1155,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
1152
1155
memmove (ptr + sizeofitem , ptr , (maxoff - off + 1 ) * sizeofitem );
1153
1156
if (RumPageIsLeaf (newlPage ))
1154
1157
{
1155
- memcpy (ptr , btree -> items + btree -> curitem , sizeofitem );
1158
+ memcpy (ptr , & btree -> items [ btree -> curitem ]. iptr , sizeofitem );
1156
1159
btree -> curitem ++ ;
1157
1160
}
1158
1161
else
@@ -1396,21 +1399,9 @@ rumInsertItemPointers(RumState *rumstate,
1396
1399
RumKey * items , uint32 nitem ,
1397
1400
GinStatsData * buildStats )
1398
1401
{
1399
- int i ;
1400
-
1401
1402
BlockNumber rootBlkno = gdi -> stack -> blkno ;
1402
1403
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 ;
1414
1405
gdi -> btree .nitem = nitem ;
1415
1406
gdi -> btree .curitem = 0 ;
1416
1407
0 commit comments