Commit 4e5a513c authored by unknown's avatar unknown
Browse files

Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1

into gw.mysql.r18.ru:/usr/home/ram/work/4.1.b7261

parents 9a9b3f28 199a139d
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -2115,7 +2115,6 @@ String *Item_char_typecast::val_str(String *str)
  String *res;
  uint32 length;

#if 0
  if (!charset_conversion)
  {
    if (!(res= args[0]->val_str(str)))
@@ -2125,7 +2124,6 @@ String *Item_char_typecast::val_str(String *str)
    }
  }
  else
#endif
  {
    // Convert character set if differ
    uint dummy_errors;
@@ -2163,7 +2161,16 @@ String *Item_char_typecast::val_str(String *str)
void Item_char_typecast::fix_length_and_dec()
{
  uint32 char_length;
  charset_conversion= !my_charset_same(args[0]->collation.collation, cast_cs) &&
  /* 
     We always force character set conversion if cast_cs
     is a multi-byte character set. It garantees that the
     result of CAST is a well-formed string.
     For single-byte character sets we allow just to copy
     from the argument. A single-byte character sets string
     is always well-formed. 
  */
  charset_conversion= (cast_cs->mbmaxlen > 1) ||
                      !my_charset_same(args[0]->collation.collation, cast_cs) &&
                      args[0]->collation.collation != &my_charset_bin &&
                      cast_cs != &my_charset_bin;
  collation.set(cast_cs, DERIVATION_IMPLICIT);