mirror of
https://github.com/MariaDB/server.git
synced 2025-11-16 20:23:18 +03:00
Bug#14255 CAST(x AS BINARY(N)) does not pad
type_binary.result, type_binary.test: Adding test case. item_timefunc.cc: Padding code was added. sql/item_timefunc.cc: Bug#14255 CAST(x AS BINARY(N)) does not pad Padding code was added. mysql-test/t/type_binary.test: Adding test case. mysql-test/r/type_binary.result: Adding test case.
This commit is contained in:
@@ -111,3 +111,6 @@ select count(distinct s1) from t1;
|
||||
count(distinct s1)
|
||||
3
|
||||
drop table t1;
|
||||
select hex(cast(0x10 as binary(2)));
|
||||
hex(cast(0x10 as binary(2)))
|
||||
1000
|
||||
|
||||
@@ -65,3 +65,6 @@ select hex(s1) from t1 where s1=0x0120;
|
||||
select hex(s1) from t1 where s1=0x0100;
|
||||
select count(distinct s1) from t1;
|
||||
drop table t1;
|
||||
|
||||
# check that cast appends trailing zeros
|
||||
select hex(cast(0x10 as binary(2)));
|
||||
|
||||
@@ -2327,8 +2327,9 @@ String *Item_char_typecast::val_str(String *str)
|
||||
and the result is longer than cast length, e.g.
|
||||
CAST('string' AS CHAR(1))
|
||||
*/
|
||||
if (cast_length >= 0 &&
|
||||
(res->length() > (length= (uint32) res->charpos(cast_length))))
|
||||
if (cast_length >= 0)
|
||||
{
|
||||
if (res->length() > (length= (uint32) res->charpos(cast_length)))
|
||||
{ // Safe even if const arg
|
||||
char char_type[40];
|
||||
my_snprintf(char_type, sizeof(char_type), "CHAR(%lu)", length);
|
||||
@@ -2344,6 +2345,19 @@ String *Item_char_typecast::val_str(String *str)
|
||||
res->c_ptr_safe());
|
||||
res->length((uint) length);
|
||||
}
|
||||
else if (cast_cs == &my_charset_bin && res->length() < (uint) cast_length)
|
||||
{
|
||||
if (res->alloced_length() < (uint) cast_length)
|
||||
{
|
||||
str->alloc(cast_length);
|
||||
str->copy(*res);
|
||||
res= str;
|
||||
}
|
||||
bzero((char*) res->ptr() + res->length(),
|
||||
(uint) cast_length - res->length());
|
||||
res->length(cast_length);
|
||||
}
|
||||
}
|
||||
null_value= 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user