diff options
author | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2010-11-26 14:51:48 +0200 |
---|---|---|
committer | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2010-11-26 14:51:48 +0200 |
commit | db8bd7beb83e513870b16ea95381018a48a4079d (patch) | |
tree | c48ad0e6cae3c6805e0e56810c191edf4210919f /sql/item_func.cc | |
parent | 01e0be66ddb4e404ab7ae1e218996d57655635ed (diff) | |
parent | b7e69aef10867289cfd09f3fa8ed41c296ca8647 (diff) | |
download | mariadb-git-db8bd7beb83e513870b16ea95381018a48a4079d.tar.gz |
merge
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 22af67fea3a..b542969cfb0 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1363,9 +1363,13 @@ longlong Item_func_int_div::val_int() signal_divide_by_null(); return 0; } - return (unsigned_flag ? - (ulonglong) value / (ulonglong) val2 : - value / val2); + + if (unsigned_flag) + return ((ulonglong) value / (ulonglong) val2); + else if (value == LONGLONG_MIN && val2 == -1) + return LONGLONG_MIN; + else + return value / val2; } @@ -1399,9 +1403,9 @@ longlong Item_func_mod::int_op() if (args[0]->unsigned_flag) result= args[1]->unsigned_flag ? ((ulonglong) value) % ((ulonglong) val2) : ((ulonglong) value) % val2; - else - result= args[1]->unsigned_flag ? - value % ((ulonglong) val2) : value % val2; + else result= args[1]->unsigned_flag ? + value % ((ulonglong) val2) : + (val2 == -1) ? 0 : value % val2; return result; } @@ -5304,7 +5308,17 @@ void Item_func_match::init_search(bool no_order) /* Check if init_search() has been called before */ if (ft_handler) + { + /* + We should reset ft_handler as it is cleaned up + on destruction of FT_SELECT object + (necessary in case of re-execution of subquery). + TODO: FT_SELECT should not clean up ft_handler. + */ + if (join_key) + table->file->ft_handler= ft_handler; DBUG_VOID_RETURN; + } if (key == NO_SUCH_KEY) { |