Commit fb841893 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/usr_rh9/home/elkin.rh9/MySQL/Merge/tmp_merge

into  mysql.com:/usr_rh9/home/elkin.rh9/MySQL/Merge/5.1-new


sql/sql_parse.cc:
  Auto merged
parents ef31f48d 9e0240d3
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop database if exists d1;
drop database if exists d2;
drop database if exists d2;
create database d1;
create table d1.t0 (id int);
create database d2;
use d2;
create table t1 (id int);
create table t2 (id int);
insert into t1 values (1), (2), (3), (4), (5);
insert into t2 select id + 3 from t1;
update t1 join t2 using (id) set t1.id = 0;
insert into d1.t0 values (0);
use d1;
select * from t0 where id=0;
id
0
drop database d1;
drop database d2;
+1 −0
Original line number Diff line number Diff line
--replicate-wild-do-table=d1.%
+44 −0
Original line number Diff line number Diff line
# Let's verify that multi-update is not always skipped by slave if
# some replicate-* rules exist.
# (BUG#15699)

source include/master-slave.inc;

### Clean-up

connection master;
--disable_warnings
drop database if exists d1;
drop database if exists d2;

connection slave;
drop database if exists d2;
--enable_warnings

### Test

connection master;
create database d1;      # accepted by slave
create table d1.t0 (id int);
create database d2;      # ignored  by slave
use d2;
create table t1 (id int);
create table t2 (id int);
insert into t1 values (1), (2), (3), (4), (5);
insert into t2 select id + 3 from t1;
# a problematic query which must be filter out by slave
update t1 join t2 using (id) set t1.id = 0;
insert into d1.t0 values (0); # replication works

sync_slave_with_master;
use d1;
#connection slave;
select * from t0 where id=0;  # must find

### Clean-up
connection master;
drop database d1;
drop database d2;


# End of test
+40 −25
Original line number Diff line number Diff line
@@ -2419,8 +2419,8 @@ mysql_execute_command(THD *thd)
    }
  }
  else
  {
#endif /* HAVE_REPLICATION */

    /*
      When option readonly is set deny operations which change non-temporary
      tables. Except for the replication thread and the 'super' users.
@@ -2436,6 +2436,9 @@ mysql_execute_command(THD *thd)
      my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
      DBUG_RETURN(-1);
    }
#ifdef HAVE_REPLICATION
  } /* endif unlikely slave */
#endif
  if(lex->orig_sql_command == SQLCOM_END)
    statistic_increment(thd->status_var.com_stat[lex->sql_command],
                        &LOCK_status);
@@ -3231,8 +3234,7 @@ mysql_execute_command(THD *thd)
    else
      res= 0;

    if ((res= mysql_multi_update_prepare(thd)))
      break;
    res= mysql_multi_update_prepare(thd);

#ifdef HAVE_REPLICATION
    /* Check slave filtering rules */
@@ -3240,13 +3242,23 @@ mysql_execute_command(THD *thd)
    {
      if (all_tables_not_ok(thd, all_tables))
      {
        if (res!= 0)
        {
          res= 0;             /* don't care of prev failure  */
          thd->clear_error(); /* filters are of highest prior */
        }
        /* we warn the slave SQL thread */
        my_error(ER_SLAVE_IGNORED_TABLE, MYF(0));
        break;
      }
      if (res)
        break;
    }
    else
    {
#endif /* HAVE_REPLICATION */
      if (res)
        break;
      if (opt_readonly &&
	  !(thd->security_ctx->master_access & SUPER_ACL) &&
	  some_non_temp_table_to_be_updated(thd, all_tables))
@@ -3254,6 +3266,9 @@ mysql_execute_command(THD *thd)
	my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
	break;
      }
#ifdef HAVE_REPLICATION
    }  /* unlikely */
#endif

    res= mysql_multi_update(thd, all_tables,
                            &select_lex->item_list,