forked from mirror/gorm
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"
|
||||
"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"
|
||||
)
|
||||
|
@ -890,7 +892,7 @@ func findColumnType(dest interface{}, columnName string) (
|
|||
return
|
||||
}
|
||||
|
||||
func TestInvalidCachedPlan(t *testing.T) {
|
||||
func TestInvalidCachedPlanSimpleProtocol(t *testing.T) {
|
||||
if DB.Dialector.Name() != "postgres" {
|
||||
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) {
|
||||
type DiffType struct {
|
||||
ID uint
|
||||
|
|
Loading…
Reference in New Issue