]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
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 8394a0a241b5a4efe9ee82018bfee49ef86ec17b..89e1628adc877878cede48a9215009fcd4695722 100644 (file)
@@ -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,
index 821844ada3ba2859c4c3ee1035b1bae2c96f18c3..f37bb7d6e17a2b6dee031ce5da60f9ddab8ede6d 100644 (file)
@@ -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:
index 3613ae5f44d3d2ad1b8b603afe7605a614207e06..82723055d455f2cafed5156a25a8e7f82df73357 100644 (file)
@@ -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: