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:
@ -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.
|
||||
|
||||
|
Reference in New Issue
Block a user