summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/item.cc20
-rw-r--r--sql/sql_string.cc10
-rw-r--r--sql/sql_string.h10
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)