ExpectOne can be used to convert a ':many:' query into a ':one' query. To reduce the quantity of SQL queries, a :many with a filter is used. These filters sometimes are expected to return just 1 row. A :many query will never return a sql.ErrNoRows, but a :one does. This function will correct the er
(ret []T, err error)
| 26 | // A :many query will never return a sql.ErrNoRows, but a :one does. |
| 27 | // This function will correct the error for the empty set. |
| 28 | func ExpectOne[T any](ret []T, err error) (T, error) { |
| 29 | var empty T |
| 30 | if err != nil { |
| 31 | return empty, err |
| 32 | } |
| 33 | |
| 34 | if len(ret) == 0 { |
| 35 | return empty, sql.ErrNoRows |
| 36 | } |
| 37 | |
| 38 | if len(ret) > 1 { |
| 39 | return empty, xerrors.Errorf("too many rows returned, expected 1") |
| 40 | } |
| 41 | |
| 42 | return ret[0], nil |
| 43 | } |
| 44 | |
| 45 | // customQuerier encompasses all non-generated queries. |
| 46 | // It provides a flexible way to write queries for cases |