( ctx context.Context, startNs, endNs uint64, key *telemetrytypes.TelemetryFieldKey, operator qbtypes.FilterOperator, value any, sb *sqlbuilder.SelectBuilder, )
| 21 | } |
| 22 | |
| 23 | func (c *conditionBuilder) conditionFor( |
| 24 | ctx context.Context, |
| 25 | startNs, endNs uint64, |
| 26 | key *telemetrytypes.TelemetryFieldKey, |
| 27 | operator qbtypes.FilterOperator, |
| 28 | value any, |
| 29 | sb *sqlbuilder.SelectBuilder, |
| 30 | ) (string, error) { |
| 31 | columns, err := c.fm.ColumnFor(ctx, startNs, endNs, key) |
| 32 | if err != nil { |
| 33 | return "", err |
| 34 | } |
| 35 | |
| 36 | if operator.IsStringSearchOperator() { |
| 37 | value = querybuilder.FormatValueForContains(value) |
| 38 | } |
| 39 | |
| 40 | fieldExpression, err := c.fm.FieldFor(ctx, startNs, endNs, key) |
| 41 | if err != nil { |
| 42 | return "", err |
| 43 | } |
| 44 | |
| 45 | fieldExpression, value = querybuilder.DataTypeCollisionHandledFieldName(key, value, fieldExpression, operator) |
| 46 | |
| 47 | switch operator { |
| 48 | case qbtypes.FilterOperatorEqual: |
| 49 | return sb.E(fieldExpression, value), nil |
| 50 | case qbtypes.FilterOperatorNotEqual: |
| 51 | return sb.NE(fieldExpression, value), nil |
| 52 | case qbtypes.FilterOperatorGreaterThan: |
| 53 | return sb.G(fieldExpression, value), nil |
| 54 | case qbtypes.FilterOperatorGreaterThanOrEq: |
| 55 | return sb.GE(fieldExpression, value), nil |
| 56 | case qbtypes.FilterOperatorLessThan: |
| 57 | return sb.LT(fieldExpression, value), nil |
| 58 | case qbtypes.FilterOperatorLessThanOrEq: |
| 59 | return sb.LE(fieldExpression, value), nil |
| 60 | case qbtypes.FilterOperatorLike: |
| 61 | return sb.Like(fieldExpression, value), nil |
| 62 | case qbtypes.FilterOperatorNotLike: |
| 63 | return sb.NotLike(fieldExpression, value), nil |
| 64 | case qbtypes.FilterOperatorILike: |
| 65 | return sb.ILike(fieldExpression, value), nil |
| 66 | case qbtypes.FilterOperatorNotILike: |
| 67 | return sb.NotILike(fieldExpression, value), nil |
| 68 | case qbtypes.FilterOperatorContains: |
| 69 | return sb.ILike(fieldExpression, fmt.Sprintf("%%%s%%", value)), nil |
| 70 | case qbtypes.FilterOperatorNotContains: |
| 71 | return sb.NotILike(fieldExpression, fmt.Sprintf("%%%s%%", value)), nil |
| 72 | case qbtypes.FilterOperatorRegexp: |
| 73 | return fmt.Sprintf(`match(%s, %s)`, sqlbuilder.Escape(fieldExpression), sb.Var(value)), nil |
| 74 | case qbtypes.FilterOperatorNotRegexp: |
| 75 | return fmt.Sprintf(`NOT match(%s, %s)`, sqlbuilder.Escape(fieldExpression), sb.Var(value)), nil |
| 76 | case qbtypes.FilterOperatorBetween: |
| 77 | values, ok := value.([]any) |
| 78 | if !ok { |
| 79 | return "", qbtypes.ErrBetweenValues |
| 80 | } |
no test coverage detected