MCPcopy
hub / github.com/jackc/pgx / peekMessage

Method peekMessage

pgconn/pgconn.go:625–661  ·  view source on GitHub ↗

peekMessage peeks at the next message without setting up context cancellation.

()

Source from the content-addressed store, hash-verified

623
624// peekMessage peeks at the next message without setting up context cancellation.
625func (pgConn *PgConn) peekMessage() (pgproto3.BackendMessage, error) {
626 if pgConn.peekedMsg != nil {
627 return pgConn.peekedMsg, nil
628 }
629
630 var msg pgproto3.BackendMessage
631 var err error
632 if pgConn.bufferingReceive {
633 pgConn.bufferingReceiveMux.Lock()
634 msg = pgConn.bufferingReceiveMsg
635 err = pgConn.bufferingReceiveErr
636 pgConn.bufferingReceiveMux.Unlock()
637 pgConn.bufferingReceive = false
638
639 // If a timeout error happened in the background try the read again.
640 var netErr net.Error
641 if errors.As(err, &netErr) && netErr.Timeout() {
642 msg, err = pgConn.frontend.Receive()
643 }
644 } else {
645 msg, err = pgConn.frontend.Receive()
646 }
647
648 if err != nil {
649 // Close on anything other than timeout error - everything else is fatal
650 var netErr net.Error
651 isNetErr := errors.As(err, &netErr)
652 if !(isNetErr && netErr.Timeout()) {
653 pgConn.asyncClose()
654 }
655
656 return nil, err
657 }
658
659 pgConn.peekedMsg = msg
660 return msg, nil
661}
662
663// receiveMessage receives a message without setting up context cancellation
664func (pgConn *PgConn) receiveMessage() (pgproto3.BackendMessage, error) {

Callers 2

receiveMessageMethod · 0.95
NextResultMethod · 0.80

Calls 3

asyncCloseMethod · 0.95
TimeoutMethod · 0.80
ReceiveMethod · 0.45

Tested by

no test coverage detected