(rows rowScanner)
| 132 | } |
| 133 | |
| 134 | func scanProtectionEvents(rows rowScanner) ([]ProtectionEvent, error) { |
| 135 | var out []ProtectionEvent |
| 136 | for rows.Next() { |
| 137 | var ev ProtectionEvent |
| 138 | var subjectAddr, detector *string |
| 139 | var categories, spans, raw []byte |
| 140 | if err := rows.Scan( |
| 141 | &ev.ID, &ev.MessageID, &ev.AgentID, &ev.Direction, &ev.Source, &ev.Reason, &ev.Action, |
| 142 | &subjectAddr, &detector, &ev.Score, &categories, &spans, &raw, &ev.CreatedAt, |
| 143 | ); err != nil { |
| 144 | return nil, fmt.Errorf("scan screening event: %w", err) |
| 145 | } |
| 146 | if subjectAddr != nil { |
| 147 | ev.SubjectAddr = *subjectAddr |
| 148 | } |
| 149 | if detector != nil { |
| 150 | ev.Detector = *detector |
| 151 | } |
| 152 | ev.Categories = jsonOrNil(categories) |
| 153 | ev.Spans = jsonOrNil(spans) |
| 154 | ev.Raw = jsonOrNil(raw) |
| 155 | out = append(out, ev) |
| 156 | } |
| 157 | if err := rows.Err(); err != nil { |
| 158 | return nil, fmt.Errorf("iterate screening events: %w", err) |
| 159 | } |
| 160 | return out, nil |
| 161 | } |
| 162 | |
| 163 | // nullString returns nil for empty strings so they persist as SQL NULL. |
| 164 | func nullString(s string) any { |
no test coverage detected