Skip to content

Commit eac50bb

Browse files
committed
fix Query multi result set, if second result error then call would blocking.
1 parent 17ef3dd commit eac50bb

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

rows.go

+17-12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type resultSet struct {
1919
columns []mysqlField
2020
columnNames []string
2121
done bool
22+
lasterr error
2223
}
2324

2425
type mysqlRows struct {
@@ -117,9 +118,10 @@ func (rows *mysqlRows) Close() (err error) {
117118
// by the time the user calls `(*Rows).Close`, so we won't reach this
118119
// see: https://github.com/golang/go/commit/651ddbdb5056ded455f47f9c494c67b389622a47
119120
mc.buf.flip()
120-
121+
// check nextResult error
122+
err = rows.rs.lasterr
121123
// Remove unread packets from stream
122-
if !rows.rs.done {
124+
if err == nil && !rows.rs.done {
123125
err = mc.readUntilEOF()
124126
}
125127
if err == nil {
@@ -179,13 +181,14 @@ func (rows *mysqlRows) nextNotEmptyResultSet() (int, error) {
179181
}
180182

181183
func (rows *binaryRows) NextResultSet() error {
182-
resLen, err := rows.nextNotEmptyResultSet()
183-
if err != nil {
184-
return err
184+
var resLen int
185+
resLen, rows.rs.lasterr = rows.nextNotEmptyResultSet()
186+
if rows.rs.lasterr != nil {
187+
return rows.rs.lasterr
185188
}
186189

187-
rows.rs.columns, err = rows.mc.readColumns(resLen)
188-
return err
190+
rows.rs.columns, rows.rs.lasterr = rows.mc.readColumns(resLen)
191+
return rows.rs.lasterr
189192
}
190193

191194
func (rows *binaryRows) Next(dest []driver.Value) error {
@@ -201,13 +204,15 @@ func (rows *binaryRows) Next(dest []driver.Value) error {
201204
}
202205

203206
func (rows *textRows) NextResultSet() (err error) {
204-
resLen, err := rows.nextNotEmptyResultSet()
205-
if err != nil {
206-
return err
207+
var resLen int
208+
resLen, rows.rs.lasterr = rows.nextNotEmptyResultSet()
209+
if rows.rs.lasterr != nil {
210+
return rows.rs.lasterr
207211
}
208212

209-
rows.rs.columns, err = rows.mc.readColumns(resLen)
210-
return err
213+
rows.rs.columns, rows.rs.lasterr = rows.mc.readColumns(resLen)
214+
return rows.rs.lasterr
215+
211216
}
212217

213218
func (rows *textRows) Next(dest []driver.Value) error {

0 commit comments

Comments
 (0)