Files
revsuit/internal/database/db.go
T

55 lines
1.1 KiB
Go

package database
import (
"errors"
"strings"
"sync"
"gorm.io/gorm"
)
var (
DB *gorm.DB
Driver DriverType
Locker sync.Mutex
)
type DriverType = string
const Sqlite = "sqlite"
const Mysql = "mysql"
const Postgres = "postgres"
const UnknownDatabase = "unknown database"
func InitDB(dsn string) (err error) {
dbName, dbDsn := dbType(dsn)
switch dbName {
case Sqlite:
DB, err = NewSqlite3(dbDsn)
Driver = Sqlite
case Mysql:
DB, err = NewMysql(dbDsn)
Driver = Mysql
case Postgres:
DB, err = NewPostgres(dbDsn)
Driver = Postgres
default:
err = errors.New("unsupported database")
}
return err
}
func dbType(dsn string) (DriverType, string) {
if strings.HasSuffix(dsn, ".db") || strings.HasPrefix(dsn, "sqlite3://") {
return Sqlite, strings.TrimPrefix(dsn, "sqlite3://")
} else if strings.HasPrefix(dsn, "postgres://") {
return Postgres, strings.TrimPrefix(dsn, "postgres://")
} else if strings.HasPrefix(dsn, "mysql://") {
return Mysql, strings.TrimPrefix(dsn, "mysql://")
} else if strings.Contains(dsn, "@tcp") { //兼容上个版本的写法
return Mysql, dsn
}
return UnknownDatabase, dsn
}