@@ -2,6 +2,7 @@ package value
22
33import (
44 "database/sql/driver"
5+ "errors"
56 "reflect"
67 "testing"
78 "time"
@@ -32,12 +33,32 @@ func loadLocation(t *testing.T, name string) *time.Location {
3233 return loc
3334}
3435
35- type testStringValueScanner struct {
36- field string
37- }
36+ type testStringValueScanner string
3837
3938func (s * testStringValueScanner ) UnmarshalYDBValue (v Value ) error {
40- return CastTo (v , & s .field )
39+ var tmp string
40+
41+ err := CastTo (v , & tmp )
42+ if err != nil {
43+ return err
44+ }
45+
46+ * s = testStringValueScanner (tmp )
47+
48+ return nil
49+ }
50+
51+ type testStringSqlScanner string
52+
53+ func (s * testStringSqlScanner ) Scan (value any ) error {
54+ ts , ok := value .(string )
55+ if ! ok {
56+ return errors .New ("can't cast from " + reflect .TypeOf (value ).String () + " to string" )
57+ }
58+
59+ * s = testStringSqlScanner (ts )
60+
61+ return nil
4162}
4263
4364func TestCastTo (t * testing.T ) {
@@ -440,7 +461,14 @@ func TestCastTo(t *testing.T) {
440461 name : xtest .CurrentFileLine (),
441462 value : TextValue ("text-string" ),
442463 dst : ptr [testStringValueScanner ](),
443- exp : testStringValueScanner {field : "text-string" },
464+ exp : testStringValueScanner ("text-string" ),
465+ err : nil ,
466+ },
467+ {
468+ name : xtest .CurrentFileLine (),
469+ value : TextValue ("text-string" ),
470+ dst : ptr [testStringSqlScanner ](),
471+ exp : testStringSqlScanner ("text-string" ),
444472 err : nil ,
445473 },
446474 }
0 commit comments