* Improve anonymous redaction * Add sqlserver integration test and some default params
51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package jdbc
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
|
|
_ "github.com/denisenkom/go-mssqldb"
|
|
)
|
|
|
|
type sqlServerJDBC struct {
|
|
conn string
|
|
params map[string]string
|
|
}
|
|
|
|
func (s *sqlServerJDBC) ping(ctx context.Context) bool {
|
|
if ping(ctx, "mssql", s.conn) {
|
|
return true
|
|
}
|
|
if ping(ctx, "mssql", joinKeyValues(s.params, ";")) {
|
|
return true
|
|
}
|
|
// try URL format
|
|
return ping(ctx, "mssql", "sqlserver://"+s.conn)
|
|
}
|
|
|
|
func parseSqlServer(subname string) (jdbc, error) {
|
|
if !strings.HasPrefix(subname, "//") {
|
|
return nil, errors.New("expected connection to start with //")
|
|
}
|
|
conn := strings.TrimPrefix(subname, "//")
|
|
params := map[string]string{
|
|
"user id": "sa",
|
|
"database": "master",
|
|
}
|
|
for _, param := range strings.Split(conn, ";") {
|
|
key, value, found := strings.Cut(param, "=")
|
|
if !found {
|
|
continue
|
|
}
|
|
params[key] = value
|
|
if key != "password" && strings.Contains(strings.ToLower(key), "password") {
|
|
params["password"] = value
|
|
}
|
|
}
|
|
return &sqlServerJDBC{
|
|
conn: strings.TrimPrefix(subname, "//"),
|
|
params: params,
|
|
}, nil
|
|
}
|