Skip to content

Commit 8b062e7

Browse files
committed
Multi-Results: fix hanging rows.Close()
* rows.Close() would hang on readUntilEOF if some results were ignored before calling NextResultSet()
1 parent 0ac9483 commit 8b062e7

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

driver_go18_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,24 @@ func TestMultiResultSetNoSelect(t *testing.T) {
167167
}
168168
})
169169
}
170+
171+
// tests if rows are set in a proper state if some results were ignored before
172+
// calling rows.NextResultSet.
173+
func TestSkipResults(t *testing.T) {
174+
runTests(t, dsn, func(dbt *DBTest) {
175+
rows := dbt.mustQuery("SELECT 1, 2")
176+
defer rows.Close()
177+
178+
if !rows.Next() {
179+
dbt.Error("expected row")
180+
}
181+
182+
if rows.NextResultSet() {
183+
dbt.Error("unexpected next result set")
184+
}
185+
186+
if err := rows.Err(); err != nil {
187+
dbt.Error("expected nil; got ", err)
188+
}
189+
})
190+
}

rows.go

+2
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,11 @@ func (rows *mysqlRows) nextResultSet() (int, error) {
106106
if err := rows.mc.readUntilEOF(); err != nil {
107107
return 0, err
108108
}
109+
rows.rs.done = true
109110
}
110111

111112
if !rows.HasNextResultSet() {
113+
rows.mc = nil
112114
return 0, io.EOF
113115
}
114116
rows.rs = resultSet{}

0 commit comments

Comments
 (0)