|
|
@@ -3,7 +3,6 @@ package mssql
|
|
|
import (
|
|
|
"database/sql"
|
|
|
"fmt"
|
|
|
- "net/url"
|
|
|
"strconv"
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
|
@@ -24,7 +23,10 @@ func init() {
|
|
|
func newMssqlQueryEndpoint(datasource *models.DataSource) (tsdb.TsdbQueryEndpoint, error) {
|
|
|
logger := log.New("tsdb.mssql")
|
|
|
|
|
|
- cnnstr := generateConnectionString(datasource)
|
|
|
+ cnnstr, err := generateConnectionString(datasource)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
if setting.Env == setting.DEV {
|
|
|
logger.Debug("getEngine", "connection", cnnstr)
|
|
|
}
|
|
|
@@ -43,21 +45,21 @@ func newMssqlQueryEndpoint(datasource *models.DataSource) (tsdb.TsdbQueryEndpoin
|
|
|
return sqleng.NewSqlQueryEndpoint(&config, &rowTransformer, newMssqlMacroEngine(), logger)
|
|
|
}
|
|
|
|
|
|
-func generateConnectionString(datasource *models.DataSource) string {
|
|
|
+func generateConnectionString(datasource *models.DataSource) (string, error) {
|
|
|
server, port := util.SplitHostPortDefault(datasource.Url, "localhost", "1433")
|
|
|
- encrypt := datasource.JsonData.Get("encrypt").MustString("false")
|
|
|
|
|
|
- query := url.Values{}
|
|
|
- query.Add("database", datasource.Database)
|
|
|
- query.Add("encrypt", encrypt)
|
|
|
-
|
|
|
- u := &url.URL{
|
|
|
- Scheme: "sqlserver",
|
|
|
- User: url.UserPassword(datasource.User, datasource.DecryptedPassword()),
|
|
|
- Host: fmt.Sprintf("%s:%s", server, port),
|
|
|
- RawQuery: query.Encode(),
|
|
|
+ encrypt := datasource.JsonData.Get("encrypt").MustString("false")
|
|
|
+ connStr := fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s;",
|
|
|
+ server,
|
|
|
+ port,
|
|
|
+ datasource.Database,
|
|
|
+ datasource.User,
|
|
|
+ datasource.DecryptedPassword(),
|
|
|
+ )
|
|
|
+ if encrypt != "false" {
|
|
|
+ connStr += fmt.Sprintf("encrypt=%s;", encrypt)
|
|
|
}
|
|
|
- return u.String()
|
|
|
+ return connStr, nil
|
|
|
}
|
|
|
|
|
|
type mssqlRowTransformer struct {
|