diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2015-04-14 23:18:54 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2015-04-23 15:56:10 +0200 |
commit | 20109712aeb3d23e5e975780897ad236cbcd2ddc (patch) | |
tree | 1d6e7509cce9617bb40c8dcffc34b6cc810e1eb3 /sql/item.cc | |
parent | 8cbaafd22b145512cc91f7b512290320849e77bd (diff) | |
download | mariadb-git-20109712aeb3d23e5e975780897ad236cbcd2ddc.tar.gz |
MDEV-6892: WHERE does not apply
Taking into account implicit dependence of constant view field from nullable table of left join added.
Fixed finding real table to check if it turned to NULL (materialized view & derived taken into account)
Removed incorrect uninitialization.
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/sql/item.cc b/sql/item.cc index cfc5f67dc8e..59ec3e69102 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -7949,6 +7949,7 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference) return TRUE; if (view->table && view->table->maybe_null) maybe_null= TRUE; + set_null_ref_table(); return FALSE; } @@ -9790,13 +9791,28 @@ void Item_ref::update_used_tables() (*ref)->update_used_tables(); } +void Item_direct_view_ref::update_used_tables() +{ + set_null_ref_table(); + Item_direct_ref::update_used_tables(); +} + + table_map Item_direct_view_ref::used_tables() const { - return get_depended_from() ? - OUTER_REF_TABLE_BIT : - ((view->is_merged_derived() || view->merged || !view->table) ? - (*ref)->used_tables() : - view->table->map); + DBUG_ASSERT(null_ref_table); + + if (get_depended_from()) + return OUTER_REF_TABLE_BIT; + + if (view->is_merged_derived() || view->merged || !view->table) + return ((*ref)->used_tables() ? + (*ref)->used_tables() : + ((null_ref_table != NO_NULL_TABLE) ? + null_ref_table->map : + (table_map)0 )); + + return view->table->map; } table_map Item_direct_view_ref::not_null_tables() const |