Skip to content

Commit ebfef94

Browse files
authored
Merge pull request #12 from artshmelev/kvscanner-scan-fix-bytes
[*] fix kvScanner.Scan and test on bug
2 parents 15892de + 6bb87df commit ebfef94

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

load.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ type kvScanner struct {
6868
}
6969

7070
func (kv *kvScanner) Scan(v interface{}) error {
71-
kv.m[kv.column] = v
71+
if b, ok := v.([]byte); ok {
72+
tmp := make([]byte, len(b))
73+
copy(tmp, b)
74+
kv.m[kv.column] = tmp
75+
} else {
76+
// int64, float64, bool, string, time.Time, nil
77+
kv.m[kv.column] = v
78+
}
7279
return nil
7380
}
7481

load_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ func TestLoad(t *testing.T) {
4444
}
4545
}
4646

47+
func TestLoadWithBytesValue(t *testing.T) {
48+
var values []driver.Value
49+
columns := []string{"fieldname"}
50+
value := []byte("fieldvalue")
51+
session, dbmock := newSessionMock()
52+
values = append(values, value)
53+
rows := sqlmock.NewRows(columns).AddRow(values...)
54+
dbmock.ExpectQuery("SELECT .+").WillReturnRows(rows)
55+
v := reflect.New(reflect.TypeOf(map[string]interface{}(nil))).Elem().Addr().Interface()
56+
session.Select(columns...).From("table").Load(v)
57+
value[0] = byte('a')
58+
assert.Equal(t, map[string]interface{}{"fieldname": []byte("fieldvalue")},
59+
reflect.Indirect(reflect.ValueOf(v)).Interface())
60+
}
61+
4762
func BenchmarkLoad(b *testing.B) {
4863
session, dbmock := newSessionMock()
4964
rows := sqlmock.NewRows([]string{"a", "b", "c"})

0 commit comments

Comments
 (0)