2021-10-27 18:49:33 +03:00
|
|
|
package wrapper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql/driver"
|
|
|
|
"errors"
|
2022-12-25 15:35:05 +03:00
|
|
|
"fmt"
|
2023-09-01 00:21:08 +03:00
|
|
|
"runtime"
|
2021-10-27 18:49:33 +03:00
|
|
|
)
|
|
|
|
|
2023-06-10 13:09:25 +03:00
|
|
|
//go:generate sh -c "go run gen.go > wrap_gen.go"
|
|
|
|
|
2021-10-27 18:49:33 +03:00
|
|
|
// namedValueToValue converts driver arguments of NamedValue format to Value format. Implemented in the same way as in
|
|
|
|
// database/sql ctxutil.go.
|
|
|
|
func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) {
|
|
|
|
dargs := make([]driver.Value, len(named))
|
|
|
|
for n, param := range named {
|
|
|
|
if len(param.Name) > 0 {
|
|
|
|
return nil, errors.New("sql: driver does not support the use of Named Parameters")
|
|
|
|
}
|
|
|
|
dargs[n] = param.Value
|
|
|
|
}
|
|
|
|
return dargs, nil
|
|
|
|
}
|
2022-12-25 15:35:05 +03:00
|
|
|
|
2023-01-05 16:03:21 +03:00
|
|
|
// namedValueToLabels convert driver arguments to interface{} slice
|
2022-12-25 15:35:05 +03:00
|
|
|
func namedValueToLabels(named []driver.NamedValue) []interface{} {
|
2023-01-16 23:26:58 +03:00
|
|
|
largs := make([]interface{}, 0, len(named)*2)
|
2022-12-25 15:35:05 +03:00
|
|
|
var name string
|
|
|
|
for _, param := range named {
|
|
|
|
if param.Name != "" {
|
|
|
|
name = param.Name
|
|
|
|
} else {
|
|
|
|
name = fmt.Sprintf("$%d", param.Ordinal)
|
|
|
|
}
|
2023-09-01 00:21:08 +03:00
|
|
|
largs = append(largs, fmt.Sprintf("%s=%v", name, param.Value))
|
2022-12-25 15:35:05 +03:00
|
|
|
}
|
|
|
|
return largs
|
|
|
|
}
|
2023-09-01 00:21:08 +03:00
|
|
|
|
|
|
|
// getCallerName get the name of the function A where A() -> B() -> GetFunctionCallerName()
|
|
|
|
func getCallerName() string {
|
2023-09-01 14:48:57 +03:00
|
|
|
pc, _, _, ok := runtime.Caller(3)
|
2023-09-01 00:21:08 +03:00
|
|
|
details := runtime.FuncForPC(pc)
|
|
|
|
var callerName string
|
|
|
|
if ok && details != nil {
|
|
|
|
callerName = details.Name()
|
|
|
|
} else {
|
|
|
|
callerName = labelUnknown
|
|
|
|
}
|
|
|
|
return callerName
|
|
|
|
}
|