forked from mirror/gorm
Only query with readable fields
This commit is contained in:
parent
cb5a35a807
commit
9bfe306975
|
@ -271,6 +271,7 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) (c
|
||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for _, field := range s.Fields {
|
for _, field := range s.Fields {
|
||||||
|
if field.Readable {
|
||||||
if v, isZero := field.ValueOf(reflectValue); !isZero {
|
if v, isZero := field.ValueOf(reflectValue); !isZero {
|
||||||
if field.DBName == "" {
|
if field.DBName == "" {
|
||||||
conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v})
|
conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v})
|
||||||
|
@ -279,9 +280,11 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) (c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
for i := 0; i < reflectValue.Len(); i++ {
|
for i := 0; i < reflectValue.Len(); i++ {
|
||||||
for _, field := range s.Fields {
|
for _, field := range s.Fields {
|
||||||
|
if field.Readable {
|
||||||
if v, isZero := field.ValueOf(reflectValue.Index(i)); !isZero {
|
if v, isZero := field.ValueOf(reflectValue.Index(i)); !isZero {
|
||||||
if field.DBName == "" {
|
if field.DBName == "" {
|
||||||
conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v})
|
conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v})
|
||||||
|
@ -292,6 +295,7 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) (c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if len(conds) == 0 {
|
} else if len(conds) == 0 {
|
||||||
conds = append(conds, clause.IN{Column: clause.PrimaryColumn, Values: args})
|
conds = append(conds, clause.IN{Column: clause.PrimaryColumn, Values: args})
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,10 +134,18 @@ func TestCustomizeField(t *testing.T) {
|
||||||
t.Fatalf("invalid updated result: %#v", result2)
|
t.Fatalf("invalid updated result: %#v", result2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := DB.Where(CustomizeFieldStruct{Name: create.Name, FieldReadonly: create.FieldReadonly, FieldIgnore: create.FieldIgnore}).First(&CustomizeFieldStruct{}).Error; err == nil {
|
||||||
|
t.Fatalf("Should failed to find result")
|
||||||
|
}
|
||||||
|
|
||||||
if err := DB.Table("customize_field_structs").Where("1 = 1").UpdateColumn("field_readonly", "readonly").Error; err != nil {
|
if err := DB.Table("customize_field_structs").Where("1 = 1").UpdateColumn("field_readonly", "readonly").Error; err != nil {
|
||||||
t.Fatalf("failed to update field_readonly column")
|
t.Fatalf("failed to update field_readonly column")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := DB.Where(CustomizeFieldStruct{Name: create.Name, FieldReadonly: "readonly", FieldIgnore: create.FieldIgnore}).First(&CustomizeFieldStruct{}).Error; err != nil {
|
||||||
|
t.Fatalf("Should find result")
|
||||||
|
}
|
||||||
|
|
||||||
var result3 CustomizeFieldStruct
|
var result3 CustomizeFieldStruct
|
||||||
DB.Find(&result3, "name = ?", "create")
|
DB.Find(&result3, "name = ?", "create")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue