forked from mirror/gorm
Refactor preload error check
This commit is contained in:
parent
61b4c31236
commit
6befa0c947
|
@ -186,6 +186,11 @@ func BuildQuerySQL(db *gorm.DB) {
|
|||
|
||||
func Preload(db *gorm.DB) {
|
||||
if db.Error == nil && len(db.Statement.Preloads) > 0 {
|
||||
if db.Statement.Schema == nil {
|
||||
db.AddError(fmt.Errorf("%w when using preload", gorm.ErrModelValueRequired))
|
||||
return
|
||||
}
|
||||
|
||||
preloadMap := map[string]map[string][]interface{}{}
|
||||
for name := range db.Statement.Preloads {
|
||||
preloadFields := strings.Split(name, ".")
|
||||
|
|
|
@ -369,10 +369,6 @@ func (db *DB) Delete(value interface{}, conds ...interface{}) (tx *DB) {
|
|||
|
||||
func (db *DB) Count(count *int64) (tx *DB) {
|
||||
tx = db.getInstance()
|
||||
if len(tx.Statement.Preloads) > 0 {
|
||||
tx.AddError(ErrPreloadNotAllowed)
|
||||
return
|
||||
}
|
||||
if tx.Statement.Model == nil {
|
||||
tx.Statement.Model = tx.Statement.Dest
|
||||
defer func() {
|
||||
|
|
|
@ -150,8 +150,16 @@ func TestCount(t *testing.T) {
|
|||
Where("name in ?", []string{user1.Name, user2.Name, user3.Name}).
|
||||
Preload("Toys", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Table("toys").Select("name")
|
||||
}).Count(&count12).Error; err != gorm.ErrPreloadNotAllowed {
|
||||
t.Errorf("should returns preload not allowed error, but got %v", err)
|
||||
}).Count(&count12).Error; err == nil {
|
||||
t.Errorf("error should raise when using preload without schema")
|
||||
}
|
||||
|
||||
var count13 int64
|
||||
if err := DB.Model(User{}).
|
||||
Where("name in ?", []string{user1.Name, user2.Name, user3.Name}).
|
||||
Preload("Toys", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Table("toys").Select("name")
|
||||
}).Count(&count13).Error; err != nil {
|
||||
t.Errorf("no error should raise when using count with preload, but got %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ require (
|
|||
github.com/jinzhu/now v1.1.4
|
||||
github.com/lib/pq v1.10.4
|
||||
github.com/mattn/go-sqlite3 v1.14.12 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect
|
||||
gorm.io/driver/mysql v1.3.2
|
||||
gorm.io/driver/postgres v1.3.1
|
||||
gorm.io/driver/sqlite v1.3.1
|
||||
|
|
Loading…
Reference in New Issue