};
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);
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
* 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;
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;
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,
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))
{
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;
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);
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:
/*
* 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);
}
*/
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)
* 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)
{
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;
* 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;
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);
* 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)
{
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);
* 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)
{
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);
* 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;
* 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:
*/
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;
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;
* 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;
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)
}
/*
- * 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);
* 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;
* 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;
* 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:
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];
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)
{
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
{
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 */
*/
void
check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
- List *objname, List *objargs, Relation relation)
+ Node *object, Relation relation)
{
switch (objtype)
{
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:
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 &&
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);
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))
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:
}
static void
-getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **objname)
+getOpFamilyIdentity(StringInfo buffer, Oid opfid, List **object)
{
HeapTuple opfTup;
Form_pg_opfamily opfForm;
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)));
* StringInfo.
*/
static void
-getRelationIdentity(StringInfo buffer, Oid relid, List **objname)
+getRelationIdentity(StringInfo buffer, Oid relid, List **object)
{
HeapTuple relTup;
Form_pg_class relForm;
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);
}
Relation relation;
address = get_object_address(stmt->renameType,
- stmt->object, stmt->objarg,
+ stmt->object,
&relation,
AccessExclusiveLock, false);
Assert(relation == NULL);
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
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;
switch (stmt->objectType)
{
case OBJECT_EXTENSION:
- address = AlterExtensionNamespace(stmt->object, stmt->newschema,
+ address = AlterExtensionNamespace(strVal((Value *) stmt->object), stmt->newschema,
oldSchemaAddr ? &oldNspOid : NULL);
break;
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;
address = get_object_address(stmt->objectType,
stmt->object,
- stmt->objarg,
&relation,
AccessExclusiveLock,
false);
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 */
address = get_object_address(stmt->objectType,
stmt->object,
- stmt->objarg,
&relation,
AccessExclusiveLock,
false);
* (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)))
{
* 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)
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);
{
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);
if (!OidIsValid(address.objectId))
{
Assert(stmt->missing_ok);
- does_not_exist_skipping(stmt->removeType, objname, objargs);
+ does_not_exist_skipping(stmt->removeType, object);
continue;
}
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);
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)
* 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;
}
* 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)))
* 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;
{
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))
{
}
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);
* 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;
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);
* 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);
/* 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.
* 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)
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))
/* 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 */
ObjectAddress
RenameType(RenameStmt *stmt)
{
- List *names = stmt->object;
+ List *names = castNode(List, stmt->object);
const char *newTypeName = stmt->newname;
TypeName *typename;
Oid typeOid;
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);
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;
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);
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);
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;
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);
COPY_SCALAR_FIELD(objectType);
COPY_NODE_FIELD(relation);
COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(objarg);
COPY_NODE_FIELD(newowner);
return newnode;
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;
}
_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);
_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;
_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);
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);
{
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;
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);
COMPARE_SCALAR_FIELD(objectType);
COMPARE_NODE_FIELD(relation);
COMPARE_NODE_FIELD(object);
- COMPARE_NODE_FIELD(objarg);
COMPARE_NODE_FIELD(newowner);
return true;
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;
}
%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
{
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;
{
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;
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
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 ')'
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
n->extname = $3;
n->action = $4;
n->objtype = OBJECT_TYPE;
- n->objname = list_make1($6);
+ n->object = (Node *) $6;
$$ = (Node *)n;
}
;
{
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;
{
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;
{
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;
{
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;
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;
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;
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;
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;
{
DropStmt *n = makeNode(DropStmt);
n->objects = NIL;
- n->arguments = NIL;
n->behavior = $4;
n->removeType = OBJECT_TRIGGER; /* XXX */
ereport(ERROR,
*
*****************************************************************************/
-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;
n->removeType = OBJECT_INDEX;
n->missing_ok = FALSE;
n->objects = $4;
- n->arguments = NIL;
n->behavior = $5;
n->concurrent = true;
$$ = (Node *)n;
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:
;
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); }
/*****************************************************************************
*
*****************************************************************************/
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
* 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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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; }
| 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; }
*****************************************************************************/
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
| /* 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; }
;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_DOMAIN;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_DOMCONSTRAINT;
- n->object = $3;
+ n->object = (Node *) $3;
n->subname = $6;
n->newname = $8;
$$ = (Node *)n;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
{
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;
}
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSPARSER;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSTEMPLATE;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newname = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
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;
}
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;
}
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_MATVIEW;
n->relation = $4;
- n->objname = NIL;
- n->objargs = NIL;
n->extname = makeString($8);
$$ = (Node *)n;
}
AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt);
n->objectType = OBJECT_INDEX;
n->relation = $3;
- n->objname = NIL;
- n->objargs = NIL;
n->extname = makeString($7);
$$ = (Node *)n;
}
{
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;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
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;
{
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;
{
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;
{
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;
{
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;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSPARSER;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSTEMPLATE;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newschema = $8;
n->missing_ok = false;
$$ = (Node *)n;
{
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newschema = $6;
n->missing_ok = false;
$$ = (Node *)n;
{
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;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_COLLATION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_CONVERSION;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_DATABASE;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_DOMAIN;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
{
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;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_LANGUAGE;
- n->object = list_make1(makeString($4));
+ n->object = (Node *) makeString($4);
n->newowner = $7;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_LARGEOBJECT;
- n->object = list_make1($4);
+ n->object = (Node *) $4;
n->newowner = $7;
$$ = (Node *)n;
}
{
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;
}
{
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;
}
{
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;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_SCHEMA;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TYPE;
- n->object = $3;
+ n->object = (Node *) $3;
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TABLESPACE;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TSDICTIONARY;
- n->object = $5;
+ n->object = (Node *) $5;
n->newowner = $8;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_TSCONFIGURATION;
- n->object = $5;
+ n->object = (Node *) $5;
n->newowner = $8;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_FDW;
- n->object = list_make1(makeString($5));
+ n->object = (Node *) makeString($5);
n->newowner = $8;
$$ = (Node *)n;
}
{
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;
}
{
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;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_PUBLICATION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
{
AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
n->objectType = OBJECT_SUBSCRIPTION;
- n->object = list_make1(makeString($3));
+ n->object = (Node *) makeString($3);
n->newowner = $6;
$$ = (Node *)n;
}
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;
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;
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);
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);
#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);
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);
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;
/* ----------------------
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? */
{
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;
{
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;
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 */
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;
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;
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;
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;
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}', '{}');
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[]),
-- 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;