mirror of https://github.com/citusdata/citus.git
Rework ReplicateGrantStmt to use new flow
This was the impetus for the previous commit that changed from using a DDLJob * to a List * of them.pull/1278/head
parent
23f5e4282d
commit
d95b5bbad3
|
@ -382,6 +382,7 @@ multi_ProcessUtility(Node *parsetree,
|
||||||
foreach(ddlJobCell, ddlJobs)
|
foreach(ddlJobCell, ddlJobs)
|
||||||
{
|
{
|
||||||
DDLJob *ddlJob = (DDLJob *) lfirst(ddlJobCell);
|
DDLJob *ddlJob = (DDLJob *) lfirst(ddlJobCell);
|
||||||
|
|
||||||
ExecuteDistributedDDLJob(ddlJob);
|
ExecuteDistributedDDLJob(ddlJob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2362,15 +2363,14 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ReplicateGrantStmt replicates GRANT/REVOKE command to worker nodes if the
|
* PlanGrantStmt replicates GRANT/REVOKE command to worker nodes if the
|
||||||
* the statement affects distributed tables.
|
* the statement affects distributed tables.
|
||||||
*
|
*
|
||||||
* NB: So far column level privileges are not supported.
|
* NB: So far column level privileges are not supported.
|
||||||
*/
|
*/
|
||||||
void
|
List *
|
||||||
ReplicateGrantStmt(Node *parsetree)
|
PlanGrantStmt(GrantStmt *grantStmt)
|
||||||
{
|
{
|
||||||
GrantStmt *grantStmt = (GrantStmt *) parsetree;
|
|
||||||
StringInfoData privsString;
|
StringInfoData privsString;
|
||||||
StringInfoData granteesString;
|
StringInfoData granteesString;
|
||||||
StringInfoData targetString;
|
StringInfoData targetString;
|
||||||
|
@ -2378,7 +2378,7 @@ ReplicateGrantStmt(Node *parsetree)
|
||||||
ListCell *granteeCell = NULL;
|
ListCell *granteeCell = NULL;
|
||||||
ListCell *objectCell = NULL;
|
ListCell *objectCell = NULL;
|
||||||
bool isFirst = true;
|
bool isFirst = true;
|
||||||
DDLJob *ddlJob = palloc(sizeof(DDLJob));
|
List *ddlJobs = NIL;
|
||||||
|
|
||||||
initStringInfo(&privsString);
|
initStringInfo(&privsString);
|
||||||
initStringInfo(&granteesString);
|
initStringInfo(&granteesString);
|
||||||
|
@ -2392,7 +2392,7 @@ ReplicateGrantStmt(Node *parsetree)
|
||||||
if (grantStmt->targtype != ACL_TARGET_OBJECT ||
|
if (grantStmt->targtype != ACL_TARGET_OBJECT ||
|
||||||
grantStmt->objtype != ACL_OBJECT_RELATION)
|
grantStmt->objtype != ACL_OBJECT_RELATION)
|
||||||
{
|
{
|
||||||
return;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* deparse the privileges */
|
/* deparse the privileges */
|
||||||
|
@ -2463,6 +2463,7 @@ ReplicateGrantStmt(Node *parsetree)
|
||||||
RangeVar *relvar = (RangeVar *) lfirst(objectCell);
|
RangeVar *relvar = (RangeVar *) lfirst(objectCell);
|
||||||
Oid relOid = RangeVarGetRelid(relvar, NoLock, false);
|
Oid relOid = RangeVarGetRelid(relvar, NoLock, false);
|
||||||
const char *grantOption = "";
|
const char *grantOption = "";
|
||||||
|
DDLJob *ddlJob = NULL;
|
||||||
|
|
||||||
if (!IsDistributedTable(relOid))
|
if (!IsDistributedTable(relOid))
|
||||||
{
|
{
|
||||||
|
@ -2495,12 +2496,15 @@ ReplicateGrantStmt(Node *parsetree)
|
||||||
granteesString.data);
|
granteesString.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ddlJob = palloc0(sizeof(DDLJob));
|
||||||
ddlJob->targetRelationId = relOid;
|
ddlJob->targetRelationId = relOid;
|
||||||
ddlJob->commandString = ddlString.data;
|
ddlJob->commandString = pstrdup(ddlString.data);
|
||||||
ddlJob->taskList = DDLTaskList(relOid, ddlString.data);
|
ddlJob->taskList = DDLTaskList(relOid, ddlString.data);
|
||||||
|
|
||||||
ExecuteDistributedDDLJob(ddlJob);
|
ddlJobs = lappend(ddlJobs, ddlJob);
|
||||||
|
|
||||||
resetStringInfo(&ddlString);
|
resetStringInfo(&ddlString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ddlJobs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ typedef struct DDLJob
|
||||||
extern void multi_ProcessUtility(Node *parsetree, const char *queryString,
|
extern void multi_ProcessUtility(Node *parsetree, const char *queryString,
|
||||||
ProcessUtilityContext context, ParamListInfo params,
|
ProcessUtilityContext context, ParamListInfo params,
|
||||||
DestReceiver *dest, char *completionTag);
|
DestReceiver *dest, char *completionTag);
|
||||||
extern void ReplicateGrantStmt(Node *parsetree);
|
extern List * PlanGrantStmt(GrantStmt *grantStmt);
|
||||||
|
|
||||||
|
|
||||||
#endif /* MULTI_UTILITY_H */
|
#endif /* MULTI_UTILITY_H */
|
||||||
|
|
Loading…
Reference in New Issue