|
@@ -53,22 +53,21 @@ func (schema Schema) LookUpField(name string) *Field {
|
|
|
}
|
|
|
|
|
|
// get data type from dialector
|
|
|
-func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, reflect.Value, error) {
|
|
|
- reflectValue := reflect.ValueOf(dest)
|
|
|
- modelType := reflectValue.Type()
|
|
|
+func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) {
|
|
|
+ modelType := reflect.ValueOf(dest).Type()
|
|
|
for modelType.Kind() == reflect.Slice || modelType.Kind() == reflect.Ptr {
|
|
|
modelType = modelType.Elem()
|
|
|
}
|
|
|
|
|
|
if modelType.Kind() != reflect.Struct {
|
|
|
if modelType.PkgPath() == "" {
|
|
|
- return nil, reflectValue, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest)
|
|
|
+ return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest)
|
|
|
}
|
|
|
- return nil, reflectValue, fmt.Errorf("%w: %v.%v", ErrUnsupportedDataType, modelType.PkgPath(), modelType.Name())
|
|
|
+ return nil, fmt.Errorf("%w: %v.%v", ErrUnsupportedDataType, modelType.PkgPath(), modelType.Name())
|
|
|
}
|
|
|
|
|
|
if v, ok := cacheStore.Load(modelType); ok {
|
|
|
- return v.(*Schema), reflectValue, nil
|
|
|
+ return v.(*Schema), nil
|
|
|
}
|
|
|
|
|
|
schema := &Schema{
|
|
@@ -167,6 +166,7 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, reflec
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ reflectValue := reflect.Indirect(reflect.New(modelType))
|
|
|
callbacks := []string{"BeforeCreate", "AfterCreate", "BeforeUpdate", "AfterUpdate", "BeforeSave", "AfterSave", "BeforeDelete", "AfterDelete", "AfterFind"}
|
|
|
for _, name := range callbacks {
|
|
|
if methodValue := reflectValue.MethodByName(name); methodValue.IsValid() {
|
|
@@ -185,10 +185,10 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, reflec
|
|
|
for _, field := range schema.Fields {
|
|
|
if field.DataType == "" && field.Creatable {
|
|
|
if schema.parseRelation(field); schema.err != nil {
|
|
|
- return schema, reflectValue, schema.err
|
|
|
+ return schema, schema.err
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return schema, reflectValue, schema.err
|
|
|
+ return schema, schema.err
|
|
|
}
|