(_ context.Context, packet *mysql.ERRPacket, capabilities uint32)
| 87 | } |
| 88 | |
| 89 | func EncodeErr(_ context.Context, packet *mysql.ERRPacket, capabilities uint32) ([]byte, error) { |
| 90 | buf := new(bytes.Buffer) |
| 91 | |
| 92 | // Write the header |
| 93 | if err := buf.WriteByte(packet.Header); err != nil { |
| 94 | return nil, fmt.Errorf("failed to write header: %w", err) |
| 95 | } |
| 96 | |
| 97 | // Write the error code |
| 98 | if err := binary.Write(buf, binary.LittleEndian, packet.ErrorCode); err != nil { |
| 99 | return nil, fmt.Errorf("failed to write error code: %w", err) |
| 100 | } |
| 101 | |
| 102 | // Write the SQL state marker and SQL state if CLIENT_PROTOCOL_41 is set |
| 103 | if capabilities&uint32(mysql.CLIENT_PROTOCOL_41) > 0 { |
| 104 | if len(packet.SQLStateMarker) != 1 || len(packet.SQLState) != 5 { |
| 105 | return nil, fmt.Errorf("invalid SQL state marker or SQL state length") |
| 106 | } |
| 107 | |
| 108 | if err := buf.WriteByte(packet.SQLStateMarker[0]); err != nil { |
| 109 | return nil, fmt.Errorf("failed to write SQL state marker: %w", err) |
| 110 | } |
| 111 | |
| 112 | if _, err := buf.WriteString(packet.SQLState); err != nil { |
| 113 | return nil, fmt.Errorf("failed to write SQL state: %w", err) |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | // Write the error message |
| 118 | if _, err := buf.WriteString(packet.ErrorMessage); err != nil { |
| 119 | return nil, fmt.Errorf("failed to write error message: %w", err) |
| 120 | } |
| 121 | |
| 122 | return buf.Bytes(), nil |
| 123 | } |
| 124 | |
| 125 | // ref:https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_ok_packet.html |
| 126 |
no test coverage detected