Loading sql/item.cc +10 −16 Original line number Diff line number Diff line Loading @@ -700,23 +700,15 @@ Item *Item_param::safe_charset_converter(CHARSET_INFO *tocs) { if (const_item()) { Item_string *conv; uint cnv_errors; char buf[MAX_FIELD_WIDTH]; String tmp(buf, sizeof(buf), &my_charset_bin); String cstr, *ostr= val_str(&tmp); /* As safe_charset_converter is not executed for a parameter bound to NULL, ostr should never be 0. */ cstr.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, &cnv_errors); if (cnv_errors || !(conv= new Item_string(cstr.ptr(), cstr.length(), cstr.charset(), collation.derivation))) String *ostr= val_str(&cnvstr); cnvitem->str_value.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, &cnv_errors); if (cnv_errors) return NULL; conv->str_value.copy(); conv->str_value.mark_as_const(); return conv; cnvitem->str_value.mark_as_const(); cnvitem->max_length= cnvitem->str_value.numchars() * tocs->mbmaxlen; return cnvitem; } return NULL; } Loading Loading @@ -2098,6 +2090,8 @@ Item_param::Item_param(unsigned pos_in_query_arg) : value is set. */ maybe_null= 1; cnvitem= new Item_string("", 0, &my_charset_bin, DERIVATION_COERCIBLE); cnvstr.set(cnvbuf, sizeof(cnvbuf), &my_charset_bin); } Loading sql/item.h +4 −0 Original line number Diff line number Diff line Loading @@ -1075,7 +1075,11 @@ class Item_null_result :public Item_null class Item_param :public Item { char cnvbuf[MAX_FIELD_WIDTH]; String cnvstr; Item *cnvitem; public: enum enum_item_param_state { NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE, Loading Loading
sql/item.cc +10 −16 Original line number Diff line number Diff line Loading @@ -700,23 +700,15 @@ Item *Item_param::safe_charset_converter(CHARSET_INFO *tocs) { if (const_item()) { Item_string *conv; uint cnv_errors; char buf[MAX_FIELD_WIDTH]; String tmp(buf, sizeof(buf), &my_charset_bin); String cstr, *ostr= val_str(&tmp); /* As safe_charset_converter is not executed for a parameter bound to NULL, ostr should never be 0. */ cstr.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, &cnv_errors); if (cnv_errors || !(conv= new Item_string(cstr.ptr(), cstr.length(), cstr.charset(), collation.derivation))) String *ostr= val_str(&cnvstr); cnvitem->str_value.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, &cnv_errors); if (cnv_errors) return NULL; conv->str_value.copy(); conv->str_value.mark_as_const(); return conv; cnvitem->str_value.mark_as_const(); cnvitem->max_length= cnvitem->str_value.numchars() * tocs->mbmaxlen; return cnvitem; } return NULL; } Loading Loading @@ -2098,6 +2090,8 @@ Item_param::Item_param(unsigned pos_in_query_arg) : value is set. */ maybe_null= 1; cnvitem= new Item_string("", 0, &my_charset_bin, DERIVATION_COERCIBLE); cnvstr.set(cnvbuf, sizeof(cnvbuf), &my_charset_bin); } Loading
sql/item.h +4 −0 Original line number Diff line number Diff line Loading @@ -1075,7 +1075,11 @@ class Item_null_result :public Item_null class Item_param :public Item { char cnvbuf[MAX_FIELD_WIDTH]; String cnvstr; Item *cnvitem; public: enum enum_item_param_state { NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE, Loading