diff --git a/lib/gat/client.go b/lib/gat/client.go index 95b0b7176298e120919677fc6d471c15933a6bca..938042e374042db36631322a4ac74548ba32c5a8 100644 --- a/lib/gat/client.go +++ b/lib/gat/client.go @@ -183,7 +183,9 @@ func (c *Client) Accept(ctx context.Context) error { } } c.log.Debug().Msg("Password authentication successful") - err = WriteAuthOk(c.wr) + authOk := new(protocol.Authentication) + authOk.Fields.Data = []byte{0, 0, 0, 0} + _, err = authOk.Write(c.wr) if err != nil { return err } @@ -191,11 +193,16 @@ func (c *Client) Accept(ctx context.Context) error { if err != nil { return err } - err = WriteBackendKeyData(c.wr, c.pid, c.secret_key) + backendKeyData := new(protocol.BackendKeyData) + backendKeyData.Fields.ProcessID = c.pid + backendKeyData.Fields.SecretKey = c.secret_key + _, err = backendKeyData.Write(c.wr) if err != nil { return err } - err = WriteReadyForQuery(c.wr) + readyForQuery := new(protocol.ReadyForQuery) + readyForQuery.Fields.Status = byte('I') + _, err = readyForQuery.Write(c.wr) if err != nil { return err } diff --git a/lib/gat/protocol/backend.go b/lib/gat/protocol/backend.go index aca9c0c42252ec3897e04015a1a3225a8f933b38..890b969e0f16bb24ded97be07fd0ea43f240c82f 100644 --- a/lib/gat/protocol/backend.go +++ b/lib/gat/protocol/backend.go @@ -1553,26 +1553,36 @@ func (T *PortalSuspended) Write(writer io.Writer) (length int, err error) { var _ Packet = (*PortalSuspended)(nil) -type FieldsReadForQuery struct { +type FieldsReadyForQuery struct { + Status byte } -func (T *FieldsReadForQuery) Read(payloadLength int, reader io.Reader) (err error) { +func (T *FieldsReadyForQuery) Read(payloadLength int, reader io.Reader) (err error) { + T.Status, err = ReadByte(reader) + if err != nil { + return + } return } -func (T *FieldsReadForQuery) Write(writer io.Writer) (length int, err error) { +func (T *FieldsReadyForQuery) Write(writer io.Writer) (length int, err error) { var temp int + temp, err = WriteByte(writer, T.Status) + if err != nil { + return + } + length += temp _ = temp return } -type ReadForQuery struct { - Fields FieldsReadForQuery +type ReadyForQuery struct { + Fields FieldsReadyForQuery } // Read reads all but the packet identifier // WARNING: This packet DOES have an identifier. Call protocol.Read or trim the identifier first! -func (T *ReadForQuery) Read(reader io.Reader) (err error) { +func (T *ReadyForQuery) Read(reader io.Reader) (err error) { var length int32 length, err = ReadInt32(reader) if err != nil { @@ -1581,7 +1591,7 @@ func (T *ReadForQuery) Read(reader io.Reader) (err error) { return T.Fields.Read(int(length-4), reader) } -func (T *ReadForQuery) Write(writer io.Writer) (length int, err error) { +func (T *ReadyForQuery) Write(writer io.Writer) (length int, err error) { // TODO replace with pool var buf bytes.Buffer length, err = T.Fields.Write(&buf) @@ -1604,7 +1614,7 @@ func (T *ReadForQuery) Write(writer io.Writer) (length int, err error) { return } -var _ Packet = (*ReadForQuery)(nil) +var _ Packet = (*ReadyForQuery)(nil) type FieldsRowDescriptionFields struct { Name string diff --git a/lib/gat/protocol/mod.go b/lib/gat/protocol/mod.go index aa3e82f3555c80aa7d674a1ed21a152211eed07f..a62b287d85cb1cfa3c4e64a3ebe0ba634bbad3a6 100644 --- a/lib/gat/protocol/mod.go +++ b/lib/gat/protocol/mod.go @@ -86,7 +86,7 @@ func Read(reader io.Reader) (packet Packet, err error) { case byte('Q'): packet = new(Query) case byte('Z'): - packet = new(ReadForQuery) + packet = new(ReadyForQuery) case byte('T'): packet = new(RowDescription) case byte('p'): diff --git a/spec/protocol/backend.yaml b/spec/protocol/backend.yaml index 467c2c3526fa984bcbbddbdb0bde77be9e5eeb3d..eeffccbd2ab996ff774c3c0128c5c1ef207f0ef7 100644 --- a/spec/protocol/backend.yaml +++ b/spec/protocol/backend.yaml @@ -122,8 +122,11 @@ ParseComplete: Identifier: '1' PortalSuspended: Identifier: 's' -ReadForQuery: +ReadyForQuery: Identifier: 'Z' + Fields: + - Name: Status + Type: byte RowDescription: Identifier: 'T' Fields: