/
dbx.go
81 lines (76 loc) · 2.92 KB
/
dbx.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
// @Author: abbeymart | Abi Akindele | @Created: 2020-12-01 | @Updated: 2020-12-01
// @Company: mConnect.biz | @License: MIT
// @Description: mcdb - db connection for PostgresSQL, MySQL, SQLite3...
package mcdbcrud
import (
"errors"
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
"os"
)
var (
dbx *sqlx.DB
)
func (dbConfig DbConfig) OpenDbx() (*sqlx.DB, error) {
sslMode := dbConfig.SecureOptions.SslMode
sslCert := dbConfig.SecureOptions.SecureCert
if sslMode == "" {
sslMode = "disable"
}
switch dbConfig.DbType {
case "postgres":
connectionString := ""
if sslCert != "" {
connectionString = fmt.Sprintf("postgresql://%v:%v@%v:%v/%v?sslmode=%v;sslrootcert=%v", dbConfig.Username, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.DbName, sslMode, sslCert)
//connectionString = fmt.Sprintf("port=%d host=%s user=%s password=%s dbname=%s sslmode=%v sslrootcert=%v", dbConfig.Port, dbConfig.Host, dbConfig.Username, dbConfig.Password, dbConfig.DbName, sslMode, sslCert)
} else {
connectionString = fmt.Sprintf("postgresql://%v:%v@%v:%v/%v?sslmode=%v", dbConfig.Username, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.DbName, sslMode)
}
if os.Getenv("DATABASE_URL") != "" && dbConfig.PermitDBUrl {
connectionString = os.Getenv("DATABASE_URL")
}
dbx, err = sqlx.Open(dbConfig.DbType, connectionString)
if err != nil {
errMsg := fmt.Sprintf("Database Connection Error: %v", err.Error())
return nil, errors.New(errMsg)
}
return dbx, nil
case "mysql", "mariadb":
connectionString := ""
if sslCert != "" {
connectionString = fmt.Sprintf("mysql://%v:%v@%v:%v/%v?sslmode=%v;sslrootcert=%v", dbConfig.Username, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.DbName, sslMode, sslCert)
//connectionString = fmt.Sprintf("port=%d host=%s user=%s password=%s dbname=%s sslmode=%v sslrootcert=%v", dbConfig.Port, dbConfig.Host, dbConfig.Username, dbConfig.Password, dbConfig.DbName, sslMode, sslCert)
} else {
connectionString = fmt.Sprintf("mysql://%v:%v@%v:%v/%v?sslmode=%v", dbConfig.Username, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.DbName, sslMode)
}
if os.Getenv("DATABASE_URL") != "" && dbConfig.PermitDBUrl {
connectionString = os.Getenv("DATABASE_URL")
}
dbx, err = sqlx.Open(dbConfig.DbType, connectionString)
if err != nil {
errMsg := fmt.Sprintf("Database Connection Error: %v", err.Error())
return nil, errors.New(errMsg)
}
return dbx, nil
case "sqlite3":
dbx, err = sqlx.Open(dbConfig.DbType, dbConfig.Filename)
if err != nil {
errMsg := fmt.Sprintf("Database Connection Error: %v", err.Error())
return nil, errors.New(errMsg)
}
return dbx, nil
default:
return nil, errors.New(fmt.Sprintf("unknown db-type(%v)", dbConfig.DbType))
}
}
func (dbConfig DbConfig) CloseDbx() {
if dbx != nil {
err = dbx.Close()
if err != nil {
// log error to the console
fmt.Println(err)
}
}
}