fix type parameters for QueryData()

This commit is contained in:
Helmut Merz 2023-08-16 12:50:32 +02:00
parent 53f91b4875
commit 0bfd2a6ca1
2 changed files with 4 additions and 5 deletions

View file

@ -13,7 +13,7 @@ type Cfg struct {
type Rows = sql.Rows type Rows = sql.Rows
type rowsProc = func(*sql.Rows) error type rowsProc = func(*sql.Rows) error
type Scanner interface{ Scan(*Rows) (Scanner, error) } type Scanner[T any] interface{ Scan(*Rows) (T, error) }
type Storage struct { type Storage struct {
*sql.DB *sql.DB
@ -28,12 +28,11 @@ func Open(cfg *Cfg) *Storage {
return &Storage{db} return &Storage{db}
} }
func QueryData[T Scanner](db *Storage, q string, args ...interface{}) []T { func QueryData[T Scanner[T]](db *Storage, q string, args ...interface{}) []T {
var data []T var data []T
proc := func(r *sql.Rows) error { proc := func(r *sql.Rows) error {
var rec T var rec T
r1, err := rec.Scan(r) rec, err := rec.Scan(r)
rec = r1.(T)
data = append(data, rec) data = append(data, rec)
return err return err
} }

View file

@ -35,7 +35,7 @@ type greet struct {
label string label string
} }
func (g greet) Scan(rows *sql.Rows) (sql.Scanner, error) { func (g greet) Scan(rows *sql.Rows) (greet, error) {
err := rows.Scan(&g.id, &g.label) err := rows.Scan(&g.id, &g.label)
return g, err return g, err
} }