Files
dolthub--doltgresql/testing/go/regression/tool/message_encoder.go
T
2026-07-13 12:32:25 +08:00

169 lines
5.0 KiB
Go

// Copyright 2024 Dolthub, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"github.com/cockroachdb/errors"
"github.com/jackc/pgx/v5/pgproto3"
)
// EncodeMessage encodes the given message to the byte representation needed by the Decode function. Each message's
// Encode function will often include additional information that the Decode function does not expect, hence it is
// removed in this function.
func EncodeMessage(message pgproto3.Message) ([]byte, error) {
switch message := message.(type) {
case *pgproto3.AuthenticationCleartextPassword:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationGSS:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationGSSContinue:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationMD5Password:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationOk:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationSASL:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationSASLContinue:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.AuthenticationSASLFinal:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.BackendKeyData:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.Bind:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.BindComplete:
return nil, nil
case *pgproto3.CancelRequest:
data, err := message.Encode(nil)
return data[4:], err
case *pgproto3.Close:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CloseComplete:
return nil, nil
case *pgproto3.CommandComplete:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CopyBothResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CopyData:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CopyDone:
return nil, nil
case *pgproto3.CopyFail:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CopyInResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.CopyOutResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.DataRow:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.Describe:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.EmptyQueryResponse:
return nil, nil
case *pgproto3.ErrorResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.Execute:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.Flush:
return nil, nil
case *pgproto3.FunctionCall:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.FunctionCallResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.GSSEncRequest:
data, err := message.Encode(nil)
return data[4:], err
case *pgproto3.GSSResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.NoData:
return nil, nil
case *pgproto3.NoticeResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.NotificationResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.ParameterDescription:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.ParameterStatus:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.Parse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.ParseComplete:
return nil, nil
case *pgproto3.PasswordMessage:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.PortalSuspended:
return nil, nil
case *pgproto3.Query:
data, err := RewriteCopyToFileOnly(message).Encode(nil)
return data[5:], err
case *pgproto3.ReadyForQuery:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.RowDescription:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.SASLInitialResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.SASLResponse:
data, err := message.Encode(nil)
return data[5:], err
case *pgproto3.SSLRequest:
data, err := message.Encode(nil)
return data[4:], err
case *pgproto3.StartupMessage:
data, err := message.Encode(nil)
return data[4:], err
case *pgproto3.Sync:
return nil, nil
case *pgproto3.Terminate:
return nil, nil
default:
return nil, errors.Errorf("unknown message type: %T", message)
}
}