From 7a6b8caa76223f28a4edb463262ec2db1e8f7422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Mon, 24 May 2021 13:44:02 +0200 Subject: [PATCH] Removed faulty check for 'character_set_connection' in 'character_set_connection' test and updated comments #3460 --- test/tap/tests/set_character_set-t.cpp | 38 ++++++++++++-------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/test/tap/tests/set_character_set-t.cpp b/test/tap/tests/set_character_set-t.cpp index 336bfa9a8..3606a1056 100644 --- a/test/tap/tests/set_character_set-t.cpp +++ b/test/tap/tests/set_character_set-t.cpp @@ -23,8 +23,11 @@ * * For checking that this variables has changed or keep their values properly. * - * NOTE: For making sure that all the operations are being performed in the same backend - * connection, test starts a transaction. For more context see #3460. + * NOTE: After "SET CHARACTER SET 'latin1'" has been issued, no checks are performed for + * 'character_set_connection' since, due to multiplexing and ProxySQL explicitely forgetting + * the value for 'character_set_connection' and 'collation_connection' (for more context + * see MySQL_Variables::client_set_value),the value for it is **unknown** and depends entirely + * of the backend connection selected. For more context see #3460. */ #include @@ -45,7 +48,7 @@ int main(int argc, char** argv) { if(cl.getEnv()) return exit_status(); - plan(12); + plan(11); diag("Testing SET CHARACTER SET"); MYSQL* mysql = mysql_init(NULL); @@ -82,16 +85,6 @@ int main(int argc, char** argv) { return exit_status(); } - /** - * NOTE: A transaction is started to ensure that all the following operations are - * performed over the same backend connection. See #3640 for more context. - */ - if (mysql_query(mysql, "BEGIN")) { - fprintf(stderr, "File %s, line %d, Error: %s\n", - __FILE__, __LINE__, mysql_error(mysql)); - return exit_status(); - } - if (mysql_query(mysql, "set names 'utf8'")) { fprintf(stderr, "SET NAMES 'utf8': Error: %s\n", mysql_error(mysql)); @@ -131,11 +124,16 @@ int main(int argc, char** argv) { show_variable(mysql, var_charset_database, var_value); ok(var_value.compare("utf8") == 0, "Database character set is not changed. Actual %s", var_value.c_str()); // ok_6 - show_variable(mysql, var_charset_connection, var_value); - ok(var_value.compare(db_charset_value) == 0, "Connection character set same as database charset. Actual %s", var_value.c_str()); // ok_7 + /* + * NOTE: This check was disabled because trying to check 'character_set_connection' after issuing 'SET CHARACTER SET', + * when multiplexing is enabled is invalid, since the value is unknown. Check file top for more details. + * + * show_variable(mysql, var_charset_connection, var_value); + * ok(var_value.compare(db_charset_value) == 0, "Connection character set same as database charset. Actual %s", var_value.c_str()); // ok_ + */ show_variable(mysql, var_charset_results, var_value); - ok(var_value.compare("latin1") == 0, "Results character set is changed. Actual %s", var_value.c_str()); // ok_8 + ok(var_value.compare("latin1") == 0, "Results character set is changed. Actual %s", var_value.c_str()); // ok_7 if (mysql_query(mysql, "set names latin1")) { fprintf(stderr, "SET NAMES : Error: %s\n", @@ -144,16 +142,16 @@ int main(int argc, char** argv) { } show_variable(mysql, var_charset_client, var_value); - ok(var_value.compare("latin1") == 0, "Client character set is correct. Actual %s", var_value.c_str()); // ok_9 + ok(var_value.compare("latin1") == 0, "Client character set is correct. Actual %s", var_value.c_str()); // ok_8 show_variable(mysql, var_charset_connection, var_value); - ok(var_value.compare("latin1") == 0, "Set names changed connection character set. Actual %s", var_value.c_str()); // ok_10 + ok(var_value.compare("latin1") == 0, "Set names changed connection character set. Actual %s", var_value.c_str()); // ok_9 show_variable(mysql, var_charset_results, var_value); - ok(var_value.compare("latin1") == 0, "Results character set is correct. Actual %s", var_value.c_str()); // ok_11 + ok(var_value.compare("latin1") == 0, "Results character set is correct. Actual %s", var_value.c_str()); // ok_10 show_variable(mysql, var_charset_database, var_value); - ok(var_value.compare("utf8") == 0, "Database character set is not changed by set names. Actual %s", var_value.c_str()); // ok_12 + ok(var_value.compare("utf8") == 0, "Database character set is not changed by set names. Actual %s", var_value.c_str()); // ok_11 mysql_close(mysql);