GetQuerySpan returns a QuerySpan for a MongoDB shell statement. It classifies the statement type and populates PredicatePaths from predicate fields extracted by masking analysis.
(_ context.Context, _ base.GetQuerySpanContext, stmt base.Statement, _ string, _ string, _ bool)
| 16 | // It classifies the statement type and populates PredicatePaths from |
| 17 | // predicate fields extracted by masking analysis. |
| 18 | func GetQuerySpan(_ context.Context, _ base.GetQuerySpanContext, stmt base.Statement, _ string, _ string, _ bool) (*base.QuerySpan, error) { |
| 19 | queryType := GetQueryType(stmt.Text) |
| 20 | span := &base.QuerySpan{ |
| 21 | Type: queryType, |
| 22 | } |
| 23 | |
| 24 | analysis, err := AnalyzeMaskingStatement(stmt.Text) |
| 25 | if err != nil { |
| 26 | return span, err |
| 27 | } |
| 28 | if analysis == nil { |
| 29 | return span, nil |
| 30 | } |
| 31 | |
| 32 | span.MongoDBAnalysis = analysis |
| 33 | |
| 34 | if len(analysis.PredicateFields) > 0 { |
| 35 | span.PredicatePaths = make(map[string]*base.PathAST, len(analysis.PredicateFields)) |
| 36 | for _, field := range analysis.PredicateFields { |
| 37 | span.PredicatePaths[field] = dotPathToPathAST(field) |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | return span, nil |
| 42 | } |
| 43 | |
| 44 | // dotPathToPathAST converts a dot-delimited field path (e.g. "contact.phone") |
| 45 | // into a PathAST with ItemSelector nodes. |