diff --git a/db.go b/db.go index 4bef430..e805504 100644 --- a/db.go +++ b/db.go @@ -1,16 +1,12 @@ package main import ( + "gorm.io/driver/mysql" "log" "math/rand" "os" - "path/filepath" "time" - "gorm.io/driver/mysql" - "gorm.io/driver/postgres" - "gorm.io/driver/sqlite" - "gorm.io/driver/sqlserver" "gorm.io/gorm" "gorm.io/gorm/logger" . "gorm.io/playground/models" @@ -44,34 +40,11 @@ func init() { func OpenTestConnection() (db *gorm.DB, err error) { dbDSN := os.Getenv("GORM_DSN") - switch os.Getenv("GORM_DIALECT") { - case "mysql": - log.Println("testing mysql...") - if dbDSN == "" { - dbDSN = "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local" - } - db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{}) - case "postgres": - log.Println("testing postgres...") - if dbDSN == "" { - dbDSN = "user=gorm password=gorm host=localhost dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai" - } - db, err = gorm.Open(postgres.Open(dbDSN), &gorm.Config{}) - case "sqlserver": - // CREATE LOGIN gorm WITH PASSWORD = 'LoremIpsum86'; - // CREATE DATABASE gorm; - // USE gorm; - // CREATE USER gorm FROM LOGIN gorm; - // sp_changedbowner 'gorm'; - log.Println("testing sqlserver...") - if dbDSN == "" { - dbDSN = "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm" - } - db, err = gorm.Open(sqlserver.Open(dbDSN), &gorm.Config{}) - default: - log.Println("testing sqlite3...") - db, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), &gorm.Config{}) + log.Println("testing mysql...") + if dbDSN == "" { + dbDSN = "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local" } + db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{}) if debug := os.Getenv("DEBUG"); debug == "true" { db.Logger = db.Logger.LogMode(logger.Info) diff --git a/go.mod b/go.mod index 1348430..0351424 100644 --- a/go.mod +++ b/go.mod @@ -29,8 +29,8 @@ require ( golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect golang.org/x/mod v0.27.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/text v0.29.0 // indirect golang.org/x/tools v0.36.0 // indirect gorm.io/cmd/gorm v0.1.1-0.20250825094947-30e7d4fa1f1f // indirect gorm.io/datatypes v1.2.5 // indirect diff --git a/main_test.go b/main_test.go index 12ffdfe..b1dde2d 100644 --- a/main_test.go +++ b/main_test.go @@ -2,34 +2,30 @@ package main import ( "testing" - - "gorm.io/playground/models" ) // GORM_REPO: https://github.com/go-gorm/gorm.git // GORM_BRANCH: master -// TEST_DRIVERS: sqlite, mysql, postgres, sqlserver +// TEST_DRIVERS: mysql func TestGORM(t *testing.T) { - user := models.User{Name: "jinzhu"} - - DB.Create(&user) - - var result models.User - if err := DB.First(&result, user.ID).Error; err != nil { - t.Errorf("Failed, got error: %v", err) + type GormBugTest struct { + IDS []string `gorm:"serializer:json;column:ids;type:varchar(1000);not null;default:'名称';comment:ids" json:"ids"` } -} -// func TestGORMGen(t *testing.T) { -// user := models.User{Name: "jinzhu2"} -// ctx := context.Background() - -// gorm.G[models.User](DB).Create(ctx, &user) + for i := 0; i < 3; i++ { + // If a field in a database table uses the serializer tag and AutoMigrate is used, + // then even if there are no changes to this field + // ,AutoMigrate will still perform an ALTER on the table every time. + + // This will alter the ids field of the GormBugTest table four times, + // even though the field hasn't changed at all. + err := DB.AutoMigrate(GormBugTest{}) + if err != nil { + t.Errorf("Failed, got error: %v", err) + } + } -// if u, err := gorm.G[models.User](DB).Where(g.User.ID.Eq(user.ID)).First(ctx); err != nil { -// t.Errorf("Failed, got error: %v", err) -// } else if u.Name != user.Name { -// t.Errorf("Failed, got user name: %v", u.Name) -// } -// } + t.Log("This will alter the ids field of the GormBugTest table four times,even though the field hasn't changed at all.") + t.Log("这里会alter四次GormBugTest表的ids字段 虽然字段没有任何变化") +}