test: invalid cache plan with prepare stmt (#5778)
* test: invalid cache plan with prepare stmt * test: more test cases * test: drop and rename column
This commit is contained in:
		
							parent
							
								
									5dd2bb4827
								
							
						
					
					
						commit
						9d82aa5673
					
				| @ -4,6 +4,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"math/rand" | 	"math/rand" | ||||||
|  | 	"os" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"testing" | 	"testing" | ||||||
| @ -12,6 +13,7 @@ import ( | |||||||
| 	"gorm.io/driver/postgres" | 	"gorm.io/driver/postgres" | ||||||
| 
 | 
 | ||||||
| 	"gorm.io/gorm" | 	"gorm.io/gorm" | ||||||
|  | 	"gorm.io/gorm/logger" | ||||||
| 	"gorm.io/gorm/schema" | 	"gorm.io/gorm/schema" | ||||||
| 	. "gorm.io/gorm/utils/tests" | 	. "gorm.io/gorm/utils/tests" | ||||||
| ) | ) | ||||||
| @ -890,7 +892,7 @@ func findColumnType(dest interface{}, columnName string) ( | |||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestInvalidCachedPlan(t *testing.T) { | func TestInvalidCachedPlanSimpleProtocol(t *testing.T) { | ||||||
| 	if DB.Dialector.Name() != "postgres" { | 	if DB.Dialector.Name() != "postgres" { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @ -925,6 +927,101 @@ 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) | ||||||
|  | 	} | ||||||
|  | 	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 { | ||||||
|  | 		ID uint | ||||||
|  | 	} | ||||||
|  | 	type Object2 struct { | ||||||
|  | 		ID     uint | ||||||
|  | 		Field1 int `gorm:"type:int8"` | ||||||
|  | 	} | ||||||
|  | 	type Object3 struct { | ||||||
|  | 		ID     uint | ||||||
|  | 		Field1 int `gorm:"type:int4"` | ||||||
|  | 	} | ||||||
|  | 	type Object4 struct { | ||||||
|  | 		ID     uint | ||||||
|  | 		Field2 int | ||||||
|  | 	} | ||||||
|  | 	db.Migrator().DropTable("objects") | ||||||
|  | 
 | ||||||
|  | 	err = db.Table("objects").AutoMigrate(&Object1{}) | ||||||
|  | 	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) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	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) { | func TestDifferentTypeWithoutDeclaredLength(t *testing.T) { | ||||||
| 	type DiffType struct { | 	type DiffType struct { | ||||||
| 		ID   uint | 		ID   uint | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Cr
						Cr