Merge mysql.com:/nfsdisk1/lars/bk/mysql-5.0-rpl
into mysql.com:/nfsdisk1/lars/bk/mysql-5.1-new-rpl mysql-test/r/mysqlbinlog.result: Auto merged mysql-test/r/rpl_replicate_do.result: Auto merged mysql-test/t/mysqlbinlog.test: Auto merged mysql-test/t/rpl_replicate_do.test: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_trigger.cc: Auto merged sql/sql_trigger.h: Auto merged sql/slave.cc: Manual merge sql/sql_insert.cc: Manual merge sql/sql_parse.cc: Manual merge sql/sql_yacc.yy: Manual merge
This commit is contained in:
commit
e95a62a737
@ -41,3 +41,37 @@ select * from t1;
|
|||||||
ts
|
ts
|
||||||
2005-08-12 00:00:00
|
2005-08-12 00:00:00
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
*** master ***
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
create trigger trg1 before insert on t1 for each row set new.b=2;
|
||||||
|
create table t2 (a int, b int);
|
||||||
|
create trigger trg2 before insert on t2 for each row set new.b=2;
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
t2
|
||||||
|
show triggers;
|
||||||
|
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||||
|
trg1 INSERT t1 set new.b=2 BEFORE NULL root@localhost
|
||||||
|
trg2 INSERT t2 set new.b=2 BEFORE NULL root@localhost
|
||||||
|
*** slave ***
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
show triggers;
|
||||||
|
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||||
|
trg1 INSERT t1 set new.b=2 BEFORE NULL root@localhost
|
||||||
|
*** master ***
|
||||||
|
drop trigger trg1;
|
||||||
|
drop trigger trg2;
|
||||||
|
show triggers;
|
||||||
|
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||||
|
*** slave ***
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
show triggers;
|
||||||
|
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||||
|
*** master ***
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
@ -58,3 +58,35 @@ drop table t1;
|
|||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#24478 DROP TRIGGER is not caught by replicate-*-table filters
|
||||||
|
#
|
||||||
|
--echo *** master ***
|
||||||
|
connection master;
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
create trigger trg1 before insert on t1 for each row set new.b=2;
|
||||||
|
create table t2 (a int, b int);
|
||||||
|
create trigger trg2 before insert on t2 for each row set new.b=2;
|
||||||
|
show tables;
|
||||||
|
show triggers;
|
||||||
|
sync_slave_with_master;
|
||||||
|
--echo *** slave ***
|
||||||
|
connection slave;
|
||||||
|
show tables;
|
||||||
|
show triggers;
|
||||||
|
--echo *** master ***
|
||||||
|
connection master;
|
||||||
|
drop trigger trg1;
|
||||||
|
drop trigger trg2;
|
||||||
|
show triggers;
|
||||||
|
sync_slave_with_master;
|
||||||
|
--echo *** slave ***
|
||||||
|
connection slave;
|
||||||
|
show tables;
|
||||||
|
show triggers;
|
||||||
|
--echo *** master ***
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
@ -99,7 +99,7 @@ void net_set_read_timeout(NET *net, uint timeout);
|
|||||||
#define WARN_DEPRECATED(Thd,Ver,Old,New) \
|
#define WARN_DEPRECATED(Thd,Ver,Old,New) \
|
||||||
do { \
|
do { \
|
||||||
DBUG_ASSERT(strncmp(Ver, MYSQL_SERVER_VERSION, sizeof(Ver)-1) > 0); \
|
DBUG_ASSERT(strncmp(Ver, MYSQL_SERVER_VERSION, sizeof(Ver)-1) > 0); \
|
||||||
if (Thd != NULL) \
|
if (((gptr)Thd) != NULL) \
|
||||||
push_warning_printf(((THD *)Thd), MYSQL_ERROR::WARN_LEVEL_WARN, \
|
push_warning_printf(((THD *)Thd), MYSQL_ERROR::WARN_LEVEL_WARN, \
|
||||||
ER_WARN_DEPRECATED_SYNTAX, ER(ER_WARN_DEPRECATED_SYNTAX), \
|
ER_WARN_DEPRECATED_SYNTAX, ER(ER_WARN_DEPRECATED_SYNTAX), \
|
||||||
(Old), (Ver), (New)); \
|
(Old), (Ver), (New)); \
|
||||||
|
@ -7632,7 +7632,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
if (!slave_warning_issued) //only show the warning once
|
if (!slave_warning_issued) //only show the warning once
|
||||||
{
|
{
|
||||||
slave_warning_issued = true;
|
slave_warning_issued = true;
|
||||||
WARN_DEPRECATED(0, "5.2", "for replication startup options",
|
WARN_DEPRECATED(NULL, "5.2", "for replication startup options",
|
||||||
"'CHANGE MASTER'");
|
"'CHANGE MASTER'");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -53,6 +53,10 @@ ulonglong relay_log_space_limit = 0;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int disconnect_slave_event_count = 0, abort_slave_event_count = 0;
|
int disconnect_slave_event_count = 0, abort_slave_event_count = 0;
|
||||||
|
int events_till_abort = -1;
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
static int events_till_disconnect = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef enum { SLAVE_THD_IO, SLAVE_THD_SQL} SLAVE_THD_TYPE;
|
typedef enum { SLAVE_THD_IO, SLAVE_THD_SQL} SLAVE_THD_TYPE;
|
||||||
|
|
||||||
|
@ -362,6 +362,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
List_item *values;
|
List_item *values;
|
||||||
Name_resolution_context *context;
|
Name_resolution_context *context;
|
||||||
Name_resolution_context_state ctx_state;
|
Name_resolution_context_state ctx_state;
|
||||||
|
#ifndef EMBEDDED_LIBRARY
|
||||||
char *query= thd->query;
|
char *query= thd->query;
|
||||||
/*
|
/*
|
||||||
log_on is about delayed inserts only.
|
log_on is about delayed inserts only.
|
||||||
@ -370,6 +371,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
*/
|
*/
|
||||||
bool log_on= ((thd->options & OPTION_BIN_LOG) ||
|
bool log_on= ((thd->options & OPTION_BIN_LOG) ||
|
||||||
(!(thd->security_ctx->master_access & SUPER_ACL)));
|
(!(thd->security_ctx->master_access & SUPER_ACL)));
|
||||||
|
#endif
|
||||||
thr_lock_type lock_type = table_list->lock_type;
|
thr_lock_type lock_type = table_list->lock_type;
|
||||||
Item *unused_conds= 0;
|
Item *unused_conds= 0;
|
||||||
DBUG_ENTER("mysql_insert");
|
DBUG_ENTER("mysql_insert");
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "sp_cache.h"
|
#include "sp_cache.h"
|
||||||
#include "events.h"
|
#include "events.h"
|
||||||
#include "event_data_objects.h"
|
#include "event_data_objects.h"
|
||||||
|
#include "sql_trigger.h"
|
||||||
|
|
||||||
/* Used in error handling only */
|
/* Used in error handling only */
|
||||||
#define SP_TYPE_STRING(LP) \
|
#define SP_TYPE_STRING(LP) \
|
||||||
@ -1596,6 +1597,30 @@ mysql_execute_command(THD *thd)
|
|||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
if (unlikely(thd->slave_thread))
|
if (unlikely(thd->slave_thread))
|
||||||
{
|
{
|
||||||
|
if (lex->sql_command == SQLCOM_DROP_TRIGGER)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
When dropping a trigger, we need to load its table name
|
||||||
|
before checking slave filter rules.
|
||||||
|
*/
|
||||||
|
add_table_for_trigger(thd, thd->lex->spname, 1, &all_tables);
|
||||||
|
|
||||||
|
if (!all_tables)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
If table name cannot be loaded,
|
||||||
|
it means the trigger does not exists possibly because
|
||||||
|
CREATE TRIGGER was previously skipped for this trigger
|
||||||
|
according to slave filtering rules.
|
||||||
|
Returning success without producing any errors in this case.
|
||||||
|
*/
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// force searching in slave.cc:tables_ok()
|
||||||
|
all_tables->updating= 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check if statment should be skipped because of slave filtering
|
Check if statment should be skipped because of slave filtering
|
||||||
rules
|
rules
|
||||||
|
@ -106,10 +106,6 @@ const LEX_STRING trg_event_type_names[]=
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
add_table_for_trigger(THD *thd, sp_name *trig, bool if_exists,
|
|
||||||
TABLE_LIST ** table);
|
|
||||||
|
|
||||||
class Handle_old_incorrect_sql_modes_hook: public Unknown_key_hook
|
class Handle_old_incorrect_sql_modes_hook: public Unknown_key_hook
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -1180,7 +1176,7 @@ bool Table_triggers_list::get_trigger_info(THD *thd, trg_event_type event,
|
|||||||
1 Error
|
1 Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
int
|
||||||
add_table_for_trigger(THD *thd, sp_name *trig, bool if_exists,
|
add_table_for_trigger(THD *thd, sp_name *trig, bool if_exists,
|
||||||
TABLE_LIST **table)
|
TABLE_LIST **table)
|
||||||
{
|
{
|
||||||
|
@ -137,3 +137,7 @@ private:
|
|||||||
|
|
||||||
extern const LEX_STRING trg_action_time_type_names[];
|
extern const LEX_STRING trg_action_time_type_names[];
|
||||||
extern const LEX_STRING trg_event_type_names[];
|
extern const LEX_STRING trg_event_type_names[];
|
||||||
|
|
||||||
|
int
|
||||||
|
add_table_for_trigger(THD *thd, sp_name *trig, bool if_exists,
|
||||||
|
TABLE_LIST **table);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user