Commit 45f098bf authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

moved similar code to function

onversion with check
parent bb49de5f
...@@ -463,27 +463,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) ...@@ -463,27 +463,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
Mark all selects from resolved to 1 before select where was Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table) found table as depended (of select where was found table)
*/ */
for (SELECT_LEX_NODE *s= thd->lex.current_select; thd->lex.current_select->mark_as_dependent(last);
s && s != last;
s= s->outer_select())
{
if( !s->dependent)
{
// Select is depended of outer select
s->dependent= 1;
if (s->linkage != GLOBAL_OPTIONS_TYPE)
{
//s is st_select_lex*
s->master_unit()->dependent= 1;
//Tables will be reopened many times
for (TABLE_LIST *tbl= s->get_table_list();
tbl;
tbl= tbl->next)
tbl->shared= 1;
}
}
}
} }
} }
else if (!tmp) else if (!tmp)
...@@ -867,30 +847,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference) ...@@ -867,30 +847,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
else else
{ {
depended_from= last; depended_from= last;
/* thd->lex.current_select->mark_as_dependent(last);
Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table)
*/
for (SELECT_LEX_NODE *s= thd->lex.current_select;
s &&s != last;
s= s->outer_select())
if( !s->dependent )
{
// Select is depended of outer select
s->dependent= 1;
if (s->linkage != GLOBAL_OPTIONS_TYPE)
{
//s is st_select_lex*
s->master_unit()->dependent= 1;
//Tables will be reopened many times
for (TABLE_LIST *tbl=
s->get_table_list();
tbl;
tbl= tbl->next)
tbl->shared= 1;
}
}
} }
} }
else if (!ref) else if (!ref)
......
...@@ -943,7 +943,7 @@ bool Item_sum_count_distinct::fix_fields(THD *thd, TABLE_LIST *tables, ...@@ -943,7 +943,7 @@ bool Item_sum_count_distinct::fix_fields(THD *thd, TABLE_LIST *tables,
bool Item_sum_count_distinct::setup(THD *thd) bool Item_sum_count_distinct::setup(THD *thd)
{ {
List<Item> list; List<Item> list;
SELECT_LEX *select_lex= (SELECT_LEX *)current_lex->current_select; SELECT_LEX *select_lex= current_lex->current_select->select_lex();
if (select_lex->linkage == GLOBAL_OPTIONS_TYPE) if (select_lex->linkage == GLOBAL_OPTIONS_TYPE)
return 1; return 1;
......
...@@ -285,11 +285,7 @@ multi_delete::initialize_tables(JOIN *join) ...@@ -285,11 +285,7 @@ multi_delete::initialize_tables(JOIN *join)
table->file->ref_length, table->file->ref_length,
MEM_STRIP_BUF_SIZE); MEM_STRIP_BUF_SIZE);
} }
/* init_ftfuncs(thd, thd->lex.current_select->select_lex(), 1);
There are (SELECT_LEX*) pointer conversion here global union parameters
can't be used in multidelete
*/
init_ftfuncs(thd, (SELECT_LEX*)thd->lex.current_select, 1);
} }
......
...@@ -57,7 +57,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t, ...@@ -57,7 +57,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t,
{ {
if (cursor->derived) if (cursor->derived)
{ {
res=mysql_derived(thd, lex, (SELECT_LEX_UNIT *)cursor->derived, res= mysql_derived(thd, lex, (SELECT_LEX_UNIT *)cursor->derived,
cursor, 0); cursor, 0);
if (res) DBUG_RETURN(res); if (res) DBUG_RETURN(res);
} }
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "item_create.h" #include "item_create.h"
#include <m_ctype.h> #include <m_ctype.h>
#include <hash.h> #include <hash.h>
#include <assert.h>
LEX_STRING tmp_table_alias= {(char*) "tmp-table",8}; LEX_STRING tmp_table_alias= {(char*) "tmp-table",8};
...@@ -1043,6 +1044,13 @@ void st_select_lex_node::exclude() ...@@ -1043,6 +1044,13 @@ void st_select_lex_node::exclude()
*/ */
} }
st_select_lex* st_select_lex_node::select_lex()
{
DBUG_ENTER("st_select_lex_node::select_lex (never should be called)");
DBUG_ASSERT(1);
DBUG_RETURN(0);
}
bool st_select_lex_node::add_item_to_list(Item *item) bool st_select_lex_node::add_item_to_list(Item *item)
{ {
return 1; return 1;
...@@ -1053,7 +1061,6 @@ bool st_select_lex_node::add_group_to_list(Item *item, bool asc) ...@@ -1053,7 +1061,6 @@ bool st_select_lex_node::add_group_to_list(Item *item, bool asc)
return 1; return 1;
} }
//why compiler/linker do not allow make it inline?
bool st_select_lex_node::add_order_to_list(Item *item, bool asc) bool st_select_lex_node::add_order_to_list(Item *item, bool asc)
{ {
return add_to_list(order_list,item,asc); return add_to_list(order_list,item,asc);
...@@ -1064,6 +1071,47 @@ bool st_select_lex_node::add_ftfunc_to_list(Item_func_match *func) ...@@ -1064,6 +1071,47 @@ bool st_select_lex_node::add_ftfunc_to_list(Item_func_match *func)
return 1; return 1;
} }
/*
st_select_lex_node::mark_as_dependent mark all st_select_lex struct from
this to 'last' as dependent
SYNOPSIS
last - pointer to last st_select_lex struct, before wich all
st_select_lex have to be marked as dependent
NOTE
'last' should be reachable from this st_select_lex_node
*/
void st_select_lex_node::mark_as_dependent(SELECT_LEX *last)
{
/*
Mark all selects from resolved to 1 before select where was
found table as depended (of select where was found table)
*/
for (SELECT_LEX_NODE *s= this;
s &&s != last;
s= s->outer_select())
if( !s->dependent )
{
// Select is dependent of outer select
s->dependent= 1;
if (s->linkage != GLOBAL_OPTIONS_TYPE)
{
//s is st_select_lex*
s->master_unit()->dependent= 1;
//Tables will be reopened many times
for (TABLE_LIST *tbl=
s->get_table_list();
tbl;
tbl= tbl->next)
tbl->shared= 1;
}
}
}
bool st_select_lex_node::set_braces(bool value) { return 1; } bool st_select_lex_node::set_braces(bool value) { return 1; }
bool st_select_lex_node::inc_in_sum_expr() { return 1; } bool st_select_lex_node::inc_in_sum_expr() { return 1; }
uint st_select_lex_node::get_in_sum_expr() { return 0; } uint st_select_lex_node::get_in_sum_expr() { return 0; }
...@@ -1168,6 +1216,10 @@ st_select_lex* st_select_lex_unit::outer_select() ...@@ -1168,6 +1216,10 @@ st_select_lex* st_select_lex_unit::outer_select()
return (st_select_lex*) master; return (st_select_lex*) master;
} }
st_select_lex* st_select_lex::select_lex()
{
return this;
}
bool st_select_lex::add_item_to_list(Item *item) bool st_select_lex::add_item_to_list(Item *item)
{ {
......
...@@ -217,6 +217,7 @@ public: ...@@ -217,6 +217,7 @@ public:
void include_global(st_select_lex_node **plink); void include_global(st_select_lex_node **plink);
void exclude(); void exclude();
virtual st_select_lex* select_lex();
virtual bool add_item_to_list(Item *item); virtual bool add_item_to_list(Item *item);
bool add_order_to_list(Item *item, bool asc); bool add_order_to_list(Item *item, bool asc);
virtual bool add_group_to_list(Item *item, bool asc); virtual bool add_group_to_list(Item *item, bool asc);
...@@ -239,6 +240,7 @@ public: ...@@ -239,6 +240,7 @@ public:
List<String> *use_index= 0, List<String> *use_index= 0,
List<String> *ignore_index= 0); List<String> *ignore_index= 0);
void mark_as_dependent(st_select_lex *last);
private: private:
void fast_exclude(); void fast_exclude();
}; };
...@@ -346,6 +348,8 @@ public: ...@@ -346,6 +348,8 @@ public:
bool set_braces(bool value); bool set_braces(bool value);
bool inc_in_sum_expr(); bool inc_in_sum_expr();
uint get_in_sum_expr(); uint get_in_sum_expr();
st_select_lex* select_lex();
bool add_item_to_list(Item *item); bool add_item_to_list(Item *item);
bool add_group_to_list(Item *item, bool asc); bool add_group_to_list(Item *item, bool asc);
bool add_ftfunc_to_list(Item_func_match *func); bool add_ftfunc_to_list(Item_func_match *func);
......
...@@ -2927,7 +2927,7 @@ mysql_init_query(THD *thd) ...@@ -2927,7 +2927,7 @@ mysql_init_query(THD *thd)
void void
mysql_init_select(LEX *lex) mysql_init_select(LEX *lex)
{ {
SELECT_LEX *select_lex= (SELECT_LEX *)lex->current_select; SELECT_LEX *select_lex= lex->current_select->select_lex();
DBUG_ASSERT(select_lex->linkage != GLOBAL_OPTIONS_TYPE); DBUG_ASSERT(select_lex->linkage != GLOBAL_OPTIONS_TYPE);
select_lex->init_select(); select_lex->init_select();
select_lex->master_unit()->select_limit= select_lex->select_limit= select_lex->master_unit()->select_limit= select_lex->select_limit=
...@@ -2964,7 +2964,7 @@ mysql_new_select(LEX *lex, bool move_down) ...@@ -2964,7 +2964,7 @@ mysql_new_select(LEX *lex, bool move_down)
select_lex->master_unit()->global_parameters= select_lex; select_lex->master_unit()->global_parameters= select_lex;
DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE);
select_lex->include_global(((SELECT_LEX*)lex->current_select)-> select_lex->include_global(lex->current_select->select_lex()->
next_select_in_list_addr()); next_select_in_list_addr());
lex->current_select= select_lex; lex->current_select= select_lex;
return 0; return 0;
......
...@@ -508,14 +508,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u) ...@@ -508,14 +508,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
counter++; counter++;
} }
} }
/* init_ftfuncs(thd, thd->lex.current_select->select_lex(), 1);
There are (SELECT_LEX*) pointer conversion here global union parameters
can't be used in multiupdate
TODO: check is thd->lex.current_select == &thd->lex.select_lex?
*/
init_ftfuncs(thd, (SELECT_LEX*)thd->lex.current_select, 1);
error = 0; // Timestamps do not need to be restored, so far ... error = 0; // Timestamps do not need to be restored, so far ...
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -2215,11 +2215,7 @@ in_sum_expr: ...@@ -2215,11 +2215,7 @@ in_sum_expr:
} }
expr expr
{ {
/* Select->select_lex()->in_sum_expr--;
There are (SELECT_LEX *) pointer conversionis here, because
global union parameters checked in 'increment' above
*/
((SELECT_LEX *)Select)->in_sum_expr--;
$$=$2; $$=$2;
}; };
...@@ -2296,12 +2292,7 @@ join_table_list: ...@@ -2296,12 +2292,7 @@ join_table_list:
{ add_join_on($4,$6); $$=$4; } { add_join_on($4,$6); $$=$4; }
| join_table_list INNER_SYM JOIN_SYM join_table_list | join_table_list INNER_SYM JOIN_SYM join_table_list
{ {
/* SELECT_LEX *sel= Select->select_lex();
There are (SELECT_LEX *) pointer conversionis here and
following joins, because it is impossible FROM clause in
global union parameters
*/
SELECT_LEX *sel= (SELECT_LEX *)Select;
sel->db1=$1->db; sel->table1=$1->alias; sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$4->db; sel->table2=$4->alias; sel->db2=$4->db; sel->table2=$4->alias;
} }
...@@ -2311,7 +2302,7 @@ join_table_list: ...@@ -2311,7 +2302,7 @@ join_table_list:
{ add_join_on($5,$7); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; } { add_join_on($5,$7); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; }
| join_table_list LEFT opt_outer JOIN_SYM join_table_list | join_table_list LEFT opt_outer JOIN_SYM join_table_list
{ {
SELECT_LEX *sel= (SELECT_LEX *)Select; SELECT_LEX *sel= Select->select_lex();
sel->db1=$1->db; sel->table1=$1->alias; sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$5->db; sel->table2=$5->alias; sel->db2=$5->db; sel->table2=$5->alias;
} }
...@@ -2323,7 +2314,7 @@ join_table_list: ...@@ -2323,7 +2314,7 @@ join_table_list:
{ add_join_on($1,$7); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; } { add_join_on($1,$7); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
| join_table_list RIGHT opt_outer JOIN_SYM join_table_list | join_table_list RIGHT opt_outer JOIN_SYM join_table_list
{ {
SELECT_LEX *sel= (SELECT_LEX *)Select; SELECT_LEX *sel= Select->select_lex();
sel->db1=$1->db; sel->table1=$1->alias; sel->db1=$1->db; sel->table1=$1->alias;
sel->db2=$5->db; sel->table2=$5->alias; sel->db2=$5->db; sel->table2=$5->alias;
} }
...@@ -2341,7 +2332,7 @@ normal_join: ...@@ -2341,7 +2332,7 @@ normal_join:
join_table: join_table:
{ {
SELECT_LEX *sel= (SELECT_LEX *)Select; SELECT_LEX *sel= Select->select_lex();
sel->use_index_ptr=sel->ignore_index_ptr=0; sel->use_index_ptr=sel->ignore_index_ptr=0;
} }
table_ident opt_table_alias opt_key_definition table_ident opt_table_alias opt_key_definition
...@@ -2388,45 +2379,40 @@ opt_key_definition: ...@@ -2388,45 +2379,40 @@ opt_key_definition:
/* empty */ {} /* empty */ {}
| USE_SYM key_usage_list | USE_SYM key_usage_list
{ {
/* SELECT_LEX *sel= Select->select_lex();
There are (SELECT_LEX *) pointer conversionis here and
following key definitions, because
key definitions is impossible in union global parameters
*/
SELECT_LEX *sel= (SELECT_LEX*)Select;
sel->use_index= *$2; sel->use_index= *$2;
sel->use_index_ptr= &sel->use_index; sel->use_index_ptr= &sel->use_index;
} }
| IGNORE_SYM key_usage_list | IGNORE_SYM key_usage_list
{ {
SELECT_LEX *sel= (SELECT_LEX*)Select; SELECT_LEX *sel= Select->select_lex();
sel->ignore_index= *$2; sel->ignore_index= *$2;
sel->ignore_index_ptr= &sel->ignore_index; sel->ignore_index_ptr= &sel->ignore_index;
}; };
key_usage_list: key_usage_list:
key_or_index { ((SELECT_LEX *)Select)->interval_list.empty(); } key_or_index { Select->select_lex()->interval_list.empty(); }
'(' key_usage_list2 ')' '(' key_usage_list2 ')'
{ $$= &((SELECT_LEX *)Select)->interval_list; }; { $$= &Select->select_lex()->interval_list; };
key_usage_list2: key_usage_list2:
key_usage_list2 ',' ident key_usage_list2 ',' ident
{ ((SELECT_LEX *)Select)-> { Select->select_lex()->
interval_list.push_back(new String((const char*) $3.str, $3.length, interval_list.push_back(new String((const char*) $3.str, $3.length,
default_charset_info)); } default_charset_info)); }
| ident | ident
{ ((SELECT_LEX *)Select)-> { Select->select_lex()->
interval_list.push_back(new String((const char*) $1.str, $1.length, interval_list.push_back(new String((const char*) $1.str, $1.length,
default_charset_info)); } default_charset_info)); }
| PRIMARY_SYM | PRIMARY_SYM
{ ((SELECT_LEX *)Select)-> { Select->select_lex()->
interval_list.push_back(new String("PRIMARY", 7, interval_list.push_back(new String("PRIMARY", 7,
default_charset_info)); }; default_charset_info)); };
using_list: using_list:
ident ident
{ {
SELECT_LEX *sel= (SELECT_LEX *)Select; SELECT_LEX *sel= Select->select_lex();
if (!($$= new Item_func_eq(new Item_field(sel->db1, sel->table1, if (!($$= new Item_func_eq(new Item_field(sel->db1, sel->table1,
$1.str), $1.str),
new Item_field(sel->db2, sel->table2, new Item_field(sel->db2, sel->table2,
...@@ -2435,7 +2421,7 @@ using_list: ...@@ -2435,7 +2421,7 @@ using_list:
} }
| using_list ',' ident | using_list ',' ident
{ {
SELECT_LEX *sel= (SELECT_LEX *)Select; SELECT_LEX *sel= Select->select_lex();
if (!($$= new Item_cond_and(new Item_func_eq(new Item_field(sel->db1,sel->table1,$3.str), new Item_field(sel->db2,sel->table2,$3.str)), $1))) if (!($$= new Item_cond_and(new Item_func_eq(new Item_field(sel->db1,sel->table1,$3.str), new Item_field(sel->db2,sel->table2,$3.str)), $1)))
YYABORT; YYABORT;
}; };
...@@ -2467,22 +2453,14 @@ opt_table_alias: ...@@ -2467,22 +2453,14 @@ opt_table_alias:
where_clause: where_clause:
/* /* empty */ { Select->select_lex()->where= 0; }
There are (SELECT_LEX *) pointer conversionis here, because | WHERE expr { Select->select_lex()->where= $2; };
it is impossible where_clause in global union parameters
*/
/* empty */ { ((SELECT_LEX *)Select)->where= 0; }
| WHERE expr { ((SELECT_LEX *)Select)->where= $2; };
having_clause: having_clause:
/*
There are (SELECT_LEX *) pointer conversionis here, because
it is impossible having_clause in global union parameters
*/
/* empty */ /* empty */
| HAVING { ((SELECT_LEX *)Select)->create_refs= 1; } expr | HAVING { Select->select_lex()->create_refs= 1; } expr
{ {
SELECT_LEX *sel= (SELECT_LEX*)Select; SELECT_LEX *sel= Select->select_lex();
sel->having= $3; sel->create_refs=0; sel->having= $3; sel->create_refs=0;
}; };
...@@ -2517,7 +2495,7 @@ olap_opt: ...@@ -2517,7 +2495,7 @@ olap_opt:
"global union parameters"); "global union parameters");
YYABORT; YYABORT;
} }
((SELECT_LEX *)lex->current_select)->olap= CUBE_TYPE; lex->current_select->select_lex()->olap= CUBE_TYPE;
net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "CUBE"); net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "CUBE");
YYABORT; /* To be deleted in 4.1 */ YYABORT; /* To be deleted in 4.1 */
} }
...@@ -2531,7 +2509,7 @@ olap_opt: ...@@ -2531,7 +2509,7 @@ olap_opt:
"global union parameters"); "global union parameters");
YYABORT; YYABORT;
} }
((SELECT_LEX *)lex->current_select)->olap= ROLLUP_TYPE; lex->current_select->select_lex()->olap= ROLLUP_TYPE;
net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "ROLLUP"); net_printf(lex->thd, ER_NOT_SUPPORTED_YET, "ROLLUP");
YYABORT; /* To be deleted in 4.1 */ YYABORT; /* To be deleted in 4.1 */
} }
...@@ -2555,7 +2533,7 @@ order_clause: ...@@ -2555,7 +2533,7 @@ order_clause:
YYABORT; YYABORT;
} }
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE && if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select)->olap != lex->current_select->select_lex()->olap !=
UNSPECIFIED_OLAP_TYPE) UNSPECIFIED_OLAP_TYPE)
{ {
net_printf(lex->thd, ER_WRONG_USAGE, net_printf(lex->thd, ER_WRONG_USAGE,
...@@ -2583,7 +2561,7 @@ limit_clause: ...@@ -2583,7 +2561,7 @@ limit_clause:
{ {
LEX *lex= Lex; LEX *lex= Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE && if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select)->olap != lex->current_select->select_lex()->olap !=
UNSPECIFIED_OLAP_TYPE) UNSPECIFIED_OLAP_TYPE)
{ {
net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP", net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP",
...@@ -2598,7 +2576,7 @@ limit_clause: ...@@ -2598,7 +2576,7 @@ limit_clause:
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE && if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
((SELECT_LEX*)lex->current_select)->olap != lex->current_select->select_lex()->olap !=
UNSPECIFIED_OLAP_TYPE) UNSPECIFIED_OLAP_TYPE)
{ {
net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP", net_printf(lex->thd, ER_WRONG_USAGE, "CUBE/ROLLUP",
...@@ -4005,12 +3983,7 @@ opt_table: ...@@ -4005,12 +3983,7 @@ opt_table:
'*' '*'
{ {
LEX *lex= Lex; LEX *lex= Lex;
/* lex->current_select->select_lex()->db= lex->thd->db;
There are (SELECT_LEX *) pointer conversionis here and following
opt_table, because it is impossible GRANT clause in global
union parameters
*/
((SELECT_LEX *)lex->current_select)->db= lex->thd->db;
if (lex->grant == GLOBAL_ACLS) if (lex->grant == GLOBAL_ACLS)
lex->grant = DB_ACLS & ~GRANT_ACL; lex->grant = DB_ACLS & ~GRANT_ACL;
else if (lex->columns.elements) else if (lex->columns.elements)
...@@ -4022,7 +3995,7 @@ opt_table: ...@@ -4022,7 +3995,7 @@ opt_table:
| ident '.' '*' | ident '.' '*'
{ {
LEX *lex= Lex; LEX *lex= Lex;
((SELECT_LEX *)lex->current_select)->db = $1.str; lex->current_select->select_lex()->db = $1.str;
if (lex->grant == GLOBAL_ACLS) if (lex->grant == GLOBAL_ACLS)
lex->grant = DB_ACLS & ~GRANT_ACL; lex->grant = DB_ACLS & ~GRANT_ACL;
else if (lex->columns.elements) else if (lex->columns.elements)
...@@ -4034,7 +4007,7 @@ opt_table: ...@@ -4034,7 +4007,7 @@ opt_table:
| '*' '.' '*' | '*' '.' '*'
{ {
LEX *lex= Lex; LEX *lex= Lex;
((SELECT_LEX *)lex->current_select)->db = NULL; lex->current_select->select_lex()->db = NULL;
if (lex->grant == GLOBAL_ACLS) if (lex->grant == GLOBAL_ACLS)
lex->grant= GLOBAL_ACLS & ~GRANT_ACL; lex->grant= GLOBAL_ACLS & ~GRANT_ACL;
else if (lex->columns.elements) else if (lex->columns.elements)
...@@ -4227,7 +4200,7 @@ optional_order_or_limit: ...@@ -4227,7 +4200,7 @@ optional_order_or_limit:
send_error(lex->thd, ER_SYNTAX_ERROR); send_error(lex->thd, ER_SYNTAX_ERROR);
YYABORT; YYABORT;
} }
SELECT_LEX *sel= (SELECT_LEX *)lex->current_select; SELECT_LEX *sel= lex->current_select->select_lex();
sel->master_unit()->global_parameters= sel->master_unit()->global_parameters=
sel->master_unit(); sel->master_unit();
lex->current_select= sel->master_unit(); lex->current_select= sel->master_unit();
......
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