Skip to content

Commit

Permalink
feat(db): update reader
Browse files Browse the repository at this point in the history
  • Loading branch information
ArielHAlba committed Aug 17, 2022
1 parent 0debfd2 commit 61416e2
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
23 changes: 23 additions & 0 deletions agerr/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package agerr

import "github.com/agflow/tools/log"

// CallAndLog calls function which may return error and logs it.
// The intention of this function is to be used with `go` and `defer` clauses.
func CallAndLog(f func() error) {
Log(f())
}

// Log logs error unless nil
func Log(err error) {
if err != nil {
log.Errorf("unhandled error %+v", err)
}
}

// Assert panics and breaks the program unless err is nil
func Assert(err error) {
if err != nil {
log.Panic(err)
}
}
5 changes: 5 additions & 0 deletions log/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,8 @@ func Fatalf(format string, v ...interface{}) {
func Fatal(v ...interface{}) {
log.Fatal(v...)
}

// Panic logs in error level with a posterior Panic()
func Panic(v ...interface{}) {
log.Panic(v...)
}
9 changes: 8 additions & 1 deletion sql/db/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,20 @@ type Client struct {
type Service interface {
Select(interface{}, string, ...interface{}) error
Close() error
Exec(string, ...interface{}) error
}

// Select selects from `client` using the `query` and `args`
// Select selects from `client` using the `query` and `args` and set the result on `dest`
func (c *Client) Select(dest interface{}, query string, args ...interface{}) error {
return Select(c.DB, dest, query, args...)
}

// Exec executes from `client` using the `query` and `args`
func (c *Client) Exec(query string, args ...interface{}) error {
_, err := c.DB.Exec(query, args...)
return err
}

// New return a new db.Client
func New(url string) (*Client, error) {
db, err := sql.Open("postgres", url)
Expand Down
21 changes: 21 additions & 0 deletions sql/query/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/pkg/errors"

"github.com/agflow/tools/agerr"
"github.com/agflow/tools/log"
)

Expand Down Expand Up @@ -76,3 +77,23 @@ func MustLoad(queriesFS embed.FS, query interface{}) {
mustReadFiles(r.Name(), queriesFS, query)
}
}

// MustLoadSQLFiles queries loads queries that are located on `dir`
func MustLoadSQLFiles(dir string, queriesFS embed.FS, dest interface{}) {
v := reflect.Indirect(reflect.ValueOf(dest))
for i := 0; i < v.NumField(); i++ {
sField := v.Type().Field(i)
vField := v.FieldByName(sField.Name)
setFile(dir+sField.Tag.Get("sql"), queriesFS, vField)
}
}

func setFile(dir string, queriesFS embed.FS, v reflect.Value) {
if v.Kind() == reflect.Struct {
MustLoadSQLFiles(dir+"/", queriesFS, v.Addr().Interface())
return
}
file, err := queriesFS.ReadFile(dir + ".sql")
agerr.Assert(err)
v.SetString(string(file))
}

0 comments on commit 61416e2

Please sign in to comment.