mirror of
https://github.com/google/uuid.git
synced 2025-02-18 12:24:00 +02:00
Merge pull request #15 from jboverfelt/sql-byte-scan
Attempt to scan []byte uuids larger than 16 bytes. Fixes #12
This commit is contained in:
commit
dee7705ef7
18
sql.go
18
sql.go
@ -24,14 +24,22 @@ func (uuid *UUID) Scan(src interface{}) error {
|
||||
|
||||
*uuid = parsed
|
||||
case []byte:
|
||||
// assumes a simple slice of bytes, just check validity and store
|
||||
u := UUID(src.([]byte))
|
||||
b := src.([]byte)
|
||||
|
||||
if u.Variant() == Invalid {
|
||||
return errors.New("Scan: invalid UUID format")
|
||||
// assumes a simple slice of bytes if 16 bytes
|
||||
// otherwise attempts to parse
|
||||
if len(b) == 16 {
|
||||
*uuid = UUID(b)
|
||||
} else {
|
||||
u := Parse(string(b))
|
||||
|
||||
if u == nil {
|
||||
return errors.New("Scan: invalid UUID format")
|
||||
}
|
||||
|
||||
*uuid = u
|
||||
}
|
||||
|
||||
*uuid = u
|
||||
default:
|
||||
return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
|
||||
}
|
||||
|
@ -22,6 +22,11 @@ func TestScan(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = (&uuid).Scan([]byte(stringTest))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = (&uuid).Scan(byteTest)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
Loading…
x
Reference in New Issue
Block a user