diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item.cc | 20 | ||||
-rw-r--r-- | sql/sql_string.cc | 10 | ||||
-rw-r--r-- | sql/sql_string.h | 10 |
3 files changed, 20 insertions, 20 deletions
diff --git a/sql/item.cc b/sql/item.cc index c75e0562526..c17147bde01 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -2939,25 +2939,7 @@ void Item_string::print(String *str, enum_query_type query_type) } else { - if (my_charset_same(str_value.charset(), system_charset_info)) - str_value.print(str); // already in system_charset_info - else // need to convert - { - THD *thd= current_thd; - LEX_STRING utf8_lex_str; - - thd->convert_string(&utf8_lex_str, - system_charset_info, - str_value.c_ptr_safe(), - str_value.length(), - str_value.charset()); - - String utf8_str(utf8_lex_str.str, - utf8_lex_str.length, - system_charset_info); - - utf8_str.print(str); - } + str_value.print(str, system_charset_info); } } else diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 379609ad6e7..b14c3afca4b 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -954,6 +954,16 @@ void String::print(String *str) const str->append_for_single_quote(Ptr, str_length); } + +void String::print_with_conversion(String *print, CHARSET_INFO *cs) const +{ + StringBuffer<256> tmp(cs); + uint errors= 0; + tmp.copy(this, cs, &errors); + tmp.print(print); +} + + /* Exchange state of this object and argument. diff --git a/sql/sql_string.h b/sql/sql_string.h index 99fe6b60d37..51a11c7a4ff 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -568,7 +568,15 @@ public: str_length+= arg_length; return FALSE; } - void print(String *print) const; + void print(String *to) const; + void print_with_conversion(String *to, CHARSET_INFO *cs) const; + void print(String *to, CHARSET_INFO *cs) const + { + if (my_charset_same(charset(), cs)) + print(to); + else + print_with_conversion(to, cs); + } bool append_for_single_quote(const char *st, uint len); bool append_for_single_quote(const String *s) |