@@ -905,9 +905,18 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
905
905
if (stopAppend )
906
906
/* there is no free space on page */
907
907
break ;
908
- else
908
+ else if ( RumPageRightMost ( page ))
909
909
/* force insertion of new item */
910
910
cmp = 1 ;
911
+ else if ((cmp = compareRumKey (btree -> rumstate , btree -> entryAttnum ,
912
+ RumDataPageGetRightBound (page ),
913
+ btree -> items + btree -> curitem )) >= 0 )
914
+ {
915
+ /* force insertion of new item */
916
+ }
917
+ else
918
+ /* new items should be inserted on next page */
919
+ break ;
911
920
}
912
921
else if (off <= maxoff )
913
922
{
@@ -930,10 +939,7 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
930
939
copyItemEmpty = true;
931
940
932
941
if (cmp == 0 )
933
- {
934
942
btree -> curitem ++ ;
935
- insertCount ++ ;
936
- }
937
943
}
938
944
else /* if (cmp > 0) */
939
945
{
@@ -957,8 +963,8 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
957
963
958
964
Assert (ptr - oldptr == newItemSize );
959
965
iptr = btree -> items [btree -> curitem ].iptr ;
960
- btree -> curitem ++ ;
961
966
freespace -= newItemSize ;
967
+ btree -> curitem ++ ;
962
968
insertCount ++ ;
963
969
}
964
970
else
@@ -970,7 +976,6 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
970
976
Assert (RumDataPageFreeSpacePre (page , ptr ) >= 0 );
971
977
}
972
978
973
- Assert (insertCount > 0 );
974
979
RumPageGetOpaque (page )-> maxoff += insertCount ;
975
980
976
981
/* Update indexes in the end of page */
@@ -1209,7 +1214,6 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
1209
1214
OffsetNumber maxoff = RumPageGetOpaque (newlPage )-> maxoff ;
1210
1215
Size pageSize = PageGetPageSize (newlPage );
1211
1216
Size freeSpace ;
1212
- uint32 nCopied = 1 ;
1213
1217
1214
1218
static char vector [2 * BLCKSZ ];
1215
1219
@@ -1220,36 +1224,13 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
1220
1224
memcpy (vector , RumDataPageGetItem (newlPage , FirstOffsetNumber ),
1221
1225
maxoff * sizeofitem );
1222
1226
1223
- if (RumPageIsLeaf (newlPage ) && RumPageRightMost (newlPage ) &&
1224
- off > RumPageGetOpaque (newlPage )-> maxoff )
1225
- {
1226
- nCopied = 0 ;
1227
- while (btree -> curitem < btree -> nitem &&
1228
- maxoff * sizeof (ItemPointerData ) < 2 * (freeSpace - sizeof (ItemPointerData )))
1229
- {
1230
- memcpy (vector + maxoff * sizeof (ItemPointerData ),
1231
- & btree -> items [btree -> curitem ].iptr ,
1232
- sizeof (ItemPointerData ));
1233
- maxoff ++ ;
1234
- nCopied ++ ;
1235
- btree -> curitem ++ ;
1236
- }
1237
- }
1238
- else
1239
- {
1240
- ptr = vector + (off - 1 ) * sizeofitem ;
1241
- if (maxoff + 1 - off != 0 )
1242
- memmove (ptr + sizeofitem , ptr , (maxoff - off + 1 ) * sizeofitem );
1243
- if (RumPageIsLeaf (newlPage ))
1244
- {
1245
- memcpy (ptr , & btree -> items [btree -> curitem ].iptr , sizeofitem );
1246
- btree -> curitem ++ ;
1247
- }
1248
- else
1249
- memcpy (ptr , & (btree -> pitem ), sizeofitem );
1227
+ Assert (!RumPageIsLeaf (newlPage ));
1228
+ ptr = vector + (off - 1 ) * sizeofitem ;
1229
+ if (maxoff + 1 - off != 0 )
1230
+ memmove (ptr + sizeofitem , ptr , (maxoff - off + 1 ) * sizeofitem );
1231
+ memcpy (ptr , & (btree -> pitem ), sizeofitem );
1250
1232
1251
- maxoff ++ ;
1252
- }
1233
+ maxoff ++ ;
1253
1234
1254
1235
/*
1255
1236
* we suppose that during index creation table scaned from begin to end,
0 commit comments