sql.QueryDatat(): minor improvements, better tests

This commit is contained in:
Helmut Merz 2023-08-16 15:10:42 +02:00
parent 0bfd2a6ca1
commit 55c3444911
2 changed files with 10 additions and 9 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[T any] interface{ Scan(*Rows) (T, error) } type scanner[T any] interface{ Scan(*Rows) (T, error) }
type Storage struct { type Storage struct {
*sql.DB *sql.DB
@ -28,10 +28,10 @@ func Open(cfg *Cfg) *Storage {
return &Storage{db} return &Storage{db}
} }
func QueryData[T Scanner[T]](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
var rec T
proc := func(r *sql.Rows) error { proc := func(r *sql.Rows) error {
var rec T
rec, err := rec.Scan(r) rec, err := rec.Scan(r)
data = append(data, rec) data = append(data, rec)
return err return err

View file

@ -41,12 +41,12 @@ func (g greet) Scan(rows *sql.Rows) (greet, error) {
} }
func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
//fmt.Println(cfg.Connstr)
db.Exec(insert) db.Exec(insert)
//data := sql.QueryCol[string](db, query, 2) //data := sql.QueryCol[string](db, query, 2)
data := sql.QueryData[greet](db, query, 2) data := sql.QueryData[greet](db, query)
t.AssertEqual(len(data), 1) t.AssertEqual(len(data), 2)
t.AssertEqual(data[0].label, "Good Afternoon") t.AssertEqual(data[0].label, "Hello World")
t.AssertEqual(data[1].label, "Good Afternoon")
} }
func resetSqlite(db *sql.Storage) { func resetSqlite(db *sql.Storage) {
@ -67,8 +67,9 @@ var insert = `insert into test (label) values
('Hello World'), ('Hello World'),
('Good Afternoon')` ('Good Afternoon')`
var query = `select id, label from test var query = `select id, label from test `
where id = $1`
//where id = $1`
// database-specific SQL statements // database-specific SQL statements