mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
bzr merge -r4209 maria/10.0.
This commit is contained in:
119
sql/sql_parse.cc
119
sql/sql_parse.cc
@ -177,8 +177,9 @@ const char *xa_state_names[]={
|
||||
*/
|
||||
inline bool all_tables_not_ok(THD *thd, TABLE_LIST *tables)
|
||||
{
|
||||
return thd->rpl_filter->is_on() && tables && !thd->spcont &&
|
||||
!thd->rpl_filter->tables_ok(thd->db, tables);
|
||||
Rpl_filter *rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||
return rpl_filter->is_on() && tables && !thd->spcont &&
|
||||
!rpl_filter->tables_ok(thd->db, tables);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1395,7 +1396,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
auth_rc= 1;
|
||||
}
|
||||
else
|
||||
auth_rc= acl_authenticate(thd, 0, packet_length);
|
||||
auth_rc= acl_authenticate(thd, packet_length);
|
||||
|
||||
mysql_audit_notify_connection_change_user(thd);
|
||||
if (auth_rc)
|
||||
@ -2238,23 +2239,6 @@ bool alloc_query(THD *thd, const char *packet, uint packet_length)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void reset_one_shot_variables(THD *thd)
|
||||
{
|
||||
thd->variables.character_set_client=
|
||||
global_system_variables.character_set_client;
|
||||
thd->variables.collation_connection=
|
||||
global_system_variables.collation_connection;
|
||||
thd->variables.collation_database=
|
||||
global_system_variables.collation_database;
|
||||
thd->variables.collation_server=
|
||||
global_system_variables.collation_server;
|
||||
thd->update_charset();
|
||||
thd->variables.time_zone=
|
||||
global_system_variables.time_zone;
|
||||
thd->variables.lc_time_names= &my_locale_en_US;
|
||||
thd->one_shot_set= 0;
|
||||
}
|
||||
|
||||
|
||||
bool sp_process_definer(THD *thd)
|
||||
{
|
||||
@ -2448,7 +2432,7 @@ mysql_execute_command(THD *thd)
|
||||
/* have table map for update for multi-update statement (BUG#37051) */
|
||||
bool have_table_map_for_update= FALSE;
|
||||
/* */
|
||||
Rpl_filter *rpl_filter= thd->rpl_filter;
|
||||
Rpl_filter *rpl_filter;
|
||||
#endif
|
||||
DBUG_ENTER("mysql_execute_command");
|
||||
|
||||
@ -2562,9 +2546,6 @@ mysql_execute_command(THD *thd)
|
||||
{
|
||||
/* we warn the slave SQL thread */
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
if (thd->one_shot_set)
|
||||
reset_one_shot_variables(thd);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
for (table=all_tables; table; table=table->next_global)
|
||||
@ -2592,23 +2573,6 @@ mysql_execute_command(THD *thd)
|
||||
{
|
||||
/* we warn the slave SQL thread */
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
if (thd->one_shot_set)
|
||||
{
|
||||
/*
|
||||
It's ok to check thd->one_shot_set here:
|
||||
|
||||
The charsets in a MySQL 5.0 slave can change by both a binlogged
|
||||
SET ONE_SHOT statement and the event-internal charset setting,
|
||||
and these two ways to change charsets do not seems to work
|
||||
together.
|
||||
|
||||
At least there seems to be problems in the rli cache for
|
||||
charsets if we are using ONE_SHOT. Note that this is normally no
|
||||
problem because either the >= 5.0 slave reads a 4.1 binlog (with
|
||||
ONE_SHOT) *or* or 5.0 binlog (without ONE_SHOT) but never both."
|
||||
*/
|
||||
reset_one_shot_variables(thd);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
/*
|
||||
@ -4114,11 +4078,6 @@ end_with_restore_list:
|
||||
goto error;
|
||||
if (!(res= sql_set_variables(thd, lex_var_list)))
|
||||
{
|
||||
/*
|
||||
If the previous command was a SET ONE_SHOT, we don't want to forget
|
||||
about the ONE_SHOT property of that SET. So we use a |= instead of = .
|
||||
*/
|
||||
thd->one_shot_set|= lex->one_shot_set;
|
||||
my_ok(thd);
|
||||
}
|
||||
else
|
||||
@ -4218,12 +4177,15 @@ end_with_restore_list:
|
||||
above was not called. So we have to check rules again here.
|
||||
*/
|
||||
#ifdef HAVE_REPLICATION
|
||||
if (thd->slave_thread &&
|
||||
(!rpl_filter->db_ok(lex->name.str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(lex->name.str)))
|
||||
if (thd->slave_thread)
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||
if (!rpl_filter->db_ok(lex->name.str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(lex->name.str))
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (check_access(thd, CREATE_ACL, lex->name.str, NULL, NULL, 1, 0))
|
||||
@ -4247,12 +4209,15 @@ end_with_restore_list:
|
||||
above was not called. So we have to check rules again here.
|
||||
*/
|
||||
#ifdef HAVE_REPLICATION
|
||||
if (thd->slave_thread &&
|
||||
(!rpl_filter->db_ok(lex->name.str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(lex->name.str)))
|
||||
if (thd->slave_thread)
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||
if (!rpl_filter->db_ok(lex->name.str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(lex->name.str))
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (check_access(thd, DROP_ACL, lex->name.str, NULL, NULL, 1, 0))
|
||||
@ -4265,13 +4230,16 @@ end_with_restore_list:
|
||||
{
|
||||
LEX_STRING *db= & lex->name;
|
||||
#ifdef HAVE_REPLICATION
|
||||
if (thd->slave_thread &&
|
||||
(!rpl_filter->db_ok(db->str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(db->str)))
|
||||
if (thd->slave_thread)
|
||||
{
|
||||
res= 1;
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||
if (!rpl_filter->db_ok(db->str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(db->str))
|
||||
{
|
||||
res= 1;
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (check_db_name(db))
|
||||
@ -4309,12 +4277,15 @@ end_with_restore_list:
|
||||
above was not called. So we have to check rules again here.
|
||||
*/
|
||||
#ifdef HAVE_REPLICATION
|
||||
if (thd->slave_thread &&
|
||||
(!rpl_filter->db_ok(db->str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(db->str)))
|
||||
if (thd->slave_thread)
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
rpl_filter= thd->system_thread_info.rpl_sql_info->rpl_filter;
|
||||
if (!rpl_filter->db_ok(db->str) ||
|
||||
!rpl_filter->db_ok_with_wild_table(db->str))
|
||||
{
|
||||
my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (check_access(thd, ALTER_ACL, db->str, NULL, NULL, 1, 0))
|
||||
@ -5536,19 +5507,6 @@ create_sp_error:
|
||||
THD_STAGE_INFO(thd, stage_query_end);
|
||||
thd->update_stats();
|
||||
|
||||
/*
|
||||
Binlog-related cleanup:
|
||||
Reset system variables temporarily modified by SET ONE SHOT.
|
||||
|
||||
Exception: If this is a SET, do nothing. This is to allow
|
||||
mysqlbinlog to print many SET commands (in this case we want the
|
||||
charset temp setting to live until the real query). This is also
|
||||
needed so that SET CHARACTER_SET_CLIENT... does not cancel itself
|
||||
immediately.
|
||||
*/
|
||||
if (thd->one_shot_set && lex->sql_command != SQLCOM_SET_OPTION)
|
||||
reset_one_shot_variables(thd);
|
||||
|
||||
goto finish;
|
||||
|
||||
error:
|
||||
@ -5593,7 +5551,6 @@ finish:
|
||||
}
|
||||
|
||||
/* Free tables */
|
||||
THD_STAGE_INFO(thd, stage_closing_tables);
|
||||
close_thread_tables(thd);
|
||||
#ifdef WITH_WSREP
|
||||
thd->wsrep_consistency_check= NO_CONSISTENCY_CHECK;
|
||||
|
Reference in New Issue
Block a user