aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/database/sql/convert.go
diff options
context:
space:
mode:
authorAndrew Pritchard <awpritchard@gmail.com>2012-02-08 17:14:15 +1100
committerBrad Fitzpatrick <bradfitz@golang.org>2012-02-08 17:14:15 +1100
commitcc39bb90686197e30ad103c7053aeb5cfc2efb8b (patch)
treed4d1d2db91048ef775e72e63d5e3f214111c358f /src/pkg/database/sql/convert.go
parent878608bd29b936b889e130b0bb81cfbc523ae233 (diff)
downloadgo-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.go8
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())