summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorunknown <bar@mysql.com/bar.intranet.mysql.r18.ru>2006-10-03 11:53:01 +0500
committerunknown <bar@mysql.com/bar.intranet.mysql.r18.ru>2006-10-03 11:53:01 +0500
commitdc62ff5560fcd8596cba19b767cfb39396309d4f (patch)
treed817c79ed018d850caab48239bdf4919bf3da782 /sql/item_func.cc
parentb8fe620615adb5a5ab6804689e5111b4d9952c2e (diff)
parenta1017b09b4a76f3cb827bae318ab8785e65b341b (diff)
downloadmariadb-git-dc62ff5560fcd8596cba19b767cfb39396309d4f.tar.gz
Merge mysql.com:/usr/home/bar/mysql-4.1.b8663
into mysql.com:/usr/home/bar/mysql-4.1-rpl mysql-test/r/cast.result: Auto merged mysql-test/r/ps.result: Auto merged sql/item_func.cc: Auto merged
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 91ccef6511f..fafefd460f9 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -508,6 +508,26 @@ longlong Item_func_unsigned::val_int()
longlong value;
int error;
+ if (args[0]->result_type() == REAL_RESULT)
+ {
+ double dvalue= args[0]->val();
+ if ((null_value= args[0]->null_value))
+ return 0;
+ if (dvalue <= (double) LONGLONG_MIN)
+ {
+ return LONGLONG_MIN;
+ }
+ if (dvalue >= (double) (ulonglong) ULONGLONG_MAX)
+ {
+ return (longlong) ULONGLONG_MAX;
+ }
+ if (dvalue >= (double) (ulonglong) LONGLONG_MAX)
+ {
+ return (ulonglong) (dvalue + (dvalue > 0 ? 0.5 : -0.5));
+ }
+ return (longlong) (dvalue + (dvalue > 0 ? 0.5 : -0.5));
+ }
+
if (args[0]->cast_to_int_type() != STRING_RESULT)
{
value= args[0]->val_int();