diff options
Diffstat (limited to 'src/database/sql/sql.go')
| -rw-r--r-- | src/database/sql/sql.go | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index b7cf3d12fa..eddb647ed0 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -410,6 +410,8 @@ func (n NullTime) Value() (driver.Value, error) { // } else { // // NULL value // } +// +// T should be one of the types accepted by [driver.Value]. type Null[T any] struct { V T Valid bool @@ -428,7 +430,17 @@ func (n Null[T]) Value() (driver.Value, error) { if !n.Valid { return nil, nil } - return n.V, nil + v := any(n.V) + // See issue 69728. + if valuer, ok := v.(driver.Valuer); ok { + val, err := callValuerValue(valuer) + if err != nil { + return val, err + } + v = val + } + // See issue 69837. + return driver.DefaultParameterConverter.ConvertValue(v) } // Scanner is an interface used by [Rows.Scan]. |
