12 std::vector<uint8_t> buffer;
25 if (data.size() < 20) {
47 std::vector<uint8_t> buffer;
53 for (
const auto& [key, value] : request.
options) {
64 if (data.size() < 4) {
71 if (offset + 4 > data.size()) {
75 for (uint32_t i = 0; i < options_count; ++i) {
76 if (offset >= data.size()) {
88 std::vector<uint8_t> buffer;
111 if (offset + 4 > data.size()) {
116 for (uint32_t i = 0; i < param_count; ++i) {
117 if (offset >= data.size()) {
127 std::vector<uint8_t> buffer;
142 for (
const auto& row : response.
rows) {
144 write_uint32(buffer,
static_cast<uint32_t
>(row.size()));
145 for (
const auto& [key, value] : row) {
167 if (offset + 4 > data.size()) {
172 for (uint32_t i = 0; i < column_count; ++i) {
173 if (offset >= data.size()) {
180 if (offset + 4 > data.size()) {
184 response.
rows.reserve(row_count);
185 for (uint32_t i = 0; i < row_count; ++i) {
186 if (offset + 4 > data.size()) {
190 std::map<std::string, std::string> row;
191 for (uint32_t j = 0; j < field_count; ++j) {
192 if (offset >= data.size()) {
199 response.
rows.push_back(std::move(row));
206 std::vector<uint8_t> buffer;
226 std::vector<uint8_t> buffer;
234 if (data.size() < 2) {
242 std::vector<uint8_t> buffer;
252 if (data.size() < 4) {
262 std::vector<uint8_t> buffer;
281 buffer.push_back(value);
285 buffer.push_back(
static_cast<uint8_t
>(value & 0xFF));
286 buffer.push_back(
static_cast<uint8_t
>((value >> 8) & 0xFF));
290 buffer.push_back(
static_cast<uint8_t
>(value & 0xFF));
291 buffer.push_back(
static_cast<uint8_t
>((value >> 8) & 0xFF));
292 buffer.push_back(
static_cast<uint8_t
>((value >> 16) & 0xFF));
293 buffer.push_back(
static_cast<uint8_t
>((value >> 24) & 0xFF));
297 for (
int i = 0; i < 8; ++i) {
298 buffer.push_back(
static_cast<uint8_t
>((value >> (i * 8)) & 0xFF));
303 write_uint32(buffer,
static_cast<uint32_t
>(value.size()));
304 buffer.insert(buffer.end(), value.begin(), value.end());
308 return buffer[offset++];
312 uint16_t value = buffer[offset] | (
static_cast<uint16_t
>(buffer[offset + 1]) << 8);
318 uint32_t value = buffer[offset] | (
static_cast<uint32_t
>(buffer[offset + 1]) << 8) |
319 (
static_cast<uint32_t
>(buffer[offset + 2]) << 16) |
320 (
static_cast<uint32_t
>(buffer[offset + 3]) << 24);
327 for (
int i = 0; i < 8; ++i) {
328 value |= (
static_cast<uint64_t
>(buffer[offset + i]) << (i * 8));
339 std::string value(
reinterpret_cast<const char*
>(&buffer[offset]), length);
static std::string read_string(const std::vector< uint8_t > &buffer, size_t &offset)
static kcenon::common::Result< connect_request > deserialize_connect_request(const std::vector< uint8_t > &data)
Deserialize connect request.
static kcenon::common::Result< message_header > deserialize_header(const std::vector< uint8_t > &data)
Deserialize message header from bytes.
static void write_string(std::vector< uint8_t > &buffer, const std::string &value)
static void write_uint8(std::vector< uint8_t > &buffer, uint8_t value)
static uint32_t read_uint32(const std::vector< uint8_t > &buffer, size_t &offset)
static std::vector< uint8_t > serialize(const connect_request &request)
Serialize connect request.
static kcenon::common::Result< query_request > deserialize_query_request(const std::vector< uint8_t > &data)
Deserialize query request.
static void write_uint16(std::vector< uint8_t > &buffer, uint16_t value)
static void write_uint64(std::vector< uint8_t > &buffer, uint64_t value)
static kcenon::common::Result< connect_response > deserialize_connect_response(const std::vector< uint8_t > &data)
Deserialize connect response.
static std::vector< uint8_t > serialize_header(const message_header &header)
Serialize message header to bytes.
static kcenon::common::Result< transaction_response > deserialize_transaction_response(const std::vector< uint8_t > &data)
Deserialize transaction response.
static void write_uint32(std::vector< uint8_t > &buffer, uint32_t value)
static kcenon::common::Result< query_response > deserialize_query_response(const std::vector< uint8_t > &data)
Deserialize query response.
static uint16_t read_uint16(const std::vector< uint8_t > &buffer, size_t &offset)
static uint64_t read_uint64(const std::vector< uint8_t > &buffer, size_t &offset)
static kcenon::common::Result< error_response > deserialize_error_response(const std::vector< uint8_t > &data)
Deserialize error response.
static kcenon::common::Result< transaction_request > deserialize_transaction_request(const std::vector< uint8_t > &data)
Deserialize transaction request.
static uint8_t read_uint8(const std::vector< uint8_t > &buffer, size_t &offset)
message_type
Database protocol message types.
query_operation
Type of query operation.
kcenon::common::error_info error_info
Primary error type.
Client connection request.
std::string connection_string
std::map< std::string, std::string > options
std::string database_type
Server connection response.
std::string error_message
std::string error_message
std::string error_context
query_operation operation
std::vector< std::string > parameters
Query execution response.
std::string error_message
std::vector< std::map< std::string, std::string > > rows
std::vector< std::string > column_names
Transaction control request.
Transaction control response.
std::string error_message