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 NoticeIfAutoConvertingLocalTables(bool autoConverted);
static void NoticeRelationIsAlreadyAddedToMetadata(Oid relationId); static void NoticeRelationIsAlreadyAddedToMetadata(Oid relationId);
static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted); static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted);
static void UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted);
static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId); static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId);
static uint64 ConvertLocalTableToShard(Oid relationId); static uint64 ConvertLocalTableToShard(Oid relationId);
static void RenameRelationToShardRelation(Oid shellRelationId, uint64 shardId); 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 * already added to metadata, we should mark this one and connected relations
* as auto-converted = false. * as auto-converted = false.
*/ */
UpdateAutoConvertedForConnectedRelations(relationId, autoConverted); UpdateAutoConvertedForConnectedRelations(list_make1_oid(relationId),
autoConverted);
NoticeRelationIsAlreadyAddedToMetadata(relationId); NoticeRelationIsAlreadyAddedToMetadata(relationId);
@ -621,19 +621,26 @@ GetCascadeTypeForCitusLocalTables(bool autoConverted)
/* /*
* UpdateAutoConvertedForConnectedRelations updates the autoConverted field on * 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. * 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 * 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. * graph already includes them, as they have the same (inherited) fkeys as their parents.
*/ */
static void void
UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted) UpdateAutoConvertedForConnectedRelations(List *relationIds, bool autoConverted)
{ {
InvalidateForeignKeyGraph(); 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); relationIdList = SortList(relationIdList, CompareOids);
Oid relid = InvalidOid;
foreach_oid(relid, relationIdList) foreach_oid(relid, relationIdList)
{ {
UpdatePgDistPartitionAutoConverted(relid, false); UpdatePgDistPartitionAutoConverted(relid, false);

View File

@ -72,8 +72,6 @@ static bool AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(
AlterTableStmt *alterTableStatement); AlterTableStmt *alterTableStatement);
static bool ShouldMarkConnectedRelationsNotAutoConverted(Oid leftRelationId, static bool ShouldMarkConnectedRelationsNotAutoConverted(Oid leftRelationId,
Oid rightRelationId); Oid rightRelationId);
static void MarkConnectedRelationsNotAutoConverted(Oid leftRelationId,
Oid rightRelationId);
static bool RelationIdListContainsCitusTableType(List *relationIdList, static bool RelationIdListContainsCitusTableType(List *relationIdList,
CitusTableType citusTableType); CitusTableType citusTableType);
static bool RelationIdListContainsPostgresTable(List *relationIdList); static bool RelationIdListContainsPostgresTable(List *relationIdList);
@ -871,8 +869,8 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand,
if (ShouldMarkConnectedRelationsNotAutoConverted(leftRelationId, if (ShouldMarkConnectedRelationsNotAutoConverted(leftRelationId,
rightRelationId)) rightRelationId))
{ {
MarkConnectedRelationsNotAutoConverted(leftRelationId, List *relationList = list_make2_oid(leftRelationId, rightRelationId);
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 * RelationIdListContainsCitusTableType returns true if given relationIdList
* contains a citus table with given type. * 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, extern void CreateCitusLocalTablePartitionOf(CreateStmt *createStatement,
Oid relationId, Oid parentRelationId); Oid relationId, Oid parentRelationId);
extern void UpdateAutoConvertedForConnectedRelations(List *relationId, bool
autoConverted);
#endif /*CITUS_COMMANDS_H */ #endif /*CITUS_COMMANDS_H */