1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

5.5.38 merge

This commit is contained in:
Sergei Golubchik
2014-06-06 00:07:27 +02:00
132 changed files with 2524 additions and 3328 deletions

View File

@ -230,6 +230,42 @@ bool String::needs_conversion(uint32 arg_length,
}
/*
Checks that the source string can just be copied to the destination string
without conversion.
Unlike needs_conversion it will require conversion on incoming binary data
to ensure the data are verified for vailidity first.
@param arg_length Length of string to copy.
@param from_cs Character set to copy from
@param to_cs Character set to copy to
@return conversion needed
*/
bool String::needs_conversion_on_storage(uint32 arg_length,
CHARSET_INFO *cs_from,
CHARSET_INFO *cs_to)
{
uint32 offset;
return (needs_conversion(arg_length, cs_from, cs_to, &offset) ||
/* force conversion when storing a binary string */
(cs_from == &my_charset_bin &&
/* into a non-binary destination */
cs_to != &my_charset_bin &&
/* and any of the following is true :*/
(
/* it's a variable length encoding */
cs_to->mbminlen != cs_to->mbmaxlen ||
/* longer than 2 bytes : neither 1 byte nor ucs2 */
cs_to->mbminlen > 2 ||
/* and is not a multiple of the char byte size */
0 != (arg_length % cs_to->mbmaxlen)
)
)
);
}
/*
Copy a multi-byte character sets with adding leading zeros.