/ext/db/gorm/service.go

https://github.com/henrylee2cn/faygo · Go · 78 lines · 63 code · 12 blank · 3 comment · 18 complexity · 7e902dffec837521baca8820695997b6 MD5 · raw file

  1. package gorm
  2. import (
  3. "os"
  4. "path/filepath"
  5. "strings"
  6. "github.com/jinzhu/gorm"
  7. // _ "github.com/jinzhu/gorm/dialects/mssql" //github.com/denisenkom/go-mssqldb
  8. _ "github.com/jinzhu/gorm/dialects/mysql" //github.com/go-sql-driver/mysql
  9. _ "github.com/jinzhu/gorm/dialects/postgres" //github.com/lib/pq
  10. // _ "github.com/jinzhu/gorm/dialects/sqlite" //github.com/mattn/go-sqlite3
  11. "github.com/henrylee2cn/faygo"
  12. )
  13. // DBService is a database engine object.
  14. type DBService struct {
  15. Default *gorm.DB // the default database engine
  16. List map[string]*gorm.DB // database engine list
  17. }
  18. var dbService = func() (serv *DBService) {
  19. serv = &DBService{
  20. List: map[string]*gorm.DB{},
  21. }
  22. var errs []string
  23. defer func() {
  24. if len(errs) > 0 {
  25. panic("[gorm] " + strings.Join(errs, "\n"))
  26. }
  27. if serv.Default == nil {
  28. faygo.Panicf("[gorm] the `default` database engine must be configured and enabled")
  29. }
  30. }()
  31. err := loadDBConfig()
  32. if err != nil {
  33. faygo.Panicf("[gorm]", err.Error())
  34. return
  35. }
  36. for _, conf := range dbConfigs {
  37. if !conf.Enable {
  38. continue
  39. }
  40. engine, err := gorm.Open(conf.Driver, conf.Connstring)
  41. if err != nil {
  42. faygo.Critical("[gorm]", err.Error())
  43. errs = append(errs, err.Error())
  44. continue
  45. }
  46. engine.SetLogger(faygo.NewLog())
  47. engine.LogMode(conf.ShowSql)
  48. engine.DB().SetMaxOpenConns(conf.MaxOpenConns)
  49. engine.DB().SetMaxIdleConns(conf.MaxIdleConns)
  50. if conf.Driver == "sqlite3" && !faygo.FileExists(conf.Connstring) {
  51. os.MkdirAll(filepath.Dir(conf.Connstring), 0777)
  52. f, err := os.Create(conf.Connstring)
  53. if err != nil {
  54. faygo.Critical("[gorm]", err.Error())
  55. errs = append(errs, err.Error())
  56. } else {
  57. f.Close()
  58. }
  59. }
  60. serv.List[conf.Name] = engine
  61. if DEFAULTDB_NAME == conf.Name {
  62. serv.Default = engine
  63. }
  64. }
  65. return
  66. }()