summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi>2007-05-29 21:21:13 +0300
committerunknown <aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi>2007-05-29 21:21:13 +0300
commitf3734099d21659003037564d0051204a69cc69b3 (patch)
tree19dcb28c48bd3a66363f8679f5c1e3188fadf938
parent4ecc9035495fe963bf63600571abb4b687f951b6 (diff)
parent70a530e4014d386b41998c67ebb57be583e876f4 (diff)
downloadmariadb-git-f3734099d21659003037564d0051204a69cc69b3.tar.gz
Merge dsl-hkibras1-ff5dc300-70.dhcp.inet.fi:/home/elkin/MySQL/TEAM/BARE/5.0
into dsl-hkibras1-ff5dc300-70.dhcp.inet.fi:/tmp/merge_5.0 sql/sql_insert.cc: Auto merged
-rw-r--r--mysql-test/r/binlog_killed.result97
-rw-r--r--mysql-test/t/binlog_killed.test71
-rw-r--r--sql/sql_insert.cc2
3 files changed, 58 insertions, 112 deletions
diff --git a/mysql-test/r/binlog_killed.result b/mysql-test/r/binlog_killed.result
index 196400eaf9e..38184463cc1 100644
--- a/mysql-test/r/binlog_killed.result
+++ b/mysql-test/r/binlog_killed.result
@@ -1,106 +1,25 @@
-create function bug27563()
-RETURNS int(11)
-DETERMINISTIC
-begin
-select get_lock("a", 10) into @a;
-return 1;
-end|
-create function bug27565()
-RETURNS int(11)
-DETERMINISTIC
-begin
-select a from t1 where a=1 into @a for update;
-return 1;
-end|
create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM;
create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
-reset master;
select get_lock("a", 20);
get_lock("a", 20)
1
-insert into t1 values (bug27563(),1);
-kill query 3;
-affected rows: 1
-show master status /* must be only FD event unless Bug#27563 */;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 260
-select count(*) from t1 /* must be zero unless Bug#27563 */;
-count(*)
-1
-begin;
-insert into t1 values (bug27563(),1);
-kill query 3;
-affected rows: 1
-select count(*) from t1 /* must be zero unless Bug#27563 */;
-count(*)
-2
-commit;
reset master;
-insert into t2 values (bug27563(),1);
+insert into t2 values (null, null), (null, get_lock("a", 10)),(null, get_lock("a", 10));
kill query 3;
-select count(*) from t2 /* must be one */;
+select count(*) from t2 /* must be 3 */;
count(*)
-1
-show master status /* must have the insert event more to FD */;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 225
-select RELEASE_LOCK("a");
-RELEASE_LOCK("a")
-1
-delete from t1;
-delete from t2;
-insert into t1 values (1,1);
-insert into t2 values (1,1);
-begin;
-update t1 set b=0 where a=1;
-update t2 set b=bug27565()-1 where a=1;
-kill query 3;
-commit;
-Got one of the listed errors
-select * from t1 /* must be: (1,0) */;
-a b
-1 0
-select * from t2 /* must be as before: (1,1) */;
-a b
-1 1
-delete from t3;
-reset master;
-begin;
-update t1 set b=0 where a=1;
-insert into t3 values (0,0),(1,bug27565());
-kill query 3;
-rollback;
-Got one of the listed errors
-select count(*) from t3 /* must be zero */;
-count(*)
-0
-show master status /* nothing in binlog */;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 98
-delete from t2;
-reset master;
-begin;
-update t1 set b=0 where a=1;
-insert into t2 values (0,0),(1,bug27565()) /* non-ta t2 */;
-kill query 3;
-rollback;
-Got one of the listed errors
-select count(*) from t2 /* count must be one */;
-count(*)
-1
-show master status /* insert into non-ta must be in binlog */;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 247
+3
select
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
is not null;
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
is not null
1
-select @a like "%#%error_code=1317%" /* must return 1 */;
-@a like "%#%error_code=1317%"
+select @a like "%#%error_code=0%" /* must return 1 */;
+@a like "%#%error_code=0%"
+1
+select @a like "%insert%" /* must return 1 */;
+@a like "%insert%"
1
drop table t1,t2,t3;
-drop function bug27563;
-drop function bug27565;
diff --git a/mysql-test/t/binlog_killed.test b/mysql-test/t/binlog_killed.test
index 4e92632c218..219065a3579 100644
--- a/mysql-test/t/binlog_killed.test
+++ b/mysql-test/t/binlog_killed.test
@@ -2,18 +2,52 @@
###
### bug#22725 : incorrect killed error in binlogged query
-### and
-### Bug#27563 killing noticed in SF() stack but the error gets missed in action
-### Bug#27565 killed query of SF() is not reported correctly and
###
connect (con1, localhost, root,,);
connect (con2, localhost, root,,);
-# the function is *insensitive* to killing - TO FIX IN BUG#27563
-# the function is used in the test anyway with `TODO' left
-# to correct results afterwards
+create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
+create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM;
+create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
+
+#
+# effective test for bug#22725
+#
+
+connection con1;
+select get_lock("a", 20);
+
+connection con2;
+let $ID= `select connection_id()`;
+reset master;
+send insert into t2 values (null, null), (null, get_lock("a", 10)),(null, get_lock("a", 10));
+
+
+connection con1;
+eval kill query $ID;
+
+connection con2;
+--error 0,ER_QUERY_INTERRUPTED
+reap;
+select count(*) from t2 /* must be 3 */;
+--exec $MYSQL_BINLOG --start-position=126 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+eval select @a like "%#%error_code=0%" /* must return 1 */;
+eval select @a like "%insert%" /* must return 1 */;
+# the functions are either *insensitive* to killing or killing can cause
+# strange problmes with the error propagation out of SF's stack
+# Bug#27563, Bug#27565, BUG#24971
+#
+# TODO: use if's block as regression test for the bugs or remove
+#
+if (0)
+{
delimiter |;
create function bug27563()
RETURNS int(11)
@@ -36,9 +70,6 @@ begin
end|
delimiter ;|
-create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
-create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM;
-create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
reset master;
@@ -60,7 +91,7 @@ connection con2;
--enable_info
# todo: remove 0 return after fixing Bug#27563
--error 0,ER_QUERY_INTERRUPTED
-reap;
+reap; ### pb: wrong error
--disable_info
###--replace_column 2 # 5 #
### show binlog events from 98 /* nothing in binlog unless Bug#27563 */;
@@ -137,7 +168,7 @@ connection con2;
# remove 1105 (wrong)
#--error ER_QUERY_INTERRUPTED
--error 1105,ER_QUERY_INTERRUPTED
-reap;
+reap; ### pb: wrong error
select * from t1 /* must be: (1,0) */;
select * from t2 /* must be as before: (1,1) */;
@@ -163,7 +194,7 @@ connection con2;
# remove 1105 (wrong)
#--error ER_QUERY_INTERRUPTED
--error 1105,ER_QUERY_INTERRUPTED
-reap;
+reap; ### pb: wrong error
select count(*) from t3 /* must be zero */;
show master status /* nothing in binlog */;
@@ -187,20 +218,16 @@ connection con2;
# remove 1105 (wrong)
#--error ER_QUERY_INTERRUPTED
--error 1105,ER_QUERY_INTERRUPTED
-reap;
+reap; ### pb: wrong error
select count(*) from t2 /* count must be one */;
show master status /* insert into non-ta must be in binlog */;
---exec $MYSQL_BINLOG --start-position=126 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
-eval select
-(@a:=load_file("$MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
-is not null;
---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
-eval select @a like "%#%error_code=1317%" /* must return 1 */;
-system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ;
-drop table t1,t2,t3;
drop function bug27563;
drop function bug27565;
+}
+
+system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ;
+
+drop table t1,t2,t3;
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 2161b961927..c5888ffa113 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -871,7 +871,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
routines did not result in any error due to the KILLED. In
such case the flag is ignored for constructing binlog event.
*/
- assert(thd->killed != THD::KILL_BAD_DATA || error > 0);
+ DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0);
if (thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
transactional_table, FALSE,