go-sqlmock
go-sqlmock copied to clipboard
Query with WHERE IN shows an error (using sqlx)
Hello sqlmock teams.
First of all, thanks to this awesome project. It makes me more easier to implement test code with sql system 👍
But I got an arguments do not match
error while running SELECT WHERE IN queries in my code.
When I run below test codes on sqlmock environment:
// Test code
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
sqlxDB := sqlx.NewDb(db, "sqlmock")
wantRows := sqlmock.NewRows([]string{"id", "value"}).
AddRow("key1", "value1").
AddRow("key2", "value2")
mock.ExpectQuery(fmt.Sprintf("SELECT * FROM %s WHERE id IN (?, ?)", tableName)).
WithArgs("key1", "key2").
WillReturnRows(wantRows)
GetFeatures(tableName, keys) // keys = ["key1", "key2"]
func GetFeatures(tableName, keys) {
query, args, err1 := sqlx.In(fmt.Sprintf(`SELECT * FROM %s WHERE id IN (?)`, tableName), keys)
// Processing err1 here
query = sqlxDB.Rebind(query)
rows, err2 := sqlxDB.Queryx(query, args...)
// Processing err2 here
}
err2
shows an error :
Query 'SELECT * FROM tableName WHERE id IN (?, ?)', arguments do not match: expected 1, but got 2 arguments
Besides, when I run exact same code with a real MySQL DB server which running locally, it doesn't give any other errors. It runs correctly. I think sqlmock
doesn't support SELECT WHERE IN but I'm not sure about it. Is there any way to fix those error?
Any help will be appreciate. 😄
there is no error, this is a test code: https://go.dev/play/p/23Lgj-9W93o