github.com/lingyao2333/mo-zero@v1.4.1/core/stores/sqlx/orm_test.go (about)

     1  package sqlx
     2  
     3  import (
     4  	"context"
     5  	"database/sql"
     6  	"errors"
     7  	"testing"
     8  
     9  	"github.com/DATA-DOG/go-sqlmock"
    10  	"github.com/lingyao2333/mo-zero/core/logx"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestUnmarshalRowBool(t *testing.T) {
    15  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    16  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("1")
    17  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    18  
    19  		var value bool
    20  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    21  			return unmarshalRow(&value, rows, true)
    22  		}, "select value from users where user=?", "anyone"))
    23  		assert.True(t, value)
    24  	})
    25  }
    26  
    27  func TestUnmarshalRowBoolNotSettable(t *testing.T) {
    28  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    29  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("1")
    30  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    31  
    32  		var value bool
    33  		assert.NotNil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    34  			return unmarshalRow(value, rows, true)
    35  		}, "select value from users where user=?", "anyone"))
    36  	})
    37  }
    38  
    39  func TestUnmarshalRowInt(t *testing.T) {
    40  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    41  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2")
    42  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    43  
    44  		var value int
    45  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    46  			return unmarshalRow(&value, rows, true)
    47  		}, "select value from users where user=?", "anyone"))
    48  		assert.EqualValues(t, 2, value)
    49  	})
    50  }
    51  
    52  func TestUnmarshalRowInt8(t *testing.T) {
    53  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    54  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("3")
    55  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    56  
    57  		var value int8
    58  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    59  			return unmarshalRow(&value, rows, true)
    60  		}, "select value from users where user=?", "anyone"))
    61  		assert.EqualValues(t, int8(3), value)
    62  	})
    63  }
    64  
    65  func TestUnmarshalRowInt16(t *testing.T) {
    66  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    67  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("4")
    68  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    69  
    70  		var value int16
    71  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    72  			return unmarshalRow(&value, rows, true)
    73  		}, "select value from users where user=?", "anyone"))
    74  		assert.Equal(t, int16(4), value)
    75  	})
    76  }
    77  
    78  func TestUnmarshalRowInt32(t *testing.T) {
    79  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    80  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("5")
    81  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    82  
    83  		var value int32
    84  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    85  			return unmarshalRow(&value, rows, true)
    86  		}, "select value from users where user=?", "anyone"))
    87  		assert.Equal(t, int32(5), value)
    88  	})
    89  }
    90  
    91  func TestUnmarshalRowInt64(t *testing.T) {
    92  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
    93  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("6")
    94  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
    95  
    96  		var value int64
    97  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
    98  			return unmarshalRow(&value, rows, true)
    99  		}, "select value from users where user=?", "anyone"))
   100  		assert.EqualValues(t, int64(6), value)
   101  	})
   102  }
   103  
   104  func TestUnmarshalRowUint(t *testing.T) {
   105  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   106  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2")
   107  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   108  
   109  		var value uint
   110  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   111  			return unmarshalRow(&value, rows, true)
   112  		}, "select value from users where user=?", "anyone"))
   113  		assert.EqualValues(t, uint(2), value)
   114  	})
   115  }
   116  
   117  func TestUnmarshalRowUint8(t *testing.T) {
   118  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   119  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("3")
   120  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   121  
   122  		var value uint8
   123  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   124  			return unmarshalRow(&value, rows, true)
   125  		}, "select value from users where user=?", "anyone"))
   126  		assert.EqualValues(t, uint8(3), value)
   127  	})
   128  }
   129  
   130  func TestUnmarshalRowUint16(t *testing.T) {
   131  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   132  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("4")
   133  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   134  
   135  		var value uint16
   136  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   137  			return unmarshalRow(&value, rows, true)
   138  		}, "select value from users where user=?", "anyone"))
   139  		assert.EqualValues(t, uint16(4), value)
   140  	})
   141  }
   142  
   143  func TestUnmarshalRowUint32(t *testing.T) {
   144  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   145  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("5")
   146  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   147  
   148  		var value uint32
   149  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   150  			return unmarshalRow(&value, rows, true)
   151  		}, "select value from users where user=?", "anyone"))
   152  		assert.EqualValues(t, uint32(5), value)
   153  	})
   154  }
   155  
   156  func TestUnmarshalRowUint64(t *testing.T) {
   157  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   158  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("6")
   159  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   160  
   161  		var value uint64
   162  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   163  			return unmarshalRow(&value, rows, true)
   164  		}, "select value from users where user=?", "anyone"))
   165  		assert.EqualValues(t, uint16(6), value)
   166  	})
   167  }
   168  
   169  func TestUnmarshalRowFloat32(t *testing.T) {
   170  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   171  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("7")
   172  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   173  
   174  		var value float32
   175  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   176  			return unmarshalRow(&value, rows, true)
   177  		}, "select value from users where user=?", "anyone"))
   178  		assert.EqualValues(t, float32(7), value)
   179  	})
   180  }
   181  
   182  func TestUnmarshalRowFloat64(t *testing.T) {
   183  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   184  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("8")
   185  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   186  
   187  		var value float64
   188  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   189  			return unmarshalRow(&value, rows, true)
   190  		}, "select value from users where user=?", "anyone"))
   191  		assert.EqualValues(t, float64(8), value)
   192  	})
   193  }
   194  
   195  func TestUnmarshalRowString(t *testing.T) {
   196  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   197  		const expect = "hello"
   198  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString(expect)
   199  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   200  
   201  		var value string
   202  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   203  			return unmarshalRow(&value, rows, true)
   204  		}, "select value from users where user=?", "anyone"))
   205  		assert.EqualValues(t, expect, value)
   206  	})
   207  }
   208  
   209  func TestUnmarshalRowStruct(t *testing.T) {
   210  	value := new(struct {
   211  		Name string
   212  		Age  int
   213  	})
   214  
   215  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   216  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("liao,5")
   217  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   218  
   219  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   220  			return unmarshalRow(value, rows, true)
   221  		}, "select name, age from users where user=?", "anyone"))
   222  		assert.Equal(t, "liao", value.Name)
   223  		assert.Equal(t, 5, value.Age)
   224  	})
   225  }
   226  
   227  func TestUnmarshalRowStructWithTags(t *testing.T) {
   228  	value := new(struct {
   229  		Age  int    `db:"age"`
   230  		Name string `db:"name"`
   231  	})
   232  
   233  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   234  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("liao,5")
   235  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   236  
   237  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   238  			return unmarshalRow(value, rows, true)
   239  		}, "select name, age from users where user=?", "anyone"))
   240  		assert.Equal(t, "liao", value.Name)
   241  		assert.Equal(t, 5, value.Age)
   242  	})
   243  }
   244  
   245  func TestUnmarshalRowStructWithTagsWrongColumns(t *testing.T) {
   246  	value := new(struct {
   247  		Age  *int   `db:"age"`
   248  		Name string `db:"name"`
   249  	})
   250  
   251  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   252  		rs := sqlmock.NewRows([]string{"name"}).FromCSVString("liao")
   253  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   254  
   255  		assert.NotNil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   256  			return unmarshalRow(value, rows, true)
   257  		}, "select name, age from users where user=?", "anyone"))
   258  	})
   259  }
   260  
   261  func TestUnmarshalRowsBool(t *testing.T) {
   262  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   263  		expect := []bool{true, false}
   264  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("1\n0")
   265  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   266  
   267  		var value []bool
   268  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   269  			return unmarshalRows(&value, rows, true)
   270  		}, "select value from users where user=?", "anyone"))
   271  		assert.EqualValues(t, expect, value)
   272  	})
   273  }
   274  
   275  func TestUnmarshalRowsInt(t *testing.T) {
   276  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   277  		expect := []int{2, 3}
   278  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   279  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   280  
   281  		var value []int
   282  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   283  			return unmarshalRows(&value, rows, true)
   284  		}, "select value from users where user=?", "anyone"))
   285  		assert.EqualValues(t, expect, value)
   286  	})
   287  }
   288  
   289  func TestUnmarshalRowsInt8(t *testing.T) {
   290  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   291  		expect := []int8{2, 3}
   292  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   293  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   294  
   295  		var value []int8
   296  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   297  			return unmarshalRows(&value, rows, true)
   298  		}, "select value from users where user=?", "anyone"))
   299  		assert.EqualValues(t, expect, value)
   300  	})
   301  }
   302  
   303  func TestUnmarshalRowsInt16(t *testing.T) {
   304  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   305  		expect := []int16{2, 3}
   306  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   307  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   308  
   309  		var value []int16
   310  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   311  			return unmarshalRows(&value, rows, true)
   312  		}, "select value from users where user=?", "anyone"))
   313  		assert.EqualValues(t, expect, value)
   314  	})
   315  }
   316  
   317  func TestUnmarshalRowsInt32(t *testing.T) {
   318  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   319  		expect := []int32{2, 3}
   320  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   321  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   322  
   323  		var value []int32
   324  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   325  			return unmarshalRows(&value, rows, true)
   326  		}, "select value from users where user=?", "anyone"))
   327  		assert.EqualValues(t, expect, value)
   328  	})
   329  }
   330  
   331  func TestUnmarshalRowsInt64(t *testing.T) {
   332  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   333  		expect := []int64{2, 3}
   334  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   335  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   336  
   337  		var value []int64
   338  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   339  			return unmarshalRows(&value, rows, true)
   340  		}, "select value from users where user=?", "anyone"))
   341  		assert.EqualValues(t, expect, value)
   342  	})
   343  }
   344  
   345  func TestUnmarshalRowsUint(t *testing.T) {
   346  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   347  		expect := []uint{2, 3}
   348  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   349  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   350  
   351  		var value []uint
   352  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   353  			return unmarshalRows(&value, rows, true)
   354  		}, "select value from users where user=?", "anyone"))
   355  		assert.EqualValues(t, expect, value)
   356  	})
   357  }
   358  
   359  func TestUnmarshalRowsUint8(t *testing.T) {
   360  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   361  		expect := []uint8{2, 3}
   362  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   363  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   364  
   365  		var value []uint8
   366  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   367  			return unmarshalRows(&value, rows, true)
   368  		}, "select value from users where user=?", "anyone"))
   369  		assert.EqualValues(t, expect, value)
   370  	})
   371  }
   372  
   373  func TestUnmarshalRowsUint16(t *testing.T) {
   374  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   375  		expect := []uint16{2, 3}
   376  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   377  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   378  
   379  		var value []uint16
   380  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   381  			return unmarshalRows(&value, rows, true)
   382  		}, "select value from users where user=?", "anyone"))
   383  		assert.EqualValues(t, expect, value)
   384  	})
   385  }
   386  
   387  func TestUnmarshalRowsUint32(t *testing.T) {
   388  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   389  		expect := []uint32{2, 3}
   390  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   391  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   392  
   393  		var value []uint32
   394  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   395  			return unmarshalRows(&value, rows, true)
   396  		}, "select value from users where user=?", "anyone"))
   397  		assert.EqualValues(t, expect, value)
   398  	})
   399  }
   400  
   401  func TestUnmarshalRowsUint64(t *testing.T) {
   402  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   403  		expect := []uint64{2, 3}
   404  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   405  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   406  
   407  		var value []uint64
   408  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   409  			return unmarshalRows(&value, rows, true)
   410  		}, "select value from users where user=?", "anyone"))
   411  		assert.EqualValues(t, expect, value)
   412  	})
   413  }
   414  
   415  func TestUnmarshalRowsFloat32(t *testing.T) {
   416  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   417  		expect := []float32{2, 3}
   418  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   419  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   420  
   421  		var value []float32
   422  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   423  			return unmarshalRows(&value, rows, true)
   424  		}, "select value from users where user=?", "anyone"))
   425  		assert.EqualValues(t, expect, value)
   426  	})
   427  }
   428  
   429  func TestUnmarshalRowsFloat64(t *testing.T) {
   430  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   431  		expect := []float64{2, 3}
   432  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   433  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   434  
   435  		var value []float64
   436  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   437  			return unmarshalRows(&value, rows, true)
   438  		}, "select value from users where user=?", "anyone"))
   439  		assert.EqualValues(t, expect, value)
   440  	})
   441  }
   442  
   443  func TestUnmarshalRowsString(t *testing.T) {
   444  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   445  		expect := []string{"hello", "world"}
   446  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("hello\nworld")
   447  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   448  
   449  		var value []string
   450  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   451  			return unmarshalRows(&value, rows, true)
   452  		}, "select value from users where user=?", "anyone"))
   453  		assert.EqualValues(t, expect, value)
   454  	})
   455  }
   456  
   457  func TestUnmarshalRowsBoolPtr(t *testing.T) {
   458  	yes := true
   459  	no := false
   460  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   461  		expect := []*bool{&yes, &no}
   462  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("1\n0")
   463  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   464  
   465  		var value []*bool
   466  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   467  			return unmarshalRows(&value, rows, true)
   468  		}, "select value from users where user=?", "anyone"))
   469  		assert.EqualValues(t, expect, value)
   470  	})
   471  }
   472  
   473  func TestUnmarshalRowsIntPtr(t *testing.T) {
   474  	two := 2
   475  	three := 3
   476  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   477  		expect := []*int{&two, &three}
   478  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   479  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   480  
   481  		var value []*int
   482  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   483  			return unmarshalRows(&value, rows, true)
   484  		}, "select value from users where user=?", "anyone"))
   485  		assert.EqualValues(t, expect, value)
   486  	})
   487  }
   488  
   489  func TestUnmarshalRowsInt8Ptr(t *testing.T) {
   490  	two := int8(2)
   491  	three := int8(3)
   492  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   493  		expect := []*int8{&two, &three}
   494  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   495  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   496  
   497  		var value []*int8
   498  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   499  			return unmarshalRows(&value, rows, true)
   500  		}, "select value from users where user=?", "anyone"))
   501  		assert.EqualValues(t, expect, value)
   502  	})
   503  }
   504  
   505  func TestUnmarshalRowsInt16Ptr(t *testing.T) {
   506  	two := int16(2)
   507  	three := int16(3)
   508  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   509  		expect := []*int16{&two, &three}
   510  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   511  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   512  
   513  		var value []*int16
   514  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   515  			return unmarshalRows(&value, rows, true)
   516  		}, "select value from users where user=?", "anyone"))
   517  		assert.EqualValues(t, expect, value)
   518  	})
   519  }
   520  
   521  func TestUnmarshalRowsInt32Ptr(t *testing.T) {
   522  	two := int32(2)
   523  	three := int32(3)
   524  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   525  		expect := []*int32{&two, &three}
   526  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   527  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   528  
   529  		var value []*int32
   530  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   531  			return unmarshalRows(&value, rows, true)
   532  		}, "select value from users where user=?", "anyone"))
   533  		assert.EqualValues(t, expect, value)
   534  	})
   535  }
   536  
   537  func TestUnmarshalRowsInt64Ptr(t *testing.T) {
   538  	two := int64(2)
   539  	three := int64(3)
   540  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   541  		expect := []*int64{&two, &three}
   542  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   543  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   544  
   545  		var value []*int64
   546  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   547  			return unmarshalRows(&value, rows, true)
   548  		}, "select value from users where user=?", "anyone"))
   549  		assert.EqualValues(t, expect, value)
   550  	})
   551  }
   552  
   553  func TestUnmarshalRowsUintPtr(t *testing.T) {
   554  	two := uint(2)
   555  	three := uint(3)
   556  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   557  		expect := []*uint{&two, &three}
   558  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   559  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   560  
   561  		var value []*uint
   562  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   563  			return unmarshalRows(&value, rows, true)
   564  		}, "select value from users where user=?", "anyone"))
   565  		assert.EqualValues(t, expect, value)
   566  	})
   567  }
   568  
   569  func TestUnmarshalRowsUint8Ptr(t *testing.T) {
   570  	two := uint8(2)
   571  	three := uint8(3)
   572  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   573  		expect := []*uint8{&two, &three}
   574  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   575  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   576  
   577  		var value []*uint8
   578  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   579  			return unmarshalRows(&value, rows, true)
   580  		}, "select value from users where user=?", "anyone"))
   581  		assert.EqualValues(t, expect, value)
   582  	})
   583  }
   584  
   585  func TestUnmarshalRowsUint16Ptr(t *testing.T) {
   586  	two := uint16(2)
   587  	three := uint16(3)
   588  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   589  		expect := []*uint16{&two, &three}
   590  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   591  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   592  
   593  		var value []*uint16
   594  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   595  			return unmarshalRows(&value, rows, true)
   596  		}, "select value from users where user=?", "anyone"))
   597  		assert.EqualValues(t, expect, value)
   598  	})
   599  }
   600  
   601  func TestUnmarshalRowsUint32Ptr(t *testing.T) {
   602  	two := uint32(2)
   603  	three := uint32(3)
   604  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   605  		expect := []*uint32{&two, &three}
   606  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   607  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   608  
   609  		var value []*uint32
   610  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   611  			return unmarshalRows(&value, rows, true)
   612  		}, "select value from users where user=?", "anyone"))
   613  		assert.EqualValues(t, expect, value)
   614  	})
   615  }
   616  
   617  func TestUnmarshalRowsUint64Ptr(t *testing.T) {
   618  	two := uint64(2)
   619  	three := uint64(3)
   620  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   621  		expect := []*uint64{&two, &three}
   622  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   623  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   624  
   625  		var value []*uint64
   626  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   627  			return unmarshalRows(&value, rows, true)
   628  		}, "select value from users where user=?", "anyone"))
   629  		assert.EqualValues(t, expect, value)
   630  	})
   631  }
   632  
   633  func TestUnmarshalRowsFloat32Ptr(t *testing.T) {
   634  	two := float32(2)
   635  	three := float32(3)
   636  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   637  		expect := []*float32{&two, &three}
   638  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   639  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   640  
   641  		var value []*float32
   642  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   643  			return unmarshalRows(&value, rows, true)
   644  		}, "select value from users where user=?", "anyone"))
   645  		assert.EqualValues(t, expect, value)
   646  	})
   647  }
   648  
   649  func TestUnmarshalRowsFloat64Ptr(t *testing.T) {
   650  	two := float64(2)
   651  	three := float64(3)
   652  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   653  		expect := []*float64{&two, &three}
   654  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2\n3")
   655  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   656  
   657  		var value []*float64
   658  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   659  			return unmarshalRows(&value, rows, true)
   660  		}, "select value from users where user=?", "anyone"))
   661  		assert.EqualValues(t, expect, value)
   662  	})
   663  }
   664  
   665  func TestUnmarshalRowsStringPtr(t *testing.T) {
   666  	hello := "hello"
   667  	world := "world"
   668  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   669  		expect := []*string{&hello, &world}
   670  		rs := sqlmock.NewRows([]string{"value"}).FromCSVString("hello\nworld")
   671  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   672  
   673  		var value []*string
   674  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   675  			return unmarshalRows(&value, rows, true)
   676  		}, "select value from users where user=?", "anyone"))
   677  		assert.EqualValues(t, expect, value)
   678  	})
   679  }
   680  
   681  func TestUnmarshalRowsStruct(t *testing.T) {
   682  	expect := []struct {
   683  		Name string
   684  		Age  int64
   685  	}{
   686  		{
   687  			Name: "first",
   688  			Age:  2,
   689  		},
   690  		{
   691  			Name: "second",
   692  			Age:  3,
   693  		},
   694  	}
   695  	var value []struct {
   696  		Name string
   697  		Age  int64
   698  	}
   699  
   700  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   701  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("first,2\nsecond,3")
   702  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   703  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   704  			return unmarshalRows(&value, rows, true)
   705  		}, "select name, age from users where user=?", "anyone"))
   706  
   707  		for i, each := range expect {
   708  			assert.Equal(t, each.Name, value[i].Name)
   709  			assert.Equal(t, each.Age, value[i].Age)
   710  		}
   711  	})
   712  }
   713  
   714  func TestUnmarshalRowsStructWithNullStringType(t *testing.T) {
   715  	expect := []struct {
   716  		Name       string
   717  		NullString sql.NullString
   718  	}{
   719  		{
   720  			Name: "first",
   721  			NullString: sql.NullString{
   722  				String: "firstnullstring",
   723  				Valid:  true,
   724  			},
   725  		},
   726  		{
   727  			Name: "second",
   728  			NullString: sql.NullString{
   729  				String: "",
   730  				Valid:  false,
   731  			},
   732  		},
   733  	}
   734  	var value []struct {
   735  		Name       string         `db:"name"`
   736  		NullString sql.NullString `db:"value"`
   737  	}
   738  
   739  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   740  		rs := sqlmock.NewRows([]string{"name", "value"}).AddRow(
   741  			"first", "firstnullstring").AddRow("second", nil)
   742  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   743  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   744  			return unmarshalRows(&value, rows, true)
   745  		}, "select name, age from users where user=?", "anyone"))
   746  
   747  		for i, each := range expect {
   748  			assert.Equal(t, each.Name, value[i].Name)
   749  			assert.Equal(t, each.NullString.String, value[i].NullString.String)
   750  			assert.Equal(t, each.NullString.Valid, value[i].NullString.Valid)
   751  		}
   752  	})
   753  }
   754  
   755  func TestUnmarshalRowsStructWithTags(t *testing.T) {
   756  	expect := []struct {
   757  		Name string
   758  		Age  int64
   759  	}{
   760  		{
   761  			Name: "first",
   762  			Age:  2,
   763  		},
   764  		{
   765  			Name: "second",
   766  			Age:  3,
   767  		},
   768  	}
   769  	var value []struct {
   770  		Age  int64  `db:"age"`
   771  		Name string `db:"name"`
   772  	}
   773  
   774  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   775  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("first,2\nsecond,3")
   776  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   777  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   778  			return unmarshalRows(&value, rows, true)
   779  		}, "select name, age from users where user=?", "anyone"))
   780  
   781  		for i, each := range expect {
   782  			assert.Equal(t, each.Name, value[i].Name)
   783  			assert.Equal(t, each.Age, value[i].Age)
   784  		}
   785  	})
   786  }
   787  
   788  func TestUnmarshalRowsStructAndEmbeddedAnonymousStructWithTags(t *testing.T) {
   789  	type Embed struct {
   790  		Value int64 `db:"value"`
   791  	}
   792  
   793  	expect := []struct {
   794  		Name  string
   795  		Age   int64
   796  		Value int64
   797  	}{
   798  		{
   799  			Name:  "first",
   800  			Age:   2,
   801  			Value: 3,
   802  		},
   803  		{
   804  			Name:  "second",
   805  			Age:   3,
   806  			Value: 4,
   807  		},
   808  	}
   809  	var value []struct {
   810  		Name string `db:"name"`
   811  		Age  int64  `db:"age"`
   812  		Embed
   813  	}
   814  
   815  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   816  		rs := sqlmock.NewRows([]string{"name", "age", "value"}).FromCSVString("first,2,3\nsecond,3,4")
   817  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   818  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   819  			return unmarshalRows(&value, rows, true)
   820  		}, "select name, age, value from users where user=?", "anyone"))
   821  
   822  		for i, each := range expect {
   823  			assert.Equal(t, each.Name, value[i].Name)
   824  			assert.Equal(t, each.Age, value[i].Age)
   825  			assert.Equal(t, each.Value, value[i].Value)
   826  		}
   827  	})
   828  }
   829  
   830  func TestUnmarshalRowsStructAndEmbeddedStructPtrAnonymousWithTags(t *testing.T) {
   831  	type Embed struct {
   832  		Value int64 `db:"value"`
   833  	}
   834  
   835  	expect := []struct {
   836  		Name  string
   837  		Age   int64
   838  		Value int64
   839  	}{
   840  		{
   841  			Name:  "first",
   842  			Age:   2,
   843  			Value: 3,
   844  		},
   845  		{
   846  			Name:  "second",
   847  			Age:   3,
   848  			Value: 4,
   849  		},
   850  	}
   851  	var value []struct {
   852  		Name string `db:"name"`
   853  		Age  int64  `db:"age"`
   854  		*Embed
   855  	}
   856  
   857  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   858  		rs := sqlmock.NewRows([]string{"name", "age", "value"}).FromCSVString("first,2,3\nsecond,3,4")
   859  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   860  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   861  			return unmarshalRows(&value, rows, true)
   862  		}, "select name, age, value from users where user=?", "anyone"))
   863  
   864  		for i, each := range expect {
   865  			assert.Equal(t, each.Name, value[i].Name)
   866  			assert.Equal(t, each.Age, value[i].Age)
   867  			assert.Equal(t, each.Value, value[i].Value)
   868  		}
   869  	})
   870  }
   871  
   872  func TestUnmarshalRowsStructPtr(t *testing.T) {
   873  	expect := []*struct {
   874  		Name string
   875  		Age  int64
   876  	}{
   877  		{
   878  			Name: "first",
   879  			Age:  2,
   880  		},
   881  		{
   882  			Name: "second",
   883  			Age:  3,
   884  		},
   885  	}
   886  	var value []*struct {
   887  		Name string
   888  		Age  int64
   889  	}
   890  
   891  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   892  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("first,2\nsecond,3")
   893  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   894  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   895  			return unmarshalRows(&value, rows, true)
   896  		}, "select name, age from users where user=?", "anyone"))
   897  
   898  		for i, each := range expect {
   899  			assert.Equal(t, each.Name, value[i].Name)
   900  			assert.Equal(t, each.Age, value[i].Age)
   901  		}
   902  	})
   903  }
   904  
   905  func TestUnmarshalRowsStructWithTagsPtr(t *testing.T) {
   906  	expect := []*struct {
   907  		Name string
   908  		Age  int64
   909  	}{
   910  		{
   911  			Name: "first",
   912  			Age:  2,
   913  		},
   914  		{
   915  			Name: "second",
   916  			Age:  3,
   917  		},
   918  	}
   919  	var value []*struct {
   920  		Age  int64  `db:"age"`
   921  		Name string `db:"name"`
   922  	}
   923  
   924  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   925  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("first,2\nsecond,3")
   926  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   927  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   928  			return unmarshalRows(&value, rows, true)
   929  		}, "select name, age from users where user=?", "anyone"))
   930  
   931  		for i, each := range expect {
   932  			assert.Equal(t, each.Name, value[i].Name)
   933  			assert.Equal(t, each.Age, value[i].Age)
   934  		}
   935  	})
   936  }
   937  
   938  func TestUnmarshalRowsStructWithTagsPtrWithInnerPtr(t *testing.T) {
   939  	expect := []*struct {
   940  		Name string
   941  		Age  int64
   942  	}{
   943  		{
   944  			Name: "first",
   945  			Age:  2,
   946  		},
   947  		{
   948  			Name: "second",
   949  			Age:  3,
   950  		},
   951  	}
   952  	var value []*struct {
   953  		Age  *int64 `db:"age"`
   954  		Name string `db:"name"`
   955  	}
   956  
   957  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   958  		rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("first,2\nsecond,3")
   959  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   960  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   961  			return unmarshalRows(&value, rows, true)
   962  		}, "select name, age from users where user=?", "anyone"))
   963  
   964  		for i, each := range expect {
   965  			assert.Equal(t, each.Name, value[i].Name)
   966  			assert.Equal(t, each.Age, *value[i].Age)
   967  		}
   968  	})
   969  }
   970  
   971  func TestCommonSqlConn_QueryRowOptional(t *testing.T) {
   972  	runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
   973  		rs := sqlmock.NewRows([]string{"age"}).FromCSVString("5")
   974  		mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
   975  
   976  		var r struct {
   977  			User string `db:"user"`
   978  			Age  int    `db:"age"`
   979  		}
   980  		assert.Nil(t, query(context.Background(), db, func(rows *sql.Rows) error {
   981  			return unmarshalRow(&r, rows, false)
   982  		}, "select age from users where user=?", "anyone"))
   983  		assert.Empty(t, r.User)
   984  		assert.Equal(t, 5, r.Age)
   985  	})
   986  }
   987  
   988  func TestUnmarshalRowError(t *testing.T) {
   989  	tests := []struct {
   990  		name     string
   991  		colErr   error
   992  		scanErr  error
   993  		err      error
   994  		next     int
   995  		validate func(err error)
   996  	}{
   997  		{
   998  			name: "with error",
   999  			err:  errors.New("foo"),
  1000  			validate: func(err error) {
  1001  				assert.NotNil(t, err)
  1002  			},
  1003  		},
  1004  		{
  1005  			name: "without next",
  1006  			validate: func(err error) {
  1007  				assert.Equal(t, ErrNotFound, err)
  1008  			},
  1009  		},
  1010  		{
  1011  			name:    "with error",
  1012  			scanErr: errors.New("foo"),
  1013  			next:    1,
  1014  			validate: func(err error) {
  1015  				assert.Equal(t, ErrNotFound, err)
  1016  			},
  1017  		},
  1018  	}
  1019  
  1020  	for _, test := range tests {
  1021  		t.Run(test.name, func(t *testing.T) {
  1022  			runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
  1023  				rs := sqlmock.NewRows([]string{"age"}).FromCSVString("5")
  1024  				mock.ExpectQuery("select (.+) from users where user=?").WithArgs(
  1025  					"anyone").WillReturnRows(rs)
  1026  
  1027  				var r struct {
  1028  					User string `db:"user"`
  1029  					Age  int    `db:"age"`
  1030  				}
  1031  				test.validate(query(context.Background(), db, func(rows *sql.Rows) error {
  1032  					scanner := mockedScanner{
  1033  						colErr:  test.colErr,
  1034  						scanErr: test.scanErr,
  1035  						err:     test.err,
  1036  					}
  1037  					return unmarshalRow(&r, &scanner, false)
  1038  				}, "select age from users where user=?", "anyone"))
  1039  			})
  1040  		})
  1041  	}
  1042  }
  1043  
  1044  func runOrmTest(t *testing.T, fn func(db *sql.DB, mock sqlmock.Sqlmock)) {
  1045  	logx.Disable()
  1046  
  1047  	db, mock, err := sqlmock.New()
  1048  	if err != nil {
  1049  		t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
  1050  	}
  1051  	defer db.Close()
  1052  
  1053  	fn(db, mock)
  1054  
  1055  	if err := mock.ExpectationsWereMet(); err != nil {
  1056  		t.Errorf("there were unfulfilled expectations: %s", err)
  1057  	}
  1058  }
  1059  
  1060  type mockedScanner struct {
  1061  	colErr  error
  1062  	scanErr error
  1063  	err     error
  1064  	next    int
  1065  }
  1066  
  1067  func (m *mockedScanner) Columns() ([]string, error) {
  1068  	return nil, m.colErr
  1069  }
  1070  
  1071  func (m *mockedScanner) Err() error {
  1072  	return m.err
  1073  }
  1074  
  1075  func (m *mockedScanner) Next() bool {
  1076  	if m.next > 0 {
  1077  		m.next--
  1078  		return true
  1079  	}
  1080  	return false
  1081  }
  1082  
  1083  func (m *mockedScanner) Scan(v ...interface{}) error {
  1084  	return m.scanErr
  1085  }