v21.2-0002-Add-get_opfamily_member_for_cmptype.patch

text/plain

Filename: v21.2-0002-Add-get_opfamily_member_for_cmptype.patch
Type: text/plain
Part: 1
Message: Re: Index AM API cleanup

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 v21-0002
Subject: Add get_opfamily_member_for_cmptype()
File+
src/backend/utils/cache/lsyscache.c 20 0
src/include/utils/lsyscache.h 3 0
From d6788595aa64dbb8fe55703cfec1b9368fe3c245 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Wed, 12 Mar 2025 14:07:34 +0100
Subject: [PATCH v21.2 2/4] Add get_opfamily_member_for_cmptype()

---
 src/backend/utils/cache/lsyscache.c | 20 ++++++++++++++++++++
 src/include/utils/lsyscache.h       |  3 +++
 2 files changed, 23 insertions(+)

diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index 9f7c0315052..2151d8d0915 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -184,6 +184,26 @@ get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype,
 	return result;
 }
 
+/*
+ * get_opfamily_member_for_cmptype
+ *		Get the OID of the operator that implements the specified comparison
+ *		type with the specified datatypes for the specified opfamily.
+ *
+ * Returns InvalidOid if there is no pg_amop entry for the given keys.
+ */
+Oid
+get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype,
+								CompareType cmptype)
+{
+	Oid opmethod;
+	StrategyNumber  strategy;
+
+	opmethod = get_opfamily_method(opfamily);
+	strategy = IndexAmTranslateCompareType(cmptype, opmethod, opfamily, false);
+
+	return get_opfamily_member(opfamily, lefttype, righttype, strategy);
+}
+
 /*
  * get_ordering_op_properties
  *		Given the OID of an ordering operator (a btree "<" or ">" operator),
diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h
index 271eac2f0e1..d42380a0d46 100644
--- a/src/include/utils/lsyscache.h
+++ b/src/include/utils/lsyscache.h
@@ -14,6 +14,7 @@
 #define LSYSCACHE_H
 
 #include "access/attnum.h"
+#include "access/cmptype.h"
 #include "access/htup.h"
 #include "nodes/pg_list.h"
 
@@ -74,6 +75,8 @@ extern void get_op_opfamily_properties(Oid opno, Oid opfamily, bool ordering_op,
 									   Oid *righttype);
 extern Oid	get_opfamily_member(Oid opfamily, Oid lefttype, Oid righttype,
 								int16 strategy);
+extern Oid	get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype,
+											CompareType cmptype);
 extern bool get_ordering_op_properties(Oid opno,
 									   Oid *opfamily, Oid *opcintype, int16 *strategy);
 extern Oid	get_equality_op_for_ordering_op(Oid opno, bool *reverse);
-- 
2.48.1