This is an automated email from the ASF dual-hosted git repository.
chenjinbao1989 pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/cbdb-postgres-merge by this
push:
new 61cd3617f01 Fix conflicts for c file in catalog
61cd3617f01 is described below
commit 61cd3617f01814a32489e83043e62c028112d766
Author: Jinbao Chen <[email protected]>
AuthorDate: Fri Jul 18 09:24:21 2025 +0800
Fix conflicts for c file in catalog
---
src/backend/catalog/aclchk.c | 1408 ++++------------------------------
src/backend/catalog/catalog.c | 41 +-
src/backend/catalog/dependency.c | 36 +-
src/backend/catalog/index.c | 44 --
src/backend/catalog/namespace.c | 3 -
src/backend/catalog/objectaddress.c | 84 +-
src/backend/catalog/pg_depend.c | 4 -
src/backend/catalog/pg_proc.c | 9 -
src/backend/catalog/pg_publication.c | 87 +--
src/backend/catalog/pg_type.c | 12 -
src/backend/catalog/toasting.c | 4 -
11 files changed, 148 insertions(+), 1584 deletions(-)
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index a105ce50664..f4b495503aa 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -125,19 +125,6 @@ typedef struct
bool binary_upgrade_record_init_privs = false;
static void ExecGrantStmt_oids(InternalGrant *istmt);
-<<<<<<< HEAD
-static void ExecGrant_Relation(InternalGrant *grantStmt);
-static void ExecGrant_Database(InternalGrant *grantStmt);
-static void ExecGrant_Fdw(InternalGrant *grantStmt);
-static void ExecGrant_ForeignServer(InternalGrant *grantStmt);
-static void ExecGrant_Function(InternalGrant *grantStmt);
-static void ExecGrant_Language(InternalGrant *grantStmt);
-static void ExecGrant_Largeobject(InternalGrant *grantStmt);
-static void ExecGrant_Namespace(InternalGrant *grantStmt);
-static void ExecGrant_Tablespace(InternalGrant *grantStmt);
-static void ExecGrant_ExtProtocol(InternalGrant *grantstmt);
-static void ExecGrant_Type(InternalGrant *grantStmt);
-=======
static void ExecGrant_Relation(InternalGrant *istmt);
static void ExecGrant_common(InternalGrant *istmt, Oid classid, AclMode
default_privs,
void (*object_check)
(InternalGrant *istmt, HeapTuple tuple));
@@ -145,7 +132,7 @@ static void ExecGrant_Language_check(InternalGrant *istmt,
HeapTuple tuple);
static void ExecGrant_Largeobject(InternalGrant *istmt);
static void ExecGrant_Type_check(InternalGrant *istmt, HeapTuple tuple);
static void ExecGrant_Parameter(InternalGrant *istmt);
->>>>>>> REL_16_9
+static void ExecGrant_ExtProtocol(InternalGrant *grantstmt);
static void SetDefaultACLsInSchemas(InternalDefaultACL *iacls, List *nspnames);
static void SetDefaultACL(InternalDefaultACL *iacls);
@@ -315,13 +302,10 @@ restrict_and_check_grant(bool is_grant, AclMode
avail_goptions, bool all_privs,
case OBJECT_TYPE:
whole_mask = ACL_ALL_RIGHTS_TYPE;
break;
-<<<<<<< HEAD
case OBJECT_EXTPROTOCOL:
whole_mask = ACL_ALL_RIGHTS_EXTPROTOCOL;
-=======
case OBJECT_PARAMETER_ACL:
whole_mask = ACL_ALL_RIGHTS_PARAMETER_ACL;
->>>>>>> REL_16_9
break;
default:
elog(ERROR, "unrecognized object type: %d", objtype);
@@ -572,7 +556,6 @@ ExecuteGrantStmt(GrantStmt *stmt)
all_privileges = ACL_ALL_RIGHTS_FOREIGN_SERVER;
errormsg = gettext_noop("invalid privilege type %s for
foreign server");
break;
-<<<<<<< HEAD
case OBJECT_STORAGE_SERVER:
all_privileges = ACL_ALL_RIGHTS_STORAGE_SERVER;
errormsg = gettext_noop("invalid privilege type %s from
storage server");
@@ -580,11 +563,9 @@ ExecuteGrantStmt(GrantStmt *stmt)
case OBJECT_EXTPROTOCOL:
all_privileges = ACL_ALL_RIGHTS_EXTPROTOCOL;
errormsg = gettext_noop("invalid privilege type %s for
external protocol");
-=======
case OBJECT_PARAMETER_ACL:
all_privileges = ACL_ALL_RIGHTS_PARAMETER_ACL;
errormsg = gettext_noop("invalid privilege type %s for
parameter");
->>>>>>> REL_16_9
break;
default:
elog(ERROR, "unrecognized GrantStmt.objtype: %d",
@@ -930,7 +911,6 @@ objectNamesToOids(ObjectType objtype, List *objnames, bool
is_grant)
objects = lappend_oid(objects, srvid);
}
break;
-<<<<<<< HEAD
case OBJECT_EXTPROTOCOL:
foreach(cell, objnames)
{
@@ -938,7 +918,6 @@ objectNamesToOids(ObjectType objtype, List *objnames, bool
is_grant)
Oid ptcid =
get_extprotocol_oid(ptcname, false);
objects = lappend_oid(objects, ptcid);
-=======
case OBJECT_PARAMETER_ACL:
foreach(cell, objnames)
{
@@ -968,7 +947,6 @@ objectNamesToOids(ObjectType objtype, List *objnames, bool
is_grant)
}
if (OidIsValid(parameterId))
objects = lappend_oid(objects,
parameterId);
->>>>>>> REL_16_9
}
break;
default:
@@ -1711,13 +1689,10 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid
objid)
case ForeignDataWrapperRelationId:
istmt.objtype = OBJECT_FDW;
break;
-<<<<<<< HEAD
case ExtprotocolRelationId:
istmt.objtype = OBJECT_EXTPROTOCOL;
-=======
case ParameterAclRelationId:
istmt.objtype = OBJECT_PARAMETER_ACL;
->>>>>>> REL_16_9
break;
default:
elog(ERROR, "unexpected object class %u",
classid);
@@ -2690,271 +2665,6 @@ ExecGrant_Parameter(InternalGrant *istmt)
Anum_pg_parameter_acl_paracl,
&isNull);
-<<<<<<< HEAD
- /* Determine ID to do the grant as, and available grant options
*/
- select_best_grantor(GetUserId(), istmt->privileges,
- old_acl, ownerId,
- &grantorId,
&avail_goptions);
-
- /*
- * Restrict the privileges to what we can actually grant, and
emit the
- * standards-mandated warning and error messages.
- */
- this_privileges =
- restrict_and_check_grant(istmt->is_grant,
avail_goptions,
-
istmt->all_privs, istmt->privileges,
- nspid,
grantorId, OBJECT_SCHEMA,
-
NameStr(pg_namespace_tuple->nspname),
- 0,
NULL);
-
- /*
- * Generate new ACL.
- */
- new_acl = merge_acl_with_grant(old_acl, istmt->is_grant,
-
istmt->grant_option, istmt->behavior,
-
istmt->grantees, this_privileges,
-
grantorId, ownerId);
-
- /*
- * We need the members of both old and new ACLs so we can
correct the
- * shared dependency information.
- */
- nnewmembers = aclmembers(new_acl, &newmembers);
-
- /* finished building new ACL value, now insert it */
- MemSet(values, 0, sizeof(values));
- MemSet(nulls, false, sizeof(nulls));
- MemSet(replaces, false, sizeof(replaces));
-
- replaces[Anum_pg_namespace_nspacl - 1] = true;
- values[Anum_pg_namespace_nspacl - 1] = PointerGetDatum(new_acl);
-
- newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation),
values,
- nulls,
replaces);
-
- CatalogTupleUpdate(relation, &newtuple->t_self, newtuple);
-
- /* MPP-6929: metadata tracking */
- if (Gp_role == GP_ROLE_DISPATCH)
- MetaTrackUpdObject(NamespaceRelationId,
- nspid,
- GetUserId(), /* not
grantorId, */
- "PRIVILEGE",
- (istmt->is_grant) ?
"GRANT" : "REVOKE"
- );
-
- /* Update initial privileges for extensions */
- recordExtensionInitPriv(nspid, NamespaceRelationId, 0, new_acl);
-
- /* Update the shared dependency ACL info */
- updateAclDependencies(NamespaceRelationId,
pg_namespace_tuple->oid, 0,
- ownerId,
- noldmembers,
oldmembers,
- nnewmembers,
newmembers);
-
- ReleaseSysCache(tuple);
-
- pfree(new_acl);
-
- /* prevent error when processing duplicate objects */
- CommandCounterIncrement();
- }
-
- table_close(relation, RowExclusiveLock);
-}
-
-static void
-ExecGrant_Tablespace(InternalGrant *istmt)
-{
- Relation relation;
- ListCell *cell;
-
- if (istmt->all_privs && istmt->privileges == ACL_NO_RIGHTS)
- istmt->privileges = ACL_ALL_RIGHTS_TABLESPACE;
-
- relation = table_open(TableSpaceRelationId, RowExclusiveLock);
-
- foreach(cell, istmt->objects)
- {
- Oid tblId = lfirst_oid(cell);
- Form_pg_tablespace pg_tablespace_tuple;
- Datum aclDatum;
- bool isNull;
- AclMode avail_goptions;
- AclMode this_privileges;
- Acl *old_acl;
- Acl *new_acl;
- Oid grantorId;
- Oid ownerId;
- HeapTuple newtuple;
- Datum values[Natts_pg_tablespace];
- bool nulls[Natts_pg_tablespace];
- bool replaces[Natts_pg_tablespace];
- int noldmembers;
- int nnewmembers;
- Oid *oldmembers;
- Oid *newmembers;
- HeapTuple tuple;
-
- /* Search syscache for pg_tablespace */
- tuple = SearchSysCache1(TABLESPACEOID, ObjectIdGetDatum(tblId));
- if (!HeapTupleIsValid(tuple))
- elog(ERROR, "cache lookup failed for tablespace %u",
tblId);
-
- pg_tablespace_tuple = (Form_pg_tablespace) GETSTRUCT(tuple);
-
- /*
- * Get owner ID and working copy of existing ACL. If there's no
ACL,
- * substitute the proper default.
- */
- ownerId = pg_tablespace_tuple->spcowner;
- aclDatum = heap_getattr(tuple, Anum_pg_tablespace_spcacl,
-
RelationGetDescr(relation), &isNull);
- if (isNull)
- {
- old_acl = acldefault(OBJECT_TABLESPACE, ownerId);
- /* There are no old member roles according to the
catalogs */
- noldmembers = 0;
- oldmembers = NULL;
- }
- else
- {
- old_acl = DatumGetAclPCopy(aclDatum);
- /* Get the roles mentioned in the existing ACL */
- noldmembers = aclmembers(old_acl, &oldmembers);
- }
-
- /* Determine ID to do the grant as, and available grant options
*/
- select_best_grantor(GetUserId(), istmt->privileges,
- old_acl, ownerId,
- &grantorId,
&avail_goptions);
-
- /*
- * Restrict the privileges to what we can actually grant, and
emit the
- * standards-mandated warning and error messages.
- */
- this_privileges =
- restrict_and_check_grant(istmt->is_grant,
avail_goptions,
-
istmt->all_privs, istmt->privileges,
- tblId,
grantorId, OBJECT_TABLESPACE,
-
NameStr(pg_tablespace_tuple->spcname),
- 0,
NULL);
-
- /*
- * Generate new ACL.
- */
- new_acl = merge_acl_with_grant(old_acl, istmt->is_grant,
-
istmt->grant_option, istmt->behavior,
-
istmt->grantees, this_privileges,
-
grantorId, ownerId);
-
- /*
- * We need the members of both old and new ACLs so we can
correct the
- * shared dependency information.
- */
- nnewmembers = aclmembers(new_acl, &newmembers);
-
- /* finished building new ACL value, now insert it */
- MemSet(values, 0, sizeof(values));
- MemSet(nulls, false, sizeof(nulls));
- MemSet(replaces, false, sizeof(replaces));
-
- replaces[Anum_pg_tablespace_spcacl - 1] = true;
- values[Anum_pg_tablespace_spcacl - 1] =
PointerGetDatum(new_acl);
-
- newtuple = heap_modify_tuple(tuple, RelationGetDescr(relation),
values,
- nulls,
replaces);
-
- CatalogTupleUpdate(relation, &newtuple->t_self, newtuple);
-
- /* MPP-6929: metadata tracking */
- if (Gp_role == GP_ROLE_DISPATCH)
- MetaTrackUpdObject(TableSpaceRelationId,
- tblId,
- GetUserId(), /* not
grantorId, */
- "PRIVILEGE",
- (istmt->is_grant) ?
"GRANT" : "REVOKE"
- );
-
- /* Update the shared dependency ACL info */
- updateAclDependencies(TableSpaceRelationId, tblId, 0,
- ownerId,
- noldmembers,
oldmembers,
- nnewmembers,
newmembers);
-
- ReleaseSysCache(tuple);
- pfree(new_acl);
-
- /* prevent error when processing duplicate objects */
- CommandCounterIncrement();
- }
-
- table_close(relation, RowExclusiveLock);
-}
-
-static void
-ExecGrant_Type(InternalGrant *istmt)
-{
- Relation relation;
- ListCell *cell;
-
- if (istmt->all_privs && istmt->privileges == ACL_NO_RIGHTS)
- istmt->privileges = ACL_ALL_RIGHTS_TYPE;
-
- relation = table_open(TypeRelationId, RowExclusiveLock);
-
- foreach(cell, istmt->objects)
- {
- Oid typId = lfirst_oid(cell);
- Form_pg_type pg_type_tuple;
- Datum aclDatum;
- bool isNull;
- AclMode avail_goptions;
- AclMode this_privileges;
- Acl *old_acl;
- Acl *new_acl;
- Oid grantorId;
- Oid ownerId;
- HeapTuple newtuple;
- Datum values[Natts_pg_type];
- bool nulls[Natts_pg_type];
- bool replaces[Natts_pg_type];
- int noldmembers;
- int nnewmembers;
- Oid *oldmembers;
- Oid *newmembers;
- HeapTuple tuple;
-
- /* Search syscache for pg_type */
- tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typId));
- if (!HeapTupleIsValid(tuple))
- elog(ERROR, "cache lookup failed for type %u", typId);
-
- pg_type_tuple = (Form_pg_type) GETSTRUCT(tuple);
-
- if (IsTrueArrayType(pg_type_tuple))
- ereport(ERROR,
-
(errcode(ERRCODE_INVALID_GRANT_OPERATION),
- errmsg("cannot set privileges of array
types"),
- errhint("Set the privileges of the
element type instead.")));
-
- /* Used GRANT DOMAIN on a non-domain? */
- if (istmt->objtype == OBJECT_DOMAIN &&
- pg_type_tuple->typtype != TYPTYPE_DOMAIN)
- ereport(ERROR,
- (errcode(ERRCODE_WRONG_OBJECT_TYPE),
- errmsg("\"%s\" is not a domain",
-
NameStr(pg_type_tuple->typname))));
-
- /*
- * Get owner ID and working copy of existing ACL. If there's no
ACL,
- * substitute the proper default.
- */
- ownerId = pg_type_tuple->typowner;
- aclDatum = heap_getattr(tuple, Anum_pg_type_typacl,
-
RelationGetDescr(relation), &isNull);
-=======
->>>>>>> REL_16_9
if (isNull)
{
old_acl = acldefault(istmt->objtype, ownerId);
@@ -3448,13 +3158,9 @@ aclcheck_error(AclResult aclerr, ObjectType objtype,
case OBJECT_TSPARSER:
case OBJECT_TSTEMPLATE:
case OBJECT_USER_MAPPING:
-<<<<<<< HEAD
case OBJECT_PROFILE:
case OBJECT_STORAGE_USER_MAPPING:
- elog(ERROR, "unsupported object
type %d", objtype);
-=======
elog(ERROR, "unsupported object
type: %d", objtype);
->>>>>>> REL_16_9
}
ereport(ERROR,
@@ -3603,14 +3309,10 @@ aclcheck_error(AclResult aclerr, ObjectType objtype,
case OBJECT_TSPARSER:
case OBJECT_TSTEMPLATE:
case OBJECT_USER_MAPPING:
-<<<<<<< HEAD
case OBJECT_PROFILE:
case OBJECT_STORAGE_SERVER:
case OBJECT_STORAGE_USER_MAPPING:
- elog(ERROR, "unsupported object
type %d", objtype);
-=======
elog(ERROR, "unsupported object
type: %d", objtype);
->>>>>>> REL_16_9
}
ereport(ERROR,
@@ -3708,13 +3410,9 @@ pg_aclmask(ObjectType objtype, Oid object_oid,
AttrNumber attnum, Oid roleid,
/* not reached, but keep compiler quiet */
return ACL_NO_RIGHTS;
case OBJECT_TYPE:
-<<<<<<< HEAD
- return pg_type_aclmask(table_oid, roleid, mask, how);
+ return object_aclmask(TypeRelationId, object_oid,
roleid, mask, how);
case OBJECT_EXTPROTOCOL:
return pg_extprotocol_aclmask(table_oid, roleid, mask,
how);
-=======
- return object_aclmask(TypeRelationId, object_oid,
roleid, mask, how);
->>>>>>> REL_16_9
default:
elog(ERROR, "unrecognized object type: %d",
(int) objtype);
@@ -4354,48 +4052,50 @@ pg_namespace_aclmask(Oid nsp_oid, Oid roleid,
}
/*
- * Routine for examining a user's privileges for a type.
+ * Exported routine for examining a user's privileges for a storage
+ * server.
*/
-<<<<<<< HEAD
AclMode
-pg_tablespace_aclmask(Oid spc_oid, Oid roleid,
- AclMode mask, AclMaskHow how)
+gp_storage_server_aclmask(Oid srv_oid, Oid roleid,
+ AclMode mask, AclMaskHow how)
{
AclMode result;
HeapTuple tuple;
Datum aclDatum;
bool isNull;
- Acl *acl;
- Oid ownerId;
+ Acl *acl;
+ Oid ownerId;
- /* Superusers bypass all permission checking. */
+ Form_gp_storage_server srvForm;
+
+ /* Bypass permission checks for superusers */
if (superuser_arg(roleid))
return mask;
- /*
- * Get the tablespace's ACL from pg_tablespace
- */
- tuple = SearchSysCache1(TABLESPACEOID, ObjectIdGetDatum(spc_oid));
+ tuple = SearchSysCache1(STORAGESERVEROID, ObjectIdGetDatum(srv_oid));
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("tablespace with OID %u does not
exist", spc_oid)));
-
- ownerId = ((Form_pg_tablespace) GETSTRUCT(tuple))->spcowner;
+ errmsg("storage server with OID %u does not
exist",
+ srv_oid)));
+ srvForm = (Form_gp_storage_server) GETSTRUCT(tuple);
- aclDatum = SysCacheGetAttr(TABLESPACEOID, tuple,
-
Anum_pg_tablespace_spcacl,
- &isNull);
+ /*
+ * Normal case: get the storage server's ACL from gp_storage_server
+ */
+ ownerId = srvForm->srvowner;
+ aclDatum = SysCacheGetAttr(STORAGESERVEROID, tuple,
+
Anum_gp_storage_server_srvacl, &isNull);
if (isNull)
{
/* No ACL, so build default ACL */
- acl = acldefault(OBJECT_TABLESPACE, ownerId);
+ acl = acldefault(OBJECT_STORAGE_SERVER, ownerId);
aclDatum = (Datum) 0;
}
else
{
- /* detoast ACL if necessary */
+ /* detoast rel's ACL if necessary */
acl = DatumGetAclP(aclDatum);
}
@@ -4411,12 +4111,10 @@ pg_tablespace_aclmask(Oid spc_oid, Oid roleid,
}
/*
- * Exported routine for examining a user's privileges for a foreign
- * data wrapper
+ * Exported routine for examining a user's privileges for a type.
*/
AclMode
-pg_foreign_data_wrapper_aclmask(Oid fdw_oid, Oid roleid,
- AclMode mask,
AclMaskHow how)
+pg_type_aclmask(Oid type_oid, Oid roleid, AclMode mask, AclMaskHow how)
{
AclMode result;
HeapTuple tuple;
@@ -4425,96 +4123,51 @@ pg_foreign_data_wrapper_aclmask(Oid fdw_oid, Oid roleid,
Acl *acl;
Oid ownerId;
- Form_pg_foreign_data_wrapper fdwForm;
+ Form_pg_type typeForm;
/* Bypass permission checks for superusers */
if (superuser_arg(roleid))
return mask;
/*
- * Must get the FDW's tuple from pg_foreign_data_wrapper
+ * Must get the type's tuple from pg_type
*/
- tuple = SearchSysCache1(FOREIGNDATAWRAPPEROID,
ObjectIdGetDatum(fdw_oid));
+ tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type_oid));
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("foreign-data wrapper with OID %u does
not exist",
- fdw_oid)));
- fdwForm = (Form_pg_foreign_data_wrapper) GETSTRUCT(tuple);
+ errmsg("type with OID %u does not exist",
+ type_oid)));
+ typeForm = (Form_pg_type) GETSTRUCT(tuple);
/*
- * Normal case: get the FDW's ACL from pg_foreign_data_wrapper
+ * "True" array types don't manage permissions of their own; consult the
+ * element type instead.
*/
- ownerId = fdwForm->fdwowner;
-
- aclDatum = SysCacheGetAttr(FOREIGNDATAWRAPPEROID, tuple,
-
Anum_pg_foreign_data_wrapper_fdwacl, &isNull);
- if (isNull)
+ if (IsTrueArrayType(typeForm))
{
- /* No ACL, so build default ACL */
- acl = acldefault(OBJECT_FDW, ownerId);
- aclDatum = (Datum) 0;
- }
- else
- {
- /* detoast rel's ACL if necessary */
- acl = DatumGetAclP(aclDatum);
- }
-
- result = aclmask(acl, roleid, ownerId, mask, how);
-
- /* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
- pfree(acl);
-
- ReleaseSysCache(tuple);
-
- return result;
-}
-
-/*
- * Exported routine for examining a user's privileges for a foreign
- * server.
- */
-AclMode
-pg_foreign_server_aclmask(Oid srv_oid, Oid roleid,
- AclMode mask, AclMaskHow how)
-{
- AclMode result;
- HeapTuple tuple;
- Datum aclDatum;
- bool isNull;
- Acl *acl;
- Oid ownerId;
-
- Form_pg_foreign_server srvForm;
+ Oid elttype_oid = typeForm->typelem;
- /* Bypass permission checks for superusers */
- if (superuser_arg(roleid))
- return mask;
+ ReleaseSysCache(tuple);
- /*
- * Must get the FDW's tuple from pg_foreign_data_wrapper
- */
- tuple = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(srv_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("foreign server with OID %u does not
exist",
- srv_oid)));
- srvForm = (Form_pg_foreign_server) GETSTRUCT(tuple);
+ tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(elttype_oid));
+ /* this case is not a user-facing error, so elog not ereport */
+ if (!HeapTupleIsValid(tuple))
+ elog(ERROR, "cache lookup failed for type %u",
elttype_oid);
+ typeForm = (Form_pg_type) GETSTRUCT(tuple);
+ }
/*
- * Normal case: get the foreign server's ACL from pg_foreign_server
+ * Now get the type's owner and ACL from the tuple
*/
- ownerId = srvForm->srvowner;
+ ownerId = typeForm->typowner;
- aclDatum = SysCacheGetAttr(FOREIGNSERVEROID, tuple,
-
Anum_pg_foreign_server_srvacl, &isNull);
+ aclDatum = SysCacheGetAttr(TYPEOID, tuple,
+ Anum_pg_type_typacl,
&isNull);
if (isNull)
{
/* No ACL, so build default ACL */
- acl = acldefault(OBJECT_FOREIGN_SERVER, ownerId);
+ acl = acldefault(OBJECT_TYPE, ownerId);
aclDatum = (Datum) 0;
}
else
@@ -4535,125 +4188,62 @@ pg_foreign_server_aclmask(Oid srv_oid, Oid roleid,
}
/*
- * Exported routine for examining a user's privileges for a storage
- * server.
+ * Exported routine for examining a user's privileges for an external
+ * protocol.
*/
AclMode
-gp_storage_server_aclmask(Oid srv_oid, Oid roleid,
- AclMode mask, AclMaskHow how)
+pg_extprotocol_aclmask(Oid ptcOid, Oid roleid,
+ AclMode mask, AclMaskHow how)
{
- AclMode result;
- HeapTuple tuple;
- Datum aclDatum;
- bool isNull;
- Acl *acl;
- Oid ownerId;
-
- Form_gp_storage_server srvForm;
+ AclMode result;
+ HeapTuple tuple;
+ Datum aclDatum;
+ Datum ownerDatum;
+ bool isNull;
+ Acl *acl;
+ Oid ownerId;
+ Relation rel;
+ ScanKeyData scankey;
+ SysScanDesc sscan;
/* Bypass permission checks for superusers */
if (superuser_arg(roleid))
return mask;
- tuple = SearchSysCache1(STORAGESERVEROID, ObjectIdGetDatum(srv_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("storage server with OID %u does not
exist",
- srv_oid)));
- srvForm = (Form_gp_storage_server) GETSTRUCT(tuple);
-
- /*
- * Normal case: get the storage server's ACL from gp_storage_server
- */
- ownerId = srvForm->srvowner;
-
- aclDatum = SysCacheGetAttr(STORAGESERVEROID, tuple,
-
Anum_gp_storage_server_srvacl, &isNull);
- if (isNull)
- {
- /* No ACL, so build default ACL */
- acl = acldefault(OBJECT_STORAGE_SERVER, ownerId);
- aclDatum = (Datum) 0;
- }
- else
- {
- /* detoast rel's ACL if necessary */
- acl = DatumGetAclP(aclDatum);
- }
-
- result = aclmask(acl, roleid, ownerId, mask, how);
-
- /* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
- pfree(acl);
-
- ReleaseSysCache(tuple);
-
- return result;
-}
+ rel = heap_open(ExtprotocolRelationId, AccessShareLock);
-/*
- * Exported routine for examining a user's privileges for a type.
- */
-AclMode
-=======
-static AclMode
->>>>>>> REL_16_9
-pg_type_aclmask(Oid type_oid, Oid roleid, AclMode mask, AclMaskHow how)
-{
- AclMode result;
- HeapTuple tuple;
- Datum aclDatum;
- bool isNull;
- Acl *acl;
- Oid ownerId;
+ ScanKeyInit(&scankey, Anum_pg_extprotocol_oid,
+ BTEqualStrategyNumber, F_OIDEQ,
+ ObjectIdGetDatum(ptcOid));
+ sscan = systable_beginscan(rel, ExtprotocolOidIndexId, true,
+ NULL, 1, &scankey);
+ tuple = systable_getnext(sscan);
- Form_pg_type typeForm;
+ /* We assume that there can be at most one matching tuple */
+ if (!HeapTupleIsValid(tuple))
+ elog(ERROR, "protocol %u could not be found", ptcOid);
- /* Bypass permission checks for superusers */
- if (superuser_arg(roleid))
- return mask;
+ ownerDatum = heap_getattr(tuple,
+
Anum_pg_extprotocol_ptcowner,
+ RelationGetDescr(rel),
+ &isNull);
- /*
- * Must get the type's tuple from pg_type
- */
- tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type_oid));
- if (!HeapTupleIsValid(tuple))
+ if (isNull)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("type with OID %u does not exist",
- type_oid)));
- typeForm = (Form_pg_type) GETSTRUCT(tuple);
-
- /*
- * "True" array types don't manage permissions of their own; consult the
- * element type instead.
- */
- if (IsTrueArrayType(typeForm))
- {
- Oid elttype_oid = typeForm->typelem;
-
- ReleaseSysCache(tuple);
+ errmsg("got invalid extprotocol
owner value: NULL")));
- tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(elttype_oid));
- /* this case is not a user-facing error, so elog not ereport */
- if (!HeapTupleIsValid(tuple))
- elog(ERROR, "cache lookup failed for type %u",
elttype_oid);
- typeForm = (Form_pg_type) GETSTRUCT(tuple);
- }
+ ownerId = DatumGetObjectId(ownerDatum);
- /*
- * Now get the type's owner and ACL from the tuple
- */
- ownerId = typeForm->typowner;
+ aclDatum = heap_getattr(tuple,
+
Anum_pg_extprotocol_ptcacl,
+ RelationGetDescr(rel),
+ &isNull);
- aclDatum = SysCacheGetAttr(TYPEOID, tuple,
- Anum_pg_type_typacl,
&isNull);
if (isNull)
{
/* No ACL, so build default ACL */
- acl = acldefault(OBJECT_TYPE, ownerId);
+ acl = acldefault(OBJECT_EXTPROTOCOL, ownerId);
aclDatum = (Datum) 0;
}
else
@@ -4668,89 +4258,14 @@ pg_type_aclmask(Oid type_oid, Oid roleid, AclMode mask,
AclMaskHow how)
if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
pfree(acl);
- ReleaseSysCache(tuple);
+ /* Finish up scan and close pg_extprotocol catalog. */
+ systable_endscan(sscan);
+ heap_close(rel, AccessShareLock);
return result;
}
/*
-<<<<<<< HEAD
- * Exported routine for examining a user's privileges for an external
- * protocol.
- */
-AclMode
-pg_extprotocol_aclmask(Oid ptcOid, Oid roleid,
- AclMode mask, AclMaskHow how)
-{
- AclMode result;
- HeapTuple tuple;
- Datum aclDatum;
- Datum ownerDatum;
- bool isNull;
- Acl *acl;
- Oid ownerId;
- Relation rel;
- ScanKeyData scankey;
- SysScanDesc sscan;
-
- /* Bypass permission checks for superusers */
- if (superuser_arg(roleid))
- return mask;
-
- rel = heap_open(ExtprotocolRelationId, AccessShareLock);
-
- ScanKeyInit(&scankey, Anum_pg_extprotocol_oid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(ptcOid));
- sscan = systable_beginscan(rel, ExtprotocolOidIndexId, true,
- NULL, 1, &scankey);
- tuple = systable_getnext(sscan);
-
- /* We assume that there can be at most one matching tuple */
- if (!HeapTupleIsValid(tuple))
- elog(ERROR, "protocol %u could not be found", ptcOid);
-
- ownerDatum = heap_getattr(tuple,
- Anum_pg_extprotocol_ptcowner,
- RelationGetDescr(rel),
- &isNull);
-
- if(isNull)
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("got invalid extprotocol owner value: NULL")));
-
- ownerId = DatumGetObjectId(ownerDatum);
-
- aclDatum = heap_getattr(tuple,
- Anum_pg_extprotocol_ptcacl,
- RelationGetDescr(rel),
- &isNull);
-
- if (isNull)
- {
- /* No ACL, so build default ACL */
- acl = acldefault(OBJECT_EXTPROTOCOL, ownerId);
- aclDatum = (Datum) 0;
- }
- else
- {
- /* detoast rel's ACL if necessary */
- acl = DatumGetAclP(aclDatum);
- }
-
- result = aclmask(acl, roleid, ownerId, mask, how);
-
- /* if we have a detoasted copy, free it */
- if (acl && (Pointer) acl != DatumGetPointer(aclDatum))
- pfree(acl);
-
- /* Finish up scan and close pg_extprotocol catalog. */
- systable_endscan(sscan);
- heap_close(rel, AccessShareLock);
-
- return result;
-=======
* Exported generic routine for checking a user's access privileges to an
object
*/
AclResult
@@ -4760,7 +4275,6 @@ object_aclcheck(Oid classid, Oid objectid, Oid roleid,
AclMode mode)
return ACLCHECK_OK;
else
return ACLCHECK_NO_PRIV;
->>>>>>> REL_16_9
}
/*
@@ -4987,71 +4501,42 @@ object_ownercheck(Oid classid, Oid objectid, Oid roleid)
ReleaseSysCache(tuple);
}
else
-<<<<<<< HEAD
- return ACLCHECK_NO_PRIV;
-}
+ {
+ /* for catalogs without an appropriate syscache */
+ Relation rel;
+ ScanKeyData entry[1];
+ SysScanDesc scan;
+ HeapTuple tuple;
+ bool isnull;
-/*
- * Exported routine for checking a user's access privileges to a tablespace
- */
-AclResult
-pg_tablespace_aclcheck(Oid spc_oid, Oid roleid, AclMode mode)
-{
- if (pg_tablespace_aclmask(spc_oid, roleid, mode, ACLMASK_ANY) != 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
-}
+ rel = table_open(classid, AccessShareLock);
-/*
- * Exported routine for checking a user's access privileges to a foreign
- * data wrapper
- */
-AclResult
-pg_foreign_data_wrapper_aclcheck(Oid fdw_oid, Oid roleid, AclMode mode)
-{
- if (pg_foreign_data_wrapper_aclmask(fdw_oid, roleid, mode, ACLMASK_ANY)
!= 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
-}
+ ScanKeyInit(&entry[0],
+ get_object_attnum_oid(classid),
+ BTEqualStrategyNumber, F_OIDEQ,
+ ObjectIdGetDatum(objectid));
-/*
- * Exported routine for checking a user's access privileges to a foreign
- * server
- */
-AclResult
-pg_foreign_server_aclcheck(Oid srv_oid, Oid roleid, AclMode mode)
-{
- if (pg_foreign_server_aclmask(srv_oid, roleid, mode, ACLMASK_ANY) != 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
-}
+ scan = systable_beginscan(rel,
+
get_object_oid_index(classid), true,
+ NULL, 1,
entry);
-/*
- * Exported routine for checking a user's access privileges to a storage
- * server
- */
-AclResult
-gp_storage_server_aclcheck(Oid srv_oid, Oid roleid, AclMode mode)
-{
- if (gp_storage_server_aclmask(srv_oid, roleid, mode, ACLMASK_ANY) != 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
-}
+ tuple = systable_getnext(scan);
+ if (!HeapTupleIsValid(tuple))
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("%s with OID %u does not
exist", get_object_class_descr(classid), objectid)));
-/*
- * Exported routine for checking a user's access privileges to a type
- */
-AclResult
-pg_type_aclcheck(Oid type_oid, Oid roleid, AclMode mode)
-{
- if (pg_type_aclmask(type_oid, roleid, mode, ACLMASK_ANY) != 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
+ ownerId = DatumGetObjectId(heap_getattr(tuple,
+
get_object_attnum_owner(classid),
+
RelationGetDescr(rel),
+
&isnull));
+ Assert(!isnull);
+
+ systable_endscan(scan);
+ table_close(rel, AccessShareLock);
+ }
+
+ return has_privs_of_role(roleid, ownerId);
}
/*
@@ -5061,17 +4546,17 @@ pg_type_aclcheck(Oid type_oid, Oid roleid, AclMode mode)
AclResult
pg_extprotocol_aclcheck(Oid ptcid, Oid roleid, AclMode mode)
{
- if (pg_extprotocol_aclmask(ptcid, roleid, mode, ACLMASK_ANY) != 0)
- return ACLCHECK_OK;
- else
- return ACLCHECK_NO_PRIV;
+ if (pg_extprotocol_aclmask(ptcid, roleid, mode, ACLMASK_ANY) != 0)
+ return ACLCHECK_OK;
+ else
+ return ACLCHECK_NO_PRIV;
}
/*
- * Ownership check for a relation (specified by OID).
+ * Ownership check for a tag (specified by OID).
*/
bool
-pg_class_ownercheck(Oid class_oid, Oid roleid)
+pg_tag_ownercheck(Oid tag_oid, Oid roleid)
{
HeapTuple tuple;
Oid ownerId;
@@ -5080,13 +4565,14 @@ pg_class_ownercheck(Oid class_oid, Oid roleid)
if (superuser_arg(roleid))
return true;
- tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(class_oid));
+ tuple = SearchSysCache1(TAGOID, ObjectIdGetDatum(tag_oid));
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_TABLE),
- errmsg("relation with OID %u does not exist",
class_oid)));
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("tag with OID %u does
not exist",
+ tag_oid)));
- ownerId = ((Form_pg_class) GETSTRUCT(tuple))->relowner;
+ ownerId = ((Form_pg_tag) GETSTRUCT(tuple))->tagowner;
ReleaseSysCache(tuple);
@@ -5094,402 +4580,10 @@ pg_class_ownercheck(Oid class_oid, Oid roleid)
}
/*
- * Ownership check for a type (specified by OID).
+ * Ownership check for a storage server (specified by OID).
*/
bool
-pg_type_ownercheck(Oid type_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(type_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("type with OID %u does not exist",
type_oid)));
-
- ownerId = ((Form_pg_type) GETSTRUCT(tuple))->typowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for an operator (specified by OID).
- */
-bool
-pg_oper_ownercheck(Oid oper_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(OPEROID, ObjectIdGetDatum(oper_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_FUNCTION),
- errmsg("operator with OID %u does not exist",
oper_oid)));
-
- ownerId = ((Form_pg_operator) GETSTRUCT(tuple))->oprowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a function (specified by OID).
- */
-bool
-pg_proc_ownercheck(Oid proc_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(proc_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_FUNCTION),
- errmsg("function with OID %u does not exist",
proc_oid)));
-
- ownerId = ((Form_pg_proc) GETSTRUCT(tuple))->proowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a procedural language (specified by OID)
- */
-bool
-pg_language_ownercheck(Oid lan_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(LANGOID, ObjectIdGetDatum(lan_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_FUNCTION),
- errmsg("language with OID %u does not exist",
lan_oid)));
-
- ownerId = ((Form_pg_language) GETSTRUCT(tuple))->lanowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a largeobject (specified by OID)
- *
- * This is only used for operations like ALTER LARGE OBJECT that are always
- * relative to an up-to-date snapshot.
- */
-bool
-pg_largeobject_ownercheck(Oid lobj_oid, Oid roleid)
-{
- Relation pg_lo_meta;
- ScanKeyData entry[1];
- SysScanDesc scan;
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- /* There's no syscache for pg_largeobject_metadata */
- pg_lo_meta = table_open(LargeObjectMetadataRelationId,
- AccessShareLock);
-
- ScanKeyInit(&entry[0],
- Anum_pg_largeobject_metadata_oid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(lobj_oid));
-
- scan = systable_beginscan(pg_lo_meta,
-
LargeObjectMetadataOidIndexId, true,
- NULL, 1, entry);
-
- tuple = systable_getnext(scan);
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("large object %u does not exist",
lobj_oid)));
-
- ownerId = ((Form_pg_largeobject_metadata) GETSTRUCT(tuple))->lomowner;
-
- systable_endscan(scan);
- table_close(pg_lo_meta, AccessShareLock);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a namespace (specified by OID).
- */
-bool
-pg_namespace_ownercheck(Oid nsp_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(NAMESPACEOID, ObjectIdGetDatum(nsp_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_SCHEMA),
- errmsg("schema with OID %u does not exist",
nsp_oid)));
-
- ownerId = ((Form_pg_namespace) GETSTRUCT(tuple))->nspowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a tablespace (specified by OID).
- */
-bool
-pg_tablespace_ownercheck(Oid spc_oid, Oid roleid)
-{
- HeapTuple spctuple;
- Oid spcowner;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- /* Search syscache for pg_tablespace */
- spctuple = SearchSysCache1(TABLESPACEOID, ObjectIdGetDatum(spc_oid));
- if (!HeapTupleIsValid(spctuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("tablespace with OID %u does not
exist", spc_oid)));
-
- spcowner = ((Form_pg_tablespace) GETSTRUCT(spctuple))->spcowner;
-
- ReleaseSysCache(spctuple);
-
- return has_privs_of_role(roleid, spcowner);
-}
-
-/*
- * Ownership check for an operator class (specified by OID).
- */
-bool
-pg_opclass_ownercheck(Oid opc_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(CLAOID, ObjectIdGetDatum(opc_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("operator class with OID %u does not
exist",
- opc_oid)));
-
- ownerId = ((Form_pg_opclass) GETSTRUCT(tuple))->opcowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for an operator family (specified by OID).
- */
-bool
-pg_opfamily_ownercheck(Oid opf_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(opf_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("operator family with OID %u does not
exist",
- opf_oid)));
-
- ownerId = ((Form_pg_opfamily) GETSTRUCT(tuple))->opfowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a tag (specified by OID).
- */
-bool
-pg_tag_ownercheck(Oid tag_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(TAGOID, ObjectIdGetDatum(tag_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("tag with OID %u does not exist",
- tag_oid)));
-
- ownerId = ((Form_pg_tag) GETSTRUCT(tuple))->tagowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a text search dictionary (specified by OID).
- */
-bool
-pg_ts_dict_ownercheck(Oid dict_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(TSDICTOID, ObjectIdGetDatum(dict_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("text search dictionary with OID %u
does not exist",
- dict_oid)));
-
- ownerId = ((Form_pg_ts_dict) GETSTRUCT(tuple))->dictowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a text search configuration (specified by OID).
- */
-bool
-pg_ts_config_ownercheck(Oid cfg_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(TSCONFIGOID, ObjectIdGetDatum(cfg_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("text search configuration with OID %u
does not exist",
- cfg_oid)));
-
- ownerId = ((Form_pg_ts_config) GETSTRUCT(tuple))->cfgowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a foreign-data wrapper (specified by OID).
- */
-bool
-pg_foreign_data_wrapper_ownercheck(Oid srv_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(FOREIGNDATAWRAPPEROID,
ObjectIdGetDatum(srv_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("foreign-data wrapper with OID %u does
not exist",
- srv_oid)));
-
- ownerId = ((Form_pg_foreign_data_wrapper) GETSTRUCT(tuple))->fdwowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a foreign server (specified by OID).
- */
-bool
-pg_foreign_server_ownercheck(Oid srv_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(srv_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("foreign server with OID %u does not
exist",
- srv_oid)));
-
- ownerId = ((Form_pg_foreign_server) GETSTRUCT(tuple))->srvowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a storage server (specified by OID).
- */
-bool
-gp_storage_server_ownercheck(Oid srv_oid, Oid roleid)
+gp_storage_server_ownercheck(Oid srv_oid, Oid roleid)
{
HeapTuple tuple;
Oid ownerId;
@@ -5502,8 +4596,8 @@ gp_storage_server_ownercheck(Oid srv_oid, Oid roleid)
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("storage server with OID %u does not
exist",
- srv_oid)));
+ errmsg("storage server with OID
%u does not exist",
+ srv_oid)));
ownerId = ((Form_gp_storage_server) GETSTRUCT(tuple))->srvowner;
@@ -5529,8 +4623,8 @@ pg_event_trigger_ownercheck(Oid et_oid, Oid roleid)
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("event trigger with OID %u does not
exist",
- et_oid)));
+ errmsg("event trigger with OID
%u does not exist",
+ et_oid)));
ownerId = ((Form_pg_event_trigger) GETSTRUCT(tuple))->evtowner;
@@ -5539,240 +4633,6 @@ pg_event_trigger_ownercheck(Oid et_oid, Oid roleid)
return has_privs_of_role(roleid, ownerId);
}
-/*
- * Ownership check for a database (specified by OID).
- */
-bool
-pg_database_ownercheck(Oid db_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid dba;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(db_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_DATABASE),
- errmsg("database with OID %u does not exist",
db_oid)));
-
- dba = ((Form_pg_database) GETSTRUCT(tuple))->datdba;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, dba);
-}
-
-/*
- * Ownership check for a collation (specified by OID).
- */
-bool
-pg_collation_ownercheck(Oid coll_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(COLLOID, ObjectIdGetDatum(coll_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("collation with OID %u does not exist",
coll_oid)));
-
- ownerId = ((Form_pg_collation) GETSTRUCT(tuple))->collowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a conversion (specified by OID).
- */
-bool
-pg_conversion_ownercheck(Oid conv_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(CONVOID, ObjectIdGetDatum(conv_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("conversion with OID %u does not
exist", conv_oid)));
-
- ownerId = ((Form_pg_conversion) GETSTRUCT(tuple))->conowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for an extension (specified by OID).
- */
-bool
-pg_extension_ownercheck(Oid ext_oid, Oid roleid)
-{
- Relation pg_extension;
- ScanKeyData entry[1];
- SysScanDesc scan;
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- /* There's no syscache for pg_extension, so do it the hard way */
- pg_extension = table_open(ExtensionRelationId, AccessShareLock);
-
- ScanKeyInit(&entry[0],
- Anum_pg_extension_oid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(ext_oid));
-
- scan = systable_beginscan(pg_extension,
- ExtensionOidIndexId,
true,
- NULL, 1, entry);
-
- tuple = systable_getnext(scan);
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("extension with OID %u does not exist",
ext_oid)));
-
- ownerId = ((Form_pg_extension) GETSTRUCT(tuple))->extowner;
-
- systable_endscan(scan);
- table_close(pg_extension, AccessShareLock);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a publication (specified by OID).
- */
-bool
-pg_publication_ownercheck(Oid pub_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pub_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("publication with OID %u does not
exist", pub_oid)));
-
- ownerId = ((Form_pg_publication) GETSTRUCT(tuple))->pubowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a subscription (specified by OID).
- */
-bool
-pg_subscription_ownercheck(Oid sub_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(SUBSCRIPTIONOID, ObjectIdGetDatum(sub_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("subscription with OID %u does not
exist", sub_oid)));
-
- ownerId = ((Form_pg_subscription) GETSTRUCT(tuple))->subowner;
-
- ReleaseSysCache(tuple);
-
- return has_privs_of_role(roleid, ownerId);
-}
-
-/*
- * Ownership check for a statistics object (specified by OID).
- */
-bool
-pg_statistics_object_ownercheck(Oid stat_oid, Oid roleid)
-{
- HeapTuple tuple;
- Oid ownerId;
-
- /* Superusers bypass all permission checking. */
- if (superuser_arg(roleid))
- return true;
-
- tuple = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(stat_oid));
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("statistics object with OID %u does not
exist",
- stat_oid)));
-
- ownerId = ((Form_pg_statistic_ext) GETSTRUCT(tuple))->stxowner;
-
- ReleaseSysCache(tuple);
-=======
- {
- /* for catalogs without an appropriate syscache */
- Relation rel;
- ScanKeyData entry[1];
- SysScanDesc scan;
- HeapTuple tuple;
- bool isnull;
-
- rel = table_open(classid, AccessShareLock);
-
- ScanKeyInit(&entry[0],
- get_object_attnum_oid(classid),
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(objectid));
-
- scan = systable_beginscan(rel,
-
get_object_oid_index(classid), true,
- NULL, 1,
entry);
-
- tuple = systable_getnext(scan);
- if (!HeapTupleIsValid(tuple))
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("%s with OID %u does not
exist", get_object_class_descr(classid), objectid)));
-
- ownerId = DatumGetObjectId(heap_getattr(tuple,
-
get_object_attnum_owner(classid),
-
RelationGetDescr(rel),
-
&isnull));
- Assert(!isnull);
-
- systable_endscan(scan);
- table_close(rel, AccessShareLock);
- }
->>>>>>> REL_16_9
-
- return has_privs_of_role(roleid, ownerId);
-}
/*
* Ownership check for an external protocol (specified by OID).
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index 5c620d9e95e..0b723b8e7d3 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -632,7 +632,6 @@ IsSharedRelation(Oid relationId)
}
/*
-<<<<<<< HEAD
* OIDs for catalog object are normally allocated in the master, and
* executor nodes should just use the OIDs passed by the master. But
* there are some exceptions.
@@ -681,7 +680,8 @@ RelationNeedsSynchronizedOIDs(Relation relation)
}
return false;
}
-=======
+
+/*
* IsPinnedObject
* Given the class + OID identity of a database object, report
whether
* it is "pinned", that is not droppable because the system
requires it.
@@ -743,8 +743,6 @@ IsPinnedObject(Oid classId, Oid objectId)
return true;
}
->>>>>>> REL_16_9
-
/*
* GetNewOidWithIndex
* Generate a new OID that is unique within the system relation.
@@ -878,7 +876,7 @@ GetNewOidWithIndex(Relation relation, Oid indexId,
AttrNumber oidcolumn)
}
static bool
-GpCheckRelFileCollision(RelFileNodeBackend rnode)
+GpCheckRelFileCollision(RelFileLocatorBackend rnode)
{
char *rpath;
bool collides;
@@ -912,13 +910,9 @@ GpCheckRelFileCollision(RelFileNodeBackend rnode)
* If the relfilenumber will also be used as the relation's OID, pass the
* opened pg_class catalog, and this routine will guarantee that the result
* is also an unused OID within pg_class. If the result is to be used only
-<<<<<<< HEAD
- * as a relfilenode for an existing relation, pass NULL for pg_class.
+ * as a relfilenumber for an existing relation, pass NULL for pg_class.
* (in GPDB, 'pg_class' is unused, there is a different mechanism to avoid
* clashes, across the whole cluster.)
-=======
- * as a relfilenumber for an existing relation, pass NULL for pg_class.
->>>>>>> REL_16_9
*
* As with GetNewOidWithIndex(), there is some theoretical risk of a race
* condition, but it doesn't seem worth worrying about.
@@ -929,12 +923,7 @@ GpCheckRelFileCollision(RelFileNodeBackend rnode)
RelFileNumber
GetNewRelFileNumber(Oid reltablespace, Relation pg_class, char relpersistence)
{
-<<<<<<< HEAD
- RelFileNodeBackend rnode;
-=======
RelFileLocatorBackend rlocator;
- char *rpath;
->>>>>>> REL_16_9
bool collides;
BackendId backend;
@@ -979,22 +968,10 @@ GetNewRelFileNumber(Oid reltablespace, Relation pg_class,
char relpersistence)
{
CHECK_FOR_INTERRUPTS();
-<<<<<<< HEAD
/* Generate the Relfilenode */
- rnode.node.relNode = GetNewSegRelfilenode();
-
- collides = GpCheckRelFileCollision(rnode);
-=======
- /* Generate the OID */
- if (pg_class)
- rlocator.locator.relNumber =
GetNewOidWithIndex(pg_class, ClassOidIndexId,
-
Anum_pg_class_oid);
- else
- rlocator.locator.relNumber = GetNewObjectId();
+ rlocator.locator.relNumber = GetNewSegRelfilenode();
- /* Check for existing file of same name */
- rpath = relpath(rlocator, MAIN_FORKNUM);
->>>>>>> REL_16_9
+ collides = GpCheckRelFileCollision(rlocator);
if (!collides && rnode.node.spcNode != GLOBALTABLESPACE_OID)
{
@@ -1015,13 +992,9 @@ GetNewRelFileNumber(Oid reltablespace, Relation pg_class,
char relpersistence)
}
} while (collides);
-<<<<<<< HEAD
- elog(DEBUG1, "Calling GetNewRelFileNode returns new relfilenode = %u",
rnode.node.relNode);
+ elog(DEBUG1, "Calling GetNewRelFileNode returns new relfilenode = %u",
rlocator.locator.relNumber);
- return rnode.node.relNode;
-=======
return rlocator.locator.relNumber;
->>>>>>> REL_16_9
}
/*
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index d9e6e740678..f48824d9edc 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -88,12 +88,9 @@
#include "commands/taskcmds.h"
#include "commands/trigger.h"
#include "commands/typecmds.h"
-<<<<<<< HEAD
#include "foreign/foreign.h"
-=======
#include "funcapi.h"
#include "miscadmin.h"
->>>>>>> REL_16_9
#include "nodes/nodeFuncs.h"
#include "parser/parsetree.h"
#include "rewrite/rewriteRemove.h"
@@ -1194,7 +1191,6 @@ reportDependentObjects(const ObjectAddresses
*targetObjects,
if (otherDesc)
{
-<<<<<<< HEAD
if (msglevel == NOTICE && Gp_role ==
GP_ROLE_EXECUTE)
{
ereport(DEBUG1,
@@ -1221,25 +1217,6 @@ reportDependentObjects(const ObjectAddresses
*targetObjects,
objDesc, otherDesc);
pfree(otherDesc);
}
-=======
- if (numReportedClient < MAX_REPORTED_DEPS)
- {
- /* separate entries with a newline */
- if (clientdetail.len != 0)
-
appendStringInfoChar(&clientdetail, '\n');
- appendStringInfo(&clientdetail, _("%s
depends on %s"),
-
objDesc, otherDesc);
- numReportedClient++;
- }
- else
- numNotReportedClient++;
- /* separate entries with a newline */
- if (logdetail.len != 0)
- appendStringInfoChar(&logdetail, '\n');
- appendStringInfo(&logdetail, _("%s depends on
%s"),
- objDesc,
otherDesc);
- pfree(otherDesc);
->>>>>>> REL_16_9
}
else
numNotReportedClient++;
@@ -1621,7 +1598,6 @@ doDeletion(const ObjectAddress *object, int flags)
RemovePublicationById(object->objectId);
break;
-<<<<<<< HEAD
case OCLASS_SCHEMA:
RemoveSchemaById(object->objectId);
/*
@@ -1639,8 +1615,6 @@ doDeletion(const ObjectAddress *object, int flags)
RemoveMatviewAuxEntry(object->objectId);
break;
-=======
->>>>>>> REL_16_9
case OCLASS_CAST:
case OCLASS_COLLATION:
case OCLASS_CONVERSION:
@@ -1658,10 +1632,7 @@ doDeletion(const ObjectAddress *object, int flags)
case OCLASS_USER_MAPPING:
case OCLASS_DEFACL:
case OCLASS_EVENT_TRIGGER:
-<<<<<<< HEAD
case OCLASS_EXTPROTOCOL:
-=======
->>>>>>> REL_16_9
case OCLASS_TRANSFORM:
case OCLASS_ROLE_MEMBERSHIP:
DropObjectById(object);
@@ -1674,16 +1645,13 @@ doDeletion(const ObjectAddress *object, int flags)
case OCLASS_DATABASE:
case OCLASS_TBLSPACE:
case OCLASS_SUBSCRIPTION:
-<<<<<<< HEAD
case OCLASS_PROFILE:
case OCLASS_PASSWORDHISTORY:
case OCLASS_STORAGE_SERVER:
case OCLASS_STORAGE_USER_MAPPING:
case OCLASS_TAG:
case OCLASS_TAG_DESCRIPTION:
-=======
case OCLASS_PARAMETER_ACL:
->>>>>>> REL_16_9
elog(ERROR, "global objects cannot be deleted by
doDeletion");
break;
@@ -3121,7 +3089,6 @@ getObjectClass(const ObjectAddress *object)
case EventTriggerRelationId:
return OCLASS_EVENT_TRIGGER;
-<<<<<<< HEAD
case ExtprotocolRelationId:
Assert(object->objectSubId == 0);
return OCLASS_EXTPROTOCOL;
@@ -3131,10 +3098,9 @@ getObjectClass(const ObjectAddress *object)
case PasswordHistoryRelationId:
return OCLASS_PASSWORDHISTORY;
-=======
+
case ParameterAclRelationId:
return OCLASS_PARAMETER_ACL;
->>>>>>> REL_16_9
case PolicyRelationId:
return OCLASS_POLICY;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index d609f15b464..dc1a71cdb1b 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -3,13 +3,9 @@
* index.c
* code to create and destroy POSTGRES index relations
*
-<<<<<<< HEAD
* Portions Copyright (c) 2006-2009, Greenplum inc
* Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
* Portions Copyright (c) 1994, Regents of the University of California
*
*
@@ -1045,45 +1041,10 @@ index_create_internal(Relation heapRelation,
*/
if (!OidIsValid(indexRelationId))
{
-<<<<<<< HEAD
indexRelationId = GetNewOidForRelation(pg_class,
ClassOidIndexId,
Anum_pg_class_oid,
(char *) indexRelationName,
namespaceId);
-=======
- /* Use binary-upgrade override for pg_class.oid and
relfilenumber */
- if (IsBinaryUpgrade)
- {
- if (!OidIsValid(binary_upgrade_next_index_pg_class_oid))
- ereport(ERROR,
-
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("pg_class index OID
value not set when in binary upgrade mode")));
-
- indexRelationId =
binary_upgrade_next_index_pg_class_oid;
- binary_upgrade_next_index_pg_class_oid = InvalidOid;
-
- /* Override the index relfilenumber */
- if ((relkind == RELKIND_INDEX) &&
-
(!RelFileNumberIsValid(binary_upgrade_next_index_pg_class_relfilenumber)))
- ereport(ERROR,
-
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("index relfilenumber
value not set when in binary upgrade mode")));
- relFileNumber =
binary_upgrade_next_index_pg_class_relfilenumber;
- binary_upgrade_next_index_pg_class_relfilenumber =
InvalidRelFileNumber;
-
- /*
- * Note that we want create_storage = true for binary
upgrade. The
- * storage we create here will be replaced later, but
we need to
- * have something on disk in the meanwhile.
- */
- Assert(create_storage);
- }
- else
- {
- indexRelationId =
- GetNewRelFileNumber(tableSpaceId, pg_class,
relpersistence);
- }
->>>>>>> REL_16_9
}
/*
@@ -3094,7 +3055,6 @@ index_update_stats(Relation rel,
dirty = true;
}
-<<<<<<< HEAD
if (reltuples >= 0 && Gp_role != GP_ROLE_DISPATCH)
{
BlockNumber relpages;
@@ -3110,10 +3070,6 @@ index_update_stats(Relation rel,
else /* don't bother for
indexes */
relallvisible = 0;
-=======
- if (update_stats)
- {
->>>>>>> REL_16_9
if (rd_rel->relpages != (int32) relpages)
{
rd_rel->relpages = (int32) relpages;
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index c86dd1ba754..ae42e8cde65 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -4644,7 +4644,6 @@ RemoveTempRelationsCallback(int code, Datum arg)
ObjectAddress object;
ObjectAddress toastobject;
-<<<<<<< HEAD
object.classId = NamespaceRelationId;
object.objectId = myTempNamespace;
object.objectSubId = 0;
@@ -4661,8 +4660,6 @@ RemoveTempRelationsCallback(int code, Datum arg)
myTempNamespace);
}
-=======
->>>>>>> REL_16_9
PopActiveSnapshot();
CommitTransactionCommand();
}
diff --git a/src/backend/catalog/objectaddress.c
b/src/backend/catalog/objectaddress.c
index 9d6346b8a56..22d918172a1 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -49,12 +49,9 @@
#include "catalog/pg_opclass.h"
#include "catalog/pg_operator.h"
#include "catalog/pg_opfamily.h"
-<<<<<<< HEAD
#include "catalog/pg_password_history.h"
-#include "catalog/pg_profile.h"
-=======
#include "catalog/pg_parameter_acl.h"
->>>>>>> REL_16_9
+#include "catalog/pg_profile.h"
#include "catalog/pg_policy.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_publication.h"
@@ -1169,11 +1166,8 @@ get_object_address(ObjectType objtype, Node *object,
case OBJECT_FDW:
case OBJECT_FOREIGN_SERVER:
case OBJECT_EVENT_TRIGGER:
-<<<<<<< HEAD
case OBJECT_EXTPROTOCOL:
-=======
case OBJECT_PARAMETER_ACL:
->>>>>>> REL_16_9
case OBJECT_ACCESS_METHOD:
case OBJECT_PUBLICATION:
case OBJECT_SUBSCRIPTION:
@@ -2441,11 +2435,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
/* FALLTHROUGH */
case OBJECT_DOMCONSTRAINT:
case OBJECT_CAST:
-<<<<<<< HEAD
- case OBJECT_USER_MAPPING:
case OBJECT_STORAGE_USER_MAPPING:
-=======
->>>>>>> REL_16_9
case OBJECT_PUBLICATION_REL:
case OBJECT_DEFACL:
case OBJECT_TRANSFORM:
@@ -2678,49 +2668,14 @@ check_object_ownership(Oid roleid, ObjectType objtype,
ObjectAddress address,
case OBJECT_SCHEMA:
case OBJECT_SUBSCRIPTION:
case OBJECT_TABLESPACE:
+ case OBJECT_STORAGE_SERVER:
+ case OBJECT_TAG:
if (!object_ownercheck(address.classId,
address.objectId, roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
strVal(object));
break;
case OBJECT_COLLATION:
case OBJECT_CONVERSION:
-<<<<<<< HEAD
- if (!pg_conversion_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
-
NameListToString(castNode(List, object)));
- break;
- case OBJECT_EXTENSION:
- if (!pg_extension_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_FDW:
- if
(!pg_foreign_data_wrapper_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_FOREIGN_SERVER:
- if (!pg_foreign_server_ownercheck(address.objectId,
roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_STORAGE_SERVER:
- if (!gp_storage_server_ownercheck(address.objectId,
roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_EVENT_TRIGGER:
- if (!pg_event_trigger_ownercheck(address.objectId,
roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_LANGUAGE:
- if (!pg_language_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
-=======
->>>>>>> REL_16_9
case OBJECT_OPCLASS:
case OBJECT_OPFAMILY:
case OBJECT_STATISTIC_EXT:
@@ -2764,29 +2719,6 @@ check_object_ownership(Oid roleid, ObjectType objtype,
ObjectAddress address,
aclcheck_error_type(ACLCHECK_NOT_OWNER,
typeid);
}
break;
-<<<<<<< HEAD
- case OBJECT_TABLESPACE:
- if (!pg_tablespace_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_TAG:
- if (!pg_tag_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
- strVal((Value *)
object));
- break;
- case OBJECT_TSDICTIONARY:
- if (!pg_ts_dict_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
-
NameListToString(castNode(List, object)));
- break;
- case OBJECT_TSCONFIGURATION:
- if (!pg_ts_config_ownercheck(address.objectId, roleid))
- aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
-
NameListToString(castNode(List, object)));
- break;
-=======
->>>>>>> REL_16_9
case OBJECT_ROLE:
/*
@@ -2830,21 +2762,17 @@ check_object_ownership(Oid roleid, ObjectType objtype,
ObjectAddress address,
case OBJECT_TSPARSER:
case OBJECT_TSTEMPLATE:
case OBJECT_ACCESS_METHOD:
-<<<<<<< HEAD
+ case OBJECT_PARAMETER_ACL:
case OBJECT_RESQUEUE:
case OBJECT_RESGROUP:
-=======
- case OBJECT_PARAMETER_ACL:
->>>>>>> REL_16_9
/* We treat these object types as being owned by
superusers */
if (!superuser_arg(roleid))
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser")));
break;
-<<<<<<< HEAD
case OBJECT_STATISTIC_EXT:
- if (!pg_statistics_object_ownercheck(address.objectId,
roleid))
+ if (!object_ownercheck(STATEXTOID, address.objectId,
roleid))
aclcheck_error(ACLCHECK_NOT_OWNER, objtype,
NameListToString(castNode(List, object)));
break;
@@ -2854,7 +2782,6 @@ check_object_ownership(Oid roleid, ObjectType objtype,
ObjectAddress address,
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser")));
-=======
case OBJECT_AMOP:
case OBJECT_AMPROC:
case OBJECT_DEFAULT:
@@ -2864,7 +2791,6 @@ check_object_ownership(Oid roleid, ObjectType objtype,
ObjectAddress address,
case OBJECT_USER_MAPPING:
/* These are currently not supported or don't make
sense here. */
elog(ERROR, "unsupported object type: %d", (int)
objtype);
->>>>>>> REL_16_9
break;
}
}
diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
index ae2f776057f..02e0ce71a07 100644
--- a/src/backend/catalog/pg_depend.c
+++ b/src/backend/catalog/pg_depend.c
@@ -181,11 +181,7 @@ recordMultipleDependencies(const ObjectAddress *depender,
* of the current extension. In the latter case we can skip checking whether
* it is already a member of any extension.
*
-<<<<<<< HEAD
- * Note: isReplace = true is typically used when updating a object in
-=======
* Note: isReplace = true is typically used when updating an object in
->>>>>>> REL_16_9
* CREATE OR REPLACE and similar commands. We used to allow the target
* object to not already be an extension member, instead silently absorbing
* it into the current extension. However, this was both error-prone
diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index f009e143ee3..fd54ea7dda2 100644
--- a/src/backend/catalog/pg_proc.c
+++ b/src/backend/catalog/pg_proc.c
@@ -41,10 +41,7 @@
#include "parser/analyze.h"
#include "parser/parse_coerce.h"
#include "parser/parse_type.h"
-<<<<<<< HEAD
-=======
#include "pgstat.h"
->>>>>>> REL_16_9
#include "rewrite/rewriteHandler.h"
#include "tcop/pquery.h"
#include "tcop/tcopprot.h"
@@ -1100,14 +1097,8 @@ function_parse_error_transpose(const char *prosrc)
}
/* We can get the original query text from the active portal (hack...)
*/
-<<<<<<< HEAD
/* Assert(ActivePortal && PortalGetStatus(ActivePortal) ==
PORTAL_ACTIVE); */
queryText = ActivePortal->sourceText;
-=======
- if (ActivePortal && ActivePortal->status == PORTAL_ACTIVE)
- {
- const char *queryText = ActivePortal->sourceText;
->>>>>>> REL_16_9
/* Try to locate the prosrc in the original text */
newerrposition = match_prosrc_to_query(prosrc, queryText,
diff --git a/src/backend/catalog/pg_publication.c
b/src/backend/catalog/pg_publication.c
index 636a8c12468..47f7e45bd83 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -45,9 +45,7 @@
#include "utils/rel.h"
#include "utils/syscache.h"
-<<<<<<< HEAD
#include "catalog/oid_dispatch.h"
-=======
/* Records association between publication and published table */
typedef struct
{
@@ -58,7 +56,6 @@ typedef struct
static void publication_translate_columns(Relation targetrel, List *columns,
int *natts, AttrNumber **attrs);
->>>>>>> REL_16_9
/*
* Check if relation can be in given publication and throws appropriate
@@ -153,50 +150,7 @@ is_publishable_class(Oid relid, Form_pg_class reltuple)
}
/*
-<<<<<<< HEAD
- * Filter out the partitions whose parent tables were also specified in
- * the publication.
- */
-static List *
-filter_partitions(List *relids)
-{
- List *result = NIL;
- ListCell *lc;
- ListCell *lc2;
-
- foreach(lc, relids)
- {
- bool skip = false;
- List *ancestors = NIL;
- Oid relid = lfirst_oid(lc);
-
- if (get_rel_relispartition(relid))
- ancestors = get_partition_ancestors(relid);
-
- foreach(lc2, ancestors)
- {
- Oid ancestor = lfirst_oid(lc2);
-
- /* Check if the parent table exists in the published
table list. */
- if (list_member_oid(relids, ancestor))
- {
- skip = true;
- break;
- }
- }
-
- if (!skip)
- result = lappend_oid(result, relid);
- }
-
- return result;
-}
-
-/*
- * Another variant of this, taking a Relation.
-=======
* Another variant of is_publishable_class(), taking a Relation.
->>>>>>> REL_16_9
*/
bool
is_publishable_relation(Relation rel)
@@ -227,8 +181,6 @@ pg_relation_is_publishable(PG_FUNCTION_ARGS)
}
/*
-<<<<<<< HEAD
-=======
* Returns true if the ancestor is in the list of published relations.
* Otherwise, returns false.
*/
@@ -314,7 +266,6 @@ is_schema_publication(Oid pubid)
}
/*
->>>>>>> REL_16_9
* Gets the relations based on the publication partition option for a specified
* relation.
*/
@@ -350,8 +301,6 @@ GetPubPartitionOptionRelations(List *result,
PublicationPartOpt pub_partopt,
return result;
}
-<<<<<<< HEAD
-=======
/*
* Returns the relid of the topmost ancestor that is published via this
@@ -407,7 +356,6 @@ GetTopMostAncestorInPublication(Oid puboid, List
*ancestors, int *ancestor_level
return topmost_relid;
}
->>>>>>> REL_16_9
/*
* Insert new publication / relation mapping.
@@ -465,16 +413,10 @@ publication_add_relation(Oid pubid, PublicationRelInfo
*pri,
memset(values, 0, sizeof(values));
memset(nulls, false, sizeof(nulls));
-<<<<<<< HEAD
- prrelid = GetNewOidForPublicationRel(rel, PublicationRelObjectIndexId,
+ pubreloid = GetNewOidForPublicationRel(rel, PublicationRelObjectIndexId,
Anum_pg_publication_rel_oid,
relid, pubid);
- values[Anum_pg_publication_rel_oid - 1] = ObjectIdGetDatum(prrelid);
-=======
- pubreloid = GetNewOidWithIndex(rel, PublicationRelObjectIndexId,
-
Anum_pg_publication_rel_oid);
values[Anum_pg_publication_rel_oid - 1] = ObjectIdGetDatum(pubreloid);
->>>>>>> REL_16_9
values[Anum_pg_publication_rel_prpubid - 1] =
ObjectIdGetDatum(pubid);
values[Anum_pg_publication_rel_prrelid - 1] =
@@ -537,8 +479,6 @@ publication_add_relation(Oid pubid, PublicationRelInfo *pri,
relid);
InvalidatePublicationRels(relids);
-<<<<<<< HEAD
-=======
return myself;
}
@@ -745,7 +685,6 @@ publication_add_schema(Oid pubid, Oid schemaid, bool
if_not_exists)
schemaRels = GetSchemaPublicationRelations(schemaid,
PUBLICATION_PART_ALL);
InvalidatePublicationRels(schemaRels);
->>>>>>> REL_16_9
return myself;
}
@@ -1211,29 +1150,6 @@ pg_get_publication_tables(PG_FUNCTION_ARGS)
* data of the child table to be double-published on the
subscriber
* side.
*/
-<<<<<<< HEAD
- if (publication->alltables)
- tables =
GetAllTablesPublicationRelations(publication->pubviaroot);
- else
- {
- tables = GetPublicationRelations(publication->oid,
-
publication->pubviaroot ?
-
PUBLICATION_PART_ROOT :
-
PUBLICATION_PART_LEAF);
-
- /*
- * If the publication publishes partition changes via
their
- * respective root partitioned tables, we must exclude
partitions
- * in favor of including the root partitioned tables.
Otherwise,
- * the function could return both the child and parent
tables
- * which could cause data of the child table to be
- * double-published on the subscriber side.
- */
- if (publication->pubviaroot)
- tables = filter_partitions(tables);
- }
- funcctx->user_fctx = (void *) tables;
-=======
if (viaroot)
filter_partitions(table_infos);
@@ -1250,7 +1166,6 @@ pg_get_publication_tables(PG_FUNCTION_ARGS)
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
funcctx->user_fctx = (void *) table_infos;
->>>>>>> REL_16_9
MemoryContextSwitchTo(oldcontext);
}
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index aa8d017449a..109157a8b3e 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -43,7 +43,6 @@
#include "utils/rel.h"
#include "utils/syscache.h"
-<<<<<<< HEAD
#include "catalog/gp_indexing.h"
#include "catalog/pg_type_encoding.h"
#include "cdb/cdbvars.h"
@@ -51,8 +50,6 @@
/* GPDB_14_MERGE_FIXME: Do we need to keep binary_upgrade_next_pg_type_oid
* for binary upgrade?
*/
-=======
->>>>>>> REL_16_9
/* Potentially set by pg_upgrade_support functions */
Oid binary_upgrade_next_pg_type_oid = InvalidOid;
@@ -688,14 +685,6 @@ TypeCreate(Oid newTypeOid,
* isDependentType is true if this is an implicit array or relation rowtype;
* that means it doesn't need its own dependencies on owner etc.
*
-<<<<<<< HEAD
- * If rebuild is true, we remove existing dependencies and rebuild them
- * from scratch. This is needed for ALTER TYPE, and also when replacing
- * a shell type. We don't remove an existing extension dependency, though.
- * That means an extension can't absorb a shell type that is free-standing
- * or belongs to another extension, nor ALTER a type that is free-standing or
- * belongs to another extension.
-=======
* We make an extension-membership dependency if we're in an extension
* script and makeExtensionDep is true (and isDependentType isn't true).
* makeExtensionDep should be true when creating a new type or replacing a
@@ -710,7 +699,6 @@ TypeCreate(Oid newTypeOid,
* type already belongs to the current extension. That's the behavior we
* want when replacing a shell type, which is the only case where both flags
* are true.
->>>>>>> REL_16_9
*/
void
GenerateTypeDependencies(HeapTuple typeTuple,
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index be9a3464832..9814aa4eb63 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -290,12 +290,8 @@ create_toast_table(Relation rel, Oid toastOid, Oid
toastIndexOid,
true,
true,
OIDOldToast,
-<<<<<<< HEAD
NULL,
/* valid_opts */ false);
-=======
-
NULL);
->>>>>>> REL_16_9
Assert(toast_relid != InvalidOid);
/* make the toast relation visible, else table_open will fail */
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]