summaryrefslogtreecommitdiff
path: root/sql/sql_string.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-03-18 13:42:45 +0400
committerunknown <bar@bar.mysql.r18.ru>2003-03-18 13:42:45 +0400
commitff35e04745ce5ecc8b69557e0ae577788daaebac (patch)
tree654a6c026a9f32264dd951b278c97e12c4456e3a /sql/sql_string.cc
parentbd99e946ad46e46f32feed33c3be4b1071dead63 (diff)
downloadmariadb-git-ff35e04745ce5ecc8b69557e0ae577788daaebac.tar.gz
SHOW CREATE TABLE didn't display field names in the proper charset
mysys/charset.c: Clear all fields at the end of previous charset
Diffstat (limited to 'sql/sql_string.cc')
-rw-r--r--sql/sql_string.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index ae3875834f0..54a76319be7 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -338,6 +338,34 @@ bool String::append(const char *s,uint32 arg_length)
}
+/*
+ Append a string in the given charset to the string
+ with character set recoding
+*/
+
+
+bool String::append(const char *s,uint32 arg_length, CHARSET_INFO *cs)
+{
+ if (!arg_length) // Default argument
+ if (!(arg_length= (uint32) strlen(s)))
+ return FALSE;
+ if (str_charset->mbmaxlen > 1)
+ {
+ uint32 add_length=arg_length * str_charset->mbmaxlen;
+ if (realloc(str_length+ add_length))
+ return TRUE;
+ str_length+= copy_and_convert(Ptr+str_length, add_length, str_charset,
+ s, arg_length, cs);
+ return FALSE;
+ }
+ if (realloc(str_length+arg_length))
+ return TRUE;
+ memcpy(Ptr+str_length,s,arg_length);
+ str_length+=arg_length;
+ return FALSE;
+}
+
+
#ifdef TO_BE_REMOVED
bool String::append(FILE* file, uint32 arg_length, myf my_flags)
{