diff options
author | unknown <bar@mysql.com/bar.intranet.mysql.r18.ru> | 2006-10-03 11:53:01 +0500 |
---|---|---|
committer | unknown <bar@mysql.com/bar.intranet.mysql.r18.ru> | 2006-10-03 11:53:01 +0500 |
commit | dc62ff5560fcd8596cba19b767cfb39396309d4f (patch) | |
tree | d817c79ed018d850caab48239bdf4919bf3da782 /sql/item_func.cc | |
parent | b8fe620615adb5a5ab6804689e5111b4d9952c2e (diff) | |
parent | a1017b09b4a76f3cb827bae318ab8785e65b341b (diff) | |
download | mariadb-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.cc | 20 |
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(); |