Skip to content

Commit 6aa0acc

Browse files
committed
ability to send multiple resultsets from handleQuery
1 parent 0c5789d commit 6aa0acc

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

mysql/result.go

+14
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,17 @@ func (r *Result) Close() {
1919
r.Resultset = nil
2020
}
2121
}
22+
23+
func (r *Result) ChainResultSet(rs *Resultset) {
24+
if r.Resultset == nil {
25+
r.Resultset = rs
26+
return
27+
}
28+
29+
var lastRS *Resultset
30+
31+
for lastRS = r.Resultset; lastRS.Next != nil; lastRS = lastRS.Next {
32+
}
33+
34+
lastRS.Next = rs
35+
}

mysql/resultset.go

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ type Resultset struct {
1717
RawPkg []byte
1818

1919
RowDatas []RowData
20+
21+
// In the case of multiple queries, we will have there a chaining list of separated Resultset
22+
Next *Resultset
2023
}
2124

2225
var (

server/resp.go

+14-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,20 @@ func (c *Conn) writeValue(value interface{}) error {
181181
return c.writeOK(nil)
182182
case *Result:
183183
if v != nil && v.Resultset != nil {
184-
return c.writeResultset(v.Resultset)
184+
for rs := v.Resultset; rs != nil; rs = rs.Next {
185+
if rs.Next != nil {
186+
c.status |= SERVER_MORE_RESULTS_EXISTS
187+
}
188+
189+
err := c.writeResultset(rs)
190+
c.status &= ^SERVER_MORE_RESULTS_EXISTS
191+
192+
if err != nil {
193+
return err
194+
}
195+
}
196+
197+
return nil
185198
} else {
186199
return c.writeOK(v)
187200
}

0 commit comments

Comments
 (0)