mirror of https://github.com/citusdata/citus.git
Propagate alter stats owner
parent
f7c70f9a63
commit
48ca1637a4
|
@ -431,6 +431,13 @@ static DistributeObjectOps Statistics_AlterObjectSchema = {
|
||||||
.postprocess = PostprocessAlterStatisticsSchemaStmt,
|
.postprocess = PostprocessAlterStatisticsSchemaStmt,
|
||||||
.address = AlterStatisticsSchemaStmtObjectAddress,
|
.address = AlterStatisticsSchemaStmtObjectAddress,
|
||||||
};
|
};
|
||||||
|
static DistributeObjectOps Statistics_AlterOwner = {
|
||||||
|
.deparse = DeparseAlterStatisticsOwnerStmt,
|
||||||
|
.qualify = QualifyAlterStatisticsOwnerStmt,
|
||||||
|
.preprocess = PreprocessAlterStatisticsOwnerStmt,
|
||||||
|
.postprocess = NULL,
|
||||||
|
.address = NULL,
|
||||||
|
};
|
||||||
static DistributeObjectOps Statistics_Drop = {
|
static DistributeObjectOps Statistics_Drop = {
|
||||||
.deparse = NULL,
|
.deparse = NULL,
|
||||||
.qualify = QualifyDropStatisticsStmt,
|
.qualify = QualifyDropStatisticsStmt,
|
||||||
|
@ -666,6 +673,11 @@ GetDistributeObjectOps(Node *node)
|
||||||
return &Routine_AlterOwner;
|
return &Routine_AlterOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OBJECT_STATISTIC_EXT:
|
||||||
|
{
|
||||||
|
return &Statistics_AlterOwner;
|
||||||
|
}
|
||||||
|
|
||||||
case OBJECT_TYPE:
|
case OBJECT_TYPE:
|
||||||
{
|
{
|
||||||
return &Type_AlterOwner;
|
return &Type_AlterOwner;
|
||||||
|
|
|
@ -322,8 +322,7 @@ AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PreprocessAlterStatisticsStmt is called during the planning phase for
|
* PreprocessAlterStatisticsStmt is called during the planning phase for
|
||||||
* ALTER STATISTICS .. SET STATISTICS command has been executed
|
* ALTER STATISTICS .. SET STATISTICS.
|
||||||
* by standard process utility.
|
|
||||||
*/
|
*/
|
||||||
List *
|
List *
|
||||||
PreprocessAlterStatisticsStmt(Node *node, const char *queryString)
|
PreprocessAlterStatisticsStmt(Node *node, const char *queryString)
|
||||||
|
@ -360,6 +359,43 @@ PreprocessAlterStatisticsStmt(Node *node, const char *queryString)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PreprocessAlterStatisticsOwnerStmt is called during the planning phase for
|
||||||
|
* ALTER STATISTICS .. OWNER TO.
|
||||||
|
*/
|
||||||
|
List *
|
||||||
|
PreprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString)
|
||||||
|
{
|
||||||
|
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
|
||||||
|
Assert(stmt->objectType == OBJECT_STATISTIC_EXT);
|
||||||
|
|
||||||
|
Oid statsOid = get_statistics_object_oid((List *) stmt->object, false);
|
||||||
|
Oid relationId = GetRelIdByStatsOid(statsOid);
|
||||||
|
|
||||||
|
if (!IsCitusTable(relationId) || !ShouldPropagate())
|
||||||
|
{
|
||||||
|
return NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureCoordinator();
|
||||||
|
|
||||||
|
QualifyTreeNode((Node *) stmt);
|
||||||
|
|
||||||
|
char *ddlCommand = DeparseTreeNode((Node *) stmt);
|
||||||
|
|
||||||
|
DDLJob *ddlJob = palloc0(sizeof(DDLJob));
|
||||||
|
|
||||||
|
ddlJob->targetRelationId = relationId;
|
||||||
|
ddlJob->concurrentIndexCmd = false;
|
||||||
|
ddlJob->startNewTransaction = false;
|
||||||
|
ddlJob->commandString = ddlCommand;
|
||||||
|
ddlJob->taskList = DDLTaskList(relationId, ddlCommand);
|
||||||
|
|
||||||
|
List *ddlJobs = list_make1(ddlJob);
|
||||||
|
|
||||||
|
return ddlJobs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GetExplicitStatisticsCommandList returns the list of DDL commands to create
|
* GetExplicitStatisticsCommandList returns the list of DDL commands to create
|
||||||
|
|
|
@ -27,6 +27,7 @@ static void AppendAlterStatisticsSchemaStmt(StringInfo buf, AlterObjectSchemaStm
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_13
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
static void AppendAlterStatisticsStmt(StringInfo buf, AlterStatsStmt *stmt);
|
static void AppendAlterStatisticsStmt(StringInfo buf, AlterStatsStmt *stmt);
|
||||||
#endif
|
#endif
|
||||||
|
static void AppendAlterStatisticsOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt);
|
||||||
static void AppendStatisticsName(StringInfo buf, CreateStatsStmt *stmt);
|
static void AppendStatisticsName(StringInfo buf, CreateStatsStmt *stmt);
|
||||||
static void AppendStatTypes(StringInfo buf, CreateStatsStmt *stmt);
|
static void AppendStatTypes(StringInfo buf, CreateStatsStmt *stmt);
|
||||||
static void AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt);
|
static void AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt);
|
||||||
|
@ -102,6 +103,19 @@ DeparseAlterStatisticsStmt(Node *node)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
char *
|
||||||
|
DeparseAlterStatisticsOwnerStmt(Node *node)
|
||||||
|
{
|
||||||
|
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
|
||||||
|
Assert(stmt->objectType == OBJECT_STATISTIC_EXT);
|
||||||
|
|
||||||
|
StringInfoData str;
|
||||||
|
initStringInfo(&str);
|
||||||
|
|
||||||
|
AppendAlterStatisticsOwnerStmt(&str, stmt);
|
||||||
|
|
||||||
|
return str.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -170,6 +184,14 @@ AppendAlterStatisticsStmt(StringInfo buf, AlterStatsStmt *stmt)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
static void
|
||||||
|
AppendAlterStatisticsOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
|
||||||
|
{
|
||||||
|
List *names = (List *) stmt->object;
|
||||||
|
appendStringInfo(buf, "ALTER STATISTICS %s OWNER TO %s;", NameListToQuotedString(
|
||||||
|
names),
|
||||||
|
RoleSpecString(stmt->newowner, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -102,7 +102,7 @@ QualifyAlterStatisticsRenameStmt(Node *node)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QualifyAlterStatisticsSchemaStmt qualifies RenameStmt's with schema name for
|
* QualifyAlterStatisticsSchemaStmt qualifies AlterObjectSchemaStmt's with schema name for
|
||||||
* ALTER STATISTICS RENAME statements.
|
* ALTER STATISTICS RENAME statements.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -125,7 +125,7 @@ QualifyAlterStatisticsSchemaStmt(Node *node)
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_13
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QualifyAlterStatisticsStmt qualifies AlterObjectSchemaStmt's with schema name for
|
* QualifyAlterStatisticsStmt qualifies AlterStatsStmt's with schema name for
|
||||||
* ALTER STATISTICS .. SET STATISTICS statements.
|
* ALTER STATISTICS .. SET STATISTICS statements.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -144,3 +144,23 @@ QualifyAlterStatisticsStmt(Node *node)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* QualifyAlterStatisticsStmt qualifies AlterOwnerStmt's with schema name for
|
||||||
|
* ALTER STATISTICS .. OWNER TO statements.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
QualifyAlterStatisticsOwnerStmt(Node *node)
|
||||||
|
{
|
||||||
|
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
|
||||||
|
Assert(stmt->objectType == OBJECT_STATISTIC_EXT);
|
||||||
|
|
||||||
|
List *nameList = (List *) stmt->object;
|
||||||
|
if (list_length(nameList) == 1)
|
||||||
|
{
|
||||||
|
RangeVar *stat = makeRangeVarFromNameList(nameList);
|
||||||
|
Oid schemaOid = RangeVarGetCreationNamespace(stat);
|
||||||
|
stat->schemaname = get_namespace_name(schemaOid);
|
||||||
|
stmt->object = (Node *) MakeNameListFromRangeVar(stat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -213,6 +213,23 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case T_AlterOwnerStmt:
|
||||||
|
{
|
||||||
|
AlterOwnerStmt *alterOwnerStmt = castNode(AlterOwnerStmt, parseTree);
|
||||||
|
|
||||||
|
/* we currently extend names in alter owner statements only for statistics */
|
||||||
|
Assert(alterOwnerStmt->objectType == OBJECT_STATISTIC_EXT);
|
||||||
|
|
||||||
|
RangeVar *stat = makeRangeVarFromNameList((List *) alterOwnerStmt->object);
|
||||||
|
|
||||||
|
AppendShardIdToName(&stat->relname, shardId);
|
||||||
|
SetSchemaNameIfNotExist(&stat->schemaname, schemaName);
|
||||||
|
|
||||||
|
alterOwnerStmt->object = (Node *) MakeNameListFromRangeVar(stat);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case T_ClusterStmt:
|
case T_ClusterStmt:
|
||||||
{
|
{
|
||||||
ClusterStmt *clusterStmt = (ClusterStmt *) parseTree;
|
ClusterStmt *clusterStmt = (ClusterStmt *) parseTree;
|
||||||
|
|
|
@ -287,6 +287,7 @@ extern List * PreprocessAlterStatisticsSchemaStmt(Node *node, const char *queryS
|
||||||
extern List * PostprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString);
|
extern List * PostprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString);
|
||||||
extern ObjectAddress AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk);
|
extern ObjectAddress AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk);
|
||||||
extern List * PreprocessAlterStatisticsStmt(Node *node, const char *queryString);
|
extern List * PreprocessAlterStatisticsStmt(Node *node, const char *queryString);
|
||||||
|
extern List * PreprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString);
|
||||||
extern List * GetExplicitStatisticsCommandList(Oid relationId);
|
extern List * GetExplicitStatisticsCommandList(Oid relationId);
|
||||||
extern List * GetExplicitStatisticsSchemaIdList(Oid relationId);
|
extern List * GetExplicitStatisticsSchemaIdList(Oid relationId);
|
||||||
|
|
||||||
|
|
|
@ -61,12 +61,14 @@ extern char * DeparseDropStatisticsStmt(List *nameList, bool ifExists);
|
||||||
extern char * DeparseAlterStatisticsRenameStmt(Node *node);
|
extern char * DeparseAlterStatisticsRenameStmt(Node *node);
|
||||||
extern char * DeparseAlterStatisticsSchemaStmt(Node *node);
|
extern char * DeparseAlterStatisticsSchemaStmt(Node *node);
|
||||||
extern char * DeparseAlterStatisticsStmt(Node *node);
|
extern char * DeparseAlterStatisticsStmt(Node *node);
|
||||||
|
extern char * DeparseAlterStatisticsOwnerStmt(Node *node);
|
||||||
|
|
||||||
extern void QualifyCreateStatisticsStmt(Node *node);
|
extern void QualifyCreateStatisticsStmt(Node *node);
|
||||||
extern void QualifyDropStatisticsStmt(Node *node);
|
extern void QualifyDropStatisticsStmt(Node *node);
|
||||||
extern void QualifyAlterStatisticsRenameStmt(Node *node);
|
extern void QualifyAlterStatisticsRenameStmt(Node *node);
|
||||||
extern void QualifyAlterStatisticsSchemaStmt(Node *node);
|
extern void QualifyAlterStatisticsSchemaStmt(Node *node);
|
||||||
extern void QualifyAlterStatisticsStmt(Node *node);
|
extern void QualifyAlterStatisticsStmt(Node *node);
|
||||||
|
extern void QualifyAlterStatisticsOwnerStmt(Node *node);
|
||||||
|
|
||||||
/* forward declarations for deparse_type_stmts.c */
|
/* forward declarations for deparse_type_stmts.c */
|
||||||
extern char * DeparseCompositeTypeStmt(Node *stmt);
|
extern char * DeparseCompositeTypeStmt(Node *stmt);
|
||||||
|
|
Loading…
Reference in New Issue