@@ -405,9 +405,7 @@ extern bool ruminsert(Relation index, Datum *values, bool *isnull,
405405IndexUniqueCheck checkUnique );
406406extern void rumEntryInsert (RumState * rumstate ,
407407OffsetNumber 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
483481Page page ,Page lpage ,Page rpage );
484482extern IndexTuple rumPageGetLinkItup (Buffer buf ,Page page );
485483extern 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 );
487487extern ItemPointerData updateItemIndexes (Page page ,OffsetNumber attnum ,RumState * rumstate );
488488extern void checkLeafDataPage (RumState * rumstate ,AttrNumber attrnum ,Page page );
489489
@@ -496,10 +496,8 @@ extern Pointer rumPlaceToDataPageLeaf(Pointer ptr, OffsetNumber attnum,
496496extern Size rumCheckPlaceToDataPageLeaf (OffsetNumber attnum ,
497497ItemPointer iptr ,Datum addInfo ,bool addInfoIsNull ,ItemPointer prev ,
498498RumState * 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 );
503501extern void RumDataPageAddItem (Page page ,void * data ,OffsetNumber offset );
504502extern void RumPageDeletePostingItem (Page page ,OffsetNumber offset );
505503
@@ -514,10 +512,7 @@ extern RumPostingTreeScan *rumPrepareScanPostingTree(Relation index,
514512extern void rumInsertItemPointers (RumState * rumstate ,
515513OffsetNumber attnum ,
516514RumPostingTreeScan * gdi ,
517- ItemPointerData * items ,
518- Datum * addInfo ,
519- bool * addInfoIsNull ,
520- uint32 nitem ,
515+ RumKey * items ,uint32 nitem ,
521516GinStatsData * buildStats );
522517extern Buffer rumScanBeginPostingTree (RumPostingTreeScan * gdi );
523518extern 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 */
836831static 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{
840835Form_pg_attribute attr ;
841836bool 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
850845if (!isNull )
851846{
@@ -854,7 +849,7 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
854849if (attr -> attbyval )
855850{
856851/* do not use aligment for pass-by-value types */
857- if (addInfo )
852+ if (readAddInfo )
858853{
859854union {
860855int16 i16 ;
@@ -864,19 +859,19 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
864859switch (attr -> attlen )
865860{
866861case sizeof (char ):
867- * addInfo = Int8GetDatum (* ptr );
862+ item -> addInfo = Int8GetDatum (* ptr );
868863break ;
869864case sizeof (int16 ):
870865memcpy (& u .i16 ,ptr ,sizeof (int16 ));
871- * addInfo = Int16GetDatum (u .i16 );
866+ item -> addInfo = Int16GetDatum (u .i16 );
872867break ;
873868case sizeof (int32 ):
874869memcpy (& u .i32 ,ptr ,sizeof (int32 ));
875- * addInfo = Int32GetDatum (u .i32 );
870+ item -> addInfo = Int32GetDatum (u .i32 );
876871break ;
877872#if SIZEOF_DATUM == 8
878873case sizeof (Datum ):
879- memcpy (addInfo ,ptr ,sizeof (Datum ));
874+ memcpy (& item -> addInfo ,ptr ,sizeof (Datum ));
880875break ;
881876#endif
882877default :
@@ -888,8 +883,8 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, ItemPointer iptr,
888883else
889884{
890885ptr = (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
895890ptr = (Pointer )att_addlength_pointer (ptr ,attr -> attlen ,ptr );