diff --git a/pkg/services/object/search/query/v1/keys.go b/pkg/services/object/search/query/v1/keys.go index 6cf5d386..e39cbcfc 100644 --- a/pkg/services/object/search/query/v1/keys.go +++ b/pkg/services/object/search/query/v1/keys.go @@ -7,12 +7,14 @@ import ( // FIXME: this is a temporary solution for object fields filters -const keyChildrenField = "Object.Header.Split.Children" +const keyParentField = "Object.Header.Split.WithChildren" + +const keyNoChildrenField = "Object.Header.Split.NoChildren" const keyParentIDField = "Object.Header.Split.Parent" func NewEmptyChildrenFilter() *Filter { - return NewFilterEqual(keyChildrenField, "") + return NewFilterEqual(keyNoChildrenField, "") } func NewParentIDFilter(par *object.ID) *Filter { @@ -25,3 +27,10 @@ func NewRightChildQuery(par *object.ID) query.Query { NewEmptyChildrenFilter(), ) } + +func NewLinkingQuery(par *object.ID) query.Query { + return New( + NewParentIDFilter(par), + NewFilterEqual(keyParentField, ""), + ) +} diff --git a/pkg/services/object/search/query/v1/v1.go b/pkg/services/object/search/query/v1/v1.go index 742d4652..3066d8f9 100644 --- a/pkg/services/object/search/query/v1/v1.go +++ b/pkg/services/object/search/query/v1/v1.go @@ -97,10 +97,12 @@ func headerEqual(obj *object.Object, key, value string) bool { return value == cidValue(obj.GetContainerID()) case objectSDK.HdrSysNameOwnerID: return value == ownerIDValue(obj.GetOwnerID()) - case keyChildrenField: + case keyNoChildrenField: return len(obj.GetChildren()) == 0 case keyParentIDField: return idValue(obj.GetParent().GetID()) == value + case keyParentField: + return len(obj.GetChildren()) > 0 // TODO: add other headers } }