do not register changes of stack variable
This commit is contained in:
parent
6201504db9
commit
2941da3971
11
sql/item.cc
11
sql/item.cc
@ -2837,7 +2837,8 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
||||
reference,
|
||||
IGNORE_EXCEPT_NON_UNIQUE,
|
||||
!any_privileges &&
|
||||
context->check_privileges)) ==
|
||||
context->check_privileges,
|
||||
TRUE)) ==
|
||||
not_found_field)
|
||||
{
|
||||
/*
|
||||
@ -2880,7 +2881,8 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
||||
reference,
|
||||
IGNORE_EXCEPT_NON_UNIQUE,
|
||||
outer_context->
|
||||
check_privileges)) !=
|
||||
check_privileges,
|
||||
TRUE)) !=
|
||||
not_found_field)
|
||||
{
|
||||
if (from_field)
|
||||
@ -2953,7 +2955,7 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
||||
find_field_in_tables(thd, this, context->table_list,
|
||||
reference, REPORT_ALL_ERRORS,
|
||||
!any_privileges &&
|
||||
context->check_privileges);
|
||||
context->check_privileges, TRUE);
|
||||
}
|
||||
goto error;
|
||||
}
|
||||
@ -4102,7 +4104,8 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
|
||||
outer_context->table_list,
|
||||
reference,
|
||||
IGNORE_EXCEPT_NON_UNIQUE,
|
||||
outer_context->check_privileges);
|
||||
outer_context->check_privileges,
|
||||
TRUE);
|
||||
if (! from_field)
|
||||
goto error;
|
||||
if (from_field == view_ref_found)
|
||||
|
@ -758,7 +758,8 @@ enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND,
|
||||
Field *find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
||||
Item **ref,
|
||||
find_item_error_report_type report_error,
|
||||
bool check_privileges);
|
||||
bool check_privileges,
|
||||
bool register_tree_change);
|
||||
Field *
|
||||
find_field_in_table(THD *thd, TABLE_LIST *table_list,
|
||||
const char *name, const char *item_name,
|
||||
|
@ -688,7 +688,8 @@ db_show_routine_status(THD *thd, int type, const char *wild)
|
||||
used_field->field_name);
|
||||
if (!field ||
|
||||
!(used_field->field= find_field_in_tables(thd, field, &tables,
|
||||
0, REPORT_ALL_ERRORS, 1)))
|
||||
0, REPORT_ALL_ERRORS, 1,
|
||||
TRUE)))
|
||||
{
|
||||
res= SP_INTERNAL_ERROR;
|
||||
goto err_case1;
|
||||
|
@ -2594,6 +2594,8 @@ Field *find_field_in_real_table(THD *thd, TABLE *table,
|
||||
except when non-unique fields were found
|
||||
- REPORT_ALL_ERRORS
|
||||
check_privileges need to check privileges
|
||||
register_tree_change TRUE if ref is not stack variable and we
|
||||
need register changes in item tree
|
||||
|
||||
RETURN VALUES
|
||||
0 If error: the found field is not unique, or there are
|
||||
@ -2609,7 +2611,7 @@ Field *find_field_in_real_table(THD *thd, TABLE *table,
|
||||
Field *
|
||||
find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
||||
Item **ref, find_item_error_report_type report_error,
|
||||
bool check_privileges)
|
||||
bool check_privileges, bool register_tree_change)
|
||||
{
|
||||
Field *found=0;
|
||||
const char *db=item->db_name;
|
||||
@ -2651,7 +2653,7 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
||||
(test(table->grant.want_privilege) &&
|
||||
check_privileges),
|
||||
1, &(item->cached_field_index),
|
||||
TRUE);
|
||||
register_tree_change);
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
@ -2707,7 +2709,7 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
||||
(test(tables->grant.want_privilege) &&
|
||||
check_privileges),
|
||||
1, &(item->cached_field_index),
|
||||
TRUE);
|
||||
register_tree_change);
|
||||
if (find)
|
||||
{
|
||||
item->cached_table= tables;
|
||||
@ -2775,7 +2777,7 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
|
||||
check_privileges),
|
||||
allow_rowid,
|
||||
&(item->cached_field_index),
|
||||
TRUE);
|
||||
register_tree_change);
|
||||
if (field)
|
||||
{
|
||||
if (field == WRONG_GRANT)
|
||||
|
@ -91,7 +91,8 @@ static bool init_fields(THD *thd, TABLE_LIST *tables,
|
||||
"mysql", find_fields->table_name,
|
||||
find_fields->field_name);
|
||||
if (!(find_fields->field= find_field_in_tables(thd, field, tables,
|
||||
0, REPORT_ALL_ERRORS, 1)))
|
||||
0, REPORT_ALL_ERRORS, 1,
|
||||
TRUE)))
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
|
@ -11890,7 +11890,8 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
|
||||
order_item_type == Item::REF_ITEM)
|
||||
{
|
||||
from_field= find_field_in_tables(thd, (Item_ident*) order_item, tables,
|
||||
&view_ref, IGNORE_ERRORS, TRUE);
|
||||
&view_ref, IGNORE_ERRORS, TRUE,
|
||||
FALSE);
|
||||
if(!from_field)
|
||||
from_field= (Field*) not_found_field;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user