summaryrefslogtreecommitdiff
path: root/sql/sql_string.h
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2015-03-18 17:10:48 +0400
committerAlexander Barkov <bar@mariadb.org>2015-03-18 17:10:48 +0400
commite28a241907aa7a511b65b196703efaeea71e1dc4 (patch)
tree9456d75e69127d0416592f8036441b17cbe43724 /sql/sql_string.h
parenta471b7098f50e21565ce4c86efcb05d8310e1d62 (diff)
downloadmariadb-git-e28a241907aa7a511b65b196703efaeea71e1dc4.tar.gz
MDEV-7661 Unexpected result for: CAST(0xHHHH AS CHAR CHARACTER SET xxx)
for incorrect byte sequences
Diffstat (limited to 'sql/sql_string.h')
-rw-r--r--sql/sql_string.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 4a23d65d6a8..518b8e5ba4b 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -200,6 +200,7 @@ public:
inline bool is_empty() const { return (str_length == 0); }
inline void mark_as_const() { Alloced_length= 0;}
inline const char *ptr() const { return Ptr; }
+ inline const char *end() const { return Ptr + str_length; }
inline char *c_ptr()
{
DBUG_ASSERT(!alloced || !Ptr || !Alloced_length ||
@@ -423,6 +424,17 @@ public:
{
return copy(str->ptr(), str->length(), str->charset(), tocs, errors);
}
+ bool copy(CHARSET_INFO *tocs,
+ CHARSET_INFO *fromcs, const char *src, uint32 src_length,
+ uint32 nchars, String_copier *copier)
+ {
+ if (alloc(tocs->mbmaxlen * src_length))
+ return true;
+ str_length= copier->well_formed_copy(tocs, Ptr, Alloced_length,
+ fromcs, src, src_length, nchars);
+ str_charset= tocs;
+ return false;
+ }
void move(String &s)
{
free();