Commit bc953966 authored by kaa@mbp's avatar kaa@mbp

Merge mbp.:/Users/kaa/src/opt/bug33389/my50-bug25162

into  mbp.:/Users/kaa/src/opt/bug33389/my51-bug25162
parents 947529ac 97c105cc
...@@ -3613,6 +3613,22 @@ ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default val ...@@ -3613,6 +3613,22 @@ ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default val
set @@sql_mode=@old_mode; set @@sql_mode=@old_mode;
drop view v1; drop view v1;
drop table t1; drop table t1;
create table t1 (a int, key(a));
create table t2 (c int);
create view v1 as select a b from t1;
create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a);
insert into t1 values (1), (1);
insert into t2 values (1), (1);
prepare stmt from "select * from v2 where a = 1";
execute stmt;
a
1
1
1
1
drop view v1, v2;
drop table t1, t2;
End of 5.0 tests. End of 5.0 tests.
DROP DATABASE IF EXISTS `d-1`; DROP DATABASE IF EXISTS `d-1`;
CREATE DATABASE `d-1`; CREATE DATABASE `d-1`;
......
...@@ -3468,6 +3468,27 @@ set @@sql_mode=@old_mode; ...@@ -3468,6 +3468,27 @@ set @@sql_mode=@old_mode;
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# Bug #33389: Selecting from a view into a table from within SP or trigger
# crashes server
#
create table t1 (a int, key(a));
create table t2 (c int);
create view v1 as select a b from t1;
create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a);
insert into t1 values (1), (1);
insert into t2 values (1), (1);
prepare stmt from "select * from v2 where a = 1";
execute stmt;
drop view v1, v2;
drop table t1, t2;
--echo End of 5.0 tests. --echo End of 5.0 tests.
# #
...@@ -3541,3 +3562,4 @@ DROP TABLE t1; ...@@ -3541,3 +3562,4 @@ DROP TABLE t1;
--echo --echo
--echo End of 5.1 tests. --echo End of 5.1 tests.
...@@ -3947,6 +3947,18 @@ bool Item_field::fix_fields(THD *thd, Item **reference) ...@@ -3947,6 +3947,18 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
else if (!from_field) else if (!from_field)
goto error; goto error;
if (!outer_fixed && cached_table && cached_table->select_lex &&
context->select_lex &&
cached_table->select_lex != context->select_lex)
{
int ret;
if ((ret= fix_outer_field(thd, &from_field, reference)) < 0)
goto error;
if (!ret)
return FALSE;
outer_fixed= 1;
}
/* /*
if it is not expression from merged VIEW we will set this field. if it is not expression from merged VIEW we will set this field.
...@@ -3962,18 +3974,6 @@ bool Item_field::fix_fields(THD *thd, Item **reference) ...@@ -3962,18 +3974,6 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
if (from_field == view_ref_found) if (from_field == view_ref_found)
return FALSE; return FALSE;
if (!outer_fixed && cached_table && cached_table->select_lex &&
context->select_lex &&
cached_table->select_lex != context->select_lex)
{
int ret;
if ((ret= fix_outer_field(thd, &from_field, reference)) < 0)
goto error;
if (!ret)
return FALSE;
outer_fixed= 1;
}
set_field(from_field); set_field(from_field);
if (thd->lex->in_sum_func && if (thd->lex->in_sum_func &&
thd->lex->in_sum_func->nest_level == thd->lex->in_sum_func->nest_level ==
......
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