mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Support opfamily members in get_object_address
In the spirit of890192e99a
and4464303405
: have get_object_address understand individual pg_amop and pg_amproc objects. There is no way to refer to such objects directly in the grammar -- rather, they are almost always considered an integral part of the opfamily that contains them. (The only case that deals with them individually is ALTER OPERATOR FAMILY ADD/DROP, which carries the opfamily address separately and thus does not need it to be part of each added/dropped element's address.) In event triggers it becomes possible to become involved with individual amop/amproc elements, and this commit enables pg_get_object_address to do so as well. To make the overall coding simpler, this commit also slightly changes the get_object_address representation for opclasses and opfamilies: instead of having the AM name in the objargs array, I moved it as the first element of the objnames array. This enables the new code to use objargs for the type names used by pg_amop and pg_amproc. Reviewed by: Stephen Frost
This commit is contained in:
@ -406,19 +406,27 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
|
||||
name = NameListToString(objname);
|
||||
break;
|
||||
case OBJECT_OPCLASS:
|
||||
if (!schema_does_not_exist_skipping(objname, &msg, &name))
|
||||
{
|
||||
msg = gettext_noop("operator class \"%s\" does not exist for access method \"%s\", skipping");
|
||||
name = NameListToString(objname);
|
||||
args = strVal(linitial(objargs));
|
||||
List *opcname = list_copy_tail(objname, 1);
|
||||
|
||||
if (!schema_does_not_exist_skipping(opcname, &msg, &name))
|
||||
{
|
||||
msg = gettext_noop("operator class \"%s\" does not exist for access method \"%s\", skipping");
|
||||
name = NameListToString(opcname);
|
||||
args = strVal(linitial(objname));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OBJECT_OPFAMILY:
|
||||
if (!schema_does_not_exist_skipping(objname, &msg, &name))
|
||||
{
|
||||
msg = gettext_noop("operator family \"%s\" does not exist for access method \"%s\", skipping");
|
||||
name = NameListToString(objname);
|
||||
args = strVal(linitial(objargs));
|
||||
List *opfname = list_copy_tail(objname, 1);
|
||||
|
||||
if (!schema_does_not_exist_skipping(opfname, &msg, &name))
|
||||
{
|
||||
msg = gettext_noop("operator family \"%s\" does not exist for access method \"%s\", skipping");
|
||||
name = NameListToString(opfname);
|
||||
args = strVal(linitial(objname));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -1060,6 +1060,8 @@ EventTriggerSupportsObjectType(ObjectType obtype)
|
||||
/* no support for event triggers on event triggers */
|
||||
return false;
|
||||
case OBJECT_AGGREGATE:
|
||||
case OBJECT_AMOP:
|
||||
case OBJECT_AMPROC:
|
||||
case OBJECT_ATTRIBUTE:
|
||||
case OBJECT_CAST:
|
||||
case OBJECT_COLUMN:
|
||||
|
Reference in New Issue
Block a user