Commit fdd9c510 authored by unknown's avatar unknown

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1

into moonbone.local:/work/mysql-4.1-bug-11868
parents dc4e24ad eb944444
...@@ -240,3 +240,14 @@ update t1, t2 set t1.a = t2.a where t2.b = t1.b; ...@@ -240,3 +240,14 @@ update t1, t2 set t1.a = t2.a where t2.b = t1.b;
show warnings; show warnings;
Level Code Message Level Code Message
drop table t1, t2; drop table t1, t2;
create table t1(f1 int, f2 int);
create table t2(f3 int, f4 int);
create index idx on t2(f3);
insert into t1 values(1,0),(2,0);
insert into t2 values(1,1),(2,2);
UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1);
select * from t1;
f1 f2
1 1
2 2
drop table t1,t2;
...@@ -201,3 +201,16 @@ analyze table t1,t2; ...@@ -201,3 +201,16 @@ analyze table t1,t2;
update t1, t2 set t1.a = t2.a where t2.b = t1.b; update t1, t2 set t1.a = t2.a where t2.b = t1.b;
show warnings; show warnings;
drop table t1, t2; drop table t1, t2;
#
# Bug #11868 Update with subquery with ref built with a key from the updated
# table crashes server
#
create table t1(f1 int, f2 int);
create table t2(f3 int, f4 int);
create index idx on t2(f3);
insert into t1 values(1,0),(2,0);
insert into t2 values(1,1),(2,2);
UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1);
select * from t1;
drop table t1,t2;
...@@ -3555,7 +3555,12 @@ static void add_not_null_conds(JOIN *join) ...@@ -3555,7 +3555,12 @@ static void add_not_null_conds(JOIN *join)
DBUG_ASSERT(item->type() == Item::FIELD_ITEM); DBUG_ASSERT(item->type() == Item::FIELD_ITEM);
Item_field *not_null_item= (Item_field*)item; Item_field *not_null_item= (Item_field*)item;
JOIN_TAB *referred_tab= not_null_item->field->table->reginfo.join_tab; JOIN_TAB *referred_tab= not_null_item->field->table->reginfo.join_tab;
if (referred_tab->join != join) /*
For UPDATE queries such as:
UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1);
not_null_item is the t1.f1, but it's referred_tab is 0.
*/
if (!referred_tab || referred_tab->join != join)
continue; continue;
Item *notnull; Item *notnull;
if (!(notnull= new Item_func_isnotnull(not_null_item))) if (!(notnull= new Item_func_isnotnull(not_null_item)))
......
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