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
|
* DeferErrorIfCircularDependencyExists is a wrapper function around
|
||||||
* circular dependency with itself via existing objects of pg_dist_object.
|
* DeferErrorIfCircularDependencyExistsOnObject, which calls that function for
|
||||||
|
* each dependency of the given object.
|
||||||
*/
|
*/
|
||||||
DeferredErrorMessage *
|
DeferredErrorMessage *
|
||||||
DeferErrorIfCircularDependencyExists(const ObjectAddress *objectAddress)
|
DeferErrorIfCircularDependencyExists(const ObjectAddress *objectAddress)
|
||||||
{
|
{
|
||||||
List *dependencies = GetAllSupportedDependenciesForObject(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;
|
ObjectAddress *dependency = NULL;
|
||||||
foreach_ptr(dependency, dependencies)
|
foreach_ptr(dependency, dependencies)
|
||||||
{
|
{
|
||||||
|
|
|
@ -262,6 +262,9 @@ extern void EnsureAllObjectDependenciesExistOnAllNodes(const List *targets);
|
||||||
extern DeferredErrorMessage * DeferErrorIfCircularDependencyExists(const
|
extern DeferredErrorMessage * DeferErrorIfCircularDependencyExists(const
|
||||||
ObjectAddress *
|
ObjectAddress *
|
||||||
objectAddress);
|
objectAddress);
|
||||||
|
extern DeferredErrorMessage * DeferErrorIfCircularDependencyExistsOnObject(const
|
||||||
|
ObjectAddress *
|
||||||
|
objectAddress);
|
||||||
extern List * GetDistributableDependenciesForObject(const ObjectAddress *target);
|
extern List * GetDistributableDependenciesForObject(const ObjectAddress *target);
|
||||||
extern List * GetAllDependencyCreateDDLCommands(const List *dependencies);
|
extern List * GetAllDependencyCreateDDLCommands(const List *dependencies);
|
||||||
extern bool ShouldPropagate(void);
|
extern bool ShouldPropagate(void);
|
||||||
|
|
Loading…
Reference in New Issue