mirror of
https://github.com/MariaDB/server.git
synced 2026-04-29 11:45:32 +02:00
Fix bug lp:813473
The bug is a duplicate of MySQL's Bug#11764086, however MySQL's fix is incomplete for MariaDB, so this fix is slightly different. In addition, this patch renames Item_func_not_all::top_level() to is_top_level_item() to make it in line with the analogous methods of Item_in_optimizer, and Item_subselect. Analysis: It is possible to determine whether a predicate is NULL-rejecting only if it is a top-level one. However, this was not taken into account for Item_in_optimizer. As a result, a NOT IN predicate was erroneously considered as NULL-rejecting, and the NULL-complemented rows generated by the outer join were rejected before being checked by the NOT IN predicate. Solution: Change Item_in_optimizer to be considered as NULL-rejecting only if it a top-level predicate.
This commit is contained in:
parent
f240aa4cbf
commit
6b70cc538b
9 changed files with 464 additions and 4 deletions
|
|
@ -260,6 +260,8 @@ public:
|
|||
void set_join_tab_idx(uint join_tab_idx_arg)
|
||||
{ args[1]->set_join_tab_idx(join_tab_idx_arg); }
|
||||
virtual void get_cache_parameters(List<Item> ¶meters);
|
||||
bool is_top_level_item();
|
||||
bool eval_not_null_tables(uchar *opt_arg);
|
||||
};
|
||||
|
||||
class Comp_creator
|
||||
|
|
@ -494,7 +496,7 @@ public:
|
|||
show(0)
|
||||
{}
|
||||
virtual void top_level_item() { abort_on_null= 1; }
|
||||
bool top_level() { return abort_on_null; }
|
||||
bool is_top_level_item() { return abort_on_null; }
|
||||
longlong val_int();
|
||||
enum Functype functype() const { return NOT_ALL_FUNC; }
|
||||
const char *func_name() const { return "<not>"; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue