v67-0001-Add-range_get_constructor2-to-lsyscache.patch
text/x-patch
Filename: v67-0001-Add-range_get_constructor2-to-lsyscache.patch
Type: text/x-patch
Part: 2
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 v67-0001
Subject: Add range_get_constructor2 to lsyscache
| File | + | − |
|---|---|---|
| src/backend/utils/cache/lsyscache.c | 25 | 0 |
| src/include/utils/lsyscache.h | 1 | 0 |
From a3a528d65f4fe627248a8257dc3604bf9adcba17 Mon Sep 17 00:00:00 2001
From: "Paul A. Jungwirth" <pj@illuminatedcomputing.com>
Date: Tue, 2 Dec 2025 21:30:13 -0800
Subject: [PATCH v67 1/7] Add range_get_constructor2 to lsyscache
Look up the two-arg constructor for a given rangetype. We need this for
UPDATE/DELETE FOR PORTION OF, so that we can build a range from the FROM/TO
bounds.
Author: Paul A. Jungwirth <pj@illuminatedcomputing.com>
---
src/backend/utils/cache/lsyscache.c | 25 +++++++++++++++++++++++++
src/include/utils/lsyscache.h | 1 +
2 files changed, 26 insertions(+)
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index 1913b009d40..aa9d07e09c7 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -3600,6 +3600,31 @@ get_range_collation(Oid rangeOid)
return InvalidOid;
}
+/*
+ * get_range_constructor2
+ * Gets the 2-arg constructor for the given rangetype.
+ *
+ * Raises an error if not found.
+ */
+RegProcedure
+get_range_constructor2(Oid rangeOid)
+{
+ HeapTuple tp;
+
+ tp = SearchSysCache1(RANGETYPE, ObjectIdGetDatum(rangeOid));
+ if (HeapTupleIsValid(tp))
+ {
+ Form_pg_range rngtup = (Form_pg_range) GETSTRUCT(tp);
+ RegProcedure result;
+
+ result = rngtup->rngconstruct2;
+ ReleaseSysCache(tp);
+ return result;
+ }
+ else
+ elog(ERROR, "cache lookup failed for range type %u", rangeOid);
+}
+
/*
* get_range_multirange
* Returns the multirange type of a given range type
diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h
index 5655aca4c14..5b9d1460e66 100644
--- a/src/include/utils/lsyscache.h
+++ b/src/include/utils/lsyscache.h
@@ -200,6 +200,7 @@ extern char *get_namespace_name(Oid nspid);
extern char *get_namespace_name_or_temp(Oid nspid);
extern Oid get_range_subtype(Oid rangeOid);
extern Oid get_range_collation(Oid rangeOid);
+extern Oid get_range_constructor2(Oid rangeOid);
extern Oid get_range_multirange(Oid rangeOid);
extern Oid get_multirange_range(Oid multirangeOid);
extern Oid get_index_column_opclass(Oid index_oid, int attno);
--
2.47.3