From 7df09537e02bfa7086e8d8bbe0b49f1cdbbe8e55 Mon Sep 17 00:00:00 2001 From: mritd Date: Thu, 3 Sep 2020 12:07:38 +0800 Subject: [PATCH] fix(db_driver): fix the panic when sqlite3 is used in the conf (#551) * fix(db_driver): fix the panic when sqlite3 is used in the conf fix the panic when sqlite3 is used in the conf ref cloudreve/Cloudreve#550 Signed-off-by: mritd * fix(nullpointer): fix possible null pointer error fix possible null pointer error Signed-off-by: mritd --- models/init.go | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/models/init.go b/models/init.go index 9153f01..80a6b3d 100644 --- a/models/init.go +++ b/models/init.go @@ -2,11 +2,12 @@ package model import ( "fmt" + "time" + "github.com/HFO4/cloudreve/pkg/conf" "github.com/HFO4/cloudreve/pkg/util" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" - "time" _ "github.com/jinzhu/gorm/dialects/mysql" _ "github.com/jinzhu/gorm/dialects/sqlite" @@ -28,19 +29,30 @@ func Init() { // 测试模式下,使用内存数据库 db, err = gorm.Open("sqlite3", ":memory:") } else { - if conf.DatabaseConfig.Type == "UNSET" { - // 未指定数据库时,使用SQLite + switch conf.DatabaseConfig.Type { + case "UNSET", "sqlite", "sqlite3": + // 未指定数据库或者明确指定为 sqlite 时,使用 SQLite3 数据库 db, err = gorm.Open("sqlite3", util.RelativePath(conf.DatabaseConfig.DBFile)) - } else { - db, err = gorm.Open(conf.DatabaseConfig.Type, fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", + case "mysql": + // 当前只支持 sqlite3 与 mysql 数据库 + // TODO: import 其他 gorm 支持的主流数据库?否则直接 Open 没有任何意义。 + // TODO: 数据库连接其他参数允许用户自定义?譬如编码更换为 utf8mb4 以支持表情。 + db, err = gorm.Open("mysql", fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", conf.DatabaseConfig.User, conf.DatabaseConfig.Password, conf.DatabaseConfig.Host, conf.DatabaseConfig.Port, conf.DatabaseConfig.Name)) + default: + util.Log().Panic("不支持数据库类型: %s", conf.DatabaseConfig.Type) } } + //db.SetLogger(util.Log()) + if err != nil { + util.Log().Panic("连接数据库不成功, %s", err) + } + // 处理表前缀 gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string { return conf.DatabaseConfig.TablePrefix + defaultTableName @@ -53,11 +65,6 @@ func Init() { db.LogMode(false) } - //db.SetLogger(util.Log()) - if err != nil { - util.Log().Panic("连接数据库不成功, %s", err) - } - //设置连接池 //空闲 db.DB().SetMaxIdleConns(50)