static int test_bug20023(MYSQL *mysql) { int sql_big_selects_orig; int max_join_size_orig; int sql_big_selects_2; int sql_big_selects_3; int sql_big_selects_4; int sql_big_selects_5; int rc; if (mysql_get_server_version(mysql) < 50100) { diag("Test requires MySQL Server version 5.1 or above"); return SKIP; } /*********************************************************************** Remember original SQL_BIG_SELECTS, MAX_JOIN_SIZE values. ***********************************************************************/ query_int_variable(mysql, "@@session.sql_big_selects", &sql_big_selects_orig); query_int_variable(mysql, "@@global.max_join_size", &max_join_size_orig); /*********************************************************************** Test that COM_CHANGE_USER resets the SQL_BIG_SELECTS to the initial value. ***********************************************************************/ /* Issue COM_CHANGE_USER. */ rc= mysql_change_user(mysql, username, password, schema); check_mysql_rc(rc, mysql); /* Query SQL_BIG_SELECTS. */ query_int_variable(mysql, "@@session.sql_big_selects", &sql_big_selects_2); /* Check that SQL_BIG_SELECTS is reset properly. */ FAIL_UNLESS(sql_big_selects_orig == sql_big_selects_2, "Different value for sql_big_select"); /*********************************************************************** Test that if MAX_JOIN_SIZE set to non-default value, SQL_BIG_SELECTS will be 0. ***********************************************************************/ /* Set MAX_JOIN_SIZE to some non-default value. */ rc= mysql_query(mysql, "SET @@global.max_join_size = 10000"); check_mysql_rc(rc, mysql); rc= mysql_query(mysql, "SET @@session.max_join_size = default"); check_mysql_rc(rc, mysql); /* Issue COM_CHANGE_USER. */ rc= mysql_change_user(mysql, username, password, schema); check_mysql_rc(rc, mysql); /* Query SQL_BIG_SELECTS. */ query_int_variable(mysql, "@@session.sql_big_selects", &sql_big_selects_3); /* Check that SQL_BIG_SELECTS is 0. */ FAIL_UNLESS(sql_big_selects_3 == 0, "big_selects != 0"); /*********************************************************************** Test that if MAX_JOIN_SIZE set to default value, SQL_BIG_SELECTS will be 1. ***********************************************************************/ /* Set MAX_JOIN_SIZE to the default value (-1). */ rc= mysql_query(mysql, "SET @@global.max_join_size = -1"); rc= mysql_query(mysql, "SET @@session.max_join_size = default"); /* Issue COM_CHANGE_USER. */ rc= mysql_change_user(mysql, username, password, schema); check_mysql_rc(rc, mysql); /* Query SQL_BIG_SELECTS. */ query_int_variable(mysql, "@@session.sql_big_selects", &sql_big_selects_4); /* Check that SQL_BIG_SELECTS is 1. */ FAIL_UNLESS(sql_big_selects_4 == 1, "sql_big_select != 1"); /*********************************************************************** Restore MAX_JOIN_SIZE. Check that SQL_BIG_SELECTS will be the original one. ***********************************************************************/ rc= mysql_query(mysql, "SET @@global.max_join_size = -1"); check_mysql_rc(rc, mysql); rc= mysql_query(mysql, "SET @@session.max_join_size = default"); check_mysql_rc(rc, mysql); /* Issue COM_CHANGE_USER. */ rc= mysql_change_user(mysql, username, password, schema); check_mysql_rc(rc, mysql); /* Query SQL_BIG_SELECTS. */ query_int_variable(mysql, "@@session.sql_big_selects", &sql_big_selects_5); /* Check that SQL_BIG_SELECTS is 1. */ FAIL_UNLESS(sql_big_selects_5 == sql_big_selects_orig, "big_select != 1"); /*********************************************************************** That's it. Cleanup. ***********************************************************************/ return OK; }
static int bug31418_impl() { my_bool is_null; MYSQL *mysql; int rc; /* Create a new connection. */ mysql= test_connect(NULL); if (!mysql) return FAIL; /*********************************************************************** Check that lock is free: - IS_FREE_LOCK() should return 1; - IS_USED_LOCK() should return NULL; ***********************************************************************/ is_null= query_int_variable(mysql, "IS_FREE_LOCK('bug31418')", &rc); FAIL_UNLESS(!is_null && rc, "rc = 0"); is_null= query_int_variable(mysql, "IS_USED_LOCK('bug31418')", &rc); FAIL_UNLESS(is_null, "rc = 0"); /*********************************************************************** Acquire lock and check the lock status (the lock must be in use): - IS_FREE_LOCK() should return 0; - IS_USED_LOCK() should return non-zero thread id; ***********************************************************************/ query_int_variable(mysql, "GET_LOCK('bug31418', 1)", &rc); FAIL_UNLESS(rc, "rc = 0"); is_null= query_int_variable(mysql, "IS_FREE_LOCK('bug31418')", &rc); FAIL_UNLESS(!is_null && !rc, "rc = 0"); is_null= query_int_variable(mysql, "IS_USED_LOCK('bug31418')", &rc); FAIL_UNLESS(!is_null && rc, "rc = 0"); /*********************************************************************** Issue COM_CHANGE_USER command and check the lock status (the lock must be free): - IS_FREE_LOCK() should return 1; - IS_USED_LOCK() should return NULL; **********************************************************************/ rc= mysql_change_user(mysql, username, password, schema ? schema : "test"); check_mysql_rc(rc, mysql); is_null= query_int_variable(mysql, "IS_FREE_LOCK('bug31418')", &rc); FAIL_UNLESS(!is_null && rc, "rc = 0"); is_null= query_int_variable(mysql, "IS_USED_LOCK('bug31418')", &rc); FAIL_UNLESS(is_null, "rc = 0"); /*********************************************************************** That's it. Cleanup. ***********************************************************************/ mysql_close(mysql); return OK; }