From 931ca85fb075310ba19ea3e32164eb42adf9687c Mon Sep 17 00:00:00 2001
From: wq <bigbro_wq@hotmail.com>
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

