MCPcopy
hub / github.com/jackc/pgx / isNilDriverValuer

Function isNilDriverValuer

pgtype/pgtype.go:2040–2067  ·  view source on GitHub ↗

isNilDriverValuer returns true if value is any type of nil unless it implements driver.Valuer. *T is not considered to implement driver.Valuer if it is only implemented by T.

(value any)

Source from the content-addressed store, hash-verified

2038// isNilDriverValuer returns true if value is any type of nil unless it implements driver.Valuer. *T is not considered to implement
2039// driver.Valuer if it is only implemented by T.
2040func isNilDriverValuer(value any) (isNil, callNilDriverValuer bool) {
2041 if value == nil {
2042 return true, false
2043 }
2044
2045 refVal := reflect.ValueOf(value)
2046 kind := refVal.Kind()
2047 switch kind {
2048 case reflect.Chan, reflect.Func, reflect.Map, reflect.Pointer, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
2049 if !refVal.IsNil() {
2050 return false, false
2051 }
2052
2053 if _, ok := value.(driver.Valuer); ok {
2054 if kind == reflect.Pointer {
2055 // The type assertion will succeed if driver.Valuer is implemented on T or *T. Check if it is implemented on *T
2056 // by checking if it is not implemented on *T.
2057 return true, !refVal.Type().Elem().Implements(valuerReflectType)
2058 } else {
2059 return true, true
2060 }
2061 }
2062
2063 return true, false
2064 default:
2065 return false, false
2066 }
2067}

Callers 6

EncodeMethod · 0.85
AppendValueMethod · 0.85
AppendValueMethod · 0.85
EncodeMethod · 0.85
EncodeMethod · 0.85
PlanScanMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected