/
mssql.go
48 lines (42 loc) · 1.21 KB
/
mssql.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package mssql
import (
"strconv"
"strings"
// DRIVER: mssql
"github.com/denisenkom/go-mssqldb"
"github.com/xo/usql/drivers"
)
func init() {
drivers.Register("mssql", drivers.Driver{
AllowMultilineComments: true,
RequirePreviousPassword: true,
LexerName: "tsql",
Version: func(db drivers.DB) (string, error) {
var ver, level, edition string
err := db.QueryRow(
`SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')`,
).Scan(&ver, &level, &edition)
if err != nil {
return "", err
}
return "Microsoft SQL Server " + ver + ", " + level + ", " + edition, nil
},
ChangePassword: func(db drivers.DB, user, newpw, oldpw string) error {
_, err := db.Exec(`ALTER LOGIN ` + user + ` WITH password = '` + newpw + `' old_password = '` + oldpw + `'`)
return err
},
Err: func(err error) (string, string) {
if e, ok := err.(mssql.Error); ok {
return strconv.Itoa(int(e.Number)), e.Message
}
msg := err.Error()
if i := strings.LastIndex(msg, "mssql:"); i != -1 {
msg = msg[i:]
}
return "", msg
},
IsPasswordErr: func(err error) bool {
return strings.Contains(err.Error(), "Login failed for")
},
})
}