mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Fix for BUG#5837 merged from 4.0
This commit is contained in:
commit
aee9340493
4 changed files with 31 additions and 4 deletions
|
@ -464,3 +464,9 @@ ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
|||
delete t1 from t1,t2 where t1.col1 < (select max(col1) from t1) and t1.col1 = t2.col1;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
drop table t1,t2;
|
||||
drop table if exists t2, t1;
|
||||
create table t1(aclid bigint not null primary key, status tinyint(1) not null ) type = innodb;
|
||||
create table t2(refid bigint not null primary key, aclid bigint, index idx_acl(aclid) )type = innodb;
|
||||
insert into t2 values(1,null);
|
||||
delete t2, t1 from t2 as a left join t1 as b on (a.aclid=b.aclid) where a.refid='1';
|
||||
drop table t1, t2;
|
||||
|
|
|
@ -431,3 +431,12 @@ update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
|||
-- error 1093
|
||||
delete t1 from t1,t2 where t1.col1 < (select max(col1) from t1) and t1.col1 = t2.col1;
|
||||
drop table t1,t2;
|
||||
|
||||
# Test for BUG#5837 - delete with outer join and const tables
|
||||
drop table if exists t2, t1;
|
||||
create table t1(aclid bigint not null primary key, status tinyint(1) not null ) type = innodb;
|
||||
create table t2(refid bigint not null primary key, aclid bigint, index idx_acl(aclid) )type = innodb;
|
||||
insert into t2 values(1,null);
|
||||
delete t2, t1 from t2 as a left join t1 as b on (a.aclid=b.aclid) where a.refid='1';
|
||||
drop table t1, t2;
|
||||
|
||||
|
|
|
@ -6005,7 +6005,10 @@ join_read_system(JOIN_TAB *tab)
|
|||
{
|
||||
if (error != HA_ERR_END_OF_FILE)
|
||||
return report_error(table, error);
|
||||
table->null_row=1; // This is ok.
|
||||
if (tab->on_expr)
|
||||
mark_as_null_row(tab->table);
|
||||
else
|
||||
table->null_row=1; // Why do this for inner join?
|
||||
empty_record(table); // Make empty record
|
||||
return -1;
|
||||
}
|
||||
|
@ -6035,7 +6038,10 @@ join_read_const(JOIN_TAB *tab)
|
|||
}
|
||||
if (error)
|
||||
{
|
||||
table->null_row=1;
|
||||
if (tab->on_expr)
|
||||
mark_as_null_row(tab->table);
|
||||
else
|
||||
table->null_row=1;
|
||||
empty_record(table);
|
||||
if (error != HA_ERR_KEY_NOT_FOUND)
|
||||
return report_error(table, error);
|
||||
|
|
10
sql/table.h
10
sql/table.h
|
@ -131,8 +131,14 @@ struct st_table {
|
|||
int current_lock; /* Type of lock on table */
|
||||
enum tmp_table_type tmp_table;
|
||||
my_bool copy_blobs; /* copy_blobs when storing */
|
||||
my_bool null_row; /* All columns are null */
|
||||
my_bool maybe_null,outer_join; /* Used with OUTER JOIN */
|
||||
/*
|
||||
Used in outer joins: if true, all columns are considered to have NULL
|
||||
values, including columns declared as "not null".
|
||||
*/
|
||||
my_bool null_row;
|
||||
/* 0 or JOIN_TYPE_{LEFT|RIGHT}, same as TABLE_LIST::outer_join */
|
||||
my_bool outer_join;
|
||||
my_bool maybe_null; /* true if (outer_join != 0) */
|
||||
my_bool force_index;
|
||||
my_bool distinct,const_table,no_rows;
|
||||
my_bool key_read;
|
||||
|
|
Loading…
Reference in a new issue