summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/schema/append_value.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema/append_value.go')
-rw-r--r--vendor/github.com/uptrace/bun/schema/append_value.go29
1 files changed, 14 insertions, 15 deletions
diff --git a/vendor/github.com/uptrace/bun/schema/append_value.go b/vendor/github.com/uptrace/bun/schema/append_value.go
index 9f0782e0f..a67b41e38 100644
--- a/vendor/github.com/uptrace/bun/schema/append_value.go
+++ b/vendor/github.com/uptrace/bun/schema/append_value.go
@@ -7,9 +7,9 @@ import (
"reflect"
"strconv"
"strings"
- "sync"
"time"
+ "github.com/puzpuzpuz/xsync/v3"
"github.com/uptrace/bun/dialect"
"github.com/uptrace/bun/dialect/sqltype"
"github.com/uptrace/bun/extra/bunjson"
@@ -51,7 +51,7 @@ var appenders = []AppenderFunc{
reflect.UnsafePointer: nil,
}
-var appenderMap sync.Map
+var appenderCache = xsync.NewMapOf[reflect.Type, AppenderFunc]()
func FieldAppender(dialect Dialect, field *Field) AppenderFunc {
if field.Tag.HasOption("msgpack") {
@@ -67,7 +67,7 @@ func FieldAppender(dialect Dialect, field *Field) AppenderFunc {
}
if fieldType.Kind() != reflect.Ptr {
- if reflect.PtrTo(fieldType).Implements(driverValuerType) {
+ if reflect.PointerTo(fieldType).Implements(driverValuerType) {
return addrAppender(appendDriverValue)
}
}
@@ -79,14 +79,14 @@ func FieldAppender(dialect Dialect, field *Field) AppenderFunc {
}
func Appender(dialect Dialect, typ reflect.Type) AppenderFunc {
- if v, ok := appenderMap.Load(typ); ok {
- return v.(AppenderFunc)
+ if v, ok := appenderCache.Load(typ); ok {
+ return v
}
fn := appender(dialect, typ)
- if v, ok := appenderMap.LoadOrStore(typ, fn); ok {
- return v.(AppenderFunc)
+ if v, ok := appenderCache.LoadOrStore(typ, fn); ok {
+ return v
}
return fn
}
@@ -99,10 +99,10 @@ func appender(dialect Dialect, typ reflect.Type) AppenderFunc {
return appendTimeValue
case timePtrType:
return PtrAppender(appendTimeValue)
- case ipType:
- return appendIPValue
case ipNetType:
return appendIPNetValue
+ case ipType, netipPrefixType, netipAddrType:
+ return appendStringer
case jsonRawMessageType:
return appendJSONRawMessageValue
}
@@ -123,7 +123,7 @@ func appender(dialect Dialect, typ reflect.Type) AppenderFunc {
}
if kind != reflect.Ptr {
- ptr := reflect.PtrTo(typ)
+ ptr := reflect.PointerTo(typ)
if ptr.Implements(queryAppenderType) {
return addrAppender(appendQueryAppenderValue)
}
@@ -247,16 +247,15 @@ func appendTimeValue(fmter Formatter, b []byte, v reflect.Value) []byte {
return fmter.Dialect().AppendTime(b, tm)
}
-func appendIPValue(fmter Formatter, b []byte, v reflect.Value) []byte {
- ip := v.Interface().(net.IP)
- return fmter.Dialect().AppendString(b, ip.String())
-}
-
func appendIPNetValue(fmter Formatter, b []byte, v reflect.Value) []byte {
ipnet := v.Interface().(net.IPNet)
return fmter.Dialect().AppendString(b, ipnet.String())
}
+func appendStringer(fmter Formatter, b []byte, v reflect.Value) []byte {
+ return fmter.Dialect().AppendString(b, v.Interface().(fmt.Stringer).String())
+}
+
func appendJSONRawMessageValue(fmter Formatter, b []byte, v reflect.Value) []byte {
bytes := v.Bytes()
if bytes == nil {