summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/v5/pgproto3
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgx/v5/pgproto3')
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/README.md7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go51
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss.go58
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss_continue.go67
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_md5_password.go76
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go51
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl.go72
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_continue.go75
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_final.go75
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/backend.go299
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/backend_key_data.go50
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/big_endian.go37
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/bind.go223
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/bind_complete.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/cancel_request.go58
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/chunkreader.go90
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/close.go81
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/close_complete.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/command_complete.go66
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_both_response.go95
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_data.go59
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go38
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_fail.go45
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_in_response.go96
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_out_response.go96
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/data_row.go143
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/describe.go80
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/doc.go11
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/empty_query_response.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/error_response.go326
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/execute.go58
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/flush.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/frontend.go468
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/function_call.go102
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/function_call_response.go97
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go49
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/gss_response.go46
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/no_data.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/notice_response.go19
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/notification_response.go71
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/parameter_description.go67
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/parameter_status.go58
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/parse.go89
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/parse_complete.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/password_message.go49
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/pgproto3.go120
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/portal_suspended.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/query.go45
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/ready_for_query.go61
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go166
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/sasl_initial_response.go90
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go56
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go49
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/startup_message.go94
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/sync.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/terminate.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/trace.go416
57 files changed, 0 insertions, 5001 deletions
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/README.md b/vendor/github.com/jackc/pgx/v5/pgproto3/README.md
deleted file mode 100644
index 7a26f1cbd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# pgproto3
-
-Package pgproto3 is an 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.
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
deleted file mode 100644
index ac2962e9e..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationCleartextPassword is a message sent from the backend indicating that a clear-text password is required.
-type AuthenticationCleartextPassword struct {
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationCleartextPassword) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationCleartextPassword) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationCleartextPassword) Decode(src []byte) error {
- if len(src) != 4 {
- return errors.New("bad authentication message size")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeCleartextPassword {
- return errors.New("bad auth type")
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationCleartextPassword) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeCleartextPassword)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src AuthenticationCleartextPassword) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "AuthenticationCleartextPassword",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss.go
deleted file mode 100644
index 178ef31d8..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type AuthenticationGSS struct{}
-
-func (a *AuthenticationGSS) Backend() {}
-
-func (a *AuthenticationGSS) AuthenticationResponse() {}
-
-func (a *AuthenticationGSS) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("authentication message too short")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeGSS {
- return errors.New("bad auth type")
- }
- return nil
-}
-
-func (a *AuthenticationGSS) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeGSS)
- return finishMessage(dst, sp)
-}
-
-func (a *AuthenticationGSS) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data []byte
- }{
- Type: "AuthenticationGSS",
- })
-}
-
-func (a *AuthenticationGSS) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Type string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss_continue.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss_continue.go
deleted file mode 100644
index 2ba3f3b3e..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_gss_continue.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type AuthenticationGSSContinue struct {
- Data []byte
-}
-
-func (a *AuthenticationGSSContinue) Backend() {}
-
-func (a *AuthenticationGSSContinue) AuthenticationResponse() {}
-
-func (a *AuthenticationGSSContinue) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("authentication message too short")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeGSSCont {
- return errors.New("bad auth type")
- }
-
- a.Data = src[4:]
- return nil
-}
-
-func (a *AuthenticationGSSContinue) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeGSSCont)
- dst = append(dst, a.Data...)
- return finishMessage(dst, sp)
-}
-
-func (a *AuthenticationGSSContinue) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data []byte
- }{
- Type: "AuthenticationGSSContinue",
- Data: a.Data,
- })
-}
-
-func (a *AuthenticationGSSContinue) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Type string
- Data []byte
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- a.Data = msg.Data
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_md5_password.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_md5_password.go
deleted file mode 100644
index 854c6404e..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_md5_password.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationMD5Password is a message sent from the backend indicating that an MD5 hashed password is required.
-type AuthenticationMD5Password struct {
- Salt [4]byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationMD5Password) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationMD5Password) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationMD5Password) Decode(src []byte) error {
- if len(src) != 8 {
- return errors.New("bad authentication message size")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeMD5Password {
- return errors.New("bad auth type")
- }
-
- copy(dst.Salt[:], src[4:8])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationMD5Password) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeMD5Password)
- dst = append(dst, src.Salt[:]...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src AuthenticationMD5Password) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Salt [4]byte
- }{
- Type: "AuthenticationMD5Password",
- Salt: src.Salt,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *AuthenticationMD5Password) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Type string
- Salt [4]byte
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Salt = msg.Salt
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
deleted file mode 100644
index ec11d39f1..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationOk is a message sent from the backend indicating that authentication was successful.
-type AuthenticationOk struct {
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationOk) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationOk) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationOk) Decode(src []byte) error {
- if len(src) != 4 {
- return errors.New("bad authentication message size")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeOk {
- return errors.New("bad auth type")
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationOk) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeOk)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src AuthenticationOk) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "AuthenticationOK",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl.go
deleted file mode 100644
index e66580f44..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationSASL is a message sent from the backend indicating that SASL authentication is required.
-type AuthenticationSASL struct {
- AuthMechanisms []string
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationSASL) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationSASL) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationSASL) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("authentication message too short")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeSASL {
- return errors.New("bad auth type")
- }
-
- authMechanisms := src[4:]
- for len(authMechanisms) > 1 {
- idx := bytes.IndexByte(authMechanisms, 0)
- if idx == -1 {
- return &invalidMessageFormatErr{messageType: "AuthenticationSASL", details: "unterminated string"}
- }
- dst.AuthMechanisms = append(dst.AuthMechanisms, string(authMechanisms[:idx]))
- authMechanisms = authMechanisms[idx+1:]
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationSASL) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeSASL)
-
- for _, s := range src.AuthMechanisms {
- dst = append(dst, []byte(s)...)
- dst = append(dst, 0)
- }
- dst = append(dst, 0)
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src AuthenticationSASL) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- AuthMechanisms []string
- }{
- Type: "AuthenticationSASL",
- AuthMechanisms: src.AuthMechanisms,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_continue.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_continue.go
deleted file mode 100644
index 70fba4a67..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_continue.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationSASLContinue is a message sent from the backend containing a SASL challenge.
-type AuthenticationSASLContinue struct {
- Data []byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationSASLContinue) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationSASLContinue) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationSASLContinue) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("authentication message too short")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeSASLContinue {
- return errors.New("bad auth type")
- }
-
- dst.Data = src[4:]
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationSASLContinue) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeSASLContinue)
- dst = append(dst, src.Data...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src AuthenticationSASLContinue) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data string
- }{
- Type: "AuthenticationSASLContinue",
- Data: string(src.Data),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *AuthenticationSASLContinue) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Data string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Data = []byte(msg.Data)
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_final.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_final.go
deleted file mode 100644
index 84976c2a3..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_sasl_final.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// AuthenticationSASLFinal is a message sent from the backend indicating a SASL authentication has completed.
-type AuthenticationSASLFinal struct {
- Data []byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*AuthenticationSASLFinal) Backend() {}
-
-// Backend identifies this message as an authentication response.
-func (*AuthenticationSASLFinal) AuthenticationResponse() {}
-
-// 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 (dst *AuthenticationSASLFinal) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("authentication message too short")
- }
-
- authType := binary.BigEndian.Uint32(src)
-
- if authType != AuthTypeSASLFinal {
- return errors.New("bad auth type")
- }
-
- dst.Data = src[4:]
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *AuthenticationSASLFinal) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'R')
- dst = pgio.AppendUint32(dst, AuthTypeSASLFinal)
- dst = append(dst, src.Data...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Unmarshaler.
-func (src AuthenticationSASLFinal) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data string
- }{
- Type: "AuthenticationSASLFinal",
- Data: string(src.Data),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *AuthenticationSASLFinal) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Data string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Data = []byte(msg.Data)
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/backend.go b/vendor/github.com/jackc/pgx/v5/pgproto3/backend.go
deleted file mode 100644
index 28cff049a..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/backend.go
+++ /dev/null
@@ -1,299 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "io"
-)
-
-// Backend acts as a server for the PostgreSQL wire protocol version 3.
-type Backend struct {
- cr *chunkReader
- w io.Writer
-
- // tracer is used to trace messages when Send or Receive is called. This means an outbound message is traced
- // before it is actually transmitted (i.e. before Flush).
- tracer *tracer
-
- wbuf []byte
- encodeError error
-
- // Frontend message flyweights
- bind Bind
- cancelRequest CancelRequest
- _close Close
- copyFail CopyFail
- copyData CopyData
- copyDone CopyDone
- describe Describe
- execute Execute
- flush Flush
- functionCall FunctionCall
- gssEncRequest GSSEncRequest
- parse Parse
- query Query
- sslRequest SSLRequest
- startupMessage StartupMessage
- sync Sync
- terminate Terminate
-
- bodyLen int
- maxBodyLen int // maxBodyLen is the maximum length of a message body in octets. If a message body exceeds this length, Receive will return an error.
- msgType byte
- partialMsg bool
- authType uint32
-}
-
-const (
- minStartupPacketLen = 4 // minStartupPacketLen is a single 32-bit int version or code.
- maxStartupPacketLen = 10000 // maxStartupPacketLen is MAX_STARTUP_PACKET_LENGTH from PG source.
-)
-
-// NewBackend creates a new Backend.
-func NewBackend(r io.Reader, w io.Writer) *Backend {
- cr := newChunkReader(r, 0)
- return &Backend{cr: cr, w: w}
-}
-
-// Send sends a message to the frontend (i.e. the client). The message is buffered until Flush is called. Any error
-// encountered will be returned from Flush.
-func (b *Backend) Send(msg BackendMessage) {
- if b.encodeError != nil {
- return
- }
-
- prevLen := len(b.wbuf)
- newBuf, err := msg.Encode(b.wbuf)
- if err != nil {
- b.encodeError = err
- return
- }
- b.wbuf = newBuf
-
- if b.tracer != nil {
- b.tracer.traceMessage('B', int32(len(b.wbuf)-prevLen), msg)
- }
-}
-
-// Flush writes any pending messages to the frontend (i.e. the client).
-func (b *Backend) Flush() error {
- if err := b.encodeError; err != nil {
- b.encodeError = nil
- b.wbuf = b.wbuf[:0]
- return &writeError{err: err, safeToRetry: true}
- }
-
- n, err := b.w.Write(b.wbuf)
-
- const maxLen = 1024
- if len(b.wbuf) > maxLen {
- b.wbuf = make([]byte, 0, maxLen)
- } else {
- b.wbuf = b.wbuf[:0]
- }
-
- if err != nil {
- return &writeError{err: err, safeToRetry: n == 0}
- }
-
- return nil
-}
-
-// Trace starts tracing the message traffic to w. It writes in a similar format to that produced by the libpq function
-// PQtrace.
-func (b *Backend) Trace(w io.Writer, options TracerOptions) {
- b.tracer = &tracer{
- w: w,
- buf: &bytes.Buffer{},
- TracerOptions: options,
- }
-}
-
-// Untrace stops tracing.
-func (b *Backend) Untrace() {
- b.tracer = nil
-}
-
-// 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 (b *Backend) ReceiveStartupMessage() (FrontendMessage, error) {
- buf, err := b.cr.Next(4)
- if err != nil {
- return nil, err
- }
- msgSize := int(binary.BigEndian.Uint32(buf) - 4)
-
- if msgSize < minStartupPacketLen || msgSize > maxStartupPacketLen {
- return nil, fmt.Errorf("invalid length of startup packet: %d", msgSize)
- }
-
- buf, err = b.cr.Next(msgSize)
- if err != nil {
- return nil, translateEOFtoErrUnexpectedEOF(err)
- }
-
- code := binary.BigEndian.Uint32(buf)
-
- switch code {
- case ProtocolVersionNumber:
- err = b.startupMessage.Decode(buf)
- if err != nil {
- return nil, err
- }
- return &b.startupMessage, nil
- case sslRequestNumber:
- err = b.sslRequest.Decode(buf)
- if err != nil {
- return nil, err
- }
- return &b.sslRequest, nil
- case cancelRequestCode:
- err = b.cancelRequest.Decode(buf)
- if err != nil {
- return nil, err
- }
- return &b.cancelRequest, nil
- case gssEncReqNumber:
- err = b.gssEncRequest.Decode(buf)
- if err != nil {
- return nil, err
- }
- return &b.gssEncRequest, nil
- default:
- return nil, fmt.Errorf("unknown startup message code: %d", code)
- }
-}
-
-// Receive receives a message from the frontend. The returned message is only valid until the next call to Receive.
-func (b *Backend) Receive() (FrontendMessage, error) {
- if !b.partialMsg {
- header, err := b.cr.Next(5)
- if err != nil {
- return nil, translateEOFtoErrUnexpectedEOF(err)
- }
-
- b.msgType = header[0]
-
- msgLength := int(binary.BigEndian.Uint32(header[1:]))
- if msgLength < 4 {
- return nil, fmt.Errorf("invalid message length: %d", msgLength)
- }
-
- b.bodyLen = msgLength - 4
- if b.maxBodyLen > 0 && b.bodyLen > b.maxBodyLen {
- return nil, &ExceededMaxBodyLenErr{b.maxBodyLen, b.bodyLen}
- }
- b.partialMsg = true
- }
-
- var msg FrontendMessage
- switch b.msgType {
- case 'B':
- msg = &b.bind
- case 'C':
- msg = &b._close
- case 'D':
- msg = &b.describe
- case 'E':
- msg = &b.execute
- case 'F':
- msg = &b.functionCall
- case 'f':
- msg = &b.copyFail
- case 'd':
- msg = &b.copyData
- case 'c':
- msg = &b.copyDone
- case 'H':
- msg = &b.flush
- case 'P':
- msg = &b.parse
- case 'p':
- switch b.authType {
- case AuthTypeSASL:
- msg = &SASLInitialResponse{}
- case AuthTypeSASLContinue:
- msg = &SASLResponse{}
- case AuthTypeSASLFinal:
- msg = &SASLResponse{}
- case AuthTypeGSS, AuthTypeGSSCont:
- msg = &GSSResponse{}
- case AuthTypeCleartextPassword, AuthTypeMD5Password:
- fallthrough
- default:
- // to maintain backwards compatibility
- msg = &PasswordMessage{}
- }
- case 'Q':
- msg = &b.query
- case 'S':
- msg = &b.sync
- case 'X':
- msg = &b.terminate
- default:
- return nil, fmt.Errorf("unknown message type: %c", b.msgType)
- }
-
- msgBody, err := b.cr.Next(b.bodyLen)
- if err != nil {
- return nil, translateEOFtoErrUnexpectedEOF(err)
- }
-
- b.partialMsg = false
-
- err = msg.Decode(msgBody)
- if err != nil {
- return nil, err
- }
-
- if b.tracer != nil {
- b.tracer.traceMessage('F', int32(5+len(msgBody)), msg)
- }
-
- return msg, nil
-}
-
-// 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.
-func (b *Backend) SetAuthType(authType uint32) error {
- switch authType {
- case AuthTypeOk,
- AuthTypeCleartextPassword,
- AuthTypeMD5Password,
- AuthTypeSCMCreds,
- AuthTypeGSS,
- AuthTypeGSSCont,
- AuthTypeSSPI,
- AuthTypeSASL,
- AuthTypeSASLContinue,
- AuthTypeSASLFinal:
- b.authType = authType
- default:
- return fmt.Errorf("authType not recognized: %d", authType)
- }
-
- return nil
-}
-
-// SetMaxBodyLen sets the maximum length of a message body in octets.
-// If a message body exceeds this length, Receive will return an error.
-// This is useful for protecting against malicious clients that send
-// large messages with the intent of causing memory exhaustion.
-// The default value is 0.
-// If maxBodyLen is 0, then no maximum is enforced.
-func (b *Backend) SetMaxBodyLen(maxBodyLen int) {
- b.maxBodyLen = maxBodyLen
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/backend_key_data.go b/vendor/github.com/jackc/pgx/v5/pgproto3/backend_key_data.go
deleted file mode 100644
index 23f5da677..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/backend_key_data.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type BackendKeyData struct {
- ProcessID uint32
- SecretKey uint32
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*BackendKeyData) Backend() {}
-
-// 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 (dst *BackendKeyData) Decode(src []byte) error {
- if len(src) != 8 {
- return &invalidMessageLenErr{messageType: "BackendKeyData", expectedLen: 8, actualLen: len(src)}
- }
-
- dst.ProcessID = binary.BigEndian.Uint32(src[:4])
- dst.SecretKey = binary.BigEndian.Uint32(src[4:])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *BackendKeyData) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'K')
- dst = pgio.AppendUint32(dst, src.ProcessID)
- dst = pgio.AppendUint32(dst, src.SecretKey)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src BackendKeyData) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ProcessID uint32
- SecretKey uint32
- }{
- Type: "BackendKeyData",
- ProcessID: src.ProcessID,
- SecretKey: src.SecretKey,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/big_endian.go b/vendor/github.com/jackc/pgx/v5/pgproto3/big_endian.go
deleted file mode 100644
index f7bdb97eb..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/big_endian.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
-)
-
-type BigEndianBuf [8]byte
-
-func (b BigEndianBuf) Int16(n int16) []byte {
- buf := b[0:2]
- binary.BigEndian.PutUint16(buf, uint16(n))
- return buf
-}
-
-func (b BigEndianBuf) Uint16(n uint16) []byte {
- buf := b[0:2]
- binary.BigEndian.PutUint16(buf, n)
- return buf
-}
-
-func (b BigEndianBuf) Int32(n int32) []byte {
- buf := b[0:4]
- binary.BigEndian.PutUint32(buf, uint32(n))
- return buf
-}
-
-func (b BigEndianBuf) Uint32(n uint32) []byte {
- buf := b[0:4]
- binary.BigEndian.PutUint32(buf, n)
- return buf
-}
-
-func (b BigEndianBuf) Int64(n int64) []byte {
- buf := b[0:8]
- binary.BigEndian.PutUint64(buf, uint64(n))
- return buf
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/bind.go b/vendor/github.com/jackc/pgx/v5/pgproto3/bind.go
deleted file mode 100644
index ad6ac48bf..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/bind.go
+++ /dev/null
@@ -1,223 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/hex"
- "encoding/json"
- "errors"
- "fmt"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type Bind struct {
- DestinationPortal string
- PreparedStatement string
- ParameterFormatCodes []int16
- Parameters [][]byte
- ResultFormatCodes []int16
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Bind) Frontend() {}
-
-// 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 (dst *Bind) Decode(src []byte) error {
- *dst = Bind{}
-
- idx := bytes.IndexByte(src, 0)
- if idx < 0 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- dst.DestinationPortal = string(src[:idx])
- rp := idx + 1
-
- idx = bytes.IndexByte(src[rp:], 0)
- if idx < 0 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- dst.PreparedStatement = string(src[rp : rp+idx])
- rp += idx + 1
-
- if len(src[rp:]) < 2 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- parameterFormatCodeCount := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
-
- if parameterFormatCodeCount > 0 {
- dst.ParameterFormatCodes = make([]int16, parameterFormatCodeCount)
-
- if len(src[rp:]) < len(dst.ParameterFormatCodes)*2 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- for i := 0; i < parameterFormatCodeCount; i++ {
- dst.ParameterFormatCodes[i] = int16(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
- }
- }
-
- if len(src[rp:]) < 2 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- parameterCount := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
-
- if parameterCount > 0 {
- dst.Parameters = make([][]byte, parameterCount)
-
- for i := 0; i < parameterCount; i++ {
- if len(src[rp:]) < 4 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
-
- msgSize := int(int32(binary.BigEndian.Uint32(src[rp:])))
- rp += 4
-
- // null
- if msgSize == -1 {
- continue
- }
-
- if len(src[rp:]) < msgSize {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
-
- dst.Parameters[i] = src[rp : rp+msgSize]
- rp += msgSize
- }
- }
-
- if len(src[rp:]) < 2 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- resultFormatCodeCount := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
-
- dst.ResultFormatCodes = make([]int16, resultFormatCodeCount)
- if len(src[rp:]) < len(dst.ResultFormatCodes)*2 {
- return &invalidMessageFormatErr{messageType: "Bind"}
- }
- for i := 0; i < resultFormatCodeCount; i++ {
- dst.ResultFormatCodes[i] = int16(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Bind) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'B')
-
- dst = append(dst, src.DestinationPortal...)
- dst = append(dst, 0)
- dst = append(dst, src.PreparedStatement...)
- dst = append(dst, 0)
-
- if len(src.ParameterFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many parameter format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ParameterFormatCodes)))
- for _, fc := range src.ParameterFormatCodes {
- dst = pgio.AppendInt16(dst, fc)
- }
-
- if len(src.Parameters) > math.MaxUint16 {
- return nil, errors.New("too many parameters")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.Parameters)))
- for _, p := range src.Parameters {
- if p == nil {
- dst = pgio.AppendInt32(dst, -1)
- continue
- }
-
- dst = pgio.AppendInt32(dst, int32(len(p)))
- dst = append(dst, p...)
- }
-
- if len(src.ResultFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many result format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ResultFormatCodes)))
- for _, fc := range src.ResultFormatCodes {
- dst = pgio.AppendInt16(dst, fc)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Bind) MarshalJSON() ([]byte, error) {
- formattedParameters := make([]map[string]string, len(src.Parameters))
- for i, p := range src.Parameters {
- if p == nil {
- continue
- }
-
- textFormat := true
- if len(src.ParameterFormatCodes) == 1 {
- textFormat = src.ParameterFormatCodes[0] == 0
- } else if len(src.ParameterFormatCodes) > 1 {
- textFormat = src.ParameterFormatCodes[i] == 0
- }
-
- if textFormat {
- formattedParameters[i] = map[string]string{"text": string(p)}
- } else {
- formattedParameters[i] = map[string]string{"binary": hex.EncodeToString(p)}
- }
- }
-
- return json.Marshal(struct {
- Type string
- DestinationPortal string
- PreparedStatement string
- ParameterFormatCodes []int16
- Parameters []map[string]string
- ResultFormatCodes []int16
- }{
- Type: "Bind",
- DestinationPortal: src.DestinationPortal,
- PreparedStatement: src.PreparedStatement,
- ParameterFormatCodes: src.ParameterFormatCodes,
- Parameters: formattedParameters,
- ResultFormatCodes: src.ResultFormatCodes,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *Bind) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- DestinationPortal string
- PreparedStatement string
- ParameterFormatCodes []int16
- Parameters []map[string]string
- ResultFormatCodes []int16
- }
- err := json.Unmarshal(data, &msg)
- if err != nil {
- return err
- }
- dst.DestinationPortal = msg.DestinationPortal
- dst.PreparedStatement = msg.PreparedStatement
- dst.ParameterFormatCodes = msg.ParameterFormatCodes
- dst.Parameters = make([][]byte, len(msg.Parameters))
- dst.ResultFormatCodes = msg.ResultFormatCodes
- for n, parameter := range msg.Parameters {
- dst.Parameters[n], err = getValueFromJSON(parameter)
- if err != nil {
- return fmt.Errorf("cannot get param %d: %w", n, err)
- }
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/bind_complete.go b/vendor/github.com/jackc/pgx/v5/pgproto3/bind_complete.go
deleted file mode 100644
index bacf30d88..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/bind_complete.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type BindComplete struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*BindComplete) Backend() {}
-
-// 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 (dst *BindComplete) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "BindComplete", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *BindComplete) Encode(dst []byte) ([]byte, error) {
- return append(dst, '2', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src BindComplete) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "BindComplete",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/cancel_request.go b/vendor/github.com/jackc/pgx/v5/pgproto3/cancel_request.go
deleted file mode 100644
index 6b52dd977..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/cancel_request.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-const cancelRequestCode = 80877102
-
-type CancelRequest struct {
- ProcessID uint32
- SecretKey uint32
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*CancelRequest) Frontend() {}
-
-func (dst *CancelRequest) Decode(src []byte) error {
- if len(src) != 12 {
- return errors.New("bad cancel request size")
- }
-
- requestCode := binary.BigEndian.Uint32(src)
-
- if requestCode != cancelRequestCode {
- return errors.New("bad cancel request code")
- }
-
- dst.ProcessID = binary.BigEndian.Uint32(src[4:])
- dst.SecretKey = binary.BigEndian.Uint32(src[8:])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 4 byte message length.
-func (src *CancelRequest) Encode(dst []byte) ([]byte, error) {
- dst = pgio.AppendInt32(dst, 16)
- dst = pgio.AppendInt32(dst, cancelRequestCode)
- dst = pgio.AppendUint32(dst, src.ProcessID)
- dst = pgio.AppendUint32(dst, src.SecretKey)
- return dst, nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CancelRequest) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ProcessID uint32
- SecretKey uint32
- }{
- Type: "CancelRequest",
- ProcessID: src.ProcessID,
- SecretKey: src.SecretKey,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/chunkreader.go b/vendor/github.com/jackc/pgx/v5/pgproto3/chunkreader.go
deleted file mode 100644
index fc0fa61e9..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/chunkreader.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package pgproto3
-
-import (
- "io"
-
- "github.com/jackc/pgx/v5/internal/iobufpool"
-)
-
-// chunkReader is a io.Reader wrapper that minimizes IO reads and memory allocations. It allocates memory in chunks and
-// will read as much as will fit in the current buffer in a single call regardless of how large a read is actually
-// requested. The memory returned via Next is only valid until the next call to Next.
-//
-// This is roughly equivalent to a bufio.Reader that only uses Peek and Discard to never copy bytes.
-type chunkReader struct {
- r io.Reader
-
- buf *[]byte
- rp, wp int // buf read position and write position
-
- minBufSize int
-}
-
-// newChunkReader creates and returns a new chunkReader for r with default configuration. If minBufSize is <= 0 it uses
-// a default value.
-func newChunkReader(r io.Reader, minBufSize int) *chunkReader {
- if minBufSize <= 0 {
- // By historical reasons Postgres currently has 8KB send buffer inside,
- // so here we want to have at least the same size buffer.
- // @see https://github.com/postgres/postgres/blob/249d64999615802752940e017ee5166e726bc7cd/src/backend/libpq/pqcomm.c#L134
- // @see https://www.postgresql.org/message-id/0cdc5485-cb3c-5e16-4a46-e3b2f7a41322%40ya.ru
- //
- // In addition, testing has found no benefit of any larger buffer.
- minBufSize = 8192
- }
-
- return &chunkReader{
- r: r,
- minBufSize: minBufSize,
- buf: iobufpool.Get(minBufSize),
- }
-}
-
-// Next returns buf filled with the next n bytes. buf is only valid until next call of Next. If an error occurs, buf
-// will be nil.
-func (r *chunkReader) Next(n int) (buf []byte, err error) {
- // Reset the buffer if it is empty
- if r.rp == r.wp {
- if len(*r.buf) != r.minBufSize {
- iobufpool.Put(r.buf)
- r.buf = iobufpool.Get(r.minBufSize)
- }
- r.rp = 0
- r.wp = 0
- }
-
- // n bytes already in buf
- if (r.wp - r.rp) >= n {
- buf = (*r.buf)[r.rp : r.rp+n : r.rp+n]
- r.rp += n
- return buf, err
- }
-
- // buf is smaller than requested number of bytes
- if len(*r.buf) < n {
- bigBuf := iobufpool.Get(n)
- r.wp = copy((*bigBuf), (*r.buf)[r.rp:r.wp])
- r.rp = 0
- iobufpool.Put(r.buf)
- r.buf = bigBuf
- }
-
- // buf is large enough, but need to shift filled area to start to make enough contiguous space
- minReadCount := n - (r.wp - r.rp)
- if (len(*r.buf) - r.wp) < minReadCount {
- r.wp = copy((*r.buf), (*r.buf)[r.rp:r.wp])
- r.rp = 0
- }
-
- // Read at least the required number of bytes from the underlying io.Reader
- readBytesCount, err := io.ReadAtLeast(r.r, (*r.buf)[r.wp:], minReadCount)
- r.wp += readBytesCount
- // fmt.Println("read", n)
- if err != nil {
- return nil, err
- }
-
- buf = (*r.buf)[r.rp : r.rp+n : r.rp+n]
- r.rp += n
- return buf, nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/close.go b/vendor/github.com/jackc/pgx/v5/pgproto3/close.go
deleted file mode 100644
index 0b50f27cb..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/close.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
- "errors"
-)
-
-type Close struct {
- ObjectType byte // 'S' = prepared statement, 'P' = portal
- Name string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Close) Frontend() {}
-
-// 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 (dst *Close) Decode(src []byte) error {
- if len(src) < 2 {
- return &invalidMessageFormatErr{messageType: "Close"}
- }
-
- dst.ObjectType = src[0]
- rp := 1
-
- idx := bytes.IndexByte(src[rp:], 0)
- if idx != len(src[rp:])-1 {
- return &invalidMessageFormatErr{messageType: "Close"}
- }
-
- dst.Name = string(src[rp : len(src)-1])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Close) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'C')
- dst = append(dst, src.ObjectType)
- dst = append(dst, src.Name...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Close) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ObjectType string
- Name string
- }{
- Type: "Close",
- ObjectType: string(src.ObjectType),
- Name: src.Name,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *Close) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- ObjectType string
- Name string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- if len(msg.ObjectType) != 1 {
- return errors.New("invalid length for Close.ObjectType")
- }
-
- dst.ObjectType = byte(msg.ObjectType[0])
- dst.Name = msg.Name
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/close_complete.go b/vendor/github.com/jackc/pgx/v5/pgproto3/close_complete.go
deleted file mode 100644
index 833f7a12c..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/close_complete.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type CloseComplete struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CloseComplete) Backend() {}
-
-// 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 (dst *CloseComplete) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "CloseComplete", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CloseComplete) Encode(dst []byte) ([]byte, error) {
- return append(dst, '3', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CloseComplete) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "CloseComplete",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/command_complete.go b/vendor/github.com/jackc/pgx/v5/pgproto3/command_complete.go
deleted file mode 100644
index eba70947d..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/command_complete.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
-)
-
-type CommandComplete struct {
- CommandTag []byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CommandComplete) Backend() {}
-
-// 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 (dst *CommandComplete) Decode(src []byte) error {
- idx := bytes.IndexByte(src, 0)
- if idx == -1 {
- return &invalidMessageFormatErr{messageType: "CommandComplete", details: "unterminated string"}
- }
- if idx != len(src)-1 {
- return &invalidMessageFormatErr{messageType: "CommandComplete", details: "string terminated too early"}
- }
-
- dst.CommandTag = src[:idx]
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CommandComplete) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'C')
- dst = append(dst, src.CommandTag...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CommandComplete) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- CommandTag string
- }{
- Type: "CommandComplete",
- CommandTag: string(src.CommandTag),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *CommandComplete) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- CommandTag string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.CommandTag = []byte(msg.CommandTag)
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_both_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_both_response.go
deleted file mode 100644
index 99e1afea4..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_both_response.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type CopyBothResponse struct {
- OverallFormat byte
- ColumnFormatCodes []uint16
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CopyBothResponse) Backend() {}
-
-// 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 (dst *CopyBothResponse) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- if buf.Len() < 3 {
- return &invalidMessageFormatErr{messageType: "CopyBothResponse"}
- }
-
- overallFormat := buf.Next(1)[0]
-
- columnCount := int(binary.BigEndian.Uint16(buf.Next(2)))
- if buf.Len() != columnCount*2 {
- return &invalidMessageFormatErr{messageType: "CopyBothResponse"}
- }
-
- columnFormatCodes := make([]uint16, columnCount)
- for i := 0; i < columnCount; i++ {
- columnFormatCodes[i] = binary.BigEndian.Uint16(buf.Next(2))
- }
-
- *dst = CopyBothResponse{OverallFormat: overallFormat, ColumnFormatCodes: columnFormatCodes}
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyBothResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'W')
- dst = append(dst, src.OverallFormat)
- if len(src.ColumnFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many column format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ColumnFormatCodes)))
- for _, fc := range src.ColumnFormatCodes {
- dst = pgio.AppendUint16(dst, fc)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyBothResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ColumnFormatCodes []uint16
- }{
- Type: "CopyBothResponse",
- ColumnFormatCodes: src.ColumnFormatCodes,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *CopyBothResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- OverallFormat string
- ColumnFormatCodes []uint16
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- if len(msg.OverallFormat) != 1 {
- return errors.New("invalid length for CopyBothResponse.OverallFormat")
- }
-
- dst.OverallFormat = msg.OverallFormat[0]
- dst.ColumnFormatCodes = msg.ColumnFormatCodes
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_data.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_data.go
deleted file mode 100644
index 89ecdd4dd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_data.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package pgproto3
-
-import (
- "encoding/hex"
- "encoding/json"
-)
-
-type CopyData struct {
- Data []byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CopyData) Backend() {}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*CopyData) Frontend() {}
-
-// 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 (dst *CopyData) Decode(src []byte) error {
- dst.Data = src
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyData) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'd')
- dst = append(dst, src.Data...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyData) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data string
- }{
- Type: "CopyData",
- Data: hex.EncodeToString(src.Data),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *CopyData) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Data string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Data = []byte(msg.Data)
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
deleted file mode 100644
index 040814dbd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type CopyDone struct {
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CopyDone) Backend() {}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*CopyDone) Frontend() {}
-
-// 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 (dst *CopyDone) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "CopyDone", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyDone) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'c', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyDone) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "CopyDone",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_fail.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_fail.go
deleted file mode 100644
index 72a85fd09..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_fail.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
-)
-
-type CopyFail struct {
- Message string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*CopyFail) Frontend() {}
-
-// 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 (dst *CopyFail) Decode(src []byte) error {
- idx := bytes.IndexByte(src, 0)
- if idx != len(src)-1 {
- return &invalidMessageFormatErr{messageType: "CopyFail"}
- }
-
- dst.Message = string(src[:idx])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyFail) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'f')
- dst = append(dst, src.Message...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyFail) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Message string
- }{
- Type: "CopyFail",
- Message: src.Message,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_in_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_in_response.go
deleted file mode 100644
index 06cf99ced..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_in_response.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type CopyInResponse struct {
- OverallFormat byte
- ColumnFormatCodes []uint16
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*CopyInResponse) Backend() {}
-
-// 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 (dst *CopyInResponse) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- if buf.Len() < 3 {
- return &invalidMessageFormatErr{messageType: "CopyInResponse"}
- }
-
- overallFormat := buf.Next(1)[0]
-
- columnCount := int(binary.BigEndian.Uint16(buf.Next(2)))
- if buf.Len() != columnCount*2 {
- return &invalidMessageFormatErr{messageType: "CopyInResponse"}
- }
-
- columnFormatCodes := make([]uint16, columnCount)
- for i := 0; i < columnCount; i++ {
- columnFormatCodes[i] = binary.BigEndian.Uint16(buf.Next(2))
- }
-
- *dst = CopyInResponse{OverallFormat: overallFormat, ColumnFormatCodes: columnFormatCodes}
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyInResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'G')
-
- dst = append(dst, src.OverallFormat)
- if len(src.ColumnFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many column format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ColumnFormatCodes)))
- for _, fc := range src.ColumnFormatCodes {
- dst = pgio.AppendUint16(dst, fc)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyInResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ColumnFormatCodes []uint16
- }{
- Type: "CopyInResponse",
- ColumnFormatCodes: src.ColumnFormatCodes,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *CopyInResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- OverallFormat string
- ColumnFormatCodes []uint16
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- if len(msg.OverallFormat) != 1 {
- return errors.New("invalid length for CopyInResponse.OverallFormat")
- }
-
- dst.OverallFormat = msg.OverallFormat[0]
- dst.ColumnFormatCodes = msg.ColumnFormatCodes
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_out_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_out_response.go
deleted file mode 100644
index 549e916c1..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_out_response.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type CopyOutResponse struct {
- OverallFormat byte
- ColumnFormatCodes []uint16
-}
-
-func (*CopyOutResponse) Backend() {}
-
-// 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 (dst *CopyOutResponse) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- if buf.Len() < 3 {
- return &invalidMessageFormatErr{messageType: "CopyOutResponse"}
- }
-
- overallFormat := buf.Next(1)[0]
-
- columnCount := int(binary.BigEndian.Uint16(buf.Next(2)))
- if buf.Len() != columnCount*2 {
- return &invalidMessageFormatErr{messageType: "CopyOutResponse"}
- }
-
- columnFormatCodes := make([]uint16, columnCount)
- for i := 0; i < columnCount; i++ {
- columnFormatCodes[i] = binary.BigEndian.Uint16(buf.Next(2))
- }
-
- *dst = CopyOutResponse{OverallFormat: overallFormat, ColumnFormatCodes: columnFormatCodes}
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *CopyOutResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'H')
-
- dst = append(dst, src.OverallFormat)
-
- if len(src.ColumnFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many column format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ColumnFormatCodes)))
- for _, fc := range src.ColumnFormatCodes {
- dst = pgio.AppendUint16(dst, fc)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src CopyOutResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ColumnFormatCodes []uint16
- }{
- Type: "CopyOutResponse",
- ColumnFormatCodes: src.ColumnFormatCodes,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *CopyOutResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- OverallFormat string
- ColumnFormatCodes []uint16
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- if len(msg.OverallFormat) != 1 {
- return errors.New("invalid length for CopyOutResponse.OverallFormat")
- }
-
- dst.OverallFormat = msg.OverallFormat[0]
- dst.ColumnFormatCodes = msg.ColumnFormatCodes
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/data_row.go b/vendor/github.com/jackc/pgx/v5/pgproto3/data_row.go
deleted file mode 100644
index fdfb0f7f6..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/data_row.go
+++ /dev/null
@@ -1,143 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/hex"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type DataRow struct {
- Values [][]byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*DataRow) Backend() {}
-
-// 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 (dst *DataRow) Decode(src []byte) error {
- if len(src) < 2 {
- return &invalidMessageFormatErr{messageType: "DataRow"}
- }
- rp := 0
- fieldCount := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
-
- // If the capacity of the values slice is too small OR substantially too
- // large reallocate. This is too avoid one row with many columns from
- // permanently allocating memory.
- if cap(dst.Values) < fieldCount || cap(dst.Values)-fieldCount > 32 {
- newCap := 32
- if newCap < fieldCount {
- newCap = fieldCount
- }
- dst.Values = make([][]byte, fieldCount, newCap)
- } else {
- dst.Values = dst.Values[:fieldCount]
- }
-
- for i := 0; i < fieldCount; i++ {
- if len(src[rp:]) < 4 {
- return &invalidMessageFormatErr{messageType: "DataRow"}
- }
-
- valueLen := int(int32(binary.BigEndian.Uint32(src[rp:])))
- rp += 4
-
- // null
- if valueLen == -1 {
- dst.Values[i] = nil
- } else {
- if len(src[rp:]) < valueLen || valueLen < 0 {
- return &invalidMessageFormatErr{messageType: "DataRow"}
- }
-
- dst.Values[i] = src[rp : rp+valueLen : rp+valueLen]
- rp += valueLen
- }
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *DataRow) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'D')
-
- if len(src.Values) > math.MaxUint16 {
- return nil, errors.New("too many values")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.Values)))
- for _, v := range src.Values {
- if v == nil {
- dst = pgio.AppendInt32(dst, -1)
- continue
- }
-
- dst = pgio.AppendInt32(dst, int32(len(v)))
- dst = append(dst, v...)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src DataRow) MarshalJSON() ([]byte, error) {
- formattedValues := make([]map[string]string, len(src.Values))
- for i, v := range src.Values {
- if v == nil {
- continue
- }
-
- var hasNonPrintable bool
- for _, b := range v {
- if b < 32 {
- hasNonPrintable = true
- break
- }
- }
-
- if hasNonPrintable {
- formattedValues[i] = map[string]string{"binary": hex.EncodeToString(v)}
- } else {
- formattedValues[i] = map[string]string{"text": string(v)}
- }
- }
-
- return json.Marshal(struct {
- Type string
- Values []map[string]string
- }{
- Type: "DataRow",
- Values: formattedValues,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *DataRow) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Values []map[string]string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Values = make([][]byte, len(msg.Values))
- for n, parameter := range msg.Values {
- var err error
- dst.Values[n], err = getValueFromJSON(parameter)
- if err != nil {
- return err
- }
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/describe.go b/vendor/github.com/jackc/pgx/v5/pgproto3/describe.go
deleted file mode 100644
index 89feff215..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/describe.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
- "errors"
-)
-
-type Describe struct {
- ObjectType byte // 'S' = prepared statement, 'P' = portal
- Name string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Describe) Frontend() {}
-
-// 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 (dst *Describe) Decode(src []byte) error {
- if len(src) < 2 {
- return &invalidMessageFormatErr{messageType: "Describe"}
- }
-
- dst.ObjectType = src[0]
- rp := 1
-
- idx := bytes.IndexByte(src[rp:], 0)
- if idx != len(src[rp:])-1 {
- return &invalidMessageFormatErr{messageType: "Describe"}
- }
-
- dst.Name = string(src[rp : len(src)-1])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Describe) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'D')
- dst = append(dst, src.ObjectType)
- dst = append(dst, src.Name...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Describe) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ObjectType string
- Name string
- }{
- Type: "Describe",
- ObjectType: string(src.ObjectType),
- Name: src.Name,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *Describe) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- ObjectType string
- Name string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- if len(msg.ObjectType) != 1 {
- return errors.New("invalid length for Describe.ObjectType")
- }
-
- dst.ObjectType = byte(msg.ObjectType[0])
- dst.Name = msg.Name
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/doc.go b/vendor/github.com/jackc/pgx/v5/pgproto3/doc.go
deleted file mode 100644
index 0afd18e29..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/doc.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Package pgproto3 is an encoder and decoder of the PostgreSQL wire protocol version 3.
-//
-// The primary interfaces are Frontend and Backend. They correspond to a client and server respectively. Messages are
-// sent with Send (or a specialized Send variant). Messages are automatically buffered to minimize small writes. Call
-// Flush to ensure a message has actually been sent.
-//
-// The Trace method of Frontend and Backend can be used to examine the wire-level message traffic. It outputs in a
-// similar format to the PQtrace function in libpq.
-//
-// See https://www.postgresql.org/docs/current/protocol-message-formats.html for meanings of the different messages.
-package pgproto3
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/empty_query_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/empty_query_response.go
deleted file mode 100644
index cb6cca073..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/empty_query_response.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type EmptyQueryResponse struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*EmptyQueryResponse) Backend() {}
-
-// 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 (dst *EmptyQueryResponse) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "EmptyQueryResponse", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *EmptyQueryResponse) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'I', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src EmptyQueryResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "EmptyQueryResponse",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/error_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/error_response.go
deleted file mode 100644
index 6ef9bd061..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/error_response.go
+++ /dev/null
@@ -1,326 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
- "strconv"
-)
-
-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
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*ErrorResponse) Backend() {}
-
-// 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 (dst *ErrorResponse) Decode(src []byte) error {
- *dst = ErrorResponse{}
-
- buf := bytes.NewBuffer(src)
-
- for {
- k, err := buf.ReadByte()
- if err != nil {
- return err
- }
- if k == 0 {
- break
- }
-
- vb, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- v := string(vb[:len(vb)-1])
-
- switch k {
- case 'S':
- dst.Severity = v
- case 'V':
- dst.SeverityUnlocalized = v
- case 'C':
- dst.Code = v
- case 'M':
- dst.Message = v
- case 'D':
- dst.Detail = v
- case 'H':
- dst.Hint = v
- case 'P':
- s := v
- n, _ := strconv.ParseInt(s, 10, 32)
- dst.Position = int32(n)
- case 'p':
- s := v
- n, _ := strconv.ParseInt(s, 10, 32)
- dst.InternalPosition = int32(n)
- case 'q':
- dst.InternalQuery = v
- case 'W':
- dst.Where = v
- case 's':
- dst.SchemaName = v
- case 't':
- dst.TableName = v
- case 'c':
- dst.ColumnName = v
- case 'd':
- dst.DataTypeName = v
- case 'n':
- dst.ConstraintName = v
- case 'F':
- dst.File = v
- case 'L':
- s := v
- n, _ := strconv.ParseInt(s, 10, 32)
- dst.Line = int32(n)
- case 'R':
- dst.Routine = v
-
- default:
- if dst.UnknownFields == nil {
- dst.UnknownFields = make(map[byte]string)
- }
- dst.UnknownFields[k] = v
- }
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *ErrorResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'E')
- dst = src.appendFields(dst)
- return finishMessage(dst, sp)
-}
-
-func (src *ErrorResponse) appendFields(dst []byte) []byte {
- if src.Severity != "" {
- dst = append(dst, 'S')
- dst = append(dst, src.Severity...)
- dst = append(dst, 0)
- }
- if src.SeverityUnlocalized != "" {
- dst = append(dst, 'V')
- dst = append(dst, src.SeverityUnlocalized...)
- dst = append(dst, 0)
- }
- if src.Code != "" {
- dst = append(dst, 'C')
- dst = append(dst, src.Code...)
- dst = append(dst, 0)
- }
- if src.Message != "" {
- dst = append(dst, 'M')
- dst = append(dst, src.Message...)
- dst = append(dst, 0)
- }
- if src.Detail != "" {
- dst = append(dst, 'D')
- dst = append(dst, src.Detail...)
- dst = append(dst, 0)
- }
- if src.Hint != "" {
- dst = append(dst, 'H')
- dst = append(dst, src.Hint...)
- dst = append(dst, 0)
- }
- if src.Position != 0 {
- dst = append(dst, 'P')
- dst = append(dst, strconv.Itoa(int(src.Position))...)
- dst = append(dst, 0)
- }
- if src.InternalPosition != 0 {
- dst = append(dst, 'p')
- dst = append(dst, strconv.Itoa(int(src.InternalPosition))...)
- dst = append(dst, 0)
- }
- if src.InternalQuery != "" {
- dst = append(dst, 'q')
- dst = append(dst, src.InternalQuery...)
- dst = append(dst, 0)
- }
- if src.Where != "" {
- dst = append(dst, 'W')
- dst = append(dst, src.Where...)
- dst = append(dst, 0)
- }
- if src.SchemaName != "" {
- dst = append(dst, 's')
- dst = append(dst, src.SchemaName...)
- dst = append(dst, 0)
- }
- if src.TableName != "" {
- dst = append(dst, 't')
- dst = append(dst, src.TableName...)
- dst = append(dst, 0)
- }
- if src.ColumnName != "" {
- dst = append(dst, 'c')
- dst = append(dst, src.ColumnName...)
- dst = append(dst, 0)
- }
- if src.DataTypeName != "" {
- dst = append(dst, 'd')
- dst = append(dst, src.DataTypeName...)
- dst = append(dst, 0)
- }
- if src.ConstraintName != "" {
- dst = append(dst, 'n')
- dst = append(dst, src.ConstraintName...)
- dst = append(dst, 0)
- }
- if src.File != "" {
- dst = append(dst, 'F')
- dst = append(dst, src.File...)
- dst = append(dst, 0)
- }
- if src.Line != 0 {
- dst = append(dst, 'L')
- dst = append(dst, strconv.Itoa(int(src.Line))...)
- dst = append(dst, 0)
- }
- if src.Routine != "" {
- dst = append(dst, 'R')
- dst = append(dst, src.Routine...)
- dst = append(dst, 0)
- }
-
- for k, v := range src.UnknownFields {
- dst = append(dst, k)
- dst = append(dst, v...)
- dst = append(dst, 0)
- }
-
- dst = append(dst, 0)
-
- return dst
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src ErrorResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- 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
- }{
- Type: "ErrorResponse",
- Severity: src.Severity,
- SeverityUnlocalized: src.SeverityUnlocalized,
- Code: src.Code,
- Message: src.Message,
- Detail: src.Detail,
- Hint: src.Hint,
- Position: src.Position,
- InternalPosition: src.InternalPosition,
- InternalQuery: src.InternalQuery,
- Where: src.Where,
- SchemaName: src.SchemaName,
- TableName: src.TableName,
- ColumnName: src.ColumnName,
- DataTypeName: src.DataTypeName,
- ConstraintName: src.ConstraintName,
- File: src.File,
- Line: src.Line,
- Routine: src.Routine,
- UnknownFields: src.UnknownFields,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *ErrorResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Type string
- 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
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
-
- dst.Severity = msg.Severity
- dst.SeverityUnlocalized = msg.SeverityUnlocalized
- dst.Code = msg.Code
- dst.Message = msg.Message
- dst.Detail = msg.Detail
- dst.Hint = msg.Hint
- dst.Position = msg.Position
- dst.InternalPosition = msg.InternalPosition
- dst.InternalQuery = msg.InternalQuery
- dst.Where = msg.Where
- dst.SchemaName = msg.SchemaName
- dst.TableName = msg.TableName
- dst.ColumnName = msg.ColumnName
- dst.DataTypeName = msg.DataTypeName
- dst.ConstraintName = msg.ConstraintName
- dst.File = msg.File
- dst.Line = msg.Line
- dst.Routine = msg.Routine
-
- dst.UnknownFields = msg.UnknownFields
-
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/execute.go b/vendor/github.com/jackc/pgx/v5/pgproto3/execute.go
deleted file mode 100644
index 31bc714d1..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/execute.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type Execute struct {
- Portal string
- MaxRows uint32
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Execute) Frontend() {}
-
-// 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 (dst *Execute) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- b, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- dst.Portal = string(b[:len(b)-1])
-
- if buf.Len() < 4 {
- return &invalidMessageFormatErr{messageType: "Execute"}
- }
- dst.MaxRows = binary.BigEndian.Uint32(buf.Next(4))
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Execute) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'E')
- dst = append(dst, src.Portal...)
- dst = append(dst, 0)
- dst = pgio.AppendUint32(dst, src.MaxRows)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Execute) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Portal string
- MaxRows uint32
- }{
- Type: "Execute",
- Portal: src.Portal,
- MaxRows: src.MaxRows,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/flush.go b/vendor/github.com/jackc/pgx/v5/pgproto3/flush.go
deleted file mode 100644
index e5dc1fbbd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/flush.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type Flush struct{}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Flush) Frontend() {}
-
-// 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 (dst *Flush) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "Flush", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Flush) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'H', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Flush) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "Flush",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/frontend.go b/vendor/github.com/jackc/pgx/v5/pgproto3/frontend.go
deleted file mode 100644
index 056e547cd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/frontend.go
+++ /dev/null
@@ -1,468 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "errors"
- "fmt"
- "io"
-)
-
-// Frontend acts as a client for the PostgreSQL wire protocol version 3.
-type Frontend struct {
- cr *chunkReader
- w io.Writer
-
- // tracer is used to trace messages when Send or Receive is called. This means an outbound message is traced
- // before it is actually transmitted (i.e. before Flush). It is safe to change this variable when the Frontend is
- // idle. Setting and unsetting tracer provides equivalent functionality to PQtrace and PQuntrace in libpq.
- tracer *tracer
-
- wbuf []byte
- encodeError error
-
- // Backend message flyweights
- authenticationOk AuthenticationOk
- authenticationCleartextPassword AuthenticationCleartextPassword
- authenticationMD5Password AuthenticationMD5Password
- authenticationGSS AuthenticationGSS
- authenticationGSSContinue AuthenticationGSSContinue
- authenticationSASL AuthenticationSASL
- authenticationSASLContinue AuthenticationSASLContinue
- authenticationSASLFinal AuthenticationSASLFinal
- backendKeyData BackendKeyData
- bindComplete BindComplete
- closeComplete CloseComplete
- commandComplete CommandComplete
- copyBothResponse CopyBothResponse
- copyData CopyData
- copyInResponse CopyInResponse
- copyOutResponse CopyOutResponse
- copyDone CopyDone
- dataRow DataRow
- emptyQueryResponse EmptyQueryResponse
- errorResponse ErrorResponse
- functionCallResponse FunctionCallResponse
- noData NoData
- noticeResponse NoticeResponse
- notificationResponse NotificationResponse
- parameterDescription ParameterDescription
- parameterStatus ParameterStatus
- parseComplete ParseComplete
- readyForQuery ReadyForQuery
- rowDescription RowDescription
- portalSuspended PortalSuspended
-
- bodyLen int
- maxBodyLen int // maxBodyLen is the maximum length of a message body in octets. If a message body exceeds this length, Receive will return an error.
- msgType byte
- partialMsg bool
- authType uint32
-}
-
-// NewFrontend creates a new Frontend.
-func NewFrontend(r io.Reader, w io.Writer) *Frontend {
- cr := newChunkReader(r, 0)
- return &Frontend{cr: cr, w: w}
-}
-
-// Send sends a message to the backend (i.e. the server). The message is buffered until Flush is called. Any error
-// encountered will be returned from Flush.
-//
-// Send can work with any FrontendMessage. Some commonly used message types such as Bind have specialized send methods
-// such as SendBind. These methods should be preferred when the type of message is known up front (e.g. when building an
-// extended query protocol query) as they may be faster due to knowing the type of msg rather than it being hidden
-// behind an interface.
-func (f *Frontend) Send(msg FrontendMessage) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceMessage('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// Flush writes any pending messages to the backend (i.e. the server).
-func (f *Frontend) Flush() error {
- if err := f.encodeError; err != nil {
- f.encodeError = nil
- f.wbuf = f.wbuf[:0]
- return &writeError{err: err, safeToRetry: true}
- }
-
- if len(f.wbuf) == 0 {
- return nil
- }
-
- n, err := f.w.Write(f.wbuf)
-
- const maxLen = 1024
- if len(f.wbuf) > maxLen {
- f.wbuf = make([]byte, 0, maxLen)
- } else {
- f.wbuf = f.wbuf[:0]
- }
-
- if err != nil {
- return &writeError{err: err, safeToRetry: n == 0}
- }
-
- return nil
-}
-
-// Trace starts tracing the message traffic to w. It writes in a similar format to that produced by the libpq function
-// PQtrace.
-func (f *Frontend) Trace(w io.Writer, options TracerOptions) {
- f.tracer = &tracer{
- w: w,
- buf: &bytes.Buffer{},
- TracerOptions: options,
- }
-}
-
-// Untrace stops tracing.
-func (f *Frontend) Untrace() {
- f.tracer = nil
-}
-
-// SendBind sends a Bind message to the backend (i.e. the server). The message is buffered until Flush is called. Any
-// error encountered will be returned from Flush.
-func (f *Frontend) SendBind(msg *Bind) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceBind('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendParse sends a Parse message to the backend (i.e. the server). The message is buffered until Flush is called. Any
-// error encountered will be returned from Flush.
-func (f *Frontend) SendParse(msg *Parse) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceParse('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendClose sends a Close message to the backend (i.e. the server). The message is buffered until Flush is called. Any
-// error encountered will be returned from Flush.
-func (f *Frontend) SendClose(msg *Close) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceClose('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendDescribe sends a Describe message to the backend (i.e. the server). The message is buffered until Flush is
-// called. Any error encountered will be returned from Flush.
-func (f *Frontend) SendDescribe(msg *Describe) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceDescribe('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendExecute sends an Execute message to the backend (i.e. the server). The message is buffered until Flush is called.
-// Any error encountered will be returned from Flush.
-func (f *Frontend) SendExecute(msg *Execute) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.TraceQueryute('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendSync sends a Sync message to the backend (i.e. the server). The message is buffered until Flush is called. Any
-// error encountered will be returned from Flush.
-func (f *Frontend) SendSync(msg *Sync) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceSync('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendQuery sends a Query message to the backend (i.e. the server). The message is buffered until Flush is called. Any
-// error encountered will be returned from Flush.
-func (f *Frontend) SendQuery(msg *Query) {
- if f.encodeError != nil {
- return
- }
-
- prevLen := len(f.wbuf)
- newBuf, err := msg.Encode(f.wbuf)
- if err != nil {
- f.encodeError = err
- return
- }
- f.wbuf = newBuf
-
- if f.tracer != nil {
- f.tracer.traceQuery('F', int32(len(f.wbuf)-prevLen), msg)
- }
-}
-
-// SendUnbufferedEncodedCopyData immediately sends an encoded CopyData message to the backend (i.e. the server). This method
-// is more efficient than sending a CopyData message with Send as the message data is not copied to the internal buffer
-// before being written out. The internal buffer is flushed before the message is sent.
-func (f *Frontend) SendUnbufferedEncodedCopyData(msg []byte) error {
- err := f.Flush()
- if err != nil {
- return err
- }
-
- n, err := f.w.Write(msg)
- if err != nil {
- return &writeError{err: err, safeToRetry: n == 0}
- }
-
- if f.tracer != nil {
- f.tracer.traceCopyData('F', int32(len(msg)-1), &CopyData{})
- }
-
- return nil
-}
-
-func translateEOFtoErrUnexpectedEOF(err error) error {
- if err == io.EOF {
- return io.ErrUnexpectedEOF
- }
- return err
-}
-
-// Receive receives a message from the backend. The returned message is only valid until the next call to Receive.
-func (f *Frontend) Receive() (BackendMessage, error) {
- if !f.partialMsg {
- header, err := f.cr.Next(5)
- if err != nil {
- return nil, translateEOFtoErrUnexpectedEOF(err)
- }
-
- f.msgType = header[0]
-
- msgLength := int(binary.BigEndian.Uint32(header[1:]))
- if msgLength < 4 {
- return nil, fmt.Errorf("invalid message length: %d", msgLength)
- }
-
- f.bodyLen = msgLength - 4
- if f.maxBodyLen > 0 && f.bodyLen > f.maxBodyLen {
- return nil, &ExceededMaxBodyLenErr{f.maxBodyLen, f.bodyLen}
- }
- f.partialMsg = true
- }
-
- msgBody, err := f.cr.Next(f.bodyLen)
- if err != nil {
- return nil, translateEOFtoErrUnexpectedEOF(err)
- }
-
- f.partialMsg = false
-
- var msg BackendMessage
- switch f.msgType {
- case '1':
- msg = &f.parseComplete
- case '2':
- msg = &f.bindComplete
- case '3':
- msg = &f.closeComplete
- case 'A':
- msg = &f.notificationResponse
- case 'c':
- msg = &f.copyDone
- case 'C':
- msg = &f.commandComplete
- case 'd':
- msg = &f.copyData
- case 'D':
- msg = &f.dataRow
- case 'E':
- msg = &f.errorResponse
- case 'G':
- msg = &f.copyInResponse
- case 'H':
- msg = &f.copyOutResponse
- case 'I':
- msg = &f.emptyQueryResponse
- case 'K':
- msg = &f.backendKeyData
- case 'n':
- msg = &f.noData
- case 'N':
- msg = &f.noticeResponse
- case 'R':
- var err error
- msg, err = f.findAuthenticationMessageType(msgBody)
- if err != nil {
- return nil, err
- }
- case 's':
- msg = &f.portalSuspended
- case 'S':
- msg = &f.parameterStatus
- case 't':
- msg = &f.parameterDescription
- case 'T':
- msg = &f.rowDescription
- case 'V':
- msg = &f.functionCallResponse
- case 'W':
- msg = &f.copyBothResponse
- case 'Z':
- msg = &f.readyForQuery
- default:
- return nil, fmt.Errorf("unknown message type: %c", f.msgType)
- }
-
- err = msg.Decode(msgBody)
- if err != nil {
- return nil, err
- }
-
- if f.tracer != nil {
- f.tracer.traceMessage('B', int32(5+len(msgBody)), msg)
- }
-
- return msg, nil
-}
-
-// Authentication message type constants.
-// See src/include/libpq/pqcomm.h for all
-// constants.
-const (
- AuthTypeOk = 0
- AuthTypeCleartextPassword = 3
- AuthTypeMD5Password = 5
- AuthTypeSCMCreds = 6
- AuthTypeGSS = 7
- AuthTypeGSSCont = 8
- AuthTypeSSPI = 9
- AuthTypeSASL = 10
- AuthTypeSASLContinue = 11
- AuthTypeSASLFinal = 12
-)
-
-func (f *Frontend) findAuthenticationMessageType(src []byte) (BackendMessage, error) {
- if len(src) < 4 {
- return nil, errors.New("authentication message too short")
- }
- f.authType = binary.BigEndian.Uint32(src[:4])
-
- switch f.authType {
- case AuthTypeOk:
- return &f.authenticationOk, nil
- case AuthTypeCleartextPassword:
- return &f.authenticationCleartextPassword, nil
- case AuthTypeMD5Password:
- return &f.authenticationMD5Password, nil
- case AuthTypeSCMCreds:
- return nil, errors.New("AuthTypeSCMCreds is unimplemented")
- case AuthTypeGSS:
- return &f.authenticationGSS, nil
- case AuthTypeGSSCont:
- return &f.authenticationGSSContinue, nil
- case AuthTypeSSPI:
- return nil, errors.New("AuthTypeSSPI is unimplemented")
- case AuthTypeSASL:
- return &f.authenticationSASL, nil
- case AuthTypeSASLContinue:
- return &f.authenticationSASLContinue, nil
- case AuthTypeSASLFinal:
- return &f.authenticationSASLFinal, nil
- default:
- return nil, fmt.Errorf("unknown authentication type: %d", f.authType)
- }
-}
-
-// GetAuthType returns the authType used in the current state of the frontend.
-// See SetAuthType for more information.
-func (f *Frontend) GetAuthType() uint32 {
- return f.authType
-}
-
-func (f *Frontend) ReadBufferLen() int {
- return f.cr.wp - f.cr.rp
-}
-
-// SetMaxBodyLen sets the maximum length of a message body in octets.
-// If a message body exceeds this length, Receive will return an error.
-// This is useful for protecting against a corrupted server that sends
-// messages with incorrect length, which can cause memory exhaustion.
-// The default value is 0.
-// If maxBodyLen is 0, then no maximum is enforced.
-func (f *Frontend) SetMaxBodyLen(maxBodyLen int) {
- f.maxBodyLen = maxBodyLen
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/function_call.go b/vendor/github.com/jackc/pgx/v5/pgproto3/function_call.go
deleted file mode 100644
index 7d83579ff..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/function_call.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type FunctionCall struct {
- Function uint32
- ArgFormatCodes []uint16
- Arguments [][]byte
- ResultFormatCode uint16
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*FunctionCall) Frontend() {}
-
-// 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 (dst *FunctionCall) Decode(src []byte) error {
- *dst = FunctionCall{}
- rp := 0
- // Specifies the object ID of the function to call.
- dst.Function = binary.BigEndian.Uint32(src[rp:])
- rp += 4
- // The number of argument format codes that follow (denoted C below).
- // This can be zero to indicate that there are no arguments or that the arguments all use the default format (text);
- // or one, in which case the specified format code is applied to all arguments;
- // or it can equal the actual number of arguments.
- nArgumentCodes := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
- argumentCodes := make([]uint16, nArgumentCodes)
- for i := 0; i < nArgumentCodes; i++ {
- // The argument format codes. Each must presently be zero (text) or one (binary).
- ac := binary.BigEndian.Uint16(src[rp:])
- if ac != 0 && ac != 1 {
- return &invalidMessageFormatErr{messageType: "FunctionCall"}
- }
- argumentCodes[i] = ac
- rp += 2
- }
- dst.ArgFormatCodes = argumentCodes
-
- // Specifies the number of arguments being supplied to the function.
- nArguments := int(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
- arguments := make([][]byte, nArguments)
- for i := 0; i < nArguments; i++ {
- // The length of the argument value, in bytes (this count does not include itself). Can be zero.
- // As a special case, -1 indicates a NULL argument value. No value bytes follow in the NULL case.
- argumentLength := int(binary.BigEndian.Uint32(src[rp:]))
- rp += 4
- if argumentLength == -1 {
- arguments[i] = nil
- } else {
- // The value of the argument, in the format indicated by the associated format code. n is the above length.
- argumentValue := src[rp : rp+argumentLength]
- rp += argumentLength
- arguments[i] = argumentValue
- }
- }
- dst.Arguments = arguments
- // The format code for the function result. Must presently be zero (text) or one (binary).
- resultFormatCode := binary.BigEndian.Uint16(src[rp:])
- if resultFormatCode != 0 && resultFormatCode != 1 {
- return &invalidMessageFormatErr{messageType: "FunctionCall"}
- }
- dst.ResultFormatCode = resultFormatCode
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *FunctionCall) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'F')
- dst = pgio.AppendUint32(dst, src.Function)
-
- if len(src.ArgFormatCodes) > math.MaxUint16 {
- return nil, errors.New("too many arg format codes")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ArgFormatCodes)))
- for _, argFormatCode := range src.ArgFormatCodes {
- dst = pgio.AppendUint16(dst, argFormatCode)
- }
-
- if len(src.Arguments) > math.MaxUint16 {
- return nil, errors.New("too many arguments")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.Arguments)))
- for _, argument := range src.Arguments {
- if argument == nil {
- dst = pgio.AppendInt32(dst, -1)
- } else {
- dst = pgio.AppendInt32(dst, int32(len(argument)))
- dst = append(dst, argument...)
- }
- }
- dst = pgio.AppendUint16(dst, src.ResultFormatCode)
- return finishMessage(dst, sp)
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/function_call_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/function_call_response.go
deleted file mode 100644
index 1f2734952..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/function_call_response.go
+++ /dev/null
@@ -1,97 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/hex"
- "encoding/json"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type FunctionCallResponse struct {
- Result []byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*FunctionCallResponse) Backend() {}
-
-// 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 (dst *FunctionCallResponse) Decode(src []byte) error {
- if len(src) < 4 {
- return &invalidMessageFormatErr{messageType: "FunctionCallResponse"}
- }
- rp := 0
- resultSize := int(binary.BigEndian.Uint32(src[rp:]))
- rp += 4
-
- if resultSize == -1 {
- dst.Result = nil
- return nil
- }
-
- if len(src[rp:]) != resultSize {
- return &invalidMessageFormatErr{messageType: "FunctionCallResponse"}
- }
-
- dst.Result = src[rp:]
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *FunctionCallResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'V')
-
- if src.Result == nil {
- dst = pgio.AppendInt32(dst, -1)
- } else {
- dst = pgio.AppendInt32(dst, int32(len(src.Result)))
- dst = append(dst, src.Result...)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src FunctionCallResponse) MarshalJSON() ([]byte, error) {
- var formattedValue map[string]string
- var hasNonPrintable bool
- for _, b := range src.Result {
- if b < 32 {
- hasNonPrintable = true
- break
- }
- }
-
- if hasNonPrintable {
- formattedValue = map[string]string{"binary": hex.EncodeToString(src.Result)}
- } else {
- formattedValue = map[string]string{"text": string(src.Result)}
- }
-
- return json.Marshal(struct {
- Type string
- Result map[string]string
- }{
- Type: "FunctionCallResponse",
- Result: formattedValue,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *FunctionCallResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- Result map[string]string
- }
- err := json.Unmarshal(data, &msg)
- if err != nil {
- return err
- }
- dst.Result, err = getValueFromJSON(msg.Result)
- return err
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go b/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
deleted file mode 100644
index 70cb20cd5..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-const gssEncReqNumber = 80877104
-
-type GSSEncRequest struct {
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*GSSEncRequest) Frontend() {}
-
-func (dst *GSSEncRequest) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("gss encoding request too short")
- }
-
- requestCode := binary.BigEndian.Uint32(src)
-
- if requestCode != gssEncReqNumber {
- return errors.New("bad gss encoding request code")
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 4 byte message length.
-func (src *GSSEncRequest) Encode(dst []byte) ([]byte, error) {
- dst = pgio.AppendInt32(dst, 8)
- dst = pgio.AppendInt32(dst, gssEncReqNumber)
- return dst, nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src GSSEncRequest) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ProtocolVersion uint32
- Parameters map[string]string
- }{
- Type: "GSSEncRequest",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/gss_response.go
deleted file mode 100644
index 10d937759..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_response.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type GSSResponse struct {
- Data []byte
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (g *GSSResponse) Frontend() {}
-
-func (g *GSSResponse) Decode(data []byte) error {
- g.Data = data
- return nil
-}
-
-func (g *GSSResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'p')
- dst = append(dst, g.Data...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (g *GSSResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data []byte
- }{
- Type: "GSSResponse",
- Data: g.Data,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (g *GSSResponse) UnmarshalJSON(data []byte) error {
- var msg struct {
- Data []byte
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- g.Data = msg.Data
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/no_data.go b/vendor/github.com/jackc/pgx/v5/pgproto3/no_data.go
deleted file mode 100644
index cbcaad40c..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/no_data.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type NoData struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*NoData) Backend() {}
-
-// 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 (dst *NoData) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "NoData", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *NoData) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'n', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src NoData) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "NoData",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/notice_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/notice_response.go
deleted file mode 100644
index 497aba6dd..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/notice_response.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package pgproto3
-
-type NoticeResponse ErrorResponse
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*NoticeResponse) Backend() {}
-
-// 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 (dst *NoticeResponse) Decode(src []byte) error {
- return (*ErrorResponse)(dst).Decode(src)
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *NoticeResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'N')
- dst = (*ErrorResponse)(src).appendFields(dst)
- return finishMessage(dst, sp)
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/notification_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/notification_response.go
deleted file mode 100644
index 243b6bf7c..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/notification_response.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type NotificationResponse struct {
- PID uint32
- Channel string
- Payload string
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*NotificationResponse) Backend() {}
-
-// 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 (dst *NotificationResponse) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- if buf.Len() < 4 {
- return &invalidMessageFormatErr{messageType: "NotificationResponse", details: "too short"}
- }
-
- pid := binary.BigEndian.Uint32(buf.Next(4))
-
- b, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- channel := string(b[:len(b)-1])
-
- b, err = buf.ReadBytes(0)
- if err != nil {
- return err
- }
- payload := string(b[:len(b)-1])
-
- *dst = NotificationResponse{PID: pid, Channel: channel, Payload: payload}
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *NotificationResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'A')
- dst = pgio.AppendUint32(dst, src.PID)
- dst = append(dst, src.Channel...)
- dst = append(dst, 0)
- dst = append(dst, src.Payload...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src NotificationResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- PID uint32
- Channel string
- Payload string
- }{
- Type: "NotificationResponse",
- PID: src.PID,
- Channel: src.Channel,
- Payload: src.Payload,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_description.go b/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_description.go
deleted file mode 100644
index 1ef27b75f..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_description.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type ParameterDescription struct {
- ParameterOIDs []uint32
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*ParameterDescription) Backend() {}
-
-// 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 (dst *ParameterDescription) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- if buf.Len() < 2 {
- return &invalidMessageFormatErr{messageType: "ParameterDescription"}
- }
-
- // Reported parameter count will be incorrect when number of args is greater than uint16
- buf.Next(2)
- // Instead infer parameter count by remaining size of message
- parameterCount := buf.Len() / 4
-
- *dst = ParameterDescription{ParameterOIDs: make([]uint32, parameterCount)}
-
- for i := 0; i < parameterCount; i++ {
- dst.ParameterOIDs[i] = binary.BigEndian.Uint32(buf.Next(4))
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *ParameterDescription) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 't')
-
- if len(src.ParameterOIDs) > math.MaxUint16 {
- return nil, errors.New("too many parameter oids")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ParameterOIDs)))
- for _, oid := range src.ParameterOIDs {
- dst = pgio.AppendUint32(dst, oid)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src ParameterDescription) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ParameterOIDs []uint32
- }{
- Type: "ParameterDescription",
- ParameterOIDs: src.ParameterOIDs,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_status.go b/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_status.go
deleted file mode 100644
index 9ee0720b5..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/parameter_status.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
-)
-
-type ParameterStatus struct {
- Name string
- Value string
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*ParameterStatus) Backend() {}
-
-// 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 (dst *ParameterStatus) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- b, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- name := string(b[:len(b)-1])
-
- b, err = buf.ReadBytes(0)
- if err != nil {
- return err
- }
- value := string(b[:len(b)-1])
-
- *dst = ParameterStatus{Name: name, Value: value}
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *ParameterStatus) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'S')
- dst = append(dst, src.Name...)
- dst = append(dst, 0)
- dst = append(dst, src.Value...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (ps ParameterStatus) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Name string
- Value string
- }{
- Type: "ParameterStatus",
- Name: ps.Name,
- Value: ps.Value,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/parse.go b/vendor/github.com/jackc/pgx/v5/pgproto3/parse.go
deleted file mode 100644
index 6ba3486cf..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/parse.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type Parse struct {
- Name string
- Query string
- ParameterOIDs []uint32
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Parse) Frontend() {}
-
-// 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 (dst *Parse) Decode(src []byte) error {
- *dst = Parse{}
-
- buf := bytes.NewBuffer(src)
-
- b, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- dst.Name = string(b[:len(b)-1])
-
- b, err = buf.ReadBytes(0)
- if err != nil {
- return err
- }
- dst.Query = string(b[:len(b)-1])
-
- if buf.Len() < 2 {
- return &invalidMessageFormatErr{messageType: "Parse"}
- }
- parameterOIDCount := int(binary.BigEndian.Uint16(buf.Next(2)))
-
- for i := 0; i < parameterOIDCount; i++ {
- if buf.Len() < 4 {
- return &invalidMessageFormatErr{messageType: "Parse"}
- }
- dst.ParameterOIDs = append(dst.ParameterOIDs, binary.BigEndian.Uint32(buf.Next(4)))
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Parse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'P')
-
- dst = append(dst, src.Name...)
- dst = append(dst, 0)
- dst = append(dst, src.Query...)
- dst = append(dst, 0)
-
- if len(src.ParameterOIDs) > math.MaxUint16 {
- return nil, errors.New("too many parameter oids")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.ParameterOIDs)))
- for _, oid := range src.ParameterOIDs {
- dst = pgio.AppendUint32(dst, oid)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Parse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Name string
- Query string
- ParameterOIDs []uint32
- }{
- Type: "Parse",
- Name: src.Name,
- Query: src.Query,
- ParameterOIDs: src.ParameterOIDs,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/parse_complete.go b/vendor/github.com/jackc/pgx/v5/pgproto3/parse_complete.go
deleted file mode 100644
index cff9e27d0..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/parse_complete.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type ParseComplete struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*ParseComplete) Backend() {}
-
-// 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 (dst *ParseComplete) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "ParseComplete", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *ParseComplete) Encode(dst []byte) ([]byte, error) {
- return append(dst, '1', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src ParseComplete) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "ParseComplete",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/password_message.go b/vendor/github.com/jackc/pgx/v5/pgproto3/password_message.go
deleted file mode 100644
index d820d3275..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/password_message.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
-)
-
-type PasswordMessage struct {
- Password string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*PasswordMessage) Frontend() {}
-
-// Frontend identifies this message as an authentication response.
-func (*PasswordMessage) InitialResponse() {}
-
-// 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 (dst *PasswordMessage) Decode(src []byte) error {
- buf := bytes.NewBuffer(src)
-
- b, err := buf.ReadBytes(0)
- if err != nil {
- return err
- }
- dst.Password = string(b[:len(b)-1])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *PasswordMessage) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'p')
- dst = append(dst, src.Password...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src PasswordMessage) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Password string
- }{
- Type: "PasswordMessage",
- Password: src.Password,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/pgproto3.go b/vendor/github.com/jackc/pgx/v5/pgproto3/pgproto3.go
deleted file mode 100644
index 128f97f87..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/pgproto3.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package pgproto3
-
-import (
- "encoding/hex"
- "errors"
- "fmt"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-// maxMessageBodyLen is the maximum length of a message body in bytes. See PG_LARGE_MESSAGE_LIMIT in the PostgreSQL
-// source. It is defined as (MaxAllocSize - 1). MaxAllocSize is defined as 0x3fffffff.
-const maxMessageBodyLen = (0x3fffffff - 1)
-
-// Message is the interface implemented by an object that can decode and encode
-// a particular PostgreSQL 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, error)
-}
-
-// FrontendMessage is a message sent by the frontend (i.e. the client).
-type FrontendMessage interface {
- Message
- Frontend() // no-op method to distinguish frontend from backend methods
-}
-
-// BackendMessage is a message sent by the backend (i.e. the server).
-type BackendMessage interface {
- Message
- Backend() // no-op method to distinguish frontend from backend methods
-}
-
-type AuthenticationResponseMessage interface {
- BackendMessage
- AuthenticationResponse() // no-op method to distinguish authentication responses
-}
-
-type invalidMessageLenErr struct {
- messageType string
- expectedLen int
- actualLen int
-}
-
-func (e *invalidMessageLenErr) Error() string {
- return fmt.Sprintf("%s body must have length of %d, but it is %d", e.messageType, e.expectedLen, e.actualLen)
-}
-
-type invalidMessageFormatErr struct {
- messageType string
- details string
-}
-
-func (e *invalidMessageFormatErr) Error() string {
- return fmt.Sprintf("%s body is invalid %s", e.messageType, e.details)
-}
-
-type writeError struct {
- err error
- safeToRetry bool
-}
-
-func (e *writeError) Error() string {
- return fmt.Sprintf("write failed: %s", e.err.Error())
-}
-
-func (e *writeError) SafeToRetry() bool {
- return e.safeToRetry
-}
-
-func (e *writeError) Unwrap() error {
- return e.err
-}
-
-type ExceededMaxBodyLenErr struct {
- MaxExpectedBodyLen int
- ActualBodyLen int
-}
-
-func (e *ExceededMaxBodyLenErr) Error() string {
- return fmt.Sprintf("invalid body length: expected at most %d, but got %d", e.MaxExpectedBodyLen, e.ActualBodyLen)
-}
-
-// getValueFromJSON gets the value from a protocol message representation in JSON.
-func getValueFromJSON(v map[string]string) ([]byte, error) {
- if v == nil {
- return nil, nil
- }
- if text, ok := v["text"]; ok {
- return []byte(text), nil
- }
- if binary, ok := v["binary"]; ok {
- return hex.DecodeString(binary)
- }
- return nil, errors.New("unknown protocol representation")
-}
-
-// beginMessage begins a new message of type t. It appends the message type and a placeholder for the message length to
-// dst. It returns the new buffer and the position of the message length placeholder.
-func beginMessage(dst []byte, t byte) ([]byte, int) {
- dst = append(dst, t)
- sp := len(dst)
- dst = pgio.AppendInt32(dst, -1)
- return dst, sp
-}
-
-// finishMessage finishes a message that was started with beginMessage. It computes the message length and writes it to
-// dst[sp]. If the message length is too large it returns an error. Otherwise it returns the final message buffer.
-func finishMessage(dst []byte, sp int) ([]byte, error) {
- messageBodyLen := len(dst[sp:])
- if messageBodyLen > maxMessageBodyLen {
- return nil, errors.New("message body too large")
- }
- pgio.SetInt32(dst[sp:], int32(messageBodyLen))
- return dst, nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/portal_suspended.go b/vendor/github.com/jackc/pgx/v5/pgproto3/portal_suspended.go
deleted file mode 100644
index 9e2f8cbc4..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/portal_suspended.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type PortalSuspended struct{}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*PortalSuspended) Backend() {}
-
-// 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 (dst *PortalSuspended) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "PortalSuspended", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *PortalSuspended) Encode(dst []byte) ([]byte, error) {
- return append(dst, 's', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src PortalSuspended) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "PortalSuspended",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/query.go b/vendor/github.com/jackc/pgx/v5/pgproto3/query.go
deleted file mode 100644
index aebdfde89..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/query.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/json"
-)
-
-type Query struct {
- String string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Query) Frontend() {}
-
-// 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 (dst *Query) Decode(src []byte) error {
- i := bytes.IndexByte(src, 0)
- if i != len(src)-1 {
- return &invalidMessageFormatErr{messageType: "Query"}
- }
-
- dst.String = string(src[:i])
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Query) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'Q')
- dst = append(dst, src.String...)
- dst = append(dst, 0)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Query) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- String string
- }{
- Type: "Query",
- String: src.String,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/ready_for_query.go b/vendor/github.com/jackc/pgx/v5/pgproto3/ready_for_query.go
deleted file mode 100644
index a56af9fb2..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/ready_for_query.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
- "errors"
-)
-
-type ReadyForQuery struct {
- TxStatus byte
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*ReadyForQuery) Backend() {}
-
-// 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 (dst *ReadyForQuery) Decode(src []byte) error {
- if len(src) != 1 {
- return &invalidMessageLenErr{messageType: "ReadyForQuery", expectedLen: 1, actualLen: len(src)}
- }
-
- dst.TxStatus = src[0]
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *ReadyForQuery) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'Z', 0, 0, 0, 5, src.TxStatus), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src ReadyForQuery) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- TxStatus string
- }{
- Type: "ReadyForQuery",
- TxStatus: string(src.TxStatus),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *ReadyForQuery) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- TxStatus string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- if len(msg.TxStatus) != 1 {
- return errors.New("invalid length for ReadyForQuery.TxStatus")
- }
- dst.TxStatus = msg.TxStatus[0]
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go b/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
deleted file mode 100644
index dc2a4ddf2..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "math"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-const (
- TextFormat = 0
- BinaryFormat = 1
-)
-
-type FieldDescription struct {
- Name []byte
- TableOID uint32
- TableAttributeNumber uint16
- DataTypeOID uint32
- DataTypeSize int16
- TypeModifier int32
- Format int16
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (fd FieldDescription) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Name string
- TableOID uint32
- TableAttributeNumber uint16
- DataTypeOID uint32
- DataTypeSize int16
- TypeModifier int32
- Format int16
- }{
- Name: string(fd.Name),
- TableOID: fd.TableOID,
- TableAttributeNumber: fd.TableAttributeNumber,
- DataTypeOID: fd.DataTypeOID,
- DataTypeSize: fd.DataTypeSize,
- TypeModifier: fd.TypeModifier,
- Format: fd.Format,
- })
-}
-
-type RowDescription struct {
- Fields []FieldDescription
-}
-
-// Backend identifies this message as sendable by the PostgreSQL backend.
-func (*RowDescription) Backend() {}
-
-// 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 (dst *RowDescription) Decode(src []byte) error {
-
- if len(src) < 2 {
- return &invalidMessageFormatErr{messageType: "RowDescription"}
- }
- fieldCount := int(binary.BigEndian.Uint16(src))
- rp := 2
-
- dst.Fields = dst.Fields[0:0]
-
- for i := 0; i < fieldCount; i++ {
- var fd FieldDescription
-
- idx := bytes.IndexByte(src[rp:], 0)
- if idx < 0 {
- return &invalidMessageFormatErr{messageType: "RowDescription"}
- }
- fd.Name = src[rp : rp+idx]
- rp += idx + 1
-
- // Since buf.Next() doesn't return an error if we hit the end of the buffer
- // check Len ahead of time
- if len(src[rp:]) < 18 {
- return &invalidMessageFormatErr{messageType: "RowDescription"}
- }
-
- fd.TableOID = binary.BigEndian.Uint32(src[rp:])
- rp += 4
- fd.TableAttributeNumber = binary.BigEndian.Uint16(src[rp:])
- rp += 2
- fd.DataTypeOID = binary.BigEndian.Uint32(src[rp:])
- rp += 4
- fd.DataTypeSize = int16(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
- fd.TypeModifier = int32(binary.BigEndian.Uint32(src[rp:]))
- rp += 4
- fd.Format = int16(binary.BigEndian.Uint16(src[rp:]))
- rp += 2
-
- dst.Fields = append(dst.Fields, fd)
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *RowDescription) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'T')
-
- if len(src.Fields) > math.MaxUint16 {
- return nil, errors.New("too many fields")
- }
- dst = pgio.AppendUint16(dst, uint16(len(src.Fields)))
- for _, fd := range src.Fields {
- dst = append(dst, fd.Name...)
- dst = append(dst, 0)
-
- dst = pgio.AppendUint32(dst, fd.TableOID)
- dst = pgio.AppendUint16(dst, fd.TableAttributeNumber)
- dst = pgio.AppendUint32(dst, fd.DataTypeOID)
- dst = pgio.AppendInt16(dst, fd.DataTypeSize)
- dst = pgio.AppendInt32(dst, fd.TypeModifier)
- dst = pgio.AppendInt16(dst, fd.Format)
- }
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src RowDescription) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Fields []FieldDescription
- }{
- Type: "RowDescription",
- Fields: src.Fields,
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *RowDescription) UnmarshalJSON(data []byte) error {
- var msg struct {
- Fields []struct {
- Name string
- TableOID uint32
- TableAttributeNumber uint16
- DataTypeOID uint32
- DataTypeSize int16
- TypeModifier int32
- Format int16
- }
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- dst.Fields = make([]FieldDescription, len(msg.Fields))
- for n, field := range msg.Fields {
- dst.Fields[n] = FieldDescription{
- Name: []byte(field.Name),
- TableOID: field.TableOID,
- TableAttributeNumber: field.TableAttributeNumber,
- DataTypeOID: field.DataTypeOID,
- DataTypeSize: field.DataTypeSize,
- TypeModifier: field.TypeModifier,
- Format: field.Format,
- }
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_initial_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_initial_response.go
deleted file mode 100644
index 9eb1b6a4b..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_initial_response.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/hex"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-type SASLInitialResponse struct {
- AuthMechanism string
- Data []byte
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*SASLInitialResponse) Frontend() {}
-
-// 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 (dst *SASLInitialResponse) Decode(src []byte) error {
- *dst = SASLInitialResponse{}
-
- rp := 0
-
- idx := bytes.IndexByte(src, 0)
- if idx < 0 {
- return errors.New("invalid SASLInitialResponse")
- }
-
- dst.AuthMechanism = string(src[rp:idx])
- rp = idx + 1
-
- rp += 4 // The rest of the message is data so we can just skip the size
- dst.Data = src[rp:]
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *SASLInitialResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'p')
-
- dst = append(dst, []byte(src.AuthMechanism)...)
- dst = append(dst, 0)
-
- dst = pgio.AppendInt32(dst, int32(len(src.Data)))
- dst = append(dst, src.Data...)
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src SASLInitialResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- AuthMechanism string
- Data string
- }{
- Type: "SASLInitialResponse",
- AuthMechanism: src.AuthMechanism,
- Data: string(src.Data),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *SASLInitialResponse) UnmarshalJSON(data []byte) error {
- // Ignore null, like in the main JSON package.
- if string(data) == "null" {
- return nil
- }
-
- var msg struct {
- AuthMechanism string
- Data string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- dst.AuthMechanism = msg.AuthMechanism
- if msg.Data != "" {
- decoded, err := hex.DecodeString(msg.Data)
- if err != nil {
- return err
- }
- dst.Data = decoded
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go b/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go
deleted file mode 100644
index 1b604c254..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/sasl_response.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package pgproto3
-
-import (
- "encoding/hex"
- "encoding/json"
-)
-
-type SASLResponse struct {
- Data []byte
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*SASLResponse) Frontend() {}
-
-// 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 (dst *SASLResponse) Decode(src []byte) error {
- *dst = SASLResponse{Data: src}
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *SASLResponse) Encode(dst []byte) ([]byte, error) {
- dst, sp := beginMessage(dst, 'p')
- dst = append(dst, src.Data...)
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src SASLResponse) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- Data string
- }{
- Type: "SASLResponse",
- Data: string(src.Data),
- })
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler.
-func (dst *SASLResponse) UnmarshalJSON(data []byte) error {
- var msg struct {
- Data string
- }
- if err := json.Unmarshal(data, &msg); err != nil {
- return err
- }
- if msg.Data != "" {
- decoded, err := hex.DecodeString(msg.Data)
- if err != nil {
- return err
- }
- dst.Data = decoded
- }
- return nil
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go b/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
deleted file mode 100644
index b0fc28476..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package pgproto3
-
-import (
- "encoding/binary"
- "encoding/json"
- "errors"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-const sslRequestNumber = 80877103
-
-type SSLRequest struct {
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*SSLRequest) Frontend() {}
-
-func (dst *SSLRequest) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("ssl request too short")
- }
-
- requestCode := binary.BigEndian.Uint32(src)
-
- if requestCode != sslRequestNumber {
- return errors.New("bad ssl request code")
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 4 byte message length.
-func (src *SSLRequest) Encode(dst []byte) ([]byte, error) {
- dst = pgio.AppendInt32(dst, 8)
- dst = pgio.AppendInt32(dst, sslRequestNumber)
- return dst, nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src SSLRequest) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ProtocolVersion uint32
- Parameters map[string]string
- }{
- Type: "SSLRequest",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/startup_message.go b/vendor/github.com/jackc/pgx/v5/pgproto3/startup_message.go
deleted file mode 100644
index 3af4587d8..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/startup_message.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/json"
- "errors"
- "fmt"
-
- "github.com/jackc/pgx/v5/internal/pgio"
-)
-
-const ProtocolVersionNumber = 196608 // 3.0
-
-type StartupMessage struct {
- ProtocolVersion uint32
- Parameters map[string]string
-}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*StartupMessage) Frontend() {}
-
-// 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 (dst *StartupMessage) Decode(src []byte) error {
- if len(src) < 4 {
- return errors.New("startup message too short")
- }
-
- dst.ProtocolVersion = binary.BigEndian.Uint32(src)
- rp := 4
-
- if dst.ProtocolVersion != ProtocolVersionNumber {
- return fmt.Errorf("Bad startup message version number. Expected %d, got %d", ProtocolVersionNumber, dst.ProtocolVersion)
- }
-
- dst.Parameters = make(map[string]string)
- for {
- idx := bytes.IndexByte(src[rp:], 0)
- if idx < 0 {
- return &invalidMessageFormatErr{messageType: "StartupMessage"}
- }
- key := string(src[rp : rp+idx])
- rp += idx + 1
-
- idx = bytes.IndexByte(src[rp:], 0)
- if idx < 0 {
- return &invalidMessageFormatErr{messageType: "StartupMessage"}
- }
- value := string(src[rp : rp+idx])
- rp += idx + 1
-
- dst.Parameters[key] = value
-
- if len(src[rp:]) == 1 {
- if src[rp] != 0 {
- return fmt.Errorf("Bad startup message last byte. Expected 0, got %d", src[rp])
- }
- break
- }
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *StartupMessage) Encode(dst []byte) ([]byte, error) {
- sp := len(dst)
- dst = pgio.AppendInt32(dst, -1)
-
- dst = pgio.AppendUint32(dst, src.ProtocolVersion)
- for k, v := range src.Parameters {
- dst = append(dst, k...)
- dst = append(dst, 0)
- dst = append(dst, v...)
- dst = append(dst, 0)
- }
- dst = append(dst, 0)
-
- return finishMessage(dst, sp)
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src StartupMessage) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- ProtocolVersion uint32
- Parameters map[string]string
- }{
- Type: "StartupMessage",
- ProtocolVersion: src.ProtocolVersion,
- Parameters: src.Parameters,
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/sync.go b/vendor/github.com/jackc/pgx/v5/pgproto3/sync.go
deleted file mode 100644
index ea4fc9594..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/sync.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type Sync struct{}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Sync) Frontend() {}
-
-// 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 (dst *Sync) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "Sync", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Sync) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'S', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Sync) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "Sync",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/terminate.go b/vendor/github.com/jackc/pgx/v5/pgproto3/terminate.go
deleted file mode 100644
index 35a9dc837..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/terminate.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package pgproto3
-
-import (
- "encoding/json"
-)
-
-type Terminate struct{}
-
-// Frontend identifies this message as sendable by a PostgreSQL frontend.
-func (*Terminate) Frontend() {}
-
-// 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 (dst *Terminate) Decode(src []byte) error {
- if len(src) != 0 {
- return &invalidMessageLenErr{messageType: "Terminate", expectedLen: 0, actualLen: len(src)}
- }
-
- return nil
-}
-
-// Encode encodes src into dst. dst will include the 1 byte message type identifier and the 4 byte message length.
-func (src *Terminate) Encode(dst []byte) ([]byte, error) {
- return append(dst, 'X', 0, 0, 0, 4), nil
-}
-
-// MarshalJSON implements encoding/json.Marshaler.
-func (src Terminate) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- Type string
- }{
- Type: "Terminate",
- })
-}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/trace.go b/vendor/github.com/jackc/pgx/v5/pgproto3/trace.go
deleted file mode 100644
index 6cc7d3e36..000000000
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/trace.go
+++ /dev/null
@@ -1,416 +0,0 @@
-package pgproto3
-
-import (
- "bytes"
- "fmt"
- "io"
- "strconv"
- "strings"
- "sync"
- "time"
-)
-
-// tracer traces the messages send to and from a Backend or Frontend. The format it produces roughly mimics the
-// format produced by the libpq C function PQtrace.
-type tracer struct {
- TracerOptions
-
- mux sync.Mutex
- w io.Writer
- buf *bytes.Buffer
-}
-
-// TracerOptions controls tracing behavior. It is roughly equivalent to the libpq function PQsetTraceFlags.
-type TracerOptions struct {
- // SuppressTimestamps prevents printing of timestamps.
- SuppressTimestamps bool
-
- // RegressMode redacts fields that may be vary between executions.
- RegressMode bool
-}
-
-func (t *tracer) traceMessage(sender byte, encodedLen int32, msg Message) {
- switch msg := msg.(type) {
- case *AuthenticationCleartextPassword:
- t.traceAuthenticationCleartextPassword(sender, encodedLen, msg)
- case *AuthenticationGSS:
- t.traceAuthenticationGSS(sender, encodedLen, msg)
- case *AuthenticationGSSContinue:
- t.traceAuthenticationGSSContinue(sender, encodedLen, msg)
- case *AuthenticationMD5Password:
- t.traceAuthenticationMD5Password(sender, encodedLen, msg)
- case *AuthenticationOk:
- t.traceAuthenticationOk(sender, encodedLen, msg)
- case *AuthenticationSASL:
- t.traceAuthenticationSASL(sender, encodedLen, msg)
- case *AuthenticationSASLContinue:
- t.traceAuthenticationSASLContinue(sender, encodedLen, msg)
- case *AuthenticationSASLFinal:
- t.traceAuthenticationSASLFinal(sender, encodedLen, msg)
- case *BackendKeyData:
- t.traceBackendKeyData(sender, encodedLen, msg)
- case *Bind:
- t.traceBind(sender, encodedLen, msg)
- case *BindComplete:
- t.traceBindComplete(sender, encodedLen, msg)
- case *CancelRequest:
- t.traceCancelRequest(sender, encodedLen, msg)
- case *Close:
- t.traceClose(sender, encodedLen, msg)
- case *CloseComplete:
- t.traceCloseComplete(sender, encodedLen, msg)
- case *CommandComplete:
- t.traceCommandComplete(sender, encodedLen, msg)
- case *CopyBothResponse:
- t.traceCopyBothResponse(sender, encodedLen, msg)
- case *CopyData:
- t.traceCopyData(sender, encodedLen, msg)
- case *CopyDone:
- t.traceCopyDone(sender, encodedLen, msg)
- case *CopyFail:
- t.traceCopyFail(sender, encodedLen, msg)
- case *CopyInResponse:
- t.traceCopyInResponse(sender, encodedLen, msg)
- case *CopyOutResponse:
- t.traceCopyOutResponse(sender, encodedLen, msg)
- case *DataRow:
- t.traceDataRow(sender, encodedLen, msg)
- case *Describe:
- t.traceDescribe(sender, encodedLen, msg)
- case *EmptyQueryResponse:
- t.traceEmptyQueryResponse(sender, encodedLen, msg)
- case *ErrorResponse:
- t.traceErrorResponse(sender, encodedLen, msg)
- case *Execute:
- t.TraceQueryute(sender, encodedLen, msg)
- case *Flush:
- t.traceFlush(sender, encodedLen, msg)
- case *FunctionCall:
- t.traceFunctionCall(sender, encodedLen, msg)
- case *FunctionCallResponse:
- t.traceFunctionCallResponse(sender, encodedLen, msg)
- case *GSSEncRequest:
- t.traceGSSEncRequest(sender, encodedLen, msg)
- case *NoData:
- t.traceNoData(sender, encodedLen, msg)
- case *NoticeResponse:
- t.traceNoticeResponse(sender, encodedLen, msg)
- case *NotificationResponse:
- t.traceNotificationResponse(sender, encodedLen, msg)
- case *ParameterDescription:
- t.traceParameterDescription(sender, encodedLen, msg)
- case *ParameterStatus:
- t.traceParameterStatus(sender, encodedLen, msg)
- case *Parse:
- t.traceParse(sender, encodedLen, msg)
- case *ParseComplete:
- t.traceParseComplete(sender, encodedLen, msg)
- case *PortalSuspended:
- t.tracePortalSuspended(sender, encodedLen, msg)
- case *Query:
- t.traceQuery(sender, encodedLen, msg)
- case *ReadyForQuery:
- t.traceReadyForQuery(sender, encodedLen, msg)
- case *RowDescription:
- t.traceRowDescription(sender, encodedLen, msg)
- case *SSLRequest:
- t.traceSSLRequest(sender, encodedLen, msg)
- case *StartupMessage:
- t.traceStartupMessage(sender, encodedLen, msg)
- case *Sync:
- t.traceSync(sender, encodedLen, msg)
- case *Terminate:
- t.traceTerminate(sender, encodedLen, msg)
- default:
- t.writeTrace(sender, encodedLen, "Unknown", nil)
- }
-}
-
-func (t *tracer) traceAuthenticationCleartextPassword(sender byte, encodedLen int32, msg *AuthenticationCleartextPassword) {
- t.writeTrace(sender, encodedLen, "AuthenticationCleartextPassword", nil)
-}
-
-func (t *tracer) traceAuthenticationGSS(sender byte, encodedLen int32, msg *AuthenticationGSS) {
- t.writeTrace(sender, encodedLen, "AuthenticationGSS", nil)
-}
-
-func (t *tracer) traceAuthenticationGSSContinue(sender byte, encodedLen int32, msg *AuthenticationGSSContinue) {
- t.writeTrace(sender, encodedLen, "AuthenticationGSSContinue", nil)
-}
-
-func (t *tracer) traceAuthenticationMD5Password(sender byte, encodedLen int32, msg *AuthenticationMD5Password) {
- t.writeTrace(sender, encodedLen, "AuthenticationMD5Password", nil)
-}
-
-func (t *tracer) traceAuthenticationOk(sender byte, encodedLen int32, msg *AuthenticationOk) {
- t.writeTrace(sender, encodedLen, "AuthenticationOk", nil)
-}
-
-func (t *tracer) traceAuthenticationSASL(sender byte, encodedLen int32, msg *AuthenticationSASL) {
- t.writeTrace(sender, encodedLen, "AuthenticationSASL", nil)
-}
-
-func (t *tracer) traceAuthenticationSASLContinue(sender byte, encodedLen int32, msg *AuthenticationSASLContinue) {
- t.writeTrace(sender, encodedLen, "AuthenticationSASLContinue", nil)
-}
-
-func (t *tracer) traceAuthenticationSASLFinal(sender byte, encodedLen int32, msg *AuthenticationSASLFinal) {
- t.writeTrace(sender, encodedLen, "AuthenticationSASLFinal", nil)
-}
-
-func (t *tracer) traceBackendKeyData(sender byte, encodedLen int32, msg *BackendKeyData) {
- t.writeTrace(sender, encodedLen, "BackendKeyData", func() {
- if t.RegressMode {
- t.buf.WriteString("\t NNNN NNNN")
- } else {
- fmt.Fprintf(t.buf, "\t %d %d", msg.ProcessID, msg.SecretKey)
- }
- })
-}
-
-func (t *tracer) traceBind(sender byte, encodedLen int32, msg *Bind) {
- t.writeTrace(sender, encodedLen, "Bind", func() {
- fmt.Fprintf(t.buf, "\t %s %s %d", traceDoubleQuotedString([]byte(msg.DestinationPortal)), traceDoubleQuotedString([]byte(msg.PreparedStatement)), len(msg.ParameterFormatCodes))
- for _, fc := range msg.ParameterFormatCodes {
- fmt.Fprintf(t.buf, " %d", fc)
- }
- fmt.Fprintf(t.buf, " %d", len(msg.Parameters))
- for _, p := range msg.Parameters {
- fmt.Fprintf(t.buf, " %s", traceSingleQuotedString(p))
- }
- fmt.Fprintf(t.buf, " %d", len(msg.ResultFormatCodes))
- for _, fc := range msg.ResultFormatCodes {
- fmt.Fprintf(t.buf, " %d", fc)
- }
- })
-}
-
-func (t *tracer) traceBindComplete(sender byte, encodedLen int32, msg *BindComplete) {
- t.writeTrace(sender, encodedLen, "BindComplete", nil)
-}
-
-func (t *tracer) traceCancelRequest(sender byte, encodedLen int32, msg *CancelRequest) {
- t.writeTrace(sender, encodedLen, "CancelRequest", nil)
-}
-
-func (t *tracer) traceClose(sender byte, encodedLen int32, msg *Close) {
- t.writeTrace(sender, encodedLen, "Close", nil)
-}
-
-func (t *tracer) traceCloseComplete(sender byte, encodedLen int32, msg *CloseComplete) {
- t.writeTrace(sender, encodedLen, "CloseComplete", nil)
-}
-
-func (t *tracer) traceCommandComplete(sender byte, encodedLen int32, msg *CommandComplete) {
- t.writeTrace(sender, encodedLen, "CommandComplete", func() {
- fmt.Fprintf(t.buf, "\t %s", traceDoubleQuotedString(msg.CommandTag))
- })
-}
-
-func (t *tracer) traceCopyBothResponse(sender byte, encodedLen int32, msg *CopyBothResponse) {
- t.writeTrace(sender, encodedLen, "CopyBothResponse", nil)
-}
-
-func (t *tracer) traceCopyData(sender byte, encodedLen int32, msg *CopyData) {
- t.writeTrace(sender, encodedLen, "CopyData", nil)
-}
-
-func (t *tracer) traceCopyDone(sender byte, encodedLen int32, msg *CopyDone) {
- t.writeTrace(sender, encodedLen, "CopyDone", nil)
-}
-
-func (t *tracer) traceCopyFail(sender byte, encodedLen int32, msg *CopyFail) {
- t.writeTrace(sender, encodedLen, "CopyFail", func() {
- fmt.Fprintf(t.buf, "\t %s", traceDoubleQuotedString([]byte(msg.Message)))
- })
-}
-
-func (t *tracer) traceCopyInResponse(sender byte, encodedLen int32, msg *CopyInResponse) {
- t.writeTrace(sender, encodedLen, "CopyInResponse", nil)
-}
-
-func (t *tracer) traceCopyOutResponse(sender byte, encodedLen int32, msg *CopyOutResponse) {
- t.writeTrace(sender, encodedLen, "CopyOutResponse", nil)
-}
-
-func (t *tracer) traceDataRow(sender byte, encodedLen int32, msg *DataRow) {
- t.writeTrace(sender, encodedLen, "DataRow", func() {
- fmt.Fprintf(t.buf, "\t %d", len(msg.Values))
- for _, v := range msg.Values {
- if v == nil {
- t.buf.WriteString(" -1")
- } else {
- fmt.Fprintf(t.buf, " %d %s", len(v), traceSingleQuotedString(v))
- }
- }
- })
-}
-
-func (t *tracer) traceDescribe(sender byte, encodedLen int32, msg *Describe) {
- t.writeTrace(sender, encodedLen, "Describe", func() {
- fmt.Fprintf(t.buf, "\t %c %s", msg.ObjectType, traceDoubleQuotedString([]byte(msg.Name)))
- })
-}
-
-func (t *tracer) traceEmptyQueryResponse(sender byte, encodedLen int32, msg *EmptyQueryResponse) {
- t.writeTrace(sender, encodedLen, "EmptyQueryResponse", nil)
-}
-
-func (t *tracer) traceErrorResponse(sender byte, encodedLen int32, msg *ErrorResponse) {
- t.writeTrace(sender, encodedLen, "ErrorResponse", nil)
-}
-
-func (t *tracer) TraceQueryute(sender byte, encodedLen int32, msg *Execute) {
- t.writeTrace(sender, encodedLen, "Execute", func() {
- fmt.Fprintf(t.buf, "\t %s %d", traceDoubleQuotedString([]byte(msg.Portal)), msg.MaxRows)
- })
-}
-
-func (t *tracer) traceFlush(sender byte, encodedLen int32, msg *Flush) {
- t.writeTrace(sender, encodedLen, "Flush", nil)
-}
-
-func (t *tracer) traceFunctionCall(sender byte, encodedLen int32, msg *FunctionCall) {
- t.writeTrace(sender, encodedLen, "FunctionCall", nil)
-}
-
-func (t *tracer) traceFunctionCallResponse(sender byte, encodedLen int32, msg *FunctionCallResponse) {
- t.writeTrace(sender, encodedLen, "FunctionCallResponse", nil)
-}
-
-func (t *tracer) traceGSSEncRequest(sender byte, encodedLen int32, msg *GSSEncRequest) {
- t.writeTrace(sender, encodedLen, "GSSEncRequest", nil)
-}
-
-func (t *tracer) traceNoData(sender byte, encodedLen int32, msg *NoData) {
- t.writeTrace(sender, encodedLen, "NoData", nil)
-}
-
-func (t *tracer) traceNoticeResponse(sender byte, encodedLen int32, msg *NoticeResponse) {
- t.writeTrace(sender, encodedLen, "NoticeResponse", nil)
-}
-
-func (t *tracer) traceNotificationResponse(sender byte, encodedLen int32, msg *NotificationResponse) {
- t.writeTrace(sender, encodedLen, "NotificationResponse", func() {
- fmt.Fprintf(t.buf, "\t %d %s %s", msg.PID, traceDoubleQuotedString([]byte(msg.Channel)), traceDoubleQuotedString([]byte(msg.Payload)))
- })
-}
-
-func (t *tracer) traceParameterDescription(sender byte, encodedLen int32, msg *ParameterDescription) {
- t.writeTrace(sender, encodedLen, "ParameterDescription", nil)
-}
-
-func (t *tracer) traceParameterStatus(sender byte, encodedLen int32, msg *ParameterStatus) {
- t.writeTrace(sender, encodedLen, "ParameterStatus", func() {
- fmt.Fprintf(t.buf, "\t %s %s", traceDoubleQuotedString([]byte(msg.Name)), traceDoubleQuotedString([]byte(msg.Value)))
- })
-}
-
-func (t *tracer) traceParse(sender byte, encodedLen int32, msg *Parse) {
- t.writeTrace(sender, encodedLen, "Parse", func() {
- fmt.Fprintf(t.buf, "\t %s %s %d", traceDoubleQuotedString([]byte(msg.Name)), traceDoubleQuotedString([]byte(msg.Query)), len(msg.ParameterOIDs))
- for _, oid := range msg.ParameterOIDs {
- fmt.Fprintf(t.buf, " %d", oid)
- }
- })
-}
-
-func (t *tracer) traceParseComplete(sender byte, encodedLen int32, msg *ParseComplete) {
- t.writeTrace(sender, encodedLen, "ParseComplete", nil)
-}
-
-func (t *tracer) tracePortalSuspended(sender byte, encodedLen int32, msg *PortalSuspended) {
- t.writeTrace(sender, encodedLen, "PortalSuspended", nil)
-}
-
-func (t *tracer) traceQuery(sender byte, encodedLen int32, msg *Query) {
- t.writeTrace(sender, encodedLen, "Query", func() {
- fmt.Fprintf(t.buf, "\t %s", traceDoubleQuotedString([]byte(msg.String)))
- })
-}
-
-func (t *tracer) traceReadyForQuery(sender byte, encodedLen int32, msg *ReadyForQuery) {
- t.writeTrace(sender, encodedLen, "ReadyForQuery", func() {
- fmt.Fprintf(t.buf, "\t %c", msg.TxStatus)
- })
-}
-
-func (t *tracer) traceRowDescription(sender byte, encodedLen int32, msg *RowDescription) {
- t.writeTrace(sender, encodedLen, "RowDescription", func() {
- fmt.Fprintf(t.buf, "\t %d", len(msg.Fields))
- for _, fd := range msg.Fields {
- fmt.Fprintf(t.buf, ` %s %d %d %d %d %d %d`, traceDoubleQuotedString(fd.Name), fd.TableOID, fd.TableAttributeNumber, fd.DataTypeOID, fd.DataTypeSize, fd.TypeModifier, fd.Format)
- }
- })
-}
-
-func (t *tracer) traceSSLRequest(sender byte, encodedLen int32, msg *SSLRequest) {
- t.writeTrace(sender, encodedLen, "SSLRequest", nil)
-}
-
-func (t *tracer) traceStartupMessage(sender byte, encodedLen int32, msg *StartupMessage) {
- t.writeTrace(sender, encodedLen, "StartupMessage", nil)
-}
-
-func (t *tracer) traceSync(sender byte, encodedLen int32, msg *Sync) {
- t.writeTrace(sender, encodedLen, "Sync", nil)
-}
-
-func (t *tracer) traceTerminate(sender byte, encodedLen int32, msg *Terminate) {
- t.writeTrace(sender, encodedLen, "Terminate", nil)
-}
-
-func (t *tracer) writeTrace(sender byte, encodedLen int32, msgType string, writeDetails func()) {
- t.mux.Lock()
- defer t.mux.Unlock()
- defer func() {
- if t.buf.Cap() > 1024 {
- t.buf = &bytes.Buffer{}
- } else {
- t.buf.Reset()
- }
- }()
-
- if !t.SuppressTimestamps {
- now := time.Now()
- t.buf.WriteString(now.Format("2006-01-02 15:04:05.000000"))
- t.buf.WriteByte('\t')
- }
-
- t.buf.WriteByte(sender)
- t.buf.WriteByte('\t')
- t.buf.WriteString(msgType)
- t.buf.WriteByte('\t')
- t.buf.WriteString(strconv.FormatInt(int64(encodedLen), 10))
-
- if writeDetails != nil {
- writeDetails()
- }
-
- t.buf.WriteByte('\n')
- t.buf.WriteTo(t.w)
-}
-
-// traceDoubleQuotedString returns t.buf as a double-quoted string without any escaping. It is roughly equivalent to
-// pqTraceOutputString in libpq.
-func traceDoubleQuotedString(buf []byte) string {
- return `"` + string(buf) + `"`
-}
-
-// traceSingleQuotedString returns buf as a single-quoted string with non-printable characters hex-escaped. It is
-// roughly equivalent to pqTraceOutputNchar in libpq.
-func traceSingleQuotedString(buf []byte) string {
- sb := &strings.Builder{}
-
- sb.WriteByte('\'')
- for _, b := range buf {
- if b < 32 || b > 126 {
- fmt.Fprintf(sb, `\x%x`, b)
- } else {
- sb.WriteByte(b)
- }
- }
- sb.WriteByte('\'')
-
- return sb.String()
-}