mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 13:01:20 +02:00
Make _bt_insertonpg() more like _bt_split().
It seems like a good idea for nbtree's retail insert code to be absolutely consistent with nbtree's page split code for anything that naturally requires equivalent handling. Anything that concerns inserting newitem (which is handled as part of the page split atomic action when a page split is required) should work in exactly the same way. With that in mind, make _bt_insertonpg() handle 'cbuf' in a way that matches _bt_split().
This commit is contained in:
parent
d60cfb6bf2
commit
826ee1a019
@ -1266,8 +1266,11 @@ _bt_insertonpg(Relation rel,
|
|||||||
MarkBufferDirty(metabuf);
|
MarkBufferDirty(metabuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear INCOMPLETE_SPLIT flag on child if inserting a downlink */
|
/*
|
||||||
if (BufferIsValid(cbuf))
|
* Clear INCOMPLETE_SPLIT flag on child if inserting the new item
|
||||||
|
* finishes a split
|
||||||
|
*/
|
||||||
|
if (!isleaf)
|
||||||
{
|
{
|
||||||
Page cpage = BufferGetPage(cbuf);
|
Page cpage = BufferGetPage(cbuf);
|
||||||
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
|
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
|
||||||
@ -1305,13 +1308,9 @@ _bt_insertonpg(Relation rel,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/* Internal page insert, which finishes a split on cbuf */
|
||||||
* Register the left child whose INCOMPLETE_SPLIT flag was
|
|
||||||
* cleared.
|
|
||||||
*/
|
|
||||||
XLogRegisterBuffer(1, cbuf, REGBUF_STANDARD);
|
|
||||||
|
|
||||||
xlinfo = XLOG_BTREE_INSERT_UPPER;
|
xlinfo = XLOG_BTREE_INSERT_UPPER;
|
||||||
|
XLogRegisterBuffer(1, cbuf, REGBUF_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BufferIsValid(metabuf))
|
if (BufferIsValid(metabuf))
|
||||||
@ -1360,7 +1359,7 @@ _bt_insertonpg(Relation rel,
|
|||||||
|
|
||||||
if (BufferIsValid(metabuf))
|
if (BufferIsValid(metabuf))
|
||||||
PageSetLSN(metapg, recptr);
|
PageSetLSN(metapg, recptr);
|
||||||
if (BufferIsValid(cbuf))
|
if (!isleaf)
|
||||||
PageSetLSN(BufferGetPage(cbuf), recptr);
|
PageSetLSN(BufferGetPage(cbuf), recptr);
|
||||||
|
|
||||||
PageSetLSN(page, recptr);
|
PageSetLSN(page, recptr);
|
||||||
@ -1371,7 +1370,7 @@ _bt_insertonpg(Relation rel,
|
|||||||
/* Release subsidiary buffers */
|
/* Release subsidiary buffers */
|
||||||
if (BufferIsValid(metabuf))
|
if (BufferIsValid(metabuf))
|
||||||
_bt_relbuf(rel, metabuf);
|
_bt_relbuf(rel, metabuf);
|
||||||
if (BufferIsValid(cbuf))
|
if (!isleaf)
|
||||||
_bt_relbuf(rel, cbuf);
|
_bt_relbuf(rel, cbuf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1928,7 +1927,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear INCOMPLETE_SPLIT flag on child if inserting the new item finishes
|
* Clear INCOMPLETE_SPLIT flag on child if inserting the new item finishes
|
||||||
* a split.
|
* a split
|
||||||
*/
|
*/
|
||||||
if (!isleaf)
|
if (!isleaf)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user