-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.go
97 lines (82 loc) · 2.92 KB
/
config.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package sqlserver
import (
"fmt"
"github.com/goravel/framework/contracts/config"
"github.com/goravel/sqlserver/contracts"
)
type Config struct {
config config.Config
connection string
}
func NewConfig(config config.Config, connection string) *Config {
return &Config{
config: config,
connection: connection,
}
}
func (r *Config) Config() config.Config {
return r.config
}
func (r *Config) Connection() string {
return r.connection
}
func (r *Config) Reads() []contracts.FullConfig {
configs := r.config.Get(fmt.Sprintf("database.connections.%s.read", r.connection))
if readConfigs, ok := configs.([]contracts.Config); ok {
return r.fillDefault(readConfigs)
}
return nil
}
func (r *Config) Writes() []contracts.FullConfig {
configs := r.config.Get(fmt.Sprintf("database.connections.%s.write", r.connection))
if writeConfigs, ok := configs.([]contracts.Config); ok {
return r.fillDefault(writeConfigs)
}
// Use default db configuration when write is empty
return r.fillDefault([]contracts.Config{{}})
}
func (r *Config) fillDefault(configs []contracts.Config) []contracts.FullConfig {
if len(configs) == 0 {
return nil
}
var fullConfigs []contracts.FullConfig
for _, config := range configs {
fullConfig := contracts.FullConfig{
Config: config,
Connection: r.connection,
Driver: Name,
NoLowerCase: r.config.GetBool(fmt.Sprintf("database.connections.%s.no_lower_case", r.connection)),
Prefix: r.config.GetString(fmt.Sprintf("database.connections.%s.prefix", r.connection)),
Singular: r.config.GetBool(fmt.Sprintf("database.connections.%s.singular", r.connection)),
}
if nameReplacer := r.config.Get(fmt.Sprintf("database.connections.%s.name_replacer", r.connection)); nameReplacer != nil {
if replacer, ok := nameReplacer.(contracts.Replacer); ok {
fullConfig.NameReplacer = replacer
}
}
// If read or write is empty, use the default config
if fullConfig.Dsn == "" {
fullConfig.Dsn = r.config.GetString(fmt.Sprintf("database.connections.%s.dsn", r.connection))
}
if fullConfig.Host == "" {
fullConfig.Host = r.config.GetString(fmt.Sprintf("database.connections.%s.host", r.connection))
}
if fullConfig.Port == 0 {
fullConfig.Port = r.config.GetInt(fmt.Sprintf("database.connections.%s.port", r.connection))
}
if fullConfig.Username == "" {
fullConfig.Username = r.config.GetString(fmt.Sprintf("database.connections.%s.username", r.connection))
}
if fullConfig.Password == "" {
fullConfig.Password = r.config.GetString(fmt.Sprintf("database.connections.%s.password", r.connection))
}
if fullConfig.Database == "" {
fullConfig.Database = r.config.GetString(fmt.Sprintf("database.connections.%s.database", r.connection))
}
if fullConfig.Charset == "" {
fullConfig.Charset = r.config.GetString(fmt.Sprintf("database.connections.%s.charset", r.connection))
}
fullConfigs = append(fullConfigs, fullConfig)
}
return fullConfigs
}