diff options
Diffstat (limited to 'sql/item_row.cc')
-rw-r--r-- | sql/item_row.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sql/item_row.cc b/sql/item_row.cc index 28de03bf049..7535c1fa80b 100644 --- a/sql/item_row.cc +++ b/sql/item_row.cc @@ -30,7 +30,8 @@ */ Item_row::Item_row(List<Item> &arg): - Item(), used_tables_cache(0), const_item_cache(1), with_null(0) + Item(), used_tables_cache(0), not_null_tables_cache(0), + const_item_cache(1), with_null(0) { //TODO: think placing 2-3 component items in item (as it done for function) @@ -71,7 +72,13 @@ bool Item_row::fix_fields(THD *thd, Item **ref) Item *item= *arg; used_tables_cache |= item->used_tables(); const_item_cache&= item->const_item() && !with_null; - if (const_item_cache) + not_null_tables_cache|= item->not_null_tables(); + /* + Some subqueries transformations aren't done in the view_prepare_mode thus + is_null() will fail. So we skip is_null() calculation for CREATE VIEW as + not necessary. + */ + if (const_item_cache && !thd->lex->view_prepare_mode) { if (item->cols() > 1) with_null|= item->null_inside(); |