Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit353ea47

Browse files
author
Artur Zakirov
committed
Fixed rumDataPageLeafRead(), added rumDataPageLeafReadPointer()
1 parent72a178a commit353ea47

File tree

5 files changed

+72
-50
lines changed

5 files changed

+72
-50
lines changed

‎rum.h

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ rumDataPageLeafReadItemPointer(char *ptr, ItemPointer iptr, bool *addInfoIsNull)
827827
*/
828828
staticinlinePointer
829829
rumDataPageLeafRead(Pointerptr,OffsetNumberattnum,RumKey*item,
830-
RumState*rumstate,boolreadAddInfo)
830+
RumState*rumstate)
831831
{
832832
Form_pg_attributeattr;
833833
boolisNull;
@@ -836,8 +836,7 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, RumKey *item,
836836

837837
Assert(item->iptr.ip_posid!=InvalidOffsetNumber);
838838

839-
if (readAddInfo)
840-
item->addInfoIsNull=isNull;
839+
item->addInfoIsNull=isNull;
841840

842841
if (!isNull)
843842
{
@@ -846,49 +845,74 @@ rumDataPageLeafRead(Pointer ptr, OffsetNumber attnum, RumKey *item,
846845
if (attr->attbyval)
847846
{
848847
/* do not use aligment for pass-by-value types */
849-
if (readAddInfo)
848+
union {
849+
int16i16;
850+
int32i32;
851+
}u;
852+
853+
switch(attr->attlen)
850854
{
851-
union {
852-
int16i16;
853-
int32i32;
854-
}u;
855-
856-
switch(attr->attlen)
857-
{
858-
casesizeof(char):
859-
item->addInfo=Int8GetDatum(*ptr);
860-
break;
861-
casesizeof(int16):
862-
memcpy(&u.i16,ptr,sizeof(int16));
863-
item->addInfo=Int16GetDatum(u.i16);
864-
break;
865-
casesizeof(int32):
866-
memcpy(&u.i32,ptr,sizeof(int32));
867-
item->addInfo=Int32GetDatum(u.i32);
868-
break;
855+
casesizeof(char):
856+
item->addInfo=Int8GetDatum(*ptr);
857+
break;
858+
casesizeof(int16):
859+
memcpy(&u.i16,ptr,sizeof(int16));
860+
item->addInfo=Int16GetDatum(u.i16);
861+
break;
862+
casesizeof(int32):
863+
memcpy(&u.i32,ptr,sizeof(int32));
864+
item->addInfo=Int32GetDatum(u.i32);
865+
break;
869866
#ifSIZEOF_DATUM==8
870-
casesizeof(Datum):
871-
memcpy(&item->addInfo,ptr,sizeof(Datum));
872-
break;
867+
casesizeof(Datum):
868+
memcpy(&item->addInfo,ptr,sizeof(Datum));
869+
break;
873870
#endif
874-
default:
875-
elog(ERROR,"unsupported byval length: %d",
876-
(int) (attr->attlen));
877-
}
871+
default:
872+
elog(ERROR,"unsupported byval length: %d",
873+
(int) (attr->attlen));
878874
}
879875
}
880876
else
881877
{
882878
ptr= (Pointer)att_align_pointer(ptr,attr->attalign,attr->attlen,ptr);
883-
if (readAddInfo)
884-
item->addInfo=fetch_att(ptr,attr->attbyval,attr->attlen);
879+
item->addInfo=fetch_att(ptr,attr->attbyval,attr->attlen);
885880
}
886881

887882
ptr= (Pointer)att_addlength_pointer(ptr,attr->attlen,ptr);
888883
}
889884
returnptr;
890885
}
891886

887+
/*
888+
* Reads next item pointer from leaf data page.
889+
* Replaces current item pointer with the next one. Zero item pointer should be
890+
* passed in order to read the first item pointer.
891+
*/
892+
staticinlinePointer
893+
rumDataPageLeafReadPointer(Pointerptr,OffsetNumberattnum,RumKey*item,
894+
RumState*rumstate)
895+
{
896+
Form_pg_attributeattr;
897+
boolisNull;
898+
899+
ptr=rumDataPageLeafReadItemPointer(ptr,&item->iptr,&isNull);
900+
901+
Assert(item->iptr.ip_posid!=InvalidOffsetNumber);
902+
903+
if (!isNull)
904+
{
905+
attr=rumstate->addAttrs[attnum-1];
906+
907+
if (!attr->attbyval)
908+
ptr= (Pointer)att_align_pointer(ptr,attr->attalign,attr->attlen,
909+
ptr);
910+
911+
ptr= (Pointer)att_addlength_pointer(ptr,attr->attlen,ptr);
912+
}
913+
returnptr;
914+
}
915+
892916
externDatumFunctionCall10Coll(FmgrInfo*flinfo,Oidcollation,
893917
Datumarg1,Datumarg2,
894918
Datumarg3,Datumarg4,Datumarg5,

‎rumdatapage.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ findInLeafPage(RumBtree btree, Page page, OffsetNumber *offset,
518518
{
519519
*ptrOut=ptr;
520520
*iptrOut=item.iptr;
521-
ptr=rumDataPageLeafRead(ptr,btree->entryAttnum,&item,
522-
btree->rumstate, false);
521+
ptr=rumDataPageLeafReadPointer(ptr,btree->entryAttnum,&item,
522+
btree->rumstate);
523523

524524
cmp=rumCompareItemPointers(&btree->items[btree->curitem].iptr,
525525
&item.iptr);
@@ -844,8 +844,7 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
844844
for (j=off;j <=maxoff;j++)
845845
{
846846
copy_ptr=rumDataPageLeafRead(copy_ptr,btree->entryAttnum,
847-
&copy_item,btree->rumstate,
848-
true);
847+
&copy_item,btree->rumstate);
849848
ptr=rumPlaceToDataPageLeaf(ptr,btree->entryAttnum,&copy_item,
850849
&iptr,btree->rumstate);
851850

@@ -952,7 +951,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
952951

953952
prevIptr=item.iptr;
954953
copyPtr=rumDataPageLeafRead(copyPtr,btree->entryAttnum,&item,
955-
btree->rumstate, true);
954+
btree->rumstate);
956955

957956
prevTotalsize=totalsize;
958957
totalsize=rumCheckPlaceToDataPageLeaf(btree->entryAttnum,
@@ -1032,7 +1031,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10321031
}
10331032

10341033
copyPtr=rumDataPageLeafRead(copyPtr,btree->entryAttnum,&item,
1035-
btree->rumstate, true);
1034+
btree->rumstate);
10361035

10371036
ptr=rumPlaceToDataPageLeaf(ptr,btree->entryAttnum,&item,
10381037
&prevIptr,btree->rumstate);
@@ -1227,7 +1226,7 @@ updateItemIndexes(Page page, OffsetNumber attnum, RumState *rumstate)
12271226
RumPageGetIndexes(page)[j].pageOffset=ptr-RumDataPageGetData(page);
12281227
j++;
12291228
}
1230-
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate, false);
1229+
ptr=rumDataPageLeafReadPointer(ptr,attnum,&item,rumstate);
12311230
}
12321231
/* Fill rest of page indexes with InvalidOffsetNumber if any */
12331232
for (;j<RumDataLeafIndexCount;j++)
@@ -1266,7 +1265,7 @@ checkLeafDataPage(RumState *rumstate, AttrNumber attnum, Page page)
12661265
Assert(RumPageGetOpaque(page)->flags&RUM_LEAF);
12671266

12681267
for(i=FirstOffsetNumber;i <=maxoff;i++)
1269-
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate, false);
1268+
ptr=rumDataPageLeafReadPointer(ptr,attnum,&item,rumstate);
12701269

12711270
Assert((char*)RumPageGetIndexes(page)==page+ ((PageHeader)page)->pd_upper);
12721271

@@ -1289,8 +1288,8 @@ checkLeafDataPage(RumState *rumstate, AttrNumber attnum, Page page)
12891288
if (i!=RumDataLeafIndexCount-1)
12901289
{
12911290
item.iptr=index->iptr;
1292-
rumDataPageLeafRead(RumDataPageGetData(page)+index->pageOffset,
1293-
attnum,&item,rumstate, false);
1291+
rumDataPageLeafReadPointer(RumDataPageGetData(page)+index->pageOffset,
1292+
attnum,&item,rumstate);
12941293
}
12951294
}
12961295
}

‎rumentrypage.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ rumReadTuple(RumState *rumstate, OffsetNumber attnum,
3131
ItemPointerSetMin(&item.iptr);
3232
for (i=0;i<nipd;i++)
3333
{
34-
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate, true);
34+
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate);
3535
items[i]=item;
3636
}
3737
}
@@ -52,7 +52,7 @@ rumReadTuplePointers(RumState *rumstate, OffsetNumber attnum,
5252
ItemPointerSetMin(&item.iptr);
5353
for (i=0;i<nipd;i++)
5454
{
55-
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate, false);
55+
ptr=rumDataPageLeafReadPointer(ptr,attnum,&item,rumstate);
5656
ipd[i]=item.iptr;
5757
}
5858
}

‎rumget.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ findItemInPostingPage(Page page, ItemPointer item, OffsetNumber *off,
130130
*/
131131
for (*off=FirstOffsetNumber;*off <=maxoff; (*off)++)
132132
{
133-
ptr=rumDataPageLeafRead(ptr,attnum,&iter_item,rumstate, false);
133+
ptr=rumDataPageLeafReadPointer(ptr,attnum,&iter_item,rumstate);
134134

135135
res=rumCompareItemPointers(item,&iter_item.iptr);
136136
if (res <=0)
@@ -206,7 +206,7 @@ scanPostingTree(Relation index, RumScanEntry scanEntry,
206206
ptr=RumDataPageGetData(page);
207207
for (i=FirstOffsetNumber;i <=maxoff;i++)
208208
{
209-
ptr=rumDataPageLeafRead(ptr,attnum,&item,rumstate, false);
209+
ptr=rumDataPageLeafReadPointer(ptr,attnum,&item,rumstate);
210210
tbm_add_tuples(scanEntry->matchBitmap,&item.iptr,1, false);
211211
}
212212

@@ -539,8 +539,7 @@ startScanEntry(RumState *rumstate, RumScanEntry entry)
539539

540540
for (i=FirstOffsetNumber;i <=maxoff;i=OffsetNumberNext(i))
541541
{
542-
ptr=rumDataPageLeafRead(ptr,entry->attnum,&item,rumstate,
543-
true);
542+
ptr=rumDataPageLeafRead(ptr,entry->attnum,&item,rumstate);
544543
entry->list[i-FirstOffsetNumber]=item;
545544
}
546545

@@ -763,7 +762,7 @@ entryGetNextItem(RumState *rumstate, RumScanEntry entry)
763762
for (i=FirstOffsetNumber;i <=maxoff;i=OffsetNumberNext(i))
764763
{
765764
ptr=rumDataPageLeafRead(ptr,entry->attnum,&item,
766-
rumstate, true);
765+
rumstate);
767766
entry->list[i-FirstOffsetNumber]=item;
768767
}
769768

@@ -1284,7 +1283,7 @@ scanPage(RumState *rumstate, RumScanEntry entry, ItemPointer item, Page page, bo
12841283
found= false;
12851284
for (i=first;i <=maxoff;i++)
12861285
{
1287-
ptr=rumDataPageLeafRead(ptr,entry->attnum,&iter_item,rumstate, true);
1286+
ptr=rumDataPageLeafRead(ptr,entry->attnum,&iter_item,rumstate);
12881287
entry->list[i-first]=iter_item;
12891288

12901289
cmp=rumCompareItemPointers(item,&iter_item.iptr);

‎rumvacuum.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ rumVacuumPostingList(RumVacuumState *gvs, OffsetNumber attnum, Pointer src,
5959
for (i=0;i<nitem;i++)
6060
{
6161
prev=ptr;
62-
ptr=rumDataPageLeafRead(ptr,attnum,&item,&gvs->rumstate, true);
62+
ptr=rumDataPageLeafRead(ptr,attnum,&item,&gvs->rumstate);
6363
if (gvs->callback(&item.iptr,gvs->callback_state))
6464
{
6565
gvs->result->tuples_removed+=1;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp