@@ -267,6 +267,20 @@ func TestUnmarshalRowStruct(t *testing.T) {
267267 }, "select name, age from users where user=?" , "anyone" ), ErrNotMatchDestination )
268268 })
269269
270+ dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
271+ value := new (struct {
272+ Name string
273+ age int
274+ })
275+
276+ rs := sqlmock .NewRows ([]string {"name" , "age" }).FromCSVString ("liao,5" )
277+ mock .ExpectQuery ("select (.+) from users where user=?" ).WithArgs ("anyone" ).WillReturnRows (rs )
278+
279+ assert .ErrorIs (t , query (context .Background (), db , func (rows * sql.Rows ) error {
280+ return unmarshalRow (value , rows , true )
281+ }, "select name, age from users where user=?" , "anyone" ), ErrNotMatchDestination )
282+ })
283+
270284 dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
271285 rs := sqlmock .NewRows ([]string {"value" }).FromCSVString ("8" )
272286 mock .ExpectQuery ("select (.+) from users where user=?" ).WithArgs ("anyone" ).WillReturnRows (rs )
@@ -310,6 +324,20 @@ func TestUnmarshalRowStructWithTags(t *testing.T) {
310324 }, "select name, age from users where user=?" , "anyone" ), ErrNotReadableValue )
311325 })
312326
327+ dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
328+ value := new (struct {
329+ age int `db:"age"`
330+ Name string `db:"name"`
331+ })
332+
333+ rs := sqlmock .NewRows ([]string {"name" , "age" }).FromCSVString ("liao,5" )
334+ mock .ExpectQuery ("select (.+) from users where user=?" ).WithArgs ("anyone" ).WillReturnRows (rs )
335+
336+ assert .ErrorIs (t , query (context .Background (), db , func (rows * sql.Rows ) error {
337+ return unmarshalRow (value , rows , true )
338+ }, "select name, age from users where user=?" , "anyone" ), ErrNotReadableValue )
339+ })
340+
313341 dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
314342 var value struct {
315343 Age * int `db:"age"`
@@ -1307,25 +1335,65 @@ func TestAnonymousStructPr(t *testing.T) {
13071335}
13081336
13091337func TestAnonymousStructPrError (t * testing.T ) {
1310- type Score struct {
1311- Discipline string `db:"discipline"`
1312- score uint `db:"score"`
1313- }
1314- type ClassType struct {
1315- Grade sql.NullString `db:"grade"`
1316- ClassName * string `db:"class_name"`
1317- }
1318- type Class struct {
1319- * ClassType
1320- Score
1321- }
1322- var value []* struct {
1323- Age int64 `db:"age"`
1324- Class
1325- Name string `db:"name"`
1326- }
1338+ dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
1339+ type Score struct {
1340+ Discipline string `db:"discipline"`
1341+ score uint `db:"score"`
1342+ }
1343+ type ClassType struct {
1344+ Grade sql.NullString `db:"grade"`
1345+ ClassName * string `db:"class_name"`
1346+ }
1347+ type Class struct {
1348+ * ClassType
1349+ Score
1350+ }
1351+
1352+ var value []* struct {
1353+ Age int64 `db:"age"`
1354+ Class
1355+ Name string `db:"name"`
1356+ }
1357+ rs := sqlmock .NewRows ([]string {
1358+ "name" ,
1359+ "age" ,
1360+ "grade" ,
1361+ "discipline" ,
1362+ "class_name" ,
1363+ "score" ,
1364+ }).
1365+ AddRow ("first" , 2 , nil , "math" , "experimental class" , 100 ).
1366+ AddRow ("second" , 3 , "grade one" , "chinese" , "class three grade two" , 99 )
1367+ mock .ExpectQuery ("select (.+) from users where user=?" ).
1368+ WithArgs ("anyone" ).WillReturnRows (rs )
1369+ assert .ErrorIs (t , query (context .Background (), db , func (rows * sql.Rows ) error {
1370+ return unmarshalRows (& value , rows , true )
1371+ }, "select name, age, grade, discipline, class_name, score from users where user=?" ,
1372+ "anyone" ), ErrNotReadableValue )
1373+ if len (value ) > 0 {
1374+ assert .Equal (t , value [0 ].score , 0 )
1375+ }
1376+ })
13271377
13281378 dbtest .RunTest (t , func (db * sql.DB , mock sqlmock.Sqlmock ) {
1379+ type Score struct {
1380+ Discipline string
1381+ score uint
1382+ }
1383+ type ClassType struct {
1384+ Grade sql.NullString
1385+ ClassName * string
1386+ }
1387+ type Class struct {
1388+ * ClassType
1389+ Score
1390+ }
1391+
1392+ var value []* struct {
1393+ Age int64
1394+ Class
1395+ Name string
1396+ }
13291397 rs := sqlmock .NewRows ([]string {
13301398 "name" ,
13311399 "age" ,
@@ -1338,10 +1406,10 @@ func TestAnonymousStructPrError(t *testing.T) {
13381406 AddRow ("second" , 3 , "grade one" , "chinese" , "class three grade two" , 99 )
13391407 mock .ExpectQuery ("select (.+) from users where user=?" ).
13401408 WithArgs ("anyone" ).WillReturnRows (rs )
1341- assert .Error (t , query (context .Background (), db , func (rows * sql.Rows ) error {
1409+ assert .ErrorIs (t , query (context .Background (), db , func (rows * sql.Rows ) error {
13421410 return unmarshalRows (& value , rows , true )
13431411 }, "select name, age, grade, discipline, class_name, score from users where user=?" ,
1344- "anyone" ))
1412+ "anyone" ), ErrNotMatchDestination )
13451413 if len (value ) > 0 {
13461414 assert .Equal (t , value [0 ].score , 0 )
13471415 }
0 commit comments