mirror of https://github.com/go-gorm/gorm.git
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…
Reference in New Issue