MDEV-19855: Create "Sql_cmd_show_slave_status" class for "SHOW SLAVE STATUS" command.
Create "Sql_cmd_show_slave_status" class for "SHOW SLAVE STATUS" command.
This commit is contained in:
parent
b3b965a94d
commit
2a8ae4bdce
34
sql/slave.cc
34
sql/slave.cc
@ -1646,6 +1646,40 @@ const char *print_slave_db_safe(const char* db)
|
|||||||
|
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
|
|
||||||
|
bool Sql_cmd_show_slave_status::execute(THD *thd)
|
||||||
|
{
|
||||||
|
#ifndef HAVE_REPLICATION
|
||||||
|
my_ok(thd);
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
DBUG_ENTER("Sql_cmd_show_slave_status::execute");
|
||||||
|
bool res= true;
|
||||||
|
|
||||||
|
/* Accept one of two privileges */
|
||||||
|
if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
|
||||||
|
goto error;
|
||||||
|
if (is_show_all_slaves_stat())
|
||||||
|
{
|
||||||
|
mysql_mutex_lock(&LOCK_active_mi);
|
||||||
|
res= show_all_master_info(thd);
|
||||||
|
mysql_mutex_unlock(&LOCK_active_mi);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LEX_MASTER_INFO *lex_mi= &thd->lex->mi;
|
||||||
|
Master_info *mi;
|
||||||
|
if ((mi= get_master_info(&lex_mi->connection_name,
|
||||||
|
Sql_condition::WARN_LEVEL_ERROR)))
|
||||||
|
{
|
||||||
|
res= show_master_info(thd, mi, 0);
|
||||||
|
mi->release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
error:
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
||||||
const char *default_val)
|
const char *default_val)
|
||||||
{
|
{
|
||||||
|
@ -208,6 +208,26 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Sql_cmd_show_slave_status: public Sql_cmd
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
bool show_all_slaves_status;
|
||||||
|
public:
|
||||||
|
Sql_cmd_show_slave_status()
|
||||||
|
:show_all_slaves_status(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
Sql_cmd_show_slave_status(bool status_all)
|
||||||
|
:show_all_slaves_status(status_all)
|
||||||
|
{}
|
||||||
|
|
||||||
|
enum_sql_command sql_command_code() const { return SQLCOM_SHOW_SLAVE_STAT; }
|
||||||
|
|
||||||
|
bool execute(THD *thd);
|
||||||
|
bool is_show_all_slaves_stat() { return show_all_slaves_status; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class Sql_cmd_create_table_like: public Sql_cmd,
|
class Sql_cmd_create_table_like: public Sql_cmd,
|
||||||
public Storage_engine_name
|
public Storage_engine_name
|
||||||
{
|
{
|
||||||
|
@ -4079,31 +4079,7 @@ mysql_execute_command(THD *thd)
|
|||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
mysql_mutex_unlock(&LOCK_active_mi);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQLCOM_SHOW_SLAVE_STAT:
|
|
||||||
{
|
|
||||||
/* Accept one of two privileges */
|
|
||||||
if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
if (lex->verbose)
|
|
||||||
{
|
|
||||||
mysql_mutex_lock(&LOCK_active_mi);
|
|
||||||
res= show_all_master_info(thd);
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LEX_MASTER_INFO *lex_mi= &thd->lex->mi;
|
|
||||||
Master_info *mi;
|
|
||||||
if ((mi= get_master_info(&lex_mi->connection_name,
|
|
||||||
Sql_condition::WARN_LEVEL_ERROR)))
|
|
||||||
{
|
|
||||||
res= show_master_info(thd, mi, 0);
|
|
||||||
mi->release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SQLCOM_SHOW_MASTER_STAT:
|
case SQLCOM_SHOW_MASTER_STAT:
|
||||||
{
|
{
|
||||||
/* Accept one of two privileges */
|
/* Accept one of two privileges */
|
||||||
@ -6074,6 +6050,7 @@ mysql_execute_command(THD *thd)
|
|||||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case SQLCOM_ALTER_SEQUENCE:
|
case SQLCOM_ALTER_SEQUENCE:
|
||||||
|
case SQLCOM_SHOW_SLAVE_STAT:
|
||||||
case SQLCOM_SIGNAL:
|
case SQLCOM_SIGNAL:
|
||||||
case SQLCOM_RESIGNAL:
|
case SQLCOM_RESIGNAL:
|
||||||
case SQLCOM_GET_DIAGNOSTICS:
|
case SQLCOM_GET_DIAGNOSTICS:
|
||||||
|
@ -1933,14 +1933,15 @@ static int mysql_test_show_grants(Prepared_statement *stmt)
|
|||||||
TRUE error, error message is set in THD
|
TRUE error, error message is set in THD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int mysql_test_show_slave_status(Prepared_statement *stmt)
|
static int mysql_test_show_slave_status(Prepared_statement *stmt,
|
||||||
|
bool show_all_slaves_stat)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_test_show_slave_status");
|
DBUG_ENTER("mysql_test_show_slave_status");
|
||||||
THD *thd= stmt->thd;
|
THD *thd= stmt->thd;
|
||||||
List<Item> fields;
|
List<Item> fields;
|
||||||
|
|
||||||
show_master_info_get_fields(thd, &fields, thd->lex->verbose, 0);
|
show_master_info_get_fields(thd, &fields, show_all_slaves_stat, 0);
|
||||||
|
|
||||||
DBUG_RETURN(send_stmt_metadata(thd, stmt, &fields));
|
DBUG_RETURN(send_stmt_metadata(thd, stmt, &fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2393,12 +2394,20 @@ static bool check_prepared_statement(Prepared_statement *stmt)
|
|||||||
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
|
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
|
||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
case SQLCOM_SHOW_SLAVE_STAT:
|
case SQLCOM_SHOW_SLAVE_STAT:
|
||||||
if ((res= mysql_test_show_slave_status(stmt)) == 2)
|
|
||||||
{
|
{
|
||||||
/* Statement and field info has already been sent */
|
DBUG_ASSERT(thd->lex->m_sql_cmd);
|
||||||
DBUG_RETURN(FALSE);
|
Sql_cmd_show_slave_status *cmd;
|
||||||
|
cmd= dynamic_cast<Sql_cmd_show_slave_status*>(thd->lex->m_sql_cmd);
|
||||||
|
DBUG_ASSERT(cmd);
|
||||||
|
if ((res= mysql_test_show_slave_status(stmt,
|
||||||
|
cmd->is_show_all_slaves_stat()))
|
||||||
|
== 2)
|
||||||
|
{
|
||||||
|
/* Statement and field info has already been sent */
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case SQLCOM_SHOW_MASTER_STAT:
|
case SQLCOM_SHOW_MASTER_STAT:
|
||||||
if ((res= mysql_test_show_master_status(stmt)) == 2)
|
if ((res= mysql_test_show_master_status(stmt)) == 2)
|
||||||
{
|
{
|
||||||
|
@ -14205,20 +14205,26 @@ show_param:
|
|||||||
}
|
}
|
||||||
| ALL SLAVES STATUS_SYM
|
| ALL SLAVES STATUS_SYM
|
||||||
{
|
{
|
||||||
|
if (!(Lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status(true)))
|
||||||
|
MYSQL_YYABORT;
|
||||||
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
Lex->verbose= 1;
|
|
||||||
}
|
}
|
||||||
| SLAVE STATUS_SYM
|
| SLAVE STATUS_SYM
|
||||||
{
|
{
|
||||||
LEX *lex= thd->lex;
|
LEX *lex= thd->lex;
|
||||||
lex->mi.connection_name= null_clex_str;
|
lex->mi.connection_name= null_clex_str;
|
||||||
|
if (!(lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status()))
|
||||||
|
MYSQL_YYABORT;
|
||||||
lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
lex->verbose= 0;
|
|
||||||
}
|
}
|
||||||
| SLAVE connection_name STATUS_SYM
|
| SLAVE connection_name STATUS_SYM
|
||||||
{
|
{
|
||||||
|
if (!(Lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status()))
|
||||||
|
MYSQL_YYABORT;
|
||||||
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
Lex->verbose= 0;
|
|
||||||
}
|
}
|
||||||
| CREATE PROCEDURE_SYM sp_name
|
| CREATE PROCEDURE_SYM sp_name
|
||||||
{
|
{
|
||||||
|
@ -14329,19 +14329,25 @@ show_param:
|
|||||||
| ALL SLAVES STATUS_SYM
|
| ALL SLAVES STATUS_SYM
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
Lex->verbose= 1;
|
if (!(Lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status(true)))
|
||||||
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| SLAVE STATUS_SYM
|
| SLAVE STATUS_SYM
|
||||||
{
|
{
|
||||||
LEX *lex= thd->lex;
|
LEX *lex= thd->lex;
|
||||||
lex->mi.connection_name= null_clex_str;
|
lex->mi.connection_name= null_clex_str;
|
||||||
lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
lex->verbose= 0;
|
if (!(lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status()))
|
||||||
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| SLAVE connection_name STATUS_SYM
|
| SLAVE connection_name STATUS_SYM
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
|
||||||
Lex->verbose= 0;
|
if (!(Lex->m_sql_cmd= new (thd->mem_root)
|
||||||
|
Sql_cmd_show_slave_status()))
|
||||||
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| CREATE PROCEDURE_SYM sp_name
|
| CREATE PROCEDURE_SYM sp_name
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user