]> Cypherpunks repositories - gostls13.git/commitdiff
database/sql/driver: remove string exclusion
authorTamir Duberstein <tamird@gmail.com>
Fri, 12 Feb 2016 05:37:52 +0000 (00:37 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 23 Mar 2016 02:42:31 +0000 (02:42 +0000)
The exclusion of string from IsScanValue prevents driver authors from
writing their drivers in such a way that would allow users to
distinguish between strings and byte arrays returned from a database.
Such drivers are possible today, but require their authors to deviate
from the guidance provided by the standard library.

This exclusion has been in place since the birth of this package in
https://github.com/golang/go/commit/357f2cb1a385f4d1418e48856f9abe0cce,
but the fakedb implementation shipped in the same commit violates the
exclusion!

Strictly speaking this is a breaking change, but it increases the set
of permissible Scan types, and should not cause breakage in practice.

No test changes are necessary because fakedb already exercises this.

Fixes #6497.

Change-Id: I69dbd3a59d90464bcae8c852d7ec6c97bfd120f8
Reviewed-on: https://go-review.googlesource.com/19439
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/database/sql/driver/driver.go
src/database/sql/driver/types.go

index 70c44fb92130c79bf834ff3f08c7fad19212547a..4dba85a6d343148912d00f12456117a37c8d38ea 100644 (file)
@@ -17,7 +17,7 @@ import "errors"
 //   float64
 //   bool
 //   []byte
-//   string   [*] everywhere except from Rows.Next.
+//   string
 //   time.Time
 type Value interface{}
 
@@ -165,10 +165,6 @@ type Rows interface {
        // the provided slice. The provided slice will be the same
        // size as the Columns() are wide.
        //
-       // The dest slice may be populated only with
-       // a driver Value type, but excluding string.
-       // All string values must be converted to []byte.
-       //
        // Next should return io.EOF when there are no more rows.
        Next(dest []Value) error
 }
index fbca1ea635953033fff140227c2cc8a216e11974..e480e701a49e7c5357f59d1110169bf18cba8e0b 100644 (file)
@@ -172,28 +172,21 @@ func (n NotNull) ConvertValue(v interface{}) (Value, error) {
 }
 
 // IsValue reports whether v is a valid Value parameter type.
-// Unlike IsScanValue, IsValue permits the string type.
 func IsValue(v interface{}) bool {
-       if IsScanValue(v) {
+       if v == nil {
                return true
        }
-       if _, ok := v.(string); ok {
+       switch v.(type) {
+       case []byte, bool, float64, int64, string, time.Time:
                return true
        }
        return false
 }
 
-// IsScanValue reports whether v is a valid Value scan type.
-// Unlike IsValue, IsScanValue does not permit the string type.
+// IsScanValue is equivalent to IsValue.
+// It exists for compatibility.
 func IsScanValue(v interface{}) bool {
-       if v == nil {
-               return true
-       }
-       switch v.(type) {
-       case int64, float64, []byte, bool, time.Time:
-               return true
-       }
-       return false
+       return IsValue(v)
 }
 
 // DefaultParameterConverter is the default implementation of