mirror of https://github.com/citusdata/citus.git
Make DeferErrorIfCircularDependencyExists work for each object
parent
eb3e5ee227
commit
6c693adf0d
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue