postgres.git / summary / log / commit / refs
commit 36ccca3dbac3663b5487cd5966b345009b182629
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun Jul 17 21:43:28 2022 +0000
First released in: 16.0, 13.8, 14.5, 15.0
Fix omissions in support for the "regcollation" type.
The patch that added regcollation doesn't seem to have been too
thorough about supporting it everywhere that other reg* types
are supported. Fix that. (The find_expr_references omission
is moderately serious, since it could result in missing expression
dependencies. The others are less exciting.)
Noted while fixing bug #17483. Back-patch to v13 where
regcollation was added.
Discussion: https://postgr.es/m/1423433.1652722406@sss.pgh.pa.us
src/backend/catalog/dependency.c | 7 +++++++
src/backend/utils/adt/selfuncs.c | 2 ++
src/backend/utils/cache/catcache.c | 1 +
3 files changed, 10 insertions(+)
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 8394a0a241b..89e1628adc8 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -1851,6 +1851,13 @@ find_expr_references_walker(Node *node,
add_object_address(OCLASS_TYPE, objoid, 0,
context->addrs);
break;
+ case REGCOLLATIONOID:
+ objoid = DatumGetObjectId(con->constvalue);
+ if (SearchSysCacheExists1(COLLOID,
+ ObjectIdGetDatum(objoid)))
+ add_object_address(OCLASS_COLLATION, objoid, 0,
+ context->addrs);
+ break;
case REGCONFIGOID:
objoid = DatumGetObjectId(con->constvalue);
if (SearchSysCacheExists1(TSCONFIGOID,
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 821844ada3b..f37bb7d6e17 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -4089,6 +4089,7 @@ convert_to_scalar(Datum value, Oid valuetypid, Oid collid, double *scaledvalue,
case REGOPERATOROID:
case REGCLASSOID:
case REGTYPEOID:
+ case REGCOLLATIONOID:
case REGCONFIGOID:
case REGDICTIONARYOID:
case REGROLEOID:
@@ -4220,6 +4221,7 @@ convert_numeric_to_scalar(Datum value, Oid typid, bool *failure)
case REGOPERATOROID:
case REGCLASSOID:
case REGTYPEOID:
+ case REGCOLLATIONOID:
case REGCONFIGOID:
case REGDICTIONARYOID:
case REGROLEOID:
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 3613ae5f44d..82723055d45 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -239,6 +239,7 @@ GetCCHashEqFuncs(Oid keytype, CCHashFN *hashfunc, RegProcedure *eqfunc, CCFastEq
case REGOPERATOROID:
case REGCLASSOID:
case REGTYPEOID:
+ case REGCOLLATIONOID:
case REGCONFIGOID:
case REGDICTIONARYOID:
case REGROLEOID:
[parent: 6230bd7df4ce]