@@ -73,22 +73,37 @@ type Sqlmock interface {
7373 // in any order. Or otherwise if switched to true, any unmatched
7474 // expectations will be expected in order
7575 MatchExpectationsInOrder (bool )
76+
77+ // NewRows allows Rows to be created from a
78+ // sql driver.Value slice or from the CSV string and
79+ // to be used as sql driver.Rows.
80+ NewRows (columns []string ) * Rows
7681}
7782
7883type sqlmock struct {
79- ordered bool
80- dsn string
81- opened int
82- drv * mockDriver
84+ ordered bool
85+ dsn string
86+ opened int
87+ drv * mockDriver
88+ converter driver.ValueConverter
8389
8490 expected []expectation
8591}
8692
87- func (c * sqlmock ) open () (* sql.DB , Sqlmock , error ) {
93+ func (c * sqlmock ) open (options [] func ( * sqlmock ) error ) (* sql.DB , Sqlmock , error ) {
8894 db , err := sql .Open ("sqlmock" , c .dsn )
8995 if err != nil {
9096 return db , c , err
9197 }
98+ for _ , option := range options {
99+ err := option (c )
100+ if err != nil {
101+ return db , c , err
102+ }
103+ }
104+ if c .converter == nil {
105+ c .converter = driver .DefaultParameterConverter
106+ }
92107 return db , c , db .Ping ()
93108}
94109
@@ -165,6 +180,11 @@ func (c *sqlmock) ExpectationsWereMet() error {
165180 return nil
166181}
167182
183+ func (c * sqlmock ) CheckNamedValue (nv * driver.NamedValue ) (err error ) {
184+ nv .Value , err = c .converter .ConvertValue (nv .Value )
185+ return err
186+ }
187+
168188// Begin meets http://golang.org/pkg/database/sql/driver/#Conn interface
169189func (c * sqlmock ) Begin () (driver.Tx , error ) {
170190 ex , err := c .begin ()
@@ -301,6 +321,7 @@ func (c *sqlmock) ExpectExec(sqlRegexStr string) *ExpectedExec {
301321 e := & ExpectedExec {}
302322 sqlRegexStr = stripQuery (sqlRegexStr )
303323 e .sqlRegex = regexp .MustCompile (sqlRegexStr )
324+ e .converter = c .converter
304325 c .expected = append (c .expected , e )
305326 return e
306327}
@@ -463,6 +484,7 @@ func (c *sqlmock) ExpectQuery(sqlRegexStr string) *ExpectedQuery {
463484 e := & ExpectedQuery {}
464485 sqlRegexStr = stripQuery (sqlRegexStr )
465486 e .sqlRegex = regexp .MustCompile (sqlRegexStr )
487+ e .converter = c .converter
466488 c .expected = append (c .expected , e )
467489 return e
468490}
@@ -548,3 +570,12 @@ func (c *sqlmock) Rollback() error {
548570 expected .Unlock ()
549571 return expected .err
550572}
573+
574+ // NewRows allows Rows to be created from a
575+ // sql driver.Value slice or from the CSV string and
576+ // to be used as sql driver.Rows.
577+ func (c * sqlmock ) NewRows (columns []string ) * Rows {
578+ r := NewRows (columns )
579+ r .converter = c .converter
580+ return r
581+ }
0 commit comments