@@ -290,20 +290,18 @@ func TestSelector_Get_baseType(t *testing.T) {
290
290
291
291
testCases := []struct {
292
292
name string
293
- queryRes func (t * testing.T ) any
293
+ queryRes func (t * testing.T ) ( any , error )
294
294
mockErr error
295
295
mockOrder func (mock sqlmock.Sqlmock )
296
- wantErr error
296
+ wantErr string
297
297
wantVal any
298
298
}{
299
299
{
300
300
name : "res int" ,
301
- queryRes : func (t * testing.T ) any {
301
+ queryRes : func (t * testing.T ) ( any , error ) {
302
302
tm := TableOf (& TestModel {}, "t1" )
303
303
queryer := NewSelector [int ](db ).Select (C ("Age" )).From (tm )
304
- result , err := queryer .Get (context .Background ())
305
- require .NoError (t , err )
306
- return result
304
+ return queryer .Get (context .Background ())
307
305
},
308
306
mockOrder : func (mock sqlmock.Sqlmock ) {
309
307
rows := mock .NewRows ([]string {"age" }).AddRow (10 )
@@ -318,12 +316,10 @@ func TestSelector_Get_baseType(t *testing.T) {
318
316
},
319
317
{
320
318
name : "res int32" ,
321
- queryRes : func (t * testing.T ) any {
319
+ queryRes : func (t * testing.T ) ( any , error ) {
322
320
tm := TableOf (& TestModel {}, "t1" )
323
321
queryer := NewSelector [int32 ](db ).Select (C ("Age" )).From (tm )
324
- result , err := queryer .Get (context .Background ())
325
- require .NoError (t , err )
326
- return result
322
+ return queryer .Get (context .Background ())
327
323
},
328
324
mockOrder : func (mock sqlmock.Sqlmock ) {
329
325
rows := mock .NewRows ([]string {"age" }).AddRow (10 )
@@ -338,12 +334,10 @@ func TestSelector_Get_baseType(t *testing.T) {
338
334
},
339
335
{
340
336
name : "res int64" ,
341
- queryRes : func (t * testing.T ) any {
337
+ queryRes : func (t * testing.T ) ( any , error ) {
342
338
tm := TableOf (& TestModel {}, "t1" )
343
339
queryer := NewSelector [int64 ](db ).Select (C ("Age" )).From (tm )
344
- result , err := queryer .Get (context .Background ())
345
- require .NoError (t , err )
346
- return result
340
+ return queryer .Get (context .Background ())
347
341
},
348
342
mockOrder : func (mock sqlmock.Sqlmock ) {
349
343
rows := mock .NewRows ([]string {"age" }).AddRow (10 )
@@ -358,12 +352,10 @@ func TestSelector_Get_baseType(t *testing.T) {
358
352
},
359
353
{
360
354
name : "avg res float32" ,
361
- queryRes : func (t * testing.T ) any {
355
+ queryRes : func (t * testing.T ) ( any , error ) {
362
356
tm := TableOf (& TestModel {}, "t1" )
363
357
queryer := NewSelector [float32 ](db ).Select (C ("Age" )).From (tm )
364
- result , err := queryer .Get (context .Background ())
365
- require .NoError (t , err )
366
- return result
358
+ return queryer .Get (context .Background ())
367
359
},
368
360
mockOrder : func (mock sqlmock.Sqlmock ) {
369
361
rows := mock .NewRows ([]string {"age" }).AddRow (10.2 )
@@ -378,12 +370,10 @@ func TestSelector_Get_baseType(t *testing.T) {
378
370
},
379
371
{
380
372
name : "avg res float64" ,
381
- queryRes : func (t * testing.T ) any {
373
+ queryRes : func (t * testing.T ) ( any , error ) {
382
374
tm := TableOf (& TestModel {}, "t1" )
383
375
queryer := NewSelector [float64 ](db ).Select (C ("Age" )).From (tm )
384
- result , err := queryer .Get (context .Background ())
385
- require .NoError (t , err )
386
- return result
376
+ return queryer .Get (context .Background ())
387
377
},
388
378
mockOrder : func (mock sqlmock.Sqlmock ) {
389
379
rows := mock .NewRows ([]string {"age" }).AddRow (10.02 )
@@ -398,13 +388,11 @@ func TestSelector_Get_baseType(t *testing.T) {
398
388
},
399
389
{
400
390
name : "res byte" ,
401
- queryRes : func (t * testing.T ) any {
391
+ queryRes : func (t * testing.T ) ( any , error ) {
402
392
tm := TableOf (& TestModel {}, "t1" )
403
393
queryer := NewSelector [byte ](db ).Select (C ("FirstName" )).
404
394
From (tm ).Where (C ("Id" ).EQ (1 ))
405
- result , err := queryer .Get (context .Background ())
406
- require .NoError (t , err )
407
- return result
395
+ return queryer .Get (context .Background ())
408
396
},
409
397
mockOrder : func (mock sqlmock.Sqlmock ) {
410
398
rows := mock .NewRows ([]string {"first_name" }).AddRow ('D' )
@@ -419,13 +407,11 @@ func TestSelector_Get_baseType(t *testing.T) {
419
407
},
420
408
{
421
409
name : "res bytes" ,
422
- queryRes : func (t * testing.T ) any {
410
+ queryRes : func (t * testing.T ) ( any , error ) {
423
411
tm := TableOf (& TestModel {}, "t1" )
424
412
queryer := NewSelector [[]byte ](db ).Select (C ("FirstName" )).
425
413
From (tm ).Where (C ("Id" ).EQ (1 ))
426
- result , err := queryer .Get (context .Background ())
427
- require .NoError (t , err )
428
- return result
414
+ return queryer .Get (context .Background ())
429
415
},
430
416
mockOrder : func (mock sqlmock.Sqlmock ) {
431
417
rows := mock .NewRows ([]string {"first_name" }).AddRow ([]byte ("Li" ))
@@ -440,13 +426,11 @@ func TestSelector_Get_baseType(t *testing.T) {
440
426
},
441
427
{
442
428
name : "res string" ,
443
- queryRes : func (t * testing.T ) any {
429
+ queryRes : func (t * testing.T ) ( any , error ) {
444
430
tm := TableOf (& TestModel {}, "t1" )
445
431
queryer := NewSelector [string ](db ).Select (C ("FirstName" )).
446
432
From (tm ).Where (C ("Id" ).EQ (1 ))
447
- result , err := queryer .Get (context .Background ())
448
- require .NoError (t , err )
449
- return result
433
+ return queryer .Get (context .Background ())
450
434
},
451
435
mockOrder : func (mock sqlmock.Sqlmock ) {
452
436
rows := mock .NewRows ([]string {"first_name" }).AddRow ("Da" )
@@ -461,12 +445,10 @@ func TestSelector_Get_baseType(t *testing.T) {
461
445
},
462
446
{
463
447
name : "res struct ptr" ,
464
- queryRes : func (t * testing.T ) any {
448
+ queryRes : func (t * testing.T ) ( any , error ) {
465
449
queryer := NewSelector [TestModel ](db ).Select (C ("FirstName" ), C ("Age" )).
466
450
Where (C ("Id" ).EQ (1 ))
467
- result , err := queryer .Get (context .Background ())
468
- require .NoError (t , err )
469
- return result
451
+ return queryer .Get (context .Background ())
470
452
},
471
453
mockOrder : func (mock sqlmock.Sqlmock ) {
472
454
rows := mock .NewRows ([]string {"first_name" , "age" }).AddRow ("Da" , 18 )
@@ -483,13 +465,11 @@ func TestSelector_Get_baseType(t *testing.T) {
483
465
},
484
466
{
485
467
name : "res sql.NullString" ,
486
- queryRes : func (t * testing.T ) any {
468
+ queryRes : func (t * testing.T ) ( any , error ) {
487
469
tm := TableOf (& TestModel {}, "t1" )
488
470
queryer := NewSelector [sql.NullString ](db ).Select (C ("LastName" )).
489
471
From (tm ).Where (C ("Id" ).EQ (1 ))
490
- result , err := queryer .Get (context .Background ())
491
- require .NoError (t , err )
492
- return result
472
+ return queryer .Get (context .Background ())
493
473
},
494
474
mockOrder : func (mock sqlmock.Sqlmock ) {
495
475
rows := mock .NewRows ([]string {"last_name" }).AddRow ([]byte ("ming" ))
@@ -501,12 +481,50 @@ func TestSelector_Get_baseType(t *testing.T) {
501
481
return & sql.NullString {String : "ming" , Valid : true }
502
482
}(),
503
483
},
484
+ {
485
+ name : "res *int accept NULL" ,
486
+ queryRes : func (t * testing.T ) (any , error ) {
487
+ tm := TableOf (& TestModel {}, "t1" )
488
+ queryer := NewSelector [* int ](db ).Select (C ("Age" )).
489
+ From (tm ).Where (C ("Id" ).EQ (1 ))
490
+ return queryer .Get (context .Background ())
491
+ },
492
+ mockOrder : func (mock sqlmock.Sqlmock ) {
493
+ rows := mock .NewRows ([]string {"age" }).AddRow (nil )
494
+ mock .ExpectQuery ("SELECT `age` FROM `test_model` AS `t1` WHERE `id`=? LIMIT ?;" ).
495
+ WithArgs (1 , 1 ).
496
+ WillReturnRows (rows )
497
+ },
498
+ wantVal : func () * * int {
499
+ return new (* int )
500
+ }(),
501
+ },
502
+ {
503
+ name : "res int accept NULL" ,
504
+ queryRes : func (t * testing.T ) (any , error ) {
505
+ tm := TableOf (& TestModel {}, "t1" )
506
+ queryer := NewSelector [int ](db ).Select (C ("Age" )).
507
+ From (tm ).Where (C ("Id" ).EQ (1 ))
508
+ return queryer .Get (context .Background ())
509
+ },
510
+ mockOrder : func (mock sqlmock.Sqlmock ) {
511
+ rows := mock .NewRows ([]string {"age" }).AddRow (nil )
512
+ mock .ExpectQuery ("SELECT `age` FROM `test_model` AS `t1` WHERE `id`=? LIMIT ?;" ).
513
+ WithArgs (1 , 1 ).
514
+ WillReturnRows (rows )
515
+ },
516
+ wantErr : "sql: Scan error on column index 0, name \" age\" : converting NULL to int is unsupported" ,
517
+ },
504
518
}
505
519
506
520
for _ , tc := range testCases {
507
521
t .Run (tc .name , func (t * testing.T ) {
508
522
tc .mockOrder (mock )
509
- res := tc .queryRes (t )
523
+ res , err := tc .queryRes (t )
524
+ if err != nil {
525
+ assert .EqualError (t , err , tc .wantErr )
526
+ return
527
+ }
510
528
assert .Equal (t , tc .wantVal , res )
511
529
})
512
530
}
0 commit comments