Commit b0ec1cd8 authored by gluh@mysql.com's avatar gluh@mysql.com

Merge mysql.com:/home/gluh/MySQL/Merge/4.1

into mysql.com:/home/gluh/MySQL/Merge/5.0
parents 738e0f15 672e1f20
......@@ -876,3 +876,6 @@ abc abc c bc abc
abcd abcd d cd bcd abcd
abcde abcde e de cde bcde abcde
drop table t1;
select hex(29223372036854775809), hex(-29223372036854775809);
hex(29223372036854775809) hex(-29223372036854775809)
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
......@@ -608,3 +608,8 @@ insert t1 values ('ab'), ('abc'), ('abcd'), ('abcde');
select *,substring(b,1),substring(b,-1),substring(b,-2),substring(b,-3),substring(b,-4),substring(b,-5) from t1;
select * from (select *,substring(b,1),substring(b,-1),substring(b,-2),substring(b,-3),substring(b,-4),substring(b,-5) from t1) t;
drop table t1;
#
# Bug #9854 hex() and out of range handling
#
select hex(29223372036854775809), hex(-29223372036854775809);
......@@ -2380,9 +2380,21 @@ String *Item_func_hex::val_str(String *str)
DBUG_ASSERT(fixed == 1);
if (args[0]->result_type() != STRING_RESULT)
{
/* Return hex of unsigned longlong value */
longlong dec= args[0]->val_int();
ulonglong dec;
char ans[65],*ptr;
/* Return hex of unsigned longlong value */
if (args[0]->result_type() == REAL_RESULT)
{
double val= args[0]->val();
if ((val <= (double) LONGLONG_MIN) ||
(val >= (double) (ulonglong) ULONGLONG_MAX))
dec= ~(longlong) 0;
else
dec= (ulonglong) (val + (val > 0 ? 0.5 : -0.5));
}
else
dec= (ulonglong) args[0]->val_int();
if ((null_value= args[0]->null_value))
return 0;
ptr= longlong2str(dec,ans,16);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment