MCPcopy
hub / github.com/grafana/tempo / createSpanIterators

Function createSpanIterators

tempodb/encoding/vparquet5/block_traceql_fetch.go:422–742  ·  view source on GitHub ↗
(
	makeIter, makeNilIter makeIterFn,
	needDriver bool,
	conditions []traceql.Condition,
	allConditions bool,
	selectAll bool,
	dedicatedColumns backend.DedicatedColumns,
	sampler traceql.Sampler,
)

Source from the content-addressed store, hash-verified

420}
421
422func createSpanIterators(
423 makeIter, makeNilIter makeIterFn,
424 needDriver bool,
425 conditions []traceql.Condition,
426 allConditions bool,
427 selectAll bool,
428 dedicatedColumns backend.DedicatedColumns,
429 sampler traceql.Sampler,
430) (driver parquetquery.Iterator, required, optional []parquetquery.Iterator, err error) {
431 var (
432 columnSelectAs = map[string]string{}
433 columnPredicates = map[string][]parquetquery.Predicate{}
434 genericConditions []traceql.Condition
435 columnMapping = dedicatedColumnsToColumnMapping(dedicatedColumns, backend.DedicatedColumnScopeSpan)
436 )
437
438 // todo: improve these methods. if addPredicate gets a nil predicate shouldn't it just wipe out the existing predicates instead of appending?
439 // nil predicate matches everything. what's the point of also evaluating a "real" predicate?
440 addPredicate := func(columnPath string, p parquetquery.Predicate) {
441 columnPredicates[columnPath] = append(columnPredicates[columnPath], p)
442 }
443
444 addNilPredicateIfNotAlready := func(path string) {
445 preds := columnPredicates[path]
446 foundOpNone := false
447
448 // check to see if there is a nil predicate and only add if it doesn't exist
449 for _, pred := range preds {
450 if pred == nil {
451 foundOpNone = true
452 break
453 }
454 }
455
456 if !foundOpNone {
457 addPredicate(path, nil)
458 columnSelectAs[path] = path
459 }
460 }
461
462 specialCase := func(cond traceql.Condition, columnPath string) (handled bool) {
463 // Operands that need special handling.
464 switch cond.Op {
465 case traceql.OpNone:
466 addPredicate(columnPath, nil) // No filtering
467 columnSelectAs[columnPath] = cond.Attribute.Name
468 return true
469 case traceql.OpExists:
470 addPredicate(columnPath, &parquetquery.SkipNilsPredicate{})
471 columnSelectAs[columnPath] = cond.Attribute.Name
472 return true
473 case traceql.OpNotExists:
474 optional = append(optional, makeIter(columnPath, parquetquery.NewNilValuePredicate(), cond.Attribute.Name))
475 return true
476 default:
477 return false
478 }
479 }

Callers 1

createFunction · 0.85

Calls 15

NewNilValuePredicateFunction · 0.92
ToStaticTypeMethod · 0.80
createBytesPredicateFunction · 0.70
createIntPredicateFunction · 0.70
newSamplingPredicateFunction · 0.70
createStringPredicateFunction · 0.70
createDurationPredicateFunction · 0.70
operandTypeFunction · 0.70

Tested by

no test coverage detected