in pkg/datasource/sql/driver.go [196:244]
func selectDBVersion(ctx context.Context, conn driver.Conn) (string, error) {
var rowsi driver.Rows
var err error
queryerCtx, ok := conn.(driver.QueryerContext)
var queryer driver.Queryer
if !ok {
queryer, ok = conn.(driver.Queryer)
}
if ok {
rowsi, err = util.CtxDriverQuery(ctx, queryerCtx, queryer, "SELECT VERSION()", nil)
defer func() {
if rowsi != nil {
rowsi.Close()
}
}()
if err != nil {
log.Errorf("ctx driver query: %+v", err)
return "", err
}
} else {
log.Errorf("target conn should been driver.QueryerContext or driver.Queryer")
return "", fmt.Errorf("invalid conn")
}
dest := make([]driver.Value, 1)
var version string
if err = rowsi.Next(dest); err != nil {
if err == io.EOF {
return version, nil
}
return "", err
}
if len(dest) != 1 {
return "", errors.New("get db version is not column 1")
}
switch reflect.TypeOf(dest[0]).Kind() {
case reflect.Slice, reflect.Array:
val := reflect.ValueOf(dest[0]).Bytes()
version = string(val)
case reflect.String:
version = reflect.ValueOf(dest[0]).String()
default:
return "", errors.New("get db version is not a string")
}
return version, nil
}