gorm_sqlite.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package initialize
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "github.com/glebarez/sqlite"
  7. "gorm.io/gorm"
  8. "wails-app/internal/config"
  9. "wails-app/internal/global"
  10. "wails-app/internal/initialize/internal"
  11. )
  12. // GormSqlite 初始化Sqlite数据库
  13. func GormSqlite() *gorm.DB {
  14. s := global.GVA_CONFIG.Sqlite
  15. if s.Dbname == "" {
  16. return nil
  17. }
  18. // Resolve path: empty = %APPDATA%/smart-parking/
  19. if s.Path == "" {
  20. if appData := os.Getenv("APPDATA"); appData != "" {
  21. s.Path = appData
  22. } else {
  23. // Fallback: exe directory
  24. if exePath, err := os.Executable(); err == nil {
  25. s.Path = filepath.Dir(exePath)
  26. }
  27. }
  28. s.Path = filepath.Join(s.Path, "smart-parking")
  29. }
  30. // Ensure directory exists
  31. if err := os.MkdirAll(s.Path, 0755); err != nil {
  32. panic(fmt.Errorf("failed to create SQLite db directory %s: %w", s.Path, err))
  33. }
  34. dsn := filepath.Join(s.Path, s.Dbname+".db")
  35. if db, err := gorm.Open(sqlite.Open(dsn), internal.Gorm.Config(s.Prefix, s.Singular)); err != nil {
  36. panic(err)
  37. } else {
  38. sqlDB, _ := db.DB()
  39. sqlDB.SetMaxIdleConns(s.MaxIdleConns)
  40. sqlDB.SetMaxOpenConns(s.MaxOpenConns)
  41. return db
  42. }
  43. }
  44. // GormSqliteByConfig 初始化Sqlite数据库用过传入配置
  45. func GormSqliteByConfig(s config.Sqlite) *gorm.DB {
  46. if s.Dbname == "" {
  47. return nil
  48. }
  49. if db, err := gorm.Open(sqlite.Open(s.Dsn()), internal.Gorm.Config(s.Prefix, s.Singular)); err != nil {
  50. panic(err)
  51. } else {
  52. sqlDB, _ := db.DB()
  53. sqlDB.SetMaxIdleConns(s.MaxIdleConns)
  54. sqlDB.SetMaxOpenConns(s.MaxOpenConns)
  55. return db
  56. }
  57. }