nbtree: Remove useless row compare arg.
authorPeter Geoghegan <pg@bowt.ie>
Thu, 5 Jun 2025 18:50:43 +0000 (14:50 -0400)
committerPeter Geoghegan <pg@bowt.ie>
Thu, 5 Jun 2025 18:50:43 +0000 (14:50 -0400)
Use of a RowCompare key makes nbtree index scans ineligible to use
pstate.forcenonrequired following recent bugfix commit 5f4d98d4.
There's no longer any need for _bt_check_rowcompare to accept a
forcenonrequired argument, so remove it.

src/backend/access/nbtree/nbtutils.c

index 1a15dfcb7d357f6e73990a40cf8f0470c68bb08f..e0aa83fc8897bb66b19b096b72503d726a153bc2 100644 (file)
@@ -63,7 +63,7 @@ static bool _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
                              bool *continuescan, int *ikey);
 static bool _bt_check_rowcompare(ScanKey skey,
                                 IndexTuple tuple, int tupnatts, TupleDesc tupdesc,
-                                ScanDirection dir, bool forcenonrequired, bool *continuescan);
+                                ScanDirection dir, bool *continuescan);
 static void _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate,
                                     int tupnatts, TupleDesc tupdesc);
 static int _bt_keep_natts(Relation rel, IndexTuple lastleft,
@@ -2902,8 +2902,10 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
        /* row-comparison keys need special processing */
        if (key->sk_flags & SK_ROW_HEADER)
        {
+           Assert(!forcenonrequired);  /* forbidden by _bt_set_startikey */
+
            if (_bt_check_rowcompare(key, tuple, tupnatts, tupdesc, dir,
-                                    forcenonrequired, continuescan))
+                                    continuescan))
                continue;
            return false;
        }
@@ -3060,8 +3062,7 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
  */
 static bool
 _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
-                    TupleDesc tupdesc, ScanDirection dir,
-                    bool forcenonrequired, bool *continuescan)
+                    TupleDesc tupdesc, ScanDirection dir, bool *continuescan)
 {
    ScanKey     subkey = (ScanKey) DatumGetPointer(skey->sk_argument);
    int32       cmpresult = 0;
@@ -3101,11 +3102,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
 
        if (isNull)
        {
-           if (forcenonrequired)
-           {
-               /* treating scan's keys as non-required */
-           }
-           else if (subkey->sk_flags & SK_BT_NULLS_FIRST)
+           if (subkey->sk_flags & SK_BT_NULLS_FIRST)
            {
                /*
                 * Since NULLs are sorted before non-NULLs, we know we have
@@ -3159,12 +3156,8 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
             */
            Assert(subkey != (ScanKey) DatumGetPointer(skey->sk_argument));
            subkey--;
-           if (forcenonrequired)
-           {
-               /* treating scan's keys as non-required */
-           }
-           else if ((subkey->sk_flags & SK_BT_REQFWD) &&
-                    ScanDirectionIsForward(dir))
+           if ((subkey->sk_flags & SK_BT_REQFWD) &&
+               ScanDirectionIsForward(dir))
                *continuescan = false;
            else if ((subkey->sk_flags & SK_BT_REQBKWD) &&
                     ScanDirectionIsBackward(dir))
@@ -3216,7 +3209,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
            break;
    }
 
-   if (!result && !forcenonrequired)
+   if (!result)
    {
        /*
         * Tuple fails this qual.  If it's a required qual for the current