Commit 9ae42419 authored by unknown's avatar unknown

Merge acurtis@bk-internal.mysql.com:/home/bk/mysql-5.0

into xiphis.org:/usr/home/antony/work2/p3-bug7241.6

parents 424e4ee1 e35bd059
...@@ -47,3 +47,13 @@ unlock tables; ...@@ -47,3 +47,13 @@ unlock tables;
lock tables t1 write, t1 as t1_alias read; lock tables t1 write, t1 as t1_alias read;
insert into t1 select index1,nr from t1 as t1_alias; insert into t1 select index1,nr from t1 as t1_alias;
drop table t1,t2; drop table t1,t2;
create table t1 ( a int(11) not null auto_increment, primary key(a));
create table t2 ( a int(11) not null auto_increment, primary key(a));
lock tables t1 write, t2 read;
delete from t1 using t1,t2 where t1.a=t2.a;
delete t1 from t1,t2 where t1.a=t2.a;
delete from t2 using t1,t2 where t1.a=t2.a;
ERROR HY000: Table 't2' was locked with a READ lock and can't be updated
delete t2 from t1,t2 where t1.a=t2.a;
ERROR HY000: Table 't2' was locked with a READ lock and can't be updated
drop table t1,t2;
...@@ -68,14 +68,18 @@ master-bin.000002 260 Query 1 346 use `test`; create table t1 (n int) ...@@ -68,14 +68,18 @@ master-bin.000002 260 Query 1 346 use `test`; create table t1 (n int)
master-bin.000002 346 Query 1 434 use `test`; insert into t1 values (1) master-bin.000002 346 Query 1 434 use `test`; insert into t1 values (1)
master-bin.000002 434 Query 1 510 use `test`; drop table t1 master-bin.000002 434 Query 1 510 use `test`; drop table t1
show binary logs; show binary logs;
Log_name Log_name File_size
master-bin.000001 master-bin.000001 0
master-bin.000002 master-bin.000002 510
Warnings:
Error 29 File 'master-bin.000001' not found (Errcode: 2)
start slave; start slave;
show binary logs; show binary logs;
Log_name Log_name File_size
slave-bin.000001 slave-bin.000001 0
slave-bin.000002 slave-bin.000002 348
Warnings:
Error 29 File 'slave-bin.000001' not found (Errcode: 2)
show binlog events in 'slave-bin.000001' from 4; show binlog events in 'slave-bin.000001' from 4;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 4 Format_desc 2 98 Server ver: VERSION, Binlog ver: 4 slave-bin.000001 4 Format_desc 2 98 Server ver: VERSION, Binlog ver: 4
......
...@@ -26,10 +26,13 @@ create table t2(m int not null auto_increment primary key); ...@@ -26,10 +26,13 @@ create table t2(m int not null auto_increment primary key);
insert into t2 values (34),(67),(123); insert into t2 values (34),(67),(123);
flush logs; flush logs;
show binary logs; show binary logs;
Log_name Log_name File_size
master-bin.000001 master-bin.000001 0
master-bin.000002 master-bin.000002 0
master-bin.000003 master-bin.000003 98
Warnings:
Error 29 File 'master-bin.000001' not found (Errcode: 2)
Error 29 File 'master-bin.000002' not found (Errcode: 2)
create table t3 select * from temp_table; create table t3 select * from temp_table;
select * from t3; select * from t3;
a a
...@@ -42,18 +45,22 @@ set global sql_slave_skip_counter=1; ...@@ -42,18 +45,22 @@ set global sql_slave_skip_counter=1;
start slave; start slave;
purge master logs to 'master-bin.000002'; purge master logs to 'master-bin.000002';
show master logs; show master logs;
Log_name Log_name File_size
master-bin.000002 master-bin.000002 0
master-bin.000003 master-bin.000003 407
Warnings:
Error 29 File 'master-bin.000002' not found (Errcode: 2)
purge binary logs to 'master-bin.000002'; purge binary logs to 'master-bin.000002';
show binary logs; show binary logs;
Log_name Log_name File_size
master-bin.000002 master-bin.000002 0
master-bin.000003 master-bin.000003 407
Warnings:
Error 29 File 'master-bin.000002' not found (Errcode: 2)
purge master logs before now(); purge master logs before now();
show binary logs; show binary logs;
Log_name Log_name File_size
master-bin.000003 master-bin.000003 407
insert into t2 values (65); insert into t2 values (65);
show slave status; show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
...@@ -73,10 +80,13 @@ count(*) ...@@ -73,10 +80,13 @@ count(*)
100 100
create table t4 select * from temp_table; create table t4 select * from temp_table;
show binary logs; show binary logs;
Log_name Log_name File_size
master-bin.000003 master-bin.000003 0
master-bin.000004 master-bin.000004 0
master-bin.000005 master-bin.000005 2032
Warnings:
Error 29 File 'master-bin.000003' not found (Errcode: 2)
Error 29 File 'master-bin.000004' not found (Errcode: 2)
show master status; show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000005 2032 master-bin.000005 2032
......
...@@ -59,3 +59,17 @@ unlock tables; ...@@ -59,3 +59,17 @@ unlock tables;
lock tables t1 write, t1 as t1_alias read; lock tables t1 write, t1 as t1_alias read;
insert into t1 select index1,nr from t1 as t1_alias; insert into t1 select index1,nr from t1 as t1_alias;
drop table t1,t2; drop table t1,t2;
#
# Bug7241 - Invalid response when DELETE .. USING and LOCK TABLES used.
#
create table t1 ( a int(11) not null auto_increment, primary key(a));
create table t2 ( a int(11) not null auto_increment, primary key(a));
lock tables t1 write, t2 read;
delete from t1 using t1,t2 where t1.a=t2.a;
delete t1 from t1,t2 where t1.a=t2.a;
--error 1099
delete from t2 using t1,t2 where t1.a=t2.a;
--error 1099
delete t2 from t1,t2 where t1.a=t2.a;
drop table t1,t2;
...@@ -2326,6 +2326,10 @@ mysql_execute_command(THD *thd) ...@@ -2326,6 +2326,10 @@ mysql_execute_command(THD *thd)
} }
#endif /* !HAVE_REPLICATION */ #endif /* !HAVE_REPLICATION */
/* /*
When option readonly is set deny operations which change tables. When option readonly is set deny operations which change tables.
Except for the replication thread and the 'super' users. Except for the replication thread and the 'super' users.
...@@ -5198,6 +5202,7 @@ void mysql_init_multi_delete(LEX *lex) ...@@ -5198,6 +5202,7 @@ void mysql_init_multi_delete(LEX *lex)
lex->select_lex.select_limit= lex->unit.select_limit_cnt= lex->select_lex.select_limit= lex->unit.select_limit_cnt=
HA_POS_ERROR; HA_POS_ERROR;
lex->select_lex.table_list.save_and_clear(&lex->auxilliary_table_list); lex->select_lex.table_list.save_and_clear(&lex->auxilliary_table_list);
lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ;
lex->query_tables= 0; lex->query_tables= 0;
lex->query_tables_last= &lex->query_tables; lex->query_tables_last= &lex->query_tables;
} }
...@@ -6776,6 +6781,14 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count) ...@@ -6776,6 +6781,14 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count)
} }
walk->lock_type= target_tbl->lock_type; walk->lock_type= target_tbl->lock_type;
target_tbl->correspondent_table= walk; // Remember corresponding table target_tbl->correspondent_table= walk; // Remember corresponding table
/* in case of subselects, we need to set lock_type in
* corresponding table in list of all tables */
if (walk->correspondent_table)
{
target_tbl->correspondent_table= walk->correspondent_table;
walk->correspondent_table->lock_type= walk->lock_type;
}
} }
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
......
...@@ -1478,6 +1478,11 @@ bool show_binlog_info(THD* thd) ...@@ -1478,6 +1478,11 @@ bool show_binlog_info(THD* thd)
bool show_binlogs(THD* thd) bool show_binlogs(THD* thd)
{ {
IO_CACHE *index_file; IO_CACHE *index_file;
LOG_INFO cur;
IO_CACHE log;
File file;
const char *errmsg= 0;
MY_STAT stat_area;
char fname[FN_REFLEN]; char fname[FN_REFLEN];
List<Item> field_list; List<Item> field_list;
uint length; uint length;
...@@ -1491,21 +1496,43 @@ bool show_binlogs(THD* thd) ...@@ -1491,21 +1496,43 @@ bool show_binlogs(THD* thd)
} }
field_list.push_back(new Item_empty_string("Log_name", 255)); field_list.push_back(new Item_empty_string("Log_name", 255));
field_list.push_back(new Item_return_int("File_size", 20,
MYSQL_TYPE_LONGLONG));
if (protocol->send_fields(&field_list, if (protocol->send_fields(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF)) Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
mysql_bin_log.lock_index(); mysql_bin_log.lock_index();
index_file=mysql_bin_log.get_index_file(); index_file=mysql_bin_log.get_index_file();
mysql_bin_log.get_current_log(&cur);
int cur_dir_len = dirname_length(cur.log_file_name);
reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0); reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0);
/* The file ends with EOF or empty line */ /* The file ends with EOF or empty line */
while ((length=my_b_gets(index_file, fname, sizeof(fname))) > 1) while ((length=my_b_gets(index_file, fname, sizeof(fname))) > 1)
{ {
fname[--length] = '\0'; /* remove the newline */
protocol->prepare_for_resend(); protocol->prepare_for_resend();
int dir_len = dirname_length(fname); int dir_len = dirname_length(fname);
/* The -1 is for removing newline from fname */ protocol->store(fname + dir_len, length-dir_len, &my_charset_bin);
protocol->store(fname + dir_len, length-1-dir_len, &my_charset_bin); if(!(strncmp(fname+dir_len, cur.log_file_name+cur_dir_len, length-dir_len)))
{
/* this is the active log, use the active position */
protocol->store((ulonglong) cur.pos);
} else {
/* this is an old log, open it and find the size */
if ((file=open_binlog(&log, fname+dir_len, &errmsg)) >= 0)
{
protocol->store((ulonglong) my_b_filelength(&log));
end_io_cache(&log);
my_close(file, MYF(0));
} else {
/* the file wasn't openable, but 0 is an invalid value anyway */
protocol->store((ulonglong) 0);
}
}
if (protocol->write()) if (protocol->write())
goto err; goto err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment