diff --git a/test/tap/tests/set_testing-240-t.cpp b/test/tap/tests/set_testing-240-t.cpp index 7100bd4bd..0b9ddebab 100644 --- a/test/tap/tests/set_testing-240-t.cpp +++ b/test/tap/tests/set_testing-240-t.cpp @@ -409,15 +409,21 @@ void * my_conn_thread(void *arg) { if (std::find(possible_unknown_variables.begin(), possible_unknown_variables.end(), el.key()) != possible_unknown_variables.end()) { vars_counters[el.key()].count++; } + // The inner disjunction over session_track_gtids handling must + // be grouped so it only fires when special_sqlmode==false and + // parsing_optimizer_switch==false. Without the extra outer + // parentheses, operator precedence treated the + // 'el.key() == "session_track_gtids"' branch as a standalone + // failure condition that fired even in the other cases. if ( (special_sqlmode == true && verified_special_sqlmode == false) || (k == mysql_vars.end()) || (s == proxysql_vars["conn"].end()) || ( (parsing_optimizer_switch == true) && (optimizer_switch_matches == false) ) || - (special_sqlmode == false && parsing_optimizer_switch == false && + (special_sqlmode == false && parsing_optimizer_switch == false && ( (el.key() != "session_track_gtids" && (k.value() != el.value() || s.value() != el.value())) || (el.key() == "session_track_gtids" && !check_session_track_gtids(el.value(), s.value(), k.value())) - ) + )) ) { if ( k != mysql_vars.end() && s != proxysql_vars["conn"].end()) { if (k.value() == UNKNOWNVAR) { // mysql doesn't recognize the variable diff --git a/test/tap/tests/set_testing-multi-t.cpp b/test/tap/tests/set_testing-multi-t.cpp index de5228c37..027a8136b 100644 --- a/test/tap/tests/set_testing-multi-t.cpp +++ b/test/tap/tests/set_testing-multi-t.cpp @@ -274,12 +274,18 @@ void * my_conn_thread(void *arg) { } } + // The inner disjunction over session_track_gtids handling must + // be grouped so it is only considered when special_sqlmode is + // false. Without the extra parentheses, operator precedence + // made the 'el.key() == "session_track_gtids"' branch a + // standalone failure condition that fired even when + // special_sqlmode == true. if ( (special_sqlmode == true && verified_special_sqlmode == false) || - (special_sqlmode == false && + (special_sqlmode == false && ( (el.key() != "session_track_gtids" && (!values_equiv(k.value(), el.value()) || !values_equiv(s.value(), el.value()))) || (el.key() == "session_track_gtids" && !check_session_track_gtids(el.value(), s.value(), k.value())) - ) + )) ) { __sync_fetch_and_add(&g_failed, 1); testPassed = false; diff --git a/test/tap/tests/set_testing-t.cpp b/test/tap/tests/set_testing-t.cpp index 61f5ffa3a..750fa5f43 100644 --- a/test/tap/tests/set_testing-t.cpp +++ b/test/tap/tests/set_testing-t.cpp @@ -310,14 +310,20 @@ void * my_conn_thread(void *arg) { } } + // The inner disjunction over session_track_gtids handling must + // be grouped so it is only considered when special_sqlmode is + // false. Without the extra parentheses, operator precedence + // treated the 'el.key() == "session_track_gtids"' branch as a + // standalone failure condition that fired even when + // special_sqlmode == true. if ( (special_sqlmode == true && verified_special_sqlmode == false) || (k == mysql_vars.end()) || (s == proxysql_vars["conn"].end()) || - (special_sqlmode == false && + (special_sqlmode == false && ( (el.key() != "session_track_gtids" && (!values_equiv(k.value(), el.value()) || !values_equiv(s.value(), el.value()))) || (el.key() == "session_track_gtids" && !check_session_track_gtids(el.value(), s.value(), k.value())) - ) + )) ) { if (el.key() == "wsrep_sync_wait" && k == mysql_vars.end() && (s.value() == el.value())) { variables_tested++;