Commit a9af48e9 authored by unknown's avatar unknown

item.cc, item.h:

  Fixing Item_param::safe_charset_converter to do less "new"s.


sql/item.h:
  Fixing Item_param::safe_charset_converter to do less "new"s.
sql/item.cc:
  Fixing Item_param::safe_charset_converter to do less "new"s.
parent 14637f97
...@@ -700,23 +700,15 @@ Item *Item_param::safe_charset_converter(CHARSET_INFO *tocs) ...@@ -700,23 +700,15 @@ Item *Item_param::safe_charset_converter(CHARSET_INFO *tocs)
{ {
if (const_item()) if (const_item())
{ {
Item_string *conv;
uint cnv_errors; uint cnv_errors;
char buf[MAX_FIELD_WIDTH]; String *ostr= val_str(&cnvstr);
String tmp(buf, sizeof(buf), &my_charset_bin); cnvitem->str_value.copy(ostr->ptr(), ostr->length(),
String cstr, *ostr= val_str(&tmp); ostr->charset(), tocs, &cnv_errors);
/* if (cnv_errors)
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)))
return NULL; return NULL;
conv->str_value.copy(); cnvitem->str_value.mark_as_const();
conv->str_value.mark_as_const(); cnvitem->max_length= cnvitem->str_value.numchars() * tocs->mbmaxlen;
return conv; return cnvitem;
} }
return NULL; return NULL;
} }
...@@ -2098,6 +2090,8 @@ Item_param::Item_param(unsigned pos_in_query_arg) : ...@@ -2098,6 +2090,8 @@ Item_param::Item_param(unsigned pos_in_query_arg) :
value is set. value is set.
*/ */
maybe_null= 1; maybe_null= 1;
cnvitem= new Item_string("", 0, &my_charset_bin, DERIVATION_COERCIBLE);
cnvstr.set(cnvbuf, sizeof(cnvbuf), &my_charset_bin);
} }
......
...@@ -1075,7 +1075,11 @@ public: ...@@ -1075,7 +1075,11 @@ public:
class Item_param :public Item class Item_param :public Item
{ {
char cnvbuf[MAX_FIELD_WIDTH];
String cnvstr;
Item *cnvitem;
public: public:
enum enum_item_param_state enum enum_item_param_state
{ {
NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE, NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment