storage: Query method and QueryData function
This commit is contained in:
parent
d7096500ce
commit
d86ab50a41
2 changed files with 40 additions and 1 deletions
|
@ -10,6 +10,8 @@ type Cfg struct {
|
||||||
Driver, Connstr string
|
Driver, Connstr string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type rowsProc = func(*sql.Rows) error
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
*sql.DB
|
*sql.DB
|
||||||
}
|
}
|
||||||
|
@ -23,8 +25,42 @@ func Open(cfg *Cfg) *Storage {
|
||||||
return &Storage{db}
|
return &Storage{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func QueryData[T any](db *Storage, q string, args ...interface{}) []T {
|
||||||
|
var data []T
|
||||||
|
proc := func(r *sql.Rows) error {
|
||||||
|
var rec T
|
||||||
|
err := r.Scan(&rec)
|
||||||
|
data = append(data, rec)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
db.Query(proc, q, args...)
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *Storage) Query(process rowsProc, q string, args ...interface{}) error {
|
||||||
|
info := "sql.Storage.Query"
|
||||||
|
//log.Debug().Str("query", q).Msg(info)
|
||||||
|
logErr := func(err error) { log.Error(err).Str("query", q).Msg(info) }
|
||||||
|
rows, err := db.DB.Query(q, args...)
|
||||||
|
if err != nil {
|
||||||
|
logErr(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
if err := process(rows); err != nil {
|
||||||
|
logErr(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
logErr(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (db *Storage) Exec(q string, args ...interface{}) (int64, error) {
|
func (db *Storage) Exec(q string, args ...interface{}) (int64, error) {
|
||||||
info := "sql.Exec"
|
info := "sql.Storage.Exec"
|
||||||
//log.Debug().Str("query", q).Msg(info)
|
//log.Debug().Str("query", q).Msg(info)
|
||||||
res, err := db.DB.Exec(q, args...)
|
res, err := db.DB.Exec(q, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -33,6 +33,9 @@ func DoTests(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
||||||
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)
|
//fmt.Println(cfg.Connstr)
|
||||||
db.Exec(insert)
|
db.Exec(insert)
|
||||||
|
data := sql.QueryData[string](db, query, 2)
|
||||||
|
t.AssertEqual(len(data), 1)
|
||||||
|
t.AssertEqual(data[0], "Good Afternoon")
|
||||||
}
|
}
|
||||||
|
|
||||||
func resetSqlite(db *sql.Storage) {
|
func resetSqlite(db *sql.Storage) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue