From af8a53af32eebbb2dff9d7b670b8bf8a5ad4914d Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Tue, 18 Oct 2022 08:35:48 +0800 Subject: [PATCH 1/3] test: invalid cache plan with prepare stmt --- tests/migrate_test.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/tests/migrate_test.go b/tests/migrate_test.go index b918b4b56..2b7292e9d 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -850,7 +850,7 @@ func findColumnType(dest interface{}, columnName string) ( return } -func TestInvalidCachedPlan(t *testing.T) { +func TestInvalidCachedPlanSimpleProtocol(t *testing.T) { if DB.Dialector.Name() != "postgres" { return } @@ -885,6 +885,41 @@ func TestInvalidCachedPlan(t *testing.T) { } } +func TestInvalidCachedPlanPrepareStmt(t *testing.T) { + if DB.Dialector.Name() != "postgres" { + return + } + + db, err := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{PrepareStmt: true}) + if err != nil { + t.Errorf("Open err:%v", err) + } + + type Object1 struct{} + type Object2 struct { + Field1 string + } + type Object3 struct { + Field2 string + } + db.Migrator().DropTable("objects") + + err = db.Table("objects").AutoMigrate(&Object1{}) + if err != nil { + t.Errorf("AutoMigrate err:%v", err) + } + + err = db.Table("objects").AutoMigrate(&Object2{}) + if err != nil { + t.Errorf("AutoMigrate err:%v", err) + } + + err = db.Table("objects").AutoMigrate(&Object3{}) + if err != nil { + t.Errorf("AutoMigrate err:%v", err) + } +} + func TestDifferentTypeWithoutDeclaredLength(t *testing.T) { type DiffType struct { ID uint From b9f50de6750cfa53375f569f0299678e0637d805 Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Wed, 19 Oct 2022 20:23:58 +0800 Subject: [PATCH 2/3] test: more test cases --- tests/migrate_test.go | 48 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/tests/migrate_test.go b/tests/migrate_test.go index fc0cfc01d..94667b139 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "math/rand" + "os" "reflect" "strings" "testing" @@ -12,6 +13,7 @@ import ( "gorm.io/driver/postgres" "gorm.io/gorm" + "gorm.io/gorm/logger" "gorm.io/gorm/schema" . "gorm.io/gorm/utils/tests" ) @@ -934,13 +936,26 @@ func TestInvalidCachedPlanPrepareStmt(t *testing.T) { if err != nil { t.Errorf("Open err:%v", err) } + if debug := os.Getenv("DEBUG"); debug == "true" { + db.Logger = db.Logger.LogMode(logger.Info) + } else if debug == "false" { + db.Logger = db.Logger.LogMode(logger.Silent) + } - type Object1 struct{} + type Object1 struct { + ID uint + } type Object2 struct { - Field1 string + ID uint + Field1 int `gorm:"type:int8"` } type Object3 struct { - Field2 string + ID uint + Field1 int `gorm:"type:int4"` + } + type Object4 struct { + ID uint + Field2 int } db.Migrator().DropTable("objects") @@ -948,16 +963,43 @@ func TestInvalidCachedPlanPrepareStmt(t *testing.T) { if err != nil { t.Errorf("AutoMigrate err:%v", err) } + err = db.Table("objects").Create(&Object1{}).Error + if err != nil { + t.Errorf("create err:%v", err) + } + // AddColumn err = db.Table("objects").AutoMigrate(&Object2{}) if err != nil { t.Errorf("AutoMigrate err:%v", err) } + err = db.Table("objects").Take(&Object2{}).Error + if err != nil { + t.Errorf("take err:%v", err) + } + + // AlterColumn err = db.Table("objects").AutoMigrate(&Object3{}) if err != nil { t.Errorf("AutoMigrate err:%v", err) } + + err = db.Table("objects").Take(&Object3{}).Error + if err != nil { + t.Errorf("take err:%v", err) + } + + // AddColumn + err = db.Table("objects").AutoMigrate(&Object4{}) + if err != nil { + t.Errorf("AutoMigrate err:%v", err) + } + + err = db.Table("objects").Take(&Object4{}).Error + if err != nil { + t.Errorf("take err:%v", err) + } } func TestDifferentTypeWithoutDeclaredLength(t *testing.T) { From ab216e89e91d08638770edc05c5a1906f76a8e12 Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Thu, 20 Oct 2022 12:50:57 +0800 Subject: [PATCH 3/3] test: drop and rename column --- tests/migrate_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/migrate_test.go b/tests/migrate_test.go index 94667b139..96b1d0e4c 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -1000,6 +1000,26 @@ func TestInvalidCachedPlanPrepareStmt(t *testing.T) { if err != nil { t.Errorf("take err:%v", err) } + + db.Table("objects").Migrator().RenameColumn(&Object4{}, "field2", "field3") + if err != nil { + t.Errorf("RenameColumn err:%v", err) + } + + err = db.Table("objects").Take(&Object4{}).Error + if err != nil { + t.Errorf("take err:%v", err) + } + + db.Table("objects").Migrator().DropColumn(&Object4{}, "field3") + if err != nil { + t.Errorf("RenameColumn err:%v", err) + } + + err = db.Table("objects").Take(&Object4{}).Error + if err != nil { + t.Errorf("take err:%v", err) + } } func TestDifferentTypeWithoutDeclaredLength(t *testing.T) {