optimize: performance optimization
This commit is contained in:
		
							parent
							
								
									b9c7e562b0
								
							
						
					
					
						commit
						5f1f3f99d9
					
				| @ -448,7 +448,7 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { | ||||
| } | ||||
| 
 | ||||
| // create valuer, setter when parse struct
 | ||||
| func (field *Field) setupValuerAndSetter() { | ||||
| func (field *Field) setupValuerAndSetter(modelType reflect.Type) { | ||||
| 	// Setup NewValuePool
 | ||||
| 	field.setupNewValuePool() | ||||
| 
 | ||||
| @ -456,13 +456,22 @@ func (field *Field) setupValuerAndSetter() { | ||||
| 	fieldIndex := field.StructField.Index[0] | ||||
| 	switch { | ||||
| 	case len(field.StructField.Index) == 1 && fieldIndex >= 0: | ||||
| 		field.ValueOf = func(ctx context.Context, value reflect.Value) (interface{}, bool) { | ||||
| 			fieldValue := reflect.Indirect(value).FieldByName(field.Name) | ||||
| 		field.ValueOf = func(ctx context.Context, v reflect.Value) (interface{}, bool) { | ||||
| 			v = reflect.Indirect(v) | ||||
| 			if v.Type() != modelType { | ||||
| 				fieldValue := v.FieldByName(field.Name) | ||||
| 				return fieldValue.Interface(), fieldValue.IsZero() | ||||
| 			} | ||||
| 			fieldValue := v.Field(fieldIndex) | ||||
| 			return fieldValue.Interface(), fieldValue.IsZero() | ||||
| 		} | ||||
| 	default: | ||||
| 		field.ValueOf = func(ctx context.Context, v reflect.Value) (interface{}, bool) { | ||||
| 			v = reflect.Indirect(v) | ||||
| 			if v.Type() != modelType { | ||||
| 				fieldValue := v.FieldByName(field.Name) | ||||
| 				return fieldValue.Interface(), fieldValue.IsZero() | ||||
| 			} | ||||
| 			for _, fieldIdx := range field.StructField.Index { | ||||
| 				if fieldIdx >= 0 { | ||||
| 					v = v.Field(fieldIdx) | ||||
|  | ||||
| @ -248,7 +248,7 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 			schema.FieldsByBindName[bindName] = field | ||||
| 		} | ||||
| 
 | ||||
| 		field.setupValuerAndSetter() | ||||
| 		field.setupValuerAndSetter(modelType) | ||||
| 	} | ||||
| 
 | ||||
| 	prioritizedPrimaryField := schema.LookUpField("id") | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 贾一饼
						贾一饼