Skip to content

Commit 5b901db

Browse files
Merge pull request #263 from DATA-DOG/add-multi-rows-support
Add Multi Row Support
2 parents 07eed2a + 4d55f93 commit 5b901db

File tree

4 files changed

+99
-0
lines changed

4 files changed

+99
-0
lines changed

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
module github.com/DATA-DOG/go-sqlmock
2+
3+
go 1.15
4+
5+
require github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46 h1:veS9QfglfvqAw2e+eeNT/SbGySq8ajECXJ9e4fPoLhY=
2+
github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE=

rows.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,16 @@ func (r *Rows) AddRow(values ...driver.Value) *Rows {
188188
return r
189189
}
190190

191+
// AddRows adds multiple rows composed from database driver.Value slice and
192+
// returns the same instance to perform subsequent actions.
193+
func (r *Rows) AddRows(values ...[]driver.Value) *Rows {
194+
for _, value := range values {
195+
r.AddRow(value...)
196+
}
197+
198+
return r
199+
}
200+
191201
// FromCSVString build rows from csv string.
192202
// return the same instance to perform subsequent actions.
193203
// Note that the number of values must match the number

rows_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package sqlmock
33
import (
44
"bytes"
55
"database/sql"
6+
"database/sql/driver"
67
"fmt"
78
"testing"
89
)
@@ -670,3 +671,85 @@ func queryRowBytesNotInvalidatedByClose(t *testing.T, rows *Rows, scan func(*sql
670671
t.Fatal(err)
671672
}
672673
}
674+
675+
func TestAddRows(t *testing.T) {
676+
t.Parallel()
677+
db, mock, err := New()
678+
if err != nil {
679+
t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
680+
}
681+
defer db.Close()
682+
683+
values := [][]driver.Value{
684+
{
685+
1, "John",
686+
},
687+
{
688+
2, "Jane",
689+
},
690+
{
691+
3, "Peter",
692+
},
693+
{
694+
4, "Emily",
695+
},
696+
}
697+
698+
rows := NewRows([]string{"id", "name"}).AddRows(values...)
699+
mock.ExpectQuery("SELECT").WillReturnRows(rows).RowsWillBeClosed()
700+
701+
rs, _ := db.Query("SELECT")
702+
defer rs.Close()
703+
704+
for rs.Next() {
705+
var id int
706+
var name string
707+
rs.Scan(&id, &name)
708+
fmt.Println("scanned id:", id, "and name:", name)
709+
}
710+
711+
if rs.Err() != nil {
712+
fmt.Println("got rows error:", rs.Err())
713+
}
714+
// Output: scanned id: 1 and title: John
715+
// scanned id: 2 and title: Jane
716+
// scanned id: 3 and title: Peter
717+
// scanned id: 4 and title: Emily
718+
}
719+
720+
func ExampleRows_AddRows() {
721+
db, mock, err := New()
722+
if err != nil {
723+
fmt.Println("failed to open sqlmock database:", err)
724+
}
725+
defer db.Close()
726+
727+
values := [][]driver.Value{
728+
{
729+
1, "one",
730+
},
731+
{
732+
2, "two",
733+
},
734+
}
735+
736+
rows := NewRows([]string{"id", "title"}).AddRows(values...)
737+
738+
mock.ExpectQuery("SELECT").WillReturnRows(rows)
739+
740+
rs, _ := db.Query("SELECT")
741+
defer rs.Close()
742+
743+
for rs.Next() {
744+
var id int
745+
var title string
746+
rs.Scan(&id, &title)
747+
fmt.Println("scanned id:", id, "and title:", title)
748+
}
749+
750+
if rs.Err() != nil {
751+
fmt.Println("got rows error:", rs.Err())
752+
}
753+
// Output: scanned id: 1 and title: one
754+
// scanned id: 2 and title: two
755+
}

0 commit comments

Comments
 (0)