evcc-io/server/db/db.go
2022-10-05 13:12:24 +02:00

45 lines
886 B
Go

package db
import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/mitchellh/go-homedir"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var Instance *gorm.DB
func New(driver, dsn string) (*gorm.DB, error) {
var dialect gorm.Dialector
switch driver {
case "sqlite":
file, err := homedir.Expand(dsn)
if err != nil {
return nil, err
}
if err := os.MkdirAll(filepath.Dir(file), os.ModePerm); err != nil {
return nil, err
}
dialect = sqlite.Open(file)
case "postgres":
dialect = postgres.Open(dsn)
case "mysql":
dialect = mysql.Open(dsn)
default:
return nil, fmt.Errorf("invalid database type: %s not in [sqlite, postgres, mysql]", driver)
}
return gorm.Open(dialect, &gorm.Config{})
}
func NewInstance(driver, dsn string) (err error) {
Instance, err = New(strings.ToLower(driver), dsn)
return
}