Skip to content

Commit ba30d78

Browse files
author
Artur Zakirov
committed
Working on RumKey
1 parent d0aa83e commit ba30d78

File tree

8 files changed

+271
-325
lines changed

8 files changed

+271
-325
lines changed

rum.h

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,7 @@ extern bool ruminsert(Relation index, Datum *values, bool *isnull,
405405
IndexUniqueCheck checkUnique);
406406
extern void rumEntryInsert(RumState *rumstate,
407407
OffsetNumber attnum, Datum key, RumNullCategory category,
408-
ItemPointerData *items, Datum *addInfo,
409-
bool *addInfoIsNull, uint32 nitem,
410-
GinStatsData *buildStats);
408+
RumKey *items, uint32 nitem, GinStatsData *buildStats);
411409

412410
/* rumbtree.c */
413411

@@ -483,7 +481,9 @@ extern void rumEntryFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rb
483481
Page page, Page lpage, Page rpage);
484482
extern IndexTuple rumPageGetLinkItup(Buffer buf, Page page);
485483
extern void rumReadTuple(RumState *rumstate, OffsetNumber attnum,
486-
IndexTuple itup, ItemPointerData *ipd, Datum *addInfo, bool *addInfoIsNull);
484+
IndexTuple itup, RumKey *items);
485+
extern void rumReadTuplePointers(RumState *rumstate, OffsetNumber attnum,
486+
IndexTuple itup, ItemPointerData *ipd);
487487
extern ItemPointerData updateItemIndexes(Page page, OffsetNumber attnum, RumState *rumstate);
488488
extern void checkLeafDataPage(RumState *rumstate, AttrNumber attrnum, Page page);
489489

@@ -496,10 +496,8 @@ extern Pointer rumPlaceToDataPageLeaf(Pointer ptr, OffsetNumber attnum,
496496
extern Size rumCheckPlaceToDataPageLeaf(OffsetNumber attnum,
497497
ItemPointer iptr, Datum addInfo, bool addInfoIsNull, ItemPointer prev,
498498
RumState *rumstate, Size size);
499-
extern uint32 rumMergeItemPointers(RumState *rumstate,
500-
ItemPointerData *dst, Datum *dst2, bool *dst3,
501-
ItemPointerData *a, Datum *a2, bool *a3, uint32 na,
502-
ItemPointerData *b, Datum * b2, bool *b3, uint32 nb);
499+
extern uint32 rumMergeItemPointers(RumState *rumstate, RumKey *dst,
500+
RumKey *a, uint32 na, RumKey *b, uint32 nb);
503501
extern void RumDataPageAddItem(Page page, void *data, OffsetNumber offset);
504502
extern void RumPageDeletePostingItem(Page page, OffsetNumber offset);
505503

@@ -514,10 +512,7 @@ extern RumPostingTreeScan *rumPrepareScanPostingTree(Relation index,
514512
extern void rumInsertItemPointers(RumState *rumstate,
515513
OffsetNumber attnum,
516514
RumPostingTreeScan *gdi,
517-
ItemPointerData *items,
518-
Datum *addInfo,
519-
bool *addInfoIsNull,
520-
uint32 nitem,
515+
RumKey *items, uint32 nitem,
521516
GinStatsData *buildStats);
522517
extern Buffer rumScanBeginPostingTree(RumPostingTreeScan *gdi);
523518
extern void rumDataFillRoot(RumBtree btree, Buffer root, Buffer lbuf, Buffer rbuf,
@@ -834,18 +829,18 @@ rumDataPageLeafReadItemPointer(char *ptr, ItemPointer iptr, bool *addInfoIsNull)
834829
* passed in order to read the first item pointer.
835830
*/
836831
static inline Pointer
837-
rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
838-
Datum *addInfo, bool *addInfoIsNull, RumState *rumstate)
832+
rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, RumKey *item,
833+
RumState *rumstate, bool readAddInfo)
839834
{
840835
Form_pg_attribute attr;
841836
bool isNull;
842837

843-
ptr = rumDataPageLeafReadItemPointer(ptr, iptr, &isNull);
838+
ptr = rumDataPageLeafReadItemPointer(ptr, &item->iptr, &isNull);
844839

845-
Assert(iptr->ip_posid != InvalidOffsetNumber);
840+
Assert(item->iptr.ip_posid != InvalidOffsetNumber);
846841

847-
if (addInfoIsNull)
848-
*addInfoIsNull = isNull;
842+
if (readAddInfo)
843+
item->addInfoIsNull = isNull;
849844

850845
if (!isNull)
851846
{
@@ -854,7 +849,7 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
854849
if (attr->attbyval)
855850
{
856851
/* do not use aligment for pass-by-value types */
857-
if (addInfo)
852+
if (readAddInfo)
858853
{
859854
union {
860855
int16 i16;
@@ -864,19 +859,19 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
864859
switch(attr->attlen)
865860
{
866861
case sizeof(char):
867-
*addInfo = Int8GetDatum(*ptr);
862+
item->addInfo = Int8GetDatum(*ptr);
868863
break;
869864
case sizeof(int16):
870865
memcpy(&u.i16, ptr, sizeof(int16));
871-
*addInfo = Int16GetDatum(u.i16);
866+
item->addInfo = Int16GetDatum(u.i16);
872867
break;
873868
case sizeof(int32):
874869
memcpy(&u.i32, ptr, sizeof(int32));
875-
*addInfo = Int32GetDatum(u.i32);
870+
item->addInfo = Int32GetDatum(u.i32);
876871
break;
877872
#if SIZEOF_DATUM == 8
878873
case sizeof(Datum):
879-
memcpy(addInfo, ptr, sizeof(Datum));
874+
memcpy(&item->addInfo, ptr, sizeof(Datum));
880875
break;
881876
#endif
882877
default:
@@ -888,8 +883,8 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
888883
else
889884
{
890885
ptr = (Pointer) att_align_pointer(ptr, attr->attalign, attr->attlen, ptr);
891-
if (addInfo)
892-
*addInfo = fetch_att(ptr, attr->attbyval, attr->attlen);
886+
if (readAddInfo)
887+
item->addInfo = fetch_att(ptr, attr->attbyval, attr->attlen);
893888
}
894889

895890
ptr = (Pointer) att_addlength_pointer(ptr, attr->attlen, ptr);

0 commit comments

Comments
 (0)