Merge pull request #1 from jinzhu/master

Merge from base repo
This commit is contained in:
Artemij Shepelev 2018-08-28 01:41:35 +03:00 committed by GitHub
commit b204f8f5c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 5 deletions

View File

@ -14,8 +14,14 @@ func preloadCallback(scope *Scope) {
return return
} }
if _, ok := scope.Get("gorm:auto_preload"); ok { if ap, ok := scope.Get("gorm:auto_preload"); ok {
autoPreload(scope) // If gorm:auto_preload IS NOT a bool then auto preload.
// Else if it IS a bool, use the value
if apb, ok := ap.(bool); !ok {
autoPreload(scope)
} else if apb {
autoPreload(scope)
}
} }
if scope.Search.preload == nil || scope.HasError() { if scope.Search.preload == nil || scope.HasError() {

View File

@ -6,7 +6,7 @@ import (
) )
var ( var (
// ErrRecordNotFound record not found error, happens when haven't find any matched data when looking up with a struct // ErrRecordNotFound record not found error, happens when only haven't find any matched data when looking up with a struct, finding a slice won't return this error
ErrRecordNotFound = errors.New("record not found") ErrRecordNotFound = errors.New("record not found")
// ErrInvalidSQL invalid SQL error, happens when you passed invalid SQL // ErrInvalidSQL invalid SQL error, happens when you passed invalid SQL
ErrInvalidSQL = errors.New("invalid SQL") ErrInvalidSQL = errors.New("invalid SQL")

View File

@ -123,6 +123,31 @@ func TestAutoPreload(t *testing.T) {
} }
} }
func TestAutoPreloadFalseDoesntPreload(t *testing.T) {
user1 := getPreloadUser("auto_user1")
DB.Save(user1)
preloadDB := DB.Set("gorm:auto_preload", false).Where("role = ?", "Preload")
var user User
preloadDB.Find(&user)
if user.BillingAddress.Address1 != "" {
t.Error("AutoPreload was set to fasle, but still fetched data")
}
user2 := getPreloadUser("auto_user2")
DB.Save(user2)
var users []User
preloadDB.Find(&users)
for _, user := range users {
if user.BillingAddress.Address1 != "" {
t.Error("AutoPreload was set to fasle, but still fetched data")
}
}
}
func TestNestedPreload1(t *testing.T) { func TestNestedPreload1(t *testing.T) {
type ( type (
Level1 struct { Level1 struct {

View File

@ -586,10 +586,10 @@ func (scope *Scope) buildCondition(clause map[string]interface{}, include bool)
scope.Err(fmt.Errorf("invalid query condition: %v", value)) scope.Err(fmt.Errorf("invalid query condition: %v", value))
return return
} }
scopeQuotedTableName := newScope.QuotedTableName()
for _, field := range newScope.Fields() { for _, field := range newScope.Fields() {
if !field.IsIgnored && !field.IsBlank { if !field.IsIgnored && !field.IsBlank {
sqls = append(sqls, fmt.Sprintf("(%v.%v %s %v)", quotedTableName, scope.Quote(field.DBName), equalSQL, scope.AddToVars(field.Field.Interface()))) sqls = append(sqls, fmt.Sprintf("(%v.%v %s %v)", scopeQuotedTableName, scope.Quote(field.DBName), equalSQL, scope.AddToVars(field.Field.Interface())))
} }
} }
return strings.Join(sqls, " AND ") return strings.Join(sqls, " AND ")