pgproto3

package module
v3.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2022 License: MIT Imports: 10 Imported by: 1

README

Build Status

pgproto3

Package pgproto3 is a encoder and decoder of the PostgreSQL wire protocol version 3.

pgproto3 can be used as a foundation for PostgreSQL drivers, proxies, mock servers, load balancers and more.

See example/pgfortune for a playful example of a fake PostgreSQL server.

Extracted from original implementation in https://github.com/jackc/pgx.

Documentation

Overview

Package pgproto3 is a encoder and decoder of the PostgreSQL wire protocol version 3.

See https://www.postgresql.org/docs/current/protocol-message-formats.html for meanings of the different messages.

Index

Constants

View Source
const (
	AuthTypeOk                = 0
	AuthTypeCleartextPassword = 3
	AuthTypeMD5Password       = 5
	AuthTypeSCMCreds          = 6
	AuthTypeGSS               = 7
	AuthTypeGSSCont           = 8
	AuthTypeSSPI              = 9
	AuthTypeSASL              = 10
	AuthTypeSASLContinue      = 11
	AuthTypeSASLFinal         = 12
)

Authentication message type constants. See src/include/libpq/pqcomm.h for all constants.

View Source
const (
	TextFormat   = 0
	BinaryFormat = 1
)
View Source
const ProtocolVersionNumber = 196608 // 3.0

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthenticationCleartextPassword

type AuthenticationCleartextPassword struct {
}

AuthenticationCleartextPassword is a message sent from the backend indicating that a clear-text password is required.

func (*AuthenticationCleartextPassword) AuthenticationResponse

func (*AuthenticationCleartextPassword) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationCleartextPassword) Backend

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationCleartextPassword) Decode

func (dst *AuthenticationCleartextPassword) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationCleartextPassword) Encode

func (src *AuthenticationCleartextPassword) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationCleartextPassword) MarshalJSON

func (src AuthenticationCleartextPassword) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type AuthenticationMD5Password

type AuthenticationMD5Password struct {
	Salt [4]byte
}

AuthenticationMD5Password is a message sent from the backend indicating that an MD5 hashed password is required.

func (*AuthenticationMD5Password) AuthenticationResponse

func (*AuthenticationMD5Password) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationMD5Password) Backend

func (*AuthenticationMD5Password) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationMD5Password) Decode

func (dst *AuthenticationMD5Password) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationMD5Password) Encode

func (src *AuthenticationMD5Password) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationMD5Password) MarshalJSON

func (src AuthenticationMD5Password) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*AuthenticationMD5Password) UnmarshalJSON

func (dst *AuthenticationMD5Password) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type AuthenticationOk

type AuthenticationOk struct {
}

AuthenticationOk is a message sent from the backend indicating that authentication was successful.

func (*AuthenticationOk) AuthenticationResponse

func (*AuthenticationOk) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationOk) Backend

func (*AuthenticationOk) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationOk) Decode

func (dst *AuthenticationOk) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationOk) Encode

func (src *AuthenticationOk) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationOk) MarshalJSON

func (src AuthenticationOk) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type AuthenticationResponseMessage

type AuthenticationResponseMessage interface {
	BackendMessage
	AuthenticationResponse() // no-op method to distinguish authentication responses
}

type AuthenticationSASL

type AuthenticationSASL struct {
	AuthMechanisms []string
}

AuthenticationSASL is a message sent from the backend indicating that SASL authentication is required.

func (*AuthenticationSASL) AuthenticationResponse

func (*AuthenticationSASL) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationSASL) Backend

func (*AuthenticationSASL) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationSASL) Decode

func (dst *AuthenticationSASL) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationSASL) Encode

func (src *AuthenticationSASL) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationSASL) MarshalJSON

func (src AuthenticationSASL) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type AuthenticationSASLContinue

type AuthenticationSASLContinue struct {
	Data []byte
}

AuthenticationSASLContinue is a message sent from the backend containing a SASL challenge.

func (*AuthenticationSASLContinue) AuthenticationResponse

func (*AuthenticationSASLContinue) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationSASLContinue) Backend

func (*AuthenticationSASLContinue) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationSASLContinue) Decode

func (dst *AuthenticationSASLContinue) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationSASLContinue) Encode

func (src *AuthenticationSASLContinue) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationSASLContinue) MarshalJSON

func (src AuthenticationSASLContinue) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*AuthenticationSASLContinue) UnmarshalJSON

func (dst *AuthenticationSASLContinue) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type AuthenticationSASLFinal

type AuthenticationSASLFinal struct {
	Data []byte
}

AuthenticationSASLFinal is a message sent from the backend indicating a SASL authentication has completed.

func (*AuthenticationSASLFinal) AuthenticationResponse

func (*AuthenticationSASLFinal) AuthenticationResponse()

Backend identifies this message as an authentication response.

func (*AuthenticationSASLFinal) Backend

func (*AuthenticationSASLFinal) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*AuthenticationSASLFinal) Decode

func (dst *AuthenticationSASLFinal) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*AuthenticationSASLFinal) Encode

func (src *AuthenticationSASLFinal) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (AuthenticationSASLFinal) MarshalJSON

func (src AuthenticationSASLFinal) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Unmarshaler.

func (*AuthenticationSASLFinal) UnmarshalJSON

func (dst *AuthenticationSASLFinal) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type Backend

type Backend struct {
	MsgType byte
	// contains filtered or unexported fields
}

Backend acts as a server for the PostgreSQL wire protocol version 3.

func NewBackend

func NewBackend(cr ChunkReader, w io.Writer) *Backend

NewBackend creates a new Backend.

func (*Backend) Receive

func (b *Backend) Receive() (FrontendMessage, error)

Receive receives a message from the frontend. The returned message is only valid until the next call to Receive.

func (*Backend) ReceiveStartupMessage

func (b *Backend) ReceiveStartupMessage() (FrontendMessage, error)

ReceiveStartupMessage receives the initial connection message. This method is used of the normal Receive method because the initial connection message is "special" and does not include the message type as the first byte. This will return either a StartupMessage, SSLRequest, GSSEncRequest, or CancelRequest.

func (*Backend) Send

func (b *Backend) Send(msg BackendMessage) error

Send sends a message to the frontend.

func (*Backend) SetAuthType

func (b *Backend) SetAuthType(authType uint32) error

SetAuthType sets the authentication type in the backend. Since multiple message types can start with 'p', SetAuthType allows contextual identification of FrontendMessages. For example, in the PG message flow documentation for PasswordMessage:

		Byte1('p')

     Identifies the message as a password response. Note that this is also used for
		GSSAPI, SSPI and SASL response messages. The exact message type can be deduced from
		the context.

Since the Frontend does not know about the state of a backend, it is important to call SetAuthType() after an authentication request is received by the Frontend.

type BackendKeyData

type BackendKeyData struct {
	ProcessID uint32
	SecretKey uint32
}

func (*BackendKeyData) Backend

func (*BackendKeyData) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*BackendKeyData) Decode

func (dst *BackendKeyData) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*BackendKeyData) Encode

func (src *BackendKeyData) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (BackendKeyData) MarshalJSON

func (src BackendKeyData) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type BackendMessage

type BackendMessage interface {
	Message
	Backend() // no-op method to distinguish frontend from backend methods
}

type BigEndianBuf

type BigEndianBuf [8]byte

func (BigEndianBuf) Int16

func (b BigEndianBuf) Int16(n int16) []byte

func (BigEndianBuf) Int32

func (b BigEndianBuf) Int32(n int32) []byte

func (BigEndianBuf) Int64

func (b BigEndianBuf) Int64(n int64) []byte

func (BigEndianBuf) Uint16

func (b BigEndianBuf) Uint16(n uint16) []byte

func (BigEndianBuf) Uint32

func (b BigEndianBuf) Uint32(n uint32) []byte

type Bind

type Bind struct {
	DestinationPortal    string
	PreparedStatement    string
	ParameterFormatCodes []int16
	Parameters           [][]byte
	ResultFormatCodes    []int16
}

func (*Bind) Decode

func (dst *Bind) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Bind) Encode

func (src *Bind) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Bind) Frontend

func (*Bind) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Bind) MarshalJSON

func (src Bind) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*Bind) UnmarshalJSON

func (dst *Bind) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type BindComplete

type BindComplete struct{}

func (*BindComplete) Backend

func (*BindComplete) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*BindComplete) Decode

func (dst *BindComplete) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*BindComplete) Encode

func (src *BindComplete) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (BindComplete) MarshalJSON

func (src BindComplete) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type CancelRequest

type CancelRequest struct {
	ProcessID uint32
	SecretKey uint32
}

func (*CancelRequest) Decode

func (dst *CancelRequest) Decode(src []byte) error

func (*CancelRequest) Encode

func (src *CancelRequest) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 4 byte message length.

func (*CancelRequest) Frontend

func (*CancelRequest) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (CancelRequest) MarshalJSON

func (src CancelRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ChunkReader

type ChunkReader interface {
	// Next returns buf filled with the next n bytes. If an error (including a partial read) occurs,
	// buf must be nil. Next must preserve any partially read data. Next must not reuse buf.
	Next(n int) (buf []byte, err error)
}

ChunkReader is an interface to decouple github.com/jackc/chunkreader from this package.

func NewChunkReader

func NewChunkReader(r io.Reader) ChunkReader

NewChunkReader creates and returns a new default ChunkReader.

type Close

type Close struct {
	ObjectType byte // 'S' = prepared statement, 'P' = portal
	Name       string
}

func (*Close) Decode

func (dst *Close) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Close) Encode

func (src *Close) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Close) Frontend

func (*Close) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Close) MarshalJSON

func (src Close) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*Close) UnmarshalJSON

func (dst *Close) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type CloseComplete

type CloseComplete struct{}

func (*CloseComplete) Backend

func (*CloseComplete) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CloseComplete) Decode

func (dst *CloseComplete) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CloseComplete) Encode

func (src *CloseComplete) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (CloseComplete) MarshalJSON

func (src CloseComplete) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type CommandComplete

type CommandComplete struct {
	CommandTag []byte
}

func (*CommandComplete) Backend

func (*CommandComplete) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CommandComplete) Decode

func (dst *CommandComplete) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CommandComplete) Encode

func (src *CommandComplete) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (CommandComplete) MarshalJSON

func (src CommandComplete) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*CommandComplete) UnmarshalJSON

func (dst *CommandComplete) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type CopyBothResponse

type CopyBothResponse struct {
	OverallFormat     byte
	ColumnFormatCodes []uint16
}

func (*CopyBothResponse) Backend

func (*CopyBothResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CopyBothResponse) Decode

func (dst *CopyBothResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyBothResponse) Encode

func (src *CopyBothResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (CopyBothResponse) MarshalJSON

func (src CopyBothResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*CopyBothResponse) UnmarshalJSON

func (dst *CopyBothResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type CopyData

type CopyData struct {
	Data []byte
}

func (*CopyData) Backend

func (*CopyData) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CopyData) Decode

func (dst *CopyData) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyData) Encode

func (src *CopyData) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*CopyData) Frontend

func (*CopyData) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (CopyData) MarshalJSON

func (src CopyData) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*CopyData) UnmarshalJSON

func (dst *CopyData) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type CopyDone

type CopyDone struct {
}

func (*CopyDone) Backend

func (*CopyDone) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CopyDone) Decode

func (dst *CopyDone) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyDone) Encode

func (src *CopyDone) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*CopyDone) Frontend

func (*CopyDone) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (CopyDone) MarshalJSON

func (src CopyDone) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type CopyFail

type CopyFail struct {
	Message string
}

func (*CopyFail) Decode

func (dst *CopyFail) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyFail) Encode

func (src *CopyFail) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*CopyFail) Frontend

func (*CopyFail) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (CopyFail) MarshalJSON

func (src CopyFail) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type CopyInResponse

type CopyInResponse struct {
	OverallFormat     byte
	ColumnFormatCodes []uint16
}

func (*CopyInResponse) Backend

func (*CopyInResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*CopyInResponse) Decode

func (dst *CopyInResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyInResponse) Encode

func (src *CopyInResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (CopyInResponse) MarshalJSON

func (src CopyInResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*CopyInResponse) UnmarshalJSON

func (dst *CopyInResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type CopyOutResponse

type CopyOutResponse struct {
	OverallFormat     byte
	ColumnFormatCodes []uint16
}

func (*CopyOutResponse) Backend

func (*CopyOutResponse) Backend()

func (*CopyOutResponse) Decode

func (dst *CopyOutResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*CopyOutResponse) Encode

func (src *CopyOutResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (CopyOutResponse) MarshalJSON

func (src CopyOutResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*CopyOutResponse) UnmarshalJSON

func (dst *CopyOutResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type DataRow

type DataRow struct {
	Values [][]byte
}

func (*DataRow) Backend

func (*DataRow) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*DataRow) Decode

func (dst *DataRow) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*DataRow) Encode

func (src *DataRow) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (DataRow) MarshalJSON

func (src DataRow) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*DataRow) UnmarshalJSON

func (dst *DataRow) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type Describe

type Describe struct {
	ObjectType byte // 'S' = prepared statement, 'P' = portal
	Name       string
}

func (*Describe) Decode

func (dst *Describe) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Describe) Encode

func (src *Describe) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Describe) Frontend

func (*Describe) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Describe) MarshalJSON

func (src Describe) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*Describe) UnmarshalJSON

func (dst *Describe) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type EmptyQueryResponse

type EmptyQueryResponse struct{}

func (*EmptyQueryResponse) Backend

func (*EmptyQueryResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*EmptyQueryResponse) Decode

func (dst *EmptyQueryResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*EmptyQueryResponse) Encode

func (src *EmptyQueryResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (EmptyQueryResponse) MarshalJSON

func (src EmptyQueryResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ErrorResponse

type ErrorResponse struct {
	Severity            string
	SeverityUnlocalized string // only in 9.6 and greater
	Code                string
	Message             string
	Detail              string
	Hint                string
	Position            int32
	InternalPosition    int32
	InternalQuery       string
	Where               string
	SchemaName          string
	TableName           string
	ColumnName          string
	DataTypeName        string
	ConstraintName      string
	File                string
	Line                int32
	Routine             string

	UnknownFields map[byte]string
}

func (*ErrorResponse) Backend

func (*ErrorResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*ErrorResponse) Decode

func (dst *ErrorResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*ErrorResponse) Encode

func (src *ErrorResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (ErrorResponse) MarshalJSON

func (src ErrorResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*ErrorResponse) UnmarshalJSON

func (dst *ErrorResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type Execute

type Execute struct {
	Portal  string
	MaxRows uint32
}

func (*Execute) Decode

func (dst *Execute) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Execute) Encode

func (src *Execute) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Execute) Frontend

func (*Execute) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Execute) MarshalJSON

func (src Execute) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type FieldDescription

type FieldDescription struct {
	Name                 []byte
	TableOID             uint32
	TableAttributeNumber uint16
	DataTypeOID          uint32
	DataTypeSize         int16
	TypeModifier         int32
	Format               int16
}

func (FieldDescription) MarshalJSON

func (fd FieldDescription) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Flush

type Flush struct{}

func (*Flush) Decode

func (dst *Flush) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Flush) Encode

func (src *Flush) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Flush) Frontend

func (*Flush) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Flush) MarshalJSON

func (src Flush) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Frontend

type Frontend struct {
	MsgType byte
	// contains filtered or unexported fields
}

Frontend acts as a client for the PostgreSQL wire protocol version 3.

func NewFrontend

func NewFrontend(cr ChunkReader, w io.Writer) *Frontend

NewFrontend creates a new Frontend.

func (*Frontend) GetAuthType

func (f *Frontend) GetAuthType() uint32

GetAuthType returns the authType used in the current state of the frontend. See SetAuthType for more information.

func (*Frontend) Receive

func (f *Frontend) Receive() (BackendMessage, error)

Receive receives a message from the backend. The returned message is only valid until the next call to Receive.

func (*Frontend) Send

func (f *Frontend) Send(msg FrontendMessage) error

Send sends a message to the backend.

type FrontendMessage

type FrontendMessage interface {
	Message
	Frontend() // no-op method to distinguish frontend from backend methods
}

type FunctionCall

type FunctionCall struct {
	Function         uint32
	ArgFormatCodes   []uint16
	Arguments        [][]byte
	ResultFormatCode uint16
}

func (*FunctionCall) Decode

func (dst *FunctionCall) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*FunctionCall) Encode

func (src *FunctionCall) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*FunctionCall) Frontend

func (*FunctionCall) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

type FunctionCallResponse

type FunctionCallResponse struct {
	Result []byte
}

func (*FunctionCallResponse) Backend

func (*FunctionCallResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*FunctionCallResponse) Decode

func (dst *FunctionCallResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*FunctionCallResponse) Encode

func (src *FunctionCallResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (FunctionCallResponse) MarshalJSON

func (src FunctionCallResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*FunctionCallResponse) UnmarshalJSON

func (dst *FunctionCallResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type GSSEncRequest

type GSSEncRequest struct {
}

func (*GSSEncRequest) Decode

func (dst *GSSEncRequest) Decode(src []byte) error

func (*GSSEncRequest) Encode

func (src *GSSEncRequest) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 4 byte message length.

func (*GSSEncRequest) Frontend

func (*GSSEncRequest) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (GSSEncRequest) MarshalJSON

func (src GSSEncRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Message

type Message interface {
	// Decode is allowed and expected to retain a reference to data after
	// returning (unlike encoding.BinaryUnmarshaler).
	Decode(data []byte) error

	// Encode appends itself to dst and returns the new buffer.
	Encode(dst []byte) []byte
}

Message is the interface implemented by an object that can decode and encode a particular PostgreSQL message.

type NoData

type NoData struct{}

func (*NoData) Backend

func (*NoData) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*NoData) Decode

func (dst *NoData) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*NoData) Encode

func (src *NoData) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (NoData) MarshalJSON

func (src NoData) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type NoticeResponse

type NoticeResponse ErrorResponse

func (*NoticeResponse) Backend

func (*NoticeResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*NoticeResponse) Decode

func (dst *NoticeResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*NoticeResponse) Encode

func (src *NoticeResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

type NotificationResponse

type NotificationResponse struct {
	PID     uint32
	Channel string
	Payload string
}

func (*NotificationResponse) Backend

func (*NotificationResponse) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*NotificationResponse) Decode

func (dst *NotificationResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*NotificationResponse) Encode

func (src *NotificationResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (NotificationResponse) MarshalJSON

func (src NotificationResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ParameterDescription

type ParameterDescription struct {
	ParameterOIDs []uint32
}

func (*ParameterDescription) Backend

func (*ParameterDescription) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*ParameterDescription) Decode

func (dst *ParameterDescription) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*ParameterDescription) Encode

func (src *ParameterDescription) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (ParameterDescription) MarshalJSON

func (src ParameterDescription) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ParameterStatus

type ParameterStatus struct {
	Name  string
	Value string
}

func (*ParameterStatus) Backend

func (*ParameterStatus) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*ParameterStatus) Decode

func (dst *ParameterStatus) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*ParameterStatus) Encode

func (src *ParameterStatus) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (ParameterStatus) MarshalJSON

func (ps ParameterStatus) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Parse

type Parse struct {
	Name          string
	Query         string
	ParameterOIDs []uint32
}

func (*Parse) Decode

func (dst *Parse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Parse) Encode

func (src *Parse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Parse) Frontend

func (*Parse) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Parse) MarshalJSON

func (src Parse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ParseComplete

type ParseComplete struct{}

func (*ParseComplete) Backend

func (*ParseComplete) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*ParseComplete) Decode

func (dst *ParseComplete) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*ParseComplete) Encode

func (src *ParseComplete) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (ParseComplete) MarshalJSON

func (src ParseComplete) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type PasswordMessage

type PasswordMessage struct {
	Password string
}

func (*PasswordMessage) Decode

func (dst *PasswordMessage) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*PasswordMessage) Encode

func (src *PasswordMessage) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*PasswordMessage) Frontend

func (*PasswordMessage) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (*PasswordMessage) InitialResponse

func (*PasswordMessage) InitialResponse()

Frontend identifies this message as an authentication response.

func (PasswordMessage) MarshalJSON

func (src PasswordMessage) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type PortalSuspended

type PortalSuspended struct{}

func (*PortalSuspended) Backend

func (*PortalSuspended) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*PortalSuspended) Decode

func (dst *PortalSuspended) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*PortalSuspended) Encode

func (src *PortalSuspended) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (PortalSuspended) MarshalJSON

func (src PortalSuspended) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Query

type Query struct {
	String string
}

func (*Query) Decode

func (dst *Query) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Query) Encode

func (src *Query) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Query) Frontend

func (*Query) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Query) MarshalJSON

func (src Query) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type ReadyForQuery

type ReadyForQuery struct {
	TxStatus byte
}

func (*ReadyForQuery) Backend

func (*ReadyForQuery) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*ReadyForQuery) Decode

func (dst *ReadyForQuery) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*ReadyForQuery) Encode

func (src *ReadyForQuery) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (ReadyForQuery) MarshalJSON

func (src ReadyForQuery) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*ReadyForQuery) UnmarshalJSON

func (dst *ReadyForQuery) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type RowDescription

type RowDescription struct {
	Fields []FieldDescription
}

func (*RowDescription) Backend

func (*RowDescription) Backend()

Backend identifies this message as sendable by the PostgreSQL backend.

func (*RowDescription) Decode

func (dst *RowDescription) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*RowDescription) Encode

func (src *RowDescription) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (RowDescription) MarshalJSON

func (src RowDescription) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*RowDescription) UnmarshalJSON

func (dst *RowDescription) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type SASLInitialResponse

type SASLInitialResponse struct {
	AuthMechanism string
	Data          []byte
}

func (*SASLInitialResponse) Decode

func (dst *SASLInitialResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*SASLInitialResponse) Encode

func (src *SASLInitialResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*SASLInitialResponse) Frontend

func (*SASLInitialResponse) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (SASLInitialResponse) MarshalJSON

func (src SASLInitialResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*SASLInitialResponse) UnmarshalJSON

func (dst *SASLInitialResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type SASLResponse

type SASLResponse struct {
	Data []byte
}

func (*SASLResponse) Decode

func (dst *SASLResponse) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*SASLResponse) Encode

func (src *SASLResponse) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*SASLResponse) Frontend

func (*SASLResponse) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (SASLResponse) MarshalJSON

func (src SASLResponse) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

func (*SASLResponse) UnmarshalJSON

func (dst *SASLResponse) UnmarshalJSON(data []byte) error

UnmarshalJSON implements encoding/json.Unmarshaler.

type SSLRequest

type SSLRequest struct {
}

func (*SSLRequest) Decode

func (dst *SSLRequest) Decode(src []byte) error

func (*SSLRequest) Encode

func (src *SSLRequest) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 4 byte message length.

func (*SSLRequest) Frontend

func (*SSLRequest) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (SSLRequest) MarshalJSON

func (src SSLRequest) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type StartupMessage

type StartupMessage struct {
	ProtocolVersion uint32
	Parameters      map[string]string
}

func (*StartupMessage) Decode

func (dst *StartupMessage) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*StartupMessage) Encode

func (src *StartupMessage) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*StartupMessage) Frontend

func (*StartupMessage) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (StartupMessage) MarshalJSON

func (src StartupMessage) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Sync

type Sync struct{}

func (*Sync) Decode

func (dst *Sync) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Sync) Encode

func (src *Sync) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Sync) Frontend

func (*Sync) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Sync) MarshalJSON

func (src Sync) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

type Terminate

type Terminate struct{}

func (*Terminate) Decode

func (dst *Terminate) Decode(src []byte) error

Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message type identifier and 4 byte message length.

func (*Terminate) Encode

func (src *Terminate) Encode(dst []byte) []byte

Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.

func (*Terminate) Frontend

func (*Terminate) Frontend()

Frontend identifies this message as sendable by a PostgreSQL frontend.

func (Terminate) MarshalJSON

func (src Terminate) MarshalJSON() ([]byte, error)

MarshalJSON implements encoding/json.Marshaler.

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL