v1-0001-Fix-DESC-skip-array-preprocessing-bug.patch
application/octet-stream
Filename: v1-0001-Fix-DESC-skip-array-preprocessing-bug.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0001
Subject: Fix DESC skip array preprocessing bug.
| File | + | − |
|---|---|---|
| src/backend/access/nbtree/nbtpreprocesskeys.c | 14 | 4 |
From c73094ca48c61d873f0ab4df31f69f443552275b Mon Sep 17 00:00:00 2001 From: Peter Geoghegan <pg@bowt.ie> Date: Thu, 11 Sep 2025 12:41:08 -0400 Subject: [PATCH v1] Fix DESC skip array preprocessing bug. --- src/backend/access/nbtree/nbtpreprocesskeys.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/backend/access/nbtree/nbtpreprocesskeys.c b/src/backend/access/nbtree/nbtpreprocesskeys.c index 0a347d272..852fcef28 100644 --- a/src/backend/access/nbtree/nbtpreprocesskeys.c +++ b/src/backend/access/nbtree/nbtpreprocesskeys.c @@ -1576,8 +1576,13 @@ _bt_skiparray_strat_decrement(IndexScanDesc scan, ScanKey arraysk, } /* Look up <= operator (might fail) */ - leop = get_opfamily_member(opfamily, opcintype, opcintype, - BTLessEqualStrategyNumber); + if (!(high_compare->sk_flags & SK_BT_DESC)) + leop = get_opfamily_member(opfamily, opcintype, opcintype, + BTLessEqualStrategyNumber); + else + leop = get_opfamily_member(opfamily, opcintype, opcintype, + BTGreaterEqualStrategyNumber); + if (!OidIsValid(leop)) return; cmp_proc = get_opcode(leop); @@ -1628,8 +1633,13 @@ _bt_skiparray_strat_increment(IndexScanDesc scan, ScanKey arraysk, } /* Look up >= operator (might fail) */ - geop = get_opfamily_member(opfamily, opcintype, opcintype, - BTGreaterEqualStrategyNumber); + if (!(low_compare->sk_flags & SK_BT_DESC)) + geop = get_opfamily_member(opfamily, opcintype, opcintype, + BTGreaterEqualStrategyNumber); + else + geop = get_opfamily_member(opfamily, opcintype, opcintype, + BTLessEqualStrategyNumber); + if (!OidIsValid(geop)) return; cmp_proc = get_opcode(geop); -- 2.51.0