mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
MDEV-6956:SET STATEMENT default_master_connection = ... has no effect
the problem was in assigning default value during parsing.
This commit is contained in:
parent
e91bc2e91d
commit
dab12366b1
9 changed files with 124 additions and 11 deletions
65
mysql-test/include/show_all_slaves_status.inc
Normal file
65
mysql-test/include/show_all_slaves_status.inc
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# ==== 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;
|
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.
|
|
||||||
|
|
0
mysql-test/suite/rpl/r/rpl_set_statement.test
Normal file
0
mysql-test/suite/rpl/r/rpl_set_statement.test
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
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 = '';
|
34
mysql-test/suite/rpl/t/rpl_set_statement_default_master.test
Normal file
34
mysql-test/suite/rpl/t/rpl_set_statement_default_master.test
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
--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";
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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:
|
||||||
/* 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:
|
||||||
| 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)
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue