Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not print "Updating metadata for stmt" for EXPLAIN #4482

Merged
merged 4 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion lib/MySQL_PreparedStatement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,11 @@ void MySQL_STMT_Global_info::update_metadata(MYSQL_STMT *stmt) {
}
}
if (need_refresh) {
proxy_warning("Updating metadata for stmt %lu , user %s, query %s\n", statement_id, username, query);
if (digest_text && strncasecmp(digest_text, "EXPLAIN", strlen("EXPLAIN"))==0) {
// do not print any message in case of EXPLAIN
} else {
proxy_warning("Updating metadata for stmt %lu , user %s, query %s\n", statement_id, username, query);
}
// from here is copied from destructor
if (num_columns) {
uint16_t i;
Expand Down
4 changes: 2 additions & 2 deletions test/tap/tests/reg_test_3371_prepared_statement_crash-t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ int main(int argc, char** argv) {
}

// Connecting to ProxySQL
diag("Connecting to '%s@%s:%d'", cl.mysql_username, cl.mysql_host, cl.port);
if (!mysql_real_connect(mysql, cl.mysql_host, cl.mysql_username, cl.mysql_password, NULL, cl.port, NULL, 0)) {
diag("Connecting to '%s@%s:%d'", cl.mysql_username, cl.host, cl.port);
if (!mysql_real_connect(mysql, cl.host, cl.mysql_username, cl.mysql_password, NULL, cl.port, NULL, 0)) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(mysql));
return exit_status();
}
Expand Down
73 changes: 73 additions & 0 deletions test/tap/tests/stmt_explain-t.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* @file stmt_explain-t.cpp
* @brief executes EXPLAIN using prepared statements.
* It doesn't perform any real test, only code coverage.
*/


#include <string>
#include <stdio.h>
#include <cstring>
#include <unistd.h>

#include "mysql.h"

#include "tap.h"
#include "command_line.h"
#include "utils.h"

using std::string;


int main(int argc, char** argv) {
CommandLine cl;

// Checking for required environmental variables
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return -1;
}

plan(1); // Plan for testing purposes

MYSQL* mysql = mysql_init(NULL); ///< MySQL connection object
if (!mysql) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(mysql));
return exit_status();
}

// Connecting to ProxySQL
diag("Connecting to '%s@%s:%d'", cl.mysql_username, cl.host, cl.port);
if (!mysql_real_connect(mysql, cl.host, cl.mysql_username, cl.mysql_password, NULL, cl.port, NULL, 0)) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(mysql));
return exit_status();
}

// Initialize and prepare all the statements
MYSQL_STMT* stmt = mysql_stmt_init(mysql);
if (!stmt) {
fprintf(stderr, "mysql_stmt_init(), out of memory\n");
return exit_status();
}

std::string select_query = "EXPLAIN SELECT 1";
diag("select_query: %s", select_query.c_str());
if (mysql_stmt_prepare(stmt, select_query.c_str(), strlen(select_query.c_str()))) {
fprintf(stderr, "mysql_stmt_prepare at line %d failed: %s\n", __LINE__ , mysql_error(mysql));
mysql_close(mysql);
mysql_library_end();
return exit_status();
}

int rc = mysql_stmt_execute(stmt);
ok (rc == 0 , "mysql_stmt_execute() succeeded");
if (rc) {
fprintf(stderr, "mysql_stmt_execute at line %d failed: %d , %s\n", __LINE__ , rc , mysql_stmt_error(stmt));
mysql_close(mysql);
mysql_library_end();
return exit_status();
}
mysql_close(mysql);

return exit_status();
}
Loading