From 16252ad09a4170668693e946d056ae635719341b Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Thu, 1 Oct 2020 12:02:53 +0300 Subject: [PATCH] [#58] object/search: Add object-with-children filter Signed-off-by: Leonard Lyubich --- pkg/services/object/search/query/v1/keys.go | 13 +++++++++++-- pkg/services/object/search/query/v1/v1.go | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) 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 } }