Commit dab12366 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

MDEV-6956:SET STATEMENT default_master_connection = ... has no effect

the problem was in assigning default value during parsing.
parent e91bc2e9
# ==== Usage ====
#
# --let $status_items= Column_Name[, Column_Name[, ...]]
# --source include/show_all_slaves_status.inc
#
# Parameters:
# $status_items
# Set to the name of the column in the output of SHOW SLAVE STATUS
# that you want to display. Example:
#
# --let $status_items= Master_SSL_Allowed
#
# You can show multiple columns by setting $status_items to a
# comma-separated list. Example:
#
# --let $status_items= Master_Log_File, Relay_Master_Log_File
#
# $slave_field_result_replace
# If set, one or more regex patterns for replacing variable
# text in the error message. Syntax as --replace-regex
#
# $slave_sql_mode
# If set, change the slave sql mode during this macro, reverting
# to the previous on exit. Default sql_mode is NO_BACKSLASH_ESCAPES
# to allow replace '\' by '/' making paths OS independent. Example:
#
# --let $slave_sql_mode= NO_BACKSLASH_ESCAPES
#
--let $_show_slave_status_items=$status_items
if (!$status_items)
{
--die Bug in test case: The mysqltest variable $status_items is not set.
}
--let $_slave_sql_mode= NO_BACKSLASH_ESCAPES
if ($slave_sql_mode)
{
--let $_slave_sql_mode= $slave_sql_mode
}
--let $_previous_slave_sql_mode = `SELECT @@sql_mode`
--disable_query_log
eval SET sql_mode= '$_slave_sql_mode';
--enable_query_log
while ($_show_slave_status_items)
{
--let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
--let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`
--replace_regex /\.[\\\/]master/master/
--let $_show_slave_status_value= query_get_value(SHOW ALL SLAVES STATUS, $_show_slave_status_name, 1)
--let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace
--replace_regex $_slave_field_result_replace
--let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
--echo $_show_slave_status_name = '$_show_slave_status_value'
}
--disable_query_log
eval SET sql_mode= '$_previous_slave_sql_mode';
--enable_query_log
...@@ -16,7 +16,3 @@ Max_statement_time_exceeded 1 ...@@ -16,7 +16,3 @@ Max_statement_time_exceeded 1
SELECT @@MAX_STATEMENT_TIME; SELECT @@MAX_STATEMENT_TIME;
@@MAX_STATEMENT_TIME @@MAX_STATEMENT_TIME
0.000000 0.000000
set statement default_master_connection=default for select 1;
ERROR 42000: The system variable default_master_connection cannot be set in SET STATEMENT.
set statement default_master_connection=default for select 1;
ERROR 42000: The system variable default_master_connection cannot be set in SET STATEMENT.
include/master-slave.inc
[connection master]
include/stop_slave.inc
RESET SLAVE ALL;
# Does not work for CHANGE MASTER:
SET STATEMENT default_master_connection = 'm1' FOR
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT, MASTER_USER='root';
#
# The first field, Connection_name, should say 'm1'...
#
Connection_name = 'm1'
RESET SLAVE ALL;
CHANGE MASTER 'm1' TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT, MASTER_USER='root';
SET STATEMENT default_master_connection = 'm1' FOR START SLAVE;
set default_master_connection = 'm1';
stop slave;
include/wait_for_slave_to_stop.inc
reset slave all;
set default_master_connection = '';
--source include/master-slave.inc
--connection slave
--source include/stop_slave.inc
RESET SLAVE ALL;
--echo # Does not work for CHANGE MASTER:
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval SET STATEMENT default_master_connection = 'm1' FOR
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root';
--echo #
--echo # The first field, Connection_name, should say 'm1'...
--echo #
--let $status_items= Connection_name
--source include/show_all_slaves_status.inc
#query_vertical SHOW ALL SLAVES STATUS;
RESET SLAVE ALL;
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval CHANGE MASTER 'm1' TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root';
SET STATEMENT default_master_connection = 'm1' FOR START SLAVE;
set default_master_connection = 'm1';
stop slave;
--source include/wait_for_slave_to_stop.inc
reset slave all;
set default_master_connection = '';
--disconnect slave
--connection default
...@@ -10,8 +10,4 @@ SET STATEMENT MAX_STATEMENT_TIME=2 FOR SELECT SLEEP(3); ...@@ -10,8 +10,4 @@ SET STATEMENT MAX_STATEMENT_TIME=2 FOR SELECT SLEEP(3);
SHOW STATUS LIKE "max_statement_time_exceeded"; SHOW STATUS LIKE "max_statement_time_exceeded";
SELECT @@MAX_STATEMENT_TIME; SELECT @@MAX_STATEMENT_TIME;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement default_master_connection=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement default_master_connection=default for select 1;
...@@ -2730,6 +2730,9 @@ mysql_execute_command(THD *thd) ...@@ -2730,6 +2730,9 @@ mysql_execute_command(THD *thd)
} }
} }
if (thd->lex->mi.connection_name.str == NULL)
thd->lex->mi.connection_name= thd->variables.default_master_connection;
/* /*
Force statement logging for DDL commands to allow us to update Force statement logging for DDL commands to allow us to update
privilege, system or statistic tables directly without the updates privilege, system or statistic tables directly without the updates
......
...@@ -2443,7 +2443,7 @@ optional_connection_name: ...@@ -2443,7 +2443,7 @@ optional_connection_name:
/* empty */ /* empty */
{ {
LEX *lex= thd->lex; LEX *lex= thd->lex;
lex->mi.connection_name= thd->variables.default_master_connection; lex->mi.connection_name= null_lex_str;
} }
| connection_name; | connection_name;
; ;
...@@ -12674,7 +12674,7 @@ show_param: ...@@ -12674,7 +12674,7 @@ show_param:
| SLAVE STATUS_SYM | SLAVE STATUS_SYM
{ {
LEX *lex= thd->lex; LEX *lex= thd->lex;
lex->mi.connection_name= thd->variables.default_master_connection; lex->mi.connection_name= null_lex_str;
lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
lex->verbose= 0; lex->verbose= 0;
} }
......
...@@ -993,7 +993,7 @@ static bool check_master_connection(sys_var *self, THD *thd, set_var *var) ...@@ -993,7 +993,7 @@ static bool check_master_connection(sys_var *self, THD *thd, set_var *var)
static Sys_var_session_lexstring Sys_default_master_connection( static Sys_var_session_lexstring Sys_default_master_connection(
"default_master_connection", "default_master_connection",
"Master connection to use for all slave variables and slave commands", "Master connection to use for all slave variables and slave commands",
NO_SET_STMT SESSION_ONLY(default_master_connection), SESSION_ONLY(default_master_connection),
NO_CMD_LINE, IN_SYSTEM_CHARSET, NO_CMD_LINE, IN_SYSTEM_CHARSET,
DEFAULT(""), MAX_CONNECTION_NAME, ON_CHECK(check_master_connection)); DEFAULT(""), MAX_CONNECTION_NAME, ON_CHECK(check_master_connection));
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment