()
| 18 | ) |
| 19 | |
| 20 | func InitDB() { |
| 21 | logLevel := logger.Silent |
| 22 | if flags.Debug || flags.Dev { |
| 23 | logLevel = logger.Info |
| 24 | } |
| 25 | newLogger := logger.New( |
| 26 | stdlog.New(log.StandardLogger().Out, "\r\n", stdlog.LstdFlags), |
| 27 | logger.Config{ |
| 28 | SlowThreshold: time.Second, |
| 29 | LogLevel: logLevel, |
| 30 | IgnoreRecordNotFoundError: true, |
| 31 | Colorful: true, |
| 32 | }, |
| 33 | ) |
| 34 | gormConfig := &gorm.Config{ |
| 35 | NamingStrategy: schema.NamingStrategy{ |
| 36 | TablePrefix: conf.Conf.Database.TablePrefix, |
| 37 | }, |
| 38 | Logger: newLogger, |
| 39 | } |
| 40 | var dB *gorm.DB |
| 41 | var err error |
| 42 | if flags.Dev { |
| 43 | dB, err = gorm.Open(openSQLite("file::memory:?cache=shared"), gormConfig) |
| 44 | conf.Conf.Database.Type = "sqlite3" |
| 45 | } else { |
| 46 | database := conf.Conf.Database |
| 47 | switch database.Type { |
| 48 | case "sqlite3": |
| 49 | { |
| 50 | if !(strings.HasSuffix(database.DBFile, ".db") && len(database.DBFile) > 3) { |
| 51 | log.Fatalf("db name error.") |
| 52 | } |
| 53 | dB, err = gorm.Open(openSQLite(fmt.Sprintf("%s?_journal=WAL&_vacuum=incremental", |
| 54 | database.DBFile)), gormConfig) |
| 55 | } |
| 56 | case "mysql": |
| 57 | { |
| 58 | dsn := database.DSN |
| 59 | if dsn == "" { |
| 60 | //[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] |
| 61 | dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s", |
| 62 | database.User, database.Password, database.Host, database.Port, database.Name, database.SSLMode) |
| 63 | } |
| 64 | dB, err = gorm.Open(mysql.Open(dsn), gormConfig) |
| 65 | } |
| 66 | case "postgres": |
| 67 | { |
| 68 | dsn := database.DSN |
| 69 | if dsn == "" { |
| 70 | if database.Password != "" { |
| 71 | dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=Asia/Shanghai", |
| 72 | database.Host, database.User, database.Password, database.Name, database.Port, database.SSLMode) |
| 73 | } else { |
| 74 | dsn = fmt.Sprintf("host=%s user=%s dbname=%s port=%d sslmode=%s TimeZone=Asia/Shanghai", |
| 75 | database.Host, database.User, database.Name, database.Port, database.SSLMode) |
| 76 | } |
| 77 | } |
no test coverage detected