performance improve for schema
This commit is contained in:
		
							parent
							
								
									725aa5b5ff
								
							
						
					
					
						commit
						67de7a8af8
					
				| @ -94,9 +94,6 @@ func (schema *Schema) LookUpField(name string) *Field { | ||||
| //		ID string // is selected by LookUpFieldByBindName([]string{"ID"}, "ID")
 | ||||
| //	}
 | ||||
| func (schema *Schema) LookUpFieldByBindName(bindNames []string, name string) *Field { | ||||
| 	if len(bindNames) == 0 { | ||||
| 		return nil | ||||
| 	} | ||||
| 	for i := len(bindNames) - 1; i >= 0; i-- { | ||||
| 		find := strings.Join(bindNames[:i], ".") + "." + name | ||||
| 		if field, ok := schema.FieldsByBindName[find]; ok { | ||||
| @ -133,13 +130,11 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 		return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) | ||||
| 	} | ||||
| 
 | ||||
| 	value := reflect.ValueOf(dest) | ||||
| 	if value.Kind() == reflect.Ptr && value.IsNil() { | ||||
| 		value = reflect.New(value.Type().Elem()) | ||||
| 	modelType := reflect.ValueOf(dest).Type() | ||||
| 	if modelType.Kind() == reflect.Ptr { | ||||
| 		modelType = modelType.Elem() | ||||
| 	} | ||||
| 
 | ||||
| 	modelType := reflect.Indirect(value).Type() | ||||
| 
 | ||||
| 	if modelType.Kind() != reflect.Struct { | ||||
| 		if modelType.Kind() == reflect.Interface { | ||||
| 			modelType = reflect.Indirect(reflect.ValueOf(dest)).Elem().Type() | ||||
| @ -174,7 +169,7 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 
 | ||||
| 	var tableName string | ||||
| 	modelValue := reflect.New(modelType) | ||||
| 	if specialTableName != "" && specialTableName != tableName { | ||||
| 	if specialTableName != "" { | ||||
| 		tableName = specialTableName | ||||
| 	} else if en, ok := namer.(embeddedNamer); ok { | ||||
| 		tableName = en.Table | ||||
| @ -190,6 +185,8 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 		Name:             modelType.Name(), | ||||
| 		ModelType:        modelType, | ||||
| 		Table:            tableName, | ||||
| 		DBNames:          make([]string, 0, 10), | ||||
| 		Fields:           make([]*Field, 0, 10), | ||||
| 		FieldsByName:     make(map[string]*Field, 10), | ||||
| 		FieldsByBindName: make(map[string]*Field, 10), | ||||
| 		FieldsByDBName:   make(map[string]*Field, 10), | ||||
| @ -236,8 +233,9 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 				schema.FieldsByBindName[bindName] = field | ||||
| 
 | ||||
| 				if v != nil && v.PrimaryKey { | ||||
| 					// remove the existing primary key field
 | ||||
| 					for idx, f := range schema.PrimaryFields { | ||||
| 						if f == v { | ||||
| 						if f.DBName == v.DBName { | ||||
| 							schema.PrimaryFields = append(schema.PrimaryFields[0:idx], schema.PrimaryFields[idx+1:]...) | ||||
| 						} | ||||
| 					} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu