fix Scanner implementation

This commit is contained in:
Pavel Merzlyakov 2022-10-03 17:42:28 +03:00
parent 99ccac5948
commit 35e0da91ca
1 changed files with 21 additions and 8 deletions

23
sql.go
View File

@ -2,23 +2,36 @@ package versioning
import ( import (
"database/sql/driver" "database/sql/driver"
"strconv"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
func (v *Version) Scan(value interface{}) error { func (v *Version) Scan(value interface{}) error {
switch code := value.(type) { var code uint32
switch val := value.(type) {
case []byte:
c, err := strconv.ParseUint(string(val), 10, 32)
if err != nil {
return errors.WithStack(err)
}
code = uint32(c)
case int64: case int64:
parsed, err := ParseFromCode(uint32(code)) code = uint32(val)
default:
return errors.Errorf("incompatible version code type - %T", value)
}
parsed, err := ParseFromCode(code)
if err != nil { if err != nil {
return err return err
} }
*v = parsed *v = parsed
return nil return nil
default:
return errors.Errorf("incompatible version code type - %T", value)
}
} }
func (v Version) Value() (driver.Value, error) { func (v Version) Value() (driver.Value, error) {