@@ -40,7 +40,6 @@ import (
4040 "database/sql/driver"
4141 "encoding/binary"
4242 "fmt"
43- "io"
4443 "net"
4544 "net/url"
4645 "os"
@@ -68,12 +67,11 @@ type connection struct {
6867 backendPID uint32
6968 cancelKey uint32
7069 transactionState byte
71- authState int32
7270 usePreparedStmts bool
71+ scratch [512 ]byte
7372 sessionID string
7473 serverTZOffset string
7574 sessMutex sync.Mutex
76- inputStream io.Reader
7775}
7876
7977// Begin - Begin starts and returns a new transaction. (DEPRECATED)
@@ -180,40 +178,44 @@ func newConnection(connString string) (*connection, error) {
180178}
181179
182180func (v * connection ) recvMessage () (msgs.BackEndMsg , error ) {
183- msgHeader := make ([] byte , 5 )
181+ msgHeader := v . scratch [: 5 ]
184182
185- for {
186- var err error
183+ var err error
187184
188- if err = v .readAll (msgHeader ); err != nil {
189- return nil , err
190- }
185+ if err = v .readAll (msgHeader ); err != nil {
186+ return nil , err
187+ }
191188
192- msgSize := int (binary .BigEndian .Uint32 (msgHeader [1 :]) - 4 )
189+ msgSize := int (binary .BigEndian .Uint32 (msgHeader [1 :]) - 4 )
193190
194- msgBytes := make ([] byte , msgSize )
191+ msgBytes := v . scratch [ 5 :]
195192
196- if msgSize > 0 {
197- if err = v .readAll (msgBytes ); err != nil {
198- return nil , err
199- }
193+ var y []byte
194+ if msgSize > 0 {
195+ if msgSize <= len (msgBytes ) {
196+ y = msgBytes [:msgSize ]
197+ } else {
198+ y = make ([]byte , msgSize )
200199 }
201-
202- bem , err := msgs .CreateBackEndMsg (msgHeader [0 ], msgBytes )
203-
204- if err != nil {
200+ if err = v .readAll (y ); err != nil {
205201 return nil , err
206202 }
203+ }
207204
208- // Print the message to stdout (for debugging purposes)
209- if _ , drm := bem .(* msgs.BEDataRowMsg ); ! drm {
210- connectionLogger .Debug ("<- " + bem .String ())
211- } else {
212- connectionLogger .Trace ("<- " + bem .String ())
213- }
205+ bem , err := msgs .CreateBackEndMsg (msgHeader [0 ], y )
206+
207+ if err != nil {
208+ return nil , err
209+ }
214210
215- return bem , nil
211+ // Print the message to stdout (for debugging purposes)
212+ if _ , drm := bem .(* msgs.BEDataRowMsg ); ! drm {
213+ connectionLogger .Debug ("<- " + bem .String ())
214+ } else {
215+ connectionLogger .Trace ("<- " + bem .String ())
216216 }
217+
218+ return bem , nil
217219}
218220
219221func (v * connection ) sendMessage (msg msgs.FrontEndMsg ) error {
@@ -226,7 +228,7 @@ func (v *connection) sendMessage(msg msgs.FrontEndMsg) error {
226228 }
227229
228230 if result == nil {
229- sizeBytes := make ([] byte , 4 )
231+ sizeBytes := v . scratch [: 4 ]
230232 binary .BigEndian .PutUint32 (sizeBytes , uint32 (len (msgBytes )+ 4 ))
231233
232234 _ , result = v .conn .Write (sizeBytes )
@@ -393,7 +395,7 @@ func (v *connection) readAll(buf []byte) error {
393395func (v * connection ) initializeSSL (sslFlag string ) error {
394396 v .sendMessage (& msgs.FESSLMsg {})
395397
396- buf := make ([] byte , 1 )
398+ buf := v . scratch [: 1 ]
397399
398400 err := v .readAll (buf )
399401
0 commit comments