diff options
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/sql/item.cc b/sql/item.cc index 028cc8c8e30..02cbe9b7f49 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2011, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -4227,7 +4227,7 @@ String* Item_ref_null_helper::val_str(String* s) bool Item_ref_null_helper::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate) { - return (owner->was_null|= null_value= (*ref)->get_date(ltime, fuzzydate)); + return (owner->was_null|= null_value= (*ref)->get_date_result(ltime, fuzzydate)); } @@ -8654,6 +8654,20 @@ void Item_cache::print(String *str, enum_query_type query_type) str->append(')'); } +/** + Assign to this cache NULL value if it is possible +*/ + +void Item_cache::set_null() +{ + if (maybe_null) + { + null_value= TRUE; + value_cached= TRUE; + } +} + + bool Item_cache_int::cache_value() { if (!example) @@ -9090,6 +9104,20 @@ void Item_cache_row::bring_value() } +/** + Assign to this cache NULL value if it is possible +*/ + +void Item_cache_row::set_null() +{ + Item_cache::set_null(); + if (!values) + return; + for (uint i= 0; i < item_count; i++) + values[i]->set_null(); +}; + + Item_type_holder::Item_type_holder(THD *thd, Item *item) :Item(thd, item), enum_set_typelib(0), fld_type(get_real_type(item)) { |