mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Merge abelkin@work.mysql.com:/home/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/mysql-4.1
This commit is contained in:
commit
809af00b06
6 changed files with 44 additions and 12 deletions
|
@ -31,6 +31,9 @@
|
|||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/* need by my_vsnprintf */
|
||||
#include <stdarg.h>
|
||||
|
||||
/* Correct some things for UNIXWARE7 */
|
||||
#ifdef HAVE_UNIXWARE7_THREADS
|
||||
#undef HAVE_STRINGS_H
|
||||
|
|
|
@ -85,7 +85,7 @@ a b
|
|||
2 b
|
||||
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;
|
||||
Table 't1' from one of SELECT's can not be used in order clause
|
||||
Table 't1' from one of SELECT's can not be used in global ORDER clause
|
||||
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
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
|
|
|
@ -1749,12 +1749,8 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
|||
}
|
||||
if (report_error)
|
||||
{
|
||||
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);
|
||||
my_printf_error(ER_UNKNOWN_TABLE, ER(ER_UNKNOWN_TABLE), MYF(0),
|
||||
table_name, thd->where);
|
||||
}
|
||||
else
|
||||
return (Field*) not_found_field;
|
||||
|
|
|
@ -943,7 +943,7 @@ int yylex(void *arg, void *yythd)
|
|||
|
||||
void st_select_lex_node::init_query()
|
||||
{
|
||||
dependent= 0;
|
||||
no_table_names_allowed= dependent= 0;
|
||||
}
|
||||
|
||||
void st_select_lex_node::init_select()
|
||||
|
|
|
@ -212,6 +212,7 @@ public:
|
|||
bool with_sum_func;
|
||||
bool create_refs;
|
||||
bool dependent; /* dependent from outer select subselect */
|
||||
bool no_table_names_allowed; /* used for global order by */
|
||||
|
||||
static void *operator new(size_t size)
|
||||
{
|
||||
|
|
|
@ -3740,17 +3740,41 @@ simple_ident:
|
|||
}
|
||||
| ident '.' ident
|
||||
{
|
||||
SELECT_LEX_NODE *sel=Select;
|
||||
THD *thd= YYTHD;
|
||||
LEX *lex= &thd->lex;
|
||||
SELECT_LEX_NODE *sel= lex->current_select;
|
||||
if (sel->no_table_names_allowed)
|
||||
{
|
||||
my_printf_error(ER_TABLENAME_NOT_ALLOWED_HERE,
|
||||
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
|
||||
MYF(0), $1.str, thd->where);
|
||||
}
|
||||
$$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field(NullS,$1.str,$3.str) : (Item*) new Item_ref(NullS,$1.str,$3.str);
|
||||
}
|
||||
| '.' ident '.' ident
|
||||
{
|
||||
SELECT_LEX_NODE *sel=Select;
|
||||
THD *thd= YYTHD;
|
||||
LEX *lex= &thd->lex;
|
||||
SELECT_LEX_NODE *sel= lex->current_select;
|
||||
if (sel->no_table_names_allowed)
|
||||
{
|
||||
my_printf_error(ER_TABLENAME_NOT_ALLOWED_HERE,
|
||||
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
|
||||
MYF(0), $2.str, thd->where);
|
||||
}
|
||||
$$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field(NullS,$2.str,$4.str) : (Item*) new Item_ref(NullS,$2.str,$4.str);
|
||||
}
|
||||
| ident '.' ident '.' ident
|
||||
{
|
||||
SELECT_LEX_NODE *sel=Select;
|
||||
THD *thd= YYTHD;
|
||||
LEX *lex= &thd->lex;
|
||||
SELECT_LEX_NODE *sel= lex->current_select;
|
||||
if (sel->no_table_names_allowed)
|
||||
{
|
||||
my_printf_error(ER_TABLENAME_NOT_ALLOWED_HERE,
|
||||
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
|
||||
MYF(0), $3.str, thd->where);
|
||||
}
|
||||
$$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
|
||||
};
|
||||
|
||||
|
@ -4535,7 +4559,8 @@ optional_order_or_limit:
|
|||
/* Empty */ {}
|
||||
|
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
THD *thd= YYTHD;
|
||||
LEX *lex= &thd->lex;
|
||||
if (!lex->current_select->linkage == GLOBAL_OPTIONS_TYPE)
|
||||
{
|
||||
send_error(lex->thd, ER_SYNTAX_ERROR);
|
||||
|
@ -4547,8 +4572,15 @@ optional_order_or_limit:
|
|||
lex->current_select= sel->master_unit();
|
||||
lex->current_select->select_limit=
|
||||
lex->thd->variables.select_limit;
|
||||
lex->current_select->no_table_names_allowed= 1;
|
||||
thd->where= "global ORDER clause";
|
||||
}
|
||||
order_or_limit
|
||||
{
|
||||
THD *thd= YYTHD;
|
||||
thd->lex.current_select->no_table_names_allowed= 0;
|
||||
thd->where= "";
|
||||
}
|
||||
;
|
||||
|
||||
order_or_limit:
|
||||
|
|
Loading…
Add table
Reference in a new issue