forked from mirror/gorm
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() {
|
func (field *Field) setupNewValuePool() {
|
||||||
var fieldValue = reflect.New(field.FieldType).Interface()
|
|
||||||
if field.Serializer != nil {
|
if field.Serializer != nil {
|
||||||
field.NewValuePool = &sync.Pool{
|
field.NewValuePool = &sync.Pool{
|
||||||
New: func() interface{} {
|
New: func() interface{} {
|
||||||
|
@ -942,31 +941,9 @@ func (field *Field) setupNewValuePool() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else if _, ok := fieldValue.(sql.Scanner); !ok {
|
|
||||||
field.setupDefaultNewValuePool()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if field.NewValuePool == nil {
|
if field.NewValuePool == nil {
|
||||||
field.NewValuePool = poolInitializer(reflect.PtrTo(field.IndirectFieldType))
|
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 (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// sync pools
|
// sync pools
|
||||||
var (
|
var (
|
||||||
normalPool sync.Map
|
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 {
|
poolInitializer = func(reflectType reflect.Type) FieldNewValuePool {
|
||||||
v, _ := normalPool.LoadOrStore(reflectType, &sync.Pool{
|
v, _ := normalPool.LoadOrStore(reflectType, &sync.Pool{
|
||||||
New: func() interface{} {
|
New: func() interface{} {
|
||||||
|
|
11
tests/go.mod
11
tests/go.mod
|
@ -5,15 +5,14 @@ go 1.14
|
||||||
require (
|
require (
|
||||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
|
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
|
||||||
github.com/google/uuid v1.3.0
|
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/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
|
github.com/mattn/go-sqlite3 v1.14.12 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
|
golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 // indirect
|
||||||
gorm.io/driver/mysql v1.3.2
|
gorm.io/driver/mysql v1.3.3
|
||||||
gorm.io/driver/postgres v1.3.1
|
gorm.io/driver/postgres v1.3.4
|
||||||
gorm.io/driver/sqlite v1.3.1
|
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
|
gorm.io/gorm v1.23.3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue