move ScanAll/ScanSingle in sq package

This commit is contained in:
2022-12-11 03:14:42 +01:00
parent 26cd1533b4
commit 98b1e8bd80
9 changed files with 21 additions and 61 deletions

View File

@@ -1,9 +1,6 @@
package models
import (
"database/sql"
"errors"
"github.com/jmoiron/sqlx"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
"time"
)
@@ -22,48 +19,3 @@ func timeOptFromMilli(millis *int64) *time.Time {
}
return langext.Ptr(time.UnixMilli(*millis))
}
func scanSingle[TData any](rows *sqlx.Rows) (TData, error) {
if rows.Next() {
var data TData
err := rows.StructScan(&data)
if err != nil {
return *new(TData), err
}
if rows.Next() {
_ = rows.Close()
return *new(TData), errors.New("sql returned more than onw row")
}
err = rows.Close()
if err != nil {
return *new(TData), err
}
return data, nil
} else {
_ = rows.Close()
return *new(TData), sql.ErrNoRows
}
}
func scanAll[TData any](rows *sqlx.Rows) ([]TData, error) {
res := make([]TData, 0)
for rows.Next() {
var data TData
err := rows.StructScan(&data)
if err != nil {
return nil, err
}
res = append(res, data)
}
err := rows.Close()
if err != nil {
return nil, err
}
return res, nil
}
//TODO move scanAll+scanSingle into sq package (?)
//TODO als add convenient methods:
// - QueryScanSingle[T any](..)
// - QueryScanMulti[T any](..)