diff --git a/goextVersion.go b/goextVersion.go index 4380b67..b7f8743 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.383" +const GoextVersion = "0.0.384" -const GoextVersionTimestamp = "2024-02-09T15:17:51+0100" +const GoextVersionTimestamp = "2024-02-09T15:20:46+0100" diff --git a/sq/scanner.go b/sq/scanner.go index fd03ab7..9380982 100644 --- a/sq/scanner.go +++ b/sq/scanner.go @@ -103,6 +103,23 @@ func QuerySingle[TData any](ctx context.Context, q Queryable, sql string, pp PP, return data, nil } +func QuerySingleOpt[TData any](ctx context.Context, q Queryable, sqlstr string, pp PP, mode StructScanMode, sec StructScanSafety) (*TData, error) { + rows, err := q.Query(ctx, sqlstr, pp) + if err != nil { + return nil, err + } + + data, err := ScanSingle[TData](ctx, q, rows, mode, sec, true) + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + if err != nil { + return nil, err + } + + return &data, nil +} + func QueryAll[TData any](ctx context.Context, q Queryable, sql string, pp PP, mode StructScanMode, sec StructScanSafety) ([]TData, error) { rows, err := q.Query(ctx, sql, pp) if err != nil {