Remove MarkConnectedRelationsNotAutoConverted

talha_tes1
Ahmet Gedemenli 2021-10-27 13:53:38 +03:00
parent 1f6e27f654
commit c08f1609d9
3 changed files with 18 additions and 33 deletions

View File

@ -55,7 +55,6 @@ static void ErrorIfUnsupportedCitusLocalColumnDefinition(Relation relation);
static void NoticeIfAutoConvertingLocalTables(bool autoConverted);
static void NoticeRelationIsAlreadyAddedToMetadata(Oid relationId);
static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted);
static void UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted);
static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId);
static uint64 ConvertLocalTableToShard(Oid relationId);
static void RenameRelationToShardRelation(Oid shellRelationId, uint64 shardId);
@ -211,7 +210,8 @@ CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys, bool autoConve
* already added to metadata, we should mark this one and connected relations
* as auto-converted = false.
*/
UpdateAutoConvertedForConnectedRelations(relationId, autoConverted);
UpdateAutoConvertedForConnectedRelations(list_make1_oid(relationId),
autoConverted);
NoticeRelationIsAlreadyAddedToMetadata(relationId);
@ -621,19 +621,26 @@ GetCascadeTypeForCitusLocalTables(bool autoConverted)
/*
* UpdateAutoConvertedForConnectedRelations updates the autoConverted field on
* pg_dist_partition for the foreign key connected relations of the given relation.
* pg_dist_partition for the foreign key connected relations of the given relations.
* Sets it to given autoConverted value for all of the connected relations.
* We don't need to update partition relations separately, since the foreign key
* graph already includes them, as they have the same (inherited) fkeys as their parents.
*/
static void
UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted)
void
UpdateAutoConvertedForConnectedRelations(List *relationIds, bool autoConverted)
{
InvalidateForeignKeyGraph();
List *relationIdList = GetForeignKeyConnectedRelationIdList(relationId);
List *relationIdList = NIL;
Oid relid = InvalidOid;
foreach_oid(relid, relationIds)
{
List *connectedRelations = GetForeignKeyConnectedRelationIdList(relid);
relationIdList = list_concat_unique_oid(relationIdList, connectedRelations);
}
relationIdList = SortList(relationIdList, CompareOids);
Oid relid = InvalidOid;
foreach_oid(relid, relationIdList)
{
UpdatePgDistPartitionAutoConverted(relid, false);

View File

@ -72,8 +72,6 @@ static bool AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(
AlterTableStmt *alterTableStatement);
static bool ShouldMarkConnectedRelationsNotAutoConverted(Oid leftRelationId,
Oid rightRelationId);
static void MarkConnectedRelationsNotAutoConverted(Oid leftRelationId,
Oid rightRelationId);
static bool RelationIdListContainsCitusTableType(List *relationIdList,
CitusTableType citusTableType);
static bool RelationIdListContainsPostgresTable(List *relationIdList);
@ -871,8 +869,8 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand,
if (ShouldMarkConnectedRelationsNotAutoConverted(leftRelationId,
rightRelationId))
{
MarkConnectedRelationsNotAutoConverted(leftRelationId,
rightRelationId);
List *relationList = list_make2_oid(leftRelationId, rightRelationId);
UpdateAutoConvertedForConnectedRelations(relationList, false);
}
/*
@ -1212,28 +1210,6 @@ ShouldMarkConnectedRelationsNotAutoConverted(Oid leftRelationId, Oid rightRelati
}
/*
* MarkConnectedRelationsNotAutoConverted takes two relations.
* Marks both of them as not-auto-converted, as well as other connected relations.
*/
static void
MarkConnectedRelationsNotAutoConverted(Oid leftRelationId, Oid rightRelationId)
{
InvalidateForeignKeyGraph();
List *leftConnectedRelIds = GetForeignKeyConnectedRelationIdList(leftRelationId);
List *rightConnectedRelIds = GetForeignKeyConnectedRelationIdList(rightRelationId);
List *allConnectedRelations = list_concat_unique_oid(leftConnectedRelIds,
rightConnectedRelIds);
allConnectedRelations = SortList(allConnectedRelations, CompareOids);
Oid relationId = InvalidOid;
foreach_oid(relationId, allConnectedRelations)
{
UpdatePgDistPartitionAutoConverted(relationId, false);
}
}
/*
* RelationIdListContainsCitusTableType returns true if given relationIdList
* contains a citus table with given type.

View File

@ -545,5 +545,7 @@ extern void PostprocessVariableSetStmt(VariableSetStmt *setStmt, const char *set
extern void CreateCitusLocalTablePartitionOf(CreateStmt *createStatement,
Oid relationId, Oid parentRelationId);
extern void UpdateAutoConvertedForConnectedRelations(List *relationId, bool
autoConverted);
#endif /*CITUS_COMMANDS_H */