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
SELECT @@MAX_STATEMENT_TIME;
@@MAX_STATEMENT_TIME
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);
SHOW STATUS LIKE "max_statement_time_exceeded";
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)
}
}
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
privilege, system or statistic tables directly without the updates
......
......@@ -2443,7 +2443,7 @@ optional_connection_name:
/* empty */
{
LEX *lex= thd->lex;
lex->mi.connection_name= thd->variables.default_master_connection;
lex->mi.connection_name= null_lex_str;
}
| connection_name;
;
......@@ -12674,7 +12674,7 @@ show_param:
| SLAVE STATUS_SYM
{
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->verbose= 0;
}
......
......@@ -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(
"default_master_connection",
"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,
DEFAULT(""), MAX_CONNECTION_NAME, ON_CHECK(check_master_connection));
#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