@@ -14,7 +14,6 @@ import (
1414 "database/sql"
1515 "database/sql/driver"
1616 "fmt"
17- "regexp"
1817 "time"
1918)
2019
@@ -32,22 +31,19 @@ type Sqlmock interface {
3231 // were met in order. If any of them was not met - an error is returned.
3332 ExpectationsWereMet () error
3433
35- // ExpectPrepare expects Prepare() to be called with sql query
36- // which match sqlRegexStr given regexp.
34+ // ExpectPrepare expects Prepare() to be called with expectedSQL query.
3735 // the *ExpectedPrepare allows to mock database response.
3836 // Note that you may expect Query() or Exec() on the *ExpectedPrepare
39- // statement to prevent repeating sqlRegexStr
40- ExpectPrepare (sqlRegexStr string ) * ExpectedPrepare
37+ // statement to prevent repeating expectedSQL
38+ ExpectPrepare (expectedSQL string ) * ExpectedPrepare
4139
42- // ExpectQuery expects Query() or QueryRow() to be called with sql query
43- // which match sqlRegexStr given regexp.
40+ // ExpectQuery expects Query() or QueryRow() to be called with expectedSQL query.
4441 // the *ExpectedQuery allows to mock database response.
45- ExpectQuery (sqlRegexStr string ) * ExpectedQuery
42+ ExpectQuery (expectedSQL string ) * ExpectedQuery
4643
47- // ExpectExec expects Exec() to be called with sql query
48- // which match sqlRegexStr given regexp.
44+ // ExpectExec expects Exec() to be called with expectedSQL query.
4945 // the *ExpectedExec allows to mock database response
50- ExpectExec (sqlRegexStr string ) * ExpectedExec
46+ ExpectExec (expectedSQL string ) * ExpectedExec
5147
5248 // ExpectBegin expects *sql.DB.Begin to be called.
5349 // the *ExpectedBegin allows to mock database response
@@ -260,7 +256,6 @@ func (c *sqlmock) Exec(query string, args []driver.Value) (driver.Result, error)
260256}
261257
262258func (c * sqlmock ) exec (query string , args []namedValue ) (* ExpectedExec , error ) {
263- query = stripQuery (query )
264259 var expected * ExpectedExec
265260 var fulfilled int
266261 var ok bool
@@ -280,7 +275,12 @@ func (c *sqlmock) exec(query string, args []namedValue) (*ExpectedExec, error) {
280275 return nil , fmt .Errorf ("call to ExecQuery '%s' with args %+v, was not expected, next expectation is: %s" , query , args , next )
281276 }
282277 if exec , ok := next .(* ExpectedExec ); ok {
283- if err := exec .attemptMatch (query , args ); err == nil {
278+ if err := c .queryMatcher .Match (exec .expectSQL , query ); err != nil {
279+ next .Unlock ()
280+ continue
281+ }
282+
283+ if err := exec .attemptArgMatch (args ); err == nil {
284284 expected = exec
285285 break
286286 }
@@ -296,8 +296,8 @@ func (c *sqlmock) exec(query string, args []namedValue) (*ExpectedExec, error) {
296296 }
297297 defer expected .Unlock ()
298298
299- if ! expected . queryMatches ( query ) {
300- return nil , fmt .Errorf ("ExecQuery '%s', does not match regex '%s' " , query , expected . sqlRegex . String () )
299+ if err := c . queryMatcher . Match ( expected . expectSQL , query ); err != nil {
300+ return nil , fmt .Errorf ("ExecQuery: %v " , err )
301301 }
302302
303303 if err := expected .argsMatches (args ); err != nil {
@@ -316,10 +316,9 @@ func (c *sqlmock) exec(query string, args []namedValue) (*ExpectedExec, error) {
316316 return expected , nil
317317}
318318
319- func (c * sqlmock ) ExpectExec (sqlRegexStr string ) * ExpectedExec {
319+ func (c * sqlmock ) ExpectExec (expectedSQL string ) * ExpectedExec {
320320 e := & ExpectedExec {}
321- sqlRegexStr = stripQuery (sqlRegexStr )
322- e .sqlRegex = regexp .MustCompile (sqlRegexStr )
321+ e .expectSQL = expectedSQL
323322 e .converter = c .converter
324323 c .expected = append (c .expected , e )
325324 return e
@@ -343,8 +342,6 @@ func (c *sqlmock) prepare(query string) (*ExpectedPrepare, error) {
343342 var fulfilled int
344343 var ok bool
345344
346- query = stripQuery (query )
347-
348345 for _ , next := range c .expected {
349346 next .Lock ()
350347 if next .fulfilled () {
@@ -363,7 +360,7 @@ func (c *sqlmock) prepare(query string) (*ExpectedPrepare, error) {
363360 }
364361
365362 if pr , ok := next .(* ExpectedPrepare ); ok {
366- if pr . sqlRegex . MatchString ( query ) {
363+ if err := c . queryMatcher . Match ( pr . expectSQL , query ); err == nil {
367364 expected = pr
368365 break
369366 }
@@ -379,17 +376,16 @@ func (c *sqlmock) prepare(query string) (*ExpectedPrepare, error) {
379376 return nil , fmt .Errorf (msg , query )
380377 }
381378 defer expected .Unlock ()
382- if ! expected . sqlRegex . MatchString ( query ) {
383- return nil , fmt .Errorf ("Prepare query string '%s', does not match regex [%s] " , query , expected . sqlRegex . String () )
379+ if err := c . queryMatcher . Match ( expected . expectSQL , query ); err != nil {
380+ return nil , fmt .Errorf ("Prepare: %v " , err )
384381 }
385382
386383 expected .triggered = true
387384 return expected , expected .err
388385}
389386
390- func (c * sqlmock ) ExpectPrepare (sqlRegexStr string ) * ExpectedPrepare {
391- sqlRegexStr = stripQuery (sqlRegexStr )
392- e := & ExpectedPrepare {sqlRegex : regexp .MustCompile (sqlRegexStr ), mock : c }
387+ func (c * sqlmock ) ExpectPrepare (expectedSQL string ) * ExpectedPrepare {
388+ e := & ExpectedPrepare {expectSQL : expectedSQL , mock : c }
393389 c .expected = append (c .expected , e )
394390 return e
395391}
@@ -422,7 +418,6 @@ func (c *sqlmock) Query(query string, args []driver.Value) (driver.Rows, error)
422418}
423419
424420func (c * sqlmock ) query (query string , args []namedValue ) (* ExpectedQuery , error ) {
425- query = stripQuery (query )
426421 var expected * ExpectedQuery
427422 var fulfilled int
428423 var ok bool
@@ -442,7 +437,11 @@ func (c *sqlmock) query(query string, args []namedValue) (*ExpectedQuery, error)
442437 return nil , fmt .Errorf ("call to Query '%s' with args %+v, was not expected, next expectation is: %s" , query , args , next )
443438 }
444439 if qr , ok := next .(* ExpectedQuery ); ok {
445- if err := qr .attemptMatch (query , args ); err == nil {
440+ if err := c .queryMatcher .Match (qr .expectSQL , query ); err != nil {
441+ next .Unlock ()
442+ continue
443+ }
444+ if err := qr .attemptArgMatch (args ); err == nil {
446445 expected = qr
447446 break
448447 }
@@ -460,8 +459,8 @@ func (c *sqlmock) query(query string, args []namedValue) (*ExpectedQuery, error)
460459
461460 defer expected .Unlock ()
462461
463- if ! expected . queryMatches ( query ) {
464- return nil , fmt .Errorf ("Query '%s', does not match regex [%s] " , query , expected . sqlRegex . String () )
462+ if err := c . queryMatcher . Match ( expected . expectSQL , query ); err != nil {
463+ return nil , fmt .Errorf ("Query: %v " , err )
465464 }
466465
467466 if err := expected .argsMatches (args ); err != nil {
@@ -479,10 +478,9 @@ func (c *sqlmock) query(query string, args []namedValue) (*ExpectedQuery, error)
479478 return expected , nil
480479}
481480
482- func (c * sqlmock ) ExpectQuery (sqlRegexStr string ) * ExpectedQuery {
481+ func (c * sqlmock ) ExpectQuery (expectedSQL string ) * ExpectedQuery {
483482 e := & ExpectedQuery {}
484- sqlRegexStr = stripQuery (sqlRegexStr )
485- e .sqlRegex = regexp .MustCompile (sqlRegexStr )
483+ e .expectSQL = expectedSQL
486484 e .converter = c .converter
487485 c .expected = append (c .expected , e )
488486 return e
0 commit comments