Support opfamily members in get_object_address
Alvaro Herrera <alvherre@alvh.no-ip.org>
Support opfamily members in get_object_address In the spirit of 890192e99af and 4464303405f: 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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/catalog/objectaddress.c | modified | +185 −49 |
| src/backend/commands/dropcmds.c | modified | +16 −8 |
| src/backend/commands/event_trigger.c | modified | +2 −0 |
| src/backend/parser/gram.y | modified | +15 −28 |
| src/include/nodes/parsenodes.h | modified | +2 −0 |
| src/test/regress/expected/object_address.out | modified | +36 −24 |
| src/test/regress/sql/object_address.sql | modified | +8 −8 |