summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2015-04-14 23:18:54 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2015-04-23 15:56:10 +0200
commit20109712aeb3d23e5e975780897ad236cbcd2ddc (patch)
tree1d6e7509cce9617bb40c8dcffc34b6cc810e1eb3 /sql/item.cc
parent8cbaafd22b145512cc91f7b512290320849e77bd (diff)
downloadmariadb-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.cc26
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