(ctx context.Context, pf *parquet.File, rgs []parquet.RowGroup, rowNumbers []pq.RowNumber)
| 310 | } |
| 311 | |
| 312 | func rawToResults(ctx context.Context, pf *parquet.File, rgs []parquet.RowGroup, rowNumbers []pq.RowNumber) ([]*tempopb.TraceSearchMetadata, error) { |
| 313 | makeIter := makeIterFunc(ctx, rgs, pf) |
| 314 | |
| 315 | results := []*tempopb.TraceSearchMetadata{} |
| 316 | iter2 := pq.NewJoinIterator(DefinitionLevelTrace, []pq.Iterator{ |
| 317 | &rowNumberIterator{rowNumbers: rowNumbers}, |
| 318 | makeIter("TraceID", nil, "TraceID"), |
| 319 | makeIter("RootServiceName", nil, "RootServiceName"), |
| 320 | makeIter("RootSpanName", nil, "RootSpanName"), |
| 321 | makeIter("StartTimeUnixNano", nil, "StartTimeUnixNano"), |
| 322 | makeIter("DurationNano", nil, "DurationNano"), |
| 323 | }, nil) |
| 324 | defer iter2.Close() |
| 325 | |
| 326 | for { |
| 327 | match, err := iter2.Next() |
| 328 | if err != nil { |
| 329 | return nil, fmt.Errorf("rawToResults next failed: %w", err) |
| 330 | } |
| 331 | if match == nil { |
| 332 | break |
| 333 | } |
| 334 | |
| 335 | matchMap := match.ToMap() |
| 336 | result := &tempopb.TraceSearchMetadata{ |
| 337 | TraceID: util.TraceIDToHexString(matchMap["TraceID"][0].Bytes()), |
| 338 | RootServiceName: matchMap["RootServiceName"][0].String(), |
| 339 | RootTraceName: matchMap["RootSpanName"][0].String(), |
| 340 | StartTimeUnixNano: matchMap["StartTimeUnixNano"][0].Uint64(), |
| 341 | DurationMs: uint32(matchMap["DurationNano"][0].Int64() / int64(time.Millisecond)), |
| 342 | } |
| 343 | results = append(results, result) |
| 344 | } |
| 345 | |
| 346 | return results, nil |
| 347 | } |
| 348 | |
| 349 | func makeIterFunc(ctx context.Context, rgs []parquet.RowGroup, pf *parquet.File) func(name string, predicate pq.Predicate, selectAs string) pq.Iterator { |
| 350 | return func(name string, predicate pq.Predicate, selectAs string) pq.Iterator { |
no test coverage detected