/
driver.go
50 lines (40 loc) · 1.22 KB
/
driver.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
49
50
package sqlserver
import (
"errors"
"strconv"
"strings"
"github.com/bitwormhole/starter-gorm/datasource"
driver_pkg "gorm.io/driver/sqlserver"
"gorm.io/gorm"
)
type Driver struct {
}
func (inst *Driver) Open(cfg *datasource.Configuration) (datasource.Source, error) {
// dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930/?database=gorm"
// db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
if cfg == nil {
return nil, errors.New("config==nil")
}
dsnbuilder := &strings.Builder{}
dsnbuilder.WriteString("sqlserver://")
dsnbuilder.WriteString(cfg.Username)
dsnbuilder.WriteString(":")
dsnbuilder.WriteString(cfg.Password)
dsnbuilder.WriteString("@")
dsnbuilder.WriteString(cfg.Host)
dsnbuilder.WriteString(":")
dsnbuilder.WriteString(strconv.Itoa(cfg.Port))
dsnbuilder.WriteString("?database=")
dsnbuilder.WriteString(cfg.Database)
dsn := dsnbuilder.String()
dialector := driver_pkg.Open(dsn)
if dialector == nil {
return nil, errors.New("driver_sqlserver.Open() return nil")
}
gc := &gorm.Config{}
builder := &datasource.GormDataSourceBuilder{}
builder.Config1 = cfg
builder.Config2 = gc
builder.Dialector = dialector
return builder.Create()
}