diff --git a/sql/item.cc b/sql/item.cc index f1569b6dca6..2dabb8e26ef 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -745,6 +745,8 @@ double Item_param::val() { DBUG_ASSERT(value_is_set == 1); int err; + if (null_value) + return 0.0; switch (item_result_type) { case STRING_RESULT: return (double) my_strntod(str_value.charset(), (char*) str_value.ptr(), @@ -761,6 +763,8 @@ longlong Item_param::val_int() { DBUG_ASSERT(value_is_set == 1); int err; + if (null_value) + return 0; switch (item_result_type) { case STRING_RESULT: return my_strntoll(str_value.charset(), diff --git a/sql/item.h b/sql/item.h index b756d824de0..780e2fcadac 100644 --- a/sql/item.h +++ b/sql/item.h @@ -157,6 +157,7 @@ public: virtual Item_result result_type () const { return REAL_RESULT; } virtual enum_field_types field_type() const; virtual enum Type type() const =0; + /* valXXX methods must return NULL or 0 or 0.0 if null_value is set. */ virtual double val()=0; virtual longlong val_int()=0; virtual String *val_str(String*)=0;