go-sqlmock icon indicating copy to clipboard operation
go-sqlmock copied to clipboard

Catch 22 situation regarding regex matching vs exact query matching.

Open RedMarcher opened this issue 6 months ago • 0 comments
trafficstars

Question

This is the actual code: err = c.database.QueryRowContext(ctx, "SELECT COUNT(*) FROM user_credentials WHERE user_id = $1", passwordUpdateRequest.UserId).Scan(&count)

This is mock: suite.dbMock.ExpectQuery(SELECT COUNT(*) FROM user_credentials WHERE user_id = ?). WithArgs(tc.userID). WillReturnRows(suite.dbMock.NewRows([]string{"count"}).AddRow(1))

When its run, this error occurs: failed to check user credentials: Query: error parsing regexp: missing argument to repetition operator: *

When the * is escaped, failed to check user credentials: Query: could not match actual sql: "SELECT COUNT(*) FROM user_credentials WHERE user_id = $1" with expected regexp "SELECT COUNT(*) FROM user_credentials WHERE user_id = ?"

So it seems there's no way of satisfying this, I tried many other escape methods as well but they all cause the second error.

RedMarcher avatar May 03 '25 22:05 RedMarcher