From 931ca85fb075310ba19ea3e32164eb42adf9687c Mon Sep 17 00:00:00 2001 From: wq Date: Fri, 30 Aug 2024 16:01:00 +0800 Subject: [PATCH] bt Scankey in another contradictory case --- src/backend/access/nbtree/nbtutils.c | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index c22ccec789..d509b727c1 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -2784,6 +2784,47 @@ _bt_preprocess_keys(IndexScanDesc scan) xform[BTGreaterStrategyNumber - 1].skey = NULL; } } + /* maybe , detect the contradictory case that like x <4 and x >10 */ + bool macthed = true; + ScanKey op, left, right; + + if (xform[BTGreaterStrategyNumber - 1].skey) + { + op = right = xform[BTGreaterStrategyNumber - 1].skey; + if (xform[BTLessStrategyNumber - 1].skey) + left = xform[BTLessStrategyNumber - 1].skey; + else if (xform[BTLessEqualStrategyNumber - 1].skey) + left = xform[BTLessEqualStrategyNumber - 1].skey; + else + macthed = false; + } + else if (xform[BTLessStrategyNumber - 1].skey) + { + op = right = xform[BTLessStrategyNumber - 1].skey; + if (xform[BTGreaterStrategyNumber - 1].skey) + left = xform[BTGreaterStrategyNumber - 1].skey; + else if (xform[BTGreaterEqualStrategyNumber - 1].skey) + left = xform[BTGreaterEqualStrategyNumber - 1].skey; + else + macthed = false; + } + else if (xform[BTLessEqualStrategyNumber - 1].skey + && xform[BTGreaterEqualStrategyNumber - 1].skey) + { + op = right = xform[BTGreaterEqualStrategyNumber - 1].skey; + left = xform[BTLessEqualStrategyNumber - 1].skey; + } + else + macthed = false; + if (macthed && _bt_compare_scankey_args(scan, op, left, right, NULL, NULL, + &test_result)) + { + if (!test_result) + { + so->qual_ok = false; + return; + } + } /* * Emit the cleaned-up keys into the outkeys[] array, and then -- 2.39.1.windows.1