Fix omissions in support for the "regcollation" type.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Jul 2022 21:43:28 +0000 (17:43 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Jul 2022 21:43:28 +0000 (17:43 -0400)
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
src/backend/utils/adt/selfuncs.c
src/backend/utils/cache/catcache.c

index 5cbd72ce1096912f11f3a844bc8e9a0b20808e64..cf9ceddff1e940d4b36e6a60adca165a61ba3004 100644 (file)
@@ -1839,6 +1839,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,
index 6f99b5b2437340080a60827f378da02f0f4f2588..d35e5605de8020f945872b44752eaedbe39a1b82 100644 (file)
@@ -4326,6 +4326,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:
@@ -4457,6 +4458,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:
index 6ae7c1f50b890e1b62b88719b2d64efc193fd321..38e943fab2bda83d59b7f91d8f93d8245aaecff1 100644 (file)
@@ -240,6 +240,7 @@ GetCCHashEqFuncs(Oid keytype, CCHashFN *hashfunc, RegProcedure *eqfunc, CCFastEq
        case REGOPERATOROID:
        case REGCLASSOID:
        case REGTYPEOID:
+       case REGCOLLATIONOID:
        case REGCONFIGOID:
        case REGDICTIONARYOID:
        case REGROLEOID: