mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Merge
This commit is contained in:
@@ -421,6 +421,11 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
b=? and a = (select ? from t1 where b = ? ) ' ;
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
|
||||
# Bug#8807
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
|
||||
######## correlated subquery
|
||||
# no parameter
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
|
||||
@@ -768,6 +768,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
@@ -768,6 +768,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
@@ -769,6 +769,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
@@ -811,6 +811,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
@@ -3820,6 +3824,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
@@ -768,6 +768,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
@@ -768,6 +768,10 @@ prepare stmt1 from ' select a, ?, b FROM t1 outer_table where
|
||||
execute stmt1 using @arg00, @arg01, @arg02, @arg03 ;
|
||||
a ? b
|
||||
2 1 two
|
||||
prepare stmt1 from 'select c4 FROM t9 where
|
||||
c13 = (select MAX(b) from t1 where a = ?) and c22 = ? ' ;
|
||||
execute stmt1 using @arg01, @arg02;
|
||||
c4
|
||||
prepare stmt1 from ' select a, b FROM t1 outer_table where
|
||||
a = (select a from t1 where b = outer_table.b ) order by a ';
|
||||
execute stmt1 ;
|
||||
|
||||
28
sql/item.cc
28
sql/item.cc
@@ -2094,6 +2094,34 @@ bool Item_param::convert_str_value(THD *thd)
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool Item_param::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 0);
|
||||
SELECT_LEX *cursel= (SELECT_LEX *) thd->lex->current_select;
|
||||
|
||||
/*
|
||||
Parameters in a subselect should mark the subselect as not constant
|
||||
during prepare
|
||||
*/
|
||||
if (state == NO_VALUE)
|
||||
{
|
||||
/*
|
||||
SELECT_LEX_UNIT::item set only for subqueries, so test of it presence
|
||||
can be barrier to stop before derived table SELECT or very outer SELECT
|
||||
*/
|
||||
for(;
|
||||
cursel->master_unit()->item;
|
||||
cursel= cursel->outer_select())
|
||||
{
|
||||
Item_subselect *subselect_item= cursel->master_unit()->item;
|
||||
subselect_item->used_tables_cache|= OUTER_REF_TABLE_BIT;
|
||||
subselect_item->const_item_cache= 0;
|
||||
}
|
||||
}
|
||||
fixed= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void Item_param::print(String *str)
|
||||
{
|
||||
|
||||
@@ -882,6 +882,7 @@ public:
|
||||
bool get_time(TIME *tm);
|
||||
bool get_date(TIME *tm, uint fuzzydate);
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
bool fix_fields(THD *, struct st_table_list *, Item **);
|
||||
|
||||
void set_null();
|
||||
void set_int(longlong i, uint32 max_length_arg);
|
||||
|
||||
@@ -120,6 +120,7 @@ public:
|
||||
friend class Item_in_optimizer;
|
||||
friend bool Item_field::fix_fields(THD *, TABLE_LIST *, Item **);
|
||||
friend bool Item_ref::fix_fields(THD *, TABLE_LIST *, Item **);
|
||||
friend bool Item_param::fix_fields(THD *, TABLE_LIST *, Item **);
|
||||
};
|
||||
|
||||
/* single value subselect */
|
||||
|
||||
Reference in New Issue
Block a user