diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 515f07672..b5579f697 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -13531,15 +13531,29 @@ void ProxySQL_Admin::__refresh_pgsql_users( ); } +/* @brief Sends an OK message to a client based on the connection type. + * + * This function is used to send an OK message and some additional data + * (number of rows or query) to the client depending on its database + * management system (MySQL or PostgreSQL). + * + * @tparam T The type of the Client_Session object passed as argument. + * @param[in, out] sess A reference to a valid Client_Session object. + * @param msg An OK message string that will be sent to the client. + * @param rows The number of rows affected by the query for MySQL clients. + * @param query The query executed for PostgreSQL clients. + */ template void ProxySQL_Admin::send_ok_msg_to_client(Client_Session& sess, const char* msg, int rows, const char* query) { assert(sess->client_myds); if constexpr (std::is_same::value) { + // Code for MySQL clients MySQL_Data_Stream* myds = sess->client_myds; myds->DSS = STATE_QUERY_SENT_DS; myds->myprot.generate_pkt_OK(true, NULL, NULL, 1, rows, 0, 2, 0, (char*)msg, false); myds->DSS = STATE_SLEEP; } else if constexpr (std::is_same::value) { + // Code for PostgreSQL clients PgSQL_Data_Stream* myds = sess->client_myds; myds->DSS = STATE_QUERY_SENT_DS; myds->myprot.generate_ok_packet(true, true, msg, rows, query); @@ -13549,11 +13563,24 @@ void ProxySQL_Admin::send_ok_msg_to_client(Client_Session& sess, const char* assert(0); } +/* @brief Sends an error message to a client based on its database management system. +* +* This function is used to send an error message with a given code and message +* (if applicable) to the client depending on its database management system +* (MySQL or PostgreSQL). +* +* @tparam T The type of the Client_Session object passed as argument. +* @param[in, out] sess A reference to a valid Client_Session object. +* @param msg An error message that will be sent to the client. +* @param mysqlerrcode (For MySQL clients) The error code associated with this +* error message. +*/ template void ProxySQL_Admin::send_error_msg_to_client(Client_Session& sess, const char *msg, uint16_t mysql_err_code /*, bool fatal*/ ) { assert(sess->client_myds); const char prefix_msg[] = "ProxySQL Admin Error: "; if constexpr (std::is_same::value) { + // Code for MySQL clients MySQL_Data_Stream* myds = sess->client_myds; myds->DSS = STATE_QUERY_SENT_DS; char* new_msg = (char*)malloc(strlen(msg) + sizeof(prefix_msg)); @@ -13563,6 +13590,7 @@ void ProxySQL_Admin::send_error_msg_to_client(Client_Session& sess, const cha myds->DSS = STATE_SLEEP; } else if constexpr (std::is_same::value) { + // Code for PostgreSQL clients PgSQL_Data_Stream* myds = sess->client_myds; char* new_msg = (char*)malloc(strlen(msg) + sizeof(prefix_msg)); sprintf(new_msg, "%s%s", prefix_msg, msg);