mirror of
https://github.com/MariaDB/server.git
synced 2026-05-04 14:15:33 +02:00
Merge with MySQL 5.1.53
Open issues: - A better fix for #57688; Igor is working on this - Test failure in index_merge_innodb.test ; Igor promised to look at this - Some Innodb tests fails (need to merge with latest xtradb) ; Kristian promised to look at this. - Failing tests: innodb_plugin.innodb_bug56143 innodb_plugin.innodb_bug56632 innodb_plugin.innodb_bug56680 innodb_plugin.innodb_bug57255 - Werror is disabled; Should be enabled after merge with xtradb.
This commit is contained in:
commit
1a6373e8e2
184 changed files with 6256 additions and 722 deletions
|
|
@ -1014,6 +1014,20 @@ String *Item_func_insert::val_str(String *str)
|
|||
if ((length < 0) || (length > res->length()))
|
||||
length= res->length();
|
||||
|
||||
/*
|
||||
There is one exception not handled (intentionaly) by the character set
|
||||
aggregation code. If one string is strong side and is binary, and
|
||||
another one is weak side and is a multi-byte character string,
|
||||
then we need to operate on the second string in terms on bytes when
|
||||
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||
Lets substitute its character set to binary.
|
||||
*/
|
||||
if (collation.collation == &my_charset_bin)
|
||||
{
|
||||
res->set_charset(&my_charset_bin);
|
||||
res2->set_charset(&my_charset_bin);
|
||||
}
|
||||
|
||||
/* start and length are now sufficiently valid to pass to charpos function */
|
||||
start= res->charpos((int) start);
|
||||
length= res->charpos((int) length, (uint32) start);
|
||||
|
|
@ -2515,6 +2529,20 @@ String *Item_func_rpad::val_str(String *str)
|
|||
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||
if ((ulonglong) count > INT_MAX32)
|
||||
count= INT_MAX32;
|
||||
/*
|
||||
There is one exception not handled (intentionaly) by the character set
|
||||
aggregation code. If one string is strong side and is binary, and
|
||||
another one is weak side and is a multi-byte character string,
|
||||
then we need to operate on the second string in terms on bytes when
|
||||
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||
Lets substitute its character set to binary.
|
||||
*/
|
||||
if (collation.collation == &my_charset_bin)
|
||||
{
|
||||
res->set_charset(&my_charset_bin);
|
||||
rpad->set_charset(&my_charset_bin);
|
||||
}
|
||||
|
||||
if (count <= (res_char_length= res->numchars()))
|
||||
{ // String to pad is big enough
|
||||
res->length(res->charpos((int) count)); // Shorten result if longer
|
||||
|
|
@ -2617,6 +2645,20 @@ String *Item_func_lpad::val_str(String *str)
|
|||
if ((ulonglong) count > INT_MAX32)
|
||||
count= INT_MAX32;
|
||||
|
||||
/*
|
||||
There is one exception not handled (intentionaly) by the character set
|
||||
aggregation code. If one string is strong side and is binary, and
|
||||
another one is weak side and is a multi-byte character string,
|
||||
then we need to operate on the second string in terms on bytes when
|
||||
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||
Lets substitute its character set to binary.
|
||||
*/
|
||||
if (collation.collation == &my_charset_bin)
|
||||
{
|
||||
res->set_charset(&my_charset_bin);
|
||||
pad->set_charset(&my_charset_bin);
|
||||
}
|
||||
|
||||
res_char_length= res->numchars();
|
||||
|
||||
if (count <= res_char_length)
|
||||
|
|
@ -3094,6 +3136,7 @@ String* Item_func_inet_ntoa::val_str(String* str)
|
|||
if ((null_value= (args[0]->null_value || n > (ulonglong) LL(4294967295))))
|
||||
return 0; // Null value
|
||||
|
||||
str->set_charset(collation.collation);
|
||||
str->length(0);
|
||||
int4store(buf,n);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue