Make DeferErrorIfCircularDependencyExists work for each object

pull/6052/head
Ahmet Gedemenli 2022-07-06 16:22:17 +03:00
parent eb3e5ee227
commit 6c693adf0d
2 changed files with 31 additions and 2 deletions

View File

@ -201,14 +201,40 @@ ErrorIfCircularDependencyExists(const ObjectAddress *objectAddress)
/*
* DeferErrorIfCircularDependencyExists checks whether given object has
* circular dependency with itself via existing objects of pg_dist_object.
* DeferErrorIfCircularDependencyExists is a wrapper function around
* DeferErrorIfCircularDependencyExistsOnObject, which calls that function for
* each dependency of the given object.
*/
DeferredErrorMessage *
DeferErrorIfCircularDependencyExists(const ObjectAddress *objectAddress)
{
List *dependencies = GetAllSupportedDependenciesForObject(objectAddress);
ObjectAddress *dependency = NULL;
foreach_ptr(dependency, dependencies)
{
DeferredErrorMessage *deferredError =
DeferErrorIfCircularDependencyExistsOnObject(dependency);
if (deferredError != NULL)
{
return deferredError;
}
}
return NULL;
}
/*
* DeferErrorIfCircularDependencyExistsOnObject checks whether given object has
* circular dependency with itself via existing objects of pg_dist_object.
*/
DeferredErrorMessage *
DeferErrorIfCircularDependencyExistsOnObject(const ObjectAddress *objectAddress)
{
List *dependencies = GetAllSupportedDependenciesForObject(objectAddress);
ObjectAddress *dependency = NULL;
foreach_ptr(dependency, dependencies)
{

View File

@ -262,6 +262,9 @@ extern void EnsureAllObjectDependenciesExistOnAllNodes(const List *targets);
extern DeferredErrorMessage * DeferErrorIfCircularDependencyExists(const
ObjectAddress *
objectAddress);
extern DeferredErrorMessage * DeferErrorIfCircularDependencyExistsOnObject(const
ObjectAddress *
objectAddress);
extern List * GetDistributableDependenciesForObject(const ObjectAddress *target);
extern List * GetAllDependencyCreateDDLCommands(const List *dependencies);
extern bool ShouldPropagate(void);