]> granicus.if.org Git - postgresql/commitdiff
Add _bt_binsrch() scantid assertion to nbtree.
authorPeter Geoghegan <pg@bowt.ie>
Mon, 9 Sep 2019 18:41:19 +0000 (11:41 -0700)
committerPeter Geoghegan <pg@bowt.ie>
Mon, 9 Sep 2019 18:41:19 +0000 (11:41 -0700)
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.

src/backend/access/nbtree/nbtsearch.c

index 7f77ed24c5c2d5862f6514f4fe3b43dc27a4f1ab..8e512461a0e3c7b94d0fa00cd76efe45278258ac 100644 (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);