From 73cc117a9f7a623ced1fdaedb4546e8e7470e4d3 Mon Sep 17 00:00:00 2001 From: Vladimir Mihailenco Date: Mon, 27 Dec 2021 09:43:19 +0200 Subject: [PATCH] fix: support scanning string into uint64 --- query_base.go | 3 ++- schema/scan.go | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/query_base.go b/query_base.go index 8b78d25e1..dd4aeb1a6 100644 --- a/query_base.go +++ b/query_base.go @@ -109,7 +109,8 @@ func (q *baseQuery) GetTableName() string { return string(b) } if len(q.tables) > 0 { - return q.tables[0].Query + b, _ := q.tables[0].AppendQuery(q.db.fmter, nil) + return string(b) } return "" } diff --git a/schema/scan.go b/schema/scan.go index 30abcfc35..587c386b1 100644 --- a/schema/scan.go +++ b/schema/scan.go @@ -134,10 +134,19 @@ func scanBool(dest reflect.Value, src interface{}) error { dest.SetBool(src != 0) return nil case []byte: - if len(src) == 1 { - dest.SetBool(src[0] != '0') - return nil + f, err := strconv.ParseBool(internal.String(src)) + if err != nil { + return err } + dest.SetBool(f) + return nil + case string: + f, err := strconv.ParseBool(src) + if err != nil { + return err + } + dest.SetBool(f) + return nil } return fmt.Errorf("bun: can't scan %#v into %s", src, dest.Type()) } @@ -189,6 +198,13 @@ func scanUint64(dest reflect.Value, src interface{}) error { } dest.SetUint(n) return nil + case string: + n, err := strconv.ParseUint(src, 10, 64) + if err != nil { + return err + } + dest.SetUint(n) + return nil } return fmt.Errorf("bun: can't scan %#v into %s", src, dest.Type()) } @@ -208,6 +224,13 @@ func scanFloat64(dest reflect.Value, src interface{}) error { } dest.SetFloat(f) return nil + case string: + f, err := strconv.ParseFloat(src, 64) + if err != nil { + return err + } + dest.SetFloat(f) + return nil } return fmt.Errorf("bun: can't scan %#v into %s", src, dest.Type()) }