diff options
Diffstat (limited to 'src/pkg/database/sql/convert.go')
| -rw-r--r-- | src/pkg/database/sql/convert.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/pkg/database/sql/convert.go b/src/pkg/database/sql/convert.go index 5530a5d905..c04adde1fc 100644 --- a/src/pkg/database/sql/convert.go +++ b/src/pkg/database/sql/convert.go @@ -112,15 +112,13 @@ func convertAssign(dest, src interface{}) error { if d == nil { return errNilPtr } - bcopy := make([]byte, len(s)) - copy(bcopy, s) - *d = bcopy + *d = cloneBytes(s) return nil case *[]byte: if d == nil { return errNilPtr } - *d = s + *d = cloneBytes(s) return nil case *RawBytes: if d == nil { @@ -131,6 +129,12 @@ func convertAssign(dest, src interface{}) error { } case nil: switch d := dest.(type) { + case *interface{}: + if d == nil { + return errNilPtr + } + *d = nil + return nil case *[]byte: if d == nil { return errNilPtr @@ -250,6 +254,16 @@ func convertAssign(dest, src interface{}) error { return fmt.Errorf("unsupported driver -> Scan pair: %T -> %T", src, dest) } +func cloneBytes(b []byte) []byte { + if b == nil { + return nil + } else { + c := make([]byte, len(b)) + copy(c, b) + return c + } +} + func asString(src interface{}) string { switch v := src.(type) { case string: |
