summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/catalog/objectaddress.c447
-rw-r--r--src/backend/commands/alter.c33
-rw-r--r--src/backend/commands/comment.c11
-rw-r--r--src/backend/commands/dropcmds.c175
-rw-r--r--src/backend/commands/extension.c13
-rw-r--r--src/backend/commands/seclabel.c4
-rw-r--r--src/backend/commands/tablecmds.c10
-rw-r--r--src/backend/commands/typecmds.c2
-rw-r--r--src/backend/nodes/copyfuncs.c16
-rw-r--r--src/backend/nodes/equalfuncs.c16
-rw-r--r--src/backend/parser/gram.y440
-rw-r--r--src/backend/parser/parse_utilcmd.c14
-rw-r--r--src/include/catalog/objectaddress.h8
-rw-r--r--src/include/commands/extension.h2
-rw-r--r--src/include/nodes/parsenodes.h24
-rw-r--r--src/test/regress/expected/event_trigger.out3
-rw-r--r--src/test/regress/expected/object_address.out24
-rw-r--r--src/test/regress/sql/event_trigger.sql3
18 files changed, 610 insertions, 635 deletions
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index 2704aaeb4e6..91f7223cc25 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -707,31 +707,31 @@ const ObjectAddress InvalidObjectAddress =
};
static ObjectAddress get_object_address_unqualified(ObjectType objtype,
- List *qualname, bool missing_ok);
+ Value *strval, bool missing_ok);
static ObjectAddress get_relation_by_qualified_name(ObjectType objtype,
- List *objname, Relation *relp,
+ List *object, Relation *relp,
LOCKMODE lockmode, bool missing_ok);
static ObjectAddress get_object_address_relobject(ObjectType objtype,
- List *objname, Relation *relp, bool missing_ok);
+ List *object, Relation *relp, bool missing_ok);
static ObjectAddress get_object_address_attribute(ObjectType objtype,
- List *objname, Relation *relp,
+ List *object, Relation *relp,
LOCKMODE lockmode, bool missing_ok);
static ObjectAddress get_object_address_attrdef(ObjectType objtype,
- List *objname, Relation *relp, LOCKMODE lockmode,
+ List *object, Relation *relp, LOCKMODE lockmode,
bool missing_ok);
static ObjectAddress get_object_address_type(ObjectType objtype,
- ListCell *typecell, bool missing_ok);
-static ObjectAddress get_object_address_opcf(ObjectType objtype, List *objname,
+ TypeName *typename, bool missing_ok);
+static ObjectAddress get_object_address_opcf(ObjectType objtype, List *object,
bool missing_ok);
static ObjectAddress get_object_address_opf_member(ObjectType objtype,
- List *objname, List *objargs, bool missing_ok);
+ List *object, bool missing_ok);
-static ObjectAddress get_object_address_usermapping(List *objname,
- List *objargs, bool missing_ok);
-static ObjectAddress get_object_address_publication_rel(List *objname,
- List *objargs, Relation *relp,
+static ObjectAddress get_object_address_usermapping(List *object,
+ bool missing_ok);
+static ObjectAddress get_object_address_publication_rel(List *object,
+ Relation *relp,
bool missing_ok);
-static ObjectAddress get_object_address_defacl(List *objname, List *objargs,
+static ObjectAddress get_object_address_defacl(List *object,
bool missing_ok);
static const ObjectPropertyType *get_object_property_data(Oid class_id);
@@ -741,8 +741,8 @@ static void getRelationTypeDescription(StringInfo buffer, Oid relid,
int32 objectSubId);
static void getProcedureTypeDescription(StringInfo buffer, Oid procid);
static void getConstraintTypeDescription(StringInfo buffer, Oid constroid);
-static void getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **objname);
-static void getRelationIdentity(StringInfo buffer, Oid relid, List **objname);
+static void getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **object);
+static void getRelationIdentity(StringInfo buffer, Oid relid, List **object);
/*
* Translate an object name and arguments (as passed by the parser) to an
@@ -776,7 +776,7 @@ static void getRelationIdentity(StringInfo buffer, Oid relid, List **objname);
* better to add some support for that in this function.
*/
ObjectAddress
-get_object_address(ObjectType objtype, List *objname, List *objargs,
+get_object_address(ObjectType objtype, Node *object,
Relation *relp, LOCKMODE lockmode, bool missing_ok)
{
ObjectAddress address;
@@ -806,19 +806,19 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
case OBJECT_MATVIEW:
case OBJECT_FOREIGN_TABLE:
address =
- get_relation_by_qualified_name(objtype, objname,
+ get_relation_by_qualified_name(objtype, castNode(List, object),
&relation, lockmode,
missing_ok);
break;
case OBJECT_COLUMN:
address =
- get_object_address_attribute(objtype, objname,
+ get_object_address_attribute(objtype, castNode(List, object),
&relation, lockmode,
missing_ok);
break;
case OBJECT_DEFAULT:
address =
- get_object_address_attrdef(objtype, objname,
+ get_object_address_attrdef(objtype, castNode(List, object),
&relation, lockmode,
missing_ok);
break;
@@ -826,17 +826,20 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
case OBJECT_TRIGGER:
case OBJECT_TABCONSTRAINT:
case OBJECT_POLICY:
- address = get_object_address_relobject(objtype, objname,
+ address = get_object_address_relobject(objtype, castNode(List, object),
&relation, missing_ok);
break;
case OBJECT_DOMCONSTRAINT:
{
+ List *objlist;
ObjectAddress domaddr;
char *constrname;
+ objlist = castNode(List, object);
domaddr = get_object_address_type(OBJECT_DOMAIN,
- list_head(objname), missing_ok);
- constrname = strVal(linitial(objargs));
+ castNode(TypeName, linitial(objlist)),
+ missing_ok);
+ constrname = strVal(lsecond(objlist));
address.classId = ConstraintRelationId;
address.objectId = get_domain_constraint_oid(domaddr.objectId,
@@ -858,57 +861,64 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
case OBJECT_PUBLICATION:
case OBJECT_SUBSCRIPTION:
address = get_object_address_unqualified(objtype,
- objname, missing_ok);
+ (Value *) object, missing_ok);
break;
case OBJECT_TYPE:
case OBJECT_DOMAIN:
- address = get_object_address_type(objtype, list_head(objname), missing_ok);
+ address = get_object_address_type(objtype, castNode(TypeName, object), missing_ok);
break;
case OBJECT_AGGREGATE:
- address.classId = ProcedureRelationId;
- address.objectId =
- LookupAggNameTypeNames(objname, objargs, missing_ok);
- address.objectSubId = 0;
- break;
+ {
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ address.classId = ProcedureRelationId;
+ address.objectId =
+ LookupAggNameTypeNames(owa->objname, owa->objargs, missing_ok);
+ address.objectSubId = 0;
+ break;
+ }
case OBJECT_FUNCTION:
- address.classId = ProcedureRelationId;
- address.objectId =
- LookupFuncNameTypeNames(objname, objargs, missing_ok);
- address.objectSubId = 0;
- break;
+ {
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ address.classId = ProcedureRelationId;
+ address.objectId =
+ LookupFuncNameTypeNames(owa->objname, owa->objargs, missing_ok);
+ address.objectSubId = 0;
+ break;
+ }
case OBJECT_OPERATOR:
- Assert(list_length(objargs) == 2);
- address.classId = OperatorRelationId;
- address.objectId =
- LookupOperNameTypeNames(NULL, objname,
- (TypeName *) linitial(objargs),
- (TypeName *) lsecond(objargs),
- missing_ok, -1);
- address.objectSubId = 0;
- break;
+ {
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ address.classId = OperatorRelationId;
+ Assert(list_length(owa->objargs) == 2);
+ address.objectId =
+ LookupOperNameTypeNames(NULL, owa->objname,
+ castNode(TypeName, linitial(owa->objargs)),
+ castNode(TypeName, lsecond(owa->objargs)),
+ missing_ok, -1);
+ address.objectSubId = 0;
+ break;
+ }
case OBJECT_COLLATION:
address.classId = CollationRelationId;
- address.objectId = get_collation_oid(objname, missing_ok);
+ address.objectId = get_collation_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_CONVERSION:
address.classId = ConversionRelationId;
- address.objectId = get_conversion_oid(objname, missing_ok);
+ address.objectId = get_conversion_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_OPCLASS:
case OBJECT_OPFAMILY:
- address = get_object_address_opcf(objtype, objname, missing_ok);
+ address = get_object_address_opcf(objtype, castNode(List, object), missing_ok);
break;
case OBJECT_AMOP:
case OBJECT_AMPROC:
- address = get_object_address_opf_member(objtype, objname,
- objargs, missing_ok);
+ address = get_object_address_opf_member(objtype, castNode(List, object), missing_ok);
break;
case OBJECT_LARGEOBJECT:
- Assert(list_length(objname) == 1);
address.classId = LargeObjectRelationId;
- address.objectId = oidparse(linitial(objname));
+ address.objectId = oidparse(object);
address.objectSubId = 0;
if (!LargeObjectExists(address.objectId))
{
@@ -921,8 +931,8 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
break;
case OBJECT_CAST:
{
- TypeName *sourcetype = (TypeName *) linitial(objname);
- TypeName *targettype = (TypeName *) linitial(objargs);
+ TypeName *sourcetype = castNode(TypeName, linitial(castNode(List, object)));
+ TypeName *targettype = castNode(TypeName, lsecond(castNode(List, object)));
Oid sourcetypeid;
Oid targettypeid;
@@ -936,8 +946,8 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
break;
case OBJECT_TRANSFORM:
{
- TypeName *typename = (TypeName *) linitial(objname);
- char *langname = strVal(linitial(objargs));
+ TypeName *typename = castNode(TypeName, linitial(castNode(List, object)));
+ char *langname = strVal(lsecond(castNode(List, object)));
Oid type_id = LookupTypeNameOid(NULL, typename, missing_ok);
Oid lang_id = get_language_oid(langname, missing_ok);
@@ -949,35 +959,35 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
break;
case OBJECT_TSPARSER:
address.classId = TSParserRelationId;
- address.objectId = get_ts_parser_oid(objname, missing_ok);
+ address.objectId = get_ts_parser_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSDICTIONARY:
address.classId = TSDictionaryRelationId;
- address.objectId = get_ts_dict_oid(objname, missing_ok);
+ address.objectId = get_ts_dict_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSTEMPLATE:
address.classId = TSTemplateRelationId;
- address.objectId = get_ts_template_oid(objname, missing_ok);
+ address.objectId = get_ts_template_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_TSCONFIGURATION:
address.classId = TSConfigRelationId;
- address.objectId = get_ts_config_oid(objname, missing_ok);
+ address.objectId = get_ts_config_oid(castNode(List, object), missing_ok);
address.objectSubId = 0;
break;
case OBJECT_USER_MAPPING:
- address = get_object_address_usermapping(objname, objargs,
+ address = get_object_address_usermapping(castNode(List, object),
missing_ok);
break;
case OBJECT_PUBLICATION_REL:
- address = get_object_address_publication_rel(objname, objargs,
+ address = get_object_address_publication_rel(castNode(List, object),
&relation,
missing_ok);
break;
case OBJECT_DEFACL:
- address = get_object_address_defacl(objname, objargs,
+ address = get_object_address_defacl(castNode(List, object),
missing_ok);
break;
default:
@@ -1068,25 +1078,25 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
/*
* Return an ObjectAddress based on a RangeVar and an object name. The
* name of the relation identified by the RangeVar is prepended to the
- * (possibly empty) list passed in as objname. This is useful to find
+ * (possibly empty) list passed in as object. This is useful to find
* the ObjectAddress of objects that depend on a relation. All other
* considerations are exactly as for get_object_address above.
*/
ObjectAddress
-get_object_address_rv(ObjectType objtype, RangeVar *rel, List *objname,
- List *objargs, Relation *relp, LOCKMODE lockmode,
+get_object_address_rv(ObjectType objtype, RangeVar *rel, List *object,
+ Relation *relp, LOCKMODE lockmode,
bool missing_ok)
{
if (rel)
{
- objname = lcons(makeString(rel->relname), objname);
+ object = lcons(makeString(rel->relname), object);
if (rel->schemaname)
- objname = lcons(makeString(rel->schemaname), objname);
+ object = lcons(makeString(rel->schemaname), object);
if (rel->catalogname)
- objname = lcons(makeString(rel->catalogname), objname);
+ object = lcons(makeString(rel->catalogname), object);
}
- return get_object_address(objtype, objname, objargs,
+ return get_object_address(objtype, (Node *) object,
relp, lockmode, missing_ok);
}
@@ -1096,68 +1106,12 @@ get_object_address_rv(ObjectType objtype, RangeVar *rel, List *objname,
*/
static ObjectAddress
get_object_address_unqualified(ObjectType objtype,
- List *qualname, bool missing_ok)
+ Value *strval, bool missing_ok)
{
const char *name;
ObjectAddress address;
- /*
- * The types of names handled by this function are not permitted to be
- * schema-qualified or catalog-qualified.
- */
- if (list_length(qualname) != 1)
- {
- const char *msg;
-
- switch (objtype)
- {
- case OBJECT_ACCESS_METHOD:
- msg = gettext_noop("access method name cannot be qualified");
- break;
- case OBJECT_DATABASE:
- msg = gettext_noop("database name cannot be qualified");
- break;
- case OBJECT_EXTENSION:
- msg = gettext_noop("extension name cannot be qualified");
- break;
- case OBJECT_TABLESPACE:
- msg = gettext_noop("tablespace name cannot be qualified");
- break;
- case OBJECT_ROLE:
- msg = gettext_noop("role name cannot be qualified");
- break;
- case OBJECT_SCHEMA:
- msg = gettext_noop("schema name cannot be qualified");
- break;
- case OBJECT_LANGUAGE:
- msg = gettext_noop("language name cannot be qualified");
- break;
- case OBJECT_FDW:
- msg = gettext_noop("foreign-data wrapper name cannot be qualified");
- break;
- case OBJECT_FOREIGN_SERVER:
- msg = gettext_noop("server name cannot be qualified");
- break;
- case OBJECT_EVENT_TRIGGER:
- msg = gettext_noop("event trigger name cannot be qualified");
- break;
- case OBJECT_PUBLICATION:
- msg = gettext_noop("publication name cannot be qualified");
- break;
- case OBJECT_SUBSCRIPTION:
- msg = gettext_noop("subscription name cannot be qualified");
- break;
- default:
- elog(ERROR, "unrecognized objtype: %d", (int) objtype);
- msg = NULL; /* placate compiler */
- }
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("%s", _(msg))));
- }
-
- /* Format is valid, extract the actual name. */
- name = strVal(linitial(qualname));
+ name = strVal(strval);
/* Translate name to OID. */
switch (objtype)
@@ -1237,7 +1191,7 @@ get_object_address_unqualified(ObjectType objtype,
* Locate a relation by qualified name.
*/
static ObjectAddress
-get_relation_by_qualified_name(ObjectType objtype, List *objname,
+get_relation_by_qualified_name(ObjectType objtype, List *object,
Relation *relp, LOCKMODE lockmode,
bool missing_ok)
{
@@ -1248,7 +1202,7 @@ get_relation_by_qualified_name(ObjectType objtype, List *objname,
address.objectId = InvalidOid;
address.objectSubId = 0;
- relation = relation_openrv_extended(makeRangeVarFromNameList(objname),
+ relation = relation_openrv_extended(makeRangeVarFromNameList(object),
lockmode, missing_ok);
if (!relation)
return address;
@@ -1318,7 +1272,7 @@ get_relation_by_qualified_name(ObjectType objtype, List *objname,
* mode for the object itself, not the relation to which it is attached.
*/
static ObjectAddress
-get_object_address_relobject(ObjectType objtype, List *objname,
+get_object_address_relobject(ObjectType objtype, List *object,
Relation *relp, bool missing_ok)
{
ObjectAddress address;
@@ -1329,17 +1283,17 @@ get_object_address_relobject(ObjectType objtype, List *objname,
Oid reloid;
/* Extract name of dependent object. */
- depname = strVal(llast(objname));
+ depname = strVal(llast(object));
/* Separate relation name from dependent object name. */
- nnames = list_length(objname);
+ nnames = list_length(object);
if (nnames < 2)
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("must specify relation and object name")));
/* Extract relation name and open relation. */
- relname = list_truncate(list_copy(objname), nnames - 1);
+ relname = list_truncate(list_copy(object), nnames - 1);
relation = heap_openrv_extended(makeRangeVarFromNameList(relname),
AccessShareLock,
missing_ok);
@@ -1397,7 +1351,7 @@ get_object_address_relobject(ObjectType objtype, List *objname,
* Find the ObjectAddress for an attribute.
*/
static ObjectAddress
-get_object_address_attribute(ObjectType objtype, List *objname,
+get_object_address_attribute(ObjectType objtype, List *object,
Relation *relp, LOCKMODE lockmode,
bool missing_ok)
{
@@ -1409,12 +1363,12 @@ get_object_address_attribute(ObjectType objtype, List *objname,
AttrNumber attnum;
/* Extract relation name and open relation. */
- if (list_length(objname) < 2)
+ if (list_length(object) < 2)
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("column name must be qualified")));
- attname = strVal(lfirst(list_tail(objname)));
- relname = list_truncate(list_copy(objname), list_length(objname) - 1);
+ attname = strVal(lfirst(list_tail(object)));
+ relname = list_truncate(list_copy(object), list_length(object) - 1);
/* XXX no missing_ok support here */
relation = relation_openrv(makeRangeVarFromNameList(relname), lockmode);
reloid = RelationGetRelid(relation);
@@ -1448,7 +1402,7 @@ get_object_address_attribute(ObjectType objtype, List *objname,
* Find the ObjectAddress for an attribute's default value.
*/
static ObjectAddress
-get_object_address_attrdef(ObjectType objtype, List *objname,
+get_object_address_attrdef(ObjectType objtype, List *object,
Relation *relp, LOCKMODE lockmode,
bool missing_ok)
{
@@ -1462,12 +1416,12 @@ get_object_address_attrdef(ObjectType objtype, List *objname,
Oid defoid;
/* Extract relation name and open relation. */
- if (list_length(objname) < 2)
+ if (list_length(object) < 2)
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("column name must be qualified")));
- attname = strVal(llast(objname));
- relname = list_truncate(list_copy(objname), list_length(objname) - 1);
+ attname = strVal(llast(object));
+ relname = list_truncate(list_copy(object), list_length(object) - 1);
/* XXX no missing_ok support here */
relation = relation_openrv(makeRangeVarFromNameList(relname), lockmode);
reloid = RelationGetRelid(relation);
@@ -1530,14 +1484,11 @@ get_object_address_attrdef(ObjectType objtype, List *objname,
* Find the ObjectAddress for a type or domain
*/
static ObjectAddress
-get_object_address_type(ObjectType objtype, ListCell *typecell, bool missing_ok)
+get_object_address_type(ObjectType objtype, TypeName *typename, bool missing_ok)
{
ObjectAddress address;
- TypeName *typename;
Type tup;
- typename = (TypeName *) lfirst(typecell);
-
address.classId = TypeRelationId;
address.objectId = InvalidOid;
address.objectSubId = 0;
@@ -1572,25 +1523,25 @@ get_object_address_type(ObjectType objtype, ListCell *typecell, bool missing_ok)
* Find the ObjectAddress for an opclass or opfamily.
*/
static ObjectAddress
-get_object_address_opcf(ObjectType objtype, List *objname, bool missing_ok)
+get_object_address_opcf(ObjectType objtype, List *object, bool missing_ok)
{
Oid amoid;
ObjectAddress address;
/* XXX no missing_ok support here */
- amoid = get_index_am_oid(strVal(linitial(objname)), false);
- objname = list_copy_tail(objname, 1);
+ amoid = get_index_am_oid(strVal(linitial(object)), false);
+ object = list_copy_tail(object, 1);
switch (objtype)
{
case OBJECT_OPCLASS:
address.classId = OperatorClassRelationId;
- address.objectId = get_opclass_oid(amoid, objname, missing_ok);
+ address.objectId = get_opclass_oid(amoid, object, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_OPFAMILY:
address.classId = OperatorFamilyRelationId;
- address.objectId = get_opfamily_oid(amoid, objname, missing_ok);
+ address.objectId = get_opfamily_oid(amoid, object, missing_ok);
address.objectSubId = 0;
break;
default:
@@ -1611,7 +1562,7 @@ get_object_address_opcf(ObjectType objtype, List *objname, bool missing_ok)
*/
static ObjectAddress
get_object_address_opf_member(ObjectType objtype,
- List *objname, List *objargs, bool missing_ok)
+ List *object, bool missing_ok)
{
ObjectAddress famaddr;
ObjectAddress address;
@@ -1623,24 +1574,24 @@ get_object_address_opf_member(ObjectType objtype,
int i;
/*
- * The last element of the objname list contains the strategy or procedure
+ * The last element of the object list contains the strategy or procedure
* number. We need to strip that out before getting the opclass/family
* address. The rest can be used directly by get_object_address_opcf().
*/
- membernum = atoi(strVal(llast(objname)));
- copy = list_truncate(list_copy(objname), list_length(objname) - 1);
+ membernum = atoi(strVal(llast(linitial(object))));
+ copy = list_truncate(list_copy(linitial(object)), list_length(linitial(object)) - 1);
/* no missing_ok support here */
famaddr = get_object_address_opcf(OBJECT_OPFAMILY, copy, false);
/* find out left/right type names and OIDs */
i = 0;
- foreach(cell, objargs)
+ foreach(cell, lsecond(object))
{
ObjectAddress typaddr;
typenames[i] = strVal(lfirst(cell));
- typaddr = get_object_address_type(OBJECT_TYPE, cell, missing_ok);
+ typaddr = get_object_address_type(OBJECT_TYPE, castNode(TypeName, lfirst(cell)), missing_ok);
typeoids[i] = typaddr.objectId;
if (++i >= 2)
break;
@@ -1716,7 +1667,7 @@ get_object_address_opf_member(ObjectType objtype,
* Find the ObjectAddress for a user mapping.
*/
static ObjectAddress
-get_object_address_usermapping(List *objname, List *objargs, bool missing_ok)
+get_object_address_usermapping(List *object, bool missing_ok)
{
ObjectAddress address;
Oid userid;
@@ -1728,8 +1679,8 @@ get_object_address_usermapping(List *objname, List *objargs, bool missing_ok)
ObjectAddressSet(address, UserMappingRelationId, InvalidOid);
/* fetch string names from input lists, for error messages */
- username = strVal(linitial(objname));
- servername = strVal(linitial(objargs));
+ username = strVal(linitial(object));
+ servername = strVal(lsecond(object));
/* look up pg_authid OID of mapped user; InvalidOid if PUBLIC */
if (strcmp(username, "public") == 0)
@@ -1782,27 +1733,30 @@ get_object_address_usermapping(List *objname, List *objargs, bool missing_ok)
}
/*
- * Find the ObjectAddress for a publication relation. The objname parameter
- * is the relation name; objargs contains the publication name.
+ * Find the ObjectAddress for a publication relation. The first element of
+ * the object parameter is the relation name, the second is the
+ * publication name.
*/
static ObjectAddress
-get_object_address_publication_rel(List *objname, List *objargs,
+get_object_address_publication_rel(List *object,
Relation *relp, bool missing_ok)
{
ObjectAddress address;
Relation relation;
+ List *relname;
char *pubname;
Publication *pub;
ObjectAddressSet(address, PublicationRelRelationId, InvalidOid);
- relation = relation_openrv_extended(makeRangeVarFromNameList(objname),
+ relname = linitial(object);
+ relation = relation_openrv_extended(makeRangeVarFromNameList(relname),
AccessShareLock, missing_ok);
if (!relation)
return address;
/* fetch publication name from input list */
- pubname = strVal(linitial(objargs));
+ pubname = strVal(lsecond(object));
/* Now look up the pg_publication tuple */
pub = GetPublicationByName(pubname, missing_ok);
@@ -1836,7 +1790,7 @@ get_object_address_publication_rel(List *objname, List *objargs,
* Find the ObjectAddress for a default ACL.
*/
static ObjectAddress
-get_object_address_defacl(List *objname, List *objargs, bool missing_ok)
+get_object_address_defacl(List *object, bool missing_ok)
{
HeapTuple tp;
Oid userid;
@@ -1853,9 +1807,9 @@ get_object_address_defacl(List *objname, List *objargs, bool missing_ok)
* First figure out the textual attributes so that they can be used for
* error reporting.
*/
- username = strVal(linitial(objname));
- if (list_length(objname) >= 2)
- schema = (char *) strVal(lsecond(objname));
+ username = strVal(lsecond(object));
+ if (list_length(object) >= 3)
+ schema = (char *) strVal(lthird(object));
else
schema = NULL;
@@ -1863,7 +1817,7 @@ get_object_address_defacl(List *objname, List *objargs, bool missing_ok)
* Decode defaclobjtype. Only first char is considered; the rest of the
* string, if any, is blissfully ignored.
*/
- objtype = ((char *) strVal(linitial(objargs)))[0];
+ objtype = ((char *) strVal(linitial(object)))[0];
switch (objtype)
{
case DEFACLOBJ_RELATION:
@@ -1978,8 +1932,10 @@ pg_get_object_address(PG_FUNCTION_ARGS)
ArrayType *argsarr = PG_GETARG_ARRAYTYPE_P(2);
int itype;
ObjectType type;
- List *name;
- List *args;
+ List *name = NIL;
+ TypeName *typename = NULL;
+ List *args = NIL;
+ Node *objnode = NULL;
ObjectAddress addr;
TupleDesc tupdesc;
Datum values[3];
@@ -2017,7 +1973,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("name or argument lists may not contain nulls")));
- name = list_make1(typeStringToTypeName(TextDatumGetCString(elems[0])));
+ typename = typeStringToTypeName(TextDatumGetCString(elems[0]));
}
else if (type == OBJECT_LARGEOBJECT)
{
@@ -2035,7 +1991,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("large object OID may not be null")));
- name = list_make1(makeFloat(TextDatumGetCString(elems[0])));
+ objnode = (Node *) makeFloat(TextDatumGetCString(elems[0]));
}
else
{
@@ -2123,7 +2079,96 @@ pg_get_object_address(PG_FUNCTION_ARGS)
break;
}
- addr = get_object_address(type, name, args,
+ /*
+ * Now build the Node type that get_object_name() expects for the given
+ * type.
+ */
+ switch (type)
+ {
+ case OBJECT_TABLE:
+ case OBJECT_SEQUENCE:
+ case OBJECT_VIEW:
+ case OBJECT_MATVIEW:
+ case OBJECT_INDEX:
+ case OBJECT_FOREIGN_TABLE:
+ case OBJECT_COLUMN:
+ case OBJECT_ATTRIBUTE:
+ case OBJECT_COLLATION:
+ case OBJECT_CONVERSION:
+ case OBJECT_TSPARSER:
+ case OBJECT_TSDICTIONARY:
+ case OBJECT_TSTEMPLATE:
+ case OBJECT_TSCONFIGURATION:
+ case OBJECT_DEFAULT:
+ case OBJECT_POLICY:
+ case OBJECT_RULE:
+ case OBJECT_TRIGGER:
+ case OBJECT_TABCONSTRAINT:
+ case OBJECT_OPCLASS:
+ case OBJECT_OPFAMILY:
+ objnode = (Node *) name;
+ break;
+ case OBJECT_ACCESS_METHOD:
+ case OBJECT_DATABASE:
+ case OBJECT_EVENT_TRIGGER:
+ case OBJECT_EXTENSION:
+ case OBJECT_FDW:
+ case OBJECT_FOREIGN_SERVER:
+ case OBJECT_LANGUAGE:
+ case OBJECT_PUBLICATION:
+ case OBJECT_ROLE:
+ case OBJECT_SCHEMA:
+ case OBJECT_SUBSCRIPTION:
+ case OBJECT_TABLESPACE:
+ if (list_length(name) != 1)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("name list length must be exactly %d", 1)));
+ objnode = linitial(name);
+ break;
+ case OBJECT_TYPE:
+ case OBJECT_DOMAIN:
+ objnode = (Node *) typename;
+ break;
+ case OBJECT_CAST:
+ case OBJECT_DOMCONSTRAINT:
+ case OBJECT_TRANSFORM:
+ objnode = (Node *) list_make2(typename, linitial(args));
+ break;
+ case OBJECT_PUBLICATION_REL:
+ objnode = (Node *) list_make2(name, linitial(args));
+ break;
+ case OBJECT_USER_MAPPING:
+ objnode = (Node *) list_make2(linitial(name), linitial(args));
+ break;
+ case OBJECT_DEFACL:
+ objnode = (Node *) lcons(linitial(args), name);
+ break;
+ case OBJECT_AMOP:
+ case OBJECT_AMPROC:
+ objnode = (Node *) list_make2(name, args);
+ break;
+ case OBJECT_FUNCTION:
+ case OBJECT_AGGREGATE:
+ case OBJECT_OPERATOR:
+ {
+ ObjectWithArgs *owa = makeNode(ObjectWithArgs);
+
+ owa->objname = name;
+ owa->objargs = args;
+ objnode = (Node *) owa;
+ break;
+ }
+ case OBJECT_LARGEOBJECT:
+ /* already handled above */
+ break;
+ /* no default, to let compiler warn about missing case */
+ }
+
+ if (objnode == NULL)
+ elog(ERROR, "unrecognized object type: %d", type);
+
+ addr = get_object_address(type, objnode,
&relation, AccessShareLock, false);
/* We don't need the relcache entry, thank you very much */
@@ -2156,7 +2201,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
*/
void
check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
- List *objname, List *objargs, Relation relation)
+ Node *object, Relation relation)
{
switch (objtype)
{
@@ -2178,7 +2223,7 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
case OBJECT_DATABASE:
if (!pg_database_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_TYPE:
case OBJECT_DOMAIN:
@@ -2191,62 +2236,62 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
case OBJECT_FUNCTION:
if (!pg_proc_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_PROC,
- NameListToString(objname));
+ NameListToString((castNode(ObjectWithArgs, object))->objname));
break;
case OBJECT_OPERATOR:
if (!pg_oper_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPER,
- NameListToString(objname));
+ NameListToString((castNode(ObjectWithArgs, object))->objname));
break;
case OBJECT_SCHEMA:
if (!pg_namespace_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_NAMESPACE,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_COLLATION:
if (!pg_collation_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_COLLATION,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_CONVERSION:
if (!pg_conversion_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CONVERSION,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_EXTENSION:
if (!pg_extension_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_EXTENSION,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_FDW:
if (!pg_foreign_data_wrapper_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_FDW,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_FOREIGN_SERVER:
if (!pg_foreign_server_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_FOREIGN_SERVER,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_EVENT_TRIGGER:
if (!pg_event_trigger_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_EVENT_TRIGGER,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_LANGUAGE:
if (!pg_language_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_LANGUAGE,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_OPCLASS:
if (!pg_opclass_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPCLASS,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_OPFAMILY:
if (!pg_opfamily_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPFAMILY,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_LARGEOBJECT:
if (!lo_compat_privileges &&
@@ -2259,8 +2304,8 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
case OBJECT_CAST:
{
/* We can only check permissions on the source/target types */
- TypeName *sourcetype = (TypeName *) linitial(objname);
- TypeName *targettype = (TypeName *) linitial(objargs);
+ TypeName *sourcetype = castNode(TypeName, linitial(castNode(List, object)));
+ TypeName *targettype = castNode(TypeName, lsecond(castNode(List, object)));
Oid sourcetypeid = typenameTypeId(NULL, sourcetype);
Oid targettypeid = typenameTypeId(NULL, targettype);
@@ -2276,16 +2321,16 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
case OBJECT_PUBLICATION:
if (!pg_publication_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_PUBLICATION,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_SUBSCRIPTION:
if (!pg_subscription_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_SUBSCRIPTION,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_TRANSFORM:
{
- TypeName *typename = (TypeName *) linitial(objname);
+ TypeName *typename = castNode(TypeName, linitial(castNode(List, object)));
Oid typeid = typenameTypeId(NULL, typename);
if (!pg_type_ownercheck(typeid, roleid))
@@ -2295,17 +2340,17 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
case OBJECT_TABLESPACE:
if (!pg_tablespace_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TABLESPACE,
- NameListToString(objname));
+ strVal((Value *) object));
break;
case OBJECT_TSDICTIONARY:
if (!pg_ts_dict_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSDICTIONARY,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_TSCONFIGURATION:
if (!pg_ts_config_ownercheck(address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSCONFIGURATION,
- NameListToString(objname));
+ NameListToString(castNode(List, object)));
break;
case OBJECT_ROLE:
@@ -4868,7 +4913,7 @@ getObjectIdentityParts(const ObjectAddress *object,
}
static void
-getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **objname)
+getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **object)
{
HeapTuple opfTup;
Form_pg_opfamily opfForm;
@@ -4893,8 +4938,8 @@ getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **objname)
NameStr(opfForm->opfname)),
NameStr(amForm->amname));
- if (objname)
- *objname = list_make3(pstrdup(NameStr(amForm->amname)),
+ if (object)
+ *object = list_make3(pstrdup(NameStr(amForm->amname)),
pstrdup(schema),
pstrdup(NameStr(opfForm->opfname)));
@@ -4907,7 +4952,7 @@ getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **objname)
* StringInfo.
*/
static void
-getRelationIdentity(StringInfo buffer, Oid relid, List **objname)
+getRelationIdentity(StringInfo buffer, Oid relid, List **object)
{
HeapTuple relTup;
Form_pg_class relForm;
@@ -4923,8 +4968,8 @@ getRelationIdentity(StringInfo buffer, Oid relid, List **objname)
appendStringInfoString(buffer,
quote_qualified_identifier(schema,
NameStr(relForm->relname)));
- if (objname)
- *objname = list_make2(schema, pstrdup(NameStr(relForm->relname)));
+ if (object)
+ *object = list_make2(schema, pstrdup(NameStr(relForm->relname)));
ReleaseSysCache(relTup);
}
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index 8ff5dd5aaf2..cf1391c2e6b 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -385,7 +385,7 @@ ExecRenameStmt(RenameStmt *stmt)
Relation relation;
address = get_object_address(stmt->renameType,
- stmt->object, stmt->objarg,
+ stmt->object,
&relation,
AccessExclusiveLock, false);
Assert(relation == NULL);
@@ -421,8 +421,8 @@ ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt, ObjectAddress *refAddre
Relation rel;
address =
- get_object_address_rv(stmt->objectType, stmt->relation, stmt->objname,
- stmt->objargs, &rel, AccessExclusiveLock, false);
+ get_object_address_rv(stmt->objectType, stmt->relation, (List *) stmt->object,
+ &rel, AccessExclusiveLock, false);
/*
* If a relation was involved, it would have been opened and locked. We
@@ -431,8 +431,8 @@ ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt, ObjectAddress *refAddre
if (rel)
heap_close(rel, NoLock);
- refAddr = get_object_address(OBJECT_EXTENSION, list_make1(stmt->extname),
- NULL, &rel, AccessExclusiveLock, false);
+ refAddr = get_object_address(OBJECT_EXTENSION, (Node *) stmt->extname,
+ &rel, AccessExclusiveLock, false);
Assert(rel == NULL);
if (refAddress)
*refAddress = refAddr;
@@ -461,7 +461,7 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt,
switch (stmt->objectType)
{
case OBJECT_EXTENSION:
- address = AlterExtensionNamespace(stmt->object, stmt->newschema,
+ address = AlterExtensionNamespace(strVal((Value *) stmt->object), stmt->newschema,
oldSchemaAddr ? &oldNspOid : NULL);
break;
@@ -476,7 +476,7 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt,
case OBJECT_DOMAIN:
case OBJECT_TYPE:
- address = AlterTypeNamespace(stmt->object, stmt->newschema,
+ address = AlterTypeNamespace(castNode(List, stmt->object), stmt->newschema,
stmt->objectType,
oldSchemaAddr ? &oldNspOid : NULL);
break;
@@ -501,7 +501,6 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt,
address = get_object_address(stmt->objectType,
stmt->object,
- stmt->objarg,
&relation,
AccessExclusiveLock,
false);
@@ -764,33 +763,34 @@ ExecAlterOwnerStmt(AlterOwnerStmt *stmt)
switch (stmt->objectType)
{
case OBJECT_DATABASE:
- return AlterDatabaseOwner(strVal(linitial(stmt->object)), newowner);
+ return AlterDatabaseOwner(strVal((Value *) stmt->object), newowner);
case OBJECT_SCHEMA:
- return AlterSchemaOwner(strVal(linitial(stmt->object)), newowner);
+ return AlterSchemaOwner(strVal((Value *) stmt->object), newowner);
case OBJECT_TYPE:
case OBJECT_DOMAIN: /* same as TYPE */
- return AlterTypeOwner(stmt->object, newowner, stmt->objectType);
+ return AlterTypeOwner(castNode(List, stmt->object), newowner, stmt->objectType);
+ break;
case OBJECT_FDW:
- return AlterForeignDataWrapperOwner(strVal(linitial(stmt->object)),
+ return AlterForeignDataWrapperOwner(strVal((Value *) stmt->object),
newowner);
case OBJECT_FOREIGN_SERVER:
- return AlterForeignServerOwner(strVal(linitial(stmt->object)),
+ return AlterForeignServerOwner(strVal((Value *) stmt->object),
newowner);
case OBJECT_EVENT_TRIGGER:
- return AlterEventTriggerOwner(strVal(linitial(stmt->object)),
+ return AlterEventTriggerOwner(strVal((Value *) stmt->object),
newowner);
case OBJECT_PUBLICATION:
- return AlterPublicationOwner(strVal(linitial(stmt->object)),
+ return AlterPublicationOwner(strVal((Value *) stmt->object),
newowner);
case OBJECT_SUBSCRIPTION:
- return AlterSubscriptionOwner(strVal(linitial(stmt->object)),
+ return AlterSubscriptionOwner(strVal((Value *) stmt->object),
newowner);
/* Generic cases */
@@ -814,7 +814,6 @@ ExecAlterOwnerStmt(AlterOwnerStmt *stmt)
address = get_object_address(stmt->objectType,
stmt->object,
- stmt->objarg,
&relation,
AccessExclusiveLock,
false);
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 87ca62f2403..b5569bddaf2 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -48,12 +48,11 @@ CommentObject(CommentStmt *stmt)
* (which is really pg_restore's fault, but for now we will work around
* the problem here). Consensus is that the best fix is to treat wrong
* database name as a WARNING not an ERROR; hence, the following special
- * case. (If the length of stmt->objname is not 1, get_object_address
- * will throw an error below; that's OK.)
+ * case.
*/
- if (stmt->objtype == OBJECT_DATABASE && list_length(stmt->objname) == 1)
+ if (stmt->objtype == OBJECT_DATABASE)
{
- char *database = strVal(linitial(stmt->objname));
+ char *database = strVal((Value *) stmt->object);
if (!OidIsValid(get_database_oid(database, true)))
{
@@ -70,12 +69,12 @@ CommentObject(CommentStmt *stmt)
* does not exist, and will also acquire a lock on the target to guard
* against concurrent DROP operations.
*/
- address = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
+ address = get_object_address(stmt->objtype, stmt->object,
&relation, ShareUpdateExclusiveLock, false);
/* Require ownership of the target object. */
check_object_ownership(GetUserId(), stmt->objtype, address,
- stmt->objname, stmt->objargs, relation);
+ stmt->object, relation);
/* Perform other integrity checks as needed. */
switch (stmt->objtype)
diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c
index ff3108ce72b..ab73fbf961b 100644
--- a/src/backend/commands/dropcmds.c
+++ b/src/backend/commands/dropcmds.c
@@ -30,10 +30,10 @@
static void does_not_exist_skipping(ObjectType objtype,
- List *objname, List *objargs);
-static bool owningrel_does_not_exist_skipping(List *objname,
+ Node *object);
+static bool owningrel_does_not_exist_skipping(List *object,
const char **msg, char **name);
-static bool schema_does_not_exist_skipping(List *objname,
+static bool schema_does_not_exist_skipping(List *object,
const char **msg, char **name);
static bool type_in_list_does_not_exist_skipping(List *typenames,
const char **msg, char **name);
@@ -55,27 +55,19 @@ RemoveObjects(DropStmt *stmt)
{
ObjectAddresses *objects;
ListCell *cell1;
- ListCell *cell2 = NULL;
objects = new_object_addresses();
foreach(cell1, stmt->objects)
{
ObjectAddress address;
- List *objname = lfirst(cell1);
- List *objargs = NIL;
+ Node *object = lfirst(cell1);
Relation relation = NULL;
Oid namespaceId;
- if (stmt->arguments)
- {
- cell2 = (!cell2 ? list_head(stmt->arguments) : lnext(cell2));
- objargs = lfirst(cell2);
- }
-
/* Get an ObjectAddress for the object. */
address = get_object_address(stmt->removeType,
- objname, objargs,
+ object,
&relation,
AccessExclusiveLock,
stmt->missing_ok);
@@ -88,7 +80,7 @@ RemoveObjects(DropStmt *stmt)
if (!OidIsValid(address.objectId))
{
Assert(stmt->missing_ok);
- does_not_exist_skipping(stmt->removeType, objname, objargs);
+ does_not_exist_skipping(stmt->removeType, object);
continue;
}
@@ -110,7 +102,7 @@ RemoveObjects(DropStmt *stmt)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("\"%s\" is an aggregate function",
- NameListToString(objname)),
+ NameListToString(castNode(ObjectWithArgs, object)->objname)),
errhint("Use DROP AGGREGATE to drop aggregate functions.")));
ReleaseSysCache(tup);
@@ -121,7 +113,7 @@ RemoveObjects(DropStmt *stmt)
if (!OidIsValid(namespaceId) ||
!pg_namespace_ownercheck(namespaceId, GetUserId()))
check_object_ownership(GetUserId(), stmt->removeType, address,
- objname, objargs, relation);
+ object, relation);
/* Release any relcache reference count, but keep lock until commit. */
if (relation)
@@ -147,23 +139,23 @@ RemoveObjects(DropStmt *stmt)
* exist, fill the error message format string and name, and return true.
*/
static bool
-owningrel_does_not_exist_skipping(List *objname, const char **msg, char **name)
+owningrel_does_not_exist_skipping(List *object, const char **msg, char **name)
{
- List *parent_objname;
+ List *parent_object;
RangeVar *parent_rel;
- parent_objname = list_truncate(list_copy(objname),
- list_length(objname) - 1);
+ parent_object = list_truncate(list_copy(object),
+ list_length(object) - 1);
- if (schema_does_not_exist_skipping(parent_objname, msg, name))
+ if (schema_does_not_exist_skipping(parent_object, msg, name))
return true;
- parent_rel = makeRangeVarFromNameList(parent_objname);
+ parent_rel = makeRangeVarFromNameList(parent_object);
if (!OidIsValid(RangeVarGetRelid(parent_rel, NoLock, true)))
{
*msg = gettext_noop("relation \"%s\" does not exist, skipping");
- *name = NameListToString(parent_objname);
+ *name = NameListToString(parent_object);
return true;
}
@@ -183,11 +175,11 @@ owningrel_does_not_exist_skipping(List *objname, const char **msg, char **name)
* specified schema name, and return true.
*/
static bool
-schema_does_not_exist_skipping(List *objname, const char **msg, char **name)
+schema_does_not_exist_skipping(List *object, const char **msg, char **name)
{
RangeVar *rel;
- rel = makeRangeVarFromNameList(objname);
+ rel = makeRangeVarFromNameList(object);
if (rel->schemaname != NULL &&
!OidIsValid(LookupNamespaceNoError(rel->schemaname)))
@@ -252,7 +244,7 @@ type_in_list_does_not_exist_skipping(List *typenames, const char **msg,
* get_object_address() in RemoveObjects would have thrown an ERROR.
*/
static void
-does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
+does_not_exist_skipping(ObjectType objtype, Node *object)
{
const char *msg = NULL;
char *name = NULL;
@@ -262,12 +254,12 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
{
case OBJECT_ACCESS_METHOD:
msg = gettext_noop("access method \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_TYPE:
case OBJECT_DOMAIN:
{
- TypeName *typ = linitial(objname);
+ TypeName *typ = castNode(TypeName, object);
if (!schema_does_not_exist_skipping(typ->names, &msg, &name))
{
@@ -277,171 +269,180 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs)
}
break;
case OBJECT_COLLATION:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("collation \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_CONVERSION:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("conversion \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_SCHEMA:
msg = gettext_noop("schema \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_TSPARSER:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search parser \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_TSDICTIONARY:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search dictionary \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_TSTEMPLATE:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search template \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_TSCONFIGURATION:
- if (!schema_does_not_exist_skipping(objname, &msg, &name))
+ if (!schema_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("text search configuration \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = NameListToString(castNode(List, object));
}
break;
case OBJECT_EXTENSION:
msg = gettext_noop("extension \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_FUNCTION:
- if (!schema_does_not_exist_skipping(objname, &msg, &name) &&
- !type_in_list_does_not_exist_skipping(objargs, &msg, &name))
{
- msg = gettext_noop("function %s(%s) does not exist, skipping");
- name = NameListToString(objname);
- args = TypeNameListToString(objargs);
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
+ !type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
+ {
+ msg = gettext_noop("function %s(%s) does not exist, skipping");
+ name = NameListToString(owa->objname);
+ args = TypeNameListToString(owa->objargs);
+ }
+ break;
}
- break;
case OBJECT_AGGREGATE:
- if (!schema_does_not_exist_skipping(objname, &msg, &name) &&
- !type_in_list_does_not_exist_skipping(objargs, &msg, &name))
{
- msg = gettext_noop("aggregate %s(%s) does not exist, skipping");
- name = NameListToString(objname);
- args = TypeNameListToString(objargs);
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
+ !type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
+ {
+ msg = gettext_noop("aggregate %s(%s) does not exist, skipping");
+ name = NameListToString(owa->objname);
+ args = TypeNameListToString(owa->objargs);
+ }
+ break;
}
- break;
case OBJECT_OPERATOR:
- if (!schema_does_not_exist_skipping(objname, &msg, &name) &&
- !type_in_list_does_not_exist_skipping(objargs, &msg, &name))
{
- msg = gettext_noop("operator %s does not exist, skipping");
- name = NameListToString(objname);
+ ObjectWithArgs *owa = castNode(ObjectWithArgs, object);
+ if (!schema_does_not_exist_skipping(owa->objname, &msg, &name) &&
+ !type_in_list_does_not_exist_skipping(owa->objargs, &msg, &name))
+ {
+ msg = gettext_noop("operator %s does not exist, skipping");
+ name = NameListToString(owa->objname);
+ }
+ break;
}
- break;
case OBJECT_LANGUAGE:
msg = gettext_noop("language \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_CAST:
{
- if (!type_in_list_does_not_exist_skipping(objname, &msg, &name) &&
- !type_in_list_does_not_exist_skipping(objargs, &msg, &name))
+ if (!type_in_list_does_not_exist_skipping(list_make1(linitial(castNode(List, object))), &msg, &name) &&
+ !type_in_list_does_not_exist_skipping(list_make1(lsecond(castNode(List, object))), &msg, &name))
{
/* XXX quote or no quote? */
msg = gettext_noop("cast from type %s to type %s does not exist, skipping");
- name = TypeNameToString((TypeName *) linitial(objname));
- args = TypeNameToString((TypeName *) linitial(objargs));
+ name = TypeNameToString(castNode(TypeName, linitial(castNode(List, object))));
+ args = TypeNameToString(castNode(TypeName, lsecond(castNode(List, object))));
}
}
break;
case OBJECT_TRANSFORM:
- if (!type_in_list_does_not_exist_skipping(objname, &msg, &name))
+ if (!type_in_list_does_not_exist_skipping(list_make1(linitial(castNode(List, object))), &msg, &name))
{
msg = gettext_noop("transform for type %s language \"%s\" does not exist, skipping");
- name = TypeNameToString((TypeName *) linitial(objname));
- args = strVal(linitial(objargs));
+ name = TypeNameToString(castNode(TypeName, linitial(castNode(List, object))));
+ args = strVal(lsecond(castNode(List, object)));
}
break;
case OBJECT_TRIGGER:
- if (!owningrel_does_not_exist_skipping(objname, &msg, &name))
+ if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("trigger \"%s\" for relation \"%s\" does not exist, skipping");
- name = strVal(llast(objname));
- args = NameListToString(list_truncate(list_copy(objname),
- list_length(objname) - 1));
+ name = strVal(llast(castNode(List, object)));
+ args = NameListToString(list_truncate(list_copy(castNode(List, object)),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_POLICY:
- if (!owningrel_does_not_exist_skipping(objname, &msg, &name))
+ if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("policy \"%s\" for relation \"%s\" does not exist, skipping");
- name = strVal(llast(objname));
- args = NameListToString(list_truncate(list_copy(objname),
- list_length(objname) - 1));
+ name = strVal(llast(castNode(List, object)));
+ args = NameListToString(list_truncate(list_copy(castNode(List, object)),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_EVENT_TRIGGER:
msg = gettext_noop("event trigger \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_RULE:
- if (!owningrel_does_not_exist_skipping(objname, &msg, &name))
+ if (!owningrel_does_not_exist_skipping(castNode(List, object), &msg, &name))
{
msg = gettext_noop("rule \"%s\" for relation \"%s\" does not exist, skipping");
- name = strVal(llast(objname));
- args = NameListToString(list_truncate(list_copy(objname),
- list_length(objname) - 1));
+ name = strVal(llast(castNode(List, object)));
+ args = NameListToString(list_truncate(list_copy(castNode(List, object)),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_FDW:
msg = gettext_noop("foreign-data wrapper \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_FOREIGN_SERVER:
msg = gettext_noop("server \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
case OBJECT_OPCLASS:
{
- List *opcname = list_copy_tail(objname, 1);
+ List *opcname = list_copy_tail(castNode(List, object), 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));
+ args = strVal(linitial(castNode(List, object)));
}
}
break;
case OBJECT_OPFAMILY:
{
- List *opfname = list_copy_tail(objname, 1);
+ List *opfname = list_copy_tail(castNode(List, object), 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));
+ args = strVal(linitial(castNode(List, object)));
}
}
break;
case OBJECT_PUBLICATION:
msg = gettext_noop("publication \"%s\" does not exist, skipping");
- name = NameListToString(objname);
+ name = strVal((Value *) object);
break;
default:
elog(ERROR, "unrecognized object type: %d", (int) objtype);
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 325f5b74b81..585fcce98e8 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -2672,9 +2672,8 @@ extension_config_remove(Oid extensionoid, Oid tableoid)
* Execute ALTER EXTENSION SET SCHEMA
*/
ObjectAddress
-AlterExtensionNamespace(List *names, const char *newschema, Oid *oldschema)
+AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *oldschema)
{
- char *extensionName;
Oid extensionOid;
Oid nspOid;
Oid oldNspOid = InvalidOid;
@@ -2690,12 +2689,6 @@ AlterExtensionNamespace(List *names, const char *newschema, Oid *oldschema)
ObjectAddresses *objsMoved;
ObjectAddress extAddr;
- if (list_length(names) != 1)
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("extension name cannot be qualified")));
- extensionName = strVal(linitial(names));
-
extensionOid = get_extension_oid(extensionName, false);
nspOid = LookupCreationNamespace(newschema);
@@ -3191,7 +3184,7 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
* does not exist, and will also acquire a lock on the object to guard
* against concurrent DROP and ALTER EXTENSION ADD/DROP operations.
*/
- object = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
+ object = get_object_address(stmt->objtype, stmt->object,
&relation, ShareUpdateExclusiveLock, false);
Assert(object.objectSubId == 0);
@@ -3200,7 +3193,7 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
/* Permission check: must own target object, too */
check_object_ownership(GetUserId(), stmt->objtype, object,
- stmt->objname, stmt->objargs, relation);
+ stmt->object, relation);
/*
* Check existing extension membership.
diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c
index 422da8b6b06..5f16d6cf1c1 100644
--- a/src/backend/commands/seclabel.c
+++ b/src/backend/commands/seclabel.c
@@ -89,12 +89,12 @@ ExecSecLabelStmt(SecLabelStmt *stmt)
* object does not exist, and will also acquire a lock on the target to
* guard against concurrent modifications.
*/
- address = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
+ address = get_object_address(stmt->objtype, stmt->object,
&relation, ShareUpdateExclusiveLock, false);
/* Require ownership of the target object. */
check_object_ownership(GetUserId(), stmt->objtype, address,
- stmt->objname, stmt->objargs, relation);
+ stmt->object, relation);
/* Perform other integrity checks as needed. */
switch (stmt->objtype)
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 6904d5c07a1..1ddb72d1647 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2786,7 +2786,7 @@ RenameConstraint(RenameStmt *stmt)
Relation rel;
HeapTuple tup;
- typid = typenameTypeId(NULL, makeTypeNameFromNameList(stmt->object));
+ typid = typenameTypeId(NULL, makeTypeNameFromNameList(castNode(List, stmt->object)));
rel = heap_open(TypeRelationId, RowExclusiveLock);
tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typid));
if (!HeapTupleIsValid(tup))
@@ -9392,11 +9392,9 @@ RebuildConstraintComment(AlteredTableInfo *tab, int pass, Oid objid,
/* Build node CommentStmt */
cmd = makeNode(CommentStmt);
cmd->objtype = OBJECT_TABCONSTRAINT;
- cmd->objname = list_make3(
- makeString(get_namespace_name(RelationGetNamespace(rel))),
- makeString(RelationGetRelationName(rel)),
- makeString(conname));
- cmd->objargs = NIL;
+ cmd->object = (Node *) list_make3(makeString(get_namespace_name(RelationGetNamespace(rel))),
+ makeString(RelationGetRelationName(rel)),
+ makeString(conname));
cmd->comment = comment_str;
/* Append it to list of commands */
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index d8bd8a50dd8..c765e97fa80 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -3133,7 +3133,7 @@ replace_domain_constraint_value(ParseState *pstate, ColumnRef *cref)
ObjectAddress
RenameType(RenameStmt *stmt)
{
- List *names = stmt->object;
+ List *names = castNode(List, stmt->object);
const char *newTypeName = stmt->newname;
TypeName *typename;
Oid typeOid;
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 35fec878428..598ba944a15 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -3116,7 +3116,6 @@ _copyDropStmt(const DropStmt *from)
DropStmt *newnode = makeNode(DropStmt);
COPY_NODE_FIELD(objects);
- COPY_NODE_FIELD(arguments);
COPY_SCALAR_FIELD(removeType);
COPY_SCALAR_FIELD(behavior);
COPY_SCALAR_FIELD(missing_ok);
@@ -3143,8 +3142,7 @@ _copyCommentStmt(const CommentStmt *from)
CommentStmt *newnode = makeNode(CommentStmt);
COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(objname);
- COPY_NODE_FIELD(objargs);
+ COPY_NODE_FIELD(object);
COPY_STRING_FIELD(comment);
return newnode;
@@ -3156,8 +3154,7 @@ _copySecLabelStmt(const SecLabelStmt *from)
SecLabelStmt *newnode = makeNode(SecLabelStmt);
COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(objname);
- COPY_NODE_FIELD(objargs);
+ COPY_NODE_FIELD(object);
COPY_STRING_FIELD(provider);
COPY_STRING_FIELD(label);
@@ -3263,7 +3260,6 @@ _copyRenameStmt(const RenameStmt *from)
COPY_SCALAR_FIELD(relationType);
COPY_NODE_FIELD(relation);
COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(objarg);
COPY_STRING_FIELD(subname);
COPY_STRING_FIELD(newname);
COPY_SCALAR_FIELD(behavior);
@@ -3279,8 +3275,7 @@ _copyAlterObjectDependsStmt(const AlterObjectDependsStmt *from)
COPY_SCALAR_FIELD(objectType);
COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(objname);
- COPY_NODE_FIELD(objargs);
+ COPY_NODE_FIELD(object);
COPY_NODE_FIELD(extname);
return newnode;
@@ -3294,7 +3289,6 @@ _copyAlterObjectSchemaStmt(const AlterObjectSchemaStmt *from)
COPY_SCALAR_FIELD(objectType);
COPY_NODE_FIELD(relation);
COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(objarg);
COPY_STRING_FIELD(newschema);
COPY_SCALAR_FIELD(missing_ok);
@@ -3309,7 +3303,6 @@ _copyAlterOwnerStmt(const AlterOwnerStmt *from)
COPY_SCALAR_FIELD(objectType);
COPY_NODE_FIELD(relation);
COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(objarg);
COPY_NODE_FIELD(newowner);
return newnode;
@@ -3780,8 +3773,7 @@ _copyAlterExtensionContentsStmt(const AlterExtensionContentsStmt *from)
COPY_STRING_FIELD(extname);
COPY_SCALAR_FIELD(action);
COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(objname);
- COPY_NODE_FIELD(objargs);
+ COPY_NODE_FIELD(object);
return newnode;
}
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index e526ef96b70..876b8aabb9c 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -1220,7 +1220,6 @@ static bool
_equalDropStmt(const DropStmt *a, const DropStmt *b)
{
COMPARE_NODE_FIELD(objects);
- COMPARE_NODE_FIELD(arguments);
COMPARE_SCALAR_FIELD(removeType);
COMPARE_SCALAR_FIELD(behavior);
COMPARE_SCALAR_FIELD(missing_ok);
@@ -1243,8 +1242,7 @@ static bool
_equalCommentStmt(const CommentStmt *a, const CommentStmt *b)
{
COMPARE_SCALAR_FIELD(objtype);
- COMPARE_NODE_FIELD(objname);
- COMPARE_NODE_FIELD(objargs);
+ COMPARE_NODE_FIELD(object);
COMPARE_STRING_FIELD(comment);
return true;
@@ -1254,8 +1252,7 @@ static bool
_equalSecLabelStmt(const SecLabelStmt *a, const SecLabelStmt *b)
{
COMPARE_SCALAR_FIELD(objtype);
- COMPARE_NODE_FIELD(objname);
- COMPARE_NODE_FIELD(objargs);
+ COMPARE_NODE_FIELD(object);
COMPARE_STRING_FIELD(provider);
COMPARE_STRING_FIELD(label);
@@ -1347,7 +1344,6 @@ _equalRenameStmt(const RenameStmt *a, const RenameStmt *b)
COMPARE_SCALAR_FIELD(relationType);
COMPARE_NODE_FIELD(relation);
COMPARE_NODE_FIELD(object);
- COMPARE_NODE_FIELD(objarg);
COMPARE_STRING_FIELD(subname);
COMPARE_STRING_FIELD(newname);
COMPARE_SCALAR_FIELD(behavior);
@@ -1361,8 +1357,7 @@ _equalAlterObjectDependsStmt(const AlterObjectDependsStmt *a, const AlterObjectD
{
COMPARE_SCALAR_FIELD(objectType);
COMPARE_NODE_FIELD(relation);
- COMPARE_NODE_FIELD(objname);
- COMPARE_NODE_FIELD(objargs);
+ COMPARE_NODE_FIELD(object);
COMPARE_NODE_FIELD(extname);
return true;
@@ -1374,7 +1369,6 @@ _equalAlterObjectSchemaStmt(const AlterObjectSchemaStmt *a, const AlterObjectSch
COMPARE_SCALAR_FIELD(objectType);
COMPARE_NODE_FIELD(relation);
COMPARE_NODE_FIELD(object);
- COMPARE_NODE_FIELD(objarg);
COMPARE_STRING_FIELD(newschema);
COMPARE_SCALAR_FIELD(missing_ok);
@@ -1387,7 +1381,6 @@ _equalAlterOwnerStmt(const AlterOwnerStmt *a, const AlterOwnerStmt *b)
COMPARE_SCALAR_FIELD(objectType);
COMPARE_NODE_FIELD(relation);
COMPARE_NODE_FIELD(object);
- COMPARE_NODE_FIELD(objarg);
COMPARE_NODE_FIELD(newowner);
return true;
@@ -1783,8 +1776,7 @@ _equalAlterExtensionContentsStmt(const AlterExtensionContentsStmt *a, const Alte
COMPARE_STRING_FIELD(extname);
COMPARE_SCALAR_FIELD(action);
COMPARE_SCALAR_FIELD(objtype);
- COMPARE_NODE_FIELD(objname);
- COMPARE_NODE_FIELD(objargs);
+ COMPARE_NODE_FIELD(object);
return true;
}
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 3289f5cbd4a..f0cb956b83d 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -440,7 +440,9 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <boolean> copy_from opt_program
%type <ival> opt_column event cursor_options opt_hold opt_set_data
-%type <objtype> drop_type comment_type security_label_type
+%type <objtype> drop_type_any_name drop_type_name
+ comment_type_any_name comment_type_name
+ security_label_type_any_name security_label_type_name
%type <node> fetch_args limit_clause select_limit_value
offset_clause select_offset_value
@@ -4080,8 +4082,7 @@ DropPLangStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_LANGUAGE;
- n->objects = list_make1(list_make1(makeString($4)));
- n->arguments = NIL;
+ n->objects = list_make1(makeString($4));
n->behavior = $5;
n->missing_ok = false;
n->concurrent = false;
@@ -4091,7 +4092,7 @@ DropPLangStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_LANGUAGE;
- n->objects = list_make1(list_make1(makeString($6)));
+ n->objects = list_make1(makeString($6));
n->behavior = $7;
n->missing_ok = true;
n->concurrent = false;
@@ -4246,7 +4247,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_ACCESS_METHOD;
- n->objname = list_make1(makeString($7));
+ n->object = (Node *) makeString($7);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
@@ -4255,8 +4256,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_AGGREGATE;
- n->objname = $6->objname;
- n->objargs = $6->objargs;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
@@ -4265,8 +4265,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_CAST;
- n->objname = list_make1($7);
- n->objargs = list_make1($9);
+ n->object = (Node *) list_make2($7, $9);
$$ = (Node *) n;
}
| ALTER EXTENSION name add_drop COLLATION any_name
@@ -4275,7 +4274,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_COLLATION;
- n->objname = $6;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop CONVERSION_P any_name
@@ -4284,7 +4283,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_CONVERSION;
- n->objname = $6;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop DOMAIN_P Typename
@@ -4293,7 +4292,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_DOMAIN;
- n->objname = list_make1($6);
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop FUNCTION function_with_argtypes
@@ -4302,8 +4301,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_FUNCTION;
- n->objname = $6->objname;
- n->objargs = $6->objargs;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop opt_procedural LANGUAGE name
@@ -4312,7 +4310,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_LANGUAGE;
- n->objname = list_make1(makeString($7));
+ n->object = (Node *) makeString($7);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
@@ -4321,8 +4319,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_OPERATOR;
- n->objname = $6->objname;
- n->objargs = $6->objargs;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING access_method
@@ -4331,7 +4328,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_OPCLASS;
- n->objname = lcons(makeString($9), $7);
+ n->object = (Node *) lcons(makeString($9), $7);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING access_method
@@ -4340,7 +4337,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_OPFAMILY;
- n->objname = lcons(makeString($9), $7);
+ n->object = (Node *) lcons(makeString($9), $7);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop SCHEMA name
@@ -4349,7 +4346,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_SCHEMA;
- n->objname = list_make1(makeString($6));
+ n->object = (Node *) makeString($6);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop EVENT TRIGGER name
@@ -4358,7 +4355,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_EVENT_TRIGGER;
- n->objname = list_make1(makeString($7));
+ n->object = (Node *) makeString($7);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TABLE any_name
@@ -4367,7 +4364,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TABLE;
- n->objname = $6;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name
@@ -4376,7 +4373,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TSPARSER;
- n->objname = $8;
+ n->object = (Node *) $8;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name
@@ -4385,7 +4382,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TSDICTIONARY;
- n->objname = $8;
+ n->object = (Node *) $8;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
@@ -4394,7 +4391,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TSTEMPLATE;
- n->objname = $8;
+ n->object = (Node *) $8;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name
@@ -4403,7 +4400,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TSCONFIGURATION;
- n->objname = $8;
+ n->object = (Node *) $8;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop SEQUENCE any_name
@@ -4412,7 +4409,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_SEQUENCE;
- n->objname = $6;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop VIEW any_name
@@ -4421,7 +4418,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_VIEW;
- n->objname = $6;
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop MATERIALIZED VIEW any_name
@@ -4430,7 +4427,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_MATVIEW;
- n->objname = $7;
+ n->object = (Node *) $7;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop FOREIGN TABLE any_name
@@ -4439,7 +4436,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_FOREIGN_TABLE;
- n->objname = $7;
+ n->object = (Node *) $7;
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name
@@ -4448,7 +4445,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_FDW;
- n->objname = list_make1(makeString($8));
+ n->object = (Node *) makeString($8);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop SERVER name
@@ -4457,7 +4454,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_FOREIGN_SERVER;
- n->objname = list_make1(makeString($6));
+ n->object = (Node *) makeString($6);
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name
@@ -4466,8 +4463,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TRANSFORM;
- n->objname = list_make1($7);
- n->objargs = list_make1(makeString($9));
+ n->object = (Node *) list_make2($7, makeString($9));
$$ = (Node *)n;
}
| ALTER EXTENSION name add_drop TYPE_P Typename
@@ -4476,7 +4472,7 @@ AlterExtensionContentsStmt:
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TYPE;
- n->objname = list_make1($6);
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
;
@@ -4526,8 +4522,7 @@ DropFdwStmt: DROP FOREIGN DATA_P WRAPPER name opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FDW;
- n->objects = list_make1(list_make1(makeString($5)));
- n->arguments = NIL;
+ n->objects = list_make1(makeString($5));
n->missing_ok = false;
n->behavior = $6;
n->concurrent = false;
@@ -4537,8 +4532,7 @@ DropFdwStmt: DROP FOREIGN DATA_P WRAPPER name opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FDW;
- n->objects = list_make1(list_make1(makeString($7)));
- n->arguments = NIL;
+ n->objects = list_make1(makeString($7));
n->missing_ok = true;
n->behavior = $8;
n->concurrent = false;
@@ -4688,8 +4682,7 @@ DropForeignServerStmt: DROP SERVER name opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FOREIGN_SERVER;
- n->objects = list_make1(list_make1(makeString($3)));
- n->arguments = NIL;
+ n->objects = list_make1(makeString($3));
n->missing_ok = false;
n->behavior = $4;
n->concurrent = false;
@@ -4699,8 +4692,7 @@ DropForeignServerStmt: DROP SERVER name opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FOREIGN_SERVER;
- n->objects = list_make1(list_make1(makeString($5)));
- n->arguments = NIL;
+ n->objects = list_make1(makeString($5));
n->missing_ok = true;
n->behavior = $6;
n->concurrent = false;
@@ -5024,7 +5016,6 @@ DropPolicyStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_POLICY;
n->objects = list_make1(lappend($5, makeString($3)));
- n->arguments = NIL;
n->behavior = $6;
n->missing_ok = false;
n->concurrent = false;
@@ -5035,7 +5026,6 @@ DropPolicyStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_POLICY;
n->objects = list_make1(lappend($7, makeString($5)));
- n->arguments = NIL;
n->behavior = $8;
n->missing_ok = true;
n->concurrent = false;
@@ -5348,7 +5338,6 @@ DropTrigStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_TRIGGER;
n->objects = list_make1(lappend($5, makeString($3)));
- n->arguments = NIL;
n->behavior = $6;
n->missing_ok = false;
n->concurrent = false;
@@ -5359,7 +5348,6 @@ DropTrigStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_TRIGGER;
n->objects = list_make1(lappend($7, makeString($5)));
- n->arguments = NIL;
n->behavior = $8;
n->missing_ok = true;
n->concurrent = false;
@@ -5469,7 +5457,6 @@ DropAssertStmt:
{
DropStmt *n = makeNode(DropStmt);
n->objects = NIL;
- n->arguments = NIL;
n->behavior = $4;
n->removeType = OBJECT_TRIGGER; /* XXX */
ereport(ERROR,
@@ -6008,24 +5995,42 @@ ReassignOwnedStmt:
*
*****************************************************************************/
-DropStmt: DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
+DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = $2;
n->missing_ok = TRUE;
n->objects = $5;
- n->arguments = NIL;
n->behavior = $6;
n->concurrent = false;
$$ = (Node *)n;
}
- | DROP drop_type any_name_list opt_drop_behavior
+ | DROP drop_type_any_name any_name_list opt_drop_behavior
+ {
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = $2;
+ n->missing_ok = FALSE;
+ n->objects = $3;
+ n->behavior = $4;
+ n->concurrent = false;
+ $$ = (Node *)n;
+ }
+ | DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior
+ {
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = $2;
+ n->missing_ok = TRUE;
+ n->objects = $5;
+ n->behavior = $6;
+ n->concurrent = false;
+ $$ = (Node *)n;
+ }
+ | DROP drop_type_name name_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = $2;
n->missing_ok = FALSE;
n->objects = $3;
- n->arguments = NIL;
n->behavior = $4;
n->concurrent = false;
$$ = (Node *)n;
@@ -6076,7 +6081,6 @@ DropStmt: DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
n->removeType = OBJECT_INDEX;
n->missing_ok = FALSE;
n->objects = $4;
- n->arguments = NIL;
n->behavior = $5;
n->concurrent = true;
$$ = (Node *)n;
@@ -6087,31 +6091,35 @@ DropStmt: DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
n->removeType = OBJECT_INDEX;
n->missing_ok = TRUE;
n->objects = $6;
- n->arguments = NIL;
n->behavior = $7;
n->concurrent = true;
$$ = (Node *)n;
}
;
-
-drop_type: TABLE { $$ = OBJECT_TABLE; }
+/* object types taking any_name_list */
+drop_type_any_name:
+ TABLE { $$ = OBJECT_TABLE; }
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
| VIEW { $$ = OBJECT_VIEW; }
| MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
| INDEX { $$ = OBJECT_INDEX; }
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
- | ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
- | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
| COLLATION { $$ = OBJECT_COLLATION; }
| CONVERSION_P { $$ = OBJECT_CONVERSION; }
- | SCHEMA { $$ = OBJECT_SCHEMA; }
- | EXTENSION { $$ = OBJECT_EXTENSION; }
| TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
| TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; }
| TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; }
| TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }
+ ;
+
+/* object types taking name_list */
+drop_type_name:
+ ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
+ | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
+ | EXTENSION { $$ = OBJECT_EXTENSION; }
| PUBLICATION { $$ = OBJECT_PUBLICATION; }
+ | SCHEMA { $$ = OBJECT_SCHEMA; }
;
any_name_list:
@@ -6130,8 +6138,8 @@ attrs: '.' attr_name
;
type_name_list:
- Typename { $$ = list_make1(list_make1($1)); }
- | type_name_list ',' Typename { $$ = lappend($1, list_make1($3)); }
+ Typename { $$ = list_make1($1); }
+ | type_name_list ',' Typename { $$ = lappend($1, $3); }
/*****************************************************************************
*
@@ -6188,12 +6196,19 @@ opt_restart_seqs:
*****************************************************************************/
CommentStmt:
- COMMENT ON comment_type any_name IS comment_text
+ COMMENT ON comment_type_any_name any_name IS comment_text
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = $3;
- n->objname = $4;
- n->objargs = NIL;
+ n->object = (Node *) $4;
+ n->comment = $6;
+ $$ = (Node *) n;
+ }
+ | COMMENT ON comment_type_name name IS comment_text
+ {
+ CommentStmt *n = makeNode(CommentStmt);
+ n->objtype = $3;
+ n->object = (Node *) makeString($4);
n->comment = $6;
$$ = (Node *) n;
}
@@ -6201,8 +6216,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_TYPE;
- n->objname = list_make1($4);
- n->objargs = NIL;
+ n->object = (Node *) $4;
n->comment = $6;
$$ = (Node *) n;
}
@@ -6210,8 +6224,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_DOMAIN;
- n->objname = list_make1($4);
- n->objargs = NIL;
+ n->object = (Node *) $4;
n->comment = $6;
$$ = (Node *) n;
}
@@ -6219,8 +6232,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_AGGREGATE;
- n->objname = $4->objname;
- n->objargs = $4->objargs;
+ n->object = (Node *) $4;
n->comment = $6;
$$ = (Node *) n;
}
@@ -6228,8 +6240,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_FUNCTION;
- n->objname = $4->objname;
- n->objargs = $4->objargs;
+ n->object = (Node *) $4;
n->comment = $6;
$$ = (Node *) n;
}
@@ -6237,8 +6248,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_OPERATOR;
- n->objname = $4->objname;
- n->objargs = $4->objargs;
+ n->object = (Node *) $4;
n->comment = $6;
$$ = (Node *) n;
}
@@ -6246,8 +6256,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_TABCONSTRAINT;
- n->objname = lappend($6, makeString($4));
- n->objargs = NIL;
+ n->object = (Node *) lappend($6, makeString($4));
n->comment = $8;
$$ = (Node *) n;
}
@@ -6260,8 +6269,7 @@ CommentStmt:
* there's a shift/reduce conflict if we do that, so fix it
* up here.
*/
- n->objname = list_make1(makeTypeNameFromNameList($7));
- n->objargs = list_make1(makeString($4));
+ n->object = (Node *) list_make2(makeTypeNameFromNameList($7), makeString($4));
n->comment = $9;
$$ = (Node *) n;
}
@@ -6269,8 +6277,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_POLICY;
- n->objname = lappend($6, makeString($4));
- n->objargs = NIL;
+ n->object = (Node *) lappend($6, makeString($4));
n->comment = $8;
$$ = (Node *) n;
}
@@ -6278,8 +6285,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_RULE;
- n->objname = lappend($6, makeString($4));
- n->objargs = NIL;
+ n->object = (Node *) lappend($6, makeString($4));
n->comment = $8;
$$ = (Node *) n;
}
@@ -6287,8 +6293,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_TRANSFORM;
- n->objname = list_make1($5);
- n->objargs = list_make1(makeString($7));
+ n->object = (Node *) list_make2($5, makeString($7));
n->comment = $9;
$$ = (Node *) n;
}
@@ -6296,8 +6301,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_TRIGGER;
- n->objname = lappend($6, makeString($4));
- n->objargs = NIL;
+ n->object = (Node *) lappend($6, makeString($4));
n->comment = $8;
$$ = (Node *) n;
}
@@ -6305,7 +6309,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_OPCLASS;
- n->objname = lcons(makeString($7), $5);
+ n->object = (Node *) lcons(makeString($7), $5);
n->comment = $9;
$$ = (Node *) n;
}
@@ -6313,8 +6317,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_OPFAMILY;
- n->objname = lcons(makeString($7), $5);
- n->objargs = NIL;
+ n->object = (Node *) lcons(makeString($7), $5);
n->comment = $9;
$$ = (Node *) n;
}
@@ -6322,8 +6325,7 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_LARGEOBJECT;
- n->objname = list_make1($5);
- n->objargs = NIL;
+ n->object = (Node *) $5;
n->comment = $7;
$$ = (Node *) n;
}
@@ -6331,27 +6333,15 @@ CommentStmt:
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = OBJECT_CAST;
- n->objname = list_make1($5);
- n->objargs = list_make1($7);
+ n->object = (Node *) list_make2($5, $7);
n->comment = $10;
$$ = (Node *) n;
}
- | COMMENT ON opt_procedural LANGUAGE any_name IS comment_text
- {
- CommentStmt *n = makeNode(CommentStmt);
- n->objtype = OBJECT_LANGUAGE;
- n->objname = $5;
- n->objargs = NIL;
- n->comment = $7;
- $$ = (Node *) n;
- }
;
-comment_type:
- ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
- | COLUMN { $$ = OBJECT_COLUMN; }
- | DATABASE { $$ = OBJECT_DATABASE; }
- | SCHEMA { $$ = OBJECT_SCHEMA; }
+/* object types taking any_name */
+comment_type_any_name:
+ COLUMN { $$ = OBJECT_COLUMN; }
| INDEX { $$ = OBJECT_INDEX; }
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
| TABLE { $$ = OBJECT_TABLE; }
@@ -6359,19 +6349,27 @@ comment_type:
| MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
| COLLATION { $$ = OBJECT_COLLATION; }
| CONVERSION_P { $$ = OBJECT_CONVERSION; }
- | TABLESPACE { $$ = OBJECT_TABLESPACE; }
- | EXTENSION { $$ = OBJECT_EXTENSION; }
- | ROLE { $$ = OBJECT_ROLE; }
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
- | SERVER { $$ = OBJECT_FOREIGN_SERVER; }
- | FOREIGN DATA_P WRAPPER { $$ = OBJECT_FDW; }
- | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
| TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }
| TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; }
| TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
| TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; }
;
+/* object types taking name */
+comment_type_name:
+ ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
+ | DATABASE { $$ = OBJECT_DATABASE; }
+ | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
+ | EXTENSION { $$ = OBJECT_EXTENSION; }
+ | FOREIGN DATA_P WRAPPER { $$ = OBJECT_FDW; }
+ | opt_procedural LANGUAGE { $$ = OBJECT_LANGUAGE; }
+ | ROLE { $$ = OBJECT_ROLE; }
+ | SCHEMA { $$ = OBJECT_SCHEMA; }
+ | SERVER { $$ = OBJECT_FOREIGN_SERVER; }
+ | TABLESPACE { $$ = OBJECT_TABLESPACE; }
+ ;
+
comment_text:
Sconst { $$ = $1; }
| NULL_P { $$ = NULL; }
@@ -6388,14 +6386,23 @@ comment_text:
*****************************************************************************/
SecLabelStmt:
- SECURITY LABEL opt_provider ON security_label_type any_name
+ SECURITY LABEL opt_provider ON security_label_type_any_name any_name
IS security_label
{
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = $5;
- n->objname = $6;
- n->objargs = NIL;
+ n->object = (Node *) $6;
+ n->label = $8;
+ $$ = (Node *) n;
+ }
+ | SECURITY LABEL opt_provider ON security_label_type_name name
+ IS security_label
+ {
+ SecLabelStmt *n = makeNode(SecLabelStmt);
+ n->provider = $3;
+ n->objtype = $5;
+ n->object = (Node *) makeString($6);
n->label = $8;
$$ = (Node *) n;
}
@@ -6405,8 +6412,7 @@ SecLabelStmt:
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = OBJECT_TYPE;
- n->objname = list_make1($6);
- n->objargs = NIL;
+ n->object = (Node *) $6;
n->label = $8;
$$ = (Node *) n;
}
@@ -6416,8 +6422,7 @@ SecLabelStmt:
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = OBJECT_TYPE;
- n->objname = list_make1($6);
- n->objargs = NIL;
+ n->object = (Node *) $6;
n->label = $8;
$$ = (Node *) n;
}
@@ -6427,8 +6432,7 @@ SecLabelStmt:
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = OBJECT_AGGREGATE;
- n->objname = $6->objname;
- n->objargs = $6->objargs;
+ n->object = (Node *) $6;
n->label = $8;
$$ = (Node *) n;
}
@@ -6438,8 +6442,7 @@ SecLabelStmt:
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = OBJECT_FUNCTION;
- n->objname = $6->objname;
- n->objargs = $6->objargs;
+ n->object = (Node *) $6;
n->label = $8;
$$ = (Node *) n;
}
@@ -6449,19 +6452,7 @@ SecLabelStmt:
SecLabelStmt *n = makeNode(SecLabelStmt);
n->provider = $3;
n->objtype = OBJECT_LARGEOBJECT;
- n->objname = list_make1($7);
- n->objargs = NIL;
- n->label = $9;
- $$ = (Node *) n;
- }
- | SECURITY LABEL opt_provider ON opt_procedural LANGUAGE any_name
- IS security_label
- {
- SecLabelStmt *n = makeNode(SecLabelStmt);
- n->provider = $3;
- n->objtype = OBJECT_LANGUAGE;
- n->objname = $7;
- n->objargs = NIL;
+ n->object = (Node *) $7;
n->label = $9;
$$ = (Node *) n;
}
@@ -6471,20 +6462,26 @@ opt_provider: FOR NonReservedWord_or_Sconst { $$ = $2; }
| /* empty */ { $$ = NULL; }
;
-security_label_type:
+/* object types taking any_name */
+security_label_type_any_name:
COLUMN { $$ = OBJECT_COLUMN; }
- | DATABASE { $$ = OBJECT_DATABASE; }
- | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
- | SCHEMA { $$ = OBJECT_SCHEMA; }
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
| TABLE { $$ = OBJECT_TABLE; }
- | ROLE { $$ = OBJECT_ROLE; }
- | TABLESPACE { $$ = OBJECT_TABLESPACE; }
| VIEW { $$ = OBJECT_VIEW; }
| MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
;
+/* object types taking name */
+security_label_type_name:
+ DATABASE { $$ = OBJECT_DATABASE; }
+ | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
+ | opt_procedural LANGUAGE { $$ = OBJECT_LANGUAGE; }
+ | ROLE { $$ = OBJECT_ROLE; }
+ | SCHEMA { $$ = OBJECT_SCHEMA; }
+ | TABLESPACE { $$ = OBJECT_TABLESPACE; }
+ ;
+
security_label: Sconst { $$ = $1; }
| NULL_P { $$ = NULL; }
;
@@ -7684,8 +7681,7 @@ RemoveFuncStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FUNCTION;
- n->objects = list_make1($3->objname);
- n->arguments = list_make1($3->objargs);
+ n->objects = list_make1($3);
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
@@ -7695,8 +7691,7 @@ RemoveFuncStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_FUNCTION;
- n->objects = list_make1($5->objname);
- n->arguments = list_make1($5->objargs);
+ n->objects = list_make1($5);
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7709,8 +7704,7 @@ RemoveAggrStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE;
- n->objects = list_make1($3->objname);
- n->arguments = list_make1($3->objargs);
+ n->objects = list_make1($3);
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
@@ -7720,8 +7714,7 @@ RemoveAggrStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_AGGREGATE;
- n->objects = list_make1($5->objname);
- n->arguments = list_make1($5->objargs);
+ n->objects = list_make1($5);
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7734,8 +7727,7 @@ RemoveOperStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_OPERATOR;
- n->objects = list_make1($3->objname);
- n->arguments = list_make1($3->objargs);
+ n->objects = list_make1($3);
n->behavior = $4;
n->missing_ok = false;
n->concurrent = false;
@@ -7745,8 +7737,7 @@ RemoveOperStmt:
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_OPERATOR;
- n->objects = list_make1($5->objname);
- n->arguments = list_make1($5->objargs);
+ n->objects = list_make1($5);
n->behavior = $6;
n->missing_ok = true;
n->concurrent = false;
@@ -7872,8 +7863,7 @@ DropCastStmt: DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_beha
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_CAST;
- n->objects = list_make1(list_make1($5));
- n->arguments = list_make1(list_make1($7));
+ n->objects = list_make1(list_make2($5, $7));
n->behavior = $9;
n->missing_ok = $3;
n->concurrent = false;
@@ -7927,8 +7917,7 @@ DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_d
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_TRANSFORM;
- n->objects = list_make1(list_make1($5));
- n->arguments = list_make1(list_make1(makeString($7)));
+ n->objects = list_make1(list_make2($5, makeString($7)));
n->behavior = $8;
n->missing_ok = $3;
$$ = (Node *)n;
@@ -8035,8 +8024,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_AGGREGATE;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8045,7 +8033,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8054,7 +8042,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8072,7 +8060,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_DOMAIN;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8081,7 +8069,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_DOMCONSTRAINT;
- n->object = $3;
+ n->object = (Node *) $3;
n->subname = $6;
n->newname = $8;
$$ = (Node *)n;
@@ -8090,7 +8078,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_FDW;
- n->object = list_make1(makeString($5));
+ n->object = (Node *) makeString($5);
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8099,8 +8087,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_FUNCTION;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8118,7 +8105,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_LANGUAGE;
- n->object = list_make1(makeString($4));
+ n->object = (Node *) makeString($4);
n->newname = $7;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8127,7 +8114,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_OPCLASS;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newname = $9;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8136,7 +8123,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_OPFAMILY;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newname = $9;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8165,7 +8152,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_PUBLICATION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8183,7 +8170,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_FOREIGN_SERVER;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8192,7 +8179,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_SUBSCRIPTION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8427,7 +8414,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_EVENT_TRIGGER;
- n->object = list_make1(makeString($4));
+ n->object = (Node *) makeString($4);
n->newname = $7;
$$ = (Node *)n;
}
@@ -8462,7 +8449,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSPARSER;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8471,7 +8458,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8480,7 +8467,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSTEMPLATE;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8489,7 +8476,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8498,7 +8485,7 @@ RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8536,9 +8523,7 @@ AlterObjectDependsStmt:
{
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_FUNCTION;
- n->relation = NULL;
- n->objname = $3->objname;
- n->objargs = $3->objargs;
+ n->object = (Node *) $3;
n->extname = makeString($7);
$$ = (Node *)n;
}
@@ -8547,8 +8532,7 @@ AlterObjectDependsStmt:
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_TRIGGER;
n->relation = $5;
- n->objname = list_make1(makeString($3));
- n->objargs = NIL;
+ n->object = (Node *) list_make1(makeString($3));
n->extname = makeString($9);
$$ = (Node *)n;
}
@@ -8557,8 +8541,6 @@ AlterObjectDependsStmt:
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_MATVIEW;
n->relation = $4;
- n->objname = NIL;
- n->objargs = NIL;
n->extname = makeString($8);
$$ = (Node *)n;
}
@@ -8567,8 +8549,6 @@ AlterObjectDependsStmt:
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_INDEX;
n->relation = $3;
- n->objname = NIL;
- n->objargs = NIL;
n->extname = makeString($7);
$$ = (Node *)n;
}
@@ -8585,8 +8565,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_AGGREGATE;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8595,7 +8574,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8604,7 +8583,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8613,16 +8592,16 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_DOMAIN;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
}
- | ALTER EXTENSION any_name SET SCHEMA name
+ | ALTER EXTENSION name SET SCHEMA name
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_EXTENSION;
- n->object = $3;
+ n->object = (Node *) makeString($3);
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8631,8 +8610,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_FUNCTION;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8641,8 +8619,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_OPERATOR;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8651,7 +8628,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_OPCLASS;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newschema = $9;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8660,7 +8637,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_OPFAMILY;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newschema = $9;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8687,7 +8664,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSPARSER;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8696,7 +8673,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8705,7 +8682,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSTEMPLATE;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8714,7 +8691,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8795,7 +8772,7 @@ AlterObjectSchemaStmt:
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
@@ -8839,8 +8816,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_AGGREGATE;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8848,7 +8824,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8856,7 +8832,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8864,7 +8840,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_DATABASE;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8872,7 +8848,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_DOMAIN;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8880,8 +8856,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_FUNCTION;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8889,7 +8864,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_LANGUAGE;
- n->object = list_make1(makeString($4));
+ n->object = (Node *) makeString($4);
n->newowner = $7;
$$ = (Node *)n;
}
@@ -8897,7 +8872,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_LARGEOBJECT;
- n->object = list_make1($4);
+ n->object = (Node *) $4;
n->newowner = $7;
$$ = (Node *)n;
}
@@ -8905,8 +8880,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_OPERATOR;
- n->object = $3->objname;
- n->objarg = $3->objargs;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8914,7 +8888,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_OPCLASS;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newowner = $9;
$$ = (Node *)n;
}
@@ -8922,7 +8896,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_OPFAMILY;
- n->object = lcons(makeString($6), $4);
+ n->object = (Node *) lcons(makeString($6), $4);
n->newowner = $9;
$$ = (Node *)n;
}
@@ -8930,7 +8904,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_SCHEMA;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8938,7 +8912,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8946,7 +8920,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TABLESPACE;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8954,7 +8928,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newowner = $8;
$$ = (Node *)n;
}
@@ -8962,7 +8936,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newowner = $8;
$$ = (Node *)n;
}
@@ -8970,7 +8944,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_FDW;
- n->object = list_make1(makeString($5));
+ n->object = (Node *) makeString($5);
n->newowner = $8;
$$ = (Node *)n;
}
@@ -8978,7 +8952,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_FOREIGN_SERVER;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -8986,7 +8960,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_EVENT_TRIGGER;
- n->object = list_make1(makeString($4));
+ n->object = (Node *) makeString($4);
n->newowner = $7;
$$ = (Node *)n;
}
@@ -8994,7 +8968,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_PUBLICATION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -9002,7 +8976,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_SUBSCRIPTION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
@@ -9299,7 +9273,6 @@ DropRuleStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_RULE;
n->objects = list_make1(lappend($5, makeString($3)));
- n->arguments = NIL;
n->behavior = $6;
n->missing_ok = false;
n->concurrent = false;
@@ -9310,7 +9283,6 @@ DropRuleStmt:
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_RULE;
n->objects = list_make1(lappend($7, makeString($5)));
- n->arguments = NIL;
n->behavior = $8;
n->missing_ok = true;
n->concurrent = false;
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index ff2bab65519..673276a9d3d 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -947,10 +947,9 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
CommentStmt *stmt = makeNode(CommentStmt);
stmt->objtype = OBJECT_COLUMN;
- stmt->objname = list_make3(makeString(cxt->relation->schemaname),
- makeString(cxt->relation->relname),
- makeString(def->colname));
- stmt->objargs = NIL;
+ stmt->object = (Node *) list_make3(makeString(cxt->relation->schemaname),
+ makeString(cxt->relation->relname),
+ makeString(def->colname));
stmt->comment = comment;
cxt->alist = lappend(cxt->alist, stmt);
@@ -1013,10 +1012,9 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
CommentStmt *stmt = makeNode(CommentStmt);
stmt->objtype = OBJECT_TABCONSTRAINT;
- stmt->objname = list_make3(makeString(cxt->relation->schemaname),
- makeString(cxt->relation->relname),
- makeString(n->conname));
- stmt->objargs = NIL;
+ stmt->object = (Node *) list_make3(makeString(cxt->relation->schemaname),
+ makeString(cxt->relation->relname),
+ makeString(n->conname));
stmt->comment = comment;
cxt->alist = lappend(cxt->alist, stmt);
diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h
index 1a5afe1bed1..406c38bc73a 100644
--- a/src/include/catalog/objectaddress.h
+++ b/src/include/catalog/objectaddress.h
@@ -40,17 +40,17 @@ extern const ObjectAddress InvalidObjectAddress;
#define ObjectAddressSet(addr, class_id, object_id) \
ObjectAddressSubSet(addr, class_id, object_id, 0)
-extern ObjectAddress get_object_address(ObjectType objtype, List *objname,
- List *objargs, Relation *relp,
+extern ObjectAddress get_object_address(ObjectType objtype, Node *object,
+ Relation *relp,
LOCKMODE lockmode, bool missing_ok);
extern ObjectAddress get_object_address_rv(ObjectType objtype, RangeVar *rel,
- List *objname, List *objargs, Relation *relp,
+ List *object, Relation *relp,
LOCKMODE lockmode, bool missing_ok);
extern void check_object_ownership(Oid roleid,
ObjectType objtype, ObjectAddress address,
- List *objname, List *objargs, Relation relation);
+ Node *object, Relation relation);
extern Oid get_object_namespace(const ObjectAddress *address);
diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h
index 3f14c902671..7f027d9dc7a 100644
--- a/src/include/commands/extension.h
+++ b/src/include/commands/extension.h
@@ -48,7 +48,7 @@ extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *
extern Oid get_extension_oid(const char *extname, bool missing_ok);
extern char *get_extension_name(Oid ext_oid);
-extern ObjectAddress AlterExtensionNamespace(List *names, const char *newschema,
+extern ObjectAddress AlterExtensionNamespace(const char *extensionName, const char *newschema,
Oid *oldschema);
extern void AlterExtensionOwner_oid(Oid extensionOid, Oid newOwnerId);
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 97993f51984..7c7530bd3f1 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -2076,8 +2076,7 @@ typedef struct AlterExtensionContentsStmt
char *extname; /* Extension's name */
int action; /* +1 = add object, -1 = drop object */
ObjectType objtype; /* Object's type */
- List *objname; /* Qualified name of the object */
- List *objargs; /* Arguments if needed (eg, for functions) */
+ Node *object; /* Qualified name of the object */
} AlterExtensionContentsStmt;
/* ----------------------
@@ -2462,8 +2461,7 @@ typedef struct AlterOpFamilyStmt
typedef struct DropStmt
{
NodeTag type;
- List *objects; /* list of sublists of names (as Values) */
- List *arguments; /* list of sublists of arguments (as Values) */
+ List *objects; /* list of names */
ObjectType removeType; /* object type */
DropBehavior behavior; /* RESTRICT or CASCADE behavior */
bool missing_ok; /* skip error if object is missing? */
@@ -2490,8 +2488,7 @@ typedef struct CommentStmt
{
NodeTag type;
ObjectType objtype; /* Object's type */
- List *objname; /* Qualified name of the object */
- List *objargs; /* Arguments if needed (eg, for functions) */
+ Node *object; /* Qualified name of the object */
char *comment; /* Comment to insert, or NULL to remove */
} CommentStmt;
@@ -2503,8 +2500,7 @@ typedef struct SecLabelStmt
{
NodeTag type;
ObjectType objtype; /* Object's type */
- List *objname; /* Qualified name of the object */
- List *objargs; /* Arguments if needed (eg, for functions) */
+ Node *object; /* Qualified name of the object */
char *provider; /* Label provider (or NULL) */
char *label; /* New security label to be assigned */
} SecLabelStmt;
@@ -2678,8 +2674,7 @@ typedef struct RenameStmt
ObjectType renameType; /* OBJECT_TABLE, OBJECT_COLUMN, etc */
ObjectType relationType; /* if column name, associated relation type */
RangeVar *relation; /* in case it's a table */
- List *object; /* in case it's some other object */
- List *objarg; /* argument types, if applicable */
+ Node *object; /* in case it's some other object */
char *subname; /* name of contained object (column, rule,
* trigger, etc) */
char *newname; /* the new name */
@@ -2696,8 +2691,7 @@ typedef struct AlterObjectDependsStmt
NodeTag type;
ObjectType objectType; /* OBJECT_FUNCTION, OBJECT_TRIGGER, etc */
RangeVar *relation; /* in case a table is involved */
- List *objname; /* name of the object */
- List *objargs; /* argument types, if applicable */
+ Node *object; /* name of the object */
Value *extname; /* extension name */
} AlterObjectDependsStmt;
@@ -2710,8 +2704,7 @@ typedef struct AlterObjectSchemaStmt
NodeTag type;
ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
RangeVar *relation; /* in case it's a table */
- List *object; /* in case it's some other object */
- List *objarg; /* argument types, if applicable */
+ Node *object; /* in case it's some other object */
char *newschema; /* the new schema */
bool missing_ok; /* skip error if missing? */
} AlterObjectSchemaStmt;
@@ -2725,8 +2718,7 @@ typedef struct AlterOwnerStmt
NodeTag type;
ObjectType objectType; /* OBJECT_TABLE, OBJECT_TYPE, etc */
RangeVar *relation; /* in case it's a table */
- List *object; /* in case it's some other object */
- List *objarg; /* argument types, if applicable */
+ Node *object; /* in case it's some other object */
RoleSpec *newowner; /* the new owner */
} AlterOwnerStmt;
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index e12455201e9..906dcb8b319 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -80,9 +80,6 @@ create event trigger regress_event_trigger2 on ddl_command_start
execute procedure test_event_trigger();
-- OK
comment on event trigger regress_event_trigger is 'test comment';
--- should fail, event triggers are not schema objects
-comment on event trigger wrong.regress_event_trigger is 'test comment';
-ERROR: event trigger name cannot be qualified
-- drop as non-superuser should fail
create role regress_evt_user;
set role regress_evt_user;
diff --git a/src/test/regress/expected/object_address.out b/src/test/regress/expected/object_address.out
index 71f16fd90a3..836773f9e44 100644
--- a/src/test/regress/expected/object_address.out
+++ b/src/test/regress/expected/object_address.out
@@ -296,7 +296,7 @@ WARNING: error for publication relation,{eins,zwei,drei},{integer}: cross-datab
SELECT pg_get_object_address('language', '{one}', '{}');
ERROR: language "one" does not exist
SELECT pg_get_object_address('language', '{one,two}', '{}');
-ERROR: language name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('large object', '{123}', '{}');
ERROR: large object 123 does not exist
SELECT pg_get_object_address('large object', '{123,456}', '{}');
@@ -306,47 +306,47 @@ ERROR: invalid input syntax for type oid: "blargh"
SELECT pg_get_object_address('schema', '{one}', '{}');
ERROR: schema "one" does not exist
SELECT pg_get_object_address('schema', '{one,two}', '{}');
-ERROR: schema name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('role', '{one}', '{}');
ERROR: role "one" does not exist
SELECT pg_get_object_address('role', '{one,two}', '{}');
-ERROR: role name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('database', '{one}', '{}');
ERROR: database "one" does not exist
SELECT pg_get_object_address('database', '{one,two}', '{}');
-ERROR: database name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('tablespace', '{one}', '{}');
ERROR: tablespace "one" does not exist
SELECT pg_get_object_address('tablespace', '{one,two}', '{}');
-ERROR: tablespace name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('foreign-data wrapper', '{one}', '{}');
ERROR: foreign-data wrapper "one" does not exist
SELECT pg_get_object_address('foreign-data wrapper', '{one,two}', '{}');
-ERROR: foreign-data wrapper name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('server', '{one}', '{}');
ERROR: server "one" does not exist
SELECT pg_get_object_address('server', '{one,two}', '{}');
-ERROR: server name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('extension', '{one}', '{}');
ERROR: extension "one" does not exist
SELECT pg_get_object_address('extension', '{one,two}', '{}');
-ERROR: extension name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('event trigger', '{one}', '{}');
ERROR: event trigger "one" does not exist
SELECT pg_get_object_address('event trigger', '{one,two}', '{}');
-ERROR: event trigger name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('access method', '{one}', '{}');
ERROR: access method "one" does not exist
SELECT pg_get_object_address('access method', '{one,two}', '{}');
-ERROR: access method name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('publication', '{one}', '{}');
ERROR: publication "one" does not exist
SELECT pg_get_object_address('publication', '{one,two}', '{}');
-ERROR: publication name cannot be qualified
+ERROR: name list length must be exactly 1
SELECT pg_get_object_address('subscription', '{one}', '{}');
ERROR: subscription "one" does not exist
SELECT pg_get_object_address('subscription', '{one,two}', '{}');
-ERROR: subscription name cannot be qualified
+ERROR: name list length must be exactly 1
-- test successful cases
WITH objects (type, name, args) AS (VALUES
('table', '{addr_nsp, gentable}'::text[], '{}'::text[]),
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index 534f532a9ef..b65bf3ec664 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -82,9 +82,6 @@ create event trigger regress_event_trigger2 on ddl_command_start
-- OK
comment on event trigger regress_event_trigger is 'test comment';
--- should fail, event triggers are not schema objects
-comment on event trigger wrong.regress_event_trigger is 'test comment';
-
-- drop as non-superuser should fail
create role regress_evt_user;
set role regress_evt_user;