@@ -12,6 +12,8 @@ import (
1212type Response interface {
1313 // Header returns a response header.
1414 Header () Header
15+ // Release free responses data.
16+ Release ()
1517 // Decode decodes a response.
1618 Decode () ([]interface {}, error )
1719 // DecodeTyped decodes a response into a given container res.
@@ -31,24 +33,28 @@ type baseResponse struct {
3133 err error
3234}
3335
34- func createBaseResponse (header Header , body io.Reader ) (baseResponse , error ) {
36+ func createBaseResponse (header Header , body io.Reader ) (* baseResponse , error ) {
3537 if body == nil {
36- return baseResponse {header : header }, nil
38+ return & baseResponse {header : header }, nil
3739 }
3840 if buf , ok := body .(* smallBuf ); ok {
39- return baseResponse {header : header , buf : * buf }, nil
41+ return & baseResponse {header : header , buf : * buf }, nil
4042 }
4143 data , err := io .ReadAll (body )
4244 if err != nil {
43- return baseResponse {} , err
45+ return nil , err
4446 }
45- return baseResponse {header : header , buf : smallBuf {b : data }}, nil
47+ return & baseResponse {header : header , buf : smallBuf {b : data }}, nil
48+ }
49+
50+ func (resp * baseResponse ) Release () {
51+ * resp = baseResponse {}
4652}
4753
4854// DecodeBaseResponse parse response header and body.
4955func DecodeBaseResponse (header Header , body io.Reader ) (Response , error ) {
5056 resp , err := createBaseResponse (header , body )
51- return & resp , err
57+ return resp , err
5258}
5359
5460// SelectResponse is used for the select requests.
@@ -670,6 +676,11 @@ func (resp *baseResponse) Header() Header {
670676 return resp .header
671677}
672678
679+ func (resp * SelectResponse ) Release () {
680+ resp .baseResponse .Release ()
681+ resp .pos = nil
682+ }
683+
673684// Pos returns a position descriptor of the last selected tuple for the SelectResponse.
674685// If the response was not decoded, this method will call Decode().
675686func (resp * SelectResponse ) Pos () ([]byte , error ) {
0 commit comments