mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for BUG#5837 - attempt 3.
Call mark_as_null_row in join_read_const and join_read_system.
This commit is contained in:
@ -399,3 +399,9 @@ select * from t2;
|
|||||||
c2_id c2_p_id c2_note c2_active
|
c2_id c2_p_id c2_note c2_active
|
||||||
1 1 A Note 1
|
1 1 A Note 1
|
||||||
drop table t1, t2;
|
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;
|
||||||
|
@ -337,3 +337,12 @@ update t1 left join t2 on p_id = c2_p_id set c2_note = 'asdf-1' where p_id = 2;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
drop table t1, t2;
|
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;
|
||||||
|
|
||||||
|
@ -4951,7 +4951,10 @@ join_read_system(JOIN_TAB *tab)
|
|||||||
table->file->print_error(error,MYF(0));
|
table->file->print_error(error,MYF(0));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
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
|
empty_record(table); // Make empty record
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4981,7 +4984,10 @@ join_read_const(JOIN_TAB *tab)
|
|||||||
}
|
}
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
table->null_row=1;
|
if (tab->on_expr)
|
||||||
|
mark_as_null_row(tab->table);
|
||||||
|
else
|
||||||
|
table->null_row=1;
|
||||||
empty_record(table);
|
empty_record(table);
|
||||||
if (error != HA_ERR_KEY_NOT_FOUND)
|
if (error != HA_ERR_KEY_NOT_FOUND)
|
||||||
{
|
{
|
||||||
|
10
sql/table.h
10
sql/table.h
@ -89,8 +89,14 @@ struct st_table {
|
|||||||
int current_lock; /* Type of lock on table */
|
int current_lock; /* Type of lock on table */
|
||||||
enum tmp_table_type tmp_table;
|
enum tmp_table_type tmp_table;
|
||||||
my_bool copy_blobs; /* copy_blobs when storing */
|
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 force_index;
|
||||||
my_bool distinct,const_table,no_rows;
|
my_bool distinct,const_table,no_rows;
|
||||||
my_bool key_read, bulk_insert;
|
my_bool key_read, bulk_insert;
|
||||||
|
Reference in New Issue
Block a user