Commit a9af48e9 authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+10 −16
Original line number Diff line number Diff line
@@ -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;
}
@@ -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);
}


+4 −0
Original line number Diff line number Diff line
@@ -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,