Only query with readable fields
This commit is contained in:
		
							parent
							
								
									d5d31b38a7
								
							
						
					
					
						commit
						eeee014500
					
				
							
								
								
									
										24
									
								
								statement.go
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								statement.go
									
									
									
									
									
								
							| @ -271,22 +271,26 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) (c | ||||
| 				switch reflectValue.Kind() { | ||||
| 				case reflect.Struct: | ||||
| 					for _, field := range s.Fields { | ||||
| 						if v, isZero := field.ValueOf(reflectValue); !isZero { | ||||
| 							if field.DBName == "" { | ||||
| 								conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v}) | ||||
| 							} else { | ||||
| 								conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.DBName}, Value: v}) | ||||
| 						if field.Readable { | ||||
| 							if v, isZero := field.ValueOf(reflectValue); !isZero { | ||||
| 								if field.DBName == "" { | ||||
| 									conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v}) | ||||
| 								} else { | ||||
| 									conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.DBName}, Value: v}) | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				case reflect.Slice, reflect.Array: | ||||
| 					for i := 0; i < reflectValue.Len(); i++ { | ||||
| 						for _, field := range s.Fields { | ||||
| 							if v, isZero := field.ValueOf(reflectValue.Index(i)); !isZero { | ||||
| 								if field.DBName == "" { | ||||
| 									conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v}) | ||||
| 								} else { | ||||
| 									conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.DBName}, Value: v}) | ||||
| 							if field.Readable { | ||||
| 								if v, isZero := field.ValueOf(reflectValue.Index(i)); !isZero { | ||||
| 									if field.DBName == "" { | ||||
| 										conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.Name}, Value: v}) | ||||
| 									} else { | ||||
| 										conds = append(conds, clause.Eq{Column: clause.Column{Table: s.Table, Name: field.DBName}, Value: v}) | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
|  | ||||
| @ -134,10 +134,18 @@ func TestCustomizeField(t *testing.T) { | ||||
| 		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 { | ||||
| 		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 | ||||
| 	DB.Find(&result3, "name = ?", "create") | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu