diff options
| author | Andrew Pritchard <awpritchard@gmail.com> | 2012-02-08 17:14:15 +1100 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2012-02-08 17:14:15 +1100 |
| commit | cc39bb90686197e30ad103c7053aeb5cfc2efb8b (patch) | |
| tree | d4d1d2db91048ef775e72e63d5e3f214111c358f /src/pkg/database/sql/convert.go | |
| parent | 878608bd29b936b889e130b0bb81cfbc523ae233 (diff) | |
| download | go-cc39bb90686197e30ad103c7053aeb5cfc2efb8b.tar.xz | |
database/sql: treat pointers as nullable types like encoding/json
- convert from nil pointers to the nil interface{}
- dereference non-nil pointers
- convert from nil interface{}s to nil pointers
- allocate pointers for non-nil interface{}s
- tests for all of the above
R=golang-dev, bradfitz, rsc, rogpeppe
CC=golang-dev
https://golang.org/cl/5630052
Diffstat (limited to 'src/pkg/database/sql/convert.go')
| -rw-r--r-- | src/pkg/database/sql/convert.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pkg/database/sql/convert.go b/src/pkg/database/sql/convert.go index 4924ac14e4..31ff47f721 100644 --- a/src/pkg/database/sql/convert.go +++ b/src/pkg/database/sql/convert.go @@ -110,6 +110,14 @@ func convertAssign(dest, src interface{}) error { } switch dv.Kind() { + case reflect.Ptr: + if src == nil { + dv.Set(reflect.Zero(dv.Type())) + return nil + } else { + dv.Set(reflect.New(dv.Type().Elem())) + return convertAssign(dv.Interface(), src) + } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: s := asString(src) i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) |
