Skip to content

Commit 9c610ee

Browse files
wegealexbrainman
wege
authored andcommitted
1 parent 577bf50 commit 9c610ee

File tree

3 files changed

+58
-10
lines changed

3 files changed

+58
-10
lines changed

mssql_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1799,6 +1799,47 @@ func TestMSSQLNextResultSet(t *testing.T) {
17991799
})
18001800
}
18011801

1802+
func TestMSSQLNextResultSetWithDifferentColumnsInResultSets(t *testing.T) {
1803+
db, sc, err := mssqlConnect()
1804+
if err != nil {
1805+
t.Fatal(err)
1806+
}
1807+
defer closeDB(t, db, sc, sc)
1808+
rows, err := db.Query("select 1 select 2,3")
1809+
if err != nil {
1810+
t.Fatal(err)
1811+
}
1812+
defer rows.Close()
1813+
if !rows.Next() {
1814+
t.Fatal("expected at least 1 result")
1815+
}
1816+
var v1, v2 int
1817+
err = rows.Scan(&v1)
1818+
if err != nil {
1819+
t.Fatalf("unable to scan select 1 underlying error: %v", err)
1820+
}
1821+
if v1 != 1 {
1822+
t.Fatalf("expected: %v got %v", 1, v1)
1823+
}
1824+
if rows.Next() {
1825+
t.Fatal("unexpected row")
1826+
}
1827+
if !rows.NextResultSet() {
1828+
t.Fatal("expected another result set")
1829+
}
1830+
if !rows.Next() {
1831+
t.Fatal("expected a single row")
1832+
}
1833+
err = rows.Scan(&v1, &v2)
1834+
if err != nil {
1835+
t.Fatalf("unable to scan select 2,3 underlying error: %v", err)
1836+
}
1837+
if v1 != 2 || v2 != 3 {
1838+
t.Fatalf("got wrong values expected v1=%v v2=%v. got v1=%v v2=%v", 2, 3, v1, v2)
1839+
}
1840+
1841+
}
1842+
18021843
func TestMSSQLHasNextResultSet(t *testing.T) {
18031844
checkName := func(rows *sql.Rows, name string) {
18041845
var reccount int

rows.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ func (r *Rows) NextResultSet() error {
5757
if IsError(ret) {
5858
return NewError("SQLMoreResults", r.os.h)
5959
}
60-
// TODO: !!!!!!!!!!!!!!! maybe need to call r.os.BindColumns here !!!!!
61-
//err := r.os.BindColumns()
62-
//if err != nil {
63-
// return err
64-
//}
60+
61+
err := r.os.BindColumns()
62+
if err != nil {
63+
return err
64+
}
6565
return nil
6666
}

stmt.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,19 @@ func (s *Stmt) Exec(args []driver.Value) (driver.Result, error) {
6565
if err != nil {
6666
return nil, err
6767
}
68-
var c api.SQLLEN
69-
ret := api.SQLRowCount(s.os.h, &c)
70-
if IsError(ret) {
71-
return nil, NewError("SQLRowCount", s.os.h)
68+
var sumRowCount int64
69+
for {
70+
var c api.SQLLEN
71+
ret := api.SQLRowCount(s.os.h, &c)
72+
if IsError(ret) {
73+
return nil, NewError("SQLRowCount", s.os.h)
74+
}
75+
sumRowCount += int64(c)
76+
if ret = api.SQLMoreResults(s.os.h); ret == api.SQL_NO_DATA {
77+
break
78+
}
7279
}
73-
return &Result{rowCount: int64(c)}, nil
80+
return &Result{rowCount: sumRowCount}, nil
7481
}
7582

7683
func (s *Stmt) Query(args []driver.Value) (driver.Rows, error) {

0 commit comments

Comments
 (0)