-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.go
More file actions
72 lines (61 loc) · 2.14 KB
/
database.go
File metadata and controls
72 lines (61 loc) · 2.14 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package database
import (
"time"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var drivers map[string]Driver
type Driver func(o *Option) *gorm.DB
type Option struct {
Driver string `json:"driver" yaml:"driver"`
Host string `json:"host" yaml:"host"`
Port string `json:"port" yaml:"port"`
DbName string `json:"dbName" yaml:"dbName"`
Username string `json:"username" yaml:"username"`
Password string `json:"password" yaml:"password"`
Args string `json:"args" yaml:"args"`
Prefix string `json:"prefix" yaml:"prefix"`
LocalTime bool `json:"localTime" yaml:"localTime"`
DryRun bool `json:"dryRun" yaml:"dryRun"`
AutomaticPing bool `json:"automaticPing" yaml:"automaticPing"`
MaxIdleConns int `json:"maxIdleConns" yaml:"maxIdleConns"`
MaxOpenConns int `json:"maxOpenConns" yaml:"maxOpenConns"`
MaxLifetime time.Duration `json:"maxLifetime" yaml:"maxLifetime"`
SingularTable bool `json:"singularTable" yaml:"singularTable"`
Logger *Logger `mapstructure:"logger" json:"logger" yaml:"logger"`
logger logger.Interface
}
func (o *Option) NewLogger(writer LoggerWriterAdapter) {
o.logger = newLogger(o, writer)
}
func init() {
SetAdapter("mysql", mysqlDriver)
SetAdapter("sqlite", sqliteDriver)
SetAdapter("postgres", postgresDriver)
SetAdapter("sqlserver", sqliteDriver)
}
func SetAdapter(name string, driver Driver) {
if drivers == nil {
drivers = map[string]Driver{}
}
drivers[name] = driver
}
func New(o *Option) *gorm.DB {
var db *gorm.DB
if o.DbName == "" {
return nil
}
if adapter, ok := drivers[o.Driver]; ok {
db = adapter(o)
} else {
panic("database driver " + o.Driver + " not support")
}
if db == nil {
panic("database open failed")
}
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(o.MaxIdleConns)
sqlDB.SetMaxOpenConns(o.MaxOpenConns)
sqlDB.SetConnMaxLifetime(o.MaxLifetime)
return db
}