From 69412300b6a861888beb2b16776e2ab335a4ffbd Mon Sep 17 00:00:00 2001 From: lishuang Date: Tue, 15 Mar 2022 01:19:44 +0800 Subject: [PATCH] Upgrade half or gorm. --- code/core/context.go | 2 +- code/rest/base_model.go | 4 +- code/rest/bridge_dao.go | 6 +- code/rest/dashboard_dao.go | 6 +- code/rest/footprint_dao.go | 6 +- code/rest/image_cache_dao.go | 6 +- code/rest/install_controller.go | 98 +++++++++++++++++++++------------ code/rest/install_model.go | 12 ++-- code/rest/matter_dao.go | 16 +++--- code/rest/share_dao.go | 6 +- code/rest/user_dao.go | 8 +-- code/support/tank_context.go | 27 +++++++-- code/tool/third/gorm_helper.go | 18 ++++++ go.mod | 4 +- go.sum | 35 ++++-------- main.go | 2 +- 16 files changed, 154 insertions(+), 102 deletions(-) create mode 100644 code/tool/third/gorm_helper.go diff --git a/code/core/context.go b/code/core/context.go index 9a7a2c8..15b4ef1 100644 --- a/code/core/context.go +++ b/code/core/context.go @@ -2,7 +2,7 @@ package core import ( "github.com/eyebluecn/tank/code/tool/cache" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "net/http" ) diff --git a/code/rest/base_model.go b/code/rest/base_model.go index 2ae5965..218caf9 100644 --- a/code/rest/base_model.go +++ b/code/rest/base_model.go @@ -1,6 +1,7 @@ package rest import ( + "fmt" "math" "time" ) @@ -31,7 +32,8 @@ type Base struct { } func (this *Base) TableName() string { - panic("you should overwrite TableName()") + panic(fmt.Sprintf("you should overwrite TableName() in %v", this)) + return "" } //pager diff --git a/code/rest/bridge_dao.go b/code/rest/bridge_dao.go index 8c7ca39..f3f40af 100644 --- a/code/rest/bridge_dao.go +++ b/code/rest/bridge_dao.go @@ -5,7 +5,7 @@ import ( "github.com/eyebluecn/tank/code/tool/builder" "github.com/eyebluecn/tank/code/tool/result" "github.com/eyebluecn/tank/code/tool/uuid" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "time" ) @@ -69,7 +69,7 @@ func (this *BridgeDao) PlainPage(page int, pageSize int, shareUuid string, sortA var conditionDB *gorm.DB conditionDB = core.CONTEXT.GetDB().Model(&Bridge{}).Where(wp.Query, wp.Args...) - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) @@ -77,7 +77,7 @@ func (this *BridgeDao) PlainPage(page int, pageSize int, shareUuid string, sortA db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&bridges) this.PanicError(db.Error) - return count, bridges + return int(count), bridges } //get pager diff --git a/code/rest/dashboard_dao.go b/code/rest/dashboard_dao.go index 572a427..60d1787 100644 --- a/code/rest/dashboard_dao.go +++ b/code/rest/dashboard_dao.go @@ -4,7 +4,7 @@ import ( "github.com/eyebluecn/tank/code/core" "github.com/eyebluecn/tank/code/tool/builder" "github.com/eyebluecn/tank/code/tool/uuid" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "time" ) @@ -61,14 +61,14 @@ func (this *DashboardDao) Page(page int, pageSize int, dt string, sortArray []bu var conditionDB *gorm.DB conditionDB = core.CONTEXT.GetDB().Model(&Dashboard{}).Where(wp.Query, wp.Args...) - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) var dashboards []*Dashboard db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&dashboards) this.PanicError(db.Error) - pager := NewPager(page, pageSize, count, dashboards) + pager := NewPager(page, pageSize, int(count), dashboards) return pager } diff --git a/code/rest/footprint_dao.go b/code/rest/footprint_dao.go index ca046ae..4291cf1 100644 --- a/code/rest/footprint_dao.go +++ b/code/rest/footprint_dao.go @@ -4,7 +4,7 @@ import ( "github.com/eyebluecn/tank/code/core" "github.com/eyebluecn/tank/code/tool/builder" "github.com/eyebluecn/tank/code/tool/result" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "github.com/eyebluecn/tank/code/tool/uuid" "time" @@ -48,14 +48,14 @@ func (this *FootprintDao) Page(page int, pageSize int, userUuid string, sortArra var conditionDB *gorm.DB conditionDB = core.CONTEXT.GetDB().Model(&Footprint{}).Where(wp.Query, wp.Args...) - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) var footprints []*Footprint db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&footprints) this.PanicError(db.Error) - pager := NewPager(page, pageSize, count, footprints) + pager := NewPager(page, pageSize, int(count), footprints) return pager } diff --git a/code/rest/image_cache_dao.go b/code/rest/image_cache_dao.go index 63192aa..03a8995 100644 --- a/code/rest/image_cache_dao.go +++ b/code/rest/image_cache_dao.go @@ -7,7 +7,7 @@ import ( "github.com/eyebluecn/tank/code/tool/result" "github.com/eyebluecn/tank/code/tool/util" "github.com/eyebluecn/tank/code/tool/uuid" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "os" "path/filepath" "time" @@ -101,14 +101,14 @@ func (this *ImageCacheDao) Page(page int, pageSize int, userUuid string, matterU var conditionDB *gorm.DB conditionDB = core.CONTEXT.GetDB().Model(&ImageCache{}).Where(wp.Query, wp.Args...) - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) var imageCaches []*ImageCache db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&imageCaches) this.PanicError(db.Error) - pager := NewPager(page, pageSize, count, imageCaches) + pager := NewPager(page, pageSize, int(count), imageCaches) return pager } diff --git a/code/rest/install_controller.go b/code/rest/install_controller.go index 1ea293b..ad669a2 100644 --- a/code/rest/install_controller.go +++ b/code/rest/install_controller.go @@ -6,12 +6,19 @@ import ( "github.com/eyebluecn/tank/code/tool/builder" "github.com/eyebluecn/tank/code/tool/i18n" "github.com/eyebluecn/tank/code/tool/result" + "github.com/eyebluecn/tank/code/tool/third" "github.com/eyebluecn/tank/code/tool/util" "github.com/eyebluecn/tank/code/tool/uuid" - "github.com/jinzhu/gorm" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" + "log" "net/http" + "os" "regexp" "strconv" + "sync" "time" ) @@ -62,16 +69,16 @@ func (this *InstallController) Init() { this.tableNames = []IBase{ &Dashboard{}, - &Bridge{}, - &DownloadToken{}, - &Footprint{}, - &ImageCache{}, - &Matter{}, - &Preference{}, - &Session{}, - &Share{}, - &UploadToken{}, - &User{}, + //&Bridge{}, + //&DownloadToken{}, + //&Footprint{}, + //&ImageCache{}, + //&Matter{}, + //&Preference{}, + //&Session{}, + //&Share{}, + //&UploadToken{}, + //&User{}, } } @@ -110,11 +117,19 @@ func (this *InstallController) openDbConnection(writer http.ResponseWriter, requ this.logger.Info("Connect MySQL %s", mysqlUrl) - var err error = nil - db, err := gorm.Open("mysql", mysqlUrl) - this.PanicError(err) + dbLogger := logger.New( + log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer + logger.Config{ + SlowThreshold: time.Second, // slow SQL 1s + LogLevel: logger.Info, // log level + IgnoreRecordNotFoundError: true, // ignore ErrRecordNotFound + Colorful: false, // colorful print + }, + ) - db.LogMode(false) + var err error = nil + db, err := gorm.Open(mysql.Open(mysqlUrl), &gorm.Config{Logger: dbLogger}) + this.PanicError(err) return db @@ -123,32 +138,40 @@ func (this *InstallController) openDbConnection(writer http.ResponseWriter, requ func (this *InstallController) closeDbConnection(db *gorm.DB) { if db != nil { - err := db.Close() + sqlDB, err := db.DB() if err != nil { - this.logger.Error("occur error when close db. %v", err) + core.LOGGER.Error("occur error when get *sql.DB %s", err.Error()) + } + err = sqlDB.Close() + if err != nil { + core.LOGGER.Error("occur error when closing db %s", err.Error()) } } } -func (this *InstallController) getTableMeta(gormDb *gorm.DB, entity IBase) (bool, []*gorm.StructField, []*gorm.StructField) { +// (exists, allFields, missingFields) +func (this *InstallController) getTableMeta(gormDb *gorm.DB, schemaName string, entity IBase) (bool, []*schema.Field, []*schema.Field) { - db := gormDb.Unscoped() - scope := db.NewScope(entity) + //get all useful fields from model. + entitySchema, err := schema.Parse(entity, &sync.Map{}, schema.NamingStrategy{}) + this.PanicError(err) - tableName := scope.TableName() - modelStruct := scope.GetModelStruct() - allFields := modelStruct.StructFields - var missingFields = make([]*gorm.StructField, 0) + tableName := entitySchema.Table + allFields := entitySchema.Fields - if !scope.Dialect().HasTable(tableName) { + var missingFields = make([]*schema.Field, 0) + + if !gormDb.Migrator().HasTable(tableName) { missingFields = append(missingFields, allFields...) return false, allFields, missingFields } else { for _, field := range allFields { - if !scope.Dialect().HasColumn(tableName, field.DBName) { - if field.IsNormal { + //tag with `gorm:"-"` will be "" + if field.DBName != "" { + database := gormDb.Migrator().CurrentDatabase() + if !third.MysqlMigratorHasColumn(gormDb, database, tableName, field.DBName) { missingFields = append(missingFields, field) } } @@ -159,12 +182,12 @@ func (this *InstallController) getTableMeta(gormDb *gorm.DB, entity IBase) (bool } -func (this *InstallController) getTableMetaList(db *gorm.DB) []*InstallTableInfo { +func (this *InstallController) getTableMetaList(db *gorm.DB, mysqlSchema string) []*InstallTableInfo { var installTableInfos []*InstallTableInfo for _, iBase := range this.tableNames { - exist, allFields, missingFields := this.getTableMeta(db, iBase) + exist, allFields, missingFields := this.getTableMeta(db, mysqlSchema, iBase) installTableInfos = append(installTableInfos, &InstallTableInfo{ Name: iBase.TableName(), TableExist: exist, @@ -204,24 +227,27 @@ func (this *InstallController) Verify(writer http.ResponseWriter, request *http. defer this.closeDbConnection(db) this.logger.Info("Ping DB") - err := db.DB().Ping() + phyDb, err := db.DB() + this.PanicError(err) + err = phyDb.Ping() this.PanicError(err) return this.Success("OK") } func (this *InstallController) TableInfoList(writer http.ResponseWriter, request *http.Request) *result.WebResult { + mysqlSchema := request.FormValue("mysqlSchema") db := this.openDbConnection(writer, request) defer this.closeDbConnection(db) - return this.Success(this.getTableMetaList(db)) + return this.Success(this.getTableMetaList(db, mysqlSchema)) } func (this *InstallController) CreateTable(writer http.ResponseWriter, request *http.Request) *result.WebResult { var installTableInfos []*InstallTableInfo - + mysqlSchema := request.FormValue("mysqlSchema") db := this.openDbConnection(writer, request) defer this.closeDbConnection(db) @@ -229,9 +255,11 @@ func (this *InstallController) CreateTable(writer http.ResponseWriter, request * //complete the missing fields or create table. use utf8 charset db1 := db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(iBase) - this.PanicError(db1.Error) + if db1.Error() != "" { + panic(result.BadRequest(`migrate table error`)) + } - exist, allFields, missingFields := this.getTableMeta(db, iBase) + exist, allFields, missingFields := this.getTableMeta(db, mysqlSchema, iBase) installTableInfos = append(installTableInfos, &InstallTableInfo{ Name: iBase.TableName(), TableExist: exist, @@ -365,7 +393,7 @@ func (this *InstallController) Finish(writer http.ResponseWriter, request *http. defer this.closeDbConnection(db) //Recheck the integrity of tables. - tableMetaList := this.getTableMetaList(db) + tableMetaList := this.getTableMetaList(db, mysqlSchema) this.validateTableMetaList(tableMetaList) //At least one admin diff --git a/code/rest/install_model.go b/code/rest/install_model.go index d6ba79b..d5f4628 100644 --- a/code/rest/install_model.go +++ b/code/rest/install_model.go @@ -1,13 +1,15 @@ package rest -import "github.com/jinzhu/gorm" +import ( + "gorm.io/gorm/schema" +) /** * table meta info. */ type InstallTableInfo struct { - Name string `json:"name"` - TableExist bool `json:"tableExist"` - AllFields []*gorm.StructField `json:"allFields"` - MissingFields []*gorm.StructField `json:"missingFields"` + Name string `json:"name"` + TableExist bool `json:"tableExist"` + AllFields []*schema.Field `json:"allFields"` + MissingFields []*schema.Field `json:"missingFields"` } diff --git a/code/rest/matter_dao.go b/code/rest/matter_dao.go index 3f51c85..cfb25f9 100644 --- a/code/rest/matter_dao.go +++ b/code/rest/matter_dao.go @@ -6,7 +6,7 @@ import ( "github.com/eyebluecn/tank/code/tool/result" "github.com/eyebluecn/tank/code/tool/util" "github.com/eyebluecn/tank/code/tool/uuid" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "math" "os" "time" @@ -148,7 +148,7 @@ func (this *MatterDao) CheckByUuidAndUserUuid(uuid string, userUuid string) *Mat func (this *MatterDao) CountByUserUuidAndPuuidAndDirAndName(userUuid string, puuid string, dir bool, name string) int { var matter Matter - var count int + var count int64 var wp = &builder.WherePair{} @@ -172,7 +172,7 @@ func (this *MatterDao) CountByUserUuidAndPuuidAndDirAndName(userUuid string, puu Count(&count) this.PanicError(db.Error) - return count + return int(count) } func (this *MatterDao) FindByUserUuidAndPuuidAndDirAndName(userUuid string, puuid string, dir string, name string) *Matter { @@ -310,7 +310,7 @@ func (this *MatterDao) PlainPage( conditionDB = core.CONTEXT.GetDB().Model(&Matter{}).Where(wp.Query, wp.Args...) } - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) @@ -318,7 +318,7 @@ func (this *MatterDao) PlainPage( db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&matters) this.PanicError(db.Error) - return count, matters + return int(count), matters } func (this *MatterDao) Page(page int, pageSize int, puuid string, userUuid string, name string, dir string, deleted string, extensions []string, sortArray []builder.OrderPair) *Pager { @@ -387,7 +387,7 @@ func (this *MatterDao) Save(matter *Matter) *Matter { //download time add 1 func (this *MatterDao) TimesIncrement(matterUuid string) { - db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matterUuid).Update(map[string]interface{}{"times": gorm.Expr("times + 1"), "visit_time": time.Now()}) + db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matterUuid).Updates(map[string]interface{}{"times": gorm.Expr("times + 1"), "visit_time": time.Now()}) this.PanicError(db.Error) } @@ -454,7 +454,7 @@ func (this *MatterDao) Delete(matter *Matter) { func (this *MatterDao) SoftDelete(matter *Matter) { //soft delete from db. - db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matter.Uuid).Update(map[string]interface{}{"deleted": true, "delete_time": time.Now()}) + db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matter.Uuid).Updates(map[string]interface{}{"deleted": true, "delete_time": time.Now()}) this.PanicError(db.Error) } @@ -463,7 +463,7 @@ func (this *MatterDao) SoftDelete(matter *Matter) { func (this *MatterDao) Recovery(matter *Matter) { //recovery from db. - db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matter.Uuid).Update(map[string]interface{}{"deleted": false, "delete_time": time.Now()}) + db := core.CONTEXT.GetDB().Model(&Matter{}).Where("uuid = ?", matter.Uuid).Updates(map[string]interface{}{"deleted": false, "delete_time": time.Now()}) this.PanicError(db.Error) } diff --git a/code/rest/share_dao.go b/code/rest/share_dao.go index 343a181..1f67419 100644 --- a/code/rest/share_dao.go +++ b/code/rest/share_dao.go @@ -4,7 +4,7 @@ import ( "github.com/eyebluecn/tank/code/core" "github.com/eyebluecn/tank/code/tool/builder" "github.com/eyebluecn/tank/code/tool/result" - "github.com/jinzhu/gorm" + "gorm.io/gorm" "github.com/eyebluecn/tank/code/tool/uuid" "time" @@ -56,7 +56,7 @@ func (this *ShareDao) PlainPage(page int, pageSize int, userUuid string, sortArr var conditionDB *gorm.DB conditionDB = core.CONTEXT.GetDB().Model(&Share{}).Where(wp.Query, wp.Args...) - count := 0 + var count int64 = 0 db := conditionDB.Count(&count) this.PanicError(db.Error) @@ -64,7 +64,7 @@ func (this *ShareDao) PlainPage(page int, pageSize int, userUuid string, sortArr db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&shares) this.PanicError(db.Error) - return count, shares + return int(count), shares } func (this *ShareDao) Create(share *Share) *Share { diff --git a/code/rest/user_dao.go b/code/rest/user_dao.go index c08d6c8..627b841 100644 --- a/code/rest/user_dao.go +++ b/code/rest/user_dao.go @@ -94,7 +94,7 @@ func (this *UserDao) PlainPage(page int, pageSize int, username string, status s wp = wp.And(&builder.WherePair{Query: "status = ?", Args: []interface{}{status}}) } - count := 0 + var count int64 = 0 db := core.CONTEXT.GetDB().Model(&User{}).Where(wp.Query, wp.Args...).Count(&count) this.PanicError(db.Error) @@ -108,7 +108,7 @@ func (this *UserDao) PlainPage(page int, pageSize int, username string, status s this.PanicError(db.Error) - return count, users + return int(count), users } //handle user page by page. @@ -136,13 +136,13 @@ func (this *UserDao) PageHandle(username string, status string, fun func(user *U } func (this *UserDao) CountByUsername(username string) int { - var count int + var count int64 db := core.CONTEXT.GetDB(). Model(&User{}). Where("username = ?", username). Count(&count) this.PanicError(db.Error) - return count + return int(count) } func (this *UserDao) Save(user *User) *User { diff --git a/code/support/tank_context.go b/code/support/tank_context.go index a6c8f2b..f56d530 100644 --- a/code/support/tank_context.go +++ b/code/support/tank_context.go @@ -4,9 +4,14 @@ import ( "github.com/eyebluecn/tank/code/core" "github.com/eyebluecn/tank/code/rest" "github.com/eyebluecn/tank/code/tool/cache" - "github.com/jinzhu/gorm" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "log" "net/http" + "os" "reflect" + "time" ) type TankContext struct { @@ -70,21 +75,33 @@ func (this *TankContext) ServeHTTP(writer http.ResponseWriter, request *http.Req func (this *TankContext) OpenDb() { + dbLogger := logger.New( + log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer + logger.Config{ + SlowThreshold: time.Second, // slow SQL 1s + LogLevel: logger.Silent, // log level + IgnoreRecordNotFoundError: true, // ignore ErrRecordNotFound + Colorful: false, // colorful print + }, + ) + var err error = nil - this.db, err = gorm.Open("mysql", core.CONFIG.MysqlUrl()) + this.db, err = gorm.Open(mysql.Open(core.CONFIG.MysqlUrl()), &gorm.Config{Logger: dbLogger}) if err != nil { core.LOGGER.Panic("failed to connect mysql database") } - //whether open the db sql log. (only true when debug) - this.db.LogMode(false) } func (this *TankContext) CloseDb() { if this.db != nil { - err := this.db.Close() + db, err := this.db.DB() + if err != nil { + core.LOGGER.Error("occur error when get *sql.DB %s", err.Error()) + } + err = db.Close() if err != nil { core.LOGGER.Error("occur error when closing db %s", err.Error()) } diff --git a/code/tool/third/gorm_helper.go b/code/tool/third/gorm_helper.go new file mode 100644 index 0000000..ed081d4 --- /dev/null +++ b/code/tool/third/gorm_helper.go @@ -0,0 +1,18 @@ +package third + +import "gorm.io/gorm" + +//This is a nil ptr bug in gorm.io/gorm@v1.23.2/migrator/migrator.go:369 +func MysqlMigratorHasColumn(db *gorm.DB, schemaName string, tableName string, columnName string) bool { + + var count int64 + err := db.Raw( + "SELECT count(*) FROM INFORMATION_SCHEMA.columns WHERE table_schema = ? AND table_name = ? AND column_name = ?", + schemaName, tableName, columnName, + ).Row().Scan(&count) + if err != nil { + panic(err) + } + + return count > 0 +} diff --git a/go.mod b/go.mod index 5396e15..67d2ca1 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.14 require ( github.com/disintegration/imaging v1.6.2 - github.com/go-sql-driver/mysql v1.5.0 - github.com/jinzhu/gorm v1.9.14 github.com/json-iterator/go v1.1.10 github.com/robfig/cron/v3 v3.0.1 golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 golang.org/x/text v0.3.3 + gorm.io/driver/mysql v1.3.2 + gorm.io/gorm v1.23.2 ) diff --git a/go.sum b/go.sum index a38a44a..4ec17c4 100644 --- a/go.sum +++ b/go.sum @@ -1,31 +1,17 @@ -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/jinzhu/gorm v1.9.14 h1:Kg3ShyTPcM6nzVo148fRrcMO6MNKuqtOUwnzqMgVniM= -github.com/jinzhu/gorm v1.9.14/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= @@ -38,21 +24,20 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gorm.io/driver/mysql v1.3.2 h1:QJryWiqQ91EvZ0jZL48NOpdlPdMjdip1hQ8bTgo4H7I= +gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= +gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.2 h1:xmq9QRMWL8HTJyhAUBXy8FqIIQCYESeKfJL4DoGKiWQ= +gorm.io/gorm v1.23.2/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= diff --git a/main.go b/main.go index bc8d733..3bc0d98 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,7 @@ package main import ( "github.com/eyebluecn/tank/code/core" "github.com/eyebluecn/tank/code/support" - _ "github.com/go-sql-driver/mysql" + _ "gorm.io/driver/mysql" ) func main() {