diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2018-02-28 19:25:54 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2018-02-28 19:25:54 -0500 |
commit | d79e7e92bf2a44415e1dcbd74274eb79852fc885 (patch) | |
tree | 19d76d46e6e61dbad53fd5ae0bd787debac372a7 /src/backend/access/nbtree/nbtxlog.c | |
parent | d3b851e9a3c9f994e78ba9ec4e11e4eae0c72ec7 (diff) |
Remove redundant IndexTupleDSize macro.
Use IndexTupleSize everywhere, instead. Also, remove IndexTupleSize's
internal typecast, as that's not really needed and might mask coding
errors. Change some pointer variable datatypes in the call sites
to compensate for that and make it clearer what we're assuming.
Ildar Musin, Robert Haas, Stephen Frost
Discussion: https://postgr.es/m/0274288e-9e88-13b6-c61c-7b36928bf221@postgrespro.ru
Diffstat (limited to 'src/backend/access/nbtree/nbtxlog.c')
-rw-r--r-- | src/backend/access/nbtree/nbtxlog.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index bed1dd2a098..233c3965d95 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -51,9 +51,15 @@ _bt_restore_page(Page page, char *from, int len) i = 0; while (from < end) { - /* Need to copy tuple header due to alignment considerations */ + /* + * As we step through the items, 'from' won't always be properly + * aligned, so we need to use memcpy(). Further, we use Item (which + * is just a char*) here for our items array for the same reason; + * wouldn't want the compiler or anyone thinking that an item is + * aligned when it isn't. + */ memcpy(&itupdata, from, sizeof(IndexTupleData)); - itemsz = IndexTupleDSize(itupdata); + itemsz = IndexTupleSize(&itupdata); itemsz = MAXALIGN(itemsz); items[i] = (Item) from; @@ -205,7 +211,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) BTPageOpaque ropaque; char *datapos; Size datalen; - Item left_hikey = NULL; + IndexTuple left_hikey = NULL; Size left_hikeysz = 0; BlockNumber leftsib; BlockNumber rightsib; @@ -248,7 +254,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) { ItemId hiItemId = PageGetItemId(rpage, P_FIRSTDATAKEY(ropaque)); - left_hikey = PageGetItem(rpage, hiItemId); + left_hikey = (IndexTuple) PageGetItem(rpage, hiItemId); left_hikeysz = ItemIdGetLength(hiItemId); } @@ -272,7 +278,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) Page lpage = (Page) BufferGetPage(lbuf); BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); OffsetNumber off; - Item newitem = NULL; + IndexTuple newitem = NULL; Size newitemsz = 0; Page newlpage; OffsetNumber leftoff; @@ -281,7 +287,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) if (onleft) { - newitem = (Item) datapos; + newitem = (IndexTuple) datapos; newitemsz = MAXALIGN(IndexTupleSize(newitem)); datapos += newitemsz; datalen -= newitemsz; @@ -290,7 +296,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) /* Extract left hikey and its size (assuming 16-bit alignment) */ if (!isleaf) { - left_hikey = (Item) datapos; + left_hikey = (IndexTuple) datapos; left_hikeysz = MAXALIGN(IndexTupleSize(left_hikey)); datapos += left_hikeysz; datalen -= left_hikeysz; @@ -301,7 +307,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) /* Set high key */ leftoff = P_HIKEY; - if (PageAddItem(newlpage, left_hikey, left_hikeysz, + if (PageAddItem(newlpage, (Item) left_hikey, left_hikeysz, P_HIKEY, false, false) == InvalidOffsetNumber) elog(PANIC, "failed to add high key to left page after split"); leftoff = OffsetNumberNext(leftoff); @@ -310,12 +316,12 @@ btree_xlog_split(bool onleft, XLogReaderState *record) { ItemId itemid; Size itemsz; - Item item; + IndexTuple item; /* add the new item if it was inserted on left page */ if (onleft && off == xlrec->newitemoff) { - if (PageAddItem(newlpage, newitem, newitemsz, leftoff, + if (PageAddItem(newlpage, (Item) newitem, newitemsz, leftoff, false, false) == InvalidOffsetNumber) elog(ERROR, "failed to add new item to left page after split"); leftoff = OffsetNumberNext(leftoff); @@ -323,8 +329,8 @@ btree_xlog_split(bool onleft, XLogReaderState *record) itemid = PageGetItemId(lpage, off); itemsz = ItemIdGetLength(itemid); - item = PageGetItem(lpage, itemid); - if (PageAddItem(newlpage, item, itemsz, leftoff, + item = (IndexTuple) PageGetItem(lpage, itemid); + if (PageAddItem(newlpage, (Item) item, itemsz, leftoff, false, false) == InvalidOffsetNumber) elog(ERROR, "failed to add old item to left page after split"); leftoff = OffsetNumberNext(leftoff); @@ -333,7 +339,7 @@ btree_xlog_split(bool onleft, XLogReaderState *record) /* cope with possibility that newitem goes at the end */ if (onleft && off == xlrec->newitemoff) { - if (PageAddItem(newlpage, newitem, newitemsz, leftoff, + if (PageAddItem(newlpage, (Item) newitem, newitemsz, leftoff, false, false) == InvalidOffsetNumber) elog(ERROR, "failed to add new item to left page after split"); leftoff = OffsetNumberNext(leftoff); |