kra/internal/initialize/gorm_sqlite.go

57 lines
1.1 KiB
Go

package initialize
import (
"fmt"
"kra/internal/conf"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
// GormSqlite 初始化SQLite数据库
func GormSqlite(s *conf.Sqlite) (*gorm.DB, error) {
if s == nil || s.DbName == "" {
return nil, fmt.Errorf("sqlite config is empty")
}
return initSqliteDatabase(s)
}
// GormSqliteByConfig 通过传入配置初始化SQLite数据库
func GormSqliteByConfig(s *conf.Sqlite) (*gorm.DB, error) {
return initSqliteDatabase(s)
}
// initSqliteDatabase 初始化SQLite数据库的辅助函数
func initSqliteDatabase(s *conf.Sqlite) (*gorm.DB, error) {
if s.DbName == "" {
return nil, nil
}
dsn := SqliteDsn(s)
gormConfig := GormConfig(s.Prefix, s.Singular, s.LogMode)
db, err := gorm.Open(sqlite.Open(dsn), gormConfig)
if err != nil {
return nil, err
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxIdleConns(int(s.MaxIdleConns))
sqlDB.SetMaxOpenConns(int(s.MaxOpenConns))
return db, nil
}
// SqliteDsn 生成SQLite DSN
func SqliteDsn(s *conf.Sqlite) string {
if s.Path != "" {
return fmt.Sprintf("%s/%s", s.Path, s.DbName)
}
return s.DbName
}