FilterRelationTuplesQuery - Filter relation tuples according to given filter
(tenantID string, filter *base.TupleFilter)
| 11 | |
| 12 | // FilterRelationTuplesQuery - Filter relation tuples according to given filter |
| 13 | func FilterRelationTuplesQuery(tenantID string, filter *base.TupleFilter) memdb.FilterFunc { |
| 14 | return func(tupleRaw interface{}) bool { |
| 15 | tuple, ok := tupleRaw.(storage.RelationTuple) |
| 16 | if !ok { |
| 17 | return true |
| 18 | } |
| 19 | switch { |
| 20 | case tuple.TenantID != tenantID: |
| 21 | return true |
| 22 | case filter.GetEntity().GetType() != "" && tuple.EntityType != filter.GetEntity().GetType(): |
| 23 | return true |
| 24 | case len(filter.GetEntity().GetIds()) > 0 && !slices.Contains(filter.GetEntity().GetIds(), tuple.EntityID): |
| 25 | return true |
| 26 | case filter.GetRelation() != "" && tuple.Relation != filter.GetRelation(): |
| 27 | return true |
| 28 | case filter.GetSubject().GetType() != "" && tuple.SubjectType != filter.GetSubject().GetType(): |
| 29 | return true |
| 30 | case len(filter.GetSubject().GetIds()) > 0 && !slices.Contains(filter.GetSubject().GetIds(), tuple.SubjectID): |
| 31 | return true |
| 32 | case filter.GetSubject().GetRelation() != "" && tuple.SubjectRelation != filter.GetSubject().GetRelation(): |
| 33 | return true |
| 34 | } |
| 35 | return false |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | // FilterAttributesQuery - Filter attributes according to given filter |
| 40 | func FilterAttributesQuery(tenantID string, filter *base.AttributeFilter) memdb.FilterFunc { |
no test coverage detected