MapToSlice: return error instead of panic
This commit is contained in:
parent
edde1c5ab8
commit
1768a08d82
14
db.go
14
db.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -15,12 +16,19 @@ func MapToSlice(query string, mp interface{}) (string, []interface{}, error) {
|
||||||
return "", []interface{}{}, ErrNoMapPointer
|
return "", []interface{}{}, ErrNoMapPointer
|
||||||
}
|
}
|
||||||
|
|
||||||
args := make([]interface{}, 0)
|
args := make([]interface{}, 0, len(vv.Elem().MapKeys()))
|
||||||
|
var err error
|
||||||
query = re.ReplaceAllStringFunc(query, func(src string) string {
|
query = re.ReplaceAllStringFunc(query, func(src string) string {
|
||||||
args = append(args, vv.Elem().MapIndex(reflect.ValueOf(src[1:])).Interface())
|
v := vv.Elem().MapIndex(reflect.ValueOf(src[1:]))
|
||||||
|
if !v.IsValid() {
|
||||||
|
err = fmt.Errorf("map key %s is missing", src[1:])
|
||||||
|
} else {
|
||||||
|
args = append(args, v.Interface())
|
||||||
|
}
|
||||||
return "?"
|
return "?"
|
||||||
})
|
})
|
||||||
return query, args, nil
|
|
||||||
|
return query, args, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func StructToSlice(query string, st interface{}) (string, []interface{}, error) {
|
func StructToSlice(query string, st interface{}) (string, []interface{}, error) {
|
||||||
|
|
Loading…
Reference in New Issue