Fix BPChar.AssignTo **rune

https://github.com/jackc/pgtype/issues/123
non-blocking
Jack Christensen 2021-09-25 09:25:01 -05:00
parent 693c7c7f7d
commit 0b5b7c0d1e
1 changed files with 19 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package pgtype
import ( import (
"database/sql/driver" "database/sql/driver"
"fmt"
) )
// BPChar is fixed-length, blank padded char type // BPChar is fixed-length, blank padded char type
@ -20,7 +21,8 @@ func (dst BPChar) Get() interface{} {
// AssignTo assigns from src to dst. // AssignTo assigns from src to dst.
func (src *BPChar) AssignTo(dst interface{}) error { func (src *BPChar) AssignTo(dst interface{}) error {
if src.Status == Present { switch src.Status {
case Present:
switch v := dst.(type) { switch v := dst.(type) {
case *rune: case *rune:
runes := []rune(src.String) runes := []rune(src.String)
@ -28,9 +30,24 @@ func (src *BPChar) AssignTo(dst interface{}) error {
*v = runes[0] *v = runes[0]
return nil return nil
} }
case *string:
*v = src.String
return nil
case *[]byte:
*v = make([]byte, len(src.String))
copy(*v, src.String)
return nil
default:
if nextDst, retry := GetAssignToDstType(dst); retry {
return src.AssignTo(nextDst)
} }
return fmt.Errorf("unable to assign to %T", dst)
} }
return (*Text)(src).AssignTo(dst) case Null:
return NullAssignTo(dst)
}
return fmt.Errorf("cannot decode %#v into %T", src, dst)
} }
func (BPChar) PreferredResultFormat() int16 { func (BPChar) PreferredResultFormat() int16 {