mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-26 00:21:54 +08:00
feat(database): support postgres (#43)
Co-authored-by: Li4n0 <[email protected]>
This commit is contained in:
+31
-6
@@ -1,6 +1,11 @@
|
||||
package database
|
||||
|
||||
import "gorm.io/gorm"
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
DB *gorm.DB
|
||||
@@ -11,14 +16,34 @@ type DriverType = string
|
||||
|
||||
const Sqlite = "sqlite"
|
||||
const Mysql = "mysql"
|
||||
const Postgres = "postgres"
|
||||
const UnknowDatabase = "unknown database"
|
||||
|
||||
func InitDB(driver DriverType, dsn string) (err error) {
|
||||
Driver = driver
|
||||
switch driver {
|
||||
func InitDB(dsn string) (err error) {
|
||||
dbName, dbDsn := dbType(dsn)
|
||||
|
||||
switch dbName {
|
||||
case Sqlite:
|
||||
DB, err = NewSqlite3(dsn)
|
||||
DB, err = NewSqlite3(dbDsn)
|
||||
case Mysql:
|
||||
DB, err = NewMysql(dsn)
|
||||
DB, err = NewMysql(dbDsn)
|
||||
case Postgres:
|
||||
DB, err = NewPostgres(dbDsn)
|
||||
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 UnknowDatabase, dsn
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func NewPostgres(dsn string) (*gorm.DB, error) {
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
Reference in New Issue
Block a user