mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Proper handling of ORDER BY table.column in UNION's
This commit is contained in:
@ -264,4 +264,5 @@
|
|||||||
#define ER_ILLEGAL_REFERENCE 1245
|
#define ER_ILLEGAL_REFERENCE 1245
|
||||||
#define ER_DERIVED_MUST_HAVE_ALIAS 1246
|
#define ER_DERIVED_MUST_HAVE_ALIAS 1246
|
||||||
#define ER_SELECT_REDUCED 1247
|
#define ER_SELECT_REDUCED 1247
|
||||||
#define ER_ERROR_MESSAGES 248
|
#define ER_TABLENAME_NOT_ALLOWED_HERE 1248
|
||||||
|
#define ER_ERROR_MESSAGES 249
|
||||||
|
@ -85,10 +85,7 @@ a b
|
|||||||
2 b
|
2 b
|
||||||
1 a
|
1 a
|
||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b;
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b;
|
||||||
a b
|
Table 't1' from one of SELECT's can not be used in order clause
|
||||||
1 a
|
|
||||||
2 b
|
|
||||||
3 c
|
|
||||||
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||||
|
@ -20,6 +20,7 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g
|
|||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 4;
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 4;
|
||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1);
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1);
|
||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
||||||
|
--error 1248
|
||||||
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b;
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b;
|
||||||
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
||||||
#(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
#(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
||||||
|
@ -535,12 +535,10 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
SELECT_LEX *last= 0;
|
SELECT_LEX *last= 0;
|
||||||
|
|
||||||
Item **refer= (Item **)not_found_item;
|
Item **refer= (Item **)not_found_item;
|
||||||
SELECT_LEX *cursel=(SELECT_LEX *) thd->lex.current_select;
|
|
||||||
// Prevent using outer fields in subselects, that is not supported now
|
// Prevent using outer fields in subselects, that is not supported now
|
||||||
|
SELECT_LEX *cursel=(SELECT_LEX *) thd->lex.current_select;
|
||||||
if (cursel->linkage != DERIVED_TABLE_TYPE)
|
if (cursel->linkage != DERIVED_TABLE_TYPE)
|
||||||
for (SELECT_LEX *sl= (cursel->get_master()->order_list.elements) ?
|
for (SELECT_LEX *sl=cursel->outer_select();
|
||||||
cursel->select_lex()
|
|
||||||
: cursel->outer_select();
|
|
||||||
sl;
|
sl;
|
||||||
sl= sl->outer_select())
|
sl= sl->outer_select())
|
||||||
{
|
{
|
||||||
@ -576,7 +574,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
if (r->check_cols(1) || r->fix_fields(thd, tables, ref))
|
if (r->check_cols(1) || r->fix_fields(thd, tables, ref))
|
||||||
return 1;
|
return 1;
|
||||||
r->depended_from= last;
|
r->depended_from= last;
|
||||||
thd->lex.current_select->mark_as_dependent(last);
|
cursel->mark_as_dependent(last);
|
||||||
thd->add_possible_loop(r);
|
thd->add_possible_loop(r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -258,3 +258,4 @@ v/*
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -252,3 +252,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -260,3 +260,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -247,5 +247,6 @@
|
|||||||
"Cyclic reference on subqueries",
|
"Cyclic reference on subqueries",
|
||||||
"Converting column '%s' from %s to %s",
|
"Converting column '%s' from %s to %s",
|
||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias",
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -254,3 +254,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -252,3 +252,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -251,3 +251,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -251,3 +251,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -251,3 +251,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -251,3 +251,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -253,3 +253,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -253,3 +253,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -252,3 +252,4 @@
|
|||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
"Select %u <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -245,3 +245,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -257,3 +257,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -250,3 +250,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -249,3 +249,4 @@
|
|||||||
"Reference '%-.64s' not supported (%s)",
|
"Reference '%-.64s' not supported (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was reduced during optimisation",
|
"Select %u was reduced during optimisation",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -254,3 +254,4 @@
|
|||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (%s)",
|
||||||
"Every derived table must have it's own alias"
|
"Every derived table must have it's own alias"
|
||||||
"Select %u was <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD>ii",
|
"Select %u was <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD>ii",
|
||||||
|
"Table '%-.64s' from one of SELECT's can not be used in %-.32s"
|
||||||
|
@ -1957,8 +1957,14 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
|||||||
table_name=buff;
|
table_name=buff;
|
||||||
}
|
}
|
||||||
if (report_error)
|
if (report_error)
|
||||||
my_printf_error(ER_UNKNOWN_TABLE, ER(ER_UNKNOWN_TABLE), MYF(0),
|
{
|
||||||
table_name, thd->where);
|
if (thd->lex.current_select->get_master()->order_list.elements)
|
||||||
|
my_printf_error(ER_TABLENAME_NOT_ALLOWED_HERE, ER(ER_TABLENAME_NOT_ALLOWED_HERE),
|
||||||
|
MYF(0), table_name, thd->where);
|
||||||
|
else
|
||||||
|
my_printf_error(ER_UNKNOWN_TABLE, ER(ER_UNKNOWN_TABLE), MYF(0),
|
||||||
|
table_name, thd->where);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return (Field*) not_found_field;
|
return (Field*) not_found_field;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user