extends unlimit levels support
This commit is contained in:
parent
286763cd3a
commit
acb6f00daf
54
column.go
54
column.go
|
@ -1,7 +1,6 @@
|
||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -122,50 +121,31 @@ func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if dataStruct.Type().Kind() == reflect.Map {
|
if dataStruct.Type().Kind() == reflect.Map {
|
||||||
var keyValue reflect.Value
|
keyValue := reflect.ValueOf(col.fieldPath[len(col.fieldPath)-1])
|
||||||
|
|
||||||
if len(col.fieldPath) == 1 {
|
|
||||||
keyValue = reflect.ValueOf(col.FieldName)
|
|
||||||
} else if len(col.fieldPath) == 2 {
|
|
||||||
keyValue = reflect.ValueOf(col.fieldPath[1])
|
|
||||||
} else {
|
|
||||||
return nil, fmt.Errorf("Unsupported mutliderive %v", col.FieldName)
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldValue = dataStruct.MapIndex(keyValue)
|
fieldValue = dataStruct.MapIndex(keyValue)
|
||||||
return &fieldValue, nil
|
return &fieldValue, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(col.fieldPath) == 1 {
|
level := len(col.fieldPath)
|
||||||
fieldValue = dataStruct.FieldByName(col.FieldName)
|
fieldValue = dataStruct.FieldByName(col.fieldPath[0])
|
||||||
} else if len(col.fieldPath) == 2 {
|
for i := 0; i < level-1; i++ {
|
||||||
parentField := dataStruct.FieldByName(col.fieldPath[0])
|
if !fieldValue.IsValid() {
|
||||||
if parentField.IsValid() {
|
break
|
||||||
if parentField.Kind() == reflect.Struct {
|
}
|
||||||
fieldValue = parentField.FieldByName(col.fieldPath[1])
|
if fieldValue.Kind() == reflect.Struct {
|
||||||
} else if parentField.Kind() == reflect.Ptr {
|
fieldValue = fieldValue.FieldByName(col.fieldPath[i+1])
|
||||||
if parentField.IsNil() {
|
} else if fieldValue.Kind() == reflect.Ptr {
|
||||||
parentField.Set(reflect.New(parentField.Type().Elem()))
|
if fieldValue.IsNil() {
|
||||||
fieldValue = parentField.Elem().FieldByName(col.fieldPath[1])
|
fieldValue.Set(reflect.New(fieldValue.Type().Elem()))
|
||||||
} else {
|
}
|
||||||
parentField = parentField.Elem()
|
fieldValue = fieldValue.Elem().FieldByName(col.fieldPath[i+1])
|
||||||
if parentField.IsValid() {
|
} else {
|
||||||
fieldValue = parentField.FieldByName(col.fieldPath[1])
|
return nil, fmt.Errorf("field %v is not valid", col.FieldName)
|
||||||
} else {
|
|
||||||
return nil, fmt.Errorf("field %v is not valid", col.FieldName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// so we can use a different struct as conditions
|
|
||||||
fieldValue = dataStruct.FieldByName(col.fieldPath[1])
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return nil, fmt.Errorf("Unsupported mutliderive %v", col.FieldName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fieldValue.IsValid() {
|
if !fieldValue.IsValid() {
|
||||||
return nil, errors.New("no find field matched")
|
return nil, fmt.Errorf("field %v is not valid", col.FieldName)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &fieldValue, nil
|
return &fieldValue, nil
|
||||||
|
|
Loading…
Reference in New Issue