Add _bt_binsrch() scantid assertion to nbtree.

Assert that _bt_binsrch() binary searches with scantid set in insertion
scankey cannot be performed on leaf pages.  Leaf-level binary searches
where scantid is set must use _bt_binsrch_insert() instead.

_bt_binsrch_insert() is likely to have additional responsibilities in
the future, such as searching within GIN-style posting lists using
scantid.  It seems like a good idea to tighten things up now.
This commit is contained in:
Peter Geoghegan 2019-09-09 11:41:19 -07:00
parent 3146f5257f
commit 55d015bde0
1 changed files with 5 additions and 3 deletions

View File

@ -347,12 +347,14 @@ _bt_binsrch(Relation rel,
int32 result,
cmpval;
/* Requesting nextkey semantics while using scantid seems nonsensical */
Assert(!key->nextkey || key->scantid == NULL);
page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
/* Requesting nextkey semantics while using scantid seems nonsensical */
Assert(!key->nextkey || key->scantid == NULL);
/* scantid-set callers must use _bt_binsrch_insert() on leaf pages */
Assert(!P_ISLEAF(opaque) || key->scantid == NULL);
low = P_FIRSTDATAKEY(opaque);
high = PageGetMaxOffsetNumber(page);