pgsql: Remove objname/objargs split for referring to objects

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Remove objname/objargs split for referring to objects
Date: 2017-03-06 18:34:49
Message-ID: E1ckxT7-0007Yx-KE@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Remove objname/objargs split for referring to objects

In simpler times, it might have worked to refer to all kinds of objects
by a list of name components and an optional argument list. But this
doesn't work for all objects, which has resulted in a collection of
hacks to place various other nodes types into these fields, which have
to be unpacked at the other end. This makes it also weird to represent
lists of such things in the grammar, because they would have to be lists
of singleton lists, to make the unpacking work consistently. The other
problem is that keeping separate name and args fields makes it awkward
to deal with lists of functions.

Change that by dropping the objargs field and have objname, renamed to
object, be a generic Node, which can then be flexibly assigned and
managed using the normal Node mechanisms. In many cases it will still
be a List of names, in some cases it will be a string Value, for types
it will be the existing Typename, for functions it will now use the
existing ObjectWithArgs node type. Some of the more obscure object
types still use somewhat arbitrary nested lists.

Reviewed-by: Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>
Reviewed-by: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/8b6d6cf853aab12f0dc2adba7c99c3e458662734

Modified Files
--------------
src/backend/catalog/objectaddress.c | 447 +++++++++++++++------------
src/backend/commands/alter.c | 33 +-
src/backend/commands/comment.c | 11 +-
src/backend/commands/dropcmds.c | 175 +++++------
src/backend/commands/extension.c | 13 +-
src/backend/commands/seclabel.c | 4 +-
src/backend/commands/tablecmds.c | 10 +-
src/backend/commands/typecmds.c | 2 +-
src/backend/nodes/copyfuncs.c | 16 +-
src/backend/nodes/equalfuncs.c | 16 +-
src/backend/parser/gram.y | 440 ++++++++++++--------------
src/backend/parser/parse_utilcmd.c | 14 +-
src/include/catalog/objectaddress.h | 8 +-
src/include/commands/extension.h | 2 +-
src/include/nodes/parsenodes.h | 24 +-
src/test/regress/expected/event_trigger.out | 3 -
src/test/regress/expected/object_address.out | 24 +-
src/test/regress/sql/event_trigger.sql | 3 -
18 files changed, 610 insertions(+), 635 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2017-03-06 18:44:36 Re: pgsql: Notify bgworker registrant after freeing worker slot.
Previous Message Robert Haas 2017-03-06 18:14:01 pgsql: Fix incorrect comments.

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2017-03-06 18:35:17 Re: DROP FUNCTION of multiple functions
Previous Message Robert Haas 2017-03-06 18:24:00 Re: Statement-level rollback