mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge: bug#27417,23333 manual work for fixing tests and a source code.
This commit is contained in:
@ -426,11 +426,18 @@ insert into ti values (2) /* to make the dup error in the following */;
|
|||||||
insert into tt select * from ti /* one affected and error */;
|
insert into tt select * from ti /* one affected and error */;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'a'
|
ERROR 23000: Duplicate entry '2' for key 'a'
|
||||||
rollback;
|
rollback;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 106
|
master-bin.000001 589
|
||||||
show binlog events from <binlog_start>;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into ti values (1)
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into ti values (2) /* to make the dup error in the following */
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into tt select * from ti /* one affected and error */
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from ti /* zero */;
|
select count(*) from ti /* zero */;
|
||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
@ -456,10 +463,11 @@ insert into t2 select bug27417(2);
|
|||||||
reset master;
|
reset master;
|
||||||
insert into t2 values (bug27417(2));
|
insert into t2 values (bug27417(2));
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
show master status;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 222
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
/* only (!) with fixes for #23333 will show there is the query */;
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
select count(*) from t1 /* must be 3 */;
|
select count(*) from t1 /* must be 3 */;
|
||||||
count(*)
|
count(*)
|
||||||
3
|
3
|
||||||
@ -471,10 +479,11 @@ delete from t2 where a=bug27417(3);
|
|||||||
select count(*) from t2 /* nothing got deleted */;
|
select count(*) from t2 /* nothing got deleted */;
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
show master status;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 227
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
/* the query must be in regardless of #23333 */;
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
select count(*) from t1 /* must be 5 */;
|
select count(*) from t1 /* must be 5 */;
|
||||||
count(*)
|
count(*)
|
||||||
5
|
5
|
||||||
@ -491,9 +500,12 @@ insert into t2 values (1);
|
|||||||
reset master;
|
reset master;
|
||||||
insert into t2 values (bug27417(1));
|
insert into t2 values (bug27417(1));
|
||||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
show master status /* the offset must denote there is the query */;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 293
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from t1 /* must be 1 */;
|
select count(*) from t1 /* must be 1 */;
|
||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
@ -503,9 +515,13 @@ insert into t2 values (2);
|
|||||||
reset master;
|
reset master;
|
||||||
insert into t2 select bug27417(1) union select bug27417(2);
|
insert into t2 select bug27417(1) union select bug27417(2);
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
show master status /* the offset must denote there is the query */;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 332
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: #
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
@ -514,9 +530,13 @@ insert into t3 values (1,1),(2,3),(3,4);
|
|||||||
reset master;
|
reset master;
|
||||||
update t3 set b=b+bug27417(1);
|
update t3 set b=b+bug27417(1);
|
||||||
ERROR 23000: Duplicate entry '4' for key 'b'
|
ERROR 23000: Duplicate entry '4' for key 'b'
|
||||||
show master status /* the offset must denote there is the query */;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 305
|
master-bin.000001 # Table_map # # table_id: # (test.t3)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: #
|
||||||
|
master-bin.000001 # Update_rows # # table_id: #
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
@ -530,9 +550,13 @@ insert into t3 values (bug27417(1), 2);
|
|||||||
reset master;
|
reset master;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
show master status /* the offset must denote there is the query */;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 335
|
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t3)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from t1 /* must be 1 */;
|
select count(*) from t1 /* must be 1 */;
|
||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
@ -548,9 +572,14 @@ a b
|
|||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
show master status /* the offset must denote there is the query */;
|
show binlog events from <binlog_start>;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 362
|
master-bin.000001 # Table_map # # table_id: # (test.t4)
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: #
|
||||||
|
master-bin.000001 # Write_rows # # table_id: #
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
drop trigger trg_del;
|
drop trigger trg_del;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
drop function bug27417;
|
drop function bug27417;
|
||||||
|
@ -120,15 +120,15 @@ insert into t2 select bug27417(2);
|
|||||||
reset master;
|
reset master;
|
||||||
|
|
||||||
--error ER_DUP_ENTRY
|
--error ER_DUP_ENTRY
|
||||||
insert into t2 values (bug27417(2));
|
insert into t2 values (bug27417(2));
|
||||||
show master status; /* only (!) with fixes for #23333 will show there is the query */;
|
source include/show_binlog_events.inc; #only (!) with fixes for #23333 will show there is the query
|
||||||
select count(*) from t1 /* must be 3 */;
|
select count(*) from t1 /* must be 3 */;
|
||||||
|
|
||||||
reset master;
|
reset master;
|
||||||
select count(*) from t2;
|
select count(*) from t2;
|
||||||
delete from t2 where a=bug27417(3);
|
delete from t2 where a=bug27417(3);
|
||||||
select count(*) from t2 /* nothing got deleted */;
|
select count(*) from t2 /* nothing got deleted */;
|
||||||
show master status; /* the query must be in regardless of #23333 */;
|
source include/show_binlog_events.inc; # the query must be in regardless of #23333
|
||||||
select count(*) from t1 /* must be 5 */;
|
select count(*) from t1 /* must be 5 */;
|
||||||
|
|
||||||
--enable_info
|
--enable_info
|
||||||
@ -166,7 +166,7 @@ CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
|||||||
|
|
||||||
# check
|
# check
|
||||||
|
|
||||||
show master status /* the offset must denote there is the query */;
|
source include/show_binlog_events.inc; # must be event of the query
|
||||||
select count(*) from t1 /* must be 1 */;
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -186,7 +186,7 @@ CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
|||||||
|
|
||||||
# check
|
# check
|
||||||
|
|
||||||
show master status /* the offset must denote there is the query */;
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -203,7 +203,7 @@ CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
|||||||
update t3 set b=b+bug27417(1);
|
update t3 set b=b+bug27417(1);
|
||||||
|
|
||||||
# check
|
# check
|
||||||
show master status /* the offset must denote there is the query */;
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
|||||||
--error ER_DUP_ENTRY
|
--error ER_DUP_ENTRY
|
||||||
delete from t2;
|
delete from t2;
|
||||||
# check
|
# check
|
||||||
show master status /* the offset must denote there is the query */;
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
select count(*) from t1 /* must be 1 */;
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
|||||||
# check
|
# check
|
||||||
select * from t4;
|
select * from t4;
|
||||||
select count(*) from t1 /* must be 2 */;
|
select count(*) from t1 /* must be 2 */;
|
||||||
show master status /* the offset must denote there is the query */;
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
|
|
||||||
#
|
#
|
||||||
# bug#23333 cleanup
|
# bug#23333 cleanup
|
||||||
|
@ -3163,6 +3163,7 @@ void select_insert::abort() {
|
|||||||
*/
|
*/
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
|
bool changed, transactional_table;
|
||||||
/*
|
/*
|
||||||
If we are not in prelocked mode, we end the bulk insert started
|
If we are not in prelocked mode, we end the bulk insert started
|
||||||
before.
|
before.
|
||||||
@ -3184,20 +3185,20 @@ void select_insert::abort() {
|
|||||||
If table creation failed, the number of rows modified will also be
|
If table creation failed, the number of rows modified will also be
|
||||||
zero, so no check for that is made.
|
zero, so no check for that is made.
|
||||||
*/
|
*/
|
||||||
if (info.copied || info.deleted || info.updated)
|
changed= (info.copied || info.deleted || info.updated);
|
||||||
|
transactional_table= table->file->has_transactions();
|
||||||
|
if (thd->transaction.stmt.modified_non_trans_table)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(table != NULL);
|
|
||||||
if (!table->file->has_transactions())
|
|
||||||
{
|
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
||||||
table->file->has_transactions(), FALSE);
|
transactional_table, FALSE);
|
||||||
if (!thd->current_stmt_binlog_row_based && !table->s->tmp_table &&
|
if (!thd->current_stmt_binlog_row_based && !can_rollback_data())
|
||||||
!can_rollback_data())
|
|
||||||
thd->transaction.all.modified_non_trans_table= TRUE;
|
thd->transaction.all.modified_non_trans_table= TRUE;
|
||||||
query_cache_invalidate3(thd, table, 1);
|
if (changed)
|
||||||
}
|
query_cache_invalidate3(thd, table, 1);
|
||||||
}
|
}
|
||||||
|
DBUG_ASSERT(transactional_table || !changed ||
|
||||||
|
thd->transaction.stmt.modified_non_trans_table);
|
||||||
table->file->ha_release_auto_increment();
|
table->file->ha_release_auto_increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user