1. add structField.Offset

This commit is contained in:
bigpigeon 2017-08-23 16:37:32 +08:00
parent c3bb6aaa82
commit 1f624664c2

View File

@ -81,6 +81,7 @@ type StructField struct {
Struct reflect.StructField Struct reflect.StructField
IsForeignKey bool IsForeignKey bool
Relationship *Relationship Relationship *Relationship
Offset uintptr
} }
func (structField *StructField) clone() *StructField { func (structField *StructField) clone() *StructField {
@ -97,6 +98,7 @@ func (structField *StructField) clone() *StructField {
TagSettings: map[string]string{}, TagSettings: map[string]string{},
Struct: structField.Struct, Struct: structField.Struct,
IsForeignKey: structField.IsForeignKey, IsForeignKey: structField.IsForeignKey,
Offset: structField.Offset,
} }
if structField.Relationship != nil { if structField.Relationship != nil {
@ -167,6 +169,7 @@ func (scope *Scope) GetModelStruct() *ModelStruct {
Names: []string{fieldStruct.Name}, Names: []string{fieldStruct.Name},
Tag: fieldStruct.Tag, Tag: fieldStruct.Tag,
TagSettings: parseTagSetting(fieldStruct.Tag), TagSettings: parseTagSetting(fieldStruct.Tag),
Offset: fieldStruct.Offset,
} }
// is ignored field // is ignored field
@ -210,6 +213,7 @@ func (scope *Scope) GetModelStruct() *ModelStruct {
} else if _, ok := field.TagSettings["EMBEDDED"]; ok || fieldStruct.Anonymous { } else if _, ok := field.TagSettings["EMBEDDED"]; ok || fieldStruct.Anonymous {
// is embedded struct // is embedded struct
for _, subField := range scope.New(fieldValue).GetModelStruct().StructFields { for _, subField := range scope.New(fieldValue).GetModelStruct().StructFields {
subField.Offset += fieldStruct.Offset
subField = subField.clone() subField = subField.clone()
subField.Names = append([]string{fieldStruct.Name}, subField.Names...) subField.Names = append([]string{fieldStruct.Name}, subField.Names...)
if prefix, ok := field.TagSettings["EMBEDDED_PREFIX"]; ok { if prefix, ok := field.TagSettings["EMBEDDED_PREFIX"]; ok {