mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge maint1.mysql.com:/data/localhome/cmiller/bug15583/my50-bug15583
into maint1.mysql.com:/data/localhome/cmiller/mysql-5.0-maint sql/item_strfunc.cc: Auto merged
This commit is contained in:
@@ -572,4 +572,34 @@ def test t1 t1 a a 16 7 1 Y 0 0 63
|
|||||||
a
|
a
|
||||||
`
|
`
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table bug15583(b BIT(8), n INT);
|
||||||
|
insert into bug15583 values(128, 128);
|
||||||
|
insert into bug15583 values(null, null);
|
||||||
|
insert into bug15583 values(0, 0);
|
||||||
|
insert into bug15583 values(255, 255);
|
||||||
|
select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583;
|
||||||
|
hex(b) bin(b) oct(b) hex(n) bin(n) oct(n)
|
||||||
|
80 10000000 200 80 10000000 200
|
||||||
|
NULL NULL NULL NULL NULL NULL
|
||||||
|
0 0 0 0 0 0
|
||||||
|
FF 11111111 377 FF 11111111 377
|
||||||
|
select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583;
|
||||||
|
should_be_onetrue should_be_onetrue should_be_onetrue
|
||||||
|
1 1 1
|
||||||
|
NULL NULL NULL
|
||||||
|
1 1 1
|
||||||
|
1 1 1
|
||||||
|
select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583;
|
||||||
|
hex(b + 0) bin(b + 0) oct(b + 0) hex(n) bin(n) oct(n)
|
||||||
|
80 10000000 200 80 10000000 200
|
||||||
|
NULL NULL NULL NULL NULL NULL
|
||||||
|
0 0 0 0 0 0
|
||||||
|
FF 11111111 377 FF 11111111 377
|
||||||
|
select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583;
|
||||||
|
conv(b, 10, 2) conv(b + 0, 10, 2)
|
||||||
|
10000000 10000000
|
||||||
|
NULL NULL
|
||||||
|
0 0
|
||||||
|
11111111 11111111
|
||||||
|
drop table bug15583;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@@ -238,4 +238,19 @@ select * from t1;
|
|||||||
--disable_metadata
|
--disable_metadata
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#15583: BIN()/OCT()/CONV() do not work with BIT values
|
||||||
|
#
|
||||||
|
create table bug15583(b BIT(8), n INT);
|
||||||
|
insert into bug15583 values(128, 128);
|
||||||
|
insert into bug15583 values(null, null);
|
||||||
|
insert into bug15583 values(0, 0);
|
||||||
|
insert into bug15583 values(255, 255);
|
||||||
|
select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583;
|
||||||
|
select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583;
|
||||||
|
select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583;
|
||||||
|
select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583;
|
||||||
|
drop table bug15583;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@@ -2382,14 +2382,30 @@ String *Item_func_conv::val_str(String *str)
|
|||||||
abs(from_base) > 36 || abs(from_base) < 2 || !(res->length()))
|
abs(from_base) > 36 || abs(from_base) < 2 || !(res->length()))
|
||||||
{
|
{
|
||||||
null_value= 1;
|
null_value= 1;
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
null_value= 0;
|
null_value= 0;
|
||||||
unsigned_flag= !(from_base < 0);
|
unsigned_flag= !(from_base < 0);
|
||||||
if (from_base < 0)
|
|
||||||
dec= my_strntoll(res->charset(),res->ptr(),res->length(),-from_base,&endptr,&err);
|
if (args[0]->field_type() == MYSQL_TYPE_BIT)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Special case: The string representation of BIT doesn't resemble the
|
||||||
|
decimal representation, so we shouldn't change it to string and then to
|
||||||
|
decimal.
|
||||||
|
*/
|
||||||
|
dec= args[0]->val_int();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err);
|
{
|
||||||
|
if (from_base < 0)
|
||||||
|
dec= my_strntoll(res->charset(), res->ptr(), res->length(),
|
||||||
|
-from_base, &endptr, &err);
|
||||||
|
else
|
||||||
|
dec= (longlong) my_strntoull(res->charset(), res->ptr(), res->length(),
|
||||||
|
from_base, &endptr, &err);
|
||||||
|
}
|
||||||
|
|
||||||
ptr= longlong2str(dec, ans, to_base);
|
ptr= longlong2str(dec, ans, to_base);
|
||||||
if (str->copy(ans, (uint32) (ptr-ans), default_charset()))
|
if (str->copy(ans, (uint32) (ptr-ans), default_charset()))
|
||||||
return &my_empty_string;
|
return &my_empty_string;
|
||||||
|
Reference in New Issue
Block a user