mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
do not register changes of stack variable
This commit is contained in:
parent
6201504db9
commit
2941da3971
6 changed files with 35 additions and 26 deletions
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,
|
||||
|
|
|
@ -687,8 +687,9 @@ db_show_routine_status(THD *thd, int type, const char *wild)
|
|||
"mysql", "proc",
|
||||
used_field->field_name);
|
||||
if (!field ||
|
||||
!(used_field->field= find_field_in_tables(thd, field, &tables,
|
||||
0, REPORT_ALL_ERRORS, 1)))
|
||||
!(used_field->field= find_field_in_tables(thd, field, &tables,
|
||||
0, REPORT_ALL_ERRORS, 1,
|
||||
TRUE)))
|
||||
{
|
||||
res= SP_INTERNAL_ERROR;
|
||||
goto err_case1;
|
||||
|
|
|
@ -2581,19 +2581,21 @@ Field *find_field_in_real_table(THD *thd, TABLE *table,
|
|||
|
||||
SYNOPSIS
|
||||
find_field_in_tables()
|
||||
thd Pointer to current thread structure
|
||||
item Field item that should be found
|
||||
tables Tables to be searched for item
|
||||
ref If 'item' is resolved to a view field, ref is set to
|
||||
point to the found view field
|
||||
report_error Degree of error reporting:
|
||||
- IGNORE_ERRORS then do not report any error
|
||||
- IGNORE_EXCEPT_NON_UNIQUE report only non-unique
|
||||
fields, suppress all other errors
|
||||
- REPORT_EXCEPT_NON_UNIQUE report all other errors
|
||||
except when non-unique fields were found
|
||||
- REPORT_ALL_ERRORS
|
||||
check_privileges need to check privileges
|
||||
thd Pointer to current thread structure
|
||||
item Field item that should be found
|
||||
tables Tables to be searched for item
|
||||
ref If 'item' is resolved to a view field, ref is set to
|
||||
point to the found view field
|
||||
report_error Degree of error reporting:
|
||||
- IGNORE_ERRORS then do not report any error
|
||||
- IGNORE_EXCEPT_NON_UNIQUE report only non-unique
|
||||
fields, suppress all other errors
|
||||
- REPORT_EXCEPT_NON_UNIQUE report all other errors
|
||||
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…
Reference in a new issue