aboutsummaryrefslogtreecommitdiff
path: root/src/database/sql/convert_test.go
diff options
context:
space:
mode:
authorDaniel Theophanes <kardianos@gmail.com>2017-03-30 16:03:03 -0700
committerDaniel Theophanes <kardianos@gmail.com>2017-03-31 05:02:02 +0000
commit5a45a157f2e94cb3fec38a3be8afa3bffd800067 (patch)
tree87943651501f40c7f810f2844e45ebc9f1c49716 /src/database/sql/convert_test.go
parentbfd8093c969d2b7b7e1e60866031508ea6e462d6 (diff)
downloadgo-5a45a157f2e94cb3fec38a3be8afa3bffd800067.tar.xz
database/sql: support scanning into user defined string types
User defined numeric types such as "type Int int64" have been able to be scanned into without a custom scanner by using the reflect scan code path used to convert between various numeric types. Add in a path for string types for symmetry and least surprise. Fixes #18101 Change-Id: I00553bcf021ffe6d95047eca0067ee94b54ff501 Reviewed-on: https://go-review.googlesource.com/39031 Run-TryBot: Daniel Theophanes <kardianos@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/database/sql/convert_test.go')
-rw-r--r--src/database/sql/convert_test.go13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/database/sql/convert_test.go b/src/database/sql/convert_test.go
index 4dfab1f6be..853a12ce95 100644
--- a/src/database/sql/convert_test.go
+++ b/src/database/sql/convert_test.go
@@ -17,9 +17,11 @@ import (
var someTime = time.Unix(123, 0)
var answer int64 = 42
-type userDefined float64
-
-type userDefinedSlice []int
+type (
+ userDefined float64
+ userDefinedSlice []int
+ userDefinedString string
+)
type conversionTest struct {
s, d interface{} // source and destination
@@ -39,6 +41,7 @@ type conversionTest struct {
wantptr *int64 // if non-nil, *d's pointed value must be equal to *wantptr
wantnil bool // if true, *d must be *int64(nil)
wantusrdef userDefined
+ wantusrstr userDefinedString
}
// Target variables for scanning into.
@@ -171,6 +174,7 @@ var conversionTests = []conversionTest{
{s: int64(123), d: new(userDefined), wantusrdef: 123},
{s: "1.5", d: new(userDefined), wantusrdef: 1.5},
{s: []byte{1, 2, 3}, d: new(userDefinedSlice), wanterr: `unsupported Scan, storing driver.Value type []uint8 into type *sql.userDefinedSlice`},
+ {s: "str", d: new(userDefinedString), wantusrstr: "str"},
// Other errors
{s: complex(1, 2), d: &scanstr, wanterr: `unsupported Scan, storing driver.Value type complex128 into type *string`},
@@ -260,6 +264,9 @@ func TestConversions(t *testing.T) {
if ct.wantusrdef != 0 && ct.wantusrdef != *ct.d.(*userDefined) {
errf("want userDefined %f, got %f", ct.wantusrdef, *ct.d.(*userDefined))
}
+ if len(ct.wantusrstr) != 0 && ct.wantusrstr != *ct.d.(*userDefinedString) {
+ errf("want userDefined %q, got %q", ct.wantusrstr, *ct.d.(*userDefinedString))
+ }
}
}