mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Merge mbp.:/Users/kaa/src/opt/bug33389/my50-bug25162
into mbp.:/Users/kaa/src/opt/bug33389/my51-bug25162
This commit is contained in:
commit
bc953966c4
3 changed files with 50 additions and 12 deletions
|
@ -3613,6 +3613,22 @@ ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default val
|
|||
set @@sql_mode=@old_mode;
|
||||
drop view v1;
|
||||
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.
|
||||
DROP DATABASE IF EXISTS `d-1`;
|
||||
CREATE DATABASE `d-1`;
|
||||
|
|
|
@ -3468,6 +3468,27 @@ set @@sql_mode=@old_mode;
|
|||
drop view v1;
|
||||
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.
|
||||
|
||||
#
|
||||
|
@ -3541,3 +3562,4 @@ DROP TABLE t1;
|
|||
--echo
|
||||
|
||||
--echo End of 5.1 tests.
|
||||
|
||||
|
|
24
sql/item.cc
24
sql/item.cc
|
@ -3947,6 +3947,18 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||
else if (!from_field)
|
||||
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.
|
||||
|
||||
|
@ -3962,18 +3974,6 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||
if (from_field == view_ref_found)
|
||||
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);
|
||||
if (thd->lex->in_sum_func &&
|
||||
thd->lex->in_sum_func->nest_level ==
|
||||
|
|
Loading…
Reference in a new issue