-
Notifications
You must be signed in to change notification settings - Fork 2
/
dialector.go
42 lines (36 loc) · 963 Bytes
/
dialector.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
package rdb
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
const (
MysqlDSN = "%s:%s@(%s:%s)/%s?charset=utf8mb4&parseTime=true"
PostgresDSN = "host=%s user=%s password=%s dbname=%s port=%s sslmode=disable"
ErrStrUnkownDBMS = "unknown DBMS: %s"
)
func dialector(dbms DBMS, c Connection) (gorm.Dialector, error) {
dsn, err := dsn(dbms, c)
if err != nil {
return nil, err
}
switch dbms {
case DBMSMySQL:
return mysql.Open(dsn), nil
case DBMSPostgreSQL:
return postgres.Open(dsn), nil
default:
return nil, fmt.Errorf(ErrStrUnkownDBMS, string(dbms))
}
}
func dsn(dbms DBMS, c Connection) (string, error) {
switch dbms {
case DBMSMySQL:
return fmt.Sprintf(MysqlDSN, c.User, c.Password, c.Host, c.Port, c.Database), nil
case DBMSPostgreSQL:
return fmt.Sprintf(PostgresDSN, c.User, c.Password, c.Host, c.Port, c.Database), nil
default:
return "", fmt.Errorf(ErrStrUnkownDBMS, string(dbms))
}
}