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
Jason Petersen 2017-03-15 19:07:26 -06:00
parent 23f5e4282d
commit d95b5bbad3
No known key found for this signature in database
GPG Key ID: 9F1D3510D110ABA9
2 changed files with 13 additions and 9 deletions

View File

@ -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;
} }

View File

@ -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 */