MySQL 8.0.40
Source Code Documentation
|
Name resolution functions. More...
#include <functional>
Go to the source code of this file.
Classes | |
struct | ReplaceResult |
Typedefs | |
typedef Bounds_checked_array< Item * > | Ref_item_array |
Functions | |
void | propagate_nullability (mem_root_deque< Table_ref * > *tables, bool nullable) |
Propagate nullability into inner tables of outer join operation. More... | |
bool | setup_order (THD *thd, Ref_item_array ref_item_array, Table_ref *tables, mem_root_deque< Item * > *fields, ORDER *order) |
Resolve and setup list of expressions in ORDER BY clause. More... | |
bool | validate_gc_assignment (const mem_root_deque< Item * > &fields, const mem_root_deque< Item * > &values, TABLE *tab) |
validate_gc_assignment Check whether the other values except DEFAULT are assigned for generated columns. More... | |
bool | find_order_in_list (THD *thd, Ref_item_array ref_item_array, Table_ref *tables, ORDER *order, mem_root_deque< Item * > *fields, bool is_group_field, bool is_window_order) |
Resolve an ORDER BY or GROUP BY column reference. More... | |
bool | WalkAndReplace (THD *thd, Item *item, const std::function< ReplaceResult(Item *item, Item *parent, unsigned argument_idx)> &get_new_item) |
Walk through the conditions and functions below the given item, and allows the given functor to replace it with new items. More... | |
Name resolution functions.
typedef Bounds_checked_array<Item *> Ref_item_array |
bool WalkAndReplace | ( | THD * | thd, |
Item * | item, | ||
const std::function< ReplaceResult(Item *item, Item *parent, unsigned argument_idx)> & | get_new_item | ||
) |
Walk through the conditions and functions below the given item, and allows the given functor to replace it with new items.
See ReplaceResult.
This function is used both during resolving for making permanent changes to the item tree, and during optimization for making non-permanent changes.
Note that this must not be used for permanent changes during optimization, as all changes done during optimization will be rolled back if a prepared statement is re-executed.
Note also that if the replaced items have different data types than the original items, it may be necessary to adjust comparators in Item_bool_func2 objects higher up in the tree by calling set_cmp_func() on them. This is not done by this function. Partly because it's generally not used for changing data types, except in some special cases (at the time of writing, only in resolving of ROLLUP columns). But also because of the note above about making permanent changes during optimization; set_cmp_func() may make permanent changes to the item, which are not rolled back at the end of execution, so it's not safe to do this unconditionally under optimization. If adjusting the comparators is necessary, the caller of WalkAndReplace() will have to invoke set_cmp_func() manually.