49 lines
705 B
Go
49 lines
705 B
Go
package db
|
|
|
|
import (
|
|
"github.com/glebarez/sqlite"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var defaultSqlite = "data.db"
|
|
|
|
func New(opts ...OptionFn) (DB, error) {
|
|
var (
|
|
err error
|
|
conf = &config{
|
|
sqlite: &defaultSqlite,
|
|
}
|
|
tx *gorm.DB
|
|
)
|
|
|
|
for _, opt := range opts {
|
|
opt(conf)
|
|
}
|
|
|
|
if conf.mysql != nil {
|
|
tx, err = gorm.Open(mysql.Open(*conf.mysql))
|
|
goto CHECK
|
|
}
|
|
|
|
if conf.pg != nil {
|
|
tx, err = gorm.Open(postgres.Open(*conf.pg))
|
|
goto CHECK
|
|
}
|
|
|
|
tx, err = gorm.Open(sqlite.Open(*conf.sqlite))
|
|
|
|
CHECK:
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &db{tx: tx}, nil
|
|
}
|
|
|
|
func Init(opts ...OptionFn) (err error) {
|
|
Default, err = New(opts...)
|
|
return err
|
|
}
|