mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
code cleanup
mysql-test/r/rpl_insert_id.result: Test logging of FOREIGN_KEY_CHECKS mysql-test/t/rpl_insert_id.test: Test logging of FOREIGN_KEY_CHECKS sql/log.cc: Code cleanup
This commit is contained in:
@ -23,10 +23,12 @@ drop table t1;
|
|||||||
drop table t2;
|
drop table t2;
|
||||||
create table t1(a int auto_increment, key(a));
|
create table t1(a int auto_increment, key(a));
|
||||||
create table t2(b int auto_increment, c int, key(b));
|
create table t2(b int auto_increment, c int, key(b));
|
||||||
|
SET FOREIGN_KEY_CHECKS=0;
|
||||||
insert into t1 values (10);
|
insert into t1 values (10);
|
||||||
insert into t1 values (null),(null),(null);
|
insert into t1 values (null),(null),(null);
|
||||||
insert into t2 values (5,0);
|
insert into t2 values (5,0);
|
||||||
insert into t2 values (null,last_insert_id());
|
insert into t2 values (null,last_insert_id());
|
||||||
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
10
|
10
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#see if queries that use both
|
# See if queries that use both auto_increment and LAST_INSERT_ID()
|
||||||
#auto_increment and LAST_INSERT_ID()
|
# are replicated well
|
||||||
#are replicated well
|
|
||||||
|
# We also check how the foreign_key_check variable is replicated
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
connection master;
|
connection master;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
@ -22,10 +24,12 @@ drop table t1;
|
|||||||
drop table t2;
|
drop table t2;
|
||||||
create table t1(a int auto_increment, key(a));
|
create table t1(a int auto_increment, key(a));
|
||||||
create table t2(b int auto_increment, c int, key(b));
|
create table t2(b int auto_increment, c int, key(b));
|
||||||
|
SET FOREIGN_KEY_CHECKS=0;
|
||||||
insert into t1 values (10);
|
insert into t1 values (10);
|
||||||
insert into t1 values (null),(null),(null);
|
insert into t1 values (null),(null),(null);
|
||||||
insert into t2 values (5,0);
|
insert into t2 values (5,0);
|
||||||
insert into t2 values (null,last_insert_id());
|
insert into t2 values (null,last_insert_id());
|
||||||
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
connection slave;
|
connection slave;
|
||||||
sync_with_master;
|
sync_with_master;
|
||||||
|
57
sql/log.cc
57
sql/log.cc
@ -1116,50 +1116,38 @@ bool MYSQL_LOG::write(Log_event* event_info)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the user has set FOREIGN_KEY_CHECKS=0 we wrap every SQL
|
/*
|
||||||
command in the binlog inside:
|
If the user has set FOREIGN_KEY_CHECKS=0 we wrap every SQL
|
||||||
SET FOREIGN_KEY_CHECKS=0;
|
command in the binlog inside:
|
||||||
<command>;
|
SET FOREIGN_KEY_CHECKS=0;
|
||||||
SET FOREIGN_KEY_CHECKS=1; */
|
<command>;
|
||||||
|
SET FOREIGN_KEY_CHECKS=1;
|
||||||
|
*/
|
||||||
|
|
||||||
if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS)
|
if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS)
|
||||||
{
|
{
|
||||||
char buf[256], *p;
|
Query_log_event e(thd, "SET FOREIGN_KEY_CHECKS=0", 24, 0);
|
||||||
p= strmov(buf, "SET FOREIGN_KEY_CHECKS=0");
|
|
||||||
Query_log_event e(thd, buf, (ulong) (p - buf), 0);
|
|
||||||
e.set_log_pos(this);
|
e.set_log_pos(this);
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Write the SQL command */
|
||||||
2. Write the SQL command
|
|
||||||
*/
|
|
||||||
|
|
||||||
event_info->set_log_pos(this);
|
event_info->set_log_pos(this);
|
||||||
if (event_info->write(file) ||
|
if (event_info->write(file))
|
||||||
file == &log_file && flush_io_cache(file))
|
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/*
|
/* Write log events to reset the 'run environment' of the SQL command */
|
||||||
3. Write log events to reset the 'run environment' of the SQL command
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (thd && thd->options & OPTION_NO_FOREIGN_KEY_CHECKS)
|
if (thd && thd->options & OPTION_NO_FOREIGN_KEY_CHECKS)
|
||||||
{
|
{
|
||||||
char buf[256], *p;
|
Query_log_event e(thd, "SET FOREIGN_KEY_CHECKS=1", 24, 0);
|
||||||
|
|
||||||
p= strmov(buf, "SET FOREIGN_KEY_CHECKS=1");
|
|
||||||
Query_log_event e(thd, buf, (ulong) (p - buf), 0);
|
|
||||||
e.set_log_pos(this);
|
e.set_log_pos(this);
|
||||||
|
if (e.write(file))
|
||||||
if (e.write(file) ||
|
|
||||||
file == &log_file && flush_io_cache(file))
|
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
error=0;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Tell for transactional table handlers up to which position in the
|
Tell for transactional table handlers up to which position in the
|
||||||
@ -1180,6 +1168,9 @@ bool MYSQL_LOG::write(Log_event* event_info)
|
|||||||
|
|
||||||
if (file == &log_file) // we are writing to the real log (disk)
|
if (file == &log_file) // we are writing to the real log (disk)
|
||||||
{
|
{
|
||||||
|
if (flush_io_cache(file))
|
||||||
|
goto err;
|
||||||
|
|
||||||
if (opt_using_transactions && !my_b_tell(&thd->transaction.trans_log))
|
if (opt_using_transactions && !my_b_tell(&thd->transaction.trans_log))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -1189,8 +1180,8 @@ bool MYSQL_LOG::write(Log_event* event_info)
|
|||||||
handler if the log event type is appropriate.
|
handler if the log event type is appropriate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (event_info->get_type_code() == QUERY_EVENT
|
if (event_info->get_type_code() == QUERY_EVENT ||
|
||||||
|| event_info->get_type_code() == EXEC_LOAD_EVENT)
|
event_info->get_type_code() == EXEC_LOAD_EVENT)
|
||||||
{
|
{
|
||||||
error = ha_report_binlog_offset_and_commit(thd, log_file_name,
|
error = ha_report_binlog_offset_and_commit(thd, log_file_name,
|
||||||
file->pos_in_file);
|
file->pos_in_file);
|
||||||
@ -1200,6 +1191,7 @@ bool MYSQL_LOG::write(Log_event* event_info)
|
|||||||
/* we wrote to the real log, check automatic rotation */
|
/* we wrote to the real log, check automatic rotation */
|
||||||
should_rotate= (my_b_tell(file) >= (my_off_t) max_binlog_size);
|
should_rotate= (my_b_tell(file) >= (my_off_t) max_binlog_size);
|
||||||
}
|
}
|
||||||
|
error=0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
if (error)
|
if (error)
|
||||||
@ -1222,13 +1214,14 @@ err:
|
|||||||
|
|
||||||
pthread_mutex_unlock(&LOCK_log);
|
pthread_mutex_unlock(&LOCK_log);
|
||||||
|
|
||||||
/* Flush the transactional handler log file now that we have released
|
/*
|
||||||
LOCK_log; the flush is placed here to eliminate the bottleneck on the
|
Flush the transactional handler log file now that we have released
|
||||||
group commit */
|
LOCK_log; the flush is placed here to eliminate the bottleneck on the
|
||||||
|
group commit
|
||||||
|
*/
|
||||||
|
|
||||||
if (called_handler_commit) {
|
if (called_handler_commit)
|
||||||
ha_commit_complete(thd);
|
ha_commit_complete(thd);
|
||||||
}
|
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user