Skip to content

Commit 9f273cd

Browse files
author
Artur Zakirov
committed
Remove addInfo, addInfoIsNull from RumBtreeData struct
1 parent 80b864b commit 9f273cd

File tree

3 files changed

+36
-47
lines changed

3 files changed

+36
-47
lines changed

rum.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,7 @@ typedef struct RumBtreeData
454454
bool isDelete;
455455

456456
/* Data (posting tree) options */
457-
ItemPointerData *items;
458-
Datum *addInfo;
459-
bool *addInfoIsNull;
457+
RumKey *items;
460458

461459
uint32 nitem;
462460
uint32 curitem;

rumbtree.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ rumReFindLeafPage(RumBtree btree, RumBtreeStack *stack)
9292

9393
if (rumCompareItemPointers(
9494
&(((PostingItem *)RumDataPageGetItem(page, maxoff - 1))->key),
95-
btree->items + btree->curitem) >= 0)
95+
&btree->items[btree->curitem].iptr) >= 0)
9696
{
9797
break;
9898
}

rumdatapage.c

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ dataIsMoveRight(RumBtree btree, Page page)
399399
if (RumPageRightMost(page))
400400
return 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)
449449
else
450450
{
451451
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));
453454
}
454455

455456
if (result == 0)
@@ -500,7 +501,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
500501
if (index->offsetNumer == InvalidOffsetNumber)
501502
break;
502503

503-
cmp = rumCompareItemPointers(&index->iptr, btree->items + btree->curitem);
504+
cmp = rumCompareItemPointers(&index->iptr,
505+
&btree->items[btree->curitem].iptr);
504506
if (cmp < 0)
505507
{
506508
ptr = RumDataPageGetData(page) + index->pageOffset;
@@ -522,7 +524,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
522524
ptr = rumDataPageLeafRead(ptr, btree->entryAttnum, &item,
523525
btree->rumstate, false);
524526

525-
cmp = rumCompareItemPointers(btree->items + btree->curitem, &item.iptr);
527+
cmp = rumCompareItemPointers(&btree->items[btree->curitem].iptr,
528+
&item.iptr);
526529
if (cmp == 0)
527530
{
528531
*offset = i;
@@ -719,17 +722,18 @@ dataIsEnoughSpace(RumBtree btree, Buffer buf, OffsetNumber off)
719722
for (j = btree->curitem; j < btree->nitem; j++)
720723
{
721724
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,
724728
btree->rumstate, size);
725729
}
726730
}
727731
else
728732
{
729733
j = btree->curitem;
730734
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);
733737
}
734738
size += MAXIMUM_ALIGNOF;
735739

@@ -823,20 +827,22 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
823827
Pointer ptr2;
824828

825829
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,
827832
&iptr, btree->rumstate, ptr - page);
828833

829834
freespace = RumDataPageFreeSpacePre(page, ptr2);
830835
if (freespace < 0)
831836
break;
832837

833838
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,
835841
&iptr, btree->rumstate);
836842
freespace = RumDataPageFreeSpacePre(page,ptr);
837843
Assert(freespace >= 0);
838844

839-
iptr = btree->items[j];
845+
iptr = btree->items[j].iptr;
840846
btree->curitem++;
841847
i++;
842848
}
@@ -948,12 +954,11 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
948954
if (i == off)
949955
{
950956
prevIptr = item.iptr;
951-
item.iptr = btree->items[maxItemIndex];
957+
item = btree->items[maxItemIndex];
952958

953959
prevTotalsize = totalsize;
954960
totalsize = 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

959964
maxItemIndex++;
@@ -977,7 +982,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
977982
if (off == maxoff + 1)
978983
{
979984
prevIptr = item.iptr;
980-
item.iptr = btree->items[maxItemIndex];
985+
item = btree->items[maxItemIndex];
981986
if (RumPageRightMost(newlPage))
982987
{
983988
Size newTotalsize;
@@ -988,8 +993,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
988993
*/
989994
while (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)) <
994998
2 * RumDataPageSize - 2 * maxItemSize - 2 * MAXIMUM_ALIGNOF
995999
)
@@ -1001,15 +1005,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10011005

10021006
prevIptr = item.iptr;
10031007
if (maxItemIndex < btree->nitem)
1004-
item.iptr = btree->items[maxItemIndex];
1008+
item = btree->items[maxItemIndex];
10051009
}
10061010
}
10071011
else
10081012
{
10091013
prevTotalsize = totalsize;
10101014
totalsize = 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);
10141017
maxItemIndex++;
10151018

@@ -1038,14 +1041,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10381041
while (btree->curitem < maxItemIndex)
10391042
{
10401043
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,
10441047
&prevIptr, btree->rumstate);
10451048
freespace = RumDataPageFreeSpacePre(page, ptr);
10461049
Assert(freespace >= 0);
10471050

1048-
prevIptr = btree->items[btree->curitem];
1051+
prevIptr = btree->items[btree->curitem].iptr;
10491052
btree->curitem++;
10501053

10511054
CHECK_SWITCH_TO_RPAGE;
@@ -1070,14 +1073,14 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10701073
while (btree->curitem < maxItemIndex)
10711074
{
10721075
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,
10761079
&prevIptr, btree->rumstate);
10771080
freespace = RumDataPageFreeSpacePre(page, ptr);
10781081
Assert(freespace >= 0);
10791082

1080-
prevIptr = btree->items[btree->curitem];
1083+
prevIptr = btree->items[btree->curitem].iptr;
10811084
btree->curitem++;
10821085

10831086
CHECK_SWITCH_TO_RPAGE;
@@ -1138,7 +1141,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
11381141
maxoff * sizeof(ItemPointerData) < 2 * (freeSpace - sizeof(ItemPointerData)))
11391142
{
11401143
memcpy(vector + maxoff * sizeof(ItemPointerData),
1141-
btree->items + btree->curitem,
1144+
&btree->items[btree->curitem].iptr,
11421145
sizeof(ItemPointerData));
11431146
maxoff++;
11441147
nCopied++;
@@ -1152,7 +1155,7 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
11521155
memmove(ptr + sizeofitem, ptr, (maxoff - off + 1) * sizeofitem);
11531156
if (RumPageIsLeaf(newlPage))
11541157
{
1155-
memcpy(ptr, btree->items + btree->curitem, sizeofitem);
1158+
memcpy(ptr, &btree->items[btree->curitem].iptr, sizeofitem);
11561159
btree->curitem++;
11571160
}
11581161
else
@@ -1396,21 +1399,9 @@ rumInsertItemPointers(RumState *rumstate,
13961399
RumKey *items, uint32 nitem,
13971400
GinStatsData *buildStats)
13981401
{
1399-
int i;
1400-
14011402
BlockNumber 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;
14141405
gdi->btree.nitem = nitem;
14151406
gdi->btree.curitem = 0;
14161407

0 commit comments

Comments
 (0)