MCPcopy
hub / github.com/dgraph-io/dgraph / applyFacetsTree

Function applyFacetsTree

worker/task.go:2291–2358  ·  view source on GitHub ↗

applyFacetsTree : we return error only when query has some problems. like Or has 3 arguments, argument facet val overflows integer. returns true if postingFacets can be included.

(postingFacets []*api.Facet, ftree *facetsTree)

Source from the content-addressed store, hash-verified

2289// like Or has 3 arguments, argument facet val overflows integer.
2290// returns true if postingFacets can be included.
2291func applyFacetsTree(postingFacets []*api.Facet, ftree *facetsTree) (bool, error) {
2292 if ftree == nil {
2293 return true, nil
2294 }
2295 if ftree.function != nil {
2296 var fc *api.Facet
2297 for _, fci := range postingFacets {
2298 if fci.Key == ftree.function.key {
2299 fc = fci
2300 break
2301 }
2302 }
2303 if fc == nil { // facet is not there
2304 return false, nil
2305 }
2306
2307 switch ftree.function.fnType {
2308 case compareAttrFn: // lt, gt, le, ge, eq
2309 fVal, err := facets.ValFor(fc)
2310 if err != nil {
2311 return false, err
2312 }
2313
2314 v, ok := ftree.function.typesToVal[fVal.Tid]
2315 if !ok {
2316 // Not found in map and hence convert it here.
2317 v, err = types.Convert(ftree.function.val, fVal.Tid)
2318 if err != nil {
2319 // ignore facet if not of appropriate type.
2320 return false, nil
2321 }
2322 }
2323
2324 return types.CompareVals(ftree.function.name, fVal, v), nil
2325
2326 case standardFn: // allofterms, anyofterms
2327 facetType, err := facets.TypeIDFor(fc)
2328 if err != nil {
2329 return false, err
2330 }
2331 if facetType != types.StringID {
2332 return false, nil
2333 }
2334 return filterOnStandardFn(ftree.function.name, fc.Tokens, ftree.function.tokens)
2335 }
2336 return false, errors.Errorf("Fn %s not supported in facets filtering.", ftree.function.name)
2337 }
2338
2339 res := make([]bool, 0, 2) // We can have max two children for a node.
2340 for _, c := range ftree.children {
2341 r, err := applyFacetsTree(postingFacets, c)
2342 if err != nil {
2343 return false, err
2344 }
2345 res = append(res, r)
2346 }
2347
2348 // we have already checked for number of children in preprocessFilter

Callers 2

Calls 6

ValForFunction · 0.92
ConvertFunction · 0.92
CompareValsFunction · 0.92
TypeIDForFunction · 0.92
filterOnStandardFnFunction · 0.85
ErrorfMethod · 0.45

Tested by

no test coverage detected