From a949e067ced1cb6e6ef5c38b6f28b074fa718f1e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 22 Nov 2014 12:23:31 +0800 Subject: [PATCH] support Find(struct1, struct2), param1 is different from param2 --- column.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/column.go b/column.go index 34223de8..18921ca7 100644 --- a/column.go +++ b/column.go @@ -1,6 +1,7 @@ package core import ( + "errors" "fmt" "reflect" "strings" @@ -116,7 +117,6 @@ func (col *Column) ValueOf(bean interface{}) (*reflect.Value, error) { func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { var fieldValue reflect.Value - var err error if col.fieldPath == nil { col.fieldPath = strings.Split(col.FieldName, ".") } @@ -137,18 +137,21 @@ func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { if parentField.IsValid() { fieldValue = parentField.FieldByName(col.fieldPath[1]) } else { - err = fmt.Errorf("field %v is not valid", col.FieldName) + return nil, fmt.Errorf("field %v is not valid", col.FieldName) } } } } else { - err = fmt.Errorf("field %v is not valid", col.FieldName) + // so we can use a different struct as conditions + fieldValue = dataStruct.FieldByName(col.fieldPath[1]) } } else { - err = fmt.Errorf("Unsupported mutliderive %v", col.FieldName) + return nil, fmt.Errorf("Unsupported mutliderive %v", col.FieldName) } - if err != nil { - return nil, err + + if !fieldValue.IsValid() { + return nil, errors.New("no find field matched") } + return &fieldValue, nil }