Remove shared sync pool for Scanner compatibility
This commit is contained in:
		
							parent
							
								
									5c9ef9a843
								
							
						
					
					
						commit
						41bef26f13
					
				| @ -932,7 +932,6 @@ func (field *Field) setupValuerAndSetter() { | ||||
| } | ||||
| 
 | ||||
| func (field *Field) setupNewValuePool() { | ||||
| 	var fieldValue = reflect.New(field.FieldType).Interface() | ||||
| 	if field.Serializer != nil { | ||||
| 		field.NewValuePool = &sync.Pool{ | ||||
| 			New: func() interface{} { | ||||
| @ -942,31 +941,9 @@ func (field *Field) setupNewValuePool() { | ||||
| 				} | ||||
| 			}, | ||||
| 		} | ||||
| 	} else if _, ok := fieldValue.(sql.Scanner); !ok { | ||||
| 		field.setupDefaultNewValuePool() | ||||
| 	} | ||||
| 
 | ||||
| 	if field.NewValuePool == nil { | ||||
| 		field.NewValuePool = poolInitializer(reflect.PtrTo(field.IndirectFieldType)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (field *Field) setupDefaultNewValuePool() { | ||||
| 	// set default NewValuePool
 | ||||
| 	switch field.IndirectFieldType.Kind() { | ||||
| 	case reflect.String: | ||||
| 		field.NewValuePool = stringPool | ||||
| 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: | ||||
| 		field.NewValuePool = intPool | ||||
| 	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: | ||||
| 		field.NewValuePool = uintPool | ||||
| 	case reflect.Float32, reflect.Float64: | ||||
| 		field.NewValuePool = floatPool | ||||
| 	case reflect.Bool: | ||||
| 		field.NewValuePool = boolPool | ||||
| 	default: | ||||
| 		if field.IndirectFieldType == TimeReflectType { | ||||
| 			field.NewValuePool = timePool | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -3,54 +3,11 @@ package schema | ||||
| import ( | ||||
| 	"reflect" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // sync pools
 | ||||
| var ( | ||||
| 	normalPool      sync.Map | ||||
| 	stringPool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v string | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	intPool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v int64 | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	uintPool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v uint64 | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	floatPool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v float64 | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	boolPool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v bool | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	timePool = &sync.Pool{ | ||||
| 		New: func() interface{} { | ||||
| 			var v time.Time | ||||
| 			ptrV := &v | ||||
| 			return &ptrV | ||||
| 		}, | ||||
| 	} | ||||
| 	poolInitializer = func(reflectType reflect.Type) FieldNewValuePool { | ||||
| 		v, _ := normalPool.LoadOrStore(reflectType, &sync.Pool{ | ||||
| 			New: func() interface{} { | ||||
|  | ||||
							
								
								
									
										11
									
								
								tests/go.mod
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								tests/go.mod
									
									
									
									
									
								
							| @ -5,15 +5,14 @@ go 1.14 | ||||
| require ( | ||||
| 	github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect | ||||
| 	github.com/google/uuid v1.3.0 | ||||
| 	github.com/jackc/pgx/v4 v4.15.0 // indirect | ||||
| 	github.com/jinzhu/now v1.1.5 | ||||
| 	github.com/lib/pq v1.10.4 | ||||
| 	github.com/lib/pq v1.10.5 | ||||
| 	github.com/mattn/go-sqlite3 v1.14.12 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect | ||||
| 	gorm.io/driver/mysql v1.3.2 | ||||
| 	gorm.io/driver/postgres v1.3.1 | ||||
| 	golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 // indirect | ||||
| 	gorm.io/driver/mysql v1.3.3 | ||||
| 	gorm.io/driver/postgres v1.3.4 | ||||
| 	gorm.io/driver/sqlite v1.3.1 | ||||
| 	gorm.io/driver/sqlserver v1.3.1 | ||||
| 	gorm.io/driver/sqlserver v1.3.2 | ||||
| 	gorm.io/gorm v1.23.3 | ||||
| ) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu